Как сделать правильное склонение для множественных чисел в Drupal

Сегодня впервые столкнулся с проблемой правильного склонения множественного числа. Для английского языка данная проблема не актуальна, так как там всего два варианта: 1 item, 5 items.

В русском же языке существует 3 формы множественного числа: 1 элемент, 2 элемента, 11 элементов.

Напомню, что в Drupal числа во множественном числе выводятся с помощью функции format_plural($count, $singular, $plural, array $args = array(), array $options).

Параметры

  • $count - число для подстановки;
  • $singular - строка в единственном числе. Не используйте @count в этой строке;
  • $plural - строка для множественного значения;
  • $args - ассоциативный массив подстановок для перевода; При встрече ключей массива в строке перевода, они заменяются на соответствующие значения;
  • $options - ассоциативный массив дополнительных опций. См. t() для разрешенных ключей.

Пример

format_plural($count, '1 item', '@count items');

Чтобы теперь сделать правильное склонение на русском языке, необходимо в переводы (admin/config/regional/translate) добавить следующие строки:

1 item - 1 элемент
@count items — @count элемента
@count[2] items — @count[2] элементов

Таким образом для определенных значений @count будет выводится нужная форма множественного числа (1 элемент, 2 элемента, 11 элементов т.д.).

Комментарии (8)

Аватар пользователя Петя Шметя
Петя Шметя

насколько я понял @count[2] - это вариант для двузначных чисел?
тогда получается исходя из этой логики "4 элемента, 5 элемента, 6 элемента" ??

Аватар пользователя Benya
Benya

не совсем так, это 3 формы склонения, 4 элемента, но 5 элементов, 21 элемент, 25 элементов.

Аватар пользователя Александр
Александр

непонятно куда это надо добавлять (admin/config/regional/translate) нет возможности добавлять строки

Аватар пользователя Benya
Benya

Дайте пример строки, которую Вы хотите перевести

Аватар пользователя kreaton
kreaton

таки пригодилось :) спасибо!

Аватар пользователя Денис
Денис

admin/config/regional/translate на этой странице только обзор переводов. Во вкладке "Перевести" добавляя переводы ничего не происходит

Аватар пользователя Benya
Benya

значит что то не так делаете

Аватар пользователя Frantsuzzz
Frantsuzzz

В русском языке для первой формы "1 item' стоит задавать строку "@count item", т.к. есть числа 21, 31 и т.д.