Index: languages/Language.php =================================================================== --- languages/Language.php (revision 105772) +++ languages/Language.php (working copy) @@ -132,6 +132,25 @@ 'hijri-calendar-m10', 'hijri-calendar-m11', 'hijri-calendar-m12' ); + static public $mBCP47Normalizations = array( + 'simple' => 'en-x-simple', + 'als' => 'gsw', // als is now ISO gsw, but might later be moved to aeg + 'bat-smg' => 'sgs', + 'be-x-old' => 'be-tarask', + 'cbk-zam' => 'cbk', // Family name + 'ksh' => 'gem', // Family name. No ripuarian macrolanguage code, ksh too specific + 'fiu-vro' => 'vro', + 'map-bms' => 'map', // Family name. No Banyumasan langaguage code + 'ms' => 'zsm', + 'nds-nl' => 'nl', // A collection of dutch low saxon dialects + 'no' => 'nb', + 'roa-rup' => 'rup', + 'roa-tara' => 'roa', // Family name, no Tarantino language code + 'sq' => 'als', + 'zh-classical' => 'lzh', + 'zh-min-nan' => 'nan' + ); + /** * Get a cached language object for a given language code * @param $code String @@ -690,6 +709,22 @@ } /** + * Get the BCP-47 tag of a MediaWiki language code + * + * http://tools.ietf.org/rfc/bcp/bcp47.txt + * http://en.wikipedia.org/wiki/IETF_language_tag + * + * @param $code String Language code. + * @return String bcp-47 code. If unknown, fallback to $code + */ + public static function getBCP47LanguageTag( $code ) { + if( array_key_exists( $code, self::$mBCP47Normalizations ) ) { + return self::$mBCP47Normalizations[$code]; + } + return $code; + } + + /** * Get a message from the MediaWiki namespace. * * @param $msg String: message name @@ -3446,7 +3481,7 @@ * @return string */ function getCode() { - return $this->mCode; + return Language::getBCP47LanguageTag($this->mCode); } /**