Change locales file generation to use JSON sources (#2028)

* Change locales file generation to use JSON sources

Instead of inheriting in JS files, set locale inheritance in the
theme's YML file, and inherit in the generated locale file, rather
than the source file.

* Convert glitch-soc JS translation files to JSON

Obtained running the following:

```sh
sed -i -z "s/import inherited from '.*';\s*\nconst messages = //" *.js
sed -i "s/\s*\/\/.*//" *.js
sed -i -z "s/;\s*export default .*/\n/" *.js
for i in *.js; do
  json5 $i | json_pp > ${i}on;
done
```

* Change `yarn manage:translations` to exclude any translation already defined upstream

* Run yarn manage:translations
This commit is contained in:
Claire
2022-12-21 22:13:14 +01:00
committed by GitHub
parent 18bcabf26a
commit a5e446a4a0
256 changed files with 18167 additions and 1754 deletions

View File

@ -20,18 +20,25 @@ module.exports = Object.keys(flavours).reduce(function (map, entry) {
if (!flavour.locales) {
return map;
}
const locales = readdirSync(flavour.locales).filter(
filename => /\.js(?:on)?$/.test(filename) && !/defaultMessages|whitelist|index/.test(filename)
);
const locales = readdirSync(flavour.locales).filter(filename => {
return /\.json$/.test(filename) &&
!/defaultMessages/.test(filename) &&
!/whitelist/.test(filename);
}).map(filename => filename.replace(/\.json$/, ''));
let inherited_locales_path = null;
if (flavour.inherit_locales && flavours[flavour.inherit_locales]?.locales) {
inherited_locales_path = flavours[flavour.inherit_locales]?.locales;
}
const outPath = resolve('tmp', 'locales', entry);
rimraf.sync(outPath);
mkdirp.sync(outPath);
locales.forEach(function (locale) {
const localeName = locale.replace(/\.js(?:on)?$/, '');
const localePath = join(outPath, `${localeName}.js`);
const baseLocale = localeName.split('-')[0]; // e.g. 'zh-TW' -> 'zh'
const localePath = join(outPath, `${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`,
@ -45,21 +52,22 @@ module.exports = Object.keys(flavours).reduce(function (map, entry) {
filename => filename.replace(/(?:node_modules|app\/javascript)\//, '')
)[0];
const localeContent = `//
// locales/${entry}/${localeName}.js
// locales/${entry}/${locale}.js
// automatically generated by generateLocalePacks.js
//
import messages from '../../../${flavour.locales}/${locale.replace(/\.js$/, '')}';
${inherited_locales_path ? `import inherited from '../../../${inherited_locales_path}/${locale}.json';` : ''}
import messages from '../../../${flavour.locales}/${locale}.json';
import localeData from '${localeDataPath}';
import { setLocale } from 'locales';
setLocale({
localeData,
messages,
${inherited_locales_path ? 'messages: Object.assign({}, inherited, messages)' : 'messages'},
});
`;
writeFileSync(localePath, localeContent, 'utf8');
map[`locales/${entry}/${localeName}`] = localePath;
map[`locales/${entry}/${locale}`] = localePath;
});
return map;