From: Robert Leverington Date: Mon, 5 May 2008 13:29:51 +0000 (+0000) Subject: * wfLoadExtensionMessages() now accepts a language code as its second argument, rathe... X-Git-Tag: 1.31.0-rc.0~47905 X-Git-Url: https://git.cyclocoop.org/%242?a=commitdiff_plain;h=deca107b90e2dbc9beb4b8599a7e62bb5bc66460;p=lhc%2Fweb%2Fwiklou.git * wfLoadExtensionMessages() now accepts a language code as its second argument, rather than a boolean indicating whether or not to load all messages. This allows extension developers to be more discriminate with regards to which languages they load, avoiding the problem of loading lots of message localisations and fall backs not being merged in. --- diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index e86ae19cd6..acc1e244d0 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -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; } } diff --git a/includes/MessageCache.php b/includes/MessageCache.php index bbea94abe0..0547a11fa7 100644 --- a/includes/MessageCache.php +++ b/includes/MessageCache.php @@ -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 ); } }