/ / Traduire standardButton dans QDialogButtonBox - internationalisation, pyqt, traduction

Traduire standardButton dans QDialogButtonBox - internationalisation, pyqt, traduction

j'utilise pyqt et designer. j'ai traduit toutes les chaînes de mon application avec self.tr () + pylupdate4 et lrelease

voici l'extrait de code dans mon 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)

J'utilise un QDialogButtonBox dans un QDialog avec un QtGui.QDialogButtonBox.Cancel et un QtGui.QDialogButtonBox.Ok

et les chaînes de ces boutons ne sont pas traduites. parce que pylupdate4 ne choisit aucune corde pour eux.

Ai-je manqué une étape de configuration dans mon application pour qu'elle soit traduite? Je ne comprends pas comment la chaîne pour les boutons standard de QDialogButtonBox sont supposés être traduits et ne peuvent pas trouver de doc à ce sujet.

Réponses:

10 pour la réponse № 1

Utilisez la méthode ci-dessous pour définir les boutons "texte:

buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Ok"));
buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));

puis lupdate .ts, ouvrez-le avec le linguiste et vous trouverez les chaînes.


3 pour la réponse № 2

Pour charger les traductions natives de QT de manière portable, vous pouvez utiliser l'appel de fonction suivant:

translator.load("qt_" + QLocale::system().name(),QLibraryInfo::location(QLibraryInfo::TranslationsPath));

Comme expliqué précédemment, les deux traducteurs (ou plus) constituent la méthode standard si vous souhaitez éviter la solution de contournement.


2 pour la réponse № 3

J'ai enfin trouvé quoi faire: de http://qt.nokia.com/developer/faqs/faq.2008-05-06.6265952148 et http://qt.nokia.com/developer/faqs/705

il me faut donc copier, par exemple en français, le qt_fr.qm que j'ai trouvé dans QTDIR / traductions (ici / usr / share / qt / translations) dans le répertoire de mon application et ajoutez

translator.load("qt_%s" % LOCALENAME)

ou même copier tout le fichier qt _ *. qm de QTDIR / traductions vraiment supporter le maximum de localités.

NON CELA NE FONCTIONNE PAS. Un seul des 2 fichiers est en cours de chargement. donc je ne peux "faire traduire ni ma chaîne ni la QDailogButtonBox.

Zut. cette chose me met dans les nerfs.


2 pour la réponse № 4

vous devez installer 2 traducteurs différents:

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_())

où i18n / i18n_ru_Ru.qm est le chemin de votre fichier i18n et qt_ru.qm a été copié à partir de usr / share / qt4 / translations (dans mon cas).


0 pour la réponse № 5

Du docs, vous devez créer l'objet traducteur avantles widgets d'application. Je ne peux pas être certain que c’est votre problème, puisque vous avez omis le code où vos widgets sont créés, mais assurez-vous de ne pas les créer avant le traducteur.


-1 pour la réponse № 6

Oui. juste en dessous de l'extrait que j'ai donné, je crée mon dialogue principal.

Le problème est que Qtranslator n'a pas pu traduireces boutons QDialogButtonBox car il n'y a pas de chaîne à traduire. donc ça doit être qt qui fait ce travail en interne. ou avec un mécanisme que je ne suis pas au courant.

voici un autre extrait de code généré par 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)

Comment la chaîne QtGui.QDialogButtonBox.Cancel peut être traduite lorsqu'il n'y a pas de chaîne dans le code ???

Est-ce parce que je ne crée pas de fenêtre principale et n'utilise que QDialog ??

Je ne peux pas commenter la réponse de swanson!