Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/aura/intl/src/TranslatorLocator.php
<?php
/**
 *
 * This file is part of the Aura Project for PHP.
 *
 * @package Aura.Intl
 *
 * @license http://opensource.org/licenses/MIT MIT
 *
 */
namespace Aura\Intl;

/**
 *
 * A ServiceLocator implementation for loading and retaining translator objects.
 *
 * @package Aura.Intl
 *
 */
class TranslatorLocator
{
   
/**
     *
     * A registry to retain translator objects.
     *
     * @var array
     *
     */
   
protected $registry;

   
/**
     *
     * The current locale code.
     *
     * @var string
     *
     */
   
protected $locale;

   
/**
     *
     * A translator factory.
     *
     * @var TranslatorFactory
     *
     *
     */
   
protected $factory;

   
/**
     *
     * A package locator.
     *
     * @var PackageLocator
     *
     */
   
protected $packages;

   
/**
     *
     * A formatter locator.
     *
     * @var FormatterLocator
     *
     */
   
protected $formatters;

   
/**
     *
     * Constructor.
     *
     * @param PackageLocator $packages The package locator.
     *
     * @param FormatterLocator $formatters The formatter locator.
     *
     * @param TranslatorFactory $factory A translator factory to
     * create translator objects for the locale and package.
     *
     * @param string $locale The default locale code to use.
     *
     */
   
public function __construct(
       
PackageLocator $packages,
       
FormatterLocator $formatters,
       
TranslatorFactory $factory,
       
$locale
   
) {
       
$this->packages = $packages;
       
$this->factory = $factory;
       
$this->formatters = $formatters;
       
$this->setLocale($locale);
    }

   
/**
     *
     * Sets the default locale code.
     *
     * @param string $locale The new locale code.
     *
     * @return void
     *
     */
   
public function setLocale($locale)
    {
       
$this->locale = $locale;
    }

   
/**
     *
     * Returns the default locale code.
     *
     * @return string
     *
     */
   
public function getLocale()
    {
        return
$this->locale;
    }

   
/**
     *
     * The TranslatorFactory object
     *
     * @return TranslatorFactory
     */
   
public function getFactory()
    {
        return
$this->factory;
    }

   
/**
     *
     * An object of type PackageLocator
     *
     * @return PackageLocator
     *
     */
   
public function getPackages()
    {
        return
$this->packages;
    }

   
/**
     *
     * An object of type FormatterLocator
     *
     * @return FormatterLocator
     *
     */
   
public function getFormatters()
    {
        return
$this->formatters;
    }

   
/**
     *
     * Gets a translator from the registry by package for a locale.
     *
     * @param string $name The translator package to retrieve.
     *
     * @param string $locale The locale to use; if empty, uses the default
     * locale.
     *
     * @return TranslatorInterface A translator object.
     *
     */
   
public function get($name, $locale = null)
    {
        if (!
$name) {
            return
null;
        }

        if (!
$locale) {
           
$locale = $this->getLocale();
        }

        if (! isset(
$this->registry[$name][$locale])) {

           
// get the package descriptor
           
$package = $this->packages->get($name, $locale);

           
// build a translator; note the recursive nature of the
            // 'fallback' param at the very end.
           
$translator = $this->factory->newInstance(
               
$locale,
               
$package,
               
$this->formatters->get($package->getFormatter()),
               
$this->get($package->getFallback(), $locale)
            );

           
// retain in the registry
           
$this->registry[$name][$locale] = $translator;
        }

        return
$this->registry[$name][$locale];
    }
}