I18N 翻译“.”或“%”导致所有翻译的完整数组

I18N translate "." or "%" causes a full array of ALL translations

我的 Rails 应用程序使用 I18n 进行翻译时遇到问题。我在像这样 [:this_is_a, 5, :which_is_a_number, "."] 的数组中创建动态句子,我将每个单词一个一个地翻译。

当我遍历它并翻译 I18n.t(".") 时,我得到了我整个应用程序中所有翻译的完整数组,它输出了 1000 多个数组文本。 I18n.t("%").

似乎也是如此

是否有阻止这种情况发生的设置?目前我唯一的破解方法是更改​​所有“。”到“。”,但我希望有更好的解决方案。有什么建议吗?

“。”用于命名空间翻译键。如果你有这样的文件:

module1:
  key_a: "Module1 Translation A"
  key_b: "Module1 Translation B"
module2:
  key_a: "Module2 Translation A"

然后你访问带有“.”的那些。

I18n.t("module1.key_a")
I18n.t("module2.key_a")

如果您只使用 I18n.t(".") 它将提供整个顶级命名空间。您可以通过更改分隔符

来更改此行为
I18n.t("module1@key_a", separator: "@")

只需选择一些您知道不会作为标记出现的角色。

“%”字符用于插值:

module1:
  name: "My name is %{name}"

然后

I18n.t("module1.name", name: "John")

您似乎无法将“%”更改为其他内容,因为它是硬编码的。但是不应该return整个数组编译。它应该只是 return "translation missing" 错误。至少我的 I18n gem.

版本是这样的