I18N翻译“。”或“%”导致完整的所有翻译

时间:2016-08-24 18:35:44

标签: ruby-on-rails rails-i18n

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

当我遍历这个并翻译I18n.t(“。”)时,我在我的整个应用程序中获得了所有翻译的完整数组,输出了1000多个数组文本。对于I18n.t(“%”),这似乎也是如此。

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

1 个答案:

答案 0 :(得分:4)

""用于命名空间转换键。如果您有这样的文件:

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")

看起来你可以改变"%"因为它是硬编码的。但它不应该返回整个翻译阵列。它应该只是返回"翻译缺失"错误。至少这就是我在我的I18n宝石版本上所拥有的。