Вернитесь к языку по умолчанию, если перевод отсутствует
в интернационализированном приложении Rails (2.3.5), я бы хотел показать перевод из локали по умолчанию вместо "перевод отсутствует" - там есть билет для него, но, похоже, он все еще ожидает:
https://rails.lighthouseapp.com/projects/8994/tickets/2637-patch-i18n-look-up-a-translation-with-the-default-locale-when-its-missed-with-another-specific-locale
Например (взято из билета), с двумя файлами перевода, en.yml и es.yml:
en:
hello: 'hello'
hello_world: 'hello world'
es:
hello_world: 'hola mundo'
Когда я выполняю этот код:
I18n.t :hello, :locale => :es
Rails возвращает "привет" вместо диапазона с "отсутствием перевода".
Поскольку билет еще не выполнен, как я могу реализовать эту функцию? Я знаю, что могу пройти и изменить все свои вызовы I18n.t, чтобы иметь параметр: default, но я бы предпочел не проходить через все взгляды, если я могу избежать этого! Поскольку это патч, я полагаю, я мог бы применить его к Rails замороженным драгоценным камням, но я предпочел бы избежать этого, если смогу.
Ответы
Ответ 1
Если вы используете Rails 2, при условии, что используете последний камень I18n, добавьте его в инициализатор:
I18n.backend.class.send(:include, I18n::Backend::Fallbacks)
Затем вы можете добавить свои резервные копии следующим образом:
I18n.fallbacks.map('es' => 'en')
Ответ 2
В настоящее время нет необходимости использовать отдельный драгоценный камень i18n, при установке с равными Rails 3.0.6 и выше (5.0), значение fallbacks
может быть одним из следующих > :
# application.rb
# rails will fallback to config.i18n.default_locale translation
config.i18n.fallbacks = true
# rails will fallback to en, no matter what is set as config.i18n.default_locale
config.i18n.fallbacks = [:en]
# fallbacks value can also be a hash - a map of fallbacks if you will
# missing translations of es and fr languages will fallback to english
# missing translations in german will fallback to french ('de' => 'fr')
config.i18n.fallbacks = {'es' => 'en', 'fr' => 'en', 'de' => 'fr'}
Ответ 3
Я думаю, что проще всего добавить это в свои файлы конфигурации (например, application.rb):
config.i18n.fallbacks = true
Это очень полезно для региональных локалей, таких как en-US, en-CA и т.д., потому что они могут автоматически вернуться к языку en.
Как указывает Джимми, вы можете даже изменить резервный механизм с помощью:
I18n.fallbacks.map('es' => 'en')
Ответ 4
В Rails 5.2
WTK-ответ не работает. Вместо
# config/initializers/locale.rb
Rails.application.config
config.i18n.fallbacks = { 'es' => 'en', 'fr' => 'en', 'de' => 'fr' }
end
Ответ 5
Если вы не хотите применять патч к вашему Rails-жемчугу, вы можете создать свой собственный код, содержащий патчи, и смешать их с камнем.
При просмотре патча вам необходимо обновить код в двух местах (третье место - тестовая часть).
Первая часть (i18n.rb) является модулем, поэтому, написав файл, содержащий что-то вроде этого
module I18n
@@use_default_locale_on_missing_translation = false
...etc...
end
вы можете добавить измененный код. Второй файл (simple.rb) может быть обновлен аналогичным образом, за исключением того, что вы обновляете класс.
После создания 2 файлов, содержащих изменения, вам необходимо включить эти два файла в application.rb или в аналогичное место. И код Rails gem должен быть обновлен с помощью вашего настраиваемого кода.