You are here

class MessageCatalogue in Plug 7

MessageCatalogue.

@author Fabien Potencier <fabien@symfony.com>

@api

Hierarchy

Expanded class hierarchy of MessageCatalogue

39 files declare their use of MessageCatalogue
AbstractOperation.php in lib/Symfony/translation/Catalogue/AbstractOperation.php
AbstractOperationTest.php in lib/Symfony/translation/Tests/Catalogue/AbstractOperationTest.php
ArrayLoader.php in lib/Symfony/translation/Loader/ArrayLoader.php
ChainExtractor.php in lib/Symfony/translation/Extractor/ChainExtractor.php
CsvFileDumper.php in lib/Symfony/translation/Dumper/CsvFileDumper.php

... See full list

File

lib/Symfony/translation/MessageCatalogue.php, line 23

Namespace

Symfony\Component\Translation
View source
class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterface {
  private $messages = array();
  private $metadata = array();
  private $resources = array();
  private $locale;
  private $fallbackCatalogue;
  private $parent;

  /**
   * Constructor.
   *
   * @param string $locale   The locale
   * @param array  $messages An array of messages classified by domain
   *
   * @api
   */
  public function __construct($locale, array $messages = array()) {
    $this->locale = $locale;
    $this->messages = $messages;
  }

  /**
   * {@inheritdoc}
   *
   * @api
   */
  public function getLocale() {
    return $this->locale;
  }

  /**
   * {@inheritdoc}
   *
   * @api
   */
  public function getDomains() {
    return array_keys($this->messages);
  }

  /**
   * {@inheritdoc}
   *
   * @api
   */
  public function all($domain = null) {
    if (null === $domain) {
      return $this->messages;
    }
    return isset($this->messages[$domain]) ? $this->messages[$domain] : array();
  }

  /**
   * {@inheritdoc}
   *
   * @api
   */
  public function set($id, $translation, $domain = 'messages') {
    $this
      ->add(array(
      $id => $translation,
    ), $domain);
  }

  /**
   * {@inheritdoc}
   *
   * @api
   */
  public function has($id, $domain = 'messages') {
    if (isset($this->messages[$domain][$id])) {
      return true;
    }
    if (null !== $this->fallbackCatalogue) {
      return $this->fallbackCatalogue
        ->has($id, $domain);
    }
    return false;
  }

  /**
   * {@inheritdoc}
   */
  public function defines($id, $domain = 'messages') {
    return isset($this->messages[$domain][$id]);
  }

  /**
   * {@inheritdoc}
   *
   * @api
   */
  public function get($id, $domain = 'messages') {
    if (isset($this->messages[$domain][$id])) {
      return $this->messages[$domain][$id];
    }
    if (null !== $this->fallbackCatalogue) {
      return $this->fallbackCatalogue
        ->get($id, $domain);
    }
    return $id;
  }

  /**
   * {@inheritdoc}
   *
   * @api
   */
  public function replace($messages, $domain = 'messages') {
    $this->messages[$domain] = array();
    $this
      ->add($messages, $domain);
  }

  /**
   * {@inheritdoc}
   *
   * @api
   */
  public function add($messages, $domain = 'messages') {
    if (!isset($this->messages[$domain])) {
      $this->messages[$domain] = $messages;
    }
    else {
      $this->messages[$domain] = array_replace($this->messages[$domain], $messages);
    }
  }

  /**
   * {@inheritdoc}
   *
   * @api
   */
  public function addCatalogue(MessageCatalogueInterface $catalogue) {
    if ($catalogue
      ->getLocale() !== $this->locale) {
      throw new \LogicException(sprintf('Cannot add a catalogue for locale "%s" as the current locale for this catalogue is "%s"', $catalogue
        ->getLocale(), $this->locale));
    }
    foreach ($catalogue
      ->all() as $domain => $messages) {
      $this
        ->add($messages, $domain);
    }
    foreach ($catalogue
      ->getResources() as $resource) {
      $this
        ->addResource($resource);
    }
    if ($catalogue instanceof MetadataAwareInterface) {
      $metadata = $catalogue
        ->getMetadata('', '');
      $this
        ->addMetadata($metadata);
    }
  }

