diff --git a/core/modules/hal/src/Tests/NormalizeTest.php b/core/modules/hal/src/Tests/NormalizeTest.php index ee40c25..72ed06e 100644 --- a/core/modules/hal/src/Tests/NormalizeTest.php +++ b/core/modules/hal/src/Tests/NormalizeTest.php @@ -49,7 +49,7 @@ public function testNormalize() { 'name' => $this->randomMachineName(), 'field_test_entity_reference' => array( 'target_id' => $target_entity_en->id(), - ) + ), ); $entity = entity_create('entity_test', $values); @@ -68,7 +68,7 @@ public function testNormalize() { array( 'href' => '/relations', 'name' => 'site', - 'templated' => true, + 'templated' => TRUE, ), ), 'self' => array( @@ -79,13 +79,13 @@ public function testNormalize() { ), $relation_uri => array( array( - 'href' => $this->getEntityUri($target_entity_de), - 'lang' => 'de', - ), - array( 'href' => $this->getEntityUri($target_entity_en), 'lang' => 'en', ), + array( + 'href' => $this->getEntityUri($target_entity_de), + 'lang' => 'de', + ), ), ), '_embedded' => array( @@ -93,7 +93,7 @@ public function testNormalize() { array( '_links' => array( 'self' => array( - 'href' => $this->getEntityUri($target_entity_de), + 'href' => $this->getEntityUri($target_entity_en), ), 'type' => array( 'href' => $type_uri, @@ -101,15 +101,15 @@ public function testNormalize() { ), 'uuid' => array( array( - 'value' => $target_entity_de->uuid(), + 'value' => $target_entity_en->uuid(), ), ), - 'lang' => 'de', + 'lang' => 'en', ), array( '_links' => array( 'self' => array( - 'href' => $this->getEntityUri($target_entity_en), + 'href' => $this->getEntityUri($target_entity_de), ), 'type' => array( 'href' => $type_uri, @@ -117,10 +117,10 @@ public function testNormalize() { ), 'uuid' => array( array( - 'value' => $target_entity_en->uuid(), + 'value' => $target_entity_de->uuid(), ), ), - 'lang' => 'en', + 'lang' => 'de', ), ), ), @@ -136,13 +136,13 @@ public function testNormalize() { ), 'name' => array( array( - 'value' => $values['name'], - 'lang' => 'de', - ), - array( 'value' => $translation_values['name'], 'lang' => 'en', ), + array( + 'value' => $values['name'], + 'lang' => 'de', + ), ), 'field_test_text' => array( array( @@ -167,7 +167,7 @@ public function testNormalize() { /** * Constructs the entity URI. * - * @param $entity + * @param object $entity * The entity. * * @return string diff --git a/core/modules/language/src/ConfigurableLanguageManager.php b/core/modules/language/src/ConfigurableLanguageManager.php index a4ca11b..98c5ff0 100644 --- a/core/modules/language/src/ConfigurableLanguageManager.php +++ b/core/modules/language/src/ConfigurableLanguageManager.php @@ -353,10 +353,11 @@ public function updateLockedLanguageWeights() { if (reset($locked_languages)->getWeight() <= $max_weight) { foreach ($locked_languages as $language) { // Update system languages weight. - $max_weight++; - ConfigurableLanguage::load($language->getId()) - ->setWeight($max_weight) - ->save(); + if ($language = ConfigurableLanguage::load($language->getId())) { + $max_weight++; + $language->setWeight($max_weight) + ->save(); + } } } } diff --git a/core/modules/language/src/Entity/ConfigurableLanguage.php b/core/modules/language/src/Entity/ConfigurableLanguage.php index e52f763..4f1f1b3 100644 --- a/core/modules/language/src/Entity/ConfigurableLanguage.php +++ b/core/modules/language/src/Entity/ConfigurableLanguage.php @@ -120,6 +120,18 @@ public function preSave(EntityStorageInterface $storage) { // For the uncommon case of custom languages the label should be given in // English. $this->langcode = 'en'; + // When adding a new language the weight shouldn't be zero to avoid a + // reordering of the languages list when their names change i.e. interface + // translation. + $languages = \Drupal::languageManager()->getLanguages(); + $last_language = end($languages); + // When adding the first Configurable language leave the weight by default. + // This happens when you are installing language module. + if ($this->isNew() && $last_language->getId() != $this->getId()) { + // The newly created language will have the weight of the heaviest + // language +1. + $this->setWeight($last_language->getWeight() + 1); + } } /** diff --git a/core/modules/language/src/Tests/LanguageListTest.php b/core/modules/language/src/Tests/LanguageListTest.php index c27f981..7fa533a 100644 --- a/core/modules/language/src/Tests/LanguageListTest.php +++ b/core/modules/language/src/Tests/LanguageListTest.php @@ -35,6 +35,10 @@ function testLanguageList() { $admin_user = $this->drupalCreateUser(array('administer languages', 'access administration pages', 'administer site configuration')); $this->drupalLogin($admin_user); + // Get the weight of the last language. + $languages = \Drupal::service('language_manager')->getLanguages(); + $last_language_weight = end($languages)->getWeight(); + // Add predefined language. $edit = array( 'predefined_langcode' => 'fr', @@ -43,6 +47,14 @@ function testLanguageList() { $this->assertText('French', 'Language added successfully.'); $this->assertUrl(\Drupal::url('language.admin_overview', [], ['absolute' => TRUE])); + // Get the weight of the last language and check that the weight is one unit + // heavier and that is French. + $this->rebuildContainer(); + $languages = \Drupal::service('language_manager')->getLanguages(); + $last_language = end($languages); + $this->AssertEqual($last_language->getWeight(), $last_language_weight + 1); + $this->AssertEqual($last_language->getId(), $edit['predefined_langcode']); + // Add custom language. $langcode = 'xx'; $name = $this->randomMachineName(16); @@ -54,7 +66,7 @@ function testLanguageList() { ); $this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add custom language')); $this->assertUrl(\Drupal::url('language.admin_overview', [], ['absolute' => TRUE])); - $this->assertRaw('"edit-languages-' . $langcode .'-weight"', 'Language code found.'); + $this->assertRaw('"edit-languages-' . $langcode . '-weight"', 'Language code found.'); $this->assertText(t($name), 'Test language added.'); $language = \Drupal::service('language_manager')->getLanguage($langcode); diff --git a/core/modules/system/src/Tests/Entity/EntityTranslationTest.php b/core/modules/system/src/Tests/Entity/EntityTranslationTest.php index 6289c03..d1f5eaa 100644 --- a/core/modules/system/src/Tests/Entity/EntityTranslationTest.php +++ b/core/modules/system/src/Tests/Entity/EntityTranslationTest.php @@ -152,7 +152,11 @@ protected function doTestMultilingualProperties($entity_type) { // Create a language neutral entity and check that properties are stored // as language neutral. - $entity = entity_create($entity_type, array('name' => $name, 'user_id' => $uid, $langcode_key => LanguageInterface::LANGCODE_NOT_SPECIFIED)); + $entity = entity_create($entity_type, array( + 'name' => $name, + 'user_id' => $uid, + $langcode_key => LanguageInterface::LANGCODE_NOT_SPECIFIED) + ); $entity->save(); $entity = entity_load($entity_type, $entity->id()); $default_langcode = $entity->language()->getId(); @@ -172,7 +176,11 @@ protected function doTestMultilingualProperties($entity_type) { // Create a language-aware entity and check that properties are stored // as language-aware. - $entity = entity_create($entity_type, array('name' => $name, 'user_id' => $uid, $langcode_key => $langcode)); + $entity = entity_create($entity_type, array( + 'name' => $name, + 'user_id' => $uid, + $langcode_key => $langcode) + ); $entity->save(); $entity = entity_load($entity_type, $entity->id()); $default_langcode = $entity->language()->getId(); @@ -255,7 +263,11 @@ protected function doTestMultilingualProperties($entity_type) { $entities = entity_load_multiple_by_properties($entity_type, array($langcode_key => $langcode, 'name' => $properties[$langcode]['name'][0])); $this->assertEqual(count($entities), 0, format_string('%entity_type: No entity loaded by name translation specifying the translation language.', array('%entity_type' => $entity_type))); - $entities = entity_load_multiple_by_properties($entity_type, array($langcode_key => $langcode, 'name' => $properties[$langcode]['name'][0], 'default_langcode' => 0)); + $entities = entity_load_multiple_by_properties($entity_type, array( + $langcode_key => $langcode, + 'name' => $properties[$langcode]['name'][0], + 'default_langcode' => 0, + )); $this->assertEqual(count($entities), 1, format_string('%entity_type: One entity loaded by name translation and language specifying to look for translations.', array('%entity_type' => $entity_type))); $entities = entity_load_multiple_by_properties($entity_type, array('user_id' => $properties[$langcode]['user_id'][0], 'default_langcode' => NULL)); $this->assertEqual(count($entities), 2, format_string('%entity_type: Two entities loaded by uid without caring about property translatability.', array('%entity_type' => $entity_type))); @@ -295,7 +307,7 @@ protected function doTestMultilingualProperties($entity_type) { /** * Tests the Entity Translation API behavior. */ - function testEntityTranslationAPI() { + protected function testEntityTranslationAPI() { // Test all entity variations with data table support. foreach (entity_test_entity_types(ENTITY_TEST_TYPES_MULTILINGUAL) as $entity_type) { $this->doTestEntityTranslationAPI($entity_type); @@ -475,7 +487,7 @@ protected function doTestEntityTranslationAPI($entity_type) { /** * Tests language fallback applied to field and entity translations. */ - function testLanguageFallback() { + protected function testLanguageFallback() { // Test all entity variations with data table support. foreach (entity_test_entity_types(ENTITY_TEST_TYPES_MULTILINGUAL) as $entity_type) { $this->doTestLanguageFallback($entity_type); @@ -504,7 +516,8 @@ protected function doTestLanguageFallback($entity_type) { $langcode_key = $this->entityManager->getDefinition($entity_type)->getKey('langcode'); $languages = $this->languageManager->getLanguages(); $language = ConfigurableLanguage::load($languages[$langcode]->getId()); - $language->set('weight', 1); + // Make $language the last. + $language->set('weight', 4); $language->save(); $this->languageManager->reset();