首页 > 解决方案 > Rails FormBuilder 子类和翻译

问题描述

我正在 Rails 中构建一个 FormBuilder,它应该生成符合 materializecss 的复选框,如https://materializecss.com/checkboxes.html所示

基本上我正在寻找一种def check_box_with_label(name)产生类似的方法:

<label>
    <input type="checkbox" />
    <span>TRANSLATED LABEL FOR NAME AS DEFINED IN TRANSLATION</span>
</label>

我的问题是用翻译版本填充内部跨度。使用 label_tag 等不使用翻译。翻译位于单独的 YML 文件中,部分由 devise-i18n 提供。我在 FormBuilder 子类中找不到任何有关翻译问题的文档。如何做到这一点?

标签: ruby-on-railsformstranslationsubclassformbuilder

解决方案


经过严重的摆弄,我发现以下方法有效。但是我不确定它是否优雅。它似乎在我使用它的所有地方都有效。

解决方案是使用@object_nameFormBuilder 父类中的可用,以便在正确的位置查找翻译。

# app/helpers/materialize_form_builder.rb
class MaterializeFormBuilder < ActionView::Helpers::FormBuilder
  def check_box_with_label(name)
    return %Q(<label>#{check_box(name)}<span>#{tr(name)}</span></label>).html_safe
  end

  private

  def tr(name)
    I18n.t(name, scope: [:activerecord, :attributes, @object_name])
  end
end

推荐阅读