Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/aura/intl/src/Translator.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;

/**
 *
 * Translator to translate the message
 *
 * @package Aura.Intl
 *
 */
class Translator implements TranslatorInterface
{
   
/**
     *
     * A fallback translator.
     *
     * @var TranslatorInterface
     *
     */
   
protected $fallback;

   
/**
     *
     * The formatter to use when translating messages.
     *
     * @var FormatterInterface
     *
     */
   
protected $formatter;

   
/**
     *
     * The locale being used for translations.
     *
     * @var string
     *
     */
   
protected $locale;

   
/**
     * The Package containing keys and translations.
     *
     * @var Package
     *
     */
   
protected $package;

   
/**
     *
     * Constructor
     *
     * @param string $locale The locale being used.
     *
     * @param Package $package The Package containing keys and translations.
     *
     * @param FormatterInterface $formatter A message formatter.
     *
     * @param TranslatorInterface $fallback A fallback translator.
     *
     */
   
public function __construct(
       
$locale,
       
Package $package,
       
FormatterInterface $formatter,
       
TranslatorInterface $fallback = null
   
) {
       
$this->locale    = $locale;
       
$this->package   = $package;
       
$this->formatter = $formatter;
       
$this->fallback  = $fallback;
    }

   
/**
     *
     * Gets the message translation by its key.
     *
     * @param string $key The message key.
     *
     * @return mixed The message translation string, or false if not found.
     *
     */
   
protected function getMessage($key)
    {
       
$message = $this->package->getMessage($key);
        if (
$message) {
            return
$message;
        }

        if (
$this->fallback) {
           
// get the message from the fallback translator
           
$message = $this->fallback->getMessage($key);
            if (
$message) {
               
// speed optimization: retain locally
               
$this->package->addMessage($key, $message);
               
// done!
               
return $message;
            }
        }

       
// no local message, no fallback
       
return false;
    }

   
/**
     *
     * Translates the message indicated by they key, replacing token values
     * along the way.
     *
     * @param string $key The message key.
     *
     * @param array $tokens_values Token values to interpolate into the
     * message.
     *
     * @return string The translated message with tokens replaced.
     *
     */
   
public function translate($key, array $tokens_values = [])
    {
       
// get the message string
       
$message = $this->getMessage($key);

       
// do we have a message string?
       
if (! $message) {
           
// no, return the message key as-is
           
$message = $key;
        }

       
// are there token replacement values?
       
if (empty($tokens_values)) {
           
// no, return the message string as-is
           
return $message;
        }

       
// run message string through formatter to replace tokens with values
       
return $this->formatter->format($this->locale, $message, $tokens_values);
    }

   
/**
     *
     * An object of type Package
     *
     * @return Package
     *
     */
   
public function getPackage()
    {
        return
$this->package;
    }
}