单个单词的复数形式很简单:
pluralize(@total_users, "user")
但是如果我想打印"There is/are N user/users“怎么办:
有0个用户
有1个用户
有2个用户
,即how to sentence a
发布于 2012-01-09 23:01:58
你可以为它添加一个自定义的词形变化。默认情况下,Rails会向config/initializers
添加一个inflections.rb
。您可以在此处添加:
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular "is", "are"
end
然后,您将能够使用pluralize(@total_users, "is")
返回与user/users相同的规则。
编辑:您澄清了如何实现句子复数的问题。这在一般情况下要困难得多,但如果你想这样做,你必须使用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."
发布于 2013-04-14 10:19:31
Rails的i18n复数特性可能最能涵盖这一点。改编自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'
发布于 2012-01-10 00:43:19
我认为马丁·戈登的答案的第一部分相当不错。
或者,它有点乱,但你可以自己写逻辑:
"There #{@users.size == 1 ? 'is' : 'are'} #{@users.size} user#{'s' unless @users.size == 1}."
https://stackoverflow.com/questions/8790093
复制相似问题