Падежи с числами без gettext

Материал из Wiki - thelogin.ru
Перейти к: навигация, поиск
function rusprintf($numeric, $one, $two, $many)
{
        $numeric = abs($numeric);
 
        $a = $numeric % 10;
        $b = $numeric % 100;
        if ($a == 1 && $b != 11) return $one;
        else if ($a >= 2 && $a <= 4 && ($b < 10 || $b > 20)) return $two;
        return $many;
}
 
for ($i = 1; $i < 150; $i++)
	echo $i . ' ' . rusprintf($i, 'сайт', 'сайта', 'сайтов') . "\n";
Это же можно оформить в виде плагина к Smarty:
function rusprintf($params)
{
	extract($params); // $numeric, $one, $two, $many
 
        $numeric = abs($numeric);
 
        $a = $numeric % 10;
        $b = $numeric % 100;
        if ($a == 1 && $b != 11) return $one;
        else if ($a >= 2 && $a <= 4 && ($b < 10 || $b > 20)) return $two;
        return $many;
}
 
$smarty->register_function("rusprintf", "rusprintf");
И использовать так:
Этим тэгом {rusprintf numeric=$tag.used one='отмечена' two='отмечены' many='отмечены'} {$tag.used} {rusprintf numeric=$tag.used one='запись' two='записи' many='записей'}
Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты
Тэги