Qt翻译和git的最佳实践?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

今天,我尝试合并一个Qt项目的两个Git分支。这两个分支都为它们添加了一些新字符串和新的翻译。现在,Qt的lupdate工具存储源文件的行号,在.ts文件中需要翻译。正如你可以想象的那样,两个分支的行号并不相同,当两个翻译文件都被更新时,这会导致数百个合并冲突,每个翻译文件都是这样的:

<<<<<<< HEAD
 +        <location filename="../../src/network/mail/CSmtp.cpp" line="856"/>
=======
+         <location filename="../../src/network/mail/CSmtp.cpp" line="860"/>
>>>>>>> master

可能会说,只需使用其中一个版本,然后再次运行lupdate,但是这样,将失去来自其中一个分支的所有新翻译。

其他工具,如gettext,没有这个问题,因为它们不存储行号。

在Qt中有哪些好的方法来避免这个问题呢?

提问于
用户回答回答于

lupdate手册页:

-locations{absolute|relative|none} 指定/重写源代码引用的保存方式ts档案。默认值是absolute...

所以使用lupdate -locations none若要消除TS文件中的所有行号,请执行以下操作。使用lupdate -locations relative要减少行号中的波动:现在,行号的更改只会影响每次更改后的第一个字符串,如果使用linguist打开源代码窗口。

我的首选是只使用-locations none...。只要我需要电话号码,我就运行lupdate。

用户回答回答于

一种可能的解决方案(见“将翻译文件(.ts)与现有的.ts文件合并”的答案)是使用lconvert。在QT4.5中引入这一点时:

lconvertFilter工具方便了文件格式之间的转换,并可用于对可翻译字符串的集合执行其他转换。

它涉及手动步骤(创建第二个文件,只包含要合并的字符串),然后:

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

为了完成最终结果,对“翻译文件在修改源代码后仍在工作”的回答是什么?还提到pylupdate4 your_project.pro作为更新对ts档案。

扫码关注云+社区