diff options
Diffstat (limited to 'config/webpack/generateLocalePacks.js')
-rw-r--r-- | config/webpack/generateLocalePacks.js | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/config/webpack/generateLocalePacks.js b/config/webpack/generateLocalePacks.js new file mode 100644 index 000000000..10a66e994 --- /dev/null +++ b/config/webpack/generateLocalePacks.js @@ -0,0 +1,52 @@ +// To avoid adding a lot of boilerplate, locale packs are +// automatically generated here. These are written into the tmp/ +// directory and then used to generate locale_en.js, locale_fr.js, etc. + +const fs = require('fs'); +const path = require('path'); +const rimraf = require('rimraf'); +const mkdirp = require('mkdirp'); + +const localesJsonPath = path.join(__dirname, '../../app/javascript/mastodon/locales'); +const locales = fs.readdirSync(localesJsonPath).filter(filename => { + return /\.json$/.test(filename) && + !/defaultMessages/.test(filename) && + !/whitelist/.test(filename); +}).map(filename => filename.replace(/\.json$/, '')); + +const outPath = path.join(__dirname, '../../tmp/packs'); + +rimraf.sync(outPath); +mkdirp.sync(outPath); + +const outPaths = []; + +locales.forEach(locale => { + const localePath = path.join(outPath, `locale_${locale}.js`); + const baseLocale = locale.split('-')[0]; // e.g. 'zh-TW' -> 'zh' + const localeDataPath = [ + // first try react-intl + `../../node_modules/react-intl/locale-data/${baseLocale}.js`, + // then check locales/locale-data + `../../app/javascript/mastodon/locales/locale-data/${baseLocale}.js`, + // fall back to English (this is what react-intl does anyway) + `../../node_modules/react-intl/locale-data/en.js`, + ].filter(filename => fs.existsSync(path.join(outPath, filename))) + .map(filename => filename.replace(/..\/..\/node_modules\//, ''))[0]; + + const localeContent = `// +// locale_${locale}.js +// automatically generated by generateLocalePacks.js +// +import messages from '../../app/javascript/mastodon/locales/${locale}.json'; +import localeData from ${JSON.stringify(localeDataPath)}; +import { setLocale } from '../../app/javascript/mastodon/locales'; +setLocale({messages, localeData}); +`; + fs.writeFileSync(localePath, localeContent, 'utf8'); + outPaths.push(localePath); +}); + +module.exports = outPaths; + + |