From 04564f7d1fb3301638d46302d82973227ba9ed9d Mon Sep 17 00:00:00 2001 From: Nathaniel Catchpole <catch@35733.no-reply.drupal.org> Date: Fri, 24 Jul 2015 12:22:03 +0100 Subject: [PATCH] =?UTF-8?q?Issue=20#2497275=20by=20borisson=5F,=20alexpott?= =?UTF-8?q?,=20dawehner,=20G=C3=A1bor=20Hojtsy:=20~50=20calls=20to=20t()?= =?UTF-8?q?=20for=20two=20strings=20in=20LanguageManager()=20on=20every=20?= =?UTF-8?q?request?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Drupal/Core/Language/LanguageManager.php | 35 +++++++++---- core/modules/language/language.module | 49 +++++-------------- .../src/ConfigurableLanguageManager.php | 8 ++- 3 files changed, 44 insertions(+), 48 deletions(-) diff --git a/core/lib/Drupal/Core/Language/LanguageManager.php b/core/lib/Drupal/Core/Language/LanguageManager.php index eda43525fb33..cd27c747b824 100644 --- a/core/lib/Drupal/Core/Language/LanguageManager.php +++ b/core/lib/Drupal/Core/Language/LanguageManager.php @@ -87,28 +87,43 @@ public function getLanguageTypes() { } /** - * {@inheritdoc} + * Returns information about all defined language types. + * + * Defines the three core language types: + * - Interface language is the only configurable language type in core. It is + * used by t() as the default language if none is specified. + * - Content language is by default non-configurable and inherits the + * interface language negotiated value. It is used by the Field API to + * determine the display language for fields if no explicit value is + * specified. + * - URL language is by default non-configurable and is determined through the + * URL language negotiation method or the URL fallback language negotiation + * method if no language can be detected. It is used by l() as the default + * language if none is specified. + * + * @return array + * An associative array of language type information arrays keyed by + * language type machine name, in the format of + * hook_language_types_info(). */ public function getDefinedLanguageTypesInfo() { - // This needs to have the same return value as - // language_language_type_info(), so that even if the Language module is - // not defined, users of this information, such as the Views module, can - // access names and descriptions of the default language types. - return array( + $this->definedLanguageTypesInfo = array( LanguageInterface::TYPE_INTERFACE => array( - 'name' => $this->t('Interface text'), - 'description' => $this->t('Order of language detection methods for interface text. If a translation of interface text is available in the detected language, it will be displayed.'), + 'name' => new TranslationWrapper('Interface text'), + 'description' => new TranslationWrapper('Order of language detection methods for interface text. If a translation of interface text is available in the detected language, it will be displayed.'), 'locked' => TRUE, ), LanguageInterface::TYPE_CONTENT => array( - 'name' => $this->t('Content'), - 'description' => $this->t('Order of language detection methods for content. If a version of content is available in the detected language, it will be displayed.'), + 'name' => new TranslationWrapper('Content'), + 'description' => new TranslationWrapper('Order of language detection methods for content. If a version of content is available in the detected language, it will be displayed.'), 'locked' => TRUE, ), LanguageInterface::TYPE_URL => array( 'locked' => TRUE, ), ); + + return $this->definedLanguageTypesInfo; } /** diff --git a/core/modules/language/language.module b/core/modules/language/language.module index 342e7302d8a8..29c93d2cf9e3 100644 --- a/core/modules/language/language.module +++ b/core/modules/language/language.module @@ -282,42 +282,6 @@ function language_get_default_langcode($entity_type, $bundle) { return $configuration->getDefaultLangcode(); } -/** - * Implements hook_language_types_info(). - * - * Defines the three core language types: - * - Interface language is the only configurable language type in core. It is - * used by t() as the default language if none is specified. - * - Content language is by default non-configurable and inherits the interface - * language negotiated value. It is used by the Field API to determine the - * display language for fields if no explicit value is specified. - * - URL language is by default non-configurable and is determined through the - * URL language negotiation method or the URL fallback language negotiation - * method if no language can be detected. It is used by l() as the default - * language if none is specified. - */ -function language_language_types_info() { - return array( - LanguageInterface::TYPE_INTERFACE => array( - 'name' => t('Interface text'), - 'description' => t('Order of language detection methods for interface text. If a translation of interface text is available in the detected language, it will be displayed.'), - 'locked' => TRUE, - ), - LanguageInterface::TYPE_CONTENT => array( - 'name' => t('Content'), - 'description' => t('Order of language detection methods for content. If a version of content is available in the detected language, it will be displayed.'), - 'fixed' => array(LanguageNegotiationUI::METHOD_ID), - 'locked' => TRUE, - ), - LanguageInterface::TYPE_URL => array( - 'name' => t('URL'), - 'description' => t('Order of language detection methods for URLs. The detected language will be used as the default when generating URLs for internal links on the site.'), - 'fixed' => array(LanguageNegotiationUrl::METHOD_ID, LanguageNegotiationUrlFallback::METHOD_ID), - 'locked' => TRUE, - ), - ); -} - /** * Reads language prefixes and uses the langcode if no prefix is set. */ @@ -540,3 +504,16 @@ function language_tour_tips_alter(array &$tour_tips, EntityInterface $entity) { } } } + +/** + * Implements hook_language_types_info_alter(). + * + * We can't set the fixed properties in \Drupal\Core\Language\LanguageManager, + * where the rest of the properties for the default language types are defined. + * The LanguageNegation classes are only loaded when the language module is + * enabled and we can't be sure of that in the LanguageManager. + */ +function language_language_types_info_alter(array &$language_types) { + $language_types[LanguageInterface::TYPE_CONTENT]['fixed'] = [LanguageNegotiationUI::METHOD_ID]; + $language_types[LanguageInterface::TYPE_URL]['fixed'] = [LanguageNegotiationUrl::METHOD_ID, LanguageNegotiationUrlFallback::METHOD_ID]; +} diff --git a/core/modules/language/src/ConfigurableLanguageManager.php b/core/modules/language/src/ConfigurableLanguageManager.php index d4dad5c04932..d51692f1a43c 100644 --- a/core/modules/language/src/ConfigurableLanguageManager.php +++ b/core/modules/language/src/ConfigurableLanguageManager.php @@ -182,10 +182,14 @@ protected function loadLanguageTypesConfiguration() { */ public function getDefinedLanguageTypesInfo() { if (!isset($this->languageTypesInfo)) { + $defaults = parent::getDefinedLanguageTypesInfo(); + $info = $this->moduleHandler->invokeAll('language_types_info'); + $language_info = $info + $defaults; + // Let other modules alter the list of language types. - $this->moduleHandler->alter('language_types_info', $info); - $this->languageTypesInfo = $info; + $this->moduleHandler->alter('language_types_info', $language_info); + $this->languageTypesInfo = $language_info; } return $this->languageTypesInfo; } -- GitLab