CChoiceFormat
Package | system.i18n |
---|---|
Inheritance | class CChoiceFormat |
Source Code | framework/i18n/CChoiceFormat.php |
CChoiceFormat is a helper that chooses an appropriate message based on the specified number value. The candidate messages are given as a string in the following format:
For example, given the candidate messages
For expressions like
In case the given number doesn't select any message, the last candidate message will be returned.
The PHP expressions will be evaluated using evaluate.
'expr1#message1|expr2#message2|expr3#message3'where each expression should be a valid PHP expression with
'n'
as the only variable. For example, 'n==1'
and 'n%10==2 && n>10'
are both valid expressions. The variable 'n'
will take the given number value, and if an expression evaluates true, the corresponding message will be returned. For example, given the candidate messages
'n==1#one|n==2#two|n>2#others'
and the number value 2, the resulting message will be 'two'
. For expressions like
'n==1'
, we can also use a shortcut '1'
. So the above example candidate messages can be simplified as '1#one|2#two|n>2#others'
. In case the given number doesn't select any message, the last candidate message will be returned.
The PHP expressions will be evaluated using evaluate.
Public Methods
Method | Description | Defined By |
---|---|---|
format() | Formats a message according to the specified number value. | CChoiceFormat |
Protected Methods
Method | Description | Defined By |
---|---|---|
evaluate() | Evaluates a PHP expression with the given number value. | CChoiceFormat |
Method Details
evaluate() method
protected static boolean evaluate(string $expression, mixed $n) | ||
$expression | string | the PHP expression |
$n | mixed | the number value |
{return} | boolean | the expression result |
Source Code: framework/i18n/CChoiceFormat.php#72 (show)
protected static function evaluate($expression,$n)
{
try
{
return @eval("return $expression;");
}
catch (ParseError $e)
{
return false;
}
}
Evaluates a PHP expression with the given number value.
format() method
public static string format(string $messages, mixed $number) | ||
$messages | string | the candidate messages in the format of 'expr1#message1|expr2#message2|expr3#message3'. See CChoiceFormat for more details. |
$number | mixed | the number value |
{return} | string | the selected message |
Source Code: framework/i18n/CChoiceFormat.php#46 (show)
public static function format($messages, $number)
{
$n=preg_match_all('/\s*([^#]*)\s*#([^\|]*)\|/',$messages.'|',$matches);
if($n===0)
return $messages;
for($i=0;$i<$n;++$i)
{
$expression=$matches[1][$i];
$message=$matches[2][$i];
if($expression===(string)(int)$expression)
{
if($expression==$number)
return $message;
}
elseif(self::evaluate(str_replace('n','$n',$expression),$number))
return $message;
}
return $message; // return the last choice
}
Formats a message according to the specified number value.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CChoiceFormat