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

相關問題