* #10 add localization * #10 revert locale from dev page * #10 add more examples * #10 localize auth panel * #10 localize some comment message * #10 localize some comment form message * #10 translate vote messages * #10 translate comment message * #10 use messages value for translate reference * #10 fix compile issue * #10 use messages value for translate reference * #10 use messages value for translate reference * #10 use messages value for translate reference * #10 use messages value for translate reference * #10 use messages value for translate reference * #10 translate comment message * #10 translate comment form * #10 translate comment form * #10 translate root component * #10 translate user info * #10 translate settings * #10 translate settings * #10 translate toolbar * #10 translate errors messages * #10 sort dict * #10 fix after rebase * #10 localize anonymousLoginForm * #10 localize emailLoginForm * #10 update size-limit * #10 localize subscribe by rss * #10 localize subscribe by email * #10 add de locale * #10 increase limit size * #10 auto generate loadLocale * #10 add some documentation * #10 fix error messages * fix typo * don't bundle en locale * fix message id * change size limits * Update extract message pattern Co-Authored-By: Pavel Mineev <pavel@mineev.me> Co-authored-by: Pavel Mineev <pavel@mineev.me>
47 lines
1.4 KiB
JavaScript
47 lines
1.4 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const defaultMessages = require('../extracted-messages/messages');
|
|
const { renderLoadLocale } = require('./localeLoadTemplate');
|
|
const { getSupportedLocales } = require('./getSupportedLocales');
|
|
|
|
const locales = getSupportedLocales();
|
|
|
|
const keyMessagePairs = [];
|
|
const keysSet = new Set();
|
|
defaultMessages.forEach(({ id, defaultMessage }) => {
|
|
keyMessagePairs.push([id, defaultMessage]);
|
|
keysSet.add(id);
|
|
});
|
|
|
|
function removeAbandonedKeys(existKeys, dictionary) {
|
|
return Object.fromEntries(Object.entries(dictionary).filter(([key]) => existKeys.has(key)));
|
|
}
|
|
|
|
function sortDict(dict) {
|
|
return Object.fromEntries(
|
|
Object.entries(dict).sort(([a], [b]) => {
|
|
return a.localeCompare(b);
|
|
})
|
|
);
|
|
}
|
|
|
|
locales.forEach(locale => {
|
|
let currentDict = {};
|
|
const pathToDict = path.resolve(__dirname, `../app/locales/${locale}.json`);
|
|
if (fs.existsSync(pathToDict)) {
|
|
currentDict = require(pathToDict);
|
|
}
|
|
keyMessagePairs.forEach(([key, defaultMessage]) => {
|
|
if (!currentDict[key] || locale === `en`) {
|
|
currentDict[key] = defaultMessage;
|
|
}
|
|
});
|
|
currentDict = removeAbandonedKeys(keysSet, currentDict);
|
|
currentDict = sortDict(currentDict);
|
|
fs.writeFileSync(pathToDict, JSON.stringify(currentDict, null, 2) + '\n');
|
|
fs.writeFileSync(
|
|
path.resolve(__dirname, `../app/utils/loadLocale.ts`),
|
|
renderLoadLocale(locales.filter(locale => locale !== 'en'))
|
|
);
|
|
});
|