Можно ли сделать рельсы i18n локалями запасными друг к другу? - PullRequest
8 голосов
/ 30 октября 2011

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

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

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

Я пытался

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

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

Ответы [ 5 ]

5 голосов
/ 18 декабря 2012

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

Чтобы включить резервные копии, добавьте в файл 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/

1 голос
/ 10 ноября 2011

В итоге я обезьяну залатал 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
1 голос
/ 10 ноября 2011

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

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

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

0 голосов
/ 06 февраля 2015

В последней версии 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 файлов.

0 голосов
/ 19 ноября 2013

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

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

Получено из официальных документов: https://github.com/globalize/globalize#fallback-locales-to-each-other

...