Подтвердить что ты не робот

Вернитесь к языку по умолчанию, если перевод отсутствует

в интернационализированном приложении 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 замороженным драгоценным камням, но я предпочел бы избежать этого, если смогу.

4b9b3361

Ответ 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 должен быть обновлен с помощью вашего настраиваемого кода.