* (bug 12880) wfLoadExtensionMessages does not use $fallback from MessagesXx.php
authorNiklas Laxström <nikerabbit@users.mediawiki.org>
Sat, 2 Feb 2008 20:33:25 +0000 (20:33 +0000)
committerNiklas Laxström <nikerabbit@users.mediawiki.org>
Sat, 2 Feb 2008 20:33:25 +0000 (20:33 +0000)
RELEASE-NOTES
includes/MessageCache.php

index 4be799d..920aa24 100644 (file)
@@ -353,6 +353,7 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN
 * Fix for Special:Export so it doesn't ignore the page named '0'
 * Don't display rollback link if the user doesn't have all required permissions
 * The comment of a time-limited protection now contains the date in the default format
+* (bug 12880) wfLoadExtensionMessages does not use $fallback from MessagesXx.php
 
 == Parser changes in 1.12 ==
 
index 2f40897..743bd7f 100644 (file)
@@ -637,7 +637,8 @@ class MessageCache {
        }
 
        /**
-        * Get the extension messages for a specific language
+        * Get the extension messages for a specific language. Only English, interface
+        * and content language are guaranteed to be loaded.
         *
         * @param string $lang The messages language, English by default
         */
@@ -692,11 +693,27 @@ class MessageCache {
         * Load messages from a given file
         */
        function loadMessagesFile( $filename ) {
+               global $wgLang, $wgContLang;
                $messages = $magicWords = false;
                require( $filename );
 
-               if ( $messages !== false ) {
-                       $this->addMessagesByLang( $messages );
+               /*
+                * Load only languages that are usually used, and merge all fallbacks,
+                * except English.
+                */
+               $langs = array_unique( array( 'en', $wgContLang->getCode(), $wgLang->getCode() ) );
+               foreach( $langs as $code ) {
+                       $fbcode = $code;
+                       $mergedMessages = array();
+                       do {
+                               if ( isset($messages[$fbcode]) ) {
+                                       $mergedMessages += $messages[$fbcode];
+                               }
+                               $fbcode = Language::getFallbackfor( $fbcode );
+                       } while( $fbcode && $fbcode !== 'en' );
+
+                       if ( !empty($mergedMessages) )
+                               $this->addMessages( $mergedMessages, $code );
                }
 
                if ( $magicWords !== false ) {