0

Apartment gemを使用して、アプリケーションのリクエストごとにポストグラススキーマに切り替える。テナントが見つかると、データベースフィールドに基づいてロケールを設定します。postgreスキーマを使用してテナントごとにレールをカスタマイズする

I18n.locale = current_tenant.locale || I18n.default_locale 

これはスイッチング言語に最適です。今、ymlファイルの単一のキーを変更するように顧客からリクエストがあります。顧客に特定のキーをオーバーライドするデータベース駆動型の方法を提供したいと思いますが、個々のキーを無効にするためにI18nバックエンドを設定する方法がわかりません。私はactive_record gemを使用することができますが、これは翻訳をグローバルに格納します。したがって、1つのテナントに対してオーバーライドすると、すべてがオーバーライドされます。

言語の代わりに翻訳をプリロードしてテナントのサブドメインを検索する方法が必要だと思います。私が見つけたすべてのメソッドは、要求ごとにではなく、イニシャライザでバックエンドの読み込みを行うように見えるので、これを行う方法がわかりません。

答えて

1

「特定のキーを無効にする」とは、キーの値を意味しますか?

これを実現する方法の1つは、データベース内のオーバーライドをテーブルに格納することです。これをcustom_overridesとしましょう。 iduser_idkey_namelocaleexpansion_string、およびタイムスタンプなどの他:

この表では、属性を持っているでしょう。

変更:顧客がkey_nameとキーの値を変更したい

、「OKN」、あなたはcustom_overridesテーブルに新しいレコードを作成します。

読書キー:

キーを読み、代わりにあなたがどうなる

t(:okn) 

を行うための "OKN":

CustomOverride.where(
    :key_name => :okn, 
    :locale => config.locale, 
    :user_id => current_user.id 
).first.try(:expansion_string) 
    || 
    t(:okn) 

行い、常に、と言うことですkey_namecurrent_userで定義されているかどうかを判断するためのデータベースの読み込みがi18nにフォールバックされるだけでなく、

プロダクションデータベースに鍵が残ってしまった可能性があります。あなたはcustom_overrides表とlocale.ymlファイルを調整する必要があります(定期的にそのkey_nameen.ymlファイルに含まれていないcustom_overridesにエントリを削除するなどの実行移行を。)

+0

これは何https://github.com/svenfuchs/i18nです-active_recordは、私が避けたいものです。私はテナントごとにすべての翻訳をプリロードし、デフォルトの「シンプルな」i18nバックエンドをオーバーライドすることを検討しています。 – typeoneerror

関連する問題