Pet*_* P. 5 ruby-on-rails internationalization ruby-on-rails-3
考虑这个设置:
#app/models/user.rb
class User > ActiveRecord::Base
attr_accessible :login, :options
serialize :options, OpenStruct
end
#app/views/users/_form.html.erb
form_for @user do |f|
f.label :login
f.fields_for :options, @user.options do |options|
options.label :emailme
end
end
#config/locals/en.yml
en:
activerecord:
attributes:
user:
login: "User Name"
options:
emailme: "Email Preference"
Run Code Online (Sandbox Code Playgroud)
我试图解决的问题是能够本地化序列化属性“选项”的属性(:emailme)的标签标记。
我深入研究了 rails 源代码并发现问题是因为当我调用 options.label 时它期望有一个对象,但没有对象,因为传递的对象名称是“user[options” ] 并且这不是有效的实例变量名称。
请参阅rails github上form_helper.rb 的第 1124 行,它检索对象。有一条评论甚至提到当 object_name 是 item[subobject] 时回退到 nil。
因此,当它创建实际标签Line 1110 form_helper.rb 时,它默认为 method_name.humanize
有没有什么体面的方法来完成序列化属性的本地化?
我认为您想创建自己的密钥并显式调用 I18n.translate ?
请参阅http://guides.rubyonrails.org/i18n.html
# config/locals/en.yml
en:
users:
email_preference: "Email Preference"
# app/views/users/_form.html.erb
form_for @user do |f|
f.label :login
f.fields_for :options, @user.options do |options|
options.label :emailme, I18n.translate('users.email_preference')
end
end
Run Code Online (Sandbox Code Playgroud)
警告:未经测试的代码
也可以使用您现有的配置吗?I18n.translate('activerecord.attributes.user.options.emailme')
您还可以将本地文件中的键“范围”限制为操作和控制器
| 归档时间: |
|
| 查看次数: |
1938 次 |
| 最近记录: |