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

Rails中如何将Mobility翻译从基础数据导入用户自定义数据?

解决Mobility翻译内容从基础模型导入自定义模型的问题

问题根源

直接调用categori_locale_backend.write仅在内存中操作了Mobility的翻译存储层,并未触发ActiveRecord的变更追踪与持久化逻辑,因此翻译内容无法写入数据库。Mobility的标准用法是通过模型的翻译属性赋值接口操作,而非直接调用底层backend方法。

正确实现步骤

首先确保UserCategori已正确配置Mobility翻译属性(需匹配你的Mobility版本及backend类型):

class UserCategori < ApplicationRecord
  # 基础配置示例(根据实际backend调整)
  translates :name_locale, type: :string
  # 若使用key-value类型backend,写法如下:
  # mobility :name_locale, type: :string, backend: :key_value
end

然后修改导入逻辑,通过模型属性赋值并触发保存:

categori = Categori.find(params[:categori_id])  
@user_categori = UserCategori.create(sequence: categori.sequence, name: categori.name)

I18n.available_locales.each do |locale|
  # 直接为对应语言环境的name_locale赋值
  @user_categori.name_locale(locale => categori.name_locale(locale: locale))
end

# 一次性保存所有翻译变更
@user_categori.save!

更高效的写法(创建时完成所有赋值)

若无需先创建主记录再补翻译,可在初始化阶段完成所有赋值:

categori = Categori.find(params[:categori_id])  
@user_categori = UserCategori.new(sequence: categori.sequence, name: categori.name)

I18n.available_locales.each do |locale|
  @user_categori.name_locale(locale => categori.name_locale(locale: locale))
end

@user_categori.save!

验证注意事项

  • 确认I18n.available_locales包含所有需要同步的语言环境
  • 检查categori.name_locale(locale: locale)能正常返回对应语言的翻译内容
  • 确保UserCategori的数据库表(或关联翻译表)存在对应语言环境的存储结构

内容的提问来源于stack exchange,提问作者Jerome

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:00:09