Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/StringTranslation/StringTranslationTrait.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Core/StringTranslation/StringTranslationTrait.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,124 @@ +<?php + +namespace Drupal\Core\StringTranslation; + +/** + * Wrapper methods for \Drupal\Core\StringTranslation\TranslationInterface. + * + * Using this trait will add t() and formatPlural() methods to the class. These + * must be used for every translatable string, similar to how procedural code + * must use the global functions t() and \Drupal::translation()->formatPlural(). + * This allows string extractor tools to find translatable strings. + * + * If the class is capable of injecting services from the container, it should + * inject the 'string_translation' service and assign it to + * $this->stringTranslation. + * + * @see \Drupal\Core\StringTranslation\TranslationInterface + * @see container + * + * @ingroup i18n + */ +trait StringTranslationTrait { + + /** + * The string translation service. + * + * @var \Drupal\Core\StringTranslation\TranslationInterface + */ + protected $stringTranslation; + + /** + * Translates a string to the current language or to a given language. + * + * See \Drupal\Core\StringTranslation\TranslatableMarkup::__construct() for + * important security information and usage guidelines. + * + * In order for strings to be localized, make them available in one of the + * ways supported by the + * @link https://www.drupal.org/node/322729 Localization API @endlink. When + * possible, use the \Drupal\Core\StringTranslation\StringTranslationTrait + * $this->t(). Otherwise create a new + * \Drupal\Core\StringTranslation\TranslatableMarkup object. + * + * @param string $string + * A string containing the English text to translate. + * @param array $args + * (optional) An associative array of replacements to make after + * translation. Based on the first character of the key, the value is + * escaped and/or themed. See + * \Drupal\Component\Render\FormattableMarkup::placeholderFormat() for + * details. + * @param array $options + * (optional) An associative array of additional options, with the following + * elements: + * - 'langcode' (defaults to the current language): A language code, to + * translate to a language other than what is used to display the page. + * - 'context' (defaults to the empty context): The context the source + * string belongs to. See the + * @link i18n Internationalization topic @endlink for more information + * about string contexts. + * + * @return \Drupal\Core\StringTranslation\TranslatableMarkup + * An object that, when cast to a string, returns the translated string. + * + * @see \Drupal\Component\Render\FormattableMarkup::placeholderFormat() + * @see \Drupal\Core\StringTranslation\TranslatableMarkup::__construct() + * + * @ingroup sanitization + */ + protected function t($string, array $args = [], array $options = []) { + return new TranslatableMarkup($string, $args, $options, $this->getStringTranslation()); + } + + /** + * Formats a string containing a count of items. + * + * @see \Drupal\Core\StringTranslation\TranslationInterface::formatPlural() + */ + protected function formatPlural($count, $singular, $plural, array $args = [], array $options = []) { + return new PluralTranslatableMarkup($count, $singular, $plural, $args, $options, $this->getStringTranslation()); + } + + /** + * Returns the number of plurals supported by a given language. + * + * @see \Drupal\locale\PluralFormulaInterface::getNumberOfPlurals() + */ + protected function getNumberOfPlurals($langcode = NULL) { + if (\Drupal::hasService('locale.plural.formula')) { + return \Drupal::service('locale.plural.formula')->getNumberOfPlurals($langcode); + } + // We assume 2 plurals if Locale's services are not available. + return 2; + } + + /** + * Gets the string translation service. + * + * @return \Drupal\Core\StringTranslation\TranslationInterface + * The string translation service. + */ + protected function getStringTranslation() { + if (!$this->stringTranslation) { + $this->stringTranslation = \Drupal::service('string_translation'); + } + + return $this->stringTranslation; + } + + /** + * Sets the string translation service to use. + * + * @param \Drupal\Core\StringTranslation\TranslationInterface $translation + * The string translation service. + * + * @return $this + */ + public function setStringTranslation(TranslationInterface $translation) { + $this->stringTranslation = $translation; + + return $this; + } + +}