--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/symfony/src/Symfony/Component/Translation/Translator.php Sat Sep 24 15:40:41 2011 +0200
@@ -0,0 +1,182 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation;
+
+use Symfony\Component\Translation\Loader\LoaderInterface;
+
+/**
+ * Translator.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class Translator implements TranslatorInterface
+{
+ protected $catalogues;
+ protected $locale;
+ private $fallbackLocale;
+ private $loaders;
+ private $resources;
+ private $selector;
+
+ /**
+ * Constructor.
+ *
+ * @param string $locale The locale
+ * @param MessageSelector $selector The message selector for pluralization
+ *
+ * @api
+ */
+ public function __construct($locale, MessageSelector $selector)
+ {
+ $this->locale = $locale;
+ $this->selector = $selector;
+ $this->loaders = array();
+ $this->resources = array();
+ $this->catalogues = array();
+ }
+
+ /**
+ * Adds a Loader.
+ *
+ * @param string $format The name of the loader (@see addResource())
+ * @param LoaderInterface $loader A LoaderInterface instance
+ *
+ * @api
+ */
+ public function addLoader($format, LoaderInterface $loader)
+ {
+ $this->loaders[$format] = $loader;
+ }
+
+ /**
+ * Adds a Resource.
+ *
+ * @param string $format The name of the loader (@see addLoader())
+ * @param mixed $resource The resource name
+ * @param string $locale The locale
+ * @param string $domain The domain
+ *
+ * @api
+ */
+ public function addResource($format, $resource, $locale, $domain = 'messages')
+ {
+ $this->resources[$locale][] = array($format, $resource, $domain);
+ }
+
+ /**
+ * {@inheritdoc}
+ *
+ * @api
+ */
+ public function setLocale($locale)
+ {
+ $this->locale = $locale;
+ }
+
+ /**
+ * {@inheritdoc}
+ *
+ * @api
+ */
+ public function getLocale()
+ {
+ return $this->locale;
+ }
+
+ /**
+ * Sets the fallback locale.
+ *
+ * @param string $locale The fallback locale
+ *
+ * @api
+ */
+ public function setFallbackLocale($locale)
+ {
+ // needed as the fallback locale is used to fill-in non-yet translated messages
+ $this->catalogues = array();
+
+ $this->fallbackLocale = $locale;
+ }
+
+ /**
+ * {@inheritdoc}
+ *
+ * @api
+ */
+ public function trans($id, array $parameters = array(), $domain = 'messages', $locale = null)
+ {
+ if (!isset($locale)) {
+ $locale = $this->getLocale();
+ }
+
+ if (!isset($this->catalogues[$locale])) {
+ $this->loadCatalogue($locale);
+ }
+
+ return strtr($this->catalogues[$locale]->get((string) $id, $domain), $parameters);
+ }
+
+ /**
+ * {@inheritdoc}
+ *
+ * @api
+ */
+ public function transChoice($id, $number, array $parameters = array(), $domain = 'messages', $locale = null)
+ {
+ if (!isset($locale)) {
+ $locale = $this->getLocale();
+ }
+
+ if (!isset($this->catalogues[$locale])) {
+ $this->loadCatalogue($locale);
+ }
+
+ return strtr($this->selector->choose($this->catalogues[$locale]->get((string) $id, $domain), (int) $number, $locale), $parameters);
+ }
+
+ protected function loadCatalogue($locale)
+ {
+ $this->catalogues[$locale] = new MessageCatalogue($locale);
+
+ if (isset($this->resources[$locale])) {
+ foreach ($this->resources[$locale] as $resource) {
+ if (!isset($this->loaders[$resource[0]])) {
+ throw new \RuntimeException(sprintf('The "%s" translation loader is not registered.', $resource[0]));
+ }
+ $this->catalogues[$locale]->addCatalogue($this->loaders[$resource[0]]->load($resource[1], $locale, $resource[2]));
+ }
+ }
+
+ $this->optimizeCatalogue($locale);
+ }
+
+ private function optimizeCatalogue($locale)
+ {
+ if (strlen($locale) > 3) {
+ $fallback = substr($locale, 0, -strlen(strrchr($locale, '_')));
+ } else {
+ $fallback = $this->fallbackLocale;
+ }
+
+ if (!$fallback) {
+ return;
+ }
+
+ if (!isset($this->catalogues[$fallback])) {
+ $this->loadCatalogue($fallback);
+ }
+
+ $this->catalogues[$locale]->addFallbackCatalogue($this->catalogues[$fallback]);
+ }
+}