mirror of https://github.com/vector-im/riot-web
Merge pull request #4971 from vector-im/dbkr/fix_weblate_plurals
Fix plurals in translationspull/4977/head
commit
a94710a9a5
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue