|  |  |  | <?php
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace yii\i18n;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use Yii;
 | 
					
						
							|  |  |  | use yii\base\Component;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class I18N extends Component
 | 
					
						
							|  |  |  | {
 | 
					
						
							|  |  |  | 	public function translate($message, $params = array(), $language = null)
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		if ($language === null) {
 | 
					
						
							|  |  |  | 			$language = Yii::$app->language;
 | 
					
						
							|  |  |  | 		}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (strpos($message, '|') !== false && preg_match('/^([\w\-\.]+)\|(.*)/', $message, $matches)) {
 | 
					
						
							|  |  |  | 			$category = $matches[1];
 | 
					
						
							|  |  |  | 			$message = $matches[2];
 | 
					
						
							|  |  |  | 		} else {
 | 
					
						
							|  |  |  | 			$category = 'app';
 | 
					
						
							|  |  |  | 		}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //		$message = $this->getMessageSource($category)->translate($category, $message, $language);
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //		if (!is_array($params)) {
 | 
					
						
							|  |  |  | //			$params = array($params);
 | 
					
						
							|  |  |  | //		}
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //		if (isset($params[0])) {
 | 
					
						
							|  |  |  | //			$message = $this->getPluralFormat($message, $params[0], $language);
 | 
					
						
							|  |  |  | //			if (!isset($params['{n}'])) {
 | 
					
						
							|  |  |  | //				$params['{n}'] = $params[0];
 | 
					
						
							|  |  |  | //			}
 | 
					
						
							|  |  |  | //			unset($params[0]);
 | 
					
						
							|  |  |  | //		}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return $params === array() ? $message : strtr($message, $params);
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function getLocale($language)
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function getMessageSource($category)
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		return $category === 'yii' ? $this->getMessages() : $this->getCoreMessages();
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	private $_coreMessages;
 | 
					
						
							|  |  |  | 	private $_messages;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function getCoreMessages()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		if (is_object($this->_coreMessages)) {
 | 
					
						
							|  |  |  | 			return $this->_coreMessages;
 | 
					
						
							|  |  |  | 		} elseif ($this->_coreMessages === null) {
 | 
					
						
							|  |  |  | 			return $this->_coreMessages = new PhpMessageSource(array(
 | 
					
						
							|  |  |  | 				'sourceLanguage' => 'en_US',
 | 
					
						
							|  |  |  | 				'basePath' => '@yii/messages',
 | 
					
						
							|  |  |  | 			));
 | 
					
						
							|  |  |  | 		} else {
 | 
					
						
							|  |  |  | 			return $this->_coreMessages = Yii::createObject($this->_coreMessages);
 | 
					
						
							|  |  |  | 		}
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function setCoreMessages($config)
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$this->_coreMessages = $config;
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function getMessages()
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		if (is_object($this->_messages)) {
 | 
					
						
							|  |  |  | 			return $this->_messages;
 | 
					
						
							|  |  |  | 		} elseif ($this->_messages === null) {
 | 
					
						
							|  |  |  | 			return $this->_messages = new PhpMessageSource(array(
 | 
					
						
							|  |  |  | 				'sourceLanguage' => 'en_US',
 | 
					
						
							|  |  |  | 				'basePath' => '@app/messages',
 | 
					
						
							|  |  |  | 			));
 | 
					
						
							|  |  |  | 		} else {
 | 
					
						
							|  |  |  | 			return $this->_messages = Yii::createObject($this->_messages);
 | 
					
						
							|  |  |  | 		}
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function setMessages($config)
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		$this->_messages = $config;
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	protected function getPluralFormat($message, $number, $language)
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		if (strpos($message, '|') === false) {
 | 
					
						
							|  |  |  | 			return $message;
 | 
					
						
							|  |  |  | 		}
 | 
					
						
							|  |  |  | 		$chunks = explode('|', $message);
 | 
					
						
							|  |  |  | 		$rules = $this->getLocale($language)->getPluralRules();
 | 
					
						
							|  |  |  | 		foreach ($rules as $i => $rule) {
 | 
					
						
							|  |  |  | 			if (isset($chunks[$i]) && self::evaluate($rule, $number)) {
 | 
					
						
							|  |  |  | 				return $chunks[$i];
 | 
					
						
							|  |  |  | 			}
 | 
					
						
							|  |  |  | 		}
 | 
					
						
							|  |  |  | 		$n = count($rules);
 | 
					
						
							|  |  |  | 		return isset($chunks[$n]) ? $chunks[$n] : $chunks[0];
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Evaluates a PHP expression with the given number value.
 | 
					
						
							|  |  |  | 	 * @param string $expression the PHP expression
 | 
					
						
							|  |  |  | 	 * @param mixed $n the number value
 | 
					
						
							|  |  |  | 	 * @return boolean the expression result
 | 
					
						
							|  |  |  | 	 */
 | 
					
						
							|  |  |  | 	protected static function evaluate($expression, $n)
 | 
					
						
							|  |  |  | 	{
 | 
					
						
							|  |  |  | 		return @eval("return $expression;");
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | }
 |