2

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

如何根据实际语言环境索引表翻译?现在,被索引的模型只使用默认语言环境。

4

1 回答 1

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

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

于 2012-05-13T11:23:55.680 回答