* wfLoadExtensionMessages() now accepts a language code as its second argument, rathe...
authorRobert Leverington <roberthl@users.mediawiki.org>
Mon, 5 May 2008 13:29:51 +0000 (13:29 +0000)
committerRobert Leverington <roberthl@users.mediawiki.org>
Mon, 5 May 2008 13:29:51 +0000 (13:29 +0000)
includes/GlobalFunctions.php
includes/MessageCache.php

index e86ae19..acc1e24 100644 (file)
@@ -2479,16 +2479,29 @@ function wfBoolToStr( $value ) {
  * Load an extension messages file
  *
  * @param string $extensionName Name of extension to load messages from\for.
- * @param boolean $all Whether or not to load all languages.
- */
-function wfLoadExtensionMessages( $extensionName, $all = false ) {
-       global $wgExtensionMessagesFiles, $wgMessageCache;
-       if ( !empty( $wgExtensionMessagesFiles[$extensionName] ) ) {
-               $wgMessageCache->loadMessagesFile( $wgExtensionMessagesFiles[$extensionName], $all );
-               // Prevent double-loading if all the messages have been loaded.
-               if( $all ) {
-                       $wgExtensionMessagesFiles[$extensionName] = false;
-               }
+ * @param string $langcode Language to load messages for, or false for default
+ *                         behvaiour (en, content language and user language).
+ */
+function wfLoadExtensionMessages( $extensionName, $langcode = false ) {
+       global $wgExtensionMessagesFiles, $wgMessageCache, $wgLang, $wgContLang;
+       
+       #For recording whether extension message files have been loaded in a given language.
+       static $loaded = array();
+       
+       if( !$langcode && !array_key_exists( '*', $loaded ) ) {
+               # Just do en, content language and user language.
+               $wgMessageCache->loadMessagesFile( $wgExtensionMessagesFiles[$extensionName], false );
+               # Mark that they have been loaded.
+               $loaded['en'] = true;
+               $loaded[$wgLang->getCode()] = true;
+               $loaded[$wgContLang->getCode()] = true;
+               # Mark that this part has been done to avoid weird if statements.
+               $loaded['*'] = true;
+       } elseif( is_string( $langcode ) && !array_key_exists( $langcode, $loaded ) ) {
+               # Load messages for specified language.
+               $wgMessageCache->loadMessagesFile( $wgExtensionMessagesFiles[$extensionName], $langcode );
+               # Mark that they have been loaded.
+               $loaded[$langcode] = true;
        }
 }
 
index bbea94a..0547a11 100644 (file)
@@ -714,21 +714,21 @@ class MessageCache {
         * Load messages from a given file
         * 
         * @param string $filename Filename of file to load.
-        * @param boolean $all Whether or not to load all languages.
+        * @param string $langcode Language to load messages for, or false for 
+     *                         default behvaiour (en, content language and user
+     *                         language).
         */
-       function loadMessagesFile( $filename, $all = false ) {
+       function loadMessagesFile( $filename, $langcode = false ) {
                global $wgLang, $wgContLang;
                $messages = $magicWords = false;
                require( $filename );
 
-               if( $all ) {
-                       # Load all messages, regardless of language.
-                       $validCodes = array_keys( Language::getLanguageNames() );
-                       foreach( $messages as $code => $array ) {
-                               if( in_array( $code, $validCodes ) ) {
-                                       $this->processMessagesArray( $messages, $code );
-                               }
-                       }
+               $validCodes = Language::getLanguageNames();
+               if( is_string( $langcode ) && array_key_exists( $langcode, $validCodes ) ) {
+                       # Load messages for given language code.
+                       $this->processMessagesArray( $messages, $langcode );
+               } elseif( is_string( $langcode ) && !array_key_exists( $langcode, $validCodes ) ) {
+                       wfDebug( "Invalid language '$langcode' code passed to MessageCache::loadMessagesFile()" );
                } else {
                        # Load only languages that are usually used, and merge all
                        # fallbacks, except English.
@@ -748,10 +748,10 @@ class MessageCache {
         * Process an array of messages, loading it into the message cache.
         *
         * @param array $messages Messages array.
-        * @param string $language Language code to process.
+        * @param string $langcode Language code to process.
         */
-       function processMessagesArray( $messages, $language ) {
-               $fallbackCode = $language;
+       function processMessagesArray( $messages, $langcode ) {
+               $fallbackCode = $langcode;
                $mergedMessages = array();
                do {
                        if ( isset($messages[$fallbackCode]) ) {
@@ -761,7 +761,7 @@ class MessageCache {
                } while( $fallbackCode && $fallbackCode !== 'en' );
                
                if ( !empty($mergedMessages) )
-                       $this->addMessages( $mergedMessages, $language );
+                       $this->addMessages( $mergedMessages, $langcode );
        }
 
 }