- global $wgUser, $wgRequest, $wgVariantArticlePath, $wgDefaultLanguageVariant;
-
- if($this->mPreferredVariant)
- return $this->mPreferredVariant;
-
- // figure out user lang without constructing wgLang to avoid infinite recursion
- if( $fromUser )
- $defaultUserLang = $wgUser->getOption( 'language' );
- else
- $defaultUserLang = $this->mMainLanguageCode;
- $userLang = $wgRequest->getVal( 'uselang', $defaultUserLang );
- // see if interface language is same as content, if not, prevent conversion
- if( ! in_array( $userLang, $this->mVariants ) ){
- $this->mPreferredVariant = $this->mMainLanguageCode; // no conversion
- return $this->mPreferredVariant;
- }
-
- // see if the preference is set in the request
- $req = $wgRequest->getText( 'variant' );
- if( in_array( $req, $this->mVariants ) ) {
- $this->mPreferredVariant = $req;
- return $req;
- }
-
- // check the syntax /code/ArticleTitle
- if($wgVariantArticlePath!=false && isset($_SERVER['SCRIPT_NAME'])){
- // Note: SCRIPT_NAME probably won't hold the correct value if PHP is run as CGI
- // (it will hold path to php.cgi binary), and might not exist on some very old PHP installations
- $scriptBase = basename( $_SERVER['SCRIPT_NAME'] );
- if(in_array($scriptBase,$this->mVariants)){
- $this->mPreferredVariant = $scriptBase;
- return $this->mPreferredVariant;
- }
- }
-
- // get language variant preference from logged in users
- // Don't call this on stub objects because that causes infinite
- // recursion during initialisation
- if( $fromUser && $wgUser->isLoggedIn() ) {
- $this->mPreferredVariant = $wgUser->getOption('variant');
- return $this->mPreferredVariant;
- }
-
- // see if default variant is globaly set
- if($wgDefaultLanguageVariant != false && in_array( $wgDefaultLanguageVariant, $this->mVariants )){
- $this->mPreferredVariant = $wgDefaultLanguageVariant;
- return $this->mPreferredVariant;
- }
-
- # FIXME rewrite code for parsing http header. The current code
- # is written specific for detecting zh- variants
- if( !$this->mPreferredVariant ) {
- // see if some supported language variant is set in the
- // http header, but we don't set the mPreferredVariant
- // variable in case this is called before the user's
- // preference is loaded
- $pv=$this->mMainLanguageCode;
- if(array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER)) {
- $header = str_replace( '_', '-', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]));
- $zh = strstr($header, $pv.'-');
- if($zh) {
- $ary = split("[,;]",$zh);
- $pv = $ary[0];
- }
- }
- // don't try to return bad variant
- if(in_array( $pv, $this->mVariants ))
- return $pv;
- }
-
- return $this->mMainLanguageCode;
-