【问题标题】:Identifying messages in a Qt Linguist translation file (TS file)识别 Qt Linguist 翻译文件(TS 文件)中的消息
【发布时间】: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">&amp;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: TranslatorQt Linguist Manual: ProgrammersLinguist 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">&amp;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


【解决方案1】:

Qt 语言学家报告的错误信息是有意义的。

试试这个修改后的 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">&amp;Borrar</translation>
        </message>
    </context>
  <context>
    <name>MyOtherContext</name>
        <message>
            <location filename="../../../../../MyFile.cpp" line="1572"/>
            <source>Delete</source>
            <translation>Eliminar</translation>
        </message>
    </context>
</TS>

重复项由上下文(即 MyContextMyOtherContext)和来源(删除)识别。

编辑:

我仔细阅读了 Qt Linguist 的源代码。据我所知,它永远不会使用 ts.dtd 进行验证,所有内容都是硬编码的(请参阅 ts.cpp 中的 TSReader 类)。

道理是:当且仅当生成的 ts 文件可以被 Qt Linguist 再次加载并被 lupdate 接受(以重新同步应用程序)时,您可以进行任何您想要的操作。

【讨论】:

  • 你说得对,但可能有相同的上下文、相同的来源和不同的翻译文本。我发现有一个可选的注释标签:TS/context/message/comment。如果两条消息有不同的评论,似乎它们是可以接受的。至少我没有收到错误消息。
  • 非常感谢您花时间研究源代码!您可以将上述评论移至您的答案吗?那我就可以接受了。
【解决方案2】:

翻译的完整查找键是

上下文 + 源字符串以及消歧字符串(如果存在)

http://qt-project.org/doc/qt-4.8/i18n-source-translation.html#disambiguation

消歧字符串存储在注释字段中,因为在旧的 Qt 版本中,这也是插入开发人员注释的方式(Qt Linguist 仍然可以识别它,新注释也是如此(. ts 文件见http://qt-project.org/doc/qt-4.8/i18n-source-translation.html#translator-comments))。

因此,正如您所注意到的,您可以拥有两个具有相同上下文和源字符串的字符串,只要它们具有不同的消歧字符串(或者其中一个有一个而另一个没有)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    相关资源
    最近更新 更多