I18n::Backend::ActiveRecord с областью действия

Я хочу, чтобы пользователи могли перезаписывать пользовательские переводы в locales/YAML-файлы. Я использую i18n-active_record gem от Sven Fuchs, который прекрасно работает с переводами, хранящимися в базе данных.

Проблема: пользователи должны получать только свои переводы, а не переводы других.

Поэтому я добавил user_id столбец к translations Таблица. Теперь я понятия не имею, как настроить область для I18n::Backend::ActiveRecord,

мой locale.rb (в конфиге / инициализаторах):

require 'i18n/backend/active_record'
I18n.backend = I18n::Backend::ActiveRecord.new

I18n::Backend::ActiveRecord.send(:include, I18n::Backend::Memoize)
I18n::Backend::ActiveRecord.send(:include, I18n::Backend::Flatten)
I18n::Backend::Simple.send(:include, I18n::Backend::Memoize)
I18n::Backend::Simple.send(:include, I18n::Backend::Pluralization)

I18n.backend = I18n::Backend::Chain.new(I18n.backend, I18n::Backend::Simple.new)

Спасибо за любые идеи!

1 ответ

Попробуйте добавить это в файл инициализатора

то есть: добавлено туда, где вы инициализируете бэкэнд activerecord для i18n

конфиг / Инициализаторы /i18n_backend.rb

require 'i18n/backend/active_record'

if ActiveRecord::Base.connection.table_exists? 'translations'
  require 'i18n/backend/active_record'
  I18n.backend = I18n::Backend::Chain.
  new(I18n::Backend::ActiveRecord.new, I18n.backend)
end


# OVERRIDING DEFAULT QUERY
module I18n
  module Backend
    class ActiveRecord 
      class Translation < ::ActiveRecord::Base
        class << self
          def locale(locale)
            where(:locale => locale.to_s).where(:field => condition)
          end
        end
      end
    end
  end
end

это должно переопределить метод локали по умолчанию в геме i18n-active_record

Другие вопросы по тегам