iEmpire
(Razor Psp)
October 14, 2010, 3:32pm
1
Необходимо сделать доступную из любого вьювера подобную функцию -
(склоняет форму в зависимости от числа - "письмо, писем, письма")
function plural($n, $form1, $form2, $form5)
{
$n = abs($n) % 100;
$n1 = $n % 10;
if ($n > 10 && $n < 20) return $form5;
else if ($n1 > 1 && $n1 < 5) return $form2;
else if ($n1 == 1) return $form1;
return $form5;
}
$n = 3; // Значение из базы данных
echo $n." ".plural($n, "письмо", "письма", "писем")." у Вас в ящике";
Думаю реализовать это Хелпером, типа CHtml::WordForms()
Подскажите реализацию…
gsd
(Kurgangsd)
October 15, 2010, 3:32am
2
Дык кинь класс со статическими пабликами (public static function ) например в protected/components/helpers
далее в конфиге
'import' => array(
...
'application.components.helpers.*',
...
и хоть где
echo $n." ".MyHelper::plural($n, "письмо", "письма", "писем")." у Вас в ящике";
someone
(198506)
October 15, 2010, 5:25am
3
Так ведь метод Yii::t() поддерживает такую фичу в зависимости от значения передаваемой переменной. Зачем изобретать велосипед?
http://yiiframework …/ru/topics.i18n
[color="#555555 "][font="Arial, Helvetica, sans-serif"][size="2"][size="2"]Для использования формата выбора перевод должен содержать последовательность пар выражение-сообщение, разделённых символом |:[/size]
[size=“2”][size=“2”][color="#009933 "][size=“2”]’[/size][/color][color="#009933 "][size=“2”]expr1#message1|expr2#message2|expr3#message3[/size][/color][color="#009933 "][size=“2”]’[/size][/color][/size][/size][size=“2”]где exprN — выражение PHP, возвращающее логическое значение. Если выражение равно true — используется соответствующий ему перевод и дальнейшие выражения не вычисляются. Выражение может содержать специальную переменную n (не $n!), которая содержит число, переданное первым параметром. Допустим, если мы используем перевод[/size]
[size=“2”][size=“2”][color="#009933 "][size=“2”]’[/size][/color][color="#009933 "][size=“2”]n==1#one book|n>1#many books[/size][/color][color="#009933 "][size=“2”]’[/size][/color][/size][/size][size=“2”]и передаём число 2 параметром Yii::t(), то получим many books.[/size]
[size="2"]Если проверяется соответствие определённому числу, можно использовать сокращённую запись, которая будет рассматриваться как n==Number:[/size]
[size=“2”][size=“2”][color="#009933 "][size=“2”]’[/size][/color][color="#009933 "][size=“2”]1#one book|n>1#many books[/size][/color][color="#009933 "][size=“2”]’[/size][/color][/size][/size][/size][/font][/color]
gsd
(Kurgangsd)
October 15, 2010, 7:42am
4
да согласен, но если бы было все намного сложнее
(http://phpmorphy.sourceforge.net/dokuwiki/ )
MichaelMV
(Michmv)
October 17, 2010, 12:14am
5
В этом случае легче всего создать свой компонент, и подключить его через конфиг. Соответственно можно и конфигурировать как хочется и доступ откуда хочешь Yii::app()->имя компонента->…