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