git - Qt 翻译和 git 的最佳实践

标签 git qt merge localization internationalization

今天我尝试 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 is absolute.

因此使用 lupdate -locations none 来消除 TS 文件中的所有行号。使用 lupdate -locations relative 减少行号的变动:现在,行号的更改只会影响每次更改后的第一个字符串,如果您在打开源代码窗口的情况下使用 linguist

我的偏好是只对带有-locations none 的版本进行源代码控制。每当我需要行号时,我都会在本地运行 lupdate 以生成具有绝对位置的临时版本。确保你没有提交临时文件!

关于git - Qt 翻译和 git 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28220472/

相关文章:

python - 合并到 pandas 中

mercurial - 在 Mercurial 中将一个分支的选定修订 merge 到另一个分支

linux - 合并 uniq -c 的结果

git - 当你有一个包含 web/ios/android 应用程序的项目时,你应该有一个 Git 存储库还是多个?

git - 版本控制 Laravel。我应该忽略哪些文件?

c++ - QNetworkAccessManager 在 arch 上给出 ssl 错误

c++ - OpenCV 窗口卡住

linux - 无法在 ubuntu 上从源代码安装 git

git - 如何从命令行打开 SourceTree?

c++ - 您如何注册相互依赖的 Qt QML Singleton?