如何在 YAML 中声明带有单引号和双引号的字符串?

Posted

技术标签:

【中文标题】如何在 YAML 中声明带有单引号和双引号的字符串?【英文标题】:How do I declare a string with both single and double quotes in YAML? 【发布时间】:2013-02-06 04:34:41 【问题描述】:

我正在国际化一个应用程序,但不知道如何声明一个包含单引号和双引号的翻译字符串。这是我正在尝试的 en.yml 字符串的示例

en:
  my_string: When you're using double quotes, they look like "this"

使用上面的字符串,我得到以下错误:

can not load translations from /vagrant/config/locales/en.yml,
expected it to return a hash, but does not

如果只有双引号,我会用单引号括起来,反之亦然。我如何处理双引号和单引号?

【问题讨论】:

你试过逃避它们吗? "当你使用双引号时,它们看起来像 \"this\"" @jvnill 遗憾的是,没有,但这成功了。我试图转义单引号,但它不起作用,所以我认为双引号也不会转义。如果您将其发布为答案,我会接受。 相关问题:***.com/questions/715818/… @jvnill 根据 YAML 规范,这不应与 OP 使用的普通标量有所不同。如果是这样,则 ruby​​ YAML 实现中存在错误。 【参考方案1】:

应该这样转义

"When you're using double quotes, they look like \"this\""

【讨论】:

这...对我不起作用。当我做这样的事情然后puts 字符串时,它会打印When you're using double quotes, they look like \"this\"。帮忙? 你是用双引号括起来的吗? 是的。也尝试了单引号 - 结果相同。 不,它应该用双引号引起来。如果您使用单引号,则单引号是您需要转义的单引号,即在它之前添加一个反斜杠。在此处粘贴您的整个代码或提出其他问题。 根据 YAML 规范,您作为替代方案提供的这个引用标量与 OP 使用的普通标量完全相同。这很容易通过将两个版本粘贴到像nimyaml.org/testing.html 这样的在线解析器中来验证。所以这很像 ruby​​ YAML 实现中的一个实际错误。【参考方案2】:

实际上我不明白为什么翻译字符串中需要过时的打字机引号。 2013 年左右,我们不再拘泥于 ASCII-7。排版规则要求他们使用unicode quotation marks。

这是有史以来最好的做法:将它们映射到第三级键盘(或者,最终,sed 你的yml):

"When you’re using double quotes, they look like “this”"

采用这种方法,您将永远不会遇到逃跑的麻烦,您的客户肯定会说“哦,太好了。”

抱歉,如果这看起来有点离题,但由于问题是关于翻译字符串,我仍然认为它是最好的解决方案。

【讨论】:

我喜欢这个主意!刚刚发现我可以用选项+左/右括号(OS X)键入它们。 我知道我玩这个游戏迟到了,但是使用奇数字符作为引号是没有意义的。它们很难插入,解析很痛苦(任何消耗您的数据的过程都需要注意您使用的是非标准引号),但不要添加任何内容。就像在接受的答案中那样逃避它们 - 任何使用这种方法的人都不会感到惊讶。 @Knetic 你根本没明白。这很有意义,很容易插入,它使解析魅力(左右引号不同)并且没有人会故意自动对您的 translate 字符串进行操作。另一方面,您添加了一种美学,它比以往任何时候都更有价值。在 2015 年,只有尼安德特人仍然被打字机引用所困。 我不知道在哪个用例中我会考虑这个特定选项,但它不应该被视为一个体面的解决方案。它只是将问题推给其他人。【参考方案3】:

看看这是否适合你,它在我需要传递 JSON 值的 Spring Boot 应用程序中非常适合我:

使用 YAML 管道样式:

app.json:
  values: |
    "key": "value"

你的情况是:

en:
  my_string: |
    When you're using double quotes, they look like "this"

折叠样式也可以,但我没有尝试过。

在此处查看更多信息:http://symfony.com/doc/current/components/yaml/yaml_format.html#strings

【讨论】:

以上是关于如何在 YAML 中声明带有单引号和双引号的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

oracle 如何插入带有引号''和连接符的字符串

Python-yaml 脚本和双引号

带单引号和双引号的 JSON.parse 字符串?

带单引号和双引号的 JSON.parse 字符串?

有没有办法像在 javascript 中一样在 C# 中交替使用单引号和双引号?

PHP:在单个字符串中使用单引号和双引号