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

Rails I18n为特定客户单独覆盖翻译的推荐实现方式?

Rails I18n 客户专属翻译覆盖方案

核心思路

不要全局修改I18n.load_path,而是为特定客户单独维护翻译文件,在翻译查找时优先匹配客户专属的翻译键,匹配不到再 fallback 到通用语言翻译,实现客户翻译的隔离。

推荐实现方法

1. 自定义 I18n Backend

继承默认的I18n::Backend::Simple,重写lookup方法,加入客户专属翻译的查找逻辑:

# app/lib/custom_i18n_backend.rb
class CustomI18nBackend < I18n::Backend::Simple
  def lookup(locale, key, scope = [], options = {})
    # 从线程上下文获取当前客户标识(可根据实际场景从session/请求头/域名获取)
    customer_id = Thread.current[:customer_id]

    if customer_id.present?
      # 拼接客户专属翻译键,优先查找
      customer_key = [customer_id, locale, key].flatten.join('.')
      customer_translation = super(locale, customer_key, scope, options)
      return customer_translation unless customer_translation.nil?
    end

    # 找不到客户专属翻译时,使用通用翻译
    super(locale, key, scope, options)
  end
end

然后在初始化文件替换默认Backend:

# config/initializers/i18n.rb
I18n.backend = CustomI18nBackend.new

2. 组织客户翻译文件结构

在config/locales下创建customers目录,按客户ID分目录存放专属翻译,只保留需要覆盖的键:

config/locales/
├── en.yml
├── zh.yml
└── customers/
    ├── client_vip/
    │   └── zh.yml
    └── client_x/
        └── en.yml

示例客户专属翻译文件config/locales/customers/client_vip/zh.yml:

client_vip:
  zh:
    checkout:
      submit_btn: "VIP客户专属提交"

3. 一次性加载所有翻译文件

在初始化时加载通用和客户翻译,避免运行时动态修改路径:

# config/initializers/i18n.rb
# 加载通用语言翻译
I18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}')]
# 加载所有客户专属翻译
I18n.load_path += Dir[Rails.root.join('config', 'locales', 'customers', '**', '*.{rb,yml}')]

4. 传递客户标识到上下文

通过around_action在请求周期内设置当前客户ID:

# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  around_action :set_customer_i18n_context

  private

  def set_customer_i18n_context
    # 示例从session获取客户ID,实际可根据TLD/请求参数等逻辑判断
    Thread.current[:customer_id] = session[:vip_customer_id]
    yield
  ensure
    # 请求结束后清理线程上下文,避免污染后续请求
    Thread.current[:customer_id] = nil
  end
end

方案优势

  • 客户翻译完全隔离,不会影响同语言其他用户的翻译效果
  • 无需运行时重载Backend,性能更稳定
  • 翻译文件结构清晰,便于维护和扩展

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:05:55