0

我在 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。

提前致谢。

4

1 回答 1

0

不是一个精心设计的解决方案,但最后我用这个技巧解决了我的问题:

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

使用简单的初始化程序。仍在寻找更好的解决方案。

于 2014-11-13T10:49:10.897 回答