【问题标题】:How do I use custom I18n label for submit button with Devise如何将自定义 I18n 标签用于带有设计的提交按钮
【发布时间】:2026-02-11 04:15:02
【问题描述】:

在我看来,我使用的是标准 Rails 表单:

<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
  <div><%= f.label :email_label %><br />
    <%= f.email_field :email, :autofocus => true, :class => "form-control" %></div>

    <div><%= f.label :password_label %><br />
    <%= f.password_field :password, :class => "form-control" %></div>

    <% if devise_mapping.rememberable? -%>
      <div class="checkbox"><%= f.check_box :remember_me %> <%= f.label :remember_me %></div>
    <% end -%>

    <div>
      <!--<%= f.submit  :class => "btn btn-default" %>-->
      <%= f.submit  I18n.t("helpers.label.user.sign_in"),  :class => "btn btn-default" %>
    </div>
  <% end %>

两个问题:1)http://guides.rubyonrails.org/i18n.html 的 API 指南文档似乎已经过时了。本地化视图部分的开头是:

Rails 2.3 引入了另一个方便的本地化功能: 本地化视图(模板)。

所以我不确定要信任他们多少,另外两个标准位置 http://ruby-i18n.org/wikihttps://github.com/svenfuchs/rails-i18n 并没有真正解决我的问题:

这有点复杂,因为我试图在设计视图中执行此操作。这意味着 form_for 指的是 User 模型,即使控制器是 Sessions 控制器。因此,如果我在此处使用该样式,则 User.create 将起作用: http://apidock.com/rails/ActionView/Helpers/FormBuilder/submit

fr:
  helpers:
    user:
      submit:
        create: "Inscription %{model}"
        update: "Confirmer les modifications à %{model}"

在提交行中不包含任何文本

<%= f.submit %>

但这会影响任何地方的创建用户,我真的只想自定义新会话按钮,相当于登录。 Se me 连接器

所以我正在破解它

fr-CA:
  helpers:
    select:
      prompt: Veuillez sélectionner
    submit:
      create: Créer un %{model}
      submit: Enregistrer ce %{model}
      update: Modifier ce %{model}
      sign_in: Se me connecter
      sign_up: Inscription
    label:
      user:
        email_label: Courriel
        password_label: Mot de passe
        remember_me: Mémoriser mes infos
        submit: Se me connecter
        sign_in: Se me connecter
        sign_up: Inscription

并使用

<%= f.submit  I18n.t("helpers.label.user.sign_in"),  :class => "btn btn-default" %>

但这感觉是错误的,而且也不健壮,尽管它确实使 Cucumber 测试更容易。

这里有什么建议吗?谁能评论一下 Rails 的 I18n 社区是否仍然活跃?还是人们使用不同的解决方案?我正在考虑尝试使用 SimpleForm gem 及其 I18n 功能。

【问题讨论】:

  • 也许你可以试试&lt;%= l f.submit helpers.label.user.sign_in, :class =&gt; "btn btn-default" %&gt;

标签: ruby-on-rails ruby-on-rails-3 devise internationalization rails-i18n


【解决方案1】:

我知道这个问题很老了,但是键的顺序在这里很重要:

fr:
  helpers:
    submit:
      user:
        create: "Inscription %{model}"
        update: "Confirmer les modifications à %{model}"

请注意,submit 在前,然后您应该列出您的资源 — userpostwhatever

有关详细信息,请参阅related answer

【讨论】:

  • OP 确实在他们的示例中切换了模型/提交键,但这并不能真正回答问题。此解决方案仍将更改与User 关联的每个设计表单上的提交按钮文本(包括注册、登录、重置密码等)。 OP 询问如何为每个控制器更改它。