【问题标题】:Rails: How to do i18n on a dropdown menu in simple_formRails:如何在 simple_form 的下拉菜单中执行 i18n
【发布时间】:2016-09-19 00:38:02
【问题描述】:

我有一个simple_form,它有一个带有一系列选项的下拉菜单。我希望将选项保存为整数,但下拉菜单中的文本显示为基于语言环境的字符串。如下:

<option value="1">Option 1</option>
<option value="2">Option 2</option>

我目前在MyModel中有定义为类方法的选项,如下:

def self.options
 [['Option 1', 1], ['Option 2', 2]]
end

没有 i18n 我有以下工作:

f.input :dropdown, collection: MyModel::boolean, include_blank: false

添加语言环境,我试过了

f.input :dropdown, collection: t(MyModel::boolean, scope: 'simple_form'), include_blank: false

但这会引发错误:

翻译缺失:en.simple_form.Option 1.1

它看起来好像在翻译中同时查找数组键和值。

有什么建议可以让 i18n 为这个系列工作吗?

【问题讨论】:

  • 不确定我是否理解问题所在。为什么不在模型中添加一个回调 before_save 将这些值“1”“2”等转换为整数?如“1”.to_i
  • 这里的问题是如何让 i18n 在这种情况下工作。您的 call_back 是保存数据的有用建议。关于 i18n 的任何想法?
  • 嗯,也许保持集合不变,但只改变用户的视图会更好?我会发表我的想法。

标签: ruby-on-rails internationalization simple-form rails-i18n


【解决方案1】:

由于 simpleform 集合接受 procs,因此您可以在 label_method 上调用一个块,该块将根据需要格式化您的字符串,这可能是您正在寻找的:

f.input :dropdown, collection: MyModel::boolean, include_blank: false, :label_method => lambda { |item| t(item.last) }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    相关资源
    最近更新 更多