mirror of
https://github.com/lunaisnotaboy/mastodon.git
synced 2024-11-09 00:15:05 +00:00
71 lines
2.3 KiB
JavaScript
71 lines
2.3 KiB
JavaScript
// 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];
|
|
|
|
let glitchInject = `
|
|
const mergedMessages = messages;
|
|
`;
|
|
|
|
const glitchPath = `../../app/javascript/glitch/locales/${locale}.json`;
|
|
if (fs.existsSync(path.join(outPath, glitchPath))) {
|
|
glitchInject = `
|
|
import glitchMessages from ${JSON.stringify(glitchPath)};
|
|
|
|
let mergedMessages = messages;
|
|
Object.keys(glitchMessages).forEach(function (key) {
|
|
mergedMessages[key] = glitchMessages[key];
|
|
});
|
|
|
|
`;
|
|
}
|
|
|
|
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 'locales';
|
|
${glitchInject}
|
|
setLocale({messages: mergedMessages, localeData: localeData});
|
|
`;
|
|
fs.writeFileSync(localePath, localeContent, 'utf8');
|
|
outPaths.push(localePath);
|
|
});
|
|
|
|
module.exports = outPaths;
|
|
|
|
|