【问题标题】:rails-i18n not working for header errorrails-i18n 不适用于标题错误
【发布时间】:2013-12-24 05:27:25
【问题描述】:

我使用rails-i18n gem 来使用:hr 作为我的主要语言。

gem 有效,但对于 header message 无效。

4 errors prohibited this list from being saved: 部分)

这是我提交带有无效属性的表单时得到的结果:

4 errors prohibited this list from being saved:             #doesn't translate
    Field1 ne smije biti prazan                              #translates/presence
    Field2 ne smije biti prazan                              #translates/presence
    Field3 ne smije biti prazan                              #translates/presence
    Filed4 nije odgovarajuće duljine (treba biti 11 znakova) #translates/length

至于代码,我只在config/application.rb中添加了config.i18n.default_locale = :hr

在文档中说:

以下语言环境已完成:

bs, da, en, en-US, es-PA, hr, is, ja, nl, sr, ur, zh-HK

用其他语言环境测试,但仍然不能翻译 4 errors prohibited this list from being saved: 部分。

是我做错了什么还是.yml 文件中缺少翻译?

注意:我使用的是 rails 4.0.0

更新:

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

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

  <div class="form-container">

    <div class="inline half">
      <div class="field">
        <%= f.label :field1 %><br>
        <%= f.text_field :field1 %>
      </div>
      <div class="field">
        <%= f.label :field2 %><br>
        <%= f.text_field :field2 %>
      </div>
      <div class="field">
        <%= f.label :field3 %><br>
        <%= f.text_field :field3 %>
      </div>
      <div class="field">
        <%= f.label :field4 %><br>
        <%= f.text_field :field4 %>
      </div>
    </div>
    <div class="inline half">

      <div class="actions">
        <%= f.submit "Create", class: "continue-button" %>
      </div>
    </div>
  </div>
<% end %>

【问题讨论】:

  • 您的语言环境文件是最新的吗?尝试下载最新的 yml 文件并将其放入您的 config/locales 文件夹:github.com/svenfuchs/rails-i18n/tree/master/rails/locale
  • @Baldrick 已经尝试过了,我手动将.yml 放入了locales 文件夹,但结果是一样的。
  • 您可以张贴您的表格吗?
  • @joseramonc 更新了问题。

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


【解决方案1】:

由于某些字段可以清楚地翻译,我认为您必须查找“禁止错误...”消息。此消息应该在您的 activerecord.hr.yml 文件中,并且应该看起来像

hr:
  errors:
    messages:
      not_saved:
        one: '1 error prohibited this %{resource} from being saved:'
        other: '%{count} errors prohibited this %{resource} from being saved:'

(但用你的语言)

现在在您的视图中更改代码

= pluralize(@report.errors.count, "error") %> prohibited this list from being saved:

进入

t('errors.messages.not_saved', count: @report.errors.count, resource: Report.model_name.human)

为了将 Report.model_name.human 中提到的“报告”翻译成匈牙利语,您应该在 hr.yml 文件中添加一些内容,例如

activerecord:
  models:
    report: Translation of report in Hungarian
    reports: Translation of reports in Hungarian

这应该会给你完全的灵活性...

【讨论】:

  • 确实很奇怪。不知道可能是什么原因,因为这正是我在我的应用程序中使用的方式,而且它们工作正常......
  • 我还删除了这个 gem,只手动将您的代码放入 .yml 文件中,但这也不会翻译该消息。
  • @Vucko - 您可以尝试按照我的回答修改它吗?我添加了“错误”层
  • 您是否明确将其添加到 .yml 文件中,因为我刚刚发现 not_saved 错误不在 github.com/svenfuchs/rails-i18n/tree/master 上的 yml.hr 文件中/rails/语言环境
  • 是的,我将该部分添加到 hr.yml 文件中。我还删除了messages 中的所有其他翻译,只放了你的代码,但它仍然没有翻译。
【解决方案2】:

您可以尝试将&lt;%= pluralize(@report.errors.count, "error") %&gt; prohibited this list from being saved: 更改为&lt;%= t( :errors, :count =&gt; @report.errors.count, :model =&gt; t("model.Report")) %&gt;,它将从以下位置获取模型和错误

hr:
  model:
    Report: "Report"
  errors:
    one: "%{model} can't be saved... 1 error custom message."
    other: "%{model} can't be saved for %{count} custom errors"

【讨论】:

  • 这似乎有效。但是为什么 gems .yml 文件不起作用呢?
  • 让我提出一个问题,hr.yml 中必须进行哪些更改才能使其与pluralize (&lt;h2&gt;&lt;%= pluralize(@report.errors.count, "error") %&gt; prohibited this list from being saved:&lt;/h2&gt;) 一起使用?
猜你喜欢
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
相关资源
最近更新 更多