Merge "Cleaning up function definitions in Language.php"
[lhc/web/wiklou.git] / languages / Language.php
index fb73b1e..2b98a18 100644 (file)
@@ -261,7 +261,10 @@ class Language {
         * @since 1.21
         */
        public static function isSupportedLanguage( $code ) {
-               return $code === strtolower( $code ) && is_readable( self::getMessagesFileName( $code ) );
+               return self::isValidBuiltInCode( $code )
+                       && ( is_readable( self::getMessagesFileName( $code ) )
+                               || is_readable( self::getJsonMessagesFileName( $code ) )
+               );
        }
 
        /**
@@ -351,7 +354,7 @@ class Language {
 
        /**
         * Returns true if a language code is of a valid form for the purposes of
-        * internal customisation of MediaWiki, via Messages*.php.
+        * internal customisation of MediaWiki, via Messages*.php or *.json.
         *
         * @param $code string
         *
@@ -911,12 +914,16 @@ class Language {
                        # We do this using a foreach over the codes instead of a directory
                        # loop so that messages files in extensions will work correctly.
                        foreach ( $returnMw as $code => $value ) {
-                               if ( is_readable( self::getMessagesFileName( $code ) ) ) {
+                               if ( is_readable( self::getMessagesFileName( $code ) )
+                                       || is_readable( self::getJsonMessagesFileName( $code ) )
+                               ) {
                                        $namesMwFile[$code] = $names[$code];
                                }
                        }
+
                        return $namesMwFile;
                }
+
                # 'mw' option; default if it's not one of the other two options (all/mwfile)
                return $returnMw;
        }
@@ -4049,10 +4056,7 @@ class Language {
         * @return string $prefix . $mangledCode . $suffix
         */
        public static function getFileName( $prefix = 'Language', $code, $suffix = '.php' ) {
-               // Protect against path traversal
-               if ( !Language::isValidCode( $code )
-                       || strcspn( $code, ":/\\\000" ) !== strlen( $code )
-               ) {
+               if ( !self::isValidBuiltInCode( $code ) ) {
                        throw new MWException( "Invalid language code \"$code\"" );
                }
 
@@ -4087,6 +4091,21 @@ class Language {
                return $file;
        }
 
+       /**
+        * @param $code string
+        * @return string
+        * @since 1.23
+        */
+       public static function getJsonMessagesFileName( $code ) {
+               global $IP;
+
+               if ( !self::isValidBuiltInCode( $code ) ) {
+                       throw new MWException( "Invalid language code \"$code\"" );
+               }
+
+               return "$IP/languages/i18n/$code.json" ;
+       }
+
        /**
         * @param $code string
         * @return string