/** * Gets a translation string. * * @param string $source_value * The source string value. * @param string $langcode * The language code of the translation. * @param bool $create_fallback * (optional) By default if a source string could be found and no * translation in the given language exists yet, a translation object is * created. This can be circumvented by passing FALSE. * * @return \Drupal\locale\TranslationString|null * The translation string if one was found or created. */ protected function getTranslation($source_value, $langcode, $create_fallback = TRUE) { // There is no point in creating a translation without a source. if ($source_string = $this->stringStorage->findString(['source' => $source_value])) { // Get the translation for this original source string from locale. $conditions = ['lid' => $source_string->lid, 'language' => $langcode]; $translations = $this->stringStorage->getTranslations($conditions + ['translated' => TRUE]); if ($translations) { return reset($translations); } elseif ($create_fallback) { return $this->stringStorage->createTranslation($conditions); } } }
/** * Get the translation object for the given source/context and language. * * @param string $name * Name of the configuration location. * @param string $langcode * Language code to translate to. * @param string $source * The source string, should be English. * @param string $context * The string context. * * @return \Drupal\locale\TranslationString|FALSE * The translation object if the string was not empty or FALSE otherwise. */ public function getStringTranslation($name, $langcode, $source, $context) { if ($source) { $this->translateString($name, $langcode, $source, $context); if ($string = $this->translations[$name][$langcode][$context][$source]) { if (!$string->isTranslation()) { $conditions = array('lid' => $string->lid, 'language' => $langcode); $translation = $this->localeStorage->createTranslation($conditions); $this->translations[$name][$langcode][$context][$source] = $translation; return $translation; } else { return $string; } } } return FALSE; }
/** * Ensures a translation exists and is marked as customized. * * @param string $config_name * The configuration name. * @param string $translation * The translation. * @param string $langcode * The language code. * @param bool $customized * Whether or not the string should be asserted to be customized or not * customized. * * @return bool * TRUE if the assertion succeeded, FALSE otherwise. */ protected function assertTranslation($config_name, $translation, $langcode, $customized = TRUE) { // Make sure a string exists. $strings = $this->stringStorage->getTranslations(['type' => 'configuration', 'name' => $config_name, 'language' => $langcode, 'translated' => TRUE]); $pass = $this->assertIdentical(1, count($strings)); $string = reset($strings); if ($this->assertTrue($string instanceof StringInterface)) { /** @var \Drupal\locale\StringInterface $string */ $pass = $pass && $this->assertIdentical($translation, $string->getString()); $pass = $pass && $this->assertTrue($string->isTranslation()); if ($this->assertTrue($string instanceof TranslationString)) { /** @var \Drupal\locale\TranslationString $string */ // Make sure the string is marked as customized so that it does not get // overridden when the string translations are updated. return $pass && $this->assertEqual($customized, $string->customized); } } return FALSE; }