I18n没有加载公寓宝石栏的翻译

时间:2016-05-12 09:57:45

标签: ruby-on-rails multi-tenant ruby-on-rails-5 apartment-gem

我正在使用apartment gem制作多租户应用。我已经完成所有设置,一切都按预期工作。我还使用Rails Internationalization(I18n)和活动记录后端来存储翻译。我当前的设置

翻译表

class CreateTranslations < ActiveRecord::Migration[5.0]
  def change
    create_table :translations do |t|
      t.string :locale
      t.string :key
      t.text :value
      t.text :interpolations
      t.boolean :is_proc, default: false

      t.timestamps
    end
  end
end

Apartment.rb配置

我已将翻译模型添加到排除模型列表中,因此它在所有租户中的全球性

Apartment.configure do |config|

  # Add any models that you do not want to be multi-tenanted, but remain in the global (public) namespace.
  # A typical example would be a Customer or Tenant model that stores each Tenant's information.
  #
  config.excluded_models = %w{ User Workspace Translation }
end

在我的翻译表中,我有英语(默认)和挪威语的翻译。在主域上,一切按预期的方式在英语和挪威语之间切换,但是一旦我加载租户,所有翻译都会丢失。在控制台演示:

> Apartment::Tenant.switch! # switch to main tenant
> I18n.locale = :en # use English translations
> I18n.t('home.members_label')
  => "Show Members"

> Apartment::Tenant.switch! "elabs" # switch to a different tenant
> I18n.t('home.members_label')
  => "translation missing: en.home.members_label"

我不确定在租赁环境中为什么翻译丢失。我想要在excluded_models列表中使用翻译模型应该做的伎俩,但似乎某些地方出了问题。有线索吗?感谢

1 个答案:

答案 0 :(得分:0)

Translation模型实际上是在I18n::Backend::ActiveRecord::Translation中定义的,因此您可能需要添加一个扩展模型文件夹中的模型或尝试执行以下操作看看是否有效:

config.excluded_models = %w{ User Workspace I18n::Backend::ActiveRecord::Translation }

或者

Translation = I18n::Backend::ActiveRecord::Translation
config.excluded_models = %w{ User Workspace Translation }