l0b*_*0b0 20 ruby-on-rails inflection plural ruby-on-rails-3.1
多个单词是很简单的:
pluralize(@total_users, "user")
Run Code Online (Sandbox Code Playgroud)
但是如果我想要打印"有/ N个用户/用户" 怎么办:
有0位用户
有1位用户
该用户已经有2位用户
,即如何复句?
Mar*_*don 33
您可以为其添加自定义变形.默认情况下,Rails会的添加inflections.rb
到config/initializers
.在那里你可以添加:
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular "is", "are"
end
Run Code Online (Sandbox Code Playgroud)
然后,您将能够使用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")
Run Code Online (Sandbox Code Playgroud)
并在config/locales/en.yml
:
en:
user_count: "There is %{count} user."
user_count_plural: "There are %{count} users."
Run Code Online (Sandbox Code Playgroud)
这可能是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'
Run Code Online (Sandbox Code Playgroud)
我认为Martin Gordon的第一部分答案非常好.
或者,它有点乱,但你总是可以自己编写逻辑:
"There #{@users.size == 1 ? 'is' : 'are'} #{@users.size} user#{'s' unless @users.size == 1}."
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8550 次 |
最近记录: |