From cc632696ba6e8c5a9a8cfbe1ae55c52c149f2448 Mon Sep 17 00:00:00 2001 From: Zheng Zhu Date: Wed, 22 Sep 2004 03:32:56 +0000 Subject: [PATCH] Adding a wgContLang object to handle message translation for the content of the site; wgLang should be used exclusively for UI messages. --- includes/MessageCache.php | 37 ++++++++++++---- includes/Setup.php | 89 +++++++++++++++++++++++---------------- includes/User.php | 11 ++--- 3 files changed, 87 insertions(+), 50 deletions(-) diff --git a/includes/MessageCache.php b/includes/MessageCache.php index bf27e7f557..bb9c9c8cf0 100755 --- a/includes/MessageCache.php +++ b/includes/MessageCache.php @@ -22,10 +22,10 @@ class MessageCache var $mCache, $mUseCache, $mDisable, $mExpiry; var $mMemcKey, $mKeys, $mParserOptions, $mParser; var $mExtensionMessages; - + var $mIsForContent; //whether this is for content messages or ui messages var $mInitialised = false; - function initialise( &$memCached, $useDB, $expiry, $memcPrefix ) { + function initialise( &$memCached, $useDB, $expiry, $memcPrefix, $forContent=false ) { $fname = 'MessageCache::initialise'; wfProfileIn( $fname ); $this->mUseCache = !is_null( $memCached ); @@ -36,13 +36,14 @@ class MessageCache $this->mMemcKey = $memcPrefix.':messages'; $this->mKeys = false; # initialised on demand $this->mInitialised = true; + $this->mIsForContent = $forContent; wfProfileIn( $fname.'-parseropt' ); $this->mParserOptions = ParserOptions::newFromUser( $u=NULL ); wfProfileOut( $fname.'-parseropt' ); wfProfileIn( $fname.'-parser' ); $this->mParser = new Parser; wfProfileOut( $fname.'-parser' ); - + $this->load(); wfProfileOut( $fname ); } @@ -139,11 +140,20 @@ class MessageCache * Not really needed anymore */ function getKeys() { - global $wgAllMessagesEn, $wgLang; + global $wgAllMessagesEn; + if($this->mIsForContent) { + global $wgContLang; + $langobj = $wgContLang; + } + else { + global $wgLang; + $langobj = $wgLang; + } + if ( !$this->mKeys ) { $this->mKeys = array(); foreach ( $wgAllMessagesEn as $key => $value ) { - array_push( $this->mKeys, $wgLang->ucfirst( $key ) ); + array_push( $this->mKeys, $langobj->ucfirst( $key ) ); } } return $this->mKeys; @@ -198,7 +208,16 @@ class MessageCache } function get( $key, $useDB ) { - global $wgLang, $wgLanguageCode; + if($this->mIsForContent) { + global $wgContLang, $wgContLanguageCode; + $langobj = $wgContLang; + $langcode=$wgContLanguageCode; + } + else { + global $wgLang, $wgLanguageCode; + $langobj=$wgLang; + $langcode = $wgLanguageCode; + } # If uninitialised, someone is trying to call this halfway through Setup.php if ( !$this->mInitialised ) { @@ -207,7 +226,7 @@ class MessageCache $message = false; if ( !$this->mDisable && $useDB ) { - $title = $wgLang->ucfirst( $key ); + $title = $langobj->ucfirst( $key ); # Try the cache @@ -234,12 +253,12 @@ class MessageCache # Try the array in $wgLang if ( !$message ) { wfSuppressWarnings(); - $message = $wgLang->getMessage( $key ); + $message = $langobj->getMessage( $key ); wfRestoreWarnings(); } # Try the English array - if ( !$message && $wgLanguageCode != 'en' ) { + if ( !$message && $langcode != 'en' ) { wfSuppressWarnings(); $message = Language::getMessage( $key ); wfRestoreWarnings(); diff --git a/includes/Setup.php b/includes/Setup.php index ce499d458e..7163f35748 100644 --- a/includes/Setup.php +++ b/includes/Setup.php @@ -74,10 +74,10 @@ $wgRequest = new WebRequest(); wfProfileOut( $fname.'-includes' ); wfProfileIn( $fname.'-misc1' ); -global $wgUser, $wgLang, $wgOut, $wgTitle; +global $wgUser, $wgLang, $wgContLang, $wgOut, $wgTitle; global $wgArticle, $wgDeferredUpdateList, $wgLinkCache; global $wgMemc, $wgMagicWords, $wgMwRedir, $wgDebugLogFile; -global $wgMessageCache, $wgUseMemCached, $wgUseDatabaseMessages; +global $wgMessageCache, $wgUseMemCached, $wgUseDatabaseMessages, $wgContMessageCach; global $wgMsgCacheExpiry, $wgCommandLineMode; global $wgBlockCache, $wgParserCache, $wgParser, $wgDBConnections; global $wgLoadBalancer, $wgDBservers, $wgDebugDumpSql; @@ -231,51 +231,68 @@ if( count( $wgUserLanguages ) && wfProfileOut( $fname.'-User' ); wfProfileIn( $fname.'-language' ); -require_once( 'languages/Language.php' ); - -$wgMessageCache = new MessageCache; -$wgLangClass = 'Language' . str_replace( '-', '_', ucfirst( $wgLanguageCode ) ); -if( ! class_exists( $wgLangClass ) || ($wgLanguageCode == 'en' && !$wgUseLatin1) ) { - # Default to English/UTF-8 - require_once( 'languages/LanguageUtf8.php' ); - $wgLangClass = 'LanguageUtf8'; +function setupLangObj($langclass, $langcode) { + global $wgUseLatin1; + + + if( ! class_exists( $langclass ) || ($langcode == 'en' && !$wgUseLatin1) ) { +# Default to English/UTF-8 + require_once( 'languages/LanguageUtf8.php' ); + $langclass = 'LanguageUtf8'; + } + + $lang = new $langclass(); + if ( !is_object($lang) ) { + print "No language class ($wgLang)\N"; + } + + if( $wgUseLatin1 && $langcode != 'en' ) { +# For non-UTF-8 non-English. + require_once( 'languages/LanguageLatin1.php' ); + $xxx = new LanguageLatin1( $lang ); + unset( $lang ); + $lang = $xxx; + } + return $lang; } -$wgLang = new $wgLangClass(); -if ( !is_object($wgLang) ) { - print "No language class ($wgLang)\N"; -} - -if( $wgUseLatin1 && $wgLanguageCode != 'en' ) { - # For non-UTF-8 non-English. - require_once( 'languages/LanguageLatin1.php' ); - $xxx = new LanguageLatin1( $wgLang ); - unset( $wgLang ); - $wgLang = $xxx; -} +/* TODO: change the installation script so that + wgContLanguageCode is set there instead of here +*/ +require_once( 'languages/Language.php' ); +$wgContLanguageCode = $wgLanguageCode; +$wgContLangClass = 'Language' . str_replace( '-', '_', ucfirst( $wgContLanguageCode ) ); +$wgContLang = setupLangObj(&$wgContLangClass, $wgContLangClass); -// now that we have a language object, set per language user defaults options -// if we didn't grabbed them from database. +// set default user option from content language if(!$wgUser->mDataLoaded) { $wgUser->loadDefaultFromLanguage(); } -// and change the messages array used - -if(isset($wgUserLanguageCode)) { - /** Need to load the language datas */ - require_once( 'languages/Language'.str_replace('-', '_', ucfirst( $wgUserLanguageCode )).'.php'); - $sitemsgarray = 'wgAllMessages'.ucfirst($wgLanguageCode); - $usermsgarray = 'wgAllMessages'.str_replace('-', '_', ucfirst( $wgUserLanguageCode )); - $$sitemsgarray = &$$usermsgarray; - // rebuild the language object messages - $wgLang->Language(); -} +// wgLanguageCode now specifically means the UI language +$wgLanguageCode = $wgUser->getOption('language'); + +$wgLangClass = 'Language'. str_replace( '-', '_', ucfirst( $wgLanguageCode ) ); + if($wgLangClass == $wgContLangClass) { + $wgLang = &$wgContLang; + } + else { + include_once("languages/$wgLangClass.php"); + $wgLang = setupLangObj(&$wgLangClass, $wgLanguageCode); + } wfProfileOut( $fname.'-language' ); wfProfileIn( $fname.'-MessageCache' ); -$wgMessageCache->initialise( $messageMemc, $wgUseDatabaseMessages, $wgMsgCacheExpiry, $wgDBname ); +$wgContMessageCache = new MessageCache; +$wgContMessageCache->initialise( $messageMemc, $wgUseDatabaseMessages, $wgMsgCacheExpiry, $wgDBname, true ); +if($wgLangClass == $wgContLangClass) { + $wgMessageCache = &$wgContMessageCache; +} +else { + $wgMessageCache = new MessageCache; + $wgMessageCache->initialise( $messageMemc,false , $wgMsgCacheExpiry, $wgDBname.":$wgLangClass", false); +} wfProfileOut( $fname.'-MessageCache' ); wfProfileIn( $fname.'-OutputPage' ); diff --git a/includes/User.php b/includes/User.php index a38f60c178..69e0bc16c0 100644 --- a/includes/User.php +++ b/includes/User.php @@ -159,15 +159,16 @@ class User { * a language object. */ function loadDefaultFromLanguage(){ - global $wgLang; - $defOpt = $wgLang->getDefaultUserOptions() ; + global $wgContLang; + $defOpt = $wgContLang->getDefaultUserOptions() ; foreach ( $defOpt as $oname => $val ) { $this->mOptions[$oname] = $val; } - /* so that new user will have a default - language variant set using info from the http header + /* + default language setting */ - $this->setOption('variant', $wgLang->getPreferredVariant()); + $this->setOption('variant', $wgContLang->getPreferredVariant()); + $this->setOption('language', $wgContLang->getPreferredVariant()); } /** -- 2.20.1