Сообщения интернационализации Rails с выражениями
Мне нужно оценить некоторое выражение внутри строки сообщения локали. Это не своего рода параметр, потому что его значение находится внутри конфигурации приложения, но это своего рода выражение, поэтому мне не нужно, чтобы он был жестко запрограммирован внутри сообщения. Кроме того, параметр мне не подходит, потому что сообщение показывается сторонним контроллером гемов, а не моим контроллером. Итак, мне нужно что-то вроде этого для правильной оценки:
I18n.t(:taken_in_past, scope: [:errors, :messages])
Файл.yml:
en:
errors:
messages:
taken_in_past: "could not be equal to on of #{Devise.password_archiving_count} previous passwords"
1 ответ
Это всего лишь идея, я не проверяю это на практике.
Вы можете установить обработчик для пропущенных интерполяций https://github.com/svenfuchs/i18n/blob/master/lib/i18n/config.rb#L107
В вашем регионе вы установили
taken_in_past: "could not be equal to on of #{password_archiving_count} previous passwords"
и в обработчике вы заменяете эту интерполяцию
case key
when 'password_archiving_count' then Devise.password_archiving_count