diff --git a/core/modules/locale/src/LocaleConfigManager.php b/core/modules/locale/src/LocaleConfigManager.php index cc833c5..9f87a5f 100644 --- a/core/modules/locale/src/LocaleConfigManager.php +++ b/core/modules/locale/src/LocaleConfigManager.php @@ -563,15 +563,17 @@ public function updateConfigTranslations(array $names, array $langcodes = array( foreach ($langcodes as $langcode) { $processed = $this->processTranslatableData($name, $active, $translatable, $langcode); if ($langcode != $active_langcode) { + $override = $this->languageManager->getLanguageConfigOverride($langcode, $name); // If the language code is not the same as the active storage // language, we should update a configuration override. if (!empty($processed)) { + $data = NestedArray::mergeDeepArray(array($override->get(), $processed), TRUE); // Update translation data in configuration override. - $this->saveTranslationOverride($name, $langcode, $processed); + $this->saveTranslationOverride($name, $langcode, $data); $count++; } else { - $override = $this->languageManager->getLanguageConfigOverride($langcode, $name); + if (!$override->isNew()) { $data = $this->filterOverride($override->get(), $translatable); if (empty($data)) { diff --git a/core/modules/locale/src/Tests/LocaleConfigTranslationImportTest.php b/core/modules/locale/src/Tests/LocaleConfigTranslationImportTest.php index 4a5c154..66daa2c 100644 --- a/core/modules/locale/src/Tests/LocaleConfigTranslationImportTest.php +++ b/core/modules/locale/src/Tests/LocaleConfigTranslationImportTest.php @@ -99,6 +99,16 @@ public function testConfigTranslationModuleInstall() { $this->drupalGet('af'); $this->assertText('Test site slogan in Afrikaans'); + $override = \Drupal::languageManager()->getLanguageConfigOverride('af', 'locale_test_translate.settings'); + $this->assertEqual('Locale can translate Afrikaans', $override->get('translatable_default_with_translation')); + + // Update test configuration. + $override + ->set('translatable_no_default', 'This translation is preserved') + ->set('translatable_default_with_translation', 'This translation is preserved') + ->set('translatable_default_with_no_translation', 'This translation is preserved') + ->save(); + // Install any module. $this->drupalPostForm('admin/modules', ['modules[Core][dblog][enable]' => 'dblog'], t('Install')); $this->assertText('Module Database Logging has been enabled.'); @@ -107,6 +117,15 @@ public function testConfigTranslationModuleInstall() { // appears. $this->drupalGet('af'); $this->assertText('Test site slogan in Afrikaans'); + + $this->rebuildContainer(); + $override = \Drupal::languageManager()->getLanguageConfigOverride('af', 'locale_test_translate.settings'); + $expected = [ + 'translatable_no_default' => 'This translation is preserved', + 'translatable_default_with_translation' => 'This translation is preserved', + 'translatable_default_with_no_translation' => 'This translation is preserved' + ]; + $this->assertEqual($expected, $override->get()); } } diff --git a/core/modules/locale/tests/modules/locale_test_translate/config/install/locale_test_translate.settings.yml b/core/modules/locale/tests/modules/locale_test_translate/config/install/locale_test_translate.settings.yml new file mode 100644 index 0000000..544dad7 --- /dev/null +++ b/core/modules/locale/tests/modules/locale_test_translate/config/install/locale_test_translate.settings.yml @@ -0,0 +1,3 @@ +translatable_no_default: '' +translatable_default_with_translation: 'Locale can translate' +translatable_default_with_no_translation: 'Locale can not translate' diff --git a/core/modules/locale/tests/modules/locale_test_translate/config/schema/locale_test_translate.schema.yml b/core/modules/locale/tests/modules/locale_test_translate/config/schema/locale_test_translate.schema.yml new file mode 100644 index 0000000..93e57c6 --- /dev/null +++ b/core/modules/locale/tests/modules/locale_test_translate/config/schema/locale_test_translate.schema.yml @@ -0,0 +1,10 @@ +locale_test_translate.settings: + type: config_object + label: 'Test for locale translations' + mapping: + translatable_no_default: + type: label + translatable_default_with_translation: + type: label + translatable_default_with_no_translation: + type: label diff --git a/core/modules/locale/tests/test.af.po b/core/modules/locale/tests/test.af.po index 2391464..812eca9 100644 --- a/core/modules/locale/tests/test.af.po +++ b/core/modules/locale/tests/test.af.po @@ -8,3 +8,6 @@ msgstr "" msgid "@site is currently under maintenance. We should be back shortly. Thank you for your patience." msgstr "Ons is tans besig met onderhoud op @site. Wees asseblief geduldig, ons sal binnekort weer terug wees." + +msgid "Locale can translate" +msgstr "Locale can translate Afrikaans"