在 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 中的任何一个,但它们看起来可以帮助您解决问题)。
我的 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 中的任何一个,但它们看起来可以帮助您解决问题)。