今天我尝试 merge Qt 项目的两个 git 分支。 两个分支都为它们添加了一些新字符串和新翻译。 现在 Qt 的 lupdate 工具将需要翻译的源文件的行号存储在 .ts 文件中。 正如您可以想象的那样,两个分支的行号不相同,并且当两个翻译文件都已更新时,这会导致数百个这样的 merge 冲突,对于每个翻译文件:
<<<<<<< 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
}Specify/override how source code references are saved in
ts
files. Default isabsolute
.
因此使用 lupdate -locations none
来消除 TS 文件中的所有行号。使用 lupdate -locations relative
减少行号的变动:现在,行号的更改只会影响每次更改后的第一个字符串,如果您在打开源代码窗口的情况下使用 linguist
。
我的偏好是只对带有-locations none
的版本进行源代码控制。每当我需要行号时,我都会在本地运行 lupdate
以生成具有绝对位置的临时版本。确保你没有提交临时文件!
关于git - Qt 翻译和 git 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28220472/