【问题标题】:l18n translation using "on" as part of the key not working? Is it a keyword?l18n 翻译使用“on”作为键的一部分不起作用?是关键字吗?
【发布时间】:2014-12-09 03:18:16
【问题描述】:

我正在尝试使用 i18n translate (t) 方法来翻译字符串。除了“on”这个词之外,我可以用任何我能想到的键来让它工作。我是否与关键字发生冲突?

现在,我将给键起一个不同的名称,这样我们的 Rails 应用程序就可以使用一种以上的语言。我只是好奇,因为我找不到任何关于它的文档。

如果有什么不同,我们将使用 postgres 作为数据库。我真的不知道 i18n 类是如何工作的。

【问题讨论】:

  • t 不起作用时,您究竟是如何使用它的? “不起作用”到底是什么意思?
  • trushkevich 解决了这个问题。它与解析 YAML 有关。但这是我所看到的:当您调用翻译函数 t(key) 时,它会尝试在 YAML 中查找该键。如果找不到该键,它只是将键名转换为字符串(并将其大写)而不进行任何翻译。如果在视图中使用,它还会将返回的字符串包装在一个跨度 中,以帮助您注意到存在 t() 错误。 guides.rubyonrails.org/i18n.html#the-public-i18n-api

标签: ruby-on-rails ruby internationalization


【解决方案1】:

问题与 YAML 的工作方式有关。

require 'yaml'

YAML::load("yes: Yes\nno: No")
# => {true=>true, false=>false}

YAML::load("on: Yes\noff: No")
# => {true=>true, false=>false}

YAML::load("on: Yes text\noff: No text")
# => {true=>"Yes text", false=>"No text"}

所以实际上解析 YAML 后没有 'yes' 键。所以找不到你的翻译。但是,您可以明确指定数据类型:

YAML::load("!!str on: Yes text\noff: No text")
# => {"on"=>"Yes text", false=>"No text"}

或者只是在引号内写一个键:

YAML::load("'on': Yes text\noff: No text")
# => {"on"=>"Yes text", false=>"No text"}

你可以找到一些更详细的解释here,当然你也可以阅读specification

【讨论】:

  • 谢谢!现在我是一个受过更多教育的 YAML 用户!此外,我可以写... "no": 而不是 !!str on: 并且 YAML 解析器将理解 "no" 是字符串而不是布尔值。
  • 是的,你是对的,我忘了提。更新了我的答案以包含此选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
相关资源
最近更新 更多