【问题标题】:Wrong .yml format in "Stellaris" game“群星”游戏中的 .yml 格式错误
【发布时间】:2020-10-31 13:23:31
【问题描述】:

我想解析包含“Stellaris”本地化的 yaml 文件。但我一直有一个错误

"yaml mapping values are not allowed here"

我使用 pyyaml。 主要问题是游戏中的所有本地化文件都有这样的行:

trait_ruler_immortal:0 "Immortal"

但在 yaml 文档和论坛中,我可以看到我们必须在冒号后添加“空格”。我不明白这个“0”符号是什么意思。 有趣的是,该游戏在解析此文件时没有任何问题。 也许这是特殊的 yaml 格式?

编辑:

更多代码: l_英语: 危机.2087.desc_psionic_synth:0 "一小部分" EXTSYNTH_DIVINE_SPARK: "神圣火花" EXTSYNTH_START_AT_3:0 "§G这个种族的领袖从技能等级 3§!"

【问题讨论】:

  • 您给出的值实际上是一个有效的 YAML 标量。由于冒号后没有空格,因此整行被解析为内容(引号被解析为内容,除非标量以它们开头)。您能否向我们展示更多 YAML 文件,以便我们重现错误?
  • 已添加。 EXTSYNTH_START_AT_3:0、EXTSYNTH_CAN_PRODUCE_NANITES:0 等
  • 注意:作为商业游戏的文件,此内容受版权保护,将其转储到 pastebin 可能不是最好的主意。一个小的除了应该没问题,但是 IANAL。
  • 也许,但这是来自模式本地化的代码。好的。我会删除它

标签: python python-3.x yaml pyyaml


【解决方案1】:

根据规范,这是无效的 YAML。很可能 Stellaris 在将文件提供给 YAML 加载程序之前对其进行了一些预处理。我们只能猜测这里会发生什么。

解析它的最佳方法可能是将其加载到字符串中然后执行

input.replace(":0 ", ": ")

在解析之前。

【讨论】:

  • 感谢帮助。在官方论坛中我得到了这个结果:“IIRC 0(或更高的数字)在内部用于翻译人员知道何时字符串需要新的翻译。你可以放一个如果您制作新字符串,则为 0 或任何其他数字。”。使用“替换”似乎是一个很好的解决方案。
猜你喜欢
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
  • 2010-12-02
  • 1970-01-01
相关资源
最近更新 更多