【发布时间】:2012-01-12 10:17:38
【问题描述】:
我希望这是提出这个问题的正确论坛。如果不是,请将我重定向到更合适的论坛。
我正在尝试了解 Qt Linguist TS 文件的格式。我修改了一个文件,当我尝试打开它时,我收到错误消息“在...中找到重复的消息”。该文件确实包含一个上下文,其中包含两条消息
- 同一来源
- 文件名相同但行号不同的位置
- 不同的翻译
这是给出此错误的最小文件的源代码:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="es">
<context>
<name>MyContext</name>
<message>
<location filename="../../../../../MyFile.cpp" line="605"/>
<source>Delete</source>
<translatorcomment>Menu option</translatorcomment>
<translation type="unfinished">&Borrar</translation>
</message>
<message>
<location filename="../../../../../MyFile.cpp" line="1572"/>
<source>Delete</source>
<translation>Eliminar</translation>
</message>
</context>
</TS>
据我所知,每条消息都由上下文、来源和位置标识,因此这应该不是问题,因为行号不同。另请注意,您不能将两个消息元素合并为一个,因为它们包含不同的翻译文本。
所以我不清楚是什么导致了错误消息。我正在使用 Qt 4.6.2 版。 我查看了以下文档:Qt Linguist Manual: Translator、Qt Linguist Manual: Programmers、Linguist TS file format,但我没有找到我要查找的信息,即如何识别每条消息以及可能导致 Qt 中的错误消息的原因语言学家。
如果您不知道这个问题的答案,那么指向有关 TS 格式的更多详细信息的链接也会有所帮助。
更新
我发现通过使用可选标签 TS/context/message/comment 可以 对于相同的上下文/消息/来源有不同的翻译文本,例如
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="es">
<context>
<name>MyContext</name>
<message>
<location filename="../../../../../MyFile.cpp" line="605"/>
<source>Delete</source>
<comment>Comment 1</comment>
<translatorcomment>Menu option</translatorcomment>
<translation type="unfinished">&Borrar</translation>
</message>
<message>
<location filename="../../../../../MyFile.cpp" line="1572"/>
<source>Delete</source>
<comment>Comment 2</comment>
<translation>Eliminar</translation>
</message>
</context>
</TS>
以上文件可以正常打开。
这似乎解决了我的问题,但最好有一些关于这种格式的精确文档。
【问题讨论】:
-
Qt 4.6.2。我会将这些信息添加到问题中。
-
您对使用 XML 技术感到满意吗?
-
是的,我已经编写了几个用于读写 XML 文件的工具。我不会将自己定义为 XML 的高级用户,但我已经用它做了很多工作。我需要知道如何在 Qt Linguist 文件的 TS/context 元素中识别消息元素。
-
作为一个有效的 XML 文档,您修改后的 TS 文件可以根据您提供的 Linguist TS file format 链接中给出的 DTD 进行验证。顺便说一句,您可以通过提供您对假定有效的 TS 文件所做的修改的完整 sn-p 来帮助愿意回答您问题的其他人。
-
该页面上找到的DTD是否仅作为参考?当我尝试验证 DTD 本身时(例如在 validome.org/grammar/validate 上),我在第 29 行收到错误(它在第 31 行,带有 Qt 4.6 版的 DTD): 。 xmllint 在 DTD 上给出相同的错误消息,并且无法验证 XML 文件。
标签: qt internationalization translation qt4.6