You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.8 KiB
52 lines
1.8 KiB
// 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; |
|
|
|
|
|
|