[英]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.