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