* 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;
}
}
* 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.
* 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]) ) {
} while( $fallbackCode && $fallbackCode !== 'en' );
if ( !empty($mergedMessages) )
- $this->addMessages( $mergedMessages, $language );
+ $this->addMessages( $mergedMessages, $langcode );
}
}