From: Philip Tzou Date: Fri, 21 Aug 2009 16:00:01 +0000 (+0000) Subject: 1. Revert my revision r55371. Since it may override logged user's settings. X-Git-Tag: 1.31.0-rc.0~40163 X-Git-Url: http://git.cyclocoop.org/%7B%24www_url%7Dadmin/membres/fiche.php?a=commitdiff_plain;h=e05338c102e4e41c37dafc03e7c050fceaab2ce4;p=lhc%2Fweb%2Fwiklou.git 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. --- diff --git a/languages/LanguageConverter.php b/languages/LanguageConverter.php index e219ddc4eb..91f2fa9cae 100644 --- a/languages/LanguageConverter.php +++ b/languages/LanguageConverter.php @@ -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; } } } diff --git a/languages/classes/LanguageZh.php b/languages/classes/LanguageZh.php index d937d58eb7..008242458f 100644 --- a/languages/classes/LanguageZh.php +++ b/languages/classes/LanguageZh.php @@ -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'),