Fix French Khmer and Guarani Transifex language identifiers

Use supported fr_BE, fr_CA, km_KH and gug_PY codes. Collapse the Khmer file alias to one target. Keep unsupported Manx and Ladin failures visible; Ladino is a different language. Offline upload regressions pass; no uploads were run.

Thanks to xet7 !
This commit is contained in:
Lauri Ojansivu committed 2026-09-13 18:31:49 +03:00
1 parent d5363a26bf
commit cb68305053
3 files changed
+14 -3

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, 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, 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, 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
[o:wekan:p:wekan:r:application]
file_filter = imports/i18n/data/<lang>.i18n.json
+8 -1
View File
@@ -54,4 +54,11 @@ 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 244 distinct targets and the English source.
The offline dry run reports 243 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
share one target. Transifex's public catalogue currently lists no Manx (`gv`)
or Ladin (`lld`); these failures remain visible. Ladin must not be mapped to
Ladino (`lad`), which is a different language. Catalogue reference:
https://explore.transifex.com/languages/
+5 -1
View File
@@ -17,6 +17,10 @@ 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']]) {
assert.equal(localLanguages(config).find(row => row.file === file).code, code);
assert.ok(!localLanguages(config).some(row => row.code === file));
}
const content = JSON.stringify({ title: 'Title __card__', empty: '' });
const source = JSON.parse(content);
assert.doesNotThrow(() => validateTranslation(content, source), 'intentional empty source strings are valid');
@@ -71,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, /244 targets and source en; no network requests/);
assert.match(dry.stdout, /243 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; });