// explode by comma
$result = explode(',', $acceptLanguage);
- $languages = array();
+ $languages = array();
foreach( $result as $elem ) {
// if $elem likes 'zh-cn;q=0.9'
}
}
+ $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;
}
}
}
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'),