Adding a wgContLang object to handle message translation for the content of the site...
authorZheng Zhu <zhengzhu@users.mediawiki.org>
Wed, 22 Sep 2004 03:32:56 +0000 (03:32 +0000)
committerZheng Zhu <zhengzhu@users.mediawiki.org>
Wed, 22 Sep 2004 03:32:56 +0000 (03:32 +0000)
includes/MessageCache.php
includes/Setup.php
includes/User.php

index bf27e7f..bb9c9c8 100755 (executable)
@@ -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();
index ce499d4..7163f35 100644 (file)
@@ -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' );
index a38f60c..69e0bc1 100644 (file)
@@ -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());
        }
 
        /**