Rails FormBuilder子类和翻译

我正在Rails中构建一个FormBuilder,它应该生成{materials}兼容的复选框,如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子类中找不到任何有关翻译问题的文档。如何实现?

xiaoyingabc 回答:Rails FormBuilder子类和翻译

经过深思熟虑之后,我发现以下方法可行。但是我不确定它是否优雅。它似乎可以在我正在使用的所有地方使用。

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

# 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
本文链接:https://www.f2er.com/3128797.html

大家都在问