2

ユーザーがロケール/YAML ファイルのカスタム翻訳を上書きできるようにしたいと考えています。i18n-active_recordデータベースに保存された翻訳を使用するのに最適な Sven Fuchsの gem を使用しています。

問題: ユーザーは自分の翻訳のみを取得する必要があり、他のユーザーの翻訳は取得できません。

そこで、テーブルに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)

アイデアをありがとう!

4

1 に答える 1

2

これを初期化ファイルに追加してみてください

ie: i18n の activerecord バックエンドを初期化する場所に追加されます

config/initializers/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 gem のデフォルトのロケール メソッドをオーバーライドする必要があります。

于 2014-10-16T08:52:13.993 に答える