Можно ли сделать рельсы i18n локалями запасными друг к другу?

Я использую Rails 3 с Globalize3 0.2.0.beta4

В идеале мне нужно:fr для перехода к:en и наоборот.

Есть случаи, когда доступен только французский перевод, и мне нужно показать его, даже если локаль:en.

Я старался

config.i18n.fallbacks = { :fr => :en, :en => :fr }

но неудивительно, что это приводит к слишком глубокой ошибке на уровне стека.

5 ответов

Я меняю свой ответ.

Чтобы включить запасные варианты, добавьте следующее в файл environment.rb:

 #support for locale fallbacks
 require "i18n/backend/fallbacks"
 I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)

Затем вы можете включить циклические откаты, как вы пытались, например:

   config.i18n.fallbacks = {'en' => 'fr', 'fr' => 'en'}

В этом случае, если чего-то не хватает в локали en, она проверит локаль fr, а затем наоборот. Я не получаю никаких ошибок при запуске этого.

Источник: http://batsov.com/articles/2012/09/12/setting-up-fallback-locale-s-in-rails-3/

Если вы передадите массив локалей, они будут установлены как запасные варианты по умолчанию для всех локалей.

config.i18n.fallbacks = [:en, :fr]

К сожалению, я не нашел способа настроить только две локали, чтобы они переключались друг на друга.

В конце концов я обезьяну залатал Globalize3. Не очень хорошо, так как мне приходится обновлять патч всякий раз, когда сайту нужен новый язык, но эй, он сработал.

module Globalize

  class << self

    def fallbacks(locale = self.locale)
      case locale
      when :en then [:en, :fr]
      when :fr then [:fr, :en]
      end
    end

  end
end

В последней версии i18n gem (0.7.0) я счел необходимым определить запасные локали, подобные этой (в config/application.rb):

# Custom I18n fallbacks
config.after_initialize do
  I18n.fallbacks = I18n::Locale::Fallbacks.new(at: :"de-DE", ch: :"de-DE", gb: :"en-US")
end

Вам также нужно установить config.i18n.fallbacks = true в целом config/environments/*.rb файлы.

Это, кажется, изменилось на это:

Globalize.fallbacks = {:en => [:en, :fr], :fr => [:fr, :en]}

Получил из официальных документов: https://github.com/globalize/globalize

Другие вопросы по тегам