簡體   English   中英

rails:如何覆蓋基於子域的語言環境?

[英]rails: how can I override a locale based on subdomain?

我使用標准的 rails 機制對我的應用程序進行了國際化和本地化。 一切都存儲在 en、fr、de.yml 文件中。

我的應用程序是多租戶的,基於子域。

我想允許我的用戶覆蓋應用程序中的某些翻譯(例如,將“員工”更改為“同事”,因為它匹配他們自己的術語)。

我試圖根據每個請求更改 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

如果您想允許租戶使用特定語言但回退到默認語言,我編寫了一個可以完成工作的微型

https://github.com/ElMassimo/i18n_multitenant

它負責配置I18n以回I18n基本語言環境,允許您使用特定於租戶的翻譯(如果可用)。 它旨在與靜態.yml文件的默認后端.yml ,但它也應該與其他I18n后端一起使用。

我最近創建了I18n_global_scope gem,它完全符合您的描述,請查看源代碼https://github.com/mobilityhouse/i18n_global_scope並讓我知道您的反饋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM