http://www.mediawiki.org/wiki/Special:Code/MediaWiki/55415

Revision: 55415
Author:   philip
Date:     2009-08-21 16:00:01 +0000 (Fri, 21 Aug 2009)

Log Message:
-----------
1. Revert my revision r55371. Since it may override logged user's settings.
2. Patch for situations that some wikis like zhwikisource may disabled some 
language variants. We should treat these disabled variants unacceptable in 
LanguageConverter.

Modified Paths:
--------------
    trunk/phase3/languages/LanguageConverter.php
    trunk/phase3/languages/classes/LanguageZh.php

Modified: trunk/phase3/languages/LanguageConverter.php
===================================================================
--- trunk/phase3/languages/LanguageConverter.php        2009-08-21 15:54:51 UTC 
(rev 55414)
+++ trunk/phase3/languages/LanguageConverter.php        2009-08-21 16:00:01 UTC 
(rev 55415)
@@ -183,7 +183,7 @@
                                // explode by comma
                                $result = explode(',', $acceptLanguage);
                                
-                               $languages  = array();
+                               $languages = array();
 
                                foreach( $result as $elem ) {
                                        // if $elem likes 'zh-cn;q=0.9'
@@ -196,14 +196,32 @@
                                        }
                                }
 
+                               $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;
+                                       }
+                               }
                        }
                }
 

Modified: trunk/phase3/languages/classes/LanguageZh.php
===================================================================
--- trunk/phase3/languages/classes/LanguageZh.php       2009-08-21 15:54:51 UTC 
(rev 55414)
+++ trunk/phase3/languages/classes/LanguageZh.php       2009-08-21 16:00:01 UTC 
(rev 55415)
@@ -132,7 +132,17 @@
                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'),



_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to