Ruby on Rails:如何设置内联字符串转换无需更改config / locales / *yml

问题描述

我正在将Custom Workflows插件用于Redmine。它提供了编写代码功能,例如运行时在管理页面中插入before_save。假设我提出了例外:

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

在经典编码中,我应该写

  raise WorkflowError,t(:warning_note_too_long)

修改例如本地设置:

# 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)

解决方法

KISS

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