$req = $this->validateVariant( $wgDefaultLanguageVariant );
}
- $req = $this->validateVariant( $req );
-
// This function, unlike the other get*Variant functions, is
// not memoized (i.e. there return value is not cached) since
// new information might appear during processing after this
// is first called.
- if ( $req ) {
+ if ( $this->validateVariant( $req ) ) {
return $req;
}
return $this->mMainLanguageCode;
* @return mixed Returns the variant if it is valid, null otherwise
*/
public function validateVariant( $variant = null ) {
- if ( $variant === null ) {
- return null;
- }
- // Our internal variants are always lower-case; the variant we
- // are validating may have mixed case.
- $variant = LanguageCode::replaceDeprecatedCodes( strtolower( $variant ) );
- if ( in_array( $variant, $this->mVariants ) ) {
+ if ( $variant !== null && in_array( $variant, $this->mVariants ) ) {
return $variant;
}
- // Browsers are supposed to use BCP 47 standard in the
- // Accept-Language header, but not all of our internal
- // mediawiki variant codes are BCP 47. Map BCP 47 code
- // to our internal code.
- foreach ( $this->mVariants as $v ) {
- // Case-insensitive match (BCP 47 is mixed case)
- if ( strtolower( LanguageCode::bcp47( $v ) ) === $variant ) {
- return $v;
- }
- }
return null;
}
return $this->mHeaderVariant;
}
- // See if some supported language variant is set in the
+ // see if some supported language variant is set in the
// HTTP header.
$languages = array_keys( $wgRequest->getAcceptLang() );
if ( empty( $languages ) ) {
$convTable = $convRule->getConvTable();
$action = $convRule->getRulesAction();
foreach ( $convTable as $variant => $pair ) {
- $v = $this->validateVariant( $variant );
- if ( !$v ) {
+ if ( !$this->validateVariant( $variant ) ) {
continue;
}
if ( $action == 'add' ) {
// More efficient than array_merge(), about 2.5 times.
foreach ( $pair as $from => $to ) {
- $this->mTables[$v]->setPair( $from, $to );
+ $this->mTables[$variant]->setPair( $from, $to );
}
} elseif ( $action == 'remove' ) {
- $this->mTables[$v]->removeArray( $pair );
+ $this->mTables[$variant]->removeArray( $pair );
}
}
}
$this->lang = new LanguageToTest();
$this->lc = new TestConverter(
$this->lang, 'tg',
- # Adding 'sgs' as a variant to ensure we handle deprecated codes
- # adding 'simple' as a variant to ensure we handle non BCP 47 codes
- [ 'tg', 'tg-latn', 'sgs', 'simple' ]
+ [ 'tg', 'tg-latn' ]
);
}
$this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
}
- /**
- * @covers LanguageConverter::getPreferredVariant
- * @covers LanguageConverter::getURLVariant
- */
- public function testGetPreferredVariantUrl() {
- global $wgRequest;
- $wgRequest->setVal( 'variant', 'tg-latn' );
-
- $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
- }
-
- /**
- * @covers LanguageConverter::getPreferredVariant
- * @covers LanguageConverter::getURLVariant
- */
- public function testGetPreferredVariantUrlDeprecated() {
- global $wgRequest;
- $wgRequest->setVal( 'variant', 'bat-smg' );
-
- $this->assertEquals( 'sgs', $this->lc->getPreferredVariant() );
- }
-
- /**
- * @covers LanguageConverter::getPreferredVariant
- * @covers LanguageConverter::getURLVariant
- */
- public function testGetPreferredVariantUrlBCP47() {
- global $wgRequest;
- $wgRequest->setVal( 'variant', 'en-simple' );
-
- $this->assertEquals( 'simple', $this->lc->getPreferredVariant() );
- }
-
/**
* @covers LanguageConverter::getPreferredVariant
* @covers LanguageConverter::getHeaderVariant
$this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
}
- /**
- * @covers LanguageConverter::getPreferredVariant
- * @covers LanguageConverter::getHeaderVariant
- */
- public function testGetPreferredVariantHeadersBCP47() {
- global $wgRequest;
- $wgRequest->setHeader( 'Accept-Language', 'en-simple' );
-
- $this->assertEquals( 'simple', $this->lc->getPreferredVariant() );
- }
-
/**
* @covers LanguageConverter::getPreferredVariant
* @covers LanguageConverter::getHeaderVariant
$this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
}
- /**
- * @covers LanguageConverter::getPreferredVariant
- */
- public function testGetPreferredVariantUserOptionDeprecated() {
- global $wgUser;
-
- $wgUser = new User;
- $wgUser->load(); // from 'defaults'
- $wgUser->mId = 1;
- $wgUser->mDataLoaded = true;
- $wgUser->mOptionsLoaded = true;
- $wgUser->setOption( 'variant', 'bat-smg' );
-
- $this->assertEquals( 'sgs', $this->lc->getPreferredVariant() );
- }
-
- /**
- * @covers LanguageConverter::getPreferredVariant
- */
- public function testGetPreferredVariantUserOptionBCP47() {
- global $wgUser;
-
- $wgUser = new User;
- $wgUser->load(); // from 'defaults'
- $wgUser->mId = 1;
- $wgUser->mDataLoaded = true;
- $wgUser->mOptionsLoaded = true;
- $wgUser->setOption( 'variant', 'en-simple' );
-
- $this->assertEquals( 'simple', $this->lc->getPreferredVariant() );
- }
-
/**
* @covers LanguageConverter::getPreferredVariant
* @covers LanguageConverter::getUserVariant
$this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
}
- /**
- * @covers LanguageConverter::getPreferredVariant
- * @covers LanguageConverter::getUserVariant
- */
- public function testGetPreferredVariantUserOptionForForeignLanguageDeprecated() {
- global $wgContLang, $wgUser;
-
- $wgContLang = Language::factory( 'en' );
- $wgUser = new User;
- $wgUser->load(); // from 'defaults'
- $wgUser->mId = 1;
- $wgUser->mDataLoaded = true;
- $wgUser->mOptionsLoaded = true;
- $wgUser->setOption( 'variant-tg', 'bat-smg' );
-
- $this->assertEquals( 'sgs', $this->lc->getPreferredVariant() );
- }
-
- /**
- * @covers LanguageConverter::getPreferredVariant
- * @covers LanguageConverter::getUserVariant
- */
- public function testGetPreferredVariantUserOptionForForeignLanguageBCP47() {
- global $wgContLang, $wgUser;
-
- $wgContLang = Language::factory( 'en' );
- $wgUser = new User;
- $wgUser->load(); // from 'defaults'
- $wgUser->mId = 1;
- $wgUser->mDataLoaded = true;
- $wgUser->mOptionsLoaded = true;
- $wgUser->setOption( 'variant-tg', 'en-simple' );
-
- $this->assertEquals( 'simple', $this->lc->getPreferredVariant() );
- }
-
/**
* @covers LanguageConverter::getPreferredVariant
* @covers LanguageConverter::getUserVariant
$this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
}
- /**
- * @covers LanguageConverter::getPreferredVariant
- */
- public function testGetPreferredVariantDefaultLanguageVariantDeprecated() {
- global $wgDefaultLanguageVariant;
-
- $wgDefaultLanguageVariant = 'bat-smg';
- $this->assertEquals( 'sgs', $this->lc->getPreferredVariant() );
- }
-
- /**
- * @covers LanguageConverter::getPreferredVariant
- */
- public function testGetPreferredVariantDefaultLanguageVariantBCP47() {
- global $wgDefaultLanguageVariant;
-
- $wgDefaultLanguageVariant = 'en-simple';
- $this->assertEquals( 'simple', $this->lc->getPreferredVariant() );
- }
-
/**
* @covers LanguageConverter::getPreferredVariant
* @covers LanguageConverter::getURLVariant
function loadDefaultTables() {
$this->mTables = [
- 'sgs' => new ReplacementArray(),
- 'simple' => new ReplacementArray(),
'tg-latn' => new ReplacementArray( $this->table ),
'tg' => new ReplacementArray()
];