开发者

Rails I18n Backend with MongoDB/Mongoid

Does anyone have an idea on how to implement this (http://railscasts.com/episodes/256开发者_如何学JAVA-i18n-backends) with MongoDB/Mongoid? My question is primarily about the initializer.rb file.

The docs of Mongo-I18n on github suggests the following using its 'MongoI18n::Store.new' method:

  collection = Mongo::Connection.new['my_app_related_db'].collection('i18n')
  I18n.backend = I18n::Backend::KeyValue.new(MongoI18n::Store.new(collection)

But how to do this if you don't want to use their plugin? Is there something like a Mongo::Store method?


I just did this exact same thing, except that I had trouble installing Mongo-I18n, because it has a dependency on a very old version of MongoDB.

To get around this, I copied the code from here into lib/mongo_i18n.rb.

You were on the right track with your initializer though, if you're using Mongoid - the best way forward is to do this:

require 'mongo_i18n'
collection = Mongoid.database.collection('i18n')
I18n.backend = I18n::Backend::KeyValue.new(MongoI18n::Store.new(collection))

Which tells the I18n backend to use a new collection (called i18n), but in the same database as the rest of your application.

Make sure you delete the Mongo_I18n gem out of your gemfile and run bundle before starting your server again.

You can access your store directly using:

I18n.backend.store

But to make it a little cleaner, I added this method to my I18n library:

# mongo_i18n.rb
def self.store
  collection = Mongoid.database.collection('i18n')
  MongoI18n::Store.new
end

So that I can access the store directly with:

MongoI18n.store


I did exactly like theTRON said, except that instead of require 'mongo_i18n' I added whole class MongoI18n::Store definition from Mongo_i18n gem directly to mongo initializer. It not such a big deal, because whole MongoI18n::Store is 41 lines long. Look here, why make dependancy from 41 lines gem ?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