1
我用下面的方法對我的應用程序國際化模式:搜索基於區域的太陽黑子Solr的
class GenreLocalization < ActiveRecord::Base
attr_accessible :genre_id, :name, :locale
end
class Genre < ActiveRecord::Base
has_many :genre_localizations, :dependent => :destroy
def name(locale = nil)
locale ||= I18n.locale
genre_localizations.find_by_locale(locale).name
end
end
如果我把genre.name
它會返回類型名稱當前區域。
現在我想根據語言環境使用sunspot solr
將此模型編入索引。我的理念是爲每行存儲id
,localized_name
和locale
的組合。通過這種方式,我能夠搜索流派是這樣的:
search = Genre.search do
keywords params[:search]
with(:locale, 'en')
end
我的最好的辦法,到目前爲止是:
searchable do
Language.supported_locales.each do |locale|
integer :id, :stored => true
text :name, :stored => true, :using => :name(locale)
string :locale
end
end
但線路text :name, :stored => true, :using => :name(locale)
是(顯然)無效,我被困在努力找到一種方法來索引本地化名稱。
有沒有辦法做到這一點?這甚至是獲得本地化搜索的正確方法嗎?
I18n.backend.flattened_translations返回NoMethodError:未定義的方法'flattened_translations'。但無論如何,這不是一組固定的流派。它們由管理員管理,管理員將設置本地化名稱。 – dcarneiro 2013-02-15 09:58:33
我完全改變了我的答案,讓我知道 – 2013-02-15 10:53:08
我使用genre_localizations表作爲i18n類型表的後端。體裁的has_many GenreLocalizations(每個區域),然後我只需要做genre.genre_localizations.find_by_locale(區域)。名稱其中locale字符串由I18n.locale – dcarneiro 2013-02-15 10:54:15