【问题标题】:How to pluralize human_attribute_name with Rails 5 and I18n?如何使用 Rails 5 和 I18n 复数 human_attribute_name?
【发布时间】:2019-02-11 14:02:57
【问题描述】:

我想在我的应用程序中翻译和复数一个属性名称。

所以,对于我的 api_key 属性,我有翻译“Clef API”。

我用Mymodel.human_attribute_name(:api_key).pluralize(2)复数属性名称并得到结果:"Clef APIs"

但在法语中,“Clef API”的复数形式是“Clefs API”

所以我尝试在我的 YML 中提供复数翻译,但它不起作用,我仍然得到“One”的翻译,最后带有一个“s”。

fr.yml:

activerecord:
  attributes:
    mymodel:
      api_key:
        one: "Clef API"
        other: "Clefs API"  

我可以让Mymodel.human_attribute_name(:api_key).pluralize(2) 返回"Clefs API" 吗?

如果不是,我如何翻译和复数我的属性名称?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-5 rails-i18n


    【解决方案1】:

    在发布我的问题后,我虽然应该查看文档以获取 human_attribute_name 的提示。它确实解决了我的问题...

    原来human_attribute_name 直接处理复数。它接受带有键 :countoptions 散列,该散列确实会触发复数,就像其他 I18n 方法一样。

    所以,就这么简单Mymodel.human_attribute_name(:api_key, count: 2)

    【讨论】:

      【解决方案2】:

      您可以在config/initializers/inflections.rbInflectors 中添加自定义复数词。你可以看下面的代码示例:

      ActiveSupport::Inflector.inflections(:fr) do |inflect|
        inflect.irregular 'Clef API', 'Clefs API'
      end
      

      【讨论】:

      • 变形器确实是一个很好的方法。但你必须小心:pluralizesingularize 使用 :en 作为默认语言环境,而不是当前的 I18n.locale。所以,要在这里使用变形器,我还必须添加语言环境:Mymodel.human_attribute_name(:api_key).pluralize(2, I18n.locale)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 2019-04-23
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 2013-10-11
      相关资源
      最近更新 更多