关于Qt国际化的问题

问题描述 投票:0回答:2

我无法弄清楚如何使用 Qt 为 python 应用程序创建翻译文件。

我使用 python 2.7、Qt 版本 5.9.1 和 PyQt4 4.12.1 在 OSX 10.11.6 上创建 GUI。

现在我只想翻译我的代码中的几个单词。

据我了解,我必须使用 QtLinguist 打开一个 .ts 文件,翻译单词并创建一个 .qm 文件,然后由 python 使用。

Qt Linguist 页面我知道我需要使用 .pro 项目文件,该文件将由

pylupdate4
等读取...

现在,我要创建一个 .pro 文件吗?

我尝试跑步:

$ qmake -project myfile.py
$ pylupdate4 myfile.pro -ts file.ts

但是生成的 .pro 文件无法被

pylupdate4
(
XML error: Parse error at line 1, column 1 [...]
)

读取

从这个教程,我尝试过:

$ pylupdate4 myfile.py -ts file.ts

这会创建一个空的 .ts 文件,Qt Linguist 无法打开该文件。

有人可以给我任何关于可能出现问题的提示吗,我在浏览器中打开的 15 个选项卡没有帮助。

如果你需要的话,这是我的Python代码:

import sys
import os.path as osp
import os
from PyQt4 import QtGui, QtCore

class MainWindow(QtGui.QWidget):

    def __init__(self):
        super(MainWindow,self).__init__()

        # Set MainWindow geometry, use settings of last session. If it's first session,
        # use defaulted settings
        self.settings = QtCore.QSettings('Paul',QtCore.QSettings.NativeFormat)
        self.resize(self.settings.value("size", QtCore.QSize(500, 300)).toSize())
        self.move(self.settings.value("pos", QtCore.QPoint(5, 5)).toPoint());

        self.initUI()


    def closeEvent(self, e):
        #Save MainWindow geometry session when closing the window
        self.settings.setValue("size",self.size())
        self.settings.setValue("pos",self.pos())
        e.accept()

    def initUI(self):

        self.hbox = QtGui.QVBoxLayout(self) # Create Vertival box layout to put the buttons
        self.myButtons = QtGui.QPushButton('button',self) #create push button
        self.myButtons.setStyleSheet("""QPushButton { background-color: red; font:bold 20px}""")
        self.myButtons.setToolTip('Push this button')
        self.myButtons.setText(self.tr(QtCore.QString('yes')))
        comboBox=QtGui.QComboBox(self) #create drop down menu
        comboBox.addItem('Portugues')
        comboBox.addItem('English')
        self.hbox.addWidget(comboBox,1,QtCore.Qt.AlignRight) #add drop down menu to box layout
        self.hbox.addStretch(3)      # set separation between buttons
        self.myButtons.clicked.connect(self.buttonClicked) # what should the button do
        self.hbox.addWidget(self.myButtons,1,QtCore.Qt.AlignRight) #add button to box layout


        self.setWindowTitle('Test2')


        self.show()


    def buttonClicked(self):

        msbox= QtGui.QMessageBox()
        choice=msbox.warning(self,'ok',"This button doesn't do anything!!!")


        if choice == QtGui.QMessageBox.No:
            print('nanan')
        else:
            print('Bye')
            self.settings.setValue("size",self.size());
            self.settings.setValue("pos",self.pos());
            sys.exit()

def main():

    app = QtGui.QApplication(sys.argv)
    translator = QtCore.QTranslator()
    translator.load("~/basefiles/translations/qt_pt.qm")
    app.installTranslator(translator)
    ex = MainWindow()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()  
python pyqt4 qmake qtcore qt-linguist
2个回答
0
投票

当您使用 self.tr 时,您必须传递字符串,而不是 QString 变量,在您的情况下它会发生变化:

self.myButtons.setText(self.tr(QtCore.QString('yes')))

self.myButtons.setText(self.tr("yes"))

然后再次运行一切。


0
投票

这是一个老问题了,但我希望像我一样来自搜索引擎的人都能得到他们想要的答案。

短暂尝试后,我发现在

.ts
中创建和更新
PyQt5
文件非常容易。

  1. 首先,您需要创建一个与 C++ Qt 中类似的
    .pro
    文件。例如,
SOURCES += /path/to/your/python_script \
           /other/python_script

TRANSLATIONS += /path/to/your/translation_file \
                /other/translation_file
  1. 使用命令
    pylupdate5
    生成
    .ts
    文件
pylupdate5 /path/to/your/pro_file

如果您想向

.ts
文件添加新翻译(例如,更改源代码),只需再次运行此命令即可。它将更新
.ts
文件,保留现有翻译。

  1. 如果要释放
    .ts
    文件,请使用命令
    lrelease-pro-qt5
lrelease-pro-qt5 /path/to/your/pro_file
© www.soinside.com 2019 - 2024. All rights reserved.