Page MenuHomePhabricator

Add language redirects or backwards fallbacks for Special:MyLanguage
Closed, ResolvedPublic

Description

Some site such as mediawiki.org, only allow tranlation to zh, so users set zh-cn or others as their language will fallback to en.

Test scope:

c24d9ec CommonSettings.php#3075

	$wgTranslateDisabledTargetLanguages = [
		'*' => [
			'gan-hans' => 'Translate in gan please.',
			'gan-hant' => 'Translate in gan please.',
			'ike-cans' => 'Translate in iu please.',
			'ike-latn' => 'Translate in iu please.',
			'kk-cyrl' => 'Translate in kk please.',
			'kk-latn' => 'Translate in kk please.',
			'kk-arab' => 'Translate in kk please.',
			'kk-kz'   => 'Translate in kk please.',
			'kk-tr'   => 'Translate in kk please.',
			'kk-cn'   => 'Translate in kk please.',
			'ku-latn' => 'Translate in ku please.',
			'ku-arab' => 'Translate in ku please.',
			'shi-tfng' => 'Translate in shi please.',
			'shi-latn' => 'Translate in shi please.',
			'sr-ec' => 'Translate in sr please.',
			'sr-el' => 'Translate in sr please.',
			'tg-latn' => 'Translate in tg please.',
			'zh-hans' => 'Translate in zh please.',
			'zh-hant' => 'Translate in zh please.',
			'zh-cn' => 'Translate in zh please.',
			'zh-hk' => 'Translate in zh please.',
			'zh-mo' => 'Translate in zh please.',
			'zh-my' => 'Translate in zh please.',
			'zh-sg' => 'Translate in zh please.',
			'zh-tw' => 'Translate in zh please.',
		],
	];

Current solution:

Adding base language to each language variant's fallback chain.
For example, zh will be added to $fallback in \languages\messages\MessagesZh_*.php

Current status:

/* gan-related: Done in zh-related https://gerrit.wikimedia.org/r/c/703560 */
'gan-hans' => 'gan',
'gan-hant' => 'gan',

/* iu/ike-related: Done in https://gerrit.wikimedia.org/r/c/804536 */
'ike-cans' => 'iu',
'ike-latn' => 'iu',

/* kk-related: Done in https://gerrit.wikimedia.org/r/804537 */
'kk-cyrl' => 'kk',
'kk-latn' => 'kk',
'kk-arab' => 'kk',
'kk-kz'   => 'kk',
'kk-tr'   => 'kk',
'kk-cn'   => 'kk',

/* ku-related: Done in https://gerrit.wikimedia.org/r/804538 */
'ku-latn' => 'ku',
'ku-arab' => 'ku',

/* shi-related: Not an user interface language option */
'shi-tfng' => 'shi'
'shi-latn' => 'shi',

/* sr-related: Done in https://gerrit.wikimedia.org/r/c/804544 */
'sr-ec' => 'sr',
'sr-el' => 'sr',

/* tg-related: Done in https://gerrit.wikimedia.org/r/c/804545 */
'tg-latn' => 'tg',

/* zh-related: Done in https://gerrit.wikimedia.org/r/c/703560 */
'zh-hans' => 'zh',
'zh-hant' => 'zh',
'zh-cn' => 'zh',
'zh-hk' => 'zh',
'zh-mo' => 'zh',
'zh-my' => 'zh',
'zh-sg' => 'zh',
'zh-tw' => 'zh',

Note: Update File:MediaWiki_fallback_chains.svg as well.

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes
Func renamed this task from Add extra fallbacks for Special:MyLanguage to Add language redirects for Special:MyLanguage.Apr 6 2021, 5:40 AM
Func renamed this task from Add language redirects for Special:MyLanguage to Add language redirects or backwards fallbacks for Special:MyLanguage.Apr 17 2021, 12:43 PM

In Change 675291, @Nikerabbit wrote:
From product perspective this should just work out of the box and not require any configuration.

The underlying cause, which makes Chinese not work here, is that none of the Chinese languages include zh in their fallbacks. Adding zh to their fallback chains should be a simple fix, assuming there aren't any negative side effects.

