Вы можете добавить индивидуальный флипс для него. По умолчанию Rails добавит inflections.rb
в config/initializers
. Там же можно добавить:
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular "is", "are"
end
Вы тогда будете в состоянии использовать pluralize(@total_users, "is")
на возвращение/используют одни и те же правила, что и пользователей/пользователей.
EDIT: Вы уточнили вопрос о том, как плюрализовать предложение. Это гораздо сложнее сделать в общем, но если вы хотите это сделать, вам нужно будет dive into NLP.
Как комментарий говорит, вы могли бы сделать что-то с I18n, если вы просто хотите, чтобы сделать это с несколькими предложениями, вы могли бы построить что-то вроде этого:
def pluralize_sentence(count, i18n_id, plural_i18n_id = nil)
if count == 1
I18n.t(i18n_id, :count => count)
else
I18n.t(plural_i18n_id || (i18n_id + "_plural"), :count => count)
end
end
pluralize_sentence(@total_users, "user_count")
И в config/locales/en.yml
:
en:
user_count: "There is %{count} user."
user_count_plural: "There are %{count} users."
На самом деле, я думаю, что вопрос о том, как интерполировать число пользователей, то есть нечто такое, что может выглядеть как смесь между i18n и плюрализацией например 'pluralize (@total_users,« есть пользователь в $ 1 »)' ..., который, очевидно, будет неудачно сбой :) – Pierre
В [Agile Development with Rails, четвертое издание] (http://pragprog.com/book/rails4/agile- web-development-with-rails), стр. 217, они используют «один» и «другой» в файле YAML для плюрализации сообщений об ошибках. Это используется без дополнительного кода для отображения ошибок страницы, поэтому он должен работать непосредственно с 't()'. – l0b0
Одна из проблем, с которой я столкнулся с этим решением, - это если у вас есть модель, которая заканчивается на «есть» (в моем случае ExtendedCare), все ваши разрывы кода – Doug