From e05338c102e4e41c37dafc03e7c050fceaab2ce4 Mon Sep 17 00:00:00 2001 From: Philip Tzou Date: Fri, 21 Aug 2009 16:00:01 +0000 Subject: [PATCH] 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. --- languages/LanguageConverter.php | 24 +++++++++++++++++++++--- languages/classes/LanguageZh.php | 12 +++++++++++- 2 files changed, 32 insertions(+), 4 deletions(-) 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'), -- 2.20.1