Rails 3.2.21国际化 - 翻译错误问题

时间:2016-07-26 18:23:28

标签: ruby-on-rails ruby localization yaml

我试图翻译以下错误:

error

它说:

  

1错误禁止保存此项目:

这是我从Rails Internationalization (I18n) API得到的en yml文件中的内容:

en:
  activerecord:
    errors:
      [?]:
        [?]:
          one:   "1 error prohibited this %{model} from being saved"
          other: "%{count} errors prohibited this %{model} from being saved"
        [?]:    "There were problems with the following fields:"
      messages:
        record_invalid: "Validation failed: %{errors}"
        restrict_dependent_destroy:
          has_one: "Cannot delete record because a dependent %{record} exists"
          has_many: "Cannot delete record because dependent %{record} exist"

这是我在表单中显示错误的方式示例

<% if @project.errors.any? %>
  <div id="error_explanation">
    <h2><%= pluralize(@project.errors.count, "error") %> prohibited this project from being saved:</h2>

    <ul>
      <% @project.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
    </ul>
  </div>
<% end %>

我根本没有用轨道触及本地化,所以如果我做的一切都完全错误,我很抱歉,但我需要在[?]中添加什么?我有我的yml文件,或者我需要更改什么,以便当我改为西班牙文时

  

1错误禁止保存此项目:

更改为

  

Un error prohibido este proyecto de ser salvado


更新

这是我最终使用的:

在我的.yml文件中

en:
  activerecord:
    form_errors:
      one: One error prohibited this %{model} from being saved
      other: "%{count} errors prohibited this %{model} from being saved"

以我的形式:

    <% if @project.errors.any? %>
        <div id="error_explanation">
      <h2><%= t('activerecord.form_errors', :count => @project.errors.count,
                       :model => t('models.project').downcase) %></h2>

          <ul>
            <% @project.errors.full_messages.each do |msg| %>
              <li><%= msg %></li>
            <% end %>
          </ul>
        </div>
      <% end %>

2 个答案:

答案 0 :(得分:1)

此消息

<h2><%= pluralize(@project.errors.count, "error") %> prohibited this project from being saved:</h2>

在这里的脚手架中是硬编码的

error_messages_for

您正在查看的指南部分是引用旧版本的 使用{{1}}方法的rails。

  

4.5.3 Active Record的翻译error_messages_for Helper

     

如果您正在使用Active Record error_messages_for帮助程序,那么您将会这样做   想为它添加翻译。

     

要使用此帮助程序,您需要通过将此行添加到Gemfile中来安装DynamicForm gem:gem'vynamic_form'。

我不推荐这个选项,因为没有维护这个宝石。

答案 1 :(得分:1)

您没有使用可以利用该YAML结构的模板Helper(#error_messages_for)。在Rails 3之前提取出那个帮助器,你必须安装dynamic_form gem才能使用它。

你基本上和第二个代码片段的助手一样。要使用它,您可以用<%= error_messages_for @project %>替换整个事物,但我不知道您是否最终获得了您想要的HTML标记。要直接回答您的问题,您应该在您提供的链接上显示相同的YML结构。当然,这必须是你的西班牙语。

我认为更改第二个代码段来翻译错误标题消息会更容易。

如果您不关心将应用程序翻译成其他语言,或者使用国际化帮助程序(2),在西班牙语I18n文件中添加和输入错误,则可以在地方(1)执行此操作。

1

<%= pluralize(@project.errors.count, "error") %> prohibido este proyecto de ser salvado:</h2>

2

<%= pluralize(@project.errors.count, "error") %> <%= t(:error_header_message) %>:</h2>

对于最后一种方法,请将翻译添加到yml文件中。

es:
  error_header_message: prohibido este proyecto de ser salvado