我对 pluralize 有一个大问题:当为 0 时,它会复数这个词
pluralize(@posts.size,"post")
如果@posts.size 等于 0 :
0 posts
如果@posts.size 等于 1:
1 post
如果@posts.size 等于或大于 2:
n posts
默认情况下它不应该在 0 时添加 s,我迷路了。有人看到这里出了什么问题吗?
最佳答案
任何非 1 的数字都被认为是复数。而不是说:
You have 0 posts.
正确的英文句子是:
You do not have any posts.
编辑:您的要求相当大,任何人(至少对我而言)都不可能将其简洁地放在一个帖子中。我宁愿建议您阅读国际化(通常称为 i18n)文档。
http://guides.rubyonrails.org/i18n.html
基本上,有两件事,Translations
和 Inflectors
。
变形符是定义字符串或模式如何替换为单数或复数或者是否不可数的规则。例如,is
is are
的复数形式被定义为变形词。
I18n 帮助您为字符串定义区域指定的人性化文本。如果您在 Rails 项目中看到 config
文件夹,您会看到一个名为 locales
的文件夹,其中包含每个区域设置的单个 YAML
文件。这种针对语言环境的人性化文本称为翻译。
pluralize
是在 3 个地方定义的函数:
- Inflector 模块。
- 作为
String
的实例方法。 - 作为
ActionView
中的辅助方法。
通常在 Rails 中,我们调用 helper 方法,它可能会调用 String 的方法,而后者又会调用 Inflector 的方法。
您尝试在 config/initializers/filename.rb
中添加以下代码并尝试再次运行:
module ActionView
module Helpers
module TextHelper
def pluralize(count, singular, plural = nil)
"#{count || 0} " + ([0, 1, '0', '1'].include?(count) ? singular : (plural || singular.pluralize))
end
end
end
end
这将返回 0 post
但仅适用于默认语言环境 en
。如果您希望针对特定语言环境执行此操作,请使用所选语言环境调用 String pluralize 函数并将其作为 3 参数传递给上述函数。例如,对于 fr
语言环境,您可以尝试如下操作:
pluralize 0, "post", "post".pluralize(:fr) # => will return for fr locale
在 SO 上提出更多问题,让专家更详细地解释。
希望对你有帮助。
关于string - rails4//pluralize 当计数为 0 时进行复数化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26651269/