From b55174e5e9224db10b69be93d83253f6fb1d7cba Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 4 Sep 2017 17:12:13 +0100 Subject: [PATCH] Fix plurals in translations See https://github.com/matrix-org/matrix-react-sdk/pull/1358 Requires https://github.com/matrix-org/matrix-react-sdk/pull/1358 --- scripts/copy-res.js | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/scripts/copy-res.js b/scripts/copy-res.js index fa52492e..ac3daf60 100755 --- a/scripts/copy-res.js +++ b/scripts/copy-res.js @@ -156,7 +156,7 @@ function genLangFile(lang, dest) { const reactSdkFile = 'node_modules/matrix-react-sdk/src/i18n/strings/' + lang + '.json'; const riotWebFile = 'src/i18n/strings/' + lang + '.json'; - const translations = {}; + let translations = {}; [reactSdkFile, riotWebFile].forEach(function(f) { if (fs.existsSync(f)) { Object.assign( @@ -165,6 +165,9 @@ function genLangFile(lang, dest) { ); } }); + + translations = weblateToCounterpart(translations) + fs.writeFileSync(dest + lang + '.json', JSON.stringify(translations, null, 4)); if (verbose) { 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(); next(0);