Pluralization не работает как надо.

480 views
Skip to first unread message

Элькойот Стрикин

unread,
Feb 19, 2014, 9:14:42 AM2/19/14
to ror...@googlegroups.com
Всем привет.
Не могу заставить правильно работать плюрализацию. Работают только :zero, :one и :other. На английский манер, в общем. Дорогие сердцу :few и :many — ни в какую.
Исходные данные:
Rails 4.0.2

в config/initializers создан файл pluralization.rb:

Вариант 1:
require "i18n/backend/pluralization"
I18n::Backend::Simple.send(:include, I18n::Backend::Pluralization)
{
:ru => { :i18n => { :plural => { :keys => [:one, :few, :many, :other], :rule => lambda { |n| n % 10 == 1 && n % 100 != 11 ? :one : [2, 3, 4].include?(n % 10) && ![12, 13, 14].include?(n % 100) ? :few : n % 10 == 0 || [5, 6, 7, 8, 9].include?(n % 10) || [11, 12, 13, 14].include?(n % 100) ? :many : :other } } } }
}

Вариант 2:
require "i18n/backend/pluralization"
I18n::Backend::Simple.send(:include, I18n::Backend::Pluralization)

в config/locales создан файл ru.yml:
ru:
kids:
zero: ru_zero
one: ru_one
few: ru_few
many: ru_many
other: ru_other

в конфигах(application.rb) прописано
config.i18n.default_locale = :ru

код вывода:
0.upto 15 {|i|
i.to_s + " "
t(:kids, count: i)
}

Вывод:
0 ru_zero
1 ru_one
2 ru_other
3 ru_other
4 ru_other
5 ru_other
6 ru_other
7 ru_other
8 ru_other
9 ru_other
10 ru_other
11 ru_other
12 ru_other
13 ru_other
14 ru_other
15 ru_other

Я не понимат =(

Vitaly Tatarintsev

unread,
Feb 19, 2014, 12:16:24 PM2/19/14
to ror...@googlegroups.com
22.times do |i|
   puts "#{i} #{Russian.pluralize i, *%w[ребенок ребенка детей]}"  
end  
0 детей
1 ребенок
2 ребенка
3 ребенка
4 ребенка
5 детей
6 детей
7 детей
8 детей
9 детей
10 детей
11 детей
12 детей
13 детей
14 детей
15 детей
16 детей
17 детей
18 детей
19 детей
20 детей
21 ребенок



--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на https://groups.google.com/group/ror2ru
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ

 Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror...@googlegroups.com
---
Вы получили это сообщение, поскольку подписаны на группу RubyOnRails to russian.

Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес ror2ru+un...@googlegroups.com.
Просмотреть это обсуждение в Сети можно по адресу https://groups.google.com/d/msgid/ror2ru/db6d0a3f-c74e-4527-9750-efb55f908324%40googlegroups.com.
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.

Zabazhanov Arkady

unread,
Feb 19, 2014, 4:25:14 PM2/19/14
to ror...@googlegroups.com
Просто юзай https://github.com/svenfuchs/rails-i18n. Там уже всё есть.


20 февраля 2014 г., 0:16 пользователь Vitaly Tatarintsev <kala...@gmail.com> написал:
Просмотреть это обсуждение в Сети можно по адресу https://groups.google.com/d/msgid/ror2ru/CAAPOGxz%3Du5hzQW6M4Wdoceyd-fx9nVD0UQ2yqVDyKRF_iQvjYw%40mail.gmail.com.

Элькойот Стрикин

unread,
Feb 20, 2014, 12:47:53 AM2/20/14
to ror...@googlegroups.com
Ур-р-ра, работает! Спасибо=)
0 ru_zero
1 ru_one
2 ru_few
3 ru_few
4 ru_few
5 ru_many
6 ru_many
7 ru_many
8 ru_many
9 ru_many
10 ru_many
11 ru_many
12 ru_many
13 ru_many
14 ru_many
15 ru_many

четверг, 20 февраля 2014 г., 1:25:14 UTC+4 пользователь pyromaniac написал:

Элькойот Стрикин

unread,
Feb 20, 2014, 1:43:25 AM2/20/14
to ror...@googlegroups.com
Вдогонку:
Кто-нибудь, подскажите как изменить приоритет загрузки локалей yml, — другими словами, переопределить некоторые переводы сообщений об ошибках.
Имеются следующие файлы:
Мой config/locales/ru.yml:
ru:
  errors:
    messages:
      blank: отсутствует.
      taken: уже есть в системе.

А также \lib\ruby\gems\2.0.0\gems\rails-i18n-4.0.1\rails\locale\ru.yml
  errors: &errors
    format: ! '%{attribute} %{message}'
    messages:
      accepted: нужно подтвердить
      blank: не может быть пустым
      confirmation: 'не совпадает с  %{attribute}'
      empty: не может быть пустым
Не хочется исправлять библиотечные данные. По идее нужно сделать так, чтобы моя версия локали грузилась последней. Либо выставить ей как-то приоритет.

Если делать так, то сообщение об ошибке переопределяется:
ru:
    errors:
      models:
        user:
          attributes:
            name:
              blank: отсутствует.

Но для каждого атрибута и каждой модели прописывать — это не дело, конечно же.

Элькойот Стрикин

unread,
Feb 20, 2014, 2:27:58 AM2/20/14
to ror...@googlegroups.com
Решено:
В созданной мной локали я допустил ошибку вложенности:

ru:
  errors:
    messages:
      blank: отсутствует.
      taken: уже есть в системе.

А нужно было вложить в activerecord так:
ru:
  activerecord:

    errors:
      messages:
        blank: отсутствует.
        taken: уже есть в системе.


четверг, 20 февраля 2014 г., 10:43:25 UTC+4 пользователь Элькойот Стрикин написал:
Reply all
Reply to author
Forward
0 new messages