Как выборочно отключить Rails I18n translation_missing? - PullRequest
0 голосов
/ 14 января 2020

В моем приложении Rails 5.2 почти весь мой пользовательский интерфейс, за исключением области администратора, интернационализирован с помощью t (). Пределы «отсутствия перевода» часто нарушают компоновку, но я полагаю, что это цена, которую стоит заплатить, чтобы узнать, когда я, возможно, ошибся с ключом или не передал файл или что-то еще. Однако есть одно место, где пролеты действительно не работают, и это когда речь идет о самоописанных ролях, которые люди играют в моих группах. Роли могут быть предопределенными строками, которые являются частью моего en.yml, например, «координатор», «казначей» и т. Д., Но они также могут быть записаны, как «министр удивительного». Таким образом, выполнение t("groups.roles." + role) не работает, потому что интервал «отсутствия перевода» портит макет. Это не было проблемой в предыдущей версии Rails, потому что «пропущенные переводы» автоматически отключались для производственной среды, и отображалась только последняя часть ключа, то есть именно та функциональность, которую я здесь хочу. В Rails 5.2 пролеты также отображаются в рабочей среде, и это проблема, по крайней мере для этой части.

Функциональность, которую я действительно хотел бы, которая раньше была стандартной, это:

  1. Если перевод существует, отобразите его.
  2. Если перевода не существует, отобразите строку Engli sh из en.yml (Engli sh определен как запасной язык)
  3. Если Engli sh тоже не существует, отобразите последнюю часть ключа. С «отсутствующим переводом» пролетает в разработке, без них в производстве.

Ответы [ 2 ]

0 голосов
/ 14 января 2020

Вы можете использовать опцию :default следующим образом:

t("groups.roles.#{role}", default: role)

И если вы хотите иметь "translation missing" в разработке, без них в производстве (это немного уродливо) :

t("groups.roles.#{role}", default: Rails.env.development? ? "#{role} translation missing" : role)
0 голосов
/ 14 января 2020

Я просмотрел все ответы здесь о том, как отключить эти сообщения об ошибках в рабочей среде, и предлагаемые решения кажутся ориентированными на Rails 4 или не работают. Или у них есть побочный эффект деактивации резервных переводов, что является для меня неприемлемым компромиссом, потому что мне нужны резервные копии Engli sh для большей части моего приложения. Перезапись или расширение TranslationHelper кажется важной задачей, тем более, что я бы хотел, чтобы в производственном процессе были удалены только промежутки (как это раньше работало). Так что для моего случая и на данный момент я решил не делать полное переопределение, и я изменил помощника только в одном месте, где я ожидаю пропущенные переводы, которые не являются проблемой:

def human_role(role)
  str = t("groups.roles." + role)
  if str.include?("translation missing")
    role
  else 
    str
  end
end
...