From a4cfa79ea811d2f43743fc80ae5dcff5f1a33b8a Mon Sep 17 00:00:00 2001 From: Alexandre Emsenhuber Date: Sat, 26 Jul 2008 20:41:52 +0000 Subject: [PATCH] * factorize common code * allow to pass directly a Language object --- includes/GlobalFunctions.php | 59 ++++++++++++++++++++++++++---------- includes/MessageCache.php | 24 ++------------- 2 files changed, 45 insertions(+), 38 deletions(-) diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index ed68880e56..c0d7fe9398 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -319,6 +319,47 @@ function wfReadOnlyReason() { return $wgReadOnly; } +/** + * Return a Language object from $langcode + * @param $langcode Mixed: either: + * - a Language object + * - code of the language to get the message for, if it is + * a valid code create a language for that language, if + * it is a string but not a valid code then make a basic + * language object + * - a boolean: if it's false then use the current users + * language (as a fallback for the old parameter + * functionality), or if it is true then use the wikis + * @return Language object + */ +function wfGetLangObj( $langcode = false ){ + # Identify which language to get or create a language object for. + if( $langcode instanceof Language ) + # Great, we already have the object! + return $langcode; + + global $wgContLang; + if( $langcode === $wgContLang->getCode() || $langcode === true ) + # $langcode is the language code of the wikis content language object. + # or it is a boolean and value is true + return $wgContLang; + + global $wgLang; + if( $langcode === $wgLang->getCode() || $langcode === false ) + # $langcode is the language code of user language object. + # or it was a boolean and value is false + return $wgLang; + + $validCodes = array_keys( Language::getLanguageNames() ); + if( in_array( $langcode, $validCodes ) ) + # $langcode corresponds to a valid language. + return Language::factory( $langcode ); + + # $langcode is a string, but not a valid language code; use content language. + wfDebug( 'Invalid language code passed to wfGetLangObj, falling back to content language.' ); + return $wgContLang; +} + /** * Get a message from anywhere, for the current user language. * @@ -458,7 +499,7 @@ function wfMsgWeirdKey ( $key ) { * @private */ function wfMsgGetKey( $key, $useDB, $langCode = false, $transform = true ) { - global $wgParser, $wgContLang, $wgMessageCache, $wgLang; + global $wgContLang, $wgMessageCache; wfRunHooks('NormalizeMessageKey', array(&$key, &$useDB, &$langCode, &$transform)); @@ -469,21 +510,7 @@ function wfMsgGetKey( $key, $useDB, $langCode = false, $transform = true ) { $message = $wgMessageCache->transform( $message ); } } else { - if( $langCode === true ) { - $lang = &$wgContLang; - } elseif( $langCode === false ) { - $lang = &$wgLang; - } else { - $validCodes = array_keys( Language::getLanguageNames() ); - if( in_array( $langCode, $validCodes ) ) { - # $langcode corresponds to a valid language. - $lang = Language::factory( $langCode ); - } else { - # $langcode is a string, but not a valid language code; use content language. - $lang =& $wgContLang; - wfDebug( 'Invalid language code passed to wfMsgGetKey, falling back to content language.' ); - } - } + $lang = wfGetLangObj( $langCode ); # MessageCache::get() does this already, Language::getMessage() doesn't # ISSUE: Should we try to handle "message/lang" here too? diff --git a/includes/MessageCache.php b/includes/MessageCache.php index f24d3b4df5..39e64108f1 100644 --- a/includes/MessageCache.php +++ b/includes/MessageCache.php @@ -498,29 +498,9 @@ class MessageCache { * @param bool $isFullKey Specifies whether $key is a two part key "lang/msg". */ function get( $key, $useDB = true, $langcode = true, $isFullKey = false ) { - global $wgContLanguageCode, $wgContLang, $wgLang; - - # Identify which language to get or create a language object for. - if( $langcode === $wgContLang->getCode() || $langcode === true ) { - # $langcode is the language code of the wikis content language object. - # or it is a boolean and value is true - $lang =& $wgContLang; - } elseif( $langcode === $wgLang->getCode() || $langcode === false ) { - # $langcode is the language code of user language object. - # or it was a boolean and value is false - $lang =& $wgLang; - } else { - $validCodes = array_keys( Language::getLanguageNames() ); - if( in_array( $langcode, $validCodes ) ) { - # $langcode corresponds to a valid language. - $lang = Language::factory( $langcode ); - } else { - # $langcode is a string, but not a valid language code; use content language. - $lang =& $wgContLang; - wfDebug( 'Invalid language code passed to MessageCache::get, falling back to content language.' ); - } - } + global $wgContLanguageCode, $wgContLang; + $lang = wfGetLangObj( $langcode ); $langcode = $lang->getCode(); # If uninitialised, someone is trying to call this halfway through Setup.php -- 2.20.1