Files
remark42/frontend/tasks/generateDictionary.js
T
b22cd5f76a Add localization (#602)
* #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>
2020-03-04 14:56:00 -06:00

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'))
);
});