Временное отключение резервного отката i18n в Rails

I18n резервный загружается:

 I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)

Есть идеи сейчас временно отключить его? У меня есть формы, в которых я хочу редактировать версии на разных языках, и в качестве альтернативы я получаю поля с языком по умолчанию, если данный перевод еще не представлен.

4 ответа

Вы можете передать fallback: true возможность I18n.t, что помешает I18n искать другие локали ( см. реализацию здесь). Но это, вероятно, не часть публичного API...

Вы можете пройти :fallback => 'false' на ваше I18n.translate звонки, но это не является частью публичного API.

Другой способ, который вы можете попробовать, заключается в следующем:

I18n.available_locales.each do
  |al| I18n.fallbacks.merge!({al => [al]})
end

Это в основном сделает запасной вариант для каждой доступной локали, чтобы включить только себя. Таким образом, если перевод не найден сам по себе, то отступления не существует.

Однако затем вам нужно найти способ восстановления по умолчанию.

Вы можете сделать это, например, с помощью такого заявления:

I18n.available_locales.each do
  |al| I18n.fallbacks.merge!({al => [al, I18n.default_locale]})
end

Если кому-то все еще интересно, как это сделать, вы можете изменить I18n.fallbacks на лету:

def foo
  I18n.fallbacks[:at] = [:at]
  # do stuff with I18n#t
ensure
  I18n.fallbacks[:at] = [:at, :de] # or whatever is was before
end

Не уверен, насколько это безопасно.

Вы используете глобализацию?

Я использую запасной вариант I18n для моих системных строк и globalize3 для моих переводов атрибутов. Я хочу, чтобы системные строки были резервными, но не атрибуты. Я просто отключил откат для глобализации только с помощью небольшого обезьяньего патча:

конфиг / Инициализаторы /i18n.rb:

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

# monkey patch globalize3 to not use fallbacks
module Globalize
  def self.fallbacks?
    false
  end
end
Другие вопросы по тегам