Rails 5 I18n default_locale и резервная локаль - PullRequest
0 голосов
/ 20 ноября 2018

Как мне установить запасную локаль в Rails 5.2?

Прямо сейчас она печатает '' (пусто) для имен атрибутов, если не найдена в локали.Я бы хотел, чтобы он отступил, когда это произойдет.

Рельсы 5 специфичны?

# config/application.rb 
config.load_defaults 5.0
config.i18n.default_locale = :nb

запустить спецификации и получить:

#<ActiveRecord::RecordInvalid: Det oppstod en feil: er allerede i bruk>
see the missing part here:
#<ActiveRecord::RecordInvalid: Det oppstod en feil: [MISSING RECORD NAME] er allerede i bruk>

# switch to 
# config.i18n.default_locale = :en
#<ActiveRecord::RecordInvalid: Validation failed: Report date has already been taken> 

ОБНОВЛЕНИЕ:

@ Нейт получилрезервный конфиг правильный в своем ответе ниже (https://stackoverflow.com/a/53453211/252799)

Это не было проблемой, хотя, как я понял, проблема была в моем nb.yml.

  • Эксперимент 1. Удаление всего содержимого nb.yml, оставляя только hello world. Работы : Печатается имя атрибута (связанной записи).
  • Эксперимент 2. Замена нашего nb.yml на официальные Rails nb.yml: https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/nb.yml: Работает . Я получаю полезное норвежско-английское сообщение Det oppstod feil: Company må eksistere. Не красиво,но полезно и то, что я хотел!
  • Эксперимент 3. Доказательство. nb.yml воспроизводит проблему.

Два подхода

# A: SHOW attribute name
nb: 
  errors:
    format: "%{attribute} %{message}"

# B: HIDE attribute name
nb:
  errors:
    format: "%{message}"

Что приводит к другой проблеме.

Подход B: HIDE делает вас слепым на стороне сервера. Спецификации, журналы и консоль покажут Validation Failed: can't be blank, но в пользовательском интерфейсе это выглядит хорошо.

Я публикуюed другой вопрос: Простые ошибки формы без имени атрибута, но с использованием имени атрибута в журналах, консоли, спецификации

1 Ответ

0 голосов
/ 24 ноября 2018

Rails 5.2 позволяет вам установить config.i18n.fallbacks, чтобы указать, какие резервные локали можно использовать.Установите для него массив символов, чтобы указать, какие локали следует использовать, если перевод не найден.Когда множественное число установлено, оно проходит через массив один за другим, пока транслитерация не сработает (или не сработает).

В вашем случае вам понадобится следующее в вашем config/application.rb:

config.i18n.default_locale = :nb
config.i18n.fallbacks = [:en]

Таким образом, если языковой стандарт не указан, он использует языковой стандарт :nb (ваш языковой стандарт по умолчанию).Затем, каждый раз, когда перевод завершается неудачно в любой локали, он пытается использовать локаль :en как запасной вариант.

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

Для более полного ответа, вот пример с несколькими откатами.Они будут проверены в указанном порядке:

config.i18n.default_locale = :nb
config.i18n.fallbacks = [:en, :es, :de]
...