Tweak the language code display more comply with the BCP 47 standards, using a new...
authorShinjiman <shinjiman@users.mediawiki.org>
Fri, 24 Jul 2009 17:41:01 +0000 (17:41 +0000)
committerShinjiman <shinjiman@users.mediawiki.org>
Fri, 24 Jul 2009 17:41:01 +0000 (17:41 +0000)
RELEASE-NOTES
config/index.php
includes/GlobalFunctions.php
includes/Preferences.php

index 950508c..e389e02 100644 (file)
@@ -324,7 +324,9 @@ this. Was used when mwEmbed was going to be an extension.
 * (bug 16877) Moving a page over a redirect no longer leaves an orphan entry in
   the recentchanges table
 * (bug 16009) Limit selection forms based on Pager now links to the correct page
-  when using long urls 
+  when using long urls
+* The display of the language list on the preferences is more comply with the 
+  BCP 47 standards.
 
 == API changes in 1.16 ==
 
index 0bce9e6..12b45b7 100644 (file)
@@ -2094,7 +2094,7 @@ function getLanguageList() {
                if( preg_match( '/Messages([A-Z][a-z_]+)\.php$/', $f, $m ) ) {
                        $code = str_replace( '_', '-', strtolower( $m[1] ) );
                        if( isset( $wgLanguageNames[$code] ) ) {
-                               $name = $code . ' - ' . $wgLanguageNames[$code];
+                               $name = wfBCP47( $code ) . ' - ' . $wgLanguageNames[$code];
                        } else {
                                $name = $code;
                        }
index 621b1fb..f10f30c 100644 (file)
@@ -3190,3 +3190,22 @@ function wfObjectToArray( $object, $recursive = true ) {
        
        return $array;
 }
+
+/* get the noramised IETF language tag */
+function wfBCP47( $code ) {
+       $codeSegment = explode( '-', $code );
+       foreach ( $codeSegment as $segNo => $seg ) {
+               // ISO 3166 country code
+               if ( ( strlen( $seg ) == 2 ) && ( $segNo > 0 ) )
+                       $codeBCP[$segNo] = strtoupper ( $seg );
+               // ISO 15924 script code
+               else if ( ( strlen( $seg ) == 4 ) && ( $segNo > 0 ) )
+                       $codeBCP[$segNo] = ucfirst( $seg );
+               // Keep casing for other cases
+               else
+                       $codeBCP[$segNo] = $seg;
+       }
+       $langCode = implode ( '-' , $codeBCP );
+       return $langCode;
+}
+
index e81ed5b..49cdd0f 100644 (file)
@@ -208,7 +208,7 @@ class Preferences {
 
                $options = array();
                foreach( $languages as $code => $name ) {
-                       $display = "$code - $name";
+                       $display = wfBCP47( $code ) . ' - ' . $name;
                        $options[$display] = $code;
                }
                $defaultPreferences['language'] =
@@ -237,7 +237,7 @@ class Preferences {
 
                        $options = array();
                        foreach( $variantArray as $code => $name ) {
-                               $display = "$code - $name";
+                               $display = wfBCP47( $code ) . ' - ' . $name;
                                $options[$display] = $code;
                        }