Как использовать рельсы i18n функции возврата

У меня эта проблема с i18n

activerecord:
  notices:
    messages:
      success: 
        create: "Something was created"
    models:
      user:
        success:
            create: "Thanks for registration"

I18n.t("activerecord.notices.models.user.success.create")
# => "Thanks for registration"


I18n.t("activerecord.notices.models.book.success.create") 
# => "translation missing: de, activerecord, notices, models, book, success, create"

Я не знаю, почему книжная модель не получает запасной массаж. Я поставил config.i18n.fallbacks = true, Я использую Rails 3

5 ответов

Решение

Если задана опция :default, ее значение будет возвращено, если перевод отсутствует:

I18n.t :missing, :default => 'Not here'
# => 'Not here'

Больше информации здесь

Я обычно устанавливаю в config/application.rb

    config.i18n.fallbacks =[:de, :fr, :en]

Таким образом, вы можете замедлить порядок запасного варианта.

Но имейте в виду, что в некоторых средах /*. Rb конфигурация перезаписывается.

В rails 3+ это устанавливается в файлах config/environment:

  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
  # the I18n.default_locale when a translation can not be found)
  config.i18n.fallbacks = true

Вы включили откат для своего бэкэнда? Предполагая, что это просто (на примере yml):

поместите это в инициализатор:

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

https://github.com/svenfuchs/i18n/wiki/Fallbacks

Я считаю, что лучший способ обработать пропущенную строку, это отобразить локаль по умолчанию, а не сообщение об ошибке.

Добавьте эту строку в application.rb для возврата к английскому языку.

config.i18n.fallbacks = [:en]

Если вы хотите указать специфичные для локали запасные варианты, вы можете использовать следующее:

config.i18n.fallbacks = {:de => [:de,:en], :en => [:en,:de]}

Также обратите внимание, что вы можете включать и отключать запасные варианты в зависимости от вашей среды. Поэтому, пока в процессе разработки может иметь смысл отображать ошибку, вы можете вместо этого включить запасные варианты в environments/production.rb со следующим:

config.i18n.fallbacks = true

Возникло недоразумение с функцией резервного копирования I18n.

Эта функция приводит к тому, что при отсутствии исключения перевода (в данном случае это происходит, когда I18n не может найти значение, связанное с"activerecord.notices.models.book.success.create"ключ в файлах локали вашего текущего языка) I18n будет искать в предопределенном списке резервных языков значение ключа, сгенерировавшего отсутствующее исключение перевода, если оно обнаружено, I18n вернет это значение, но если он не найден ни в одном из них другие файлы локали I18n вернет исключение об отсутствии перевода.

Итак, когда вы определили config.i18n.fallbacks = true, это не означает, что при возникновении исключения отсутствия перевода в данном случае:

I18n.t("activerecord.models.book.success.create")
# => "translation missing: de, activerecord, notices, models, book, success, create"

I18n будет искать аналогичный ключ в ваших файлах локали, чтобы вернуть его значение, может быть:

I18n.t("activerecord.models.user.success.create")
# => "Thanks for registration"

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


Хорошим примером использования будет:

# using :"en-US" as a default locale:
I18n.default_locale = :"en-US" 
I18n.fallbacks[:es] # => [:es, :"en-US", :en]

Файлы локалей:

es:
  activerecord:
    notices:
      messages:
        success: 
          create: "Algo fue creado"
      models:
        user:
          success:
            create: "Gracias por registrarte"
en-US:
  activerecord:
      ...
      models:
        books:
          success:
            create: "The model was created" 

Звоните на англоязычный сайт:

I18n.t("activerecord.models.books.success.create")
# => "The model was created"

Звоните на испанский сайт:

#with config.i18n.fallbacks = false
I18n.t("activerecord.models.books.success.create")
# => "translation missing: es, activerecord, models, book, success, create"

#with config.i18n.fallbacks = true
I18n.t("activerecord.models.books.success.create")
# => "The model was created"

Для получения дополнительной информации проверьте: https://github.com/ruby-i18n/i18n

Другие вопросы по тегам