Как стать автором
Обновить

Комментарии 22

Неудачный пример с файлами, так как глагол «скопирован» в Plural и Dual формах одинаков
Singular: 1 файл скопирован
Dual: 22 файла скопировано (не скопированы)
Plural: 26 файлов скопировано
да он и в отношении файлов некорректный:
три файлов скопировано
три это же не Dual, как я понимаю
Dual
Если сходить по ссылке в конце статьи, то можно увидеть, что для русского языка форма Dual применяется для следующих n:
n % 10 >= 2
&& n % 10 <= 4
&& (n % 100 < 10 || n % 100 > 20)
по ссылке такое слово вообще не упоминается — получилась наглядная иллюстрация на тему как надо и как не надо именовать константы, переменные и прочие сущности ;-)
Спасибо, исправил.
Простите, а к чему эта ссылка?
сборник формул вычисления множественных форм для разных языков. в пару к указанной в посте ссылке (http://doc.trolltech.com/qq/qq19-plurals.html#howdoesitworkunderthehood)
Понял. Спасибо.
Кто бы дал пример для арабского. 6 форм.
Большое спасибо, давно интересовала эта проблема. И не смотря на не самый маленький опыт использования Qt, почему-то до этого момента не сталкивался с решением.
Для пхп. Функция из двух строк. Может кому пригодится.

Функция:
function declOfNum($number, $titles)
{
$cases = array (2, 0, 1, 1, 1, 2);
return $number." ".$titles[ ($number%100>4 && $number%100<20)? 2: $cases[min($number%10, 5)] ];
}

Пример использования:
echo 'Я знаю '.declOfNum(5, array('иностранный язык', 'иностранных языка', 'иностранных языков'));
plural=(n%10==1 && n%100!=11? 0: n%10>=2 && n%10< =4 && (n%100<10 or n%100>=20)? 1: 2)

и без всяких непонятных $cases
Корректный код на PHP:
$plural=($n%10==1 && $n%100!=11? 0: ($n%10>=2 && $n%10
код съел хабр
но, думаю, n -> $n люди догадаются сделать и сами
Ага. Таки съел.
Там еще есть нюанс с приоритетами операций в PHP. Второй тернарный оператор надо взять в круглые скобки. Вставить правильный код так и не получилось :(
юзайте <code>?
угу, про второй тернарный вспомнил — в своё время именно эту формулу и использовал :-)
Для PHP есть ngettext )
Помнится я тоже пытался придумать что-то похожее. Не понял только что делать, если числа два:
«Скопировано 5 файлов и 2 папки.»
Количество вариантов растет очень быстро. Что делать не понятно.
Разбивать на 2 отдельные строки.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории