1. Revert my revision r55371. Since it may override logged user's settings.
authorPhilip Tzou <philip@users.mediawiki.org>
Fri, 21 Aug 2009 16:00:01 +0000 (16:00 +0000)
committerPhilip Tzou <philip@users.mediawiki.org>
Fri, 21 Aug 2009 16:00:01 +0000 (16:00 +0000)
2. Patch for situations that some wikis like zhwikisource may disabled some language variants. We should treat these disabled variants unacceptable in LanguageConverter.

languages/LanguageConverter.php
languages/classes/LanguageZh.php

index e219ddc..91f2fa9 100644 (file)
@@ -183,7 +183,7 @@ class LanguageConverter {
                                // explode by comma
                                $result = explode(',', $acceptLanguage);
                                
-                               $languages  = array();
+                               $languages = array();
 
                                foreach( $result as $elem ) {
                                        // if $elem likes 'zh-cn;q=0.9'
@@ -196,12 +196,30 @@ class LanguageConverter {
                                        }
                                }
 
+                               $fallback_languages = array();
                                foreach( $languages as $language ) {
                                        // strip whitespace
                                        $language = trim( $language );
                                        if( in_array( $language, $this->mVariants ) ) {
-                                               $this->mPreferredVariant = $language;
-                                               return $this->mPreferredVariant;
+                                               return $language;
+                                       }
+                                       else {
+                                               // To see if there are fallbacks of current language.
+                                               // We record these fallback variants, and process
+                                               // them later.
+                                               $fallbacks = $this->getVariantFallbacks( $language );
+                                               if( is_string( $fallbacks ) )
+                                                       $fallback_languages[] = $fallbacks;
+                                               elseif( is_array( $fallbacks ) )
+                                                       $fallback_languages = array_merge( $fallback_languages, $fallbacks );
+                                       }
+                               }
+
+                               // process fallback languages now
+                               $fallback_languages = array_unique( $fallback_languages );
+                               foreach( $fallback_languages as $language ) {
+                                       if( in_array( $language, $this->mVariants ) ) {
+                                               return $language;
                                        }
                                }
                        }
index d937d58..0082424 100644 (file)
@@ -132,7 +132,17 @@ class LanguageZh extends LanguageZh_hans {
                global $wgHooks;
                parent::__construct();
 
-               $variants = array('zh','zh-hans','zh-hant','zh-cn','zh-hk','zh-mo','zh-my','zh-sg','zh-tw');
+               $variants_all = array('zh','zh-hans','zh-hant','zh-cn','zh-hk','zh-mo','zh-my','zh-sg','zh-tw');
+               $variants = array();
+               
+               // If a wiki disabled some variants,
+               // LanguageConverter shouldn't process them
+               foreach( $variants_all as $variant ) {
+                       $status = wfMsgExt( "variantname-$variant", array( 'parsemag', 'language' => $this ) );
+                       if( trim($status) != 'disable' )
+                               $variants[] = $variant;
+               }
+               
                $variantfallbacks = array(
                        'zh'      => array('zh-hans','zh-hant','zh-cn','zh-tw','zh-hk','zh-sg','zh-mo','zh-my'),
                        'zh-hans' => array('zh-cn','zh-sg','zh-my'),