在Rails5上启用变形

时间:2016-10-19 10:34:26

标签: ruby-on-rails

我需要在Rails5应用上添加意大利语的变形规则。

所以我更新了initializers/inflections.rb如下。

ActiveSupport::Inflector.inflections(:it) do |inflect|
   inflect.plural /^([\w]*)o/i, '\1i'
   inflect.plural /^([\w]*)a/i, '\1e'
   inflect.uncountable %w( attività )
 end

但重新启动服务器后,仍然使用英语规则。

区域设置正确设置为:it(UI已正确本地化)但使用英语规则将文字复数化。

我能以某种方式启用我定义的规则吗?

由于

1 个答案:

答案 0 :(得分:1)

Rails docs for pluralize似乎表明必须将语言环境作为参数传递给pluralize方法,而不是自动从应用程序的语言环境中推导出来。如下所示:

pluralize("cane", :it)
# or directly on string
"cane".pluralize(2, :it)

......应该有效。

如果您有多语言环境应用,则可以将:it替换为I18n.locale,以根据用户的语言区域更改变形区域设置。

修改

您可能希望再次查看您的规则!目前正在

"cane".pluralize(:it) #=> "cene"
即使我(根本不会说意大利语)也能看到错误。这是因为你的正则表达式中缺少字符串锚点的结尾,因此正在拾取a的第一个实例。只需在正则表达式的末尾添加\z以确保只识别最终字符 - 我建议您使用\A代替^

ActiveSupport::Inflector.inflections(:it) do |inflect|
  inflect.plural /\A([\w]*)o\z/i, '\1i'
  inflect.plural /\A([\w]*)a\z/i, '\1e'
  inflect.uncountable %w( attività )
end