我正在使用 pyqt 和 designer 。我用self.tr()+ pylupdate4和lrelease
翻译了我的应用程序中的所有字符串这是我的main()中的代码片段:
app = QtGui.QApplication(sys.argv)
app.setApplicationName('Mental Calculation')
# initialize locale and load translation files if available
locale = QtCore.QLocale()
LOCALENAME = str(locale.system().name())
translator = QtCore.QTranslator()
translator.load("mentalcalculation_%s" % LOCALENAME)
app.installTranslator(translator)
我在 QDialog 中使用 QDialogButtonBox ,其中包含 QtGui.QDialogButtonBox.Cancel 和 QtGui.QDialogButtonBox.Ok
并且这些按钮中的字符串未翻译。因为 pylupdate4 会为它们选择任何字符串。
我是否错过了应用中的配置步骤以便翻译? 我不明白 QDialogButtonBox 的标准按钮的字符串是如何翻译的,并且无法找到有关该文档的文档。
答案 0 :(得分:10)
使用以下方法设置按钮的文字:
buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Ok"));
buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
然后lupdate .ts文件,用语言学家打开它,你就会找到字符串。
答案 1 :(得分:3)
为了以便携方式从QT加载本机翻译,您可以使用以下函数调用:
translator.load("qt_" + QLocale::system().name(),QLibraryInfo::location(QLibraryInfo::TranslationsPath));
如前所述,两个(或更多)翻译人员是您希望避免使用变通方法的标准方法。
答案 2 :(得分:2)
我终于找到了该怎么做: 来自http://qt.nokia.com/developer/faqs/faq.2008-05-06.6265952148和http://qt.nokia.com/developer/faqs/705
所以我只需要将我在 QTDIR / translations (此处为/ usr / share / qt / translations)中找到的qt_fr.qm复制到我的应用程序目录中并添加(例如法语)并添加
translator.load("qt_%s" % LOCALENAME)
甚至从 QTDIR / translations 复制所有qt _ * .qm文件,以真正支持最大区域设置。
这不工作。只加载了2个文件中的一个。所以我不能翻译我的字符串或QDailogButtonBox。
该死。这件事让我神经紧张。
答案 3 :(得分:2)
你应该安装2个不同的译员:
app = QtGui.QApplication(sys.argv)
translator_my = QtCore.QTranslator()
translator_my.load('i18n/i18n_' + QtCore.QLocale.system().name() + '.qm')
#translator_my.load('i18n/i18n_ru_Ru.qm')
app.installTranslator(translator_my)
translator_qt = QtCore.QTranslator()
translator_qt.load('i18n/qt_' + QtCore.QLocale.system().name()[:2] + '.qm')
#translator_qt.load('i18n/qt_ru.qm')
app.installTranslator(translator_qt)
myApp = MyMainWindow()
myApp.show()
sys.exit(app.exec_())
其中i18n / i18n_ru_Ru.qm是您的i18n文件的路径,qt_ru.qm是从usr / share / qt4 / translations(在我的情况下)中复制的。
答案 4 :(得分:0)
从docs开始,您必须在应用程序窗口小部件之前创建转换程序对象。我不能确定这是你的问题,因为你省略了创建小部件的代码,但要确保你没有在翻译之前创建它们。
答案 5 :(得分:-1)
是肯定的。就在我给出的片段下方,我创建了我的主对话框。
问题是Qtranslator无法翻译那些QDialogButtonBox按钮,因为没有要翻译的字符串。所以它必须是qt在内部完成这项工作。或者我不知道的某种机制。
这是pyuic4生成的另一段代码
self.buttonBox = QtGui.QDialogButtonBox(Dialog)
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.gridLayout.addWidget(self.buttonBox, 8, 0, 1, 1)
如果代码中没有字符串,QtGui.QDialogButtonBox.Cancel字符串如何翻译???
是因为我没有创建主窗口而只使用QDialog ??
我无法评论斯旺森的回答!