diff --git a/core/modules/language/language.module b/core/modules/language/language.module index 6b45fa1..2fa4966 100644 --- a/core/modules/language/language.module +++ b/core/modules/language/language.module @@ -249,6 +249,16 @@ function language_process_language_select($element) { $element['#options'][$langcode] = $language->locked ? t('- @name -', array('@name' => $language->name)) : $language->name; } } + // Adding the language from the default value. Configuration is in English and + // should still be in English after saving them. + if (isset($element['#default_value']) && !isset($element['#options'][$element['#default_value']])) { + $list = \Drupal\Core\Language\LanguageManager::getStandardLanguageList(); + $langcode = $element['#default_value']; + if (isset($list[$langcode])) { + // Prepend the default language at the beginning of the list. + $element['#options'] = array($langcode => $list[$langcode][0]) + $element['#options']; + } + } return $element; } diff --git a/core/modules/menu/lib/Drupal/menu/Tests/MenuLanguageTest.php b/core/modules/menu/lib/Drupal/menu/Tests/MenuLanguageTest.php index 0a8c245..272781b 100644 --- a/core/modules/menu/lib/Drupal/menu/Tests/MenuLanguageTest.php +++ b/core/modules/menu/lib/Drupal/menu/Tests/MenuLanguageTest.php @@ -7,6 +7,7 @@ namespace Drupal\menu\Tests; +use Drupal\Component\Utility\Unicode; use Drupal\Core\Language\Language; /** @@ -55,7 +56,7 @@ function setUp() { function testMenuLanguage() { // Create a test menu to test the various language-related settings. // Machine name has to be lowercase. - $menu_name = drupal_strtolower($this->randomName(16)); + $menu_name = Unicode::strtolower($this->randomName(16)); $label = $this->randomString(); $edit = array( 'id' => $menu_name, @@ -159,4 +160,38 @@ function testMenuLanguage() { $this->assertNoField('edit-langcode', 'The language selector field was hidden the page'); } + /** + * Tests menu configuration is still English after English has been deleted. + */ + function testMenuLanguageRemovedEnglish() { + // Create a test menu to test language settings. + // Machine name has to be lowercase. + $menu_name = Unicode::strtolower($this->randomName(16)); + $edit = array( + 'id' => $menu_name, + 'description' => '', + 'label' => $this->randomString(), + 'langcode' => 'en', + ); + $this->drupalPost('admin/structure/menu/add', $edit, t('Save')); + + // Check that the language settings were saved. + // The menu name should have been prefixed. + $menu_name = 'menu-' . $menu_name; + $menu = menu_load($menu_name); + $this->assertEqual($menu->langcode, 'en'); + + // Remove English language. To do that another language has to be set as + // default. + $language = language_load('aa'); + $language->default = TRUE; + language_save($language); + language_delete('en'); + + // Save the menu again and check if the language is still the same. + $this->drupalPost("admin/structure/menu/manage/$menu_name", array(), t('Save')); + $menu = menu_load($menu_name); + $this->assertEqual($menu->langcode, 'en'); + } + }