mw.language: add :toBcp47Code() method

This allows conversion of MediaWiki-internal codes to standardized
codes suitable for inclusion in HTML.

Change-Id: I5d2102ca57cc6861b8ec144a90f9c17b630f38ce
This commit is contained in:
C. Scott Ananian 2023-12-14 16:59:41 -05:00 committed by C. Scott Ananian
parent e30641e439
commit 9694e8f543
3 changed files with 35 additions and 0 deletions

View file

@ -6,6 +6,7 @@ use DateTime;
use DateTimeZone;
use Exception;
use Language;
use LanguageCode;
use MediaWiki\Languages\LanguageNameUtils;
use MediaWiki\MediaWikiServices;
use MediaWiki\Title\Title;
@ -36,6 +37,7 @@ class LanguageLibrary extends LibraryBase {
'fetchLanguageName',
'fetchLanguageNames',
'getFallbacksFor',
'toBcp47Code',
];
$methods = [
'lcfirst',
@ -163,6 +165,18 @@ class LanguageLibrary extends LibraryBase {
return [ $ret ];
}
/**
* Handler for toBcp47Code
* @internal
* @param string $code a MediaWiki-internal code
* @return string[] a BCP-47 language tag
*/
public function toBcp47Code( $code ) {
$this->checkType( 'toBcp47Code', 1, $code, 'string' );
$ret = LanguageCode::bcp47( $code );
return [ $ret ];
}
/**
* Language object method handler
* @internal

View file

@ -69,6 +69,7 @@ function language.new( code )
local checkSelf = util.makeCheckSelfFunction( 'mw.language', 'lang', lang, 'language object' )
local wrappers = {
toBcp47Code = 0,
lcfirst = 1,
ucfirst = 1,
lc = 1,

View file

@ -169,6 +169,26 @@ return testframework.getTestProvider( {
}
},
{ name = 'lang:toBcp47Code (sr-ec)', func = test_method_lang,
args = { 'sr-ec', 'toBcp47Code' },
expect = { 'sr-Cyrl' },
},
{ name = 'lang:toBcp47Code (sr-el)', func = test_method_lang,
args = { 'sr-el', 'toBcp47Code' },
expect = { 'sr-Latn' },
},
{ name = 'lang:toBcp47Code (en)', func = test_method_lang,
args = { 'en', 'toBcp47Code' },
expect = { 'en' },
},
{ name = 'lang:toBcp47Code (simple)', func = test_method_lang,
args = { 'simple', 'toBcp47Code' },
expect = { 'en-simple' },
},
{ name = 'lang:getFallbackLanguages', func = test_method,
args = { 'getFallbackLanguages' },
expect = {