使用MongoDB / Mongoid的Rails I18n后端

时间:2011-03-15 17:21:09

标签: ruby-on-rails ruby-on-rails-3 internationalization mongodb mongoid

有没有人知道如何用MongoDB / Mongoid实现这个(http://railscasts.com/episodes/256-i18n-backends)?我的问题主要是关于initializer.rb文件。

github上Mongo-I18n的文档使用'MongoI18n :: Store.new'方法建议如下:

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

但是如果你不想使用他们的插件怎么做呢?是否有类似Mongo :: Store方法的东西?

2 个答案:

答案 0 :(得分:1)

我刚刚做了同样的事情,除了我在安装Mongo-I18n时遇到了麻烦,因为它依赖于一个非常旧版本的MongoDB。

为了解决这个问题,我将代码从here复制到lib/mongo_i18n.rb

如果你使用的是Mongoid,你的初始化程序也在正确的轨道上 - 最好的方法是做到这一点:

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

它告诉I18n后端使用一个新的集合(称为i18n),但是在与应用程序其余部分相同的数据库中。

确保从gemfile中删除Mongo_I18n gem并在再次启动服务器之前运行bundle

您可以使用以下方式直接访问您的商店:

I18n.backend.store

但为了让它更清洁,我将这个方法添加到我的I18n库中:

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

这样我就可以直接访问商店:

MongoI18n.store

答案 1 :(得分:0)

我确实非常喜欢TRON说,除了不需要'mongo_i18n',我将MongoI18n :: Store定义从Mongo_i18n gem直接添加到mongo初始化程序中。这不是什么大问题,因为整个MongoI18n :: Store长41行。 Look here,为什么要从41行宝石中获得依赖?