defaultLangcode = $default_language->get()->getId(); } /** * Appends a translation system to the translation chain. * * @param \Drupal\Core\StringTranslation\Translator\TranslatorInterface $translator * The translation interface to be appended to the translation chain. * @param int $priority * The priority of the logger being added. * * @return $this */ public function addTranslator(TranslatorInterface $translator, $priority = 0) { $this->translators[$priority][] = $translator; // Reset sorted translators property to trigger rebuild. $this->sortedTranslators = NULL; return $this; } /** * Sorts translators according to priority. * * @return \Drupal\Core\StringTranslation\Translator\TranslatorInterface[] * A sorted array of translator objects. */ protected function sortTranslators() { krsort($this->translators); return array_merge(...$this->translators); } /** * {@inheritdoc} */ public function getStringTranslation($langcode, $string, $context) { if ($this->sortedTranslators === NULL) { $this->sortedTranslators = $this->sortTranslators(); } foreach ($this->sortedTranslators as $translator) { $translation = $translator->getStringTranslation($langcode, $string, $context); if ($translation !== FALSE) { return $translation; } } // No translator got a translation. return FALSE; } /** * {@inheritdoc} */ public function translate($string, array $args = [], array $options = []) { return new TranslatableMarkup($string, $args, $options, $this); } /** * {@inheritdoc} */ public function translateString(TranslatableMarkup $translated_string) { return $this->doTranslate($translated_string->getUntranslatedString(), $translated_string->getOptions()); } /** * Translates a string to the current language or to a given language. * * @param string $string * A string containing the English text to translate. * @param array $options * An associative array of additional options, with the following elements: * - 'langcode': The language code to translate to a language other than * what is used to display the page. * - 'context': The context the source string belongs to. * * @return string * The translated string. */ protected function doTranslate($string, array $options = []) { // If a NULL langcode has been provided, unset it. if (!isset($options['langcode']) && array_key_exists('langcode', $options)) { unset($options['langcode']); } // Merge in options defaults. $options = $options + [ 'langcode' => $this->defaultLangcode, 'context' => '', ]; $translation = $this->getStringTranslation($options['langcode'], $string, $options['context']); return $translation === FALSE ? $string : $translation; } /** * {@inheritdoc} */ public function formatPlural($count, $singular, $plural, array $args = [], array $options = []) { return new PluralTranslatableMarkup($count, $singular, $plural, $args, $options, $this); } /** * Sets the default langcode. * * @param string $langcode * A language code. */ public function setDefaultLangcode($langcode) { $this->defaultLangcode = $langcode; } /** * {@inheritdoc} */ public function reset() { if ($this->sortedTranslators === NULL) { $this->sortedTranslators = $this->sortTranslators(); } foreach ($this->sortedTranslators as $translator) { $translator->reset(); } } }