首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何复数“有/有N个对象/对象”?

如何复数“有/有N个对象/对象”?
EN

Stack Overflow用户
提问于 2012-01-09 22:40:24
回答 4查看 9.5K关注 0票数 21

单个单词的复数形式很简单:

代码语言:javascript
复制
pluralize(@total_users, "user")

但是如果我想打印"There is/are N user/users“怎么办:

有0个用户

有1个用户

有2个用户

,即how to sentence a

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-09 23:01:58

你可以为它添加一个自定义的词形变化。默认情况下,Rails会向config/initializers添加一个inflections.rb。您可以在此处添加:

代码语言:javascript
复制
ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular "is", "are"
end

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

编辑:您澄清了如何实现句子复数的问题。这在一般情况下要困难得多,但如果你想这样做,你必须使用dive into NLP

正如评论所暗示的,你可以用I18n做一些事情如果你只想用几句话来做,你可以构建这样的东西:

代码语言:javascript
复制
  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

代码语言:javascript
复制
  en:
    user_count: "There is %{count} user."
    user_count_plural: "There are %{count} users."
票数 34
EN

Stack Overflow用户

发布于 2013-04-14 10:19:31

Rails的i18n复数特性可能最能涵盖这一点。改编自http://guides.rubyonrails.org/i18n.html#pluralization

代码语言:javascript
复制
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'
票数 7
EN

Stack Overflow用户

发布于 2012-01-10 00:43:19

我认为马丁·戈登的答案的第一部分相当不错。

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

代码语言:javascript
复制
"There #{@users.size == 1 ? 'is' : 'are'} #{@users.size} user#{'s' unless @users.size == 1}."
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8790093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档