【问题标题】:Overriding model attribute names using I18n - can't get this working使用 I18n 覆盖模型属性名称 - 无法正常工作
【发布时间】:2010-09-14 16:17:36
【问题描述】:

我正在尝试将用于描述我的用户模型的“登录”属性的字符串改写为“用户名”。我以为这是在vendor/rails/activerecord/lib/active_record/locale/en.yml 中设置的。我已经尝试在此处和我的config/locales/en.yml 文件中进行更改,但在这两种情况下都不起作用(每次更改后我都会重新启动服务器)。

在这两种情况下都是这样完成的:

en:
...
  activerecord:
    attributes:
         user:
           login: User Name

当我测试它时,例如在我的新用户表单中使用 f.label :login,它会显示为“登录”而不是“用户名”。我是在为这些东西如何工作的一些基本错误而努力,还是它真的不起作用?无论哪种方式,谁能告诉我如何解决它?谢谢,最大

【问题讨论】:

    标签: ruby-on-rails internationalization


    【解决方案1】:

    如果你们中的任何人遇到翻译没有加载的问题,我会这样调试:

    首先我使用https://stackoverflow.com/a/10211540/474597 中的脚本来设置日志记录。 然后,当我运行服务器并呈现页面时,我可以在该日志中看到用于获取翻译的键。然后我可以检查我使用的密钥是否正确。


    一个陷阱是,第一个密钥不一定是他们将使用的密钥。我见过它加载正确密钥的情况,然后寻找另一个没有翻译的密钥,从而产生英文翻译。我必须把翻译放在这两个键中。

    例如:我的Foo has_many Bar,而Bar has_many Duu,而Duu有一个价格栏。 为了翻译该价格列,我必须具备以下条件才能使其工作:

      activerecord:
        attributes:
          'foo/bar/duu':
            price: "price"
    

    即使日志有这个:

    :duu
    :"activerecord.attributes.duu.text"
    :"activerecord.errors.models.duu.attributes.text.blank"
    :"activerecord.errors.models.duu.blank"
    :"activerecord.errors.messages.blank"
    :"errors.attributes.text.blank"
    :"errors.messages.blank"
    :"activerecord.attributes.foo/bars/duus.text"
    

    【讨论】:

      【解决方案2】:

      我是应某人的要求在这里回答这个问题的……我确实解决了这个问题,但没有更新我的问题,抱歉。我在我的问题中处于正确的位置,但没有正确的“路径”到键:显示的字段名称被称为“标签”,并且它们在 :activerecord 之外有自己的部分yaml 树的一部分。

      正确的做法是

      en:
        user:
          labels:
            login: "User Name"
            email: "Email Address"
      

      其中“用户”是小写的模型名称,登录名和电子邮件是字段。

      【讨论】:

        【解决方案3】:

        我想你可以在这里找到你要找的东西: http://guides.rubyonrails.org/i18n.html#translations-for-active-record-models

        【讨论】:

          【解决方案4】:

          您可以在 en.yml 文件中以任何名称存储您的“用户名”字符串:

          en:
           user:
             user_name: User Name
          

          在你看来

          <%= f.label :login, t('user.user_name') %> 
          

          【讨论】:

          • 嗨,亚尼斯。我知道我可以制作自己的自定义翻译,但我的理解是我可以覆盖由 rails 生成的翻译,这样我就不必参考任何自定义翻译:它们会自动使用。我可能错了。
          • 那真的很有趣……如果您在其他地方找到解决方案,请在此处发表评论。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多