public function LocaleConfigManager::translateString

Translates string using the localization system.

So far we only know how to translate strings from English so the source string should be in English. Unlike regular t() translations, strings will be added to the source tables only if this is marked as default data.

Parameters

string $name: Name of the configuration location.

string $langcode: Language code to translate to.

string $source: The source string, should be English.

string $context: The string context.

Return value

string|false Translated string if there is a translation, FALSE if not.

File

drupal/core/modules/locale/lib/Drupal/locale/LocaleConfigManager.php, line 235
Contains \Drupal\locale\LocaleConfigManager.

Class

LocaleConfigManager
Manages localized configuration type plugins.

Namespace

Drupal\locale

Code

public function translateString($name, $langcode, $source, $context) {
  if ($source) {

    // If translations for a language have not been loaded yet.
    if (!isset($this->translations[$name][$langcode])) {

      // Preload all translations for this configuration name and language.
      $this->translations[$name][$langcode] = array();
      foreach ($this->localeStorage
        ->getTranslations(array(
        'language' => $langcode,
        'type' => 'configuration',
        'name' => $name,
      )) as $string) {
        $this->translations[$name][$langcode][$string->context][$string->source] = $string;
      }
    }
    if (!isset($this->translations[$name][$langcode][$context][$source])) {

      // There is no translation of the source string in this config location
      // to this language for this context.
      if ($translation = $this->localeStorage
        ->findTranslation(array(
        'source' => $source,
        'context' => $context,
        'language' => $langcode,
      ))) {

        // Look for a translation of the string. It might have one, but not
        // be saved in this configuration location yet.
        // If the string has a translation for this context to this language,
        // save it in the configuration location so it can be looked up faster
        // next time.
        $string = $this->localeStorage
          ->createString((array) $translation)
          ->addLocation('configuration', $name)
          ->save();
      }
      else {

        // No translation was found. Add the source to the configuration
        // location so it can be translated, and the string is faster to look
        // for next time.
        $translation = $this->localeStorage
          ->createString(array(
          'source' => $source,
          'context' => $context,
        ))
          ->addLocation('configuration', $name)
          ->save();
      }

      // Add an entry, either the translation found, or a blank string object
      // to track the source string, to this configuration location, language,
      // and context.
      $this->translations[$name][$langcode][$context][$source] = $translation;
    }

    // Return the string only when the string object had a translation.
    if ($this->translations[$name][$langcode][$context][$source]
      ->isTranslation()) {
      return $this->translations[$name][$langcode][$context][$source]
        ->getString();
    }
  }
  return FALSE;
}