使用I18n覆盖模型属性名称 - 无法使其正常工作

时间:2010-09-14 16:17:37

标签: ruby-on-rails internationalization

我正在尝试将用于描述我的用户模型的“登录”属性的字符串覆盖为“用户名”。我认为这是在vendor/rails/activerecord/lib/active_record/locale/en.yml中设定的。我已经尝试在我的config/locales/en.yml文件中更改它,并且在任何情况下它都不起作用(我在每次更改后重新启动服务器)。

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

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

当我测试它时,例如f.label:在我的新用户表单中登录,它出现为“登录”而不是“用户名”。我是否因为这些东西是如何运作的一些根本错误而工作,或者它真的不起作用?无论哪种方式,任何人都可以告诉我如何解决它?谢谢,最大

4 个答案:

答案 0 :(得分:2)

如果你们中的任何一个遇到麻烦,翻译都没有加载,我调试如下:

首先,我使用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"

答案 1 :(得分:2)

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

正确的方法是

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

en:
 user:
   user_name: User Name

并在您的视图中

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