You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:24:04