使用QT工具(lconvert)合并现有的.ts文件和翻译文件(.ts)。

22
这是我的问题:我们的产品有9种不同语言的.ts文件。我们新增了大约100个需要翻译的字符串,但有些是针对我们下一个版本,有些是针对发布之后的版本。我们遇到了译者错过字符串或提前翻译字符串的问题。我们希望能够发送较小的.ts文件,其中只包含我们想要现在翻译的字符串,然后将该.ts文件合并到包含其余翻译的大型.ts文件中。
我们的翻译人员必须使用QT Linguist(之前我们让他们编辑原始XML,效果不佳)。
一种解决方案是使用上下文,但我们的开发团队对此不太感兴趣。另一种方法是手动合并.ts文件,但这似乎容易出现复制和粘贴错误的情况。
是否有一种通过lupdate和项目文件添加或合并第二个.ts文件的方法?我已经阅读了QT-land论坛中的所有内容,但没有找到答案,但是lupdate中的开关暗示可以指向其他翻译文件。特别是-pro开关,它说:
    -pro <filename>
       Name of a .pro file. Useful for files with .pro file syntax but
       different file suffix. Projects are recursed into and merged.

示例1:我们有一个德语的.ts文件,我们想从另一个单独的德语翻译文件中添加20个字符串,使得主要的翻译文件包含所有字符串,包括这20个新的。

示例2:我们有一个德语的.ts文件,我们想要从一个单独的德语翻译文件中添加20个字符串,使得在lupdate期间辅助翻译文件将与主文件合并,以便生成的.qm文件包含所有字符串,包括这20个新的。

有人做过这两种方式(任何一种都可以),你能给我一些见解吗?

2个回答

45
答案并不使用lupdate,而是涉及到另一个实用工具叫做lconvert。创建一个只包含你感兴趣的字符串的副本文件(并从主文件中删除相同的字符串),然后运行以下命令非常容易:

lconvert -i primary.ts secondary.ts -o complete.ts

这将从两个输入文件中获取所有字符串,并将它们组合到输出文件中。使用这种方法,我能够创建一个与原来拆分成主文件和副本文件的原始文件没有任何差异(除了时间戳)的零差异文件。

这个问题没有得到太多关注,但也许有人会遇到同样的问题,这篇文章可以帮助他们。


您可以通过此问题了解如何安装 lconvert 工具:https://askubuntu.com/questions/474236/error-installing-avogadro-with-cmake-lconvert-could-not-exec-no-such-file-or-d。感谢您。只需安装 qttools5-dev-tools 即可。 - Erfankam

2
感谢这个提示。对于我的情况,它似乎可以正常工作: 我试图从我的项目中提取更新和新的字符串,该项目目前正在旧版本/发布中进行翻译,而我没有已经翻译的字符串。
问题是仅将新/更新的字符串发送给翻译人员。
我将旧字符串设置为已解决状态,使用Lupdate添加新字符串,使用OxygenXML Editor进行XPath“/TS/context/message[not(translation/@type)]”搜索以删除旧字符串,并从无用的空格和换行符中清除它。
我尝试使用您的解决方案进行合并,以便合并已翻译的字符串:旧的和新的。它正确地通过了lrelease并且显示正确。

4
很高兴这个方法对你有用。作为 Stack Overflow 的礼节,一般来说,如果一个答案对你有用,你应该点击那个答案的上箭头,并可选择添加评论以澄清它是如何对你有用的,而不是添加一个本来应该只是原始答案评论的回答。不过不用担心。 - delliottg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接