Fix Russian Russia Transifex upload mapping

Map ru-RU to supported ru_RU and report its file alias instead of uploading twice. Keep unsupported Aromanian failures visible rather than mapping to Romanian. Offline upload and loader tests pass; no uploads were run.

Thanks to xet7 !
This commit is contained in:
Lauri Ojansivu committed 2026-09-13 18:36:34 +03:00
1 parent 8a666b646b
commit e6aed7a8cd
3 files changed
+11 -4

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
[main]
host = https://www.transifex.com
lang_map = te_IN: te-IN, es_AR: es-AR, es_CO: es-CO, es_419: es-LA, es_TX: es-TX, he_IL: he-IL, zh_CN: zh-CN, ar_EG: ar-EG, cs_CZ: cs-CZ, fa_IR: fa-IR, ms_MY: ms-MY, nl_NL: nl-NL, de_CH: de-CH, en_IT: en-IT, uz_UZ: uz-UZ, fr_CH: fr-CH, fr_BE: fr-BE, fr_CA: fr-CA, km_KH: km-KH, gug_PY: gn, hi_IN: hi-IN, et_EE: et-EE, es_PE: es-PE, es_MX: es-MX, gl_ES: gl-ES, mn_MN: mn, zh_TW: zh-TW, ast_ES: ast-ES, es_CL: es-CL, ja_JP: ja-JP, lv_LV: lv, ro_RO: ro-RO, az_AZ: az-AZ, cy_GB: cy-GB, gu_IN: gu-IN, pl_PL: pl-PL, vep: ve-PP, en_BR: en-BR, en@ysv: en-YS, hu_HU: hu, ko_KR: ko-KR, pt_BR: pt-BR, pt_PT: pt-PT, zh_HK: zh-HK, zu_ZA: zu-ZA, en_MY: en-MY, ja-Hira: ja-HI, fi_FI: fi, vec: ve-CC, vi_VN: vi-VN, fr_FR: fr-FR, id_ID: id, zh_Hans: zh-Hans, en_DE: en-DE, en_GB: en-GB, el_GR: el-GR, uk_UA: uk-UA, az@latin: az-LA, de_AT: de-AT, uz@Latn: uz-LA, vls: vl-SS, ar_DZ: ar-DZ, bg_BG: bg, es_PY: es-PY, fy_NL: fy-NL, uz@Arab: uz-AR, ru_UA: ru-UA, war: wa-RR, zh_CN.GB2312: zh-GB
lang_map = te_IN: te-IN, es_AR: es-AR, es_CO: es-CO, es_419: es-LA, es_TX: es-TX, he_IL: he-IL, zh_CN: zh-CN, ar_EG: ar-EG, cs_CZ: cs-CZ, fa_IR: fa-IR, ms_MY: ms-MY, nl_NL: nl-NL, de_CH: de-CH, en_IT: en-IT, uz_UZ: uz-UZ, fr_CH: fr-CH, fr_BE: fr-BE, fr_CA: fr-CA, km_KH: km-KH, gug_PY: gn, hi_IN: hi-IN, et_EE: et-EE, es_PE: es-PE, es_MX: es-MX, gl_ES: gl-ES, mn_MN: mn, zh_TW: zh-TW, ast_ES: ast-ES, es_CL: es-CL, ja_JP: ja-JP, lv_LV: lv, ro_RO: ro-RO, az_AZ: az-AZ, cy_GB: cy-GB, gu_IN: gu-IN, pl_PL: pl-PL, vep: ve-PP, en_BR: en-BR, en@ysv: en-YS, hu_HU: hu, ko_KR: ko-KR, pt_BR: pt-BR, pt_PT: pt-PT, zh_HK: zh-HK, zu_ZA: zu-ZA, en_MY: en-MY, ja-Hira: ja-HI, fi_FI: fi, vec: ve-CC, vi_VN: vi-VN, fr_FR: fr-FR, id_ID: id, zh_Hans: zh-Hans, en_DE: en-DE, en_GB: en-GB, el_GR: el-GR, uk_UA: uk-UA, az@latin: az-LA, de_AT: de-AT, uz@Latn: uz-LA, vls: vl-SS, ar_DZ: ar-DZ, bg_BG: bg, es_PY: es-PY, fy_NL: fy-NL, uz@Arab: uz-AR, ru_UA: ru-UA, ru_RU: ru-RU, war: wa-RR, zh_CN.GB2312: zh-GB
[o:wekan:p:wekan:r:application]
file_filter = imports/i18n/data/<lang>.i18n.json
+8 -1
View File
@@ -54,7 +54,7 @@ of that remote target. The explicit mapping selects `es-CO.i18n.json`, and the
script reports the alias instead of uploading the same target twice. Both local
files remain available; all nine differences were reviewed, with three erroneous values repaired and
seven valid wording alternatives retained.
The offline dry run reports 242 distinct targets and the English source.
The offline dry run reports 241 distinct targets and the English source.
French Belgium/Canada use `fr_BE`/`fr_CA`, Khmer Cambodia uses `km_KH`,
and Guarani uses Transifex's `gug_PY`. The Khmer hyphen/underscore files
@@ -67,3 +67,10 @@ Portuguese Portugal maps `pt-PT.i18n.json` to `pt_PT`; the local underscore
variant shares the remote target and is reported as an alias. Local variants
keep their wording; only the explicitly mapped canonical file round-trips
through Transifex. The canonical file remains registered and loaded.
Russian Russia maps `ru-RU` to `ru_RU`; its symlink/underscore filenames
share one remote target and are reported rather than uploaded twice.
Aromanian (`rup`) is absent from the current public Transifex catalogue and
remains a reported registration failure. It must not be mapped to Romanian
(`ro`), because those are different languages.
+2 -2
View File
@@ -17,7 +17,7 @@ const root = path.resolve(__dirname, '..');
assert.equal(colombian[0].file, 'es-CO', 'explicit mapping chooses canonical local file');
assert.deepEqual(colombian[0].aliases, ['es_CO']);
assert.ok(!localLanguages(config).some(row => row.code === 'es-CO'), 'never register an unsupported hyphenated code');
for (const [file, code] of [['fr-BE','fr_BE'], ['fr-CA','fr_CA'], ['km-KH','km_KH'], ['gn','gug_PY'], ['pt-PT','pt_PT']]) {
for (const [file, code] of [['fr-BE','fr_BE'], ['fr-CA','fr_CA'], ['km-KH','km_KH'], ['gn','gug_PY'], ['pt-PT','pt_PT'], ['ru-RU','ru_RU']]) {
assert.equal(localLanguages(config).find(row => row.file === file).code, code);
assert.ok(!localLanguages(config).some(row => row.code === file));
}
@@ -75,6 +75,6 @@ const root = path.resolve(__dirname, '..');
assert.equal(network, 0, 'pagination cannot send credentials to another origin');
const dry = cp.spawnSync('sh', [path.join(root, 'releases/translations/push-all-translations.sh'), '--dry-run'], { cwd: path.join(root, '.tools/tmp'), env: { ...process.env, NODE_BIN: process.execPath }, encoding: 'utf8' });
assert.equal(dry.status, 0, dry.stderr);
assert.match(dry.stdout, /242 targets and source en; no network requests/);
assert.match(dry.stdout, /241 targets and source en; no network requests/);
console.log('transifexForcePush: full uploads, polling, mapped languages, additive registration, failure continuation and summary, token origin boundary and offline wrapper passed');
})().catch(error => { console.error(error); process.exitCode = 1; });