IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Traduction des éléments natifs (QMessageBox, etc). Je n'arrive pas à le faire avec PyQt5 [QtCore]


Sujet :

PyQt Python

  1. #1
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 631
    Points : 30 865
    Points
    30 865
    Billets dans le blog
    1
    Par défaut Traduction des éléments natifs (QMessageBox, etc). Je n'arrive pas à le faire avec PyQt5
    Bonjour à tous

    Tout est dans le titre. Je n'arrive pas à utiliser le fichier standard de traduction pour que les éléments natifs de Qt5 soient en français. Pourtant j'y arrivais avec Qt4

    Exemple Qt4 qui fonctionne : une fenêtre principale qui appelle un QMessageBox avec Oui/Non
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #!/usr/bin/env python3
    # coding: utf-8
     
    from sip import *
    from PyQt4.QtCore import *	
    from PyQt4.QtGui import *
     
    # Application principale
    class QtAppli(QApplication):
    	def __init__(self, argv):
    		super(QtAppli, self).__init__(argv)
     
    		trans=QTranslator()
    		self.installTranslator(trans)
    		trans.load(
    			"qt_%s" % QLocale.system().name(),
    			QLibraryInfo.location(QLibraryInfo.TranslationsPath),
    		)
    		self.__mainWid=QtMainWindow()
    	# __init__()
     
    	def run(self):
    		self.__mainWid.show()
    		self.exec_()
    	# run()
    # class QtAppli
     
    # Fenêtre principale
    class QtMainWindow(QMainWindow):
    	def __init__(self, *args, **kwargs):
    		super(QtMainWindow, self).__init__(*args, **kwargs)
     
    		self.setCentralWidget(QWidget(self))
    		self.setAttribute(Qt.WA_DeleteOnClose)
    		mainLayout=QVBoxLayout(self.centralWidget())
    		mainLayout.addWidget(
    			QPushButton("Quitter", clicked=self.close),
    			0,
    		)
     
    		QMessageBox.question(
    			self,
    			"Confirmation",
    			"Oui ou non ?",
    			QMessageBox.Yes|QMessageBox.No,
    		)
    	# __init__()
    # class QtMainWindow
     
    if __name__ == "__main__":
    	import sys
    	QtAppli(sys.argv).run()

    Le même exemple porté sous PyQt5
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    #!/usr/bin/env python3
    # coding: utf-8
     
    from sip import *
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
     
    # Application principale
    class QtAppli(QApplication):
    	def __init__(self, argv):
    		super(QtAppli, self).__init__(argv)
     
    		trans=QTranslator()
    		self.installTranslator(trans)
    		trans.load(
    			"qt_%s" % QLocale.system().name(),
    			QLibraryInfo.location(QLibraryInfo.TranslationsPath),
    		)
    		self.__mainWid=QtMainWindow()
    	# __init__()
     
    	def run(self):
    		self.__mainWid.show()
    		self.exec_()
    	# run()
    # class QtAppli
     
    # Fenêtre principale
    class QtMainWindow(QMainWindow):
    	def __init__(self, *args, **kwargs):
    		super(QtMainWindow, self).__init__(*args, **kwargs)
     
    		self.setCentralWidget(QWidget(self))
    		self.setAttribute(Qt.WA_DeleteOnClose)
    		mainLayout=QVBoxLayout(self.centralWidget())
    		mainLayout.addWidget(
    			QPushButton("Quitter", clicked=self.close),
    			0,
    		)
     
    		QMessageBox.question(
    			self,
    			"Confirmation",
    			"Oui ou non ?",
    			QMessageBox.Yes|QMessageBox.No,
    		)
    	# __init__()
    # class QtMainWindow
     
    if __name__ == "__main__":
    	import sys
    	QtAppli(sys.argv).run()

    J'ai tout tenté. J'ai d'abord pensé que le fichier "/usr/share/qt5/translations/qt_fr.qm" était corrompu mais même en récupérant celui de Qt4 (j'ai les deux versions sur ma machine) et en le positionnant dans Qt5 ça ne change rien (inversement en copiant le fichier de Qt5 dans Qt4, ça fonctionne toujours preuve que ça ne vient pas du fichier). J'ai tenté de mettre le self.installTranslator(trans) après le trans.load(). J'ai aussi regardé le retour de ces deux fonctions (il est à True donc je pense qu'elles font bien leur job) mais rien n'y fait : mes boutons restent désespérément en anglais.

    Pourtant j'ai fidèlement traduit en PyQt l'exemple C++ qui se trouve dans la doc Qt5...

    Merci de vos avis.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Voilà comment je fais (Python 3.5, PyQt5 5.9):

    Au lancement de la fenêtre principale:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        app = QtWidgets.QApplication(sys.argv)
        ...
        locale = QtCore.QLocale.system().name()
        translator = QtCore.QTranslator()
        reptrad = QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath)
        translator.load("qtbase_" + locale, reptrad) # qtbase_fr.qm
        app.installTranslator(translator)
        ...
    Avec ça, les boites de dialogue parlent francais.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 631
    Points : 30 865
    Points
    30 865
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    translator.load("qtbase_" + locale, reptrad) # qtbase_fr.qm
    Ok, j'ai compris (tu remarqueras que ton code est exactement semblable au mien à l'exception du nom du fichier => tu utilises "qtbase_" alors que j'utilise "qt_").
    Or moi je n'ai pas de fichier nommé "qtbase_fr.qm". J'ai par exemple un fichier nommé "qt_fr.qm", un autre nommé "qt_de.qm", un autre nommé "qtbase_de.qm" et bien d'autres mais pas de qtbase_fr.qm".
    Et si je remplace "qt_fr.qm" par "qt_de.qm" ou bien par "qtbase_de.qm" j'ai mes boites en allemand. Mais pas en français.

    Citation Envoyé par tyrtamos Voir le message
    (Python 3.5, PyQt5 5.9):
    Moi je suis sous PyQt 5.3.2. Ceci explique sans doute cela.

    Merci de ta réponse. Je n'ai pas la solution mais je sais que ce n'est pas la faute de mon code qui est correct ; et que je l'aurai un jour.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. traduction des QMessageBox dans le Main
    Par wassimb dans le forum Qt
    Réponses: 5
    Dernier message: 31/10/2009, 12h58
  2. Réponses: 22
    Dernier message: 18/05/2007, 18h46
  3. Réponses: 2
    Dernier message: 04/05/2007, 11h55
  4. Je n'arrive pas à faire des boucles dans un répertoire
    Par padodanle51 dans le forum Linux
    Réponses: 4
    Dernier message: 04/05/2006, 19h04
  5. [TShellListView] Tri des éléments
    Par M.Dlb dans le forum Composants VCL
    Réponses: 4
    Dernier message: 16/12/2003, 23h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo