【问题标题】:How can I pass an translation interpolation variable to a failed form validation message?如何将翻译插值变量传递给失败的表单验证消息?
【发布时间】:2015-02-07 13:56:37
【问题描述】:

所以,我基本上是想在所需时间后单击确认电子邮件链接时出现的错误消息中显示 Devise 的 confirm_within 时间。

我正在使用 YAML 翻译文件。

插值变量称为devise_confirm_within

我的 YAML 是这样的:

en:
  activerecord:
    errors:
      models:
        user:
          attributes:
            email:
              confirmation_period_expired: "some text %{devise_confirm_within}"

通常,我会找到合适的视图,然后将插值变量作为参数传递给translatet 方法。像这样:

<p><%= t("devise.mailer.confirmation_instructions.please_click_the_below_link_to_confirm_your_new_email", :devise_confirm_within => distance_of_time_in_words(0, User.confirm_within, :locale => I18n.locale)) %></p>

但是,没有具有confirmation_period_expired 翻译键的视图,所以我不能以同样的方式进行操作。

我有一个观点:

<div class="form-inputs">
  <%= f.input :email, :required => true %>
</div>

还有一个用户模型:

validates :email, uniqueness: true

我想将所有翻译文本保留在 YAML 文件中,因此无法在 validates 字段中添加 :message。

那么,我怎样才能将 devise_confirm_within 时间放入该 Confirmation_period_expired 错误消息中?

PS:我将 simple_form gem 用于表单,并使用 dotiw gem 来覆盖默认的 distance_of_time_in_words 方法(这不会影响我遇到的这个问题)。

【问题讨论】:

    标签: ruby-on-rails devise simple-form


    【解决方案1】:

    当我将它添加到 devise.en.yml 并且类似于其他 devise..yml 文件时,问题被规避了:

    en:
      errors:
        messages:
          confirmation_period_expired: "some text %{period}"
    

    然而,我无法将翻译插值变量传递给失败的表单验证(即向设计消息添加变量),对此我仍然感到好奇。

    【讨论】:

      猜你喜欢
      • 2014-04-14
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      相关资源
      最近更新 更多