Puede agregarle una inflexión personalizada. De forma predeterminada, Rails agregará un inflections.rb
a config/initializers
. No se puede agregar:
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular "is", "are"
end
A continuación, será capaz de utilizar pluralize(@total_users, "is")
para volver está/están utilizando las mismas reglas que el usuario/usuarios.
EDIT: Aclaraste la pregunta sobre cómo pluralizar una oración. Esto es mucho más difícil de hacer genéricamente, pero si quieres hacerlo, tendrás que dive into NLP.
Como el comentario sugiere, se puede hacer algo con I18n si lo que desea es hacerlo con un par de frases, se podría construir algo como esto:
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")
Y en config/locales/en.yml
:
en:
user_count: "There is %{count} user."
user_count_plural: "There are %{count} users."
En realidad, creo que la pregunta es más acerca de cómo interpolar el número de usuarios, es decir, algo que podría parecerse a una mezcla entre i18n y pluralización por ejemplo, 'pluralize (@total_users," there is $ 1 user ")' ... que evidentemente fallará :) – Pierre
En [Agile Development with Rails, Fourth Edition] (http://pragprog.com/book/rails4/agile- web-development-with-rails), página 217, usan 'one' y' other' en el archivo YAML para pluralizar los mensajes de error. Esto se usa sin ningún código adicional para mostrar los errores de página, por lo que debería funcionar directamente con 't()'. – l0b0
Uno de los problemas que acerté con esta solución es si tiene un modelo que termina en "son" (en mi caso, ExtendedCare) todos sus códigos se rompen – Doug