2

我有一个使用globalize3 gem的网站(https://github.com/svenfuchs/globalize3),我目前正在添加轮胎宝石来进行网站搜索。i18n使用轮胎和Globalize3搜索

我该如何索引一个表翻译取决于实际的语言环境?现在获取索引的模型只能使用默认的语言环境。

回答

0

你不得不指数所有翻译:

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 

我没有测试上面的代码,它只是给出一个想法,所以请确保你理解它,它在你的项目中使用它之前工作,否则会发生不良事件。

+0

得到它,感谢您的方法,我想修改宝石考虑表_translations搜索,但这看起来也不错。谢谢! – delagroove 2012-08-15 17:58:32

+1

请注意,'I18n.locale'设置是全局的,因此请求最终可能会以与之前不同的语言环境结束。考虑重置每个lambda末尾的语言环境。 – Matchu 2013-01-18 04:31:13

相关问题