2
我有一个使用globalize3 gem的网站(https://github.com/svenfuchs/globalize3),我目前正在添加轮胎宝石来进行网站搜索。i18n使用轮胎和Globalize3搜索
我该如何索引一个表翻译取决于实际的语言环境?现在获取索引的模型只能使用默认的语言环境。
我有一个使用globalize3 gem的网站(https://github.com/svenfuchs/globalize3),我目前正在添加轮胎宝石来进行网站搜索。i18n使用轮胎和Globalize3搜索
我该如何索引一个表翻译取决于实际的语言环境?现在获取索引的模型只能使用默认的语言环境。
你不得不指数所有翻译:
class Centre < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
mapping do
indexes :title_en, :as => lambda { |post| I18n.locale = :en; post.title }
indexes :title_es, :as => lambda { |post| I18n.locale = :es; post.title }
indexes :title_jp, :as => lambda { |post| I18n.locale = :jp; post.title }
end
end
如果你支持很多的语言进行了大量的属性这可能变得非常麻烦,你可能不得不求助于元编程:
class Centre < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
mapping do
%w[en it jp].each do |locale|
%w[title text].each do |attribute|
class_eval<<-RUBY
indexes :#{attribute}_#{locale}, :as => lambda { |post| I18n.locale = :#{locale}; post.#{attribute} }
RUBY
end
end
end
end
我没有测试上面的代码,它只是给出一个想法,所以请确保你理解它,它在你的项目中使用它之前工作,否则会发生不良事件。
得到它,感谢您的方法,我想修改宝石考虑表_translations搜索,但这看起来也不错。谢谢! – delagroove 2012-08-15 17:58:32
请注意,'I18n.locale'设置是全局的,因此请求最终可能会以与之前不同的语言环境结束。考虑重置每个lambda末尾的语言环境。 – Matchu 2013-01-18 04:31:13