rails: 如何基于子域覆盖locale?

我已经使用标准的rails机制对我的应用程序进行了国际化和本地化,所有的东西都存储在en、fr、de.yml文件中。

我的应用程序是基于子域的多租户。

我想允许我的用户在应用程序中覆盖某些翻译(例如,将 “Employee “改为 “Associate”,因为它符合他们自己的术语)。

我试着在每个请求的基础上改变我的yml文件的加载路径,但是没有用。

有什么办法可以让我在每次请求时,先在我的用户特定的yaml文件中查找,如果翻译没有被覆盖,再回到默认的yaml文件?

解决方案:

假设你把子域存储在控制器过滤器的实例变量中,你可以覆盖翻译助手,先用子域特定的作用域进行查找,然后回退到指定或默认的作用域。就像这样。

module ApplicationHelper

  def t(key, original_options = {})
    options = original_options.dup
    site_translation_scope = ['subdomain_overrides', @subdomain.name]
    scope =
      case options[:scope]
      when nil
        site_translation_scope
      when Array
        options[:scope] = site_translation_scope + options[:scope]
      when String
        [site_translation_scope, options[:scope]].join(".")
      end
    translate(key, options.merge(:scope => scope, :raise => true))
  rescue I18n::MissingTranslationData
    translate(key, original_options)
  end

end

然后你可以添加你的子域特定的覆盖,比如这样。

en:
  customer: Customer
  subdomain_overrides:
    subdomain_1:
      customer: Buyer

给TA打赏
共{{data.count}}人
人已打赏
解决方案

如何在改变sharedpreferences数据后自动改变android menuItem数据?

2022-4-22 13:08:57

解决方案

考虑到动态文本的ABAP regex

2022-4-22 14:08:46

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索