i18n使用轮胎和Globalize3进行搜索

时间:2012-03-30 22:53:23

标签: ruby-on-rails-3.1 internationalization tire i18n-gem globalize3

我有一个使用globalize3 gem的网站(https://github.com/svenfuchs/globalize3),我现在正在添加Tire gem以进行网站搜索。

如何根据实际的区域设置索引表格翻译?现在,获取索引的模型仅使用默认语言环境。

1 个答案:

答案 0 :(得分: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

我没有测试上面的代码,只是为了给出一个想法,所以请确保你理解它,并且在你的项目中使用它之前它是有效的,否则会有很多事情发生。