In Iaaf6ccebd8c40c9602748c58c3a5c73c29e7aa4d, the behavior of MessageCache
was changed so that it iterates over all possible on-wiki fallbacks including
the site language fallbacks. However, it omitted the site language itself.
Obviously, the problem appears only when the site language is not English,
because English is included always as the fallback language of last resort.
But in other cases, we need to add it explicitly.
Bug: 1495
Change-Id: Ib607a446d3499a3c042dce408db5cbaf12fa9e3d
if ( end( $fallbacks ) === 'en' ) {
array_pop( $fallbacks );
}
if ( end( $fallbacks ) === 'en' ) {
array_pop( $fallbacks );
}
- // Append the site's fallback chain
+ // Append the site's fallback chain, including the site language itself
$siteFallbacks = self::getFallbacksFor( $wgLanguageCode );
$siteFallbacks = self::getFallbacksFor( $wgLanguageCode );
+ array_unshift( $siteFallbacks, $wgLanguageCode );
// Eliminate any languages already included in the chain
$siteFallbacks = array_intersect( array_diff( $siteFallbacks, $fallbacks ), $siteFallbacks );
// Eliminate any languages already included in the chain
$siteFallbacks = array_intersect( array_diff( $siteFallbacks, $fallbacks ), $siteFallbacks );
protected function setUp() {
parent::setUp();
protected function setUp() {
parent::setUp();
+ $this->configureLanguages();
MessageCache::singleton()->enable();
}
MessageCache::singleton()->enable();
}
- function addDBData() {
- // be sure english messages under $key, not $key/en
+ /**
+ * Helper function -- setup site language for testing
+ */
+ protected function configureLanguages() {
+ // for the test, we need the content language to be anything but English,
+ // let's choose e.g. German (de)
+ $langCode = 'de';
+ $langObj = Language::factory( $langCode );
+
$this->setMwGlobals( array(
$this->setMwGlobals( array(
- 'wgLanguageCode' => 'en',
- 'wgContLang' => Language::factory( 'en' ),
+ 'wgLanguageCode' => $langCode,
+ 'wgLang' => $langObj,
+ 'wgContLang' => $langObj,
+ }
+
+ function addDBData() {
+ $this->configureLanguages();
- // Set up messages and fallbacks ab -> ru -> en
+ // Set up messages and fallbacks ab -> ru -> de -> en
$this->makePage( 'FallbackLanguageTest-Full', 'ab' );
$this->makePage( 'FallbackLanguageTest-Full', 'ru' );
$this->makePage( 'FallbackLanguageTest-Full', 'ab' );
$this->makePage( 'FallbackLanguageTest-Full', 'ru' );
+ $this->makePage( 'FallbackLanguageTest-Full', 'de' );
$this->makePage( 'FallbackLanguageTest-Full', 'en' );
// Fallbacks where ab does not exist
$this->makePage( 'FallbackLanguageTest-Partial', 'ru' );
$this->makePage( 'FallbackLanguageTest-Full', 'en' );
// Fallbacks where ab does not exist
$this->makePage( 'FallbackLanguageTest-Partial', 'ru' );
+ $this->makePage( 'FallbackLanguageTest-Partial', 'de' );
$this->makePage( 'FallbackLanguageTest-Partial', 'en' );
$this->makePage( 'FallbackLanguageTest-Partial', 'en' );
+ // Fallback to the content language
+ $this->makePage( 'FallbackLanguageTest-ContLang', 'de' );
+ $this->makePage( 'FallbackLanguageTest-ContLang', 'en' );
+
// Fallback to english
$this->makePage( 'FallbackLanguageTest-English', 'en' );
// Fallback to english
$this->makePage( 'FallbackLanguageTest-English', 'en' );
return array(
array( 'FallbackLanguageTest-Full', 'ab', 'ab' ),
array( 'FallbackLanguageTest-Partial', 'ab', 'ru' ),
return array(
array( 'FallbackLanguageTest-Full', 'ab', 'ab' ),
array( 'FallbackLanguageTest-Partial', 'ab', 'ru' ),
+ array( 'FallbackLanguageTest-ContLang', 'ab', 'de' ),
array( 'FallbackLanguageTest-English', 'ab', 'en' ),
array( 'FallbackLanguageTest-None', 'ab', false ),
);
array( 'FallbackLanguageTest-English', 'ab', 'en' ),
array( 'FallbackLanguageTest-None', 'ab', false ),
);