我在 Rails2 项目中使用 globalize2 来处理国际化。我有一个带有标题、说明等的页面模型。
我使用一个名为"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。
提前谢谢。
不是一个精心设计的解决方案,但最终我用这个技巧解决了我的问题:
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
使用简单的初始值设定项。仍在寻找更好的解决方案。