Module talk:Fallback/sandbox/testcases

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search
  • Expected is the internal MediaWiki list of fallbacks (note that internally, it has no "default" option, and just places "en" at end); we first remove "en" (except if the language is "en" or "en-*"), then we add "default", and then we add "en" after it (when it was not removed in the first step).
  • Actual is the locally generated list of fallbacks (these have no "default", and no enforced "en", and it still recognizes legacy languages codes for which there are translations stored on Commons) then we add the missing fallbacks from Mediawiki (after each source of fallbacks, we add the default BCP 47 fallbacks for language variants by adding base languages without an extension after '-'); we implicitly add "default" to these fallbacks, and then we add "en" after it (unless it is already present in the local list of fallback, in which case it will be before the default).

So there may be differences below (e.g. "als" is still locally recognized as an alias of "gsw" for Alemanic, but this aliasing been removed from MediaWiki which recognizes "als" as a variant of "sq" for Albanian Tosk): we should cleanup such fuzzy cases remaining in Commons for code usage that have been deprecated and should be replaced.

Additionally some local fallback chains still ignore some accepted fallbacks that have been integrated in MediaWiki (e.g. the mutual fallback between "cs" and "sk"), or have additional fallback present on this wiki but not in MediaWiki (e.g. from "af" to "nl"), or have additional fallbacks from legacy codes to replace by newer codes (e.g. from "be-x-old" to "be-tarask"), because Commons still has not renamed all the translated resources using the legacy codes.

Some of the additional fallbacks present only in MediaWiki are simply wrong (e.g. from "co" for Corsican to "it" before "fr", where on Commons "co" only fallbacks to "fr", the dominant primary language used in Corsica before "default" and "en"; Corsican is a very local minority language in a small northern part of Sardinia where a locale code "co-it" could be used to have its own "it" fallback inserted after "co" but before "fr"; "co" should remain attached to main Corsica where French is almost always understood and almost never Italian).

Finally the fallback chains are accidentally matching (with no differences) between MediaWiki and Commons, for legacy non-standard codes specific to Wikimedia wikis. We are now conforming to BCP 47, and both lists of fallbacks should be updated, but this module takes care of them automatically so only MediaWiki needs to be updated (e.g. "sr-ec" and "sr-el" should be recognized as aliases in the first position of "sr-latn" and "sr-cyrl", but the fallbacks from "sr-latn" and "sr-cyrl" also forget to list "sr" as a secondary fallback in MediaWiki, so they will fallback only to "default" and then "en").

Both MediaWiki and Commons need to be fixed to recognize the standard codes, at least as aliases of legacy longer or non-conforming codes used in Wikimedia wikis.

All tests passed.

Test 1: autotranslate
Text Expected Actual
✓[OK] {{#invoke: Fallback/sandbox | autotranslate | base = Template:Autotranslate/test | lang = en }} Template:Autotranslate/test/en (lang=en) was called Template:Autotranslate/test/en (lang=en) was called
✓[OK] {{#invoke: Fallback/sandbox | autotranslate | base = Template:Autotranslate/test | lang = fr }} Template:Autotranslate/test/en (lang=fr) was called Template:Autotranslate/test/en (lang=fr) was called
✓[OK] {{#invoke: Fallback/sandbox | autotranslate | base = Template:Autotranslate/test | lang = pl }} Template:Autotranslate/test/pl (lang=pl) was called Template:Autotranslate/test/pl (lang=pl) was called
✓[OK] {{#invoke: Fallback/sandbox | autotranslate | base = Template:Autotranslate/test | lang = szl }} Template:Autotranslate/test/pl (lang=szl) was called Template:Autotranslate/test/pl (lang=szl) was called
✓[OK] {{#invoke: Fallback/sandbox | autotranslate | base = Autotranslate/test | lang = szl }} Template:Autotranslate/test/pl (lang=szl) was called Template:Autotranslate/test/pl (lang=szl) was called
✓[OK] {{#invoke: Fallback/sandbox | autotranslate | base = Autotranslate/test | lang = an }} Template:Autotranslate/test/es (lang=an) was called Template:Autotranslate/test/es (lang=an) was called
✓[OK] {{#invoke: Fallback/sandbox | autotranslate | base = Autotranslate/test | lang = an | text=hello | 1=arg #1 }} Template:Autotranslate/test/es (1=arg #1, lang=an, text=hello) was called Template:Autotranslate/test/es (1=arg #1, lang=an, text=hello) was called
Test 2: langSwitch without default
Text Expected Actual
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | co = Corsu | lang = en}} English English
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | co = Corsu | lang = fr}} English English
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | co = Corsu | lang = co}} Corsu Corsu
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | de = German | lang = en}} English English
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | de = German | lang = de}} German German
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | de = German | lang = gsw}} German German
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | de = German | lang = als}} German German
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | gsw = Alemanic | lang = en}} English English
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | gsw = Alemanic | lang = de}} English English
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | gsw = Alemanic | lang = gsw}} Alemanic Alemanic
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | gsw = Alemanic | lang = als}} Alemanic Alemanic
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | fr = French | co = Corsu | nocat = 1 | lang = en }} LangSwitch Error: no default LangSwitch Error: no default
Test 3: langSwitch with default
Text Expected Actual
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | fr = French | default = default | lang = en}} default default
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | fr = French | default = default | lang = fr}} French French
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | fr = French | default = default | lang = co}} French French
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | co = Corsu | default = default | lang = en}} English English
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | co = Corsu | default = default | lang = fr}} default default
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | co = Corsu | default = default | lang = co}} Corsu Corsu
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = ~ | fr = French | default = default | lang = en}}
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = ~ | fr = French | default = default | lang = fr}} French French
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = ~ | fr = French | default = default | lang = co}} French French
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | fr = ~| co = Corsu | default = default | lang = en}} English English
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | fr = ~| co = Corsu | default = default | lang = fr}}
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | fr = ~| co = Corsu | default = default | lang = co}} Corsu Corsu
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | fr = | co = Corsu | default = default | lang = en}} English English
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | fr = | co = Corsu | default = default | lang = fr}} default default
✓[OK] {{#invoke: Fallback/sandbox | langSwitch | en = English | fr = | co = Corsu | default = default | lang = co}} Corsu Corsu
Test 4: translatelua
Text Expected Actual
✓[OK] {{#invoke: Fallback/sandbox | translatelua |i18n/oil on canvas| lang = en }} oil on canvas oil on canvas
✓[OK] {{#invoke: Fallback/sandbox | translatelua |i18n/oil on canvas| lang = fr }} huile sur toile huile sur toile
✓[OK] {{#invoke: Fallback/sandbox | translatelua |i18n/oil on canvas| lang = frc }} huile sur toile huile sur toile
✓[OK] {{#invoke: Fallback/sandbox | translatelua |i18n/oil on canvas| lang = pl }} olej na płótnie olej na płótnie
✓[OK] {{#invoke: Fallback/sandbox | translatelua |i18n/coordinates|CameraLocation| lang = en }} Camera location Camera location
Test 5: compare fallbacks
Text Expected Actual
Expected means using only builtin mw.language.getFallbacksFor(langcode), with English placed after default.
Actual means using fallback.fblist(langcode).
✓[OK] aa {'aa','default','en'} {'aa','default','en'}
✓[OK] ab {'ab','ru','default','en'} {'ab','ru','default','en'}
✓[OK] ace {'ace','id','default','en'} {'ace','id','default','en'}
⚠[!] af {'af','default','en'} {'af','nl','default','en'}
✓[OK] ak {'ak','default','en'} {'ak','default','en'}
✓[OK] aln {'aln','sq','default','en'} {'aln','sq','default','en'}
⚠[!] als {'als','default','en'} {'als','gsw','de','default','en'}
✓[OK] am {'am','default','en'} {'am','default','en'}
✓[OK] an {'an','es','default','en'} {'an','es','default','en'}
✓[OK] ang {'ang','default','en'} {'ang','default','en'}
✓[OK] anp {'anp','hi','default','en'} {'anp','hi','default','en'}
✓[OK] ar {'ar','default','en'} {'ar','default','en'}
✓[OK] arc {'arc','default','en'} {'arc','default','en'}
✓[OK] arn {'arn','es','default','en'} {'arn','es','default','en'}
✓[OK] ary {'ary','ar','default','en'} {'ary','ar','default','en'}
✓[OK] arz {'arz','ar','default','en'} {'arz','ar','default','en'}
✓[OK] as {'as','default','en'} {'as','default','en'}
✓[OK] ast {'ast','es','default','en'} {'ast','es','default','en'}
✓[OK] av {'av','ru','default','en'} {'av','ru','default','en'}
✓[OK] avk {'avk','fr','es','ru','default','en'} {'avk','fr','es','ru','default','en'}
✓[OK] ay {'ay','es','default','en'} {'ay','es','default','en'}
✓[OK] az {'az','default','en'} {'az','default','en'}
⚠[!] azb {'azb','fa','default','en'} {'azb','az','fa','default','en'}
✓[OK] ba {'ba','ru','default','en'} {'ba','ru','default','en'}
✓[OK] bar {'bar','de','default','en'} {'bar','de','default','en'}
⚠[!] bat-smg {'bat-smg','default','en'} {'bat-smg','sgs','lt','default','en'}
⚠[!] bbc {'bbc','bbc-latn','default','en'} {'bbc','bbc-latn','id','default','en'}
⚠[!] bbc-latn {'bbc-latn','id','default','en'} {'bbc-latn','bbc','id','default','en'}
✓[OK] bcc {'bcc','fa','default','en'} {'bcc','fa','default','en'}
✓[OK] bcl {'bcl','default','en'} {'bcl','default','en'}
✓[OK] be {'be','default','en'} {'be','default','en'}
⚠[!] be-tarask {'be-tarask','be','default','en'} {'be-tarask','ru','be','default','en'}
⚠[!] be-x-old {'be-x-old','default','en'} {'be-x-old','be-tarask','ru','be','be-x','default','en'}
✓[OK] bg {'bg','default','en'} {'bg','default','en'}
✓[OK] bh {'bh','bho','default','en'} {'bh','bho','default','en'}
✓[OK] bho {'bho','default','en'} {'bho','default','en'}
✓[OK] bi {'bi','default','en'} {'bi','default','en'}
✓[OK] bjn {'bjn','id','default','en'} {'bjn','id','default','en'}
✓[OK] bm {'bm','fr','default','en'} {'bm','fr','default','en'}
✓[OK] bn {'bn','default','en'} {'bn','default','en'}
✓[OK] bo {'bo','default','en'} {'bo','default','en'}
✓[OK] bpy {'bpy','bn','default','en'} {'bpy','bn','default','en'}
✓[OK] bqi {'bqi','fa','default','en'} {'bqi','fa','default','en'}
⚠[!] br {'br','default','en'} {'br','fr','default','en'}
✓[OK] brh {'brh','default','en'} {'brh','default','en'}
✓[OK] bs {'bs','default','en'} {'bs','default','en'}
✓[OK] bug {'bug','id','default','en'} {'bug','id','default','en'}
✓[OK] bxr {'bxr','ru','default','en'} {'bxr','ru','default','en'}
⚠[!] ca {'ca','oc','default','en'} {'ca','oc','fr','default','en'}
⚠[!] cbk-zam {'cbk-zam','es','default','en'} {'cbk-zam','es','cbk','default','en'}
⚠[!] cdo {'cdo','nan','zh-hant','zh','zh-hans','default','en'} {'cdo','nan','zh-hant','zh','zh-hans','zh-tw','zh-hk','zh-cn','default','en'}
✓[OK] ce {'ce','ru','default','en'} {'ce','ru','default','en'}
✓[OK] ceb {'ceb','default','en'} {'ceb','default','en'}
✓[OK] ch {'ch','default','en'} {'ch','default','en'}
✓[OK] cho {'cho','default','en'} {'cho','default','en'}
✓[OK] chr {'chr','default','en'} {'chr','default','en'}
✓[OK] chy {'chy','default','en'} {'chy','default','en'}
⚠[!] ckb {'ckb','default','en'} {'ckb','ku','ku-latn','default','en'}
⚠[!] co {'co','it','default','en'} {'co','fr','it','default','en'}
⚠[!] co-fr {'co-fr','default','en'} {'co-fr','co','it','default','en'}
⚠[!] co-it {'co-it','default','en'} {'co-it','co','it','default','en'}
✓[OK] cps {'cps','default','en'} {'cps','default','en'}
✓[OK] cr {'cr','default','en'} {'cr','default','en'}
✓[OK] crh {'crh','crh-latn','default','en'} {'crh','crh-latn','default','en'}
⚠[!] crh-latn {'crh-latn','default','en'} {'crh-latn','crh','default','en'}
⚠[!] crh-cyrl {'crh-cyrl','ru','default','en'} {'crh-cyrl','ru','crh','crh-latn','default','en'}
✓[OK] cs {'cs','sk','default','en'} {'cs','sk','default','en'}
✓[OK] csb {'csb','pl','default','en'} {'csb','pl','default','en'}
✓[OK] cu {'cu','default','en'} {'cu','default','en'}
✓[OK] cv {'cv','ru','default','en'} {'cv','ru','default','en'}
✓[OK] cy {'cy','default','en'} {'cy','default','en'}
✓[OK] da {'da','default','en'} {'da','default','en'}
✓[OK] de {'de','default','en'} {'de','default','en'}
✓[OK] de-at {'de-at','de','default','en'} {'de-at','de','default','en'}
✓[OK] de-ch {'de-ch','de','default','en'} {'de-ch','de','default','en'}
✓[OK] de-formal {'de-formal','de','default','en'} {'de-formal','de','default','en'}
✓[OK] diq {'diq','default','en'} {'diq','default','en'}
⚠[!] dsb {'dsb','hsb','de','default','en'} {'dsb','de','hsb','default','en'}
✓[OK] dtp {'dtp','ms','default','en'} {'dtp','ms','default','en'}
✓[OK] dv {'dv','default','en'} {'dv','default','en'}
✓[OK] dz {'dz','default','en'} {'dz','default','en'}
✓[OK] ee {'ee','default','en'} {'ee','default','en'}
✓[OK] egl {'egl','it','default','en'} {'egl','it','default','en'}
✓[OK] el {'el','default','en'} {'el','default','en'}
✓[OK] eml {'eml','it','default','en'} {'eml','it','default','en'}
✓[OK] en {'en','default'} {'en','default'}
✓[OK] en-ca {'en-ca','en','default'} {'en-ca','en','default'}
✓[OK] en-gb {'en-gb','en','default'} {'en-gb','en','default'}
✓[OK] en-in {'en-in','en','default'} {'en-in','en','default'}
✓[OK] en-us {'en-us','en','default'} {'en-us','en','default'}
✓[OK] en-za {'en-za','en','default'} {'en-za','en','default'}
✓[OK] eo {'eo','default','en'} {'eo','default','en'}
✓[OK] es {'es','default','en'} {'es','default','en'}
✓[OK] et {'et','default','en'} {'et','default','en'}
✓[OK] eu {'eu','default','en'} {'eu','default','en'}
✓[OK] ext {'ext','es','default','en'} {'ext','es','default','en'}
✓[OK] fa {'fa','default','en'} {'fa','default','en'}
⚠[!] ff {'ff','default','en'} {'ff','fr','default','en'}
✓[OK] fi {'fi','default','en'} {'fi','default','en'}
✓[OK] fit {'fit','fi','default','en'} {'fit','fi','default','en'}
✓[OK] fiu-vro {'fiu-vro','default','en'} {'fiu-vro','default','en'}
✓[OK] fj {'fj','default','en'} {'fj','default','en'}
✓[OK] fo {'fo','default','en'} {'fo','default','en'}
✓[OK] fr {'fr','default','en'} {'fr','default','en'}
✓[OK] frc {'frc','fr','default','en'} {'frc','fr','default','en'}
✓[OK] frp {'frp','fr','default','en'} {'frp','fr','default','en'}
✓[OK] frr {'frr','de','default','en'} {'frr','de','default','en'}
✓[OK] fur {'fur','it','default','en'} {'fur','it','default','en'}
⚠[!] fy {'fy','default','en'} {'fy','nl','default','en'}
✓[OK] ga {'ga','default','en'} {'ga','default','en'}
✓[OK] gag {'gag','tr','default','en'} {'gag','tr','default','en'}
⚠[!] gan {'gan','gan-hant','gan-hans','zh-hant','zh','zh-hans','default','en'} {'gan','gan-hant','zh-hant','zh','zh-hans','zh-cn','gan-hans','zh-tw','zh-hk','default','en'}
⚠[!] gan-hans {'gan-hans','gan','gan-hant','zh-hans','zh','zh-hant','default','en'} {'gan-hans','zh-hans','zh-cn','zh','gan','gan-hant','zh-hant','zh-tw','zh-hk','default','en'}
⚠[!] gan-hant {'gan-hant','gan','gan-hans','zh-hant','zh','zh-hans','default','en'} {'gan-hant','zh-hant','zh','zh-hans','zh-cn','gan','gan-hans','zh-tw','zh-hk','default','en'}
✓[OK] gd {'gd','default','en'} {'gd','default','en'}
⚠[!] gl {'gl','pt','default','en'} {'gl','pt','pt-br','default','en'}
✓[OK] glk {'glk','fa','default','en'} {'glk','fa','default','en'}
✓[OK] gn {'gn','es','default','en'} {'gn','es','default','en'}
⚠[!] gom-latn {'gom-latn','default','en'} {'gom-latn','gom','gom-deva','default','en'}
✓[OK] got {'got','default','en'} {'got','default','en'}
✓[OK] grc {'grc','default','en'} {'grc','default','en'}
✓[OK] gsw {'gsw','de','default','en'} {'gsw','de','default','en'}
✓[OK] gu {'gu','default','en'} {'gu','default','en'}
✓[OK] gv {'gv','default','en'} {'gv','default','en'}
✓[OK] ha {'ha','default','en'} {'ha','default','en'}
⚠[!] hak {'hak','zh-hant','zh','zh-hans','default','en'} {'hak','zh-hant','zh','zh-hans','zh-tw','zh-hk','zh-cn','default','en'}
✓[OK] haw {'haw','default','en'} {'haw','default','en'}
✓[OK] he {'he','default','en'} {'he','default','en'}
✓[OK] hi {'hi','default','en'} {'hi','default','en'}
✓[OK] hif {'hif','hif-latn','default','en'} {'hif','hif-latn','default','en'}
⚠[!] hif-latn {'hif-latn','default','en'} {'hif-latn','hif','default','en'}
✓[OK] hil {'hil','default','en'} {'hil','default','en'}
✓[OK] ho {'ho','default','en'} {'ho','default','en'}
✓[OK] hr {'hr','default','en'} {'hr','default','en'}
⚠[!] hsb {'hsb','dsb','de','default','en'} {'hsb','de','dsb','default','en'}
✓[OK] ht {'ht','fr','default','en'} {'ht','fr','default','en'}
✓[OK] hu {'hu','default','en'} {'hu','default','en'}
✓[OK] hy {'hy','default','en'} {'hy','default','en'}
✓[OK] hz {'hz','default','en'} {'hz','default','en'}
✓[OK] ia {'ia','default','en'} {'ia','default','en'}
✓[OK] id {'id','default','en'} {'id','default','en'}
✓[OK] ie {'ie','default','en'} {'ie','default','en'}
✓[OK] ig {'ig','default','en'} {'ig','default','en'}
⚠[!] ii {'ii','zh-cn','zh-hans','zh','zh-hant','default','en'} {'ii','zh-cn','zh-hans','zh','zh-hant','zh-tw','zh-hk','default','en'}
✓[OK] ik {'ik','default','en'} {'ik','default','en'}
⚠[!] ike-cans {'ike-cans','iu','default','en'} {'ike-cans','ik','ike','iu','default','en'}
⚠[!] ike-latn {'ike-latn','iu','default','en'} {'ike-latn','ik','ike','iu','ike-cans','default','en'}
✓[OK] ilo {'ilo','default','en'} {'ilo','default','en'}
✓[OK] inh {'inh','ru','default','en'} {'inh','ru','default','en'}
✓[OK] io {'io','eo','default','en'} {'io','eo','default','en'}
✓[OK] is {'is','default','en'} {'is','default','en'}
✓[OK] it {'it','default','en'} {'it','default','en'}
⚠[!] iu {'iu','ike-cans','default','en'} {'iu','ike-cans','ik','ike','default','en'}
✓[OK] ja {'ja','default','en'} {'ja','default','en'}
✓[OK] jam {'jam','default','en'} {'jam','default','en'}
✓[OK] jbo {'jbo','default','en'} {'jbo','default','en'}
✓[OK] jut {'jut','da','default','en'} {'jut','da','default','en'}
✓[OK] jv {'jv','id','default','en'} {'jv','id','default','en'}
✓[OK] ka {'ka','default','en'} {'ka','default','en'}
⚠[!] kaa {'kaa','kk-latn','kk-cyrl','default','en'} {'kaa','kk-latn','kk-cyrl','kk','default','en'}
✓[OK] kab {'kab','fr','default','en'} {'kab','fr','default','en'}
✓[OK] kbd {'kbd','kbd-cyrl','default','en'} {'kbd','kbd-cyrl','default','en'}
⚠[!] kbd-cyrl {'kbd-cyrl','default','en'} {'kbd-cyrl','kbd','default','en'}
✓[OK] kg {'kg','default','en'} {'kg','default','en'}
✓[OK] khw {'khw','ur','default','en'} {'khw','ur','default','en'}
✓[OK] ki {'ki','default','en'} {'ki','default','en'}
✓[OK] kiu {'kiu','tr','default','en'} {'kiu','tr','default','en'}
✓[OK] kj {'kj','default','en'} {'kj','default','en'}
✓[OK] kk {'kk','kk-cyrl','default','en'} {'kk','kk-cyrl','default','en'}
⚠[!] kk-arab {'kk-arab','kk','kk-cyrl','default','en'} {'kk-arab','kk-cyrl','kk','default','en'}
✓[OK] kk-cyrl {'kk-cyrl','kk','default','en'} {'kk-cyrl','kk','default','en'}
✓[OK] kk-latn {'kk-latn','kk','kk-cyrl','default','en'} {'kk-latn','kk','kk-cyrl','default','en'}
⚠[!] kk-cn {'kk-cn','kk-arab','kk','kk-cyrl','default','en'} {'kk-cn','kk-arab','kk-cyrl','kk','default','en'}
⚠[!] kk-kz {'kk-kz','kk-cyrl','kk','default','en'} {'kk-kz','kk','kk-cyrl','default','en'}
✓[OK] kk-tr {'kk-tr','kk-latn','kk','kk-cyrl','default','en'} {'kk-tr','kk-latn','kk','kk-cyrl','default','en'}
✓[OK] kl {'kl','da','default','en'} {'kl','da','default','en'}
✓[OK] km {'km','default','en'} {'km','default','en'}
✓[OK] kn {'kn','default','en'} {'kn','default','en'}
✓[OK] ko {'ko','default','en'} {'ko','default','en'}
✓[OK] ko-kp {'ko-kp','ko','default','en'} {'ko-kp','ko','default','en'}
✓[OK] koi {'koi','ru','default','en'} {'koi','ru','default','en'}
✓[OK] kr {'kr','default','en'} {'kr','default','en'}
✓[OK] krc {'krc','ru','default','en'} {'krc','ru','default','en'}
✓[OK] kri {'kri','default','en'} {'kri','default','en'}
✓[OK] krj {'krj','default','en'} {'krj','default','en'}
✓[OK] ks {'ks','ks-arab','default','en'} {'ks','ks-arab','default','en'}
⚠[!] ks-arab {'ks-arab','default','en'} {'ks-arab','ks','default','en'}
⚠[!] ks-deva {'ks-deva','default','en'} {'ks-deva','ks','ks-arab','default','en'}
✓[OK] ksh {'ksh','de','default','en'} {'ksh','de','default','en'}
✓[OK] ku {'ku','ku-latn','default','en'} {'ku','ku-latn','default','en'}
✓[OK] ku-latn {'ku-latn','ku','default','en'} {'ku-latn','ku','default','en'}
⚠[!] ku-arab {'ku-arab','ku','ckb','default','en'} {'ku-arab','ckb','ku','ku-latn','default','en'}
✓[OK] kv {'kv','ru','default','en'} {'kv','ru','default','en'}
✓[OK] kw {'kw','default','en'} {'kw','default','en'}
✓[OK] ky {'ky','default','en'} {'ky','default','en'}
✓[OK] la {'la','default','en'} {'la','default','en'}
✓[OK] lad {'lad','es','default','en'} {'lad','es','default','en'}
✓[OK] lb {'lb','de','default','en'} {'lb','de','default','en'}
✓[OK] lbe {'lbe','ru','default','en'} {'lbe','ru','default','en'}
✓[OK] lez {'lez','ru','az','default','en'} {'lez','ru','az','default','en'}
✓[OK] lfn {'lfn','default','en'} {'lfn','default','en'}
✓[OK] lg {'lg','default','en'} {'lg','default','en'}
✓[OK] li {'li','nl','default','en'} {'li','nl','default','en'}
✓[OK] lij {'lij','it','default','en'} {'lij','it','default','en'}
✓[OK] liv {'liv','et','default','en'} {'liv','et','default','en'}
⚠[!] lmo {'lmo','pms','eml','lij','vec','it','default','en'} {'lmo','it','pms','eml','lij','vec','default','en'}
✓[OK] ln {'ln','fr','default','en'} {'ln','fr','default','en'}
✓[OK] lo {'lo','default','en'} {'lo','default','en'}
✓[OK] lrc {'lrc','fa','default','en'} {'lrc','fa','default','en'}
✓[OK] loz {'loz','default','en'} {'loz','default','en'}
✓[OK] lt {'lt','default','en'} {'lt','default','en'}
✓[OK] ltg {'ltg','lv','default','en'} {'ltg','lv','default','en'}
✓[OK] lus {'lus','default','en'} {'lus','default','en'}
✓[OK] lv {'lv','default','en'} {'lv','default','en'}
⚠[!] lzh {'lzh','zh-hant','zh','zh-hans','default','en'} {'lzh','zh-hant','zh','zh-hans','zh-tw','zh-hk','zh-cn','default','en'}
✓[OK] lzz {'lzz','tr','default','en'} {'lzz','tr','default','en'}
✓[OK] mai {'mai','hi','default','en'} {'mai','hi','default','en'}
✓[OK] map-bms {'map-bms','jv','id','default','en'} {'map-bms','jv','id','default','en'}
✓[OK] mdf {'mdf','myv','ru','default','en'} {'mdf','myv','ru','default','en'}
✓[OK] mg {'mg','fr','default','en'} {'mg','fr','default','en'}
✓[OK] mh {'mh','default','en'} {'mh','default','en'}
⚠[!] mhr {'mhr','mrj','ru','default','en'} {'mhr','ru','mrj','default','en'}
✓[OK] mi {'mi','default','en'} {'mi','default','en'}
✓[OK] min {'min','id','default','en'} {'min','id','default','en'}
✓[OK] mk {'mk','default','en'} {'mk','default','en'}
✓[OK] ml {'ml','default','en'} {'ml','default','en'}
✓[OK] mn {'mn','default','en'} {'mn','default','en'}
✓[OK] mo {'mo','ro','default','en'} {'mo','ro','default','en'}
✓[OK] mr {'mr','default','en'} {'mr','default','en'}
⚠[!] mrj {'mrj','mhr','ru','default','en'} {'mrj','ru','mhr','default','en'}
✓[OK] ms {'ms','default','en'} {'ms','default','en'}
✓[OK] mt {'mt','default','en'} {'mt','default','en'}
✓[OK] mus {'mus','default','en'} {'mus','default','en'}
⚠[!] mwl {'mwl','pt','default','en'} {'mwl','pt','pt-br','default','en'}
✓[OK] my {'my','default','en'} {'my','default','en'}
⚠[!] myv {'myv','mdf','ru','default','en'} {'myv','ru','mdf','default','en'}
✓[OK] mzn {'mzn','fa','default','en'} {'mzn','fa','default','en'}
✓[OK] na {'na','default','en'} {'na','default','en'}
✓[OK] nah {'nah','es','default','en'} {'nah','es','default','en'}
⚠[!] nan {'nan','cdo','zh-hant','zh','zh-hans','default','en'} {'nan','cdo','zh-hant','zh','zh-hans','zh-tw','zh-hk','zh-cn','default','en'}
✓[OK] nap {'nap','it','default','en'} {'nap','it','default','en'}
✓[OK] nb {'nb','no','nn','default','en'} {'nb','no','nn','default','en'}
⚠[!] nds {'nds','de','default','en'} {'nds','nds-nl','de','nl','default','en'}
⚠[!] nds-nl {'nds-nl','nl','default','en'} {'nds-nl','nds','nl','de','default','en'}
✓[OK] ne {'ne','default','en'} {'ne','default','en'}
✓[OK] new {'new','default','en'} {'new','default','en'}
✓[OK] ng {'ng','default','en'} {'ng','default','en'}
✓[OK] niu {'niu','default','en'} {'niu','default','en'}
✓[OK] nl {'nl','default','en'} {'nl','default','en'}
✓[OK] nl-informal {'nl-informal','nl','default','en'} {'nl-informal','nl','default','en'}
✓[OK] nn {'nn','no','nb','default','en'} {'nn','no','nb','default','en'}
⚠[!] no {'no','default','en'} {'no','nb','nn','default','en'}
✓[OK] nov {'nov','default','en'} {'nov','default','en'}
✓[OK] nrm {'nrm','nrf','fr','default','en'} {'nrm','nrf','fr','default','en'}
✓[OK] nso {'nso','default','en'} {'nso','default','en'}
✓[OK] nv {'nv','default','en'} {'nv','default','en'}
✓[OK] ny {'ny','default','en'} {'ny','default','en'}
✓[OK] oc {'oc','ca','fr','default','en'} {'oc','ca','fr','default','en'}
✓[OK] om {'om','default','en'} {'om','default','en'}
✓[OK] or {'or','default','en'} {'or','default','en'}
✓[OK] os {'os','ru','default','en'} {'os','ru','default','en'}
✓[OK] pa {'pa','default','en'} {'pa','default','en'}
✓[OK] pag {'pag','default','en'} {'pag','default','en'}
✓[OK] pam {'pam','default','en'} {'pam','default','en'}
✓[OK] pap {'pap','default','en'} {'pap','default','en'}
✓[OK] pcd {'pcd','fr','default','en'} {'pcd','fr','default','en'}
✓[OK] pdc {'pdc','de','default','en'} {'pdc','de','default','en'}
⚠[!] pdt {'pdt','de','default','en'} {'pdt','nds','de','nds-nl','nl','default','en'}
✓[OK] pfl {'pfl','de','default','en'} {'pfl','de','default','en'}
✓[OK] pi {'pi','default','en'} {'pi','default','en'}
✓[OK] pih {'pih','default','en'} {'pih','default','en'}
✓[OK] pl {'pl','default','en'} {'pl','default','en'}
✓[OK] pms {'pms','it','default','en'} {'pms','it','default','en'}
✓[OK] pnb {'pnb','default','en'} {'pnb','default','en'}
✓[OK] pnt {'pnt','el','default','en'} {'pnt','el','default','en'}
✓[OK] prg {'prg','default','en'} {'prg','default','en'}
✓[OK] ps {'ps','default','en'} {'ps','default','en'}
✓[OK] pt {'pt','pt-br','default','en'} {'pt','pt-br','default','en'}
✓[OK] pt-br {'pt-br','pt','default','en'} {'pt-br','pt','default','en'}
⚠[!] qu {'qu','qug','es','default','en'} {'qu','es','qug','default','en'}
✓[OK] qug {'qug','qu','es','default','en'} {'qug','qu','es','default','en'}
✓[OK] rgn {'rgn','it','default','en'} {'rgn','it','default','en'}
✓[OK] rif {'rif','default','en'} {'rif','default','en'}
✓[OK] rm {'rm','de','default','en'} {'rm','de','default','en'}
✓[OK] rmy {'rmy','ro','default','en'} {'rmy','ro','default','en'}
✓[OK] rn {'rn','default','en'} {'rn','default','en'}
✓[OK] ro {'ro','default','en'} {'ro','default','en'}
⚠[!] roa-rup {'roa-rup','default','en'} {'roa-rup','rup','ro','default','en'}
✓[OK] roa-tara {'roa-tara','it','default','en'} {'roa-tara','it','default','en'}
✓[OK] ru {'ru','default','en'} {'ru','default','en'}
✓[OK] rue {'rue','uk','ru','default','en'} {'rue','uk','ru','default','en'}
✓[OK] rup {'rup','ro','default','en'} {'rup','ro','default','en'}
✓[OK] ruq {'ruq','ruq-latn','ro','default','en'} {'ruq','ruq-latn','ro','default','en'}
⚠[!] ruq-cyrl {'ruq-cyrl','mk','default','en'} {'ruq-cyrl','ruq','mk','ruq-latn','ro','default','en'}
⚠[!] ruq-grek {'ruq-grek','default','en'} {'ruq-grek','ruq','ruq-latn','ro','default','en'}
⚠[!] ruq-latn {'ruq-latn','ro','default','en'} {'ruq-latn','ruq','ro','default','en'}
✓[OK] rw {'rw','default','en'} {'rw','default','en'}
✓[OK] sa {'sa','hi','default','en'} {'sa','hi','default','en'}
✓[OK] sah {'sah','ru','default','en'} {'sah','ru','default','en'}
✓[OK] sat {'sat','default','en'} {'sat','default','en'}
✓[OK] sc {'sc','default','en'} {'sc','default','en'}
✓[OK] scn {'scn','it','default','en'} {'scn','it','default','en'}
✓[OK] sco {'sco','default','en'} {'sco','default','en'}
✓[OK] sd {'sd','default','en'} {'sd','default','en'}
✓[OK] sdc {'sdc','it','default','en'} {'sdc','it','default','en'}
⚠[!] se {'se','nb','fi','default','en'} {'se','nb','fi','no','nn','default','en'}
✓[OK] sei {'sei','default','en'} {'sei','default','en'}
✓[OK] sg {'sg','fr','default','en'} {'sg','fr','default','en'}
✓[OK] sgs {'sgs','lt','default','en'} {'sgs','lt','default','en'}
⚠[!] sh {'sh','sh-latn','sh-cyrl','bs','sr-el','sr-latn','hr','default','en'} {'sh','sh-latn','sh-cyrl','bs','sr-el','sr-latn','hr','sr-cyrl','sr-ec','sr','default','en'}
✓[OK] shi {'shi','shi-latn','fr','default','en'} {'shi','shi-latn','fr','default','en'}
⚠[!] shi-tfng {'shi-tfng','default','en'} {'shi-tfng','shi','shi-latn','fr','default','en'}
⚠[!] shi-latn {'shi-latn','default','en'} {'shi-latn','shi','fr','default','en'}
✓[OK] si {'si','default','en'} {'si','default','en'}
✓[OK] simple {'simple','default','en'} {'simple','default','en'}
✓[OK] sk {'sk','cs','default','en'} {'sk','cs','default','en'}
✓[OK] sl {'sl','default','en'} {'sl','default','en'}
✓[OK] sli {'sli','de','default','en'} {'sli','de','default','en'}
✓[OK] sm {'sm','default','en'} {'sm','default','en'}
⚠[!] sma {'sma','sv','nb','default','en'} {'sma','sv','nb','no','nn','default','en'}
✓[OK] sn {'sn','default','en'} {'sn','default','en'}
✓[OK] so {'so','default','en'} {'so','default','en'}
✓[OK] sq {'sq','default','en'} {'sq','default','en'}
✓[OK] sr {'sr','sr-ec','sr-cyrl','sr-el','sr-latn','default','en'} {'sr','sr-ec','sr-cyrl','sr-el','sr-latn','default','en'}
⚠[!] sr-cyrl {'sr-cyrl','default','en'} {'sr-cyrl','sr','sr-ec','sr-el','sr-latn','default','en'}
⚠[!] sr-ec {'sr-ec','sr-cyrl','sr','default','en'} {'sr-ec','sr','sr-cyrl','sr-el','sr-latn','default','en'}
⚠[!] sr-el {'sr-el','sr-latn','sr','default','en'} {'sr-el','sr','sr-ec','sr-latn','sr-cyrl','default','en'}
⚠[!] sr-latn {'sr-latn','default','en'} {'sr-latn','sr','sr-ec','sr-cyrl','sr-el','default','en'}
✓[OK] srn {'srn','nl','default','en'} {'srn','nl','default','en'}
✓[OK] ss {'ss','default','en'} {'ss','default','en'}
✓[OK] st {'st','default','en'} {'st','default','en'}
✓[OK] stq {'stq','de','default','en'} {'stq','de','default','en'}
✓[OK] su {'su','id','default','en'} {'su','id','default','en'}
✓[OK] sv {'sv','default','en'} {'sv','default','en'}
✓[OK] sw {'sw','default','en'} {'sw','default','en'}
✓[OK] szl {'szl','pl','default','en'} {'szl','pl','default','en'}
✓[OK] ta {'ta','default','en'} {'ta','default','en'}
✓[OK] tcy {'tcy','kn','default','en'} {'tcy','kn','default','en'}
✓[OK] te {'te','default','en'} {'te','default','en'}
⚠[!] tet {'tet','pt','default','en'} {'tet','pt','pt-br','default','en'}
✓[OK] tg {'tg','tg-cyrl','default','en'} {'tg','tg-cyrl','default','en'}
✓[OK] tg-cyrl {'tg-cyrl','tg','default','en'} {'tg-cyrl','tg','default','en'}
⚠[!] tg-latn {'tg-latn','tg','default','en'} {'tg-latn','tg','tg-cyrl','default','en'}
✓[OK] th {'th','default','en'} {'th','default','en'}
✓[OK] ti {'ti','default','en'} {'ti','default','en'}
✓[OK] tk {'tk','default','en'} {'tk','default','en'}
✓[OK] tl {'tl','default','en'} {'tl','default','en'}
✓[OK] tly {'tly','default','en'} {'tly','default','en'}
✓[OK] tn {'tn','default','en'} {'tn','default','en'}
✓[OK] to {'to','default','en'} {'to','default','en'}
✓[OK] tokipona {'tokipona','default','en'} {'tokipona','default','en'}
✓[OK] tpi {'tpi','default','en'} {'tpi','default','en'}
✓[OK] tr {'tr','default','en'} {'tr','default','en'}
✓[OK] tru {'tru','default','en'} {'tru','default','en'}
✓[OK] ts {'ts','default','en'} {'ts','default','en'}
✓[OK] tt {'tt','tt-cyrl','ru','default','en'} {'tt','tt-cyrl','ru','default','en'}
⚠[!] tt-cyrl {'tt-cyrl','ru','default','en'} {'tt-cyrl','tt','ru','default','en'}
⚠[!] tt-latn {'tt-latn','default','en'} {'tt-latn','tt','tt-cyrl','ru','default','en'}
✓[OK] tum {'tum','default','en'} {'tum','default','en'}
✓[OK] tw {'tw','default','en'} {'tw','default','en'}
✓[OK] ty {'ty','fr','default','en'} {'ty','fr','default','en'}
✓[OK] tyv {'tyv','ru','default','en'} {'tyv','ru','default','en'}
✓[OK] udm {'udm','ru','default','en'} {'udm','ru','default','en'}
✓[OK] ug {'ug','ug-arab','default','en'} {'ug','ug-arab','default','en'}
⚠[!] ug-arab {'ug-arab','default','en'} {'ug-arab','ug','default','en'}
⚠[!] ug-latn {'ug-latn','default','en'} {'ug-latn','ug','ug-arab','default','en'}
✓[OK] uk {'uk','default','en'} {'uk','default','en'}
✓[OK] ur {'ur','default','en'} {'ur','default','en'}
✓[OK] uz {'uz','default','en'} {'uz','default','en'}
✓[OK] ve {'ve','default','en'} {'ve','default','en'}
✓[OK] vec {'vec','it','default','en'} {'vec','it','default','en'}
✓[OK] vep {'vep','et','default','en'} {'vep','et','default','en'}
✓[OK] vi {'vi','default','en'} {'vi','default','en'}
✓[OK] vls {'vls','nl','default','en'} {'vls','nl','default','en'}
✓[OK] vmf {'vmf','de','default','en'} {'vmf','de','default','en'}
✓[OK] vo {'vo','default','en'} {'vo','default','en'}
✓[OK] vot {'vot','fi','default','en'} {'vot','fi','default','en'}
✓[OK] vro {'vro','et','default','en'} {'vro','et','default','en'}
✓[OK] wa {'wa','fr','default','en'} {'wa','fr','default','en'}
✓[OK] war {'war','default','en'} {'war','default','en'}
✓[OK] wo {'wo','fr','default','en'} {'wo','fr','default','en'}
⚠[!] wuu {'wuu','wuu-hans','wuu-hant','zh-hans','zh','zh-hant','default','en'} {'wuu','zh-hans','zh-cn','zh','wuu-hans','wuu-hant','zh-hant','zh-tw','zh-hk','default','en'}
✓[OK] xal {'xal','ru','default','en'} {'xal','ru','default','en'}
✓[OK] xh {'xh','default','en'} {'xh','default','en'}
✓[OK] xmf {'xmf','ka','default','en'} {'xmf','ka','default','en'}
✓[OK] yi {'yi','he','default','en'} {'yi','he','default','en'}
✓[OK] yo {'yo','default','en'} {'yo','default','en'}
✓[OK] yue {'yue','yue-hant','yue-hans','default','en'} {'yue','yue-hant','yue-hans','default','en'}
⚠[!] za {'za','zh-hans','zh','zh-hant','default','en'} {'za','zh-hans','zh-cn','zh','zh-hant','zh-tw','zh-hk','default','en'}
✓[OK] zea {'zea','nl','default','en'} {'zea','nl','default','en'}
⚠[!] zh {'zh','zh-hans','zh-hant','zh-cn','zh-tw','zh-hk','default','en'} {'zh','zh-hans','zh-cn','zh-hant','zh-tw','zh-hk','default','en'}
⚠[!] zh-classical {'zh-classical','default','en'} {'zh-classical','lzh','zh','zh-hant','zh-hans','zh-cn','zh-tw','zh-hk','default','en'}
⚠[!] zh-cn {'zh-cn','zh-hans','zh','zh-hant','default','en'} {'zh-cn','zh-hans','zh','zh-hant','zh-tw','zh-hk','default','en'}
⚠[!] zh-hans {'zh-hans','zh-cn','zh','zh-hant','default','en'} {'zh-hans','zh-cn','zh','zh-hant','zh-tw','zh-hk','default','en'}
⚠[!] zh-hant {'zh-hant','zh-tw','zh-hk','zh','zh-hans','default','en'} {'zh-hant','zh','zh-hans','zh-cn','zh-tw','zh-hk','default','en'}
⚠[!] zh-hk {'zh-hk','zh-hant','zh-tw','zh','zh-hans','default','en'} {'zh-hk','zh-hant','zh','zh-hans','zh-cn','zh-tw','default','en'}
⚠[!] zh-min-nan {'zh-min-nan','default','en'} {'zh-min-nan','nan','zh','cdo','zh-hant','zh-hans','zh-cn','zh-tw','zh-hk','default','en'}
⚠[!] zh-mo {'zh-mo','zh-hk','zh-hant','zh-tw','zh','zh-hans','default','en'} {'zh-mo','zh-hk','zh-hant','zh','zh-hans','zh-cn','zh-tw','default','en'}
⚠[!] zh-my {'zh-my','zh-sg','zh-hans','zh-cn','zh','zh-hant','default','en'} {'zh-my','zh-sg','zh-hans','zh-cn','zh','zh-hant','zh-tw','zh-hk','default','en'}
⚠[!] zh-sg {'zh-sg','zh-hans','zh-cn','zh','zh-hant','default','en'} {'zh-sg','zh-hans','zh-cn','zh','zh-hant','zh-tw','zh-hk','default','en'}
⚠[!] zh-tw {'zh-tw','zh-hant','zh-hk','zh','zh-hans','default','en'} {'zh-tw','zh-hant','zh','zh-hans','zh-cn','zh-hk','default','en'}
⚠[!] zh-yue {'zh-yue','default','en'} {'zh-yue','yue','zh','yue-hant','yue-hans','zh-hans','zh-hant','zh-cn','zh-tw','zh-hk','default','en'}
✓[OK] zu {'zu','default','en'} {'zu','default','en'}


The list shown in test_Languages_compare_fallbacks exhibit differences only (they are not failures). Tests in previous lists of should not fail.

Also most differences between this module and the MediaWiki core function are caused in fact by false data returned by the MediaWiki core library in PHP (or lack of data, or never data never tested correctly). The fallback lists in this module are much better but still have a few missing details (some fallbacks are still missing between various aliases).
Really the fallback system should be based on BCP47 (even if we add also the legacy language codes still used in MediaWiki and which do not conform to BCP47).
In summary; do NOT remove this module, unless there are real corrections in MediaWiki PHP library (and its associated data resources), and they are correctly tested (to take into account script variants and regional variants of main languages or their dialects, but more importantly for macrolanguages). But this won't really happen before all data on Wikimedia projects are migrated to use only BCP47 locale identifiers and legacy codes are deprecated or mapped to only one BCP47 identifier, including for interwiki prefixes such as Wikipedia edition identifiers!). verdy_p (talk) 17:01, 17 April 2015 (UTC)[reply]