Globalize2, отключить откат для определенного поля
Я использую globalize2 в проекте Rails2 для управления интернационализацией. У меня есть модель страницы с заголовком, описанием и так далее.
Я использую поле с именем "url_redirect", которое используется для перенаправления страницы на другой URL, в зависимости от языка, который я сейчас использую. Например:
Page.find(1)
title description locale url_redirect
test .... it
my_test .... en www.google.it
На стороне контроллера я проверяю наличие url_redirect и делаю простой redirect_to, если он не указан. К сожалению, я использую запасные варианты globalize2... поэтому, хотя я нахожусь на итальянском сайте, поле url_redirect возвращает www.google.it.. Это запасные варианты:
require "i18n/backend/fallbacks"
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
module Globalize
class << self
def fallbacks(locale = self.locale)
case locale
when :it then [:it, :en, :es, :fr]
when :en then [:en, :it, :es, :fr]
when :es then [:es, :en, :it, :fr]
when :fr then [:fr, :it, :en, :es]
end
end
end
end
Как я могу избежать отступления только для этой конкретной области? Я хотел бы что-то вроде этого Как избежать Globalize3 от возврата резервных переводов для атрибута в конкретном контексте? для глобализации2.
Заранее спасибо.
1 ответ
Не очень удачное решение, но наконец я решил свою проблему с помощью этого трюка:
module Globalize
module ActiveRecord
class Adapter
protected
def fetch_attribute(locale, attr_name)
translations = fetch_translations(locale)
value, requested_locale = nil, locale
Globalize.fallbacks(locale).each do |fallback|
if attr_name == :url_redirect
translation = translations.detect { |t| t.locale == locale }
else
translation = translations.detect { |t| t.locale == fallback }
end
value = translation && translation.send(attr_name)
locale = fallback && break if value
end
set_metadata(value, :locale => locale, :requested_locale => requested_locale)
value
end
end
end
end
используя простой инициализатор. Все еще ищу лучшее решение.