  /**
   * {@inheritdoc}
   *
   * @api
   */
  public function addFallbackCatalogue(MessageCatalogueInterface $catalogue) {

    // detect circular references
    $c = $this;
    do {
      if ($c
        ->getLocale() === $catalogue
        ->getLocale()) {
        throw new \LogicException(sprintf('Circular reference detected when adding a fallback catalogue for locale "%s".', $catalogue
          ->getLocale()));
      }
    } while ($c = $c->parent);
    $catalogue->parent = $this;
    $this->fallbackCatalogue = $catalogue;
    foreach ($catalogue
      ->getResources() as $resource) {
      $this
        ->addResource($resource);
    }
  }

  /**
   * {@inheritdoc}
   *
   * @api
   */
  public function getFallbackCatalogue() {
    return $this->fallbackCatalogue;
  }

  /**
   * {@inheritdoc}
   *
   * @api
   */
  public function getResources() {
    return array_values($this->resources);
  }

  /**
   * {@inheritdoc}
   *
   * @api
   */
  public function addResource(ResourceInterface $resource) {
    $this->resources[$resource
      ->__toString()] = $resource;
  }

  /**
   * {@inheritdoc}
   */
  public function getMetadata($key = '', $domain = 'messages') {
    if ('' == $domain) {
      return $this->metadata;
    }
    if (isset($this->metadata[$domain])) {
      if ('' == $key) {
        return $this->metadata[$domain];
      }
      if (isset($this->metadata[$domain][$key])) {
        return $this->metadata[$domain][$key];
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  public function setMetadata($key, $value, $domain = 'messages') {
    $this->metadata[$domain][$key] = $value;
  }

  /**
   * {@inheritdoc}
   */
  public function deleteMetadata($key = '', $domain = 'messages') {
    if ('' == $domain) {
      $this->metadata = array();
    }
    elseif ('' == $key) {
      unset($this->metadata[$domain]);
    }
    else {
      unset($this->metadata[$domain][$key]);
    }
  }

  /**
   * Adds current values with the new values.
   *
   * @param array $values Values to add
   */
  private function addMetadata(array $values) {
    foreach ($values as $domain => $keys) {
      foreach ($keys as $key => $value) {
        $this
          ->setMetadata($key, $value, $domain);
      }
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
MessageCatalogue::$fallbackCatalogue private property
MessageCatalogue::$locale private property
MessageCatalogue::$messages private property
MessageCatalogue::$metadata private property
MessageCatalogue::$parent private property
MessageCatalogue::$resources private property
MessageCatalogue::add public function @api Overrides MessageCatalogueInterface::add
MessageCatalogue::addCatalogue public function @api Overrides MessageCatalogueInterface::addCatalogue
MessageCatalogue::addFallbackCatalogue public function @api Overrides MessageCatalogueInterface::addFallbackCatalogue
MessageCatalogue::addMetadata private function Adds current values with the new values.
MessageCatalogue::addResource public function @api Overrides MessageCatalogueInterface::addResource
MessageCatalogue::all public function @api Overrides MessageCatalogueInterface::all
MessageCatalogue::defines public function Checks if a message has a translation (it does not take into account the fallback mechanism). Overrides MessageCatalogueInterface::defines
MessageCatalogue::deleteMetadata public function Deletes metadata for the given key and domain. Overrides MetadataAwareInterface::deleteMetadata
MessageCatalogue::get public function @api Overrides MessageCatalogueInterface::get
MessageCatalogue::getDomains public function @api Overrides MessageCatalogueInterface::getDomains
MessageCatalogue::getFallbackCatalogue public function @api Overrides MessageCatalogueInterface::getFallbackCatalogue
MessageCatalogue::getLocale public function @api Overrides MessageCatalogueInterface::getLocale
MessageCatalogue::getMetadata public function Gets metadata for the given domain and key. Overrides MetadataAwareInterface::getMetadata
MessageCatalogue::getResources public function @api Overrides MessageCatalogueInterface::getResources
MessageCatalogue::has public function @api Overrides MessageCatalogueInterface::has
MessageCatalogue::replace public function @api Overrides MessageCatalogueInterface::replace
MessageCatalogue::set public function @api Overrides MessageCatalogueInterface::set
MessageCatalogue::setMetadata public function Adds metadata to a message domain. Overrides MetadataAwareInterface::setMetadata
MessageCatalogue::__construct public function Constructor.