Page MenuHomePhabricator

$.i18n() does not handle fallback for Chinese properly
Closed, ResolvedPublicBUG REPORT

Description

Translations for Chinese are usually split into zh-hans and zh-hant. After loading them using $.i18n().load(), the only zh interface languages which get a translation are zh-hans and zh-hant. All the others use the value for en.

MediaWiki's defined fallback chain says that zh, zh-cn, zh-my and zh-sg should fall back to zh-hans, and zh-hk, zh-mo and zh-tw should fall back to zh-hant. It is not doing that, which leads to inconsistent behaviour depending on how translations are loaded.

An example which loads zh-hans and zh-hant translations and then prints the value for each zh language code:

$.i18n().load({
	"en": { "testkey": "en value" },
	"zh-hans": { "testkey": "zh-hans value" },
	"zh-hant": { "testkey": "zh-hant value" }
});

for (let code of ["zh", "zh-hans", "zh-hant", "zh-cn", "zh-hk", "zh-mo", "zh-my", "zh-sg", "zh-tw"]) {
	$.i18n().locale = code;
	console.log(code + ": " + $.i18n("testkey"));
}

The output:

zh: en value
zh-hans: zh-hans value
zh-hant: zh-hant value
zh-cn: en value
zh-hk: en value
zh-mo: en value
zh-my: en value
zh-sg: en value
zh-tw: en value

The output of mw.language.getFallbackLanguageChain();:

  • uselang=zh: ['zh', 'zh-hans', 'zh-hant', 'zh-cn', 'zh-tw', 'zh-hk', 'en']
  • uselang=zh-cn: ['zh-cn', 'zh-hans', 'zh', 'zh-hant', 'en']
  • uselang=zh-hans: ['zh-hans', 'zh-cn', 'zh', 'zh-hant', 'en']
  • uselang=zh-hant: ['zh-hant', 'zh-tw', 'zh-hk', 'zh', 'zh-hans', 'en']
  • uselang=zh-hk: ['zh-hk', 'zh-hant', 'zh-tw', 'zh', 'zh-hans', 'en']
  • uselang=zh-mo: ['zh-mo', 'zh-hk', 'zh-hant', 'zh-tw', 'zh', 'zh-hans', 'en']
  • uselang=zh-my: ['zh-my', 'zh-sg', 'zh-hans', 'zh-cn', 'zh', 'zh-hant', 'en']
  • uselang=zh-sg: ['zh-sg', 'zh-hans', 'zh-cn', 'zh', 'zh-hant', 'en']
  • uselang=zh-tw: ['zh-tw', 'zh-hant', 'zh-hk', 'zh', 'zh-hans', 'en']

Event Timeline

The $.i18n.fallbacks array is overridden to an empty array by the ULS extension (commit 728421587).

Change 979220 had a related patch set uploaded (by Winston Sung; author: Winston Sung):

[mediawiki/extensions/UniversalLanguageSelector@master] UniversalLanguageSelector: Fix JavaScript language fallback mapping being overridden

https://gerrit.wikimedia.org/r/979220

Winston_Sung changed the task status from Open to In Progress.Dec 1 2023, 4:03 PM
Winston_Sung added a subscriber: Amire80.
Winston_Sung changed the subtype of this task from "Task" to "Bug Report".

Change 979220 merged by jenkins-bot:

[mediawiki/extensions/UniversalLanguageSelector@master] ULS: Fix JavaScript language fallback mapping being overridden

https://gerrit.wikimedia.org/r/979220

Change 988259 had a related patch set uploaded (by Winston Sung; author: Winston Sung):

[mediawiki/extensions/UniversalLanguageSelector@REL1_39] ULS: Fix JavaScript language fallback mapping being overridden

https://gerrit.wikimedia.org/r/988259

Change 988260 had a related patch set uploaded (by Winston Sung; author: Winston Sung):

[mediawiki/extensions/UniversalLanguageSelector@REL1_40] ULS: Fix JavaScript language fallback mapping being overridden

https://gerrit.wikimedia.org/r/988260

Change 988261 had a related patch set uploaded (by Winston Sung; author: Winston Sung):

[mediawiki/extensions/UniversalLanguageSelector@REL1_41] ULS: Fix JavaScript language fallback mapping being overridden

https://gerrit.wikimedia.org/r/988261

Change 988259 merged by jenkins-bot:

[mediawiki/extensions/UniversalLanguageSelector@REL1_39] ULS: Fix JavaScript language fallback mapping being overridden

https://gerrit.wikimedia.org/r/988259

Change 988260 merged by jenkins-bot:

[mediawiki/extensions/UniversalLanguageSelector@REL1_40] ULS: Fix JavaScript language fallback mapping being overridden

https://gerrit.wikimedia.org/r/988260

Change 988261 merged by jenkins-bot:

[mediawiki/extensions/UniversalLanguageSelector@REL1_41] ULS: Fix JavaScript language fallback mapping being overridden

https://gerrit.wikimedia.org/r/988261

Winston_Sung claimed this task.
Winston_Sung moved this task from Extensions/Skins to Closed on the Chinese-Sites board.
Winston_Sung updated Other Assignee, added: ngkountas.
Winston_Sung moved this task from Untriaged to Fallback on the I18n board.
Winston_Sung moved this task from Backlog to Code failures on the UniversalLanguageSelector board.
Winston_Sung added a subscriber: ngkountas.

Wikimedia Meta-Wiki already on MediaWiki 1.42.0-wmf.13 , tested and solved.

圖片.png (887×1 px, 234 KB)