Package | system.i18n |
---|---|
Inheritance | class CChoiceFormat |
Source Code | framework/i18n/CChoiceFormat.php |
'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.
'n==1#one|n==2#two|n>2#others'
and
the number value 2, the resulting message will be 'two'
.
'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'
.
Method | Description | Defined By |
---|---|---|
format() | Formats a message according to the specified number value. | CChoiceFormat |
Method | Description | Defined By |
---|---|---|
evaluate() | Evaluates a PHP expression with the given number value. | CChoiceFormat |
protected static boolean evaluate(string $expression, mixed $n)
| ||
$expression | string | the PHP expression |
$n | mixed | the number value |
{return} | boolean | the expression result |
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.
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 |
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.
Signup or Login in order to comment.