2009-05-22 75 views
6

我已经在翻译文件中定义了翻译后的属性和模型名称,Modelname.human_attribute_name(...)返回了正确翻译后的属性名称,但属性名称错误消息是未翻译的。 需要翻译错误消息中的属性名称?Rails错误消息中的转换后的属性(Rails 2.3.2,I18N)

+0

我有类似的问题。但在我的应用翻译不适用于型号名称。 Rails代码中可能存在一个错误。但属性名称已正确翻译。 – 2009-05-22 19:58:59

回答

13

Guide关于这个问题,你就需要设置本地化文件中正确使用你的模型名和属性名:

en: 
    activerecord: 
    models: 
     user: Dude 
    attributes: 
     user: 
     login: "Handle" 

由于这是YAML,请确保您所有的“标签”实际上两个软空间。然后你可以用User.human_nameUser.human_attribute_name(:login)将它们取出。

我没有接受福音 - 那可能是一个错误。我测试了它,它工作正常。我制作了一个名为Model的模型,其属性为title。这里是我的fr.yml文件的config/locales一个片段:

fr: 
    activerecord: 
    models: 
     model: "Sumfink" 
    attributes: 
     model: 
     title: "Tiltile" 

下面是相关的视图代码:

<h1>New <%= Model.human_name %></h1> 
<% form_for(@model) do |f| %> 
    <%= f.error_messages %> 
    <%= Model.human_attribute_name("title") %><br /> 
    <%= f.text_field :title %> 
    <%= f.error_message_on :title %> 
... 

而且正确地转换输出的截图:http://screencast.com/t/et5FhVe1Gp

+0

非常感谢您的详细解答。我尝试了一个新项目。我使用了现有项目的翻译文件,并添加了一个新模型来测试翻译,翻译立即生效。 我无法访问原始翻译文件,因为字符串不在翻译范围内,因为它位于我的工作场所。我会在星期一看它,看看有什么不同。成功翻译的应用程序在Linux上运行,工作中的应用程序在Windows中运行。 – 2009-05-23 16:16:46

+0

我的翻译文件是正确的。我省略了列名称的“_id”部分,因为它们在视图的错误消息中未显示。我使用“模型”而不是“model_id”。 – 2009-05-25 06:57:07

1

荣誉伊恩,只是想补充一点,为了在验证失败的情况下突出标签,你需要像这样写:

<%= f.label "title", Model.human_attribute_name("title") %><br /> 

出于某种原因,写它就像:

<%= f.label "title" %><br /> 

不显示翻译。