diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc index b358269..989ea5b 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 @@ -2678,17 +2679,18 @@ function language_list() { 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'); + + // 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((array)$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 = (array) 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/modules/language/lib/Drupal/language/Tests/LanguageDependencyInjectionTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageDependencyInjectionTest.php index e000531..39209f5 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)));