在 I18n 消息上使用 a/an

Using a/an on an I18n message

我的 en.yml 文件中有以下错误消息:

invalid_transition: "Cannot %{action} a %{state} timesheet"

问题是有时状态可以是 approved,其他时候可以是 rejected

这样,错误最终可能会像 "Cannot submit a approved timesheet" 一样被拼写错误,而不是“an 批准的时间表”。

Rails 是否在 I18n 中提供这种灵活性?

我认为,对您的问题最简单的回答是将整个状态与正确的不定冠词一起传递。

有一个 question that looks at how to prepend "a" or "an" depending on a given word. A short answer is that there's a gem indefinite_article 可以做到这一点。

您的翻译将变为:

invalid_transition: "Cannot %{action} %{state_with_article} timesheet"

然后调用I18n.t并传入"a rejected"或"an approved"作为变量进行插值。

但是,如果你想让你的手更脏一点,你可以使用 i18n-inflector gem and it's companion i18n-inflector-rails gem。对于许多语言来说,选择比英语更复杂,因为不同的性别和时态会影响不定冠词的选择。 (免责声明:我没有使用过这些 gem 中的任何一个,但它们看起来可以帮助您解决问题)。