Ruby on rails: как настроить встроенную трансляцию строк (без изменения конфигурации / locales/*.yml)

#ruby-on-rails #localization #locale #redmine

#ruby-на-рельсах #локализация #локаль #redmine #ruby-on-rails

Вопрос:

Я использую плагин Custom Workflows для Redmine. Это дает возможность писать код, например, для перехвата before_save на странице администратора во время выполнения. Предположим, что я создаю исключение для него:

   raise WorkflowError, "Warning: your note is too long."
  

В классическом кодировании я должен написать

   raise WorkflowError, t(:warning_note_too_long)
  

и изменить, например, en locale:

 # config/locales/en.yml
en:
  warning_note_too_long: "Warning: your note is too long."
  

но в данном случае это неприемлемо, потому что теряется смысл написания кода на странице администратора (я также должен изменить исходные тексты и развернуть их).

Как я могу перевести сообщение на несколько встроенных языков? Я хочу что-то подобное:

   config.locales.en.warning_note_too_long = "Warning: your note is too long."
  config.locales.ru.warning_note_too_long ="Предупреждение: Ваш комментарий слишком длинный."
  raise WorkflowError, t(:warning_note_too_long)
  

Ответ №1:

ПОЦЕЛУЙ.

 message = case I18n.locale
          when 'ru'
            "Предупреждение: Ваш комментарий слишком длинный."
          else # keeping 'en' as default in case there is some unexpected locale
            "Warning: your note is too long."
          end
raise WorkflowError, message
  

Комментарии:

1. с этой модификацией все работает нормально: message = case I18n.locale.to_s