如何使用gettext使QML文件可翻译


10

我想编写一个基于Python(PySide)和QMLQtQuick应用程序。

我知道Qt的应用已经得到了他们自己的翻译技术,但我想坚持gettext的这一个。我想知道是否可以:

  • 用gettext工具将字符串标记为在QML文件中进行翻译的字符串,以将其提取到.pot文件中
  • 让gettext在运行时转换QML文件。

我知道这是在C ++ 中的Unity 2D代码中完成的,所以我想知道如何使用Python来完成。

注意:我说的是在运行时专门使用gettext,而不是在gettext和Qt Linguist格式之间进行转换。

Answers:


6

一般来说,没有办法在QT中使用gettext转换,因为该库使用内部转换机制(Qtranslate和.ts文件),如QTBUG-2404所述

但是,有一个可行的选择。

QT附带有一个名为lconvert的工具包,可用于将.ts文件转换为.po,反之亦然。

因此,您可以使用以下方法提取所有翻译内容:

lupdate

然后使用lconvert获得一个po文件:

lconvert -of po -o file.po file.ts

翻译后,您可以将po文件转换回ts:

lconvert -of ts -o file.ts file.po

然后,您可以在软件中使用它。

lupdate可以同时用于QT和QtQuick。


1
感谢您的回答!。我知道转换工具,但它们不会使gettext在运行时加载翻译。我知道通过重写Qt转换调用在技术上是可行的,因为Unity 2D家伙在C ++中做到了,我只是想弄清楚如何在Python中做到这一点。
戴维·普拉内拉

0

您可以使用喜欢的东西代替lsTr来破解lupdate的源代码。(很容易),然后使用被入侵的lupdate + lconvert +自定义libintl来实现使用gettext的目的。


1
请说明如何。
卡兹·沃尔夫

打开qdeclarative.cpp(在lupdte源代码中),找到“ qsTr”并替换为您想要的任何内容,假设使用“ dsTr”。然后在qml中使用dsTr(“ you string”)。使用lconvert使用修改后的lupdate生成ts文件后,生成一个pot文件。您最后需要实现的dsTr并将其导出到全局环境
snyh

去吧,把它放在答案中。就像一般规则一样,请务必先说出方式,然后再给出来源。
卡兹·沃尔夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.