首页 > 解决方案 > Ruby on rails:如何设置内联字符串翻译(无需更改 config/locales/*.yml)

问题描述

我正在使用 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)

标签: ruby-on-railslocalizationlocaleredmine

解决方案


亲吻

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

推荐阅读