There are few backwards fallbacks now, I don't know what are they intended for.
So I wonder if it suitable to add backwards language fallbacks for all the "Deprecated language codes" defined in CommonSettings.php#2904 just for subpage lookup.

I think this problem can be solved by @Winston_Sung's work about language fallbacks, is it? If so, I can abandon my ugly patch.

I'll look into it whether the patch will work for this case.

Confirmed. Updating the language fallback chain makes the Special:MyLanguage/* redirection works.

By the way, it seems Special:MyLanguage/* ignores the page language property and think the base page always stay the same with $wgLanguageCode , so setting base page "page language" to en in a zh wiki then test Special:MyLanguage/* with zh as the language preference won't redirect to /zh .

@Func
It would be great if the redirection logic tests ( tests/phpunit/includes/specials/SpecialMyLanguageTest.php ) could still be merged on your patch (after the language fallback chain update).

Yeah. Missing page language property check.

includes/specials/SpecialMyLanguage.php

		if ( $uiLang->equals( $contLang ) ) {
			// Short circuit when the current UI language is the
			// wiki's default language to avoid unnecessary page lookups.
			return $base;
		}

There should be a page language property check while page language can be different from $wgLanguageCode .

By the way, it seems Special:MyLanguage/* ignores the page language property and think the base page always stay the same with $wgLanguageCode , so setting base page "page language" to en in a zh wiki then test Special:MyLanguage/* with zh as the language preference won't redirect to /zh .

In which case language of the base page should be changed? Articles imported for translation? Can it simply go to subpage en and translate it to the base page?

For example:

  • Set a zh-Hant-TW (zh-tw) wiki site.
  • Changing the base page to en and marked for translation.
    • To prevent difficulty for non-zh-Hant-TW-user translators translating zh-Hant-TW to other languages, providing en instead of zh-Hant-TW as the source for translation.

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

[mediawiki/core@master] Rearrange zh/zh-* fallbacks, translations, aliases in mediawiki/core

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

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

[mediawiki/core@master] Update language fallback chain for yue

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

For example:

  • Set a zh-Hant-TW (zh-tw) wiki site.
  • Changing the base page to en and marked for translation.
    • To prevent difficulty for non-zh-Hant-TW-user translators translating zh-Hant-TW to other languages, providing en instead of zh-Hant-TW as the source for translation.

I saw another task mentioned similar use cases today (T301316), so I proposed a patch for it.

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

[mediawiki/core@wmf/1.39.0-wmf.10] Rearrange zh-related fallbacks and zh/zh-* translations, aliases in mediawiki/core

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

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

[mediawiki/core@wmf/1.39.0-wmf.9] Rearrange zh-related fallbacks and zh/zh-* translations, aliases in mediawiki/core

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

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

[mediawiki/core@wmf/1.39.0-wmf.9] Add tests closer to real use cases for Special:MyLanguage

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

Change 788606 abandoned by Winston Sung:

[mediawiki/core@wmf/1.39.0-wmf.9] Rearrange zh-related fallbacks and zh/zh-* translations, aliases in mediawiki/core

Reason:

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

Change 788611 abandoned by Winston Sung:

[mediawiki/core@wmf/1.39.0-wmf.9] Add tests closer to real use cases for Special:MyLanguage

Reason:

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

Change 788416 abandoned by Winston Sung:

[mediawiki/core@wmf/1.39.0-wmf.10] Rearrange zh-related fallbacks and zh/zh-* translations, aliases in mediawiki/core

Reason:

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

Change 788416 restored by Winston Sung:

[mediawiki/core@wmf/1.39.0-wmf.10] Rearrange zh-related fallbacks and zh/zh-* translations, aliases in mediawiki/core

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

Change 788606 restored by Winston Sung:

[mediawiki/core@wmf/1.39.0-wmf.9] Rearrange zh-related fallbacks and zh/zh-* translations, aliases in mediawiki/core

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

Change 788611 restored by Winston Sung:

[mediawiki/core@wmf/1.39.0-wmf.9] Add tests closer to real use cases for Special:MyLanguage

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

Change 703560 merged by jenkins-bot:

[mediawiki/core@master] Rearrange zh-related language fallback chain

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

The Chinese fallbacks can be tested now on translatewiki.net and on the beta cluster.

Change 675291 merged by jenkins-bot:

[mediawiki/core@master] Add tests closer to real use cases for Special:MyLanguage

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

MediaWiki.org is on 1.39.0-wmf.15 (6b53b5d) now, confirmed the Special:MyLanguage redirection works.

https://www.mediawiki.org/wiki/Special:Version

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

[mediawiki/core@master] Update iu/ike-related language fallback chain

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

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

[mediawiki/core@master] Update kk-related language fallback chain

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

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

[mediawiki/core@master] Update ku-related language fallback chain

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

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

[mediawiki/core@master] Update shi-related language fallback chain

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

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

[mediawiki/core@master] Update sr-related language fallback chain

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

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

[mediawiki/core@master] Update tg-related language fallback chain

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

Winston_Sung changed the task status from Open to In Progress.Jun 12 2022, 12:32 PM

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

[mediawiki/core@master] Update fallback chain for jquery.i18n.fallbacks.js

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

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

[mediawiki/core@master] Update fallback chain for jquery.i18n.fallbacks.js

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

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

[mediawiki/core@master] Clean-up $fallback = 'en' messages file

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

Change 805159 abandoned by Winston Sung:

[mediawiki/core@master] Update fallback chain for jquery.i18n.fallbacks.js

Reason:

Go via https://github.com/wikimedia/jquery.i18n

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

Change 805159 restored by Winston Sung:

[mediawiki/core@master] Update fallback chain for jquery.i18n.fallbacks.js

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

Change 805159 abandoned by Winston Sung:

[mediawiki/core@master] Update fallback chain for jquery.i18n.fallbacks.js

Reason:

Go via https://github.com/wikimedia/jquery.i18n

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

Change 753959 abandoned by Winston Sung:

[mediawiki/core@master] Clean-up $fallback = 'en' message files

Reason:

Intentional.

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

Change 753959 restored by Winston Sung:

[mediawiki/core@master] Clean-up $fallback = 'en' message files

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

Change 753959 abandoned by Winston Sung:

[mediawiki/core@master] Clean-up $fallback = 'en' message files

Reason:

Intentional.

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

Change 805159 restored by Winston Sung:

[mediawiki/core@master] Update fallback chain for jquery.i18n.fallbacks.js

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

Change 805159 abandoned by Winston Sung:

[mediawiki/core@master] Update fallback chain for jquery.i18n.fallbacks.js

Reason:

https://github.com/wikimedia/jquery.i18n/pull/240

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

Change 804545 merged by jenkins-bot:

[mediawiki/core@master] Update tg-related language fallback chain

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

Change 804536 merged by jenkins-bot:

[mediawiki/core@master] Update iu/ike-related language fallback chain

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

Change 804544 merged by jenkins-bot:

[mediawiki/core@master] Update sr-related language fallback chain

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

Change 804538 merged by jenkins-bot:

[mediawiki/core@master] Update ku-related language fallback chain

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

Change 804537 merged by jenkins-bot:

[mediawiki/core@master] Update kk-related language fallback chain

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

Change 804542 merged by jenkins-bot:

[mediawiki/core@master] Update LanguageConverter ShiConverter shi/"unconverted" variant

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

Remaining to-do(s):

  • Update File:MediaWiki_fallback_chains.svg

Remaining to-do(s):

  • Update File:MediaWiki_fallback_chains.svg

Did a quick update: https://commons.wikimedia.org/wiki/File:MediaWiki_fallback_chains.svg. It's certainly not perfect, so happy if anyone else wants to improve it.

Winston_Sung removed a project: Patch-For-Review.
Winston_Sung moved this task from Untriaged to Fallback on the I18n board.

As there's no remaining work (except the MediaWiki_fallback_chains.svg improvement, which is another thing), close this ticket as "Resolved".

zh-related fallback chain

image.png (520×719 px, 31 KB)

(As reference for further work.)