在QDialogBu​​ttonBox中翻译standardButton

时间:2010-02-28 12:36:28

标签: internationalization pyqt translation

我正在使用 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 中使用 QDialogBu​​ttonBox ,其中包含 QtGui.QDialogBu​​ttonBox.Cancel QtGui.QDialogBu​​ttonBox.Ok

并且这些按钮中的字符串未翻译。因为 pylupdate4 会为它们选择任何字符串。

我是否错过了应用中的配置步骤以便翻译? 我不明白 QDialogBu​​ttonBox 的标准按钮的字符串是如何翻译的,并且无法找到有关该文档的文档。

6 个答案:

答案 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.6265952148http://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个文件中的一个。所以我不能翻译我的字符串或QDailogBu​​ttonBox。

该死。这件事让我神经紧张。

答案 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无法翻译那些QDialogBu​​ttonBox按钮,因为没有要翻译的字符串。所以它必须是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.QDialogBu​​ttonBox.Cancel字符串如何翻译???

是因为我没有创建主窗口而只使用QDialog ??

我无法评论斯旺森的回答!