加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – rails:我如何覆盖基于子域的覆盖语言环境?

发布时间:2020-12-17 03:04:52 所属栏目:百科 来源:网络整理
导读:我使用标准的rails机制对我的应用程序进行了国际化和本地化. 一切都存储在en,fr,de.yml文件中. 我的应用程序是多租户,基于子域. 我想允许我的用户覆盖应用程序中的某些翻译(例如,将“Employee”更改为“Associate”,因为它与他们自己的术语相匹配). 我试图在
我使用标准的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读