Временное отключение резервного отката 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