ruby-on-rails - 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)
解决方案
亲吻。
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
推荐阅读
- apache-kafka - 为什么 kafka-avro-console-producer 不遵守该字段的默认值?
- json - jqGrid:Web 服务返回的 JSON 不会绑定到子网格
- ios - 在 SWIFT for iOS 开发中解析 json 的问题
- vue.js - 无法使用路由器在 api 调用中从 store vuex 传递参数
- javascript - 如何在没有 AM/PM 缩写的情况下使用 toLocaleTimeString 12 小时时间?
- plot - 使 Octave 设置一个图形为活动窗口(来到“屏幕前面”)
- java - 如何阅读这些信息?
- postgresql - 触发函数返回:查询没有结果数据的目的地
- c# - 错误:System.Data.OleDb.OleDbException (0x80040E14):查询表达式中的语法错误(缺少运算符)
- prolog - 如何在 Prolog 中找到特定的事实?