i18n: «2 заказов» и...
 
Уведомления
Очистить всё

i18n: «2 заказов» и «21 заказов», как настроить русские окончания

3 Сообщения
3 Пользователи
6 Реакции
424 Просмотры
Улугбек Е.
Сообщения: 10
Автор темы
Разобрался с блоками junior-разработчик
Присоединился: 1 год назад
[#94]

Rails 8.0, в ru.yml для счётчика one и other, а на странице «2 заказов» и «21 заказов». Добавил few и many, не помогло. Что ещё нужно?


2 ответа
lena_bogatyreva
Сообщения: 27
Читает чужие PR бэкенд-разработчица
Присоединился: 3 года назад

Сам I18n в Rails знает только английское правило: один или «всё остальное», поэтому few и many он просто не ищет. Нужно правило множественного числа для русского. Проще всего гем rails-i18n, там оно уже есть, заодно переведённые сообщения валидаций. Если гем тащить не хочется, можно руками:

# config/initializers/pluralization.rb
require "i18n/backend/pluralization"
I18n::Backend::Simple.include(I18n::Backend::Pluralization)

# config/locales/plurals.rb
{ ru: { i18n: { plural: { rule: lambda { |n|
  mod10, mod100 = n % 10, n % 100
  if mod10 == 1 && mod100 != 11 then :one
  elsif (2..4).cover?(mod10) && !(12..14).cover?(mod100) then :few
  else :many
  end
} } } } }

В yml оставь one, few, many, а other тоже не удаляй, на него идёт откат, если нужного ключа нет. Сама на этом спотыкалась, так что проверь заодно 11, 12 и 111, обычно ломается на них.


Ответ
1 ответ
Максим О
Присоединился: 2 года назад

Собрал свой gem студент
Сообщения: 22

о, у меня в боте расписания была та же беда с «2 пар», сделал похожей лямбдой, только без rails


Ответ