È possibile aggiungere un'inflessione personalizzata per esso. Per impostazione predefinita, Rails aggiungerà uno inflections.rb
a config/initializers
. Ci si può aggiungere:
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular "is", "are"
end
Sarà quindi in grado di utilizzare pluralize(@total_users, "is")
di tornare è/sono usando le stesse regole come utente/utenti.
MODIFICA: Hai chiarito la domanda su come pluralizzare una frase. Questo è molto più difficile da fare in termini generici, ma se vuoi farlo, devi fare dive into NLP.
Come il commento suggerisce, si potrebbe fare qualcosa con I18n se si desidera solo per farlo con poche frasi, si potrebbe costruire qualcosa di simile:
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")
E in config/locales/en.yml
:
en:
user_count: "There is %{count} user."
user_count_plural: "There are %{count} users."
fonte
2012-01-09 15:01:58
realtà, credo che la questione è di più su come interpolare il numero di utenti, vale a dire qualcosa che potrebbe apparire come un mix tra i18n e pluralizzazione per esempio 'pluralize (@total_users," c'è $ 1 utente ")' ... che ovviamente fallirà miseramente :) – Pierre
In [Agile Development with Rails, Quarta Edizione] (http://pragprog.com/book/rails4/agile- web-development-with-rails), pagina 217, usano 'one' e' other' nel file YAML per pluralizzare i messaggi di errore. Questo è usato senza alcun codice aggiuntivo per visualizzare gli errori di pagina, quindi dovrebbe funzionare direttamente con 't()'. – l0b0
Un problema che ho riscontrato con questa soluzione è che se un modello termina con "sono" (nel mio caso ExtendedCare) tutte le interruzioni di codice – Doug