Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

BUGFIX i18n module load order in i18n::include_by_locale()

The "project" module (normally mysite) is considered with the highest priority. Yet, the project's i18n is loaded first and cannot overwrite existing translations. I've added a array_reverse(), so the iteration keeps the translation of the module with the highest priority.

Old $sortedModules: mysite, (other_modules,) cms, admin, framework.
New $sortedModules: framework, admin, cms, (other_modules,) mysite.
  • Loading branch information...
commit 1e5679f20fab9b70d563a9119434d0dddae464f5 1 parent 9c75fc0
Devlin JayDevlin authored
3  i18n/i18n.php
View
@@ -2506,7 +2506,8 @@ public static function include_by_locale($locale, $clean = false) {
$sortedModules = array();
foreach ($order as $module) {
if (isset($modules[$module])) $sortedModules[$module] = $modules[$module];
- }
+ }
+ $sortedModules = array_reverse($sortedModules, true);
// Loop in reverse order, meaning the translator with the highest priority goes first
$translators = array_reverse(self::get_translators(), true);
3  tests/i18n/_fakewebroot/i18ntestmodule/code/subfolder/lang/de.yml
View
@@ -1,3 +1,4 @@
de:
i18nTestModule:
- OTHERENTITY: Other Entity (de)
+ PRIORITYNOTICE: High Module Priority (de)
+ OTHERENTITY: Other Entity (de)
3  tests/i18n/_fakewebroot/i18ntestmodule/lang/de.yml
View
@@ -11,5 +11,6 @@ de:
WITHNAMESPACE: Include Entity with Namespace (de)
LAYOUTTEMPLATE: Layout Template (de)
SPRINTFNAMESPACE: My replacement: %s (de)
+ PRIORITYNOTICE: Low Module Priority (de)
i18nTestModuleInclude.ss:
- SPRINTFINCLUDENAMESPACE: My include replacement: %s (de)
+ SPRINTFINCLUDENAMESPACE: My include replacement: %s (de)
8 tests/i18n/i18nTest.php
View
@@ -435,6 +435,9 @@ public function testIncludeByLocale() {
$this->assertFalse($adapter->isTranslated('i18nTestModule.ENTITY', 'af'),
'Non-existing unloaded entity not available before call'
);
+
+ // set _fakewebroot module priority
+ Config::inst()->update('i18n', 'module_priority', array('subfolder','i18ntestmodule'));
i18n::include_by_locale('de');
@@ -444,6 +447,11 @@ public function testIncludeByLocale() {
$this->assertTrue($adapter->isTranslated('i18nTestTheme1.LAYOUTTEMPLATE', null, 'de'), 'Includes theme files');
$this->assertTrue($adapter->isTranslated('i18nTestModule.OTHERENTITY', null, 'de'), 'Includes submodule files');
+ // check module priority
+ $this->assertEquals($adapter->translate('i18nTestModule.PRIORITYNOTICE', 'de'),
+ 'High Module Priority (de)'
+ );
+
SS_ClassLoader::instance()->popManifest();
}
Please sign in to comment.
Something went wrong with that request. Please try again.