Можно ли сделать рельсы 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