diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc index b358269..39591bd 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 => $language) { + $language['default'] = ($langcode == $default->langcode); + $languages[$langcode] = new Language($language); + } } 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( + $options = variable_get('language_default', array( 'langcode' => 'en', 'name' => 'English', 'direction' => 0, 'weight' => 0, )); - $default->default = TRUE; - return $default; + $options['default'] = TRUE; + $languages = &drupal_static(__FUNCTION__); + if (!isset($languages[$options['langcode']])) { + $languages[$options['langcode']] = new Language($options); + } + return $languages[$options['langcode']]; } /** diff --git a/core/includes/update.inc b/core/includes/update.inc index f711507..c6ad929 100644 --- a/core/includes/update.inc +++ b/core/includes/update.inc @@ -218,8 +218,8 @@ function update_prepare_d8_language() { unset($language_default->language); } unset($language_default->enabled); - variable_set('language_default', $language_default); } + variable_set('language_default', (array) $language_default); } } diff --git a/core/lib/Drupal/Core/Language/Language.php b/core/lib/Drupal/Core/Language/Language.php index 9b9223d..ec4d1b7 100644 --- a/core/lib/Drupal/Core/Language/Language.php +++ b/core/lib/Drupal/Core/Language/Language.php @@ -50,4 +50,16 @@ class Language { $this->$var = $value; } } + + /** + * Returns an array with some of the attributes of the class. + */ + public function toArray() { + $attributes = array('name', 'langcode', 'direction', 'enabled', 'weight', 'default'); + $return = array(); + foreach ($attributes as $attribute) { + $return[$attribute] = $this->{$attribute}; + } + return $return; + } } 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..cba4c13 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', $languages['vi']->toArray()); // 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.