如何复数“有/对象/对象”?

多个单词是很简单的:

pluralize(@total_users, "user") 

但是,如果我想打印“有/ N个用户/用户”怎么办:

有0位用户
有1个用户
有2个用户

,即如何复

您可以为其添加自定义变形。 默认情况下,Rails会将inflections.rb添加到config/initializers 。 在那里你可以添加:

 ActiveSupport::Inflector.inflections do |inflect| inflect.irregular "is", "are" end 

然后,您将能够使用pluralize(@total_users, "is")返回使用与用户/用户相同的规则。

编辑 :你澄清了如何复句的问题。 这通常要难得多,但如果你想这样做,你将不得不深入研究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." 

这可能是Rails i18n复数function最好的。 改编自http://guides.rubyonrails.org/i18n.html#pluralization

 I18n.backend.store_translations :en, :user_msg => { :one => 'There is 1 user', :other => 'There are %{count} users' } I18n.translate :user_msg, :count => 2 # => 'There are 2 users' 

我认为Martin Gordon的第一部分答案非常好。

或者,它有点乱,但你总是可以自己编写逻辑:

 "There #{@users.size == 1 ? 'is' : 'are'} #{@users.size} user#{'s' unless @users.size == 1}." 
    Interesting Posts