关于Qt国际化的问题
Questions about Qt internationalization
我无法弄清楚如何使用 Qt 为 python 应用程序创建翻译文件。
我正在使用 python 2.7、Qt 版本 5.9.1 和 PyQt4 4.12.1 在 OSX 10.11.6 上创建我的 GUI。
现在我只想翻译我的代码中的几句话。
据我了解,我必须使用 QtLinguist 打开一个 .ts 文件,翻译单词并创建一个 .qm 文件,然后供 python 使用。
从 Qt Linguist page 我知道我需要使用一个 .pro 项目文件,它将被 pylupdate4
等读取...
现在,我要创建一个 .pro 文件吗?
我试过了 运行:
$ qmake -project myfile.py
$ pylupdate4 myfile.pro -ts file.ts
但生成的 .pro 文件无法被 pylupdate4
(XML error: Parse error at line 1, column 1 [...]
)
读取
从这个Tutorial,我试过:
$ 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()
当您使用 self.tr 时,您必须传递字符串,而不是 QString 变量,在您的情况下它会更改:
self.myButtons.setText(self.tr(QtCore.QString('yes')))
到
self.myButtons.setText(self.tr("yes"))
然后 运行 一切又来了。
我无法弄清楚如何使用 Qt 为 python 应用程序创建翻译文件。
我正在使用 python 2.7、Qt 版本 5.9.1 和 PyQt4 4.12.1 在 OSX 10.11.6 上创建我的 GUI。
现在我只想翻译我的代码中的几句话。
据我了解,我必须使用 QtLinguist 打开一个 .ts 文件,翻译单词并创建一个 .qm 文件,然后供 python 使用。
从 Qt Linguist page 我知道我需要使用一个 .pro 项目文件,它将被 pylupdate4
等读取...
现在,我要创建一个 .pro 文件吗?
我试过了 运行:
$ qmake -project myfile.py
$ pylupdate4 myfile.pro -ts file.ts
但生成的 .pro 文件无法被 pylupdate4
(XML error: Parse error at line 1, column 1 [...]
)
从这个Tutorial,我试过:
$ 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()
当您使用 self.tr 时,您必须传递字符串,而不是 QString 变量,在您的情况下它会更改:
self.myButtons.setText(self.tr(QtCore.QString('yes')))
到
self.myButtons.setText(self.tr("yes"))
然后 运行 一切又来了。