diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc index 2381ea9..60094bf 100644 --- a/core/includes/bootstrap.inc +++ b/core/includes/bootstrap.inc @@ -5,6 +5,7 @@ use Symfony\Component\ClassLoader\UniversalClassLoader; use Symfony\Component\ClassLoader\ApcUniversalClassLoader; use Drupal\Core\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpFoundation\Request; +use Drupal\Core\Language\Language; /** * @file @@ -2677,18 +2678,19 @@ function language_list() { $default = language_default(); if (language_multilingual() || module_exists('language')) { // Use language module configuration if available. - $languages = db_query('SELECT * FROM {language} ORDER BY weight ASC, name ASC')->fetchAllAssoc('langcode'); + $languages = db_query('SELECT * FROM {language} ORDER BY weight ASC, name ASC')->fetchAllAssoc('langcode', PDO::FETCH_ASSOC); + + // Initialize default property so callers have an easy reference and can + // save the same object without data loss. + foreach ($languages as $langcode => $info) { + $info['default'] = ($langcode == $default->langcode); + $languages[$langcode] = new Language($info); + } } else { // No language module, so use the default language only. $languages = array($default->langcode => $default); } - - // Initialize default property so callers have an easy reference and can - // save the same object without data loss. - foreach ($languages as $langcode => $language) { - $languages[$langcode]->default = ($langcode == $default->langcode); - } } return $languages; @@ -2734,18 +2736,23 @@ function language_name($langcode) { /** * Returns the default language used on the site. * + * * @return * A language object. */ function language_default() { - $default = variable_get('language_default', (object) array( + $info = variable_get('language_default', array( 'langcode' => 'en', 'name' => 'English', 'direction' => 0, 'weight' => 0, )); - $default->default = TRUE; - return $default; + $info['default'] = TRUE; + $languages = &drupal_static(__FUNCTION__); + if (!isset($languages[$info['langcode']])) { + $languages[$info['langcode']] = new Language($info); + } + return $languages[$info['langcode']]; } /** diff --git a/core/includes/update.inc b/core/includes/update.inc index f711507..65cbcf4 100644 --- a/core/includes/update.inc +++ b/core/includes/update.inc @@ -218,7 +218,10 @@ function update_prepare_d8_language() { unset($language_default->language); } unset($language_default->enabled); - variable_set('language_default', $language_default); + // In D8, the 'language_default' is not anymore an object, but an array, + // so make sure that the new value that is saved into this variable is an + // array. + variable_set('language_default', (array) $language_default); } } } diff --git a/core/modules/language/language.module b/core/modules/language/language.module index 7acc783..c8162c8 100644 --- a/core/modules/language/language.module +++ b/core/modules/language/language.module @@ -184,7 +184,7 @@ function language_save($language) { if (!empty($language->default)) { // Set the new version of this language as default in a variable. $default_language = language_default(); - variable_set('language_default', $language); + variable_set('language_default', (array) $language); } // Update language count based on enabled language count. diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageDependencyInjectionTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageDependencyInjectionTest.php index e000531..8f0f90b 100644 --- a/core/modules/language/lib/Drupal/language/Tests/LanguageDependencyInjectionTest.php +++ b/core/modules/language/lib/Drupal/language/Tests/LanguageDependencyInjectionTest.php @@ -57,7 +57,7 @@ class LanguageDependencyInjectionTest extends WebTestBase { // Initialize the language system. drupal_language_initialize(); - $expected = new Language((array) language_default()); + $expected = language_default(); $result = drupal_container()->get(LANGUAGE_TYPE_INTERFACE); foreach ($expected as $property => $value) { $this->assertEqual($expected->$property, $result->$property, t('The dependency injected language object %prop property equals the new Language object %prop property.', array('%prop' => $property))); @@ -72,7 +72,7 @@ class LanguageDependencyInjectionTest extends WebTestBase { */ function testDependencyInjectedNewDefaultLanguage() { // Change the language default object to different values. - $new_language_default = (object) array( + $new_language_default = array( 'langcode' => 'fr', 'name' => 'French', 'direction' => 0, @@ -89,7 +89,7 @@ class LanguageDependencyInjectionTest extends WebTestBase { $expected = $new_language_default; $result = drupal_container()->get(LANGUAGE_TYPE_INTERFACE); foreach ($expected as $property => $value) { - $this->assertEqual($expected->$property, $result->$property, t('The dependency injected language object %prop property equals the default language object %prop property.', array('%prop' => $property))); + $this->assertEqual($expected[$property], $result->$property, t('The dependency injected language object %prop property equals the default language object %prop property.', array('%prop' => $property))); } // Delete the language_default variable we previously set. diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php index 3495548..bc50f02 100644 --- a/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php +++ b/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php @@ -93,7 +93,7 @@ class LanguageUILanguageNegotiationTest extends WebTestBase { // be some bug. drupal_static_reset('language_list'); $languages = language_list(); - variable_set('language_default', $languages['vi']); + variable_set('language_default', (array) $languages['vi']); // First visit this page to make sure our target string is searchable. $this->drupalGet('admin/config'); // Now the t()'ed string is in db so switch the language back to default.