Move method 'getPreferredVariant' to Language class, patched by Fdcn.
authorPhilip Tzou <philip@users.mediawiki.org>
Thu, 29 Jan 2009 06:51:20 +0000 (06:51 +0000)
committerPhilip Tzou <philip@users.mediawiki.org>
Thu, 29 Jan 2009 06:51:20 +0000 (06:51 +0000)
languages/Language.php
languages/LanguageConverter.php
languages/classes/LanguageZh.php

index c1bccd9..366ab53 100644 (file)
@@ -53,7 +53,7 @@ class FakeConverter {
  * @ingroup Language
  */
 class Language {
-       var $mConverter, $mVariants, $mCode, $mLoaded = false;
+       var $mConverter, $mVariant, $mVariants, $mCode, $mLoaded = false;
        var $mMagicExtensions = array(), $mMagicHookDone = false;
 
        static public $mLocalisationKeys = array(
@@ -2210,9 +2210,86 @@ class Language {
                return $this->mConverter->getVariants();
        }
 
-
+       /**
+        * get preferred language variants.
+        * moved from LanguageConverter class
+        * @param boolean $fromUser Get it from $wgUser's preferences
+        * @return string the preferred language code
+        * @public
+        */
        function getPreferredVariant( $fromUser = true ) {
-               return $this->mConverter->getPreferredVariant( $fromUser );
+               global $wgUser, $wgRequest, $wgVariantArticlePath, $wgDefaultLanguageVariant;
+
+               if($this->mVariant)
+                       return $this->mVariant;
+
+               // figure out user lang without constructing wgLang to avoid infinite recursion
+               if( $fromUser )
+                       $defaultUserLang = $wgUser->getOption( 'language' );
+               else
+                       $defaultUserLang = $this->mConverter->mMainLanguageCode;
+               $userLang = $wgRequest->getVal( 'uselang', $defaultUserLang );
+               // see if interface language is same as content, if not, prevent conversion
+               if( ! in_array( $userLang, $this->mConverter->mVariants ) ){ 
+                       $this->mVariant = $this->mConverter->mMainLanguageCode; // no conversion
+                       return $this->mVariant;
+               }
+
+               // see if the preference is set in the request
+               $req = $wgRequest->getText( 'variant' );
+               if( in_array( $req, $this->mConverter->mVariants ) ) {
+                       $this->mVariant = $req;
+                       return $req;
+               }
+
+               // check the syntax /code/ArticleTitle
+               if($wgVariantArticlePath!=false && isset($_SERVER['SCRIPT_NAME'])){
+                       // Note: SCRIPT_NAME probably won't hold the correct value if PHP is run as CGI
+                       // (it will hold path to php.cgi binary), and might not exist on some very old PHP installations
+                       $scriptBase = basename( $_SERVER['SCRIPT_NAME'] );
+                       if(in_array($scriptBase,$this->mConverter->mVariants)){
+                               $this->mVariant = $scriptBase;
+                               return $this->mPreferredVariant;
+                       }
+               }
+
+               // get language variant preference from logged in users
+               // Don't call this on stub objects because that causes infinite 
+               // recursion during initialisation
+               if( $fromUser && $wgUser->isLoggedIn() )  {
+                       $this->mVariant = $wgUser->getOption('variant');
+                       return $this->mVariant;
+               }
+
+               // see if default variant is globaly set
+               if($wgDefaultLanguageVariant != false  &&  in_array( $wgDefaultLanguageVariant, $this->mVariants )){
+                       $this->mVariant = $wgDefaultLanguageVariant;
+                       return $this->mVariant;
+               }
+
+               # FIXME rewrite code for parsing http header. The current code
+               # is written specific for detecting zh- variants
+               if( !$this->mVariant ) {
+                       // see if some supported language variant is set in the
+                       // http header, but we don't set the mPreferredVariant
+                       // variable in case this is called before the user's
+                       // preference is loaded
+                       $pv=$this->mConverter->mMainLanguageCode;
+                       if(array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER)) {
+                               $header = str_replace( '_', '-', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]));
+                               $zh = strstr($header, $pv.'-');
+                               if($zh) {
+                                       $ary = split("[,;]",$zh);
+                                       $pv = $ary[0];
+                               }
+                       }
+                       // don't try to return bad variant
+                       if(in_array( $pv, $this->mConverter->mVariants ))
+                               return $pv;
+               }
+
+               return $this->mConverter->mMainLanguageCode;
+
        }
 
        /**
index 9c38d2f..a070f3f 100644 (file)
@@ -18,7 +18,7 @@
 class LanguageConverter {
        var $mPreferredVariant='';
        var $mMainLanguageCode;
-       var $mVariants, $mVariantFallbacks, $mVariantNames;
+       var $mVariants, $mVariantFallbacks, $mLanguageNames;
        var $mTablesLoaded = false;
        var $mTables;
        var $mManualAddTables;
@@ -58,7 +58,7 @@ class LanguageConverter {
                $this->mVariants = $variants;
                $this->mVariantFallbacks = $variantfallbacks;
                global $wgLanguageNames;
-               $this->mVariantNames = $wgLanguageNames;
+               $this->mLanguageNames = $wgLanguageNames;
                $this->mCacheKey = wfMemcKey( 'conversiontables', $maincode );
                $m = array(
                        'begin'=>'-{', 
@@ -117,85 +117,9 @@ class LanguageConverter {
                return $this->mMainLanguageCode;
        }
 
-       /**
-        * get preferred language variants.
-        * @param boolean $fromUser Get it from $wgUser's preferences
-        * @return string the preferred language code
-        * @public
-        */
+       // this method body in Language class
        function getPreferredVariant( $fromUser = true ) {
-               global $wgUser, $wgRequest, $wgVariantArticlePath, $wgDefaultLanguageVariant;
-
-               if($this->mPreferredVariant)
-                       return $this->mPreferredVariant;
-
-               // figure out user lang without constructing wgLang to avoid infinite recursion
-               if( $fromUser )
-                       $defaultUserLang = $wgUser->getOption( 'language' );
-               else
-                       $defaultUserLang = $this->mMainLanguageCode;
-               $userLang = $wgRequest->getVal( 'uselang', $defaultUserLang );
-               // see if interface language is same as content, if not, prevent conversion
-               if( ! in_array( $userLang, $this->mVariants ) ){ 
-                       $this->mPreferredVariant = $this->mMainLanguageCode; // no conversion
-                       return $this->mPreferredVariant;
-               }
-
-               // see if the preference is set in the request
-               $req = $wgRequest->getText( 'variant' );
-               if( in_array( $req, $this->mVariants ) ) {
-                       $this->mPreferredVariant = $req;
-                       return $req;
-               }
-
-               // check the syntax /code/ArticleTitle
-               if($wgVariantArticlePath!=false && isset($_SERVER['SCRIPT_NAME'])){
-                       // Note: SCRIPT_NAME probably won't hold the correct value if PHP is run as CGI
-                       // (it will hold path to php.cgi binary), and might not exist on some very old PHP installations
-                       $scriptBase = basename( $_SERVER['SCRIPT_NAME'] );
-                       if(in_array($scriptBase,$this->mVariants)){
-                               $this->mPreferredVariant = $scriptBase;
-                               return $this->mPreferredVariant;
-                       }
-               }
-
-               // get language variant preference from logged in users
-               // Don't call this on stub objects because that causes infinite 
-               // recursion during initialisation
-               if( $fromUser && $wgUser->isLoggedIn() )  {
-                       $this->mPreferredVariant = $wgUser->getOption('variant');
-                       return $this->mPreferredVariant;
-               }
-
-               // see if default variant is globaly set
-               if($wgDefaultLanguageVariant != false  &&  in_array( $wgDefaultLanguageVariant, $this->mVariants )){
-                       $this->mPreferredVariant = $wgDefaultLanguageVariant;
-                       return $this->mPreferredVariant;
-               }
-
-               # FIXME rewrite code for parsing http header. The current code
-               # is written specific for detecting zh- variants
-               if( !$this->mPreferredVariant ) {
-                       // see if some supported language variant is set in the
-                       // http header, but we don't set the mPreferredVariant
-                       // variable in case this is called before the user's
-                       // preference is loaded
-                       $pv=$this->mMainLanguageCode;
-                       if(array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER)) {
-                               $header = str_replace( '_', '-', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]));
-                               $zh = strstr($header, $pv.'-');
-                               if($zh) {
-                                       $ary = split("[,;]",$zh);
-                                       $pv = $ary[0];
-                               }
-                       }
-                       // don't try to return bad variant
-                       if(in_array( $pv, $this->mVariants ))
-                               return $pv;
-               }
-
-               return $this->mMainLanguageCode;
-
+               return $this->mLangObj->getPreferredVariant( $fromUser );
        }
        
        /**
@@ -208,10 +132,10 @@ class LanguageConverter {
         * @private
         */
        function captionConvert( $matches ) {
-               // we convert captions except URL
                $toVariant = $this->getPreferredVariant();
                $title = $matches[1];
                $text  = $matches[2];
+               // we convert captions except URL
                if( !strpos( $text, '://' ) )
                        $text = $this->translate($text, $toVariant);
                return " $title=\"$text\"";
@@ -978,7 +902,7 @@ class ConverterRule {
                                        $unidtable[$v][$from]=$to;
                        }
                        // syntax error, pass
-                       if (!array_key_exists($v,$this->mConverter->mVariantNames)){
+                       if (!array_key_exists($v,$this->mConverter->mLanguageNames)){
                                $bidtable = array();
                                $unidtable = array();
                                break;
@@ -996,10 +920,10 @@ class ConverterRule {
                $varsep = $this->mConverter->mDescVarSep;
                $text='';
                foreach($this->mBidtable as $k => $v)
-                       $text .= $this->mConverter->mVariantNames[$k]."$codesep$v$varsep";
+                       $text .= $this->mConverter->mLanguageNames[$k]."$codesep$v$varsep";
                foreach($this->mUnidtable as $k => $a)
                        foreach($a as $from=>$to)
-                               $text.=$from.'⇒'.$this->mConverter->mVariantNames[$k]."$codesep$to$varsep";
+                               $text.="$from&#8658;".$this->mConverter->mLanguageNames[$k]."$codesep$to$varsep";
                return $text;
        }
 
@@ -1125,7 +1049,7 @@ class ConverterRule {
                        $this->mRuleDisplay = $rules;
                } elseif ( in_array('N',$flags) ){
                        // proces N flag: output current variant name
-                       $this->mRuleDisplay = $this->mConverter->mVariantNames[trim($rules)];
+                       $this->mRuleDisplay = $this->mConverter->mLanguageNames[trim($rules)];
                } elseif ( in_array('D',$flags) ){
                        // proces D flag: output rules description
                        $this->mRuleDisplay = $this->getRulesDesc();
index 0936269..e257d5a 100644 (file)
@@ -33,7 +33,7 @@ class ZhConverter extends LanguageConverter {
                        'zh-sg'   => '新加坡',
                        'zh-my'   => '大马',
                );
-               $this->mVariantNames = array_merge($this->mVariantNames,$names);
+               $this->mLanguageNames = array_merge($this->mLanguageNames,$names);
        }
 
        function loadDefaultTables() {