Ensure LanguageCode::bcp47() returns a valid BCP 47 language code
authorC. Scott Ananian <cscott@cscott.net>
Tue, 26 Jun 2018 20:39:57 +0000 (16:39 -0400)
committerC. Scott Ananian <cscott@cscott.net>
Fri, 13 Jul 2018 18:56:18 +0000 (14:56 -0400)
commit8380f0173e79b66f0e2afd6c49cd88afb9f4f6f3
tree52e9a83f39c0d4e54a1ef3013b17957dcb19da72
parent5fc5d3cc5908a23bb59c924842d0087372877349
Ensure LanguageCode::bcp47() returns a valid BCP 47 language code

MediaWiki uses a number of nonstandard codes which do not validate
according to the IANA language subtag registry.  Some of them have
the wrong semantics entirely: MediaWiki's `sr-ec` variant maps to
BCP 47 `sr-EC` which is "Serbian as used in Ethiopia" (!).

Extend LanguageCode::bcp47() to map our nonstandard codes to valid
BCP 47 language codes.  Export the mapping so that it can be used
in JavaScript's corresponding mw.language.bcp47() implementation
as well.

Thanks to TheDJ (I10b4473c7e53f027812bbccf26bb47aec15fddfd) and
Fomafix (I93efc190714ba76247d30ba49fc21ae872fc3555) for previous
attempts at this!

Also removed a fixme for the name of 'Twi', dating back to 2004
(f59c3be23b209e178a917cb14ebedcc243c847b6) -- checking
tw.wikipedia.org it certainly appears that the autonym of 'Twi'
is correctly 'Twi'.

Tracking bugs for invalid language codes are T125073 and T145535.
Discussion of zh-XX => zh-HanX-XX mapping is at T198419.

Bug: T34483
Bug: T106367
Bug: T120847
Change-Id: I807dd55d49e9bd19443329231326a5b0d3e6c453
RELEASE-NOTES-1.32
includes/api/ApiQuerySiteinfo.php
includes/resourceloader/ResourceLoaderLanguageDataModule.php
languages/LanguageCode.php
languages/data/Names.php
languages/i18n/qqq.json
resources/src/mediawiki.language/mediawiki.language.init.js
resources/src/mediawiki.language/mediawiki.language.js
tests/phpunit/languages/LanguageCodeTest.php
tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js