Issue #2927338 by berdir, anmolgoyal74, swatichouhan012, smustgrave, alexpott, gábor hojtsy: Ensure config entity langcode property does not change when installing, adding or editing a language
(cherry picked from commit 9e7842eb89
)
merge-requests/11210/head
parent
b436c8c9c4
commit
045cc0e43f
|
@ -1691,6 +1691,13 @@ function install_download_additional_translations_operations(&$install_state) {
|
||||||
if (!($language = ConfigurableLanguage::load($langcode))) {
|
if (!($language = ConfigurableLanguage::load($langcode))) {
|
||||||
// Create the language if not already shipped with a profile.
|
// Create the language if not already shipped with a profile.
|
||||||
$language = ConfigurableLanguage::createFromLangcode($langcode);
|
$language = ConfigurableLanguage::createFromLangcode($langcode);
|
||||||
|
|
||||||
|
$standard_languages = LanguageManager::getStandardLanguageList();
|
||||||
|
if (isset($standard_languages[$langcode])) {
|
||||||
|
// Use the localized language label since the site is being installed
|
||||||
|
// with that language.
|
||||||
|
$language->setName($standard_languages[$langcode][1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$language->save();
|
$language->save();
|
||||||
|
|
||||||
|
|
|
@ -152,7 +152,11 @@ class LanguageAddForm extends LanguageFormBase {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$standard_languages = LanguageManager::getStandardLanguageList();
|
$standard_languages = LanguageManager::getStandardLanguageList();
|
||||||
$label = $standard_languages[$langcode][0];
|
// Translate the label to the current language, this is consistent with
|
||||||
|
// the label in the form select, see
|
||||||
|
// \Drupal\language\ConfigurableLanguageManager::getStandardLanguageListWithoutConfigured().
|
||||||
|
// phpcs:ignore Drupal.Semantics.FunctionT.NotLiteralString
|
||||||
|
$label = $this->t($standard_languages[$langcode][0]);
|
||||||
$direction = $standard_languages[$langcode][2] ?? ConfigurableLanguage::DIRECTION_LTR;
|
$direction = $standard_languages[$langcode][2] ?? ConfigurableLanguage::DIRECTION_LTR;
|
||||||
}
|
}
|
||||||
$entity->set('id', $langcode);
|
$entity->set('id', $langcode);
|
||||||
|
|
|
@ -52,10 +52,6 @@ abstract class LanguageFormBase extends EntityForm {
|
||||||
'#title' => $this->t('Language code'),
|
'#title' => $this->t('Language code'),
|
||||||
'#markup' => $language->id(),
|
'#markup' => $language->id(),
|
||||||
];
|
];
|
||||||
$form['langcode'] = [
|
|
||||||
'#type' => 'value',
|
|
||||||
'#value' => $language->id(),
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$form['langcode'] = [
|
$form['langcode'] = [
|
||||||
|
|
|
@ -316,7 +316,9 @@ class LocaleHooks {
|
||||||
*/
|
*/
|
||||||
#[Hook('form_language_admin_edit_form_alter')]
|
#[Hook('form_language_admin_edit_form_alter')]
|
||||||
public function formLanguageAdminEditFormAlter(&$form, FormStateInterface $form_state) : void {
|
public function formLanguageAdminEditFormAlter(&$form, FormStateInterface $form_state) : void {
|
||||||
if ($form['langcode']['#type'] == 'value' && $form['langcode']['#value'] == 'en') {
|
/** @var \Drupal\language\ConfigurableLanguageInterface $language */
|
||||||
|
$language = $form_state->getFormObject()->getEntity();
|
||||||
|
if ($language->id() == 'en') {
|
||||||
$form['locale_translate_english'] = [
|
$form['locale_translate_english'] = [
|
||||||
'#title' => t('Enable interface translation to English'),
|
'#title' => t('Enable interface translation to English'),
|
||||||
'#type' => 'checkbox',
|
'#type' => 'checkbox',
|
||||||
|
|
|
@ -120,7 +120,8 @@ class DistributionProfileTranslationQueryTest extends InstallerTestBase {
|
||||||
|
|
||||||
// Verify German was configured but not English.
|
// Verify German was configured but not English.
|
||||||
$this->drupalGet('admin/config/regional/language');
|
$this->drupalGet('admin/config/regional/language');
|
||||||
$this->assertSession()->pageTextContains('German');
|
// cspell:ignore deutsch
|
||||||
|
$this->assertSession()->pageTextContains('Deutsch');
|
||||||
$this->assertSession()->pageTextNotContains('English');
|
$this->assertSession()->pageTextNotContains('English');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -110,7 +110,8 @@ class DistributionProfileTranslationTest extends InstallerTestBase {
|
||||||
|
|
||||||
// Verify German was configured but not English.
|
// Verify German was configured but not English.
|
||||||
$this->drupalGet('admin/config/regional/language');
|
$this->drupalGet('admin/config/regional/language');
|
||||||
$this->assertSession()->pageTextContains('German');
|
// cspell:ignore deutsch
|
||||||
|
$this->assertSession()->pageTextContains('Deutsch');
|
||||||
$this->assertSession()->pageTextNotContains('English');
|
$this->assertSession()->pageTextNotContains('English');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,8 @@ class InstallerTranslationQueryTest extends InstallerTestBase {
|
||||||
|
|
||||||
// Verify German was configured but not English.
|
// Verify German was configured but not English.
|
||||||
$this->drupalGet('admin/config/regional/language');
|
$this->drupalGet('admin/config/regional/language');
|
||||||
$this->assertSession()->pageTextContains('German');
|
// cspell:ignore deutsch
|
||||||
|
$this->assertSession()->pageTextContains('Deutsch');
|
||||||
$this->assertSession()->pageTextNotContains('English');
|
$this->assertSession()->pageTextNotContains('English');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
||||||
namespace Drupal\FunctionalTests\Installer;
|
namespace Drupal\FunctionalTests\Installer;
|
||||||
|
|
||||||
use Drupal\Core\Database\Database;
|
use Drupal\Core\Database\Database;
|
||||||
|
use Drupal\language\Entity\ConfigurableLanguage;
|
||||||
use Drupal\user\Entity\User;
|
use Drupal\user\Entity\User;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -86,7 +87,8 @@ class InstallerTranslationTest extends InstallerTestBase {
|
||||||
|
|
||||||
// Verify German was configured but not English.
|
// Verify German was configured but not English.
|
||||||
$this->drupalGet('admin/config/regional/language');
|
$this->drupalGet('admin/config/regional/language');
|
||||||
$this->assertSession()->pageTextContains('German');
|
// cspell:ignore deutsch
|
||||||
|
$this->assertSession()->pageTextContains('Deutsch');
|
||||||
$this->assertSession()->pageTextNotContains('English');
|
$this->assertSession()->pageTextNotContains('English');
|
||||||
|
|
||||||
// The current container still has the english as current language, rebuild.
|
// The current container still has the english as current language, rebuild.
|
||||||
|
@ -142,7 +144,20 @@ class InstallerTranslationTest extends InstallerTestBase {
|
||||||
$this->submitForm($edit, 'Add language');
|
$this->submitForm($edit, 'Add language');
|
||||||
$override_en = $language_manager->getLanguageConfigOverride('en', 'user.settings');
|
$override_en = $language_manager->getLanguageConfigOverride('en', 'user.settings');
|
||||||
$this->assertFalse($override_en->isNew());
|
$this->assertFalse($override_en->isNew());
|
||||||
|
$this->assertSession()->pageTextContains('English de');
|
||||||
$this->assertEquals('Anonymous', $override_en->get('anonymous'));
|
$this->assertEquals('Anonymous', $override_en->get('anonymous'));
|
||||||
|
|
||||||
|
$english = ConfigurableLanguage::load('en');
|
||||||
|
$this->assertEquals('de', $english->language()->getId(), 'The langcode of the english language is de.');
|
||||||
|
|
||||||
|
// English is guaranteed to be the second language, click the second
|
||||||
|
// language edit link.
|
||||||
|
$this->clickLink('Edit', 1);
|
||||||
|
$this->assertSession()->fieldValueEquals('label', 'English de');
|
||||||
|
$this->submitForm([], 'Save language');
|
||||||
|
|
||||||
|
$english = ConfigurableLanguage::load('en');
|
||||||
|
$this->assertEquals('de', $english->language()->getId(), 'The langcode of the english language is de.');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -165,6 +180,9 @@ msgstr "Save and continue $langcode"
|
||||||
msgid "Anonymous"
|
msgid "Anonymous"
|
||||||
msgstr "Anonymous $langcode"
|
msgstr "Anonymous $langcode"
|
||||||
|
|
||||||
|
msgid "English"
|
||||||
|
msgstr "English $langcode"
|
||||||
|
|
||||||
msgid "Resolve all issues below to continue the installation. For help configuring your database server, see the <a href="https://www.drupal.org/docs/installing-drupal">installation handbook</a>, or contact your hosting provider."
|
msgid "Resolve all issues below to continue the installation. For help configuring your database server, see the <a href="https://www.drupal.org/docs/installing-drupal">installation handbook</a>, or contact your hosting provider."
|
||||||
msgstr "Beheben Sie alle Probleme unten, um die Installation fortzusetzen. Informationen zur Konfiguration der Datenbankserver finden Sie in der <a href="https://www.drupal.org/docs/installing-drupal">Installationshandbuch</a>, oder kontaktieren Sie Ihren Hosting-Anbieter."
|
msgstr "Beheben Sie alle Probleme unten, um die Installation fortzusetzen. Informationen zur Konfiguration der Datenbankserver finden Sie in der <a href="https://www.drupal.org/docs/installing-drupal">Installationshandbuch</a>, oder kontaktieren Sie Ihren Hosting-Anbieter."
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue