From 1b8cb8dc3119bfb12d86d2f044018dc12553939b Mon Sep 17 00:00:00 2001 From: Mormegil Date: Mon, 25 Mar 2013 23:50:47 +0100 Subject: [PATCH] (bug 1495) Include the site language in the fallback list 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 --- languages/Language.php | 3 +- .../includes/cache/MessageCacheTest.php | 30 +++++++++++++++---- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/languages/Language.php b/languages/Language.php index 42883b552e..16de816465 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -4006,8 +4006,9 @@ class Language { 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 ); + array_unshift( $siteFallbacks, $wgLanguageCode ); // Eliminate any languages already included in the chain $siteFallbacks = array_intersect( array_diff( $siteFallbacks, $fallbacks ), $siteFallbacks ); diff --git a/tests/phpunit/includes/cache/MessageCacheTest.php b/tests/phpunit/includes/cache/MessageCacheTest.php index eda06d4edd..3b3e4a656e 100644 --- a/tests/phpunit/includes/cache/MessageCacheTest.php +++ b/tests/phpunit/includes/cache/MessageCacheTest.php @@ -8,25 +8,44 @@ class MessageCacheTest extends MediaWikiLangTestCase { protected function setUp() { parent::setUp(); + $this->configureLanguages(); 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( - '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', 'de' ); $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' ); + // Fallback to the content language + $this->makePage( 'FallbackLanguageTest-ContLang', 'de' ); + $this->makePage( 'FallbackLanguageTest-ContLang', 'en' ); + // Fallback to english $this->makePage( 'FallbackLanguageTest-English', 'en' ); @@ -67,6 +86,7 @@ class MessageCacheTest extends MediaWikiLangTestCase { 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 ), ); -- 2.20.1