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