如何实现Rails模型中数组取值的国际化(翻译)?
Rails 模型数组取值国际化实现方案
你原有的写法是硬编码了显示文本,需先将常量调整为标识key,再配合Rails自带的i18n框架实现翻译,具体步骤如下:
步骤1:调整模型常量定义
将常量值改为纯小写的标识key,不再存储直接显示的文本:
# 对应模型文件,示例路径:app/models/user.rb GENDER_TYPES = %w[male female other]
步骤2:配置国际化翻译文件
在config/locales/zh-CN.yml中添加对应翻译规则,遵循Rails ActiveRecord属性翻译约定即可:
zh-CN: activerecord: attributes: user: # 替换为你实际使用的模型名小写 gender_options: # 自定义的翻译项前缀 male: 男 female: 女 other: 其他
步骤3:封装翻译取值方法
在对应模型中新增类方法与实例方法,分别适配表单选项渲染、单条记录取值的翻译需求:
# 还是在对应模型文件中编写 # 获取翻译后的选项列表,用于表单下拉框渲染 def self.human_gender_options GENDER_TYPES.map { |gender| [human_gender(gender), gender] } end # 翻译单个gender值 def self.human_gender(gender) I18n.t(gender, scope: "activerecord.attributes.user.gender_options", default: gender.capitalize) end # 实例方法,可直接被模型实例调用获取当前记录的性别翻译 def human_gender self.class.human_gender(self.gender) end
实际使用示例
- 表单渲染下拉选项(以Rails默认表单辅助方法为例):
<%= form.select :gender, User.human_gender_options %> - 视图中显示单条记录的性别翻译:
<%= @user.human_gender %>
内容的提问来源于stack exchange,提问作者Riaz Rahman Aranya
相关产品推荐
相关产品推荐

