symfony_translation-1.0.0-alpha1/src/SymfonyTranslationStringStorage.php

src/SymfonyTranslationStringStorage.php
<?php

namespace Drupal\symfony_translation;

use Drupal\locale\StringDatabaseStorage;
use Drupal\locale\StringStorageInterface;

/**
 * A database string storage with a fallback to Symfony translations.
 */
class SymfonyTranslationStringStorage implements StringStorageInterface {

  /**
   * The string database storage.
   *
   * @var \Drupal\locale\StringDatabaseStorage
   */
  protected $databaseStorage;

  /**
   * The Symfony translator.
   *
   * @var \Drupal\symfony_translation\SymfonyTranslation
   */
  protected $symfonyTranslator;

  /**
   * Constructs a new SymfonyTranslationStringStorage object.
   *
   * @param \Drupal\locale\StringDatabaseStorage $databaseStorage
   *   The string database storage.
   * @param \Drupal\symfony_translation\SymfonyTranslation $symfonyTranslator
   *   The Symfony translator.
   */
  public function __construct(
    StringDatabaseStorage $databaseStorage,
    SymfonyTranslation $symfonyTranslator
  ) {
    $this->databaseStorage = $databaseStorage;
    $this->symfonyTranslator = $symfonyTranslator;
  }

  /**
   * {@inheritdoc}
   */
  public function getTranslations(array $conditions = [], array $options = []) {
    if (isset($conditions['translated']) && $conditions['translated'] === FALSE) {
      return $this->databaseStorage->getTranslations($conditions, $options);
    }

    $translatedStrings = $this->databaseStorage->getTranslations($conditions, $options);
    $untranslatedStrings = $this->databaseStorage->getTranslations(['translated' => FALSE] + $conditions, $options);
    $symfonyStrings = [];

    foreach ($untranslatedStrings as $string) {
      $values = $string->getValues(['lid', 'source', 'context', 'version']);
      $values['translation'] = $this->symfonyTranslator->getStringTranslation($conditions['language'], $values['source'], $values['context']);
      $values['language'] = $conditions['language'];
      $values['storage'] = $this;

      if ($values['translation'] === FALSE) {
        continue;
      }

      $symfonyStrings[$string->lid] = new SymfonyTranslationString($values);
    }

    return array_merge($translatedStrings, $symfonyStrings);
  }

  /**
   * {@inheritdoc}
   */
  public function getStrings(array $conditions = [], array $options = []) {
    return $this->databaseStorage->getStrings($conditions, $options);
  }

  /**
   * {@inheritdoc}
   */
  public function getLocations(array $conditions = []) {
    return $this->databaseStorage->getLocations($conditions);
  }

  /**
   * {@inheritdoc}
   */
  public function findString(array $conditions) {
    return $this->databaseStorage->findString($conditions);
  }

  /**
   * {@inheritdoc}
   */
  public function findTranslation(array $conditions) {
    return $this->databaseStorage->findTranslation($conditions);
  }

  /**
   * {@inheritdoc}
   */
  public function save($string) {
    return $this->databaseStorage->save($string);
  }

  /**
   * {@inheritdoc}
   */
  public function delete($string) {
    return $this->databaseStorage->delete($string);
  }

  /**
   * {@inheritdoc}
   */
  public function deleteStrings($conditions) {
    $this->databaseStorage->deleteStrings($conditions);
  }

  /**
   * {@inheritdoc}
   */
  public function deleteTranslations($conditions) {
    $this->databaseStorage->deleteTranslations($conditions);
  }

  /**
   * {@inheritdoc}
   */
  public function countStrings() {
    return $this->databaseStorage->countStrings();
  }

  /**
   * {@inheritdoc}
   */
  public function countTranslations() {
    return $this->databaseStorage->countTranslations();
  }

  /**
   * {@inheritdoc}
   */
  public function createString($values = []) {
    return $this->databaseStorage->createString($values);
  }

  /**
   * {@inheritdoc}
   */
  public function createTranslation($values = []) {
    return $this->databaseStorage->createTranslation($values);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc