Размер файла: 3.51Kb
<?php
namespace Carbon;
use Symfony\Component\Translation;
class Translator extends Translation\Translator
{
/**
* Singleton for Translator.
*
* @var static
*/
protected static $singleton;
/**
* List of custom localized messages.
*
* @var array
*/
protected static $messages = array();
/**
* Return a singleton instance of Translator.
*
* @param string|null $locale optional initial locale ("en" - english by default)
*
* @return static
*/
public static function get($locale = null)
{
if (static::$singleton === null) {
static::$singleton = new static($locale ?: 'en');
}
return static::$singleton;
}
public function __construct($locale, Translation\Formatter\MessageFormatterInterface $formatter = null, $cacheDir = null, $debug = false)
{
$this->addLoader('array', new Translation\Loader\ArrayLoader());
parent::__construct($locale, $formatter, $cacheDir, $debug);
}
/**
* Reset messages of a locale (all locale if no locale passed).
* Remove custom messages and reload initial messages from matching
* file in Lang directory.
*
* @param string|null $locale
*
* @return bool
*/
public function resetMessages($locale = null)
{
if ($locale === null) {
static::$messages = array();
return true;
}
if (file_exists($filename = __DIR__.'/Lang/'.$locale.'.php')) {
static::$messages[$locale] = require $filename;
$this->addResource('array', static::$messages[$locale], $locale);
return true;
}
return false;
}
/**
* Init messages language from matching file in Lang directory.
*
* @param string $locale
*
* @return bool
*/
protected function loadMessagesFromFile($locale)
{
if (isset(static::$messages[$locale])) {
return true;
}
return $this->resetMessages($locale);
}
/**
* Set messages of a locale and take file first if present.
*
* @param string $locale
* @param array $messages
*
* @return $this
*/
public function setMessages($locale, $messages)
{
$this->loadMessagesFromFile($locale);
$this->addResource('array', $messages, $locale);
static::$messages[$locale] = array_merge(
isset(static::$messages[$locale]) ? static::$messages[$locale] : array(),
$messages
);
return $this;
}
/**
* Get messages of a locale, if none given, return all the
* languages.
*
* @param string|null $locale
*
* @return array
*/
public function getMessages($locale = null)
{
return $locale === null ? static::$messages : static::$messages[$locale];
}
/**
* Set the current translator locale and indicate if the source locale file exists
*
* @param string $locale locale ex. en
*
* @return bool
*/
public function setLocale($locale)
{
$locale = preg_replace_callback('/[-_]([a-z]{2,})/', function ($matches) {
// _2-letters is a region, _3+-letters is a variant
return '_'.call_user_func(strlen($matches[1]) > 2 ? 'ucfirst' : 'strtoupper', $matches[1]);
}, strtolower($locale));
if ($this->loadMessagesFromFile($locale)) {
parent::setLocale($locale);
return true;
}
return false;
}
}