Merge pull request #4971 from vector-im/dbkr/fix_weblate_plurals

Fix plurals in translations
pull/4977/head
David Baker 2017-09-05 11:13:58 +01:00 committed by GitHub
commit a94710a9a5
1 changed files with 38 additions and 1 deletions

View File

@ -156,7 +156,7 @@ function genLangFile(lang, dest) {
const reactSdkFile = 'node_modules/matrix-react-sdk/src/i18n/strings/' + lang + '.json'; const reactSdkFile = 'node_modules/matrix-react-sdk/src/i18n/strings/' + lang + '.json';
const riotWebFile = 'src/i18n/strings/' + lang + '.json'; const riotWebFile = 'src/i18n/strings/' + lang + '.json';
const translations = {}; let translations = {};
[reactSdkFile, riotWebFile].forEach(function(f) { [reactSdkFile, riotWebFile].forEach(function(f) {
if (fs.existsSync(f)) { if (fs.existsSync(f)) {
Object.assign( Object.assign(
@ -165,6 +165,9 @@ function genLangFile(lang, dest) {
); );
} }
}); });
translations = weblateToCounterpart(translations)
fs.writeFileSync(dest + lang + '.json', JSON.stringify(translations, null, 4)); fs.writeFileSync(dest + lang + '.json', JSON.stringify(translations, null, 4));
if (verbose) { if (verbose) {
console.log("Generated language file: " + lang); console.log("Generated language file: " + lang);
@ -193,5 +196,39 @@ function genLangList() {
} }
} }
/**
* Convert translation key from weblate format
* (which only supports a single level) to counterpart
* which requires object values for 'count' translations.
*
* eg.
* "there are %(count)s badgers|one": "a badger",
* "there are %(count)s badgers|other": "%(count)s badgers"
* becomes
* "there are %(count)s badgers": {
* "one": "a badger",
* "other": "%(count)s badgers"
* }
*/
function weblateToCounterpart(inTrs) {
const outTrs = {};
for (const key of Object.keys(inTrs)) {
const keyParts = key.split('|', 2);
if (keyParts.length === 2) {
let obj = outTrs[keyParts[0]];
if (obj === undefined) {
obj = {};
outTrs[keyParts[0]] = obj;
}
obj[keyParts[1]] = inTrs[key];
} else {
outTrs[key] = inTrs[key];
}
}
return outTrs;
}
genLangList(); genLangList();
next(0); next(0);