// see if the preference is set in the request
$req = $wgRequest->getText( 'variant' );
- if ( in_array( $req, $this->mVariants ) ) {
- $this->mPreferredVariant = $req;
- return $this->mPreferredVariant;
- }
-
- if ( $fromUser ) {
- // bug 21974, don't return $this->mPreferredVariant if
- // $fromUser = false
- if ( $this->mPreferredVariant ) {
- return $this->mPreferredVariant;
- }
-
- // figure out user lang without constructing wgLang to avoid
- // infinite recursion
- $defaultUserLang = $wgUser->getOption( 'language' );
- // get language variant preference from logged in users
- // Don't call this on stub objects because that causes infinite
- // recursion during initialisation
- if ( $wgUser->isLoggedIn() ) {
- $this->mPreferredVariant = $wgUser->getOption( 'variant' );
- }
-
- } else {
- $defaultUserLang = $this->mMainLanguageCode;
+ if ( !$req ) {
+ $req = $wgRequest->getVal( 'uselang' );
}
- $userLang = $wgRequest->getVal( 'uselang', $defaultUserLang );
- // see if interface language is same as content, if not, prevent
- // conversion
- if ( ! in_array( $userLang, $this->mVariants ) ) {
- // no conversion
- $this->mPreferredVariant = $this->mMainLanguageCode;
- return $this->mPreferredVariant;
- } elseif ( $this->mPreferredVariant ) {
- // if the variant was set above and it iss a variant of
- // the content language
- return $this->mPreferredVariant;
+ if ( $fromUser && !$req ) {
+ $req = $this->getUserVariant();
}
- // see if default variant is globaly set
- if ( $wgDefaultLanguageVariant != false
- && in_array( $wgDefaultLanguageVariant, $this->mVariants ) ) {
- $this->mPreferredVariant = $wgDefaultLanguageVariant;
- return $this->mPreferredVariant;
+ if ( $fromHeader && !$req ) {
+ $req = $this->getHeaderVariant();
}
- $headerVariant = $this->getHeaderVariant();
- if ( $fromHeader && $headerVariant ) {
- return $headerVariant;
+ if ( $wgDefaultLanguageVariant && !$req ) {
+ $req = $wgDefaultLanguageVariant;
}
+ if ( in_array( $req, $this->mVariants ) ) {
+ return $req;
+ }
return $this->mMainLanguageCode;
}
+ /**
+ * Determine the user has a variant set.
+ *
+ * @returns mixed variant if one found, false otherwise.
+ */
+ function getUserVariant() {
+ global $wgUser;
+
+ // get language variant preference from logged in users
+ // Don't call this on stub objects because that causes infinite
+ // recursion during initialisation
+ if ( $wgUser->isLoggedIn() ) {
+ return $wgUser->getOption( 'variant' );
+ }
+ else {
+ // figure out user lang without constructing wgLang to avoid
+ // infinite recursion
+ return $wgUser->getOption( 'language' );
+ }
+ }
+
+
/**
* Determine the language variant from the Accept-Language header.
*
if ( $wgDisableLangConversion ) return $text;
$plang = $this->getPreferredVariant();
+
$tarray = StringUtils::explode( $this->mMarkup['end'], $text );
$converted = '';
$wgRequest = new FauxRequest(array());
$wgUser = new User;
- $wgContLang = Language::factory( 'tg-latn' );
+ $wgContLang = Language::factory( 'tg' );
$this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
$this->assertEquals('tg', $this->lc->getPreferredVariant(false, true));
$this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
$this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, true));
$this->assertEquals('tg', $this->lc->getPreferredVariant(true, false));
- $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, true));
+ $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true));
$wgRequest->setHeader('Accept-Language', 'tg;q=1');
$this->lc = new TestConverter( $this->lang, 'tg',
$this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
$this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, true));
$this->assertEquals('tg', $this->lc->getPreferredVariant(true, false));
- $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, true));
+ $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true));
$wgRequest->setHeader('Accept-Language', 'en, tg-latn;q=1');
$this->lc = new TestConverter( $this->lang, 'tg',
$this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
$this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, true));
$this->assertEquals('tg', $this->lc->getPreferredVariant(true, false));
- $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, true));
+ $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true));
$wgRequest->setHeader('Accept-Language', '');
$wgUser = User::newFromId("admin");
$this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, false));
$this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, true));
+ $wgRequest->setVal('variant', null);
+ $wgDefaultLanguageVariant = 'tg';
+ $this->lc = new TestConverter( $this->lang, 'tg',
+ array( 'tg', 'tg-latn' ) );
+ $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
+ $this->assertEquals('tg', $this->lc->getPreferredVariant(false, true));
+ $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, false));
+ $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, true));
+
}
}