mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
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.
This commit is contained in:
parent
9c75fc06e7
commit
1e5679f20f
@ -2506,7 +2506,8 @@ class i18n extends Object implements TemplateGlobalProvider {
|
||||
$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);
|
||||
|
@ -1,3 +1,4 @@
|
||||
de:
|
||||
i18nTestModule:
|
||||
OTHERENTITY: Other Entity (de)
|
||||
PRIORITYNOTICE: High Module Priority (de)
|
||||
OTHERENTITY: Other Entity (de)
|
||||
|
@ -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)
|
||||
|
@ -435,6 +435,9 @@ class i18nTest extends SapphireTest {
|
||||
$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 @@ class i18nTest extends SapphireTest {
|
||||
$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();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user