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

Avoir les QMessageBox traduits

De WikiDeveloppez.

(Différences entre les versions)
(Nouvelle page : '''' Avoir les QMessageBox traduits (Yes/No => Oui/Non ), même avec cx_freeze '''' [mise à jour le 13/2/2015] ===== Problématique ===== Vous avez fait un joli programme en PyQt...)
Version actuelle (13 février 2015 à 10:20) (voir la source)
 
-
'''' Avoir les QMessageBox traduits (Yes/No => Oui/Non ), même avec cx_freeze ''''
 
-
[mise à jour le 13/2/2015]
+
[mise à jour: 13/2/2015]
-
===== Problématique =====
+
== Problématique ==
Vous avez fait un joli programme en PyQt4 qui utilise un QMessageBox du genre: "voulez-vous vraiment quitter?" avec les boutons Oui/Non. Mais ces boutons persistent à vous dire "Yes/No".  
Vous avez fait un joli programme en PyQt4 qui utilise un QMessageBox du genre: "voulez-vous vraiment quitter?" avec les boutons Oui/Non. Mais ces boutons persistent à vous dire "Yes/No".  
Même si tout le monde comprend, c'est irritant, et ça donne une impression "pas fini" à votre application!!
Même si tout le monde comprend, c'est irritant, et ça donne une impression "pas fini" à votre application!!
-
===== Solution pour l'interpréteur "normal" =====
+
== Solution pour l'interpréteur "normal" ==
La solution est: il faut dire à PyQt4 qu'il doit traduire, mais il faut aussi lui dire où il doit trouver les fichiers de traduction selon la locale du PC.
La solution est: il faut dire à PyQt4 qu'il doit traduire, mais il faut aussi lui dire où il doit trouver les fichiers de traduction selon la locale du PC.
Voilà le code à insérer (Python 3), ce qui donnera pour le code de démarrage standard:
Voilà le code à insérer (Python 3), ce qui donnera pour le code de démarrage standard:
-
<code python>
+
<tt>from PyQt4 import QtCore, QtGui
-
from PyQt4 import QtCore, QtGui
+
# ...
-
# ...
+
# ...ici la classe Fenetre
-
# ...ici la classe Fenetre
+
# ...
-
# ...
+
if __name__ == "__main__":
-
if __name__ == "__main__":
+
      
      
-
    # lancement de l'application  
+
    # lancement de l'application  
-
    app = QtGui.QApplication(sys.argv)
+
    app = QtGui.QApplication(sys.argv)
 +
    #
 +
    # pour assurer la traduction automatique du conversationnel à la locale
 +
    locale = QtCore.QLocale.system().name()
 +
    translator = QtCore.QTranslator ()
 +
    translator.load("qt_" + locale, 
 +
          QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath))
 +
    app.installTranslator(translator)
 +
    #
 +
    # lancement de la fenetre
 +
    fen = Fenetre()
 +
    fen.show()
 +
    sys.exit(app.exec_())
 +
</tt>
-
    #========================================================================
+
== Solution pour un exécutable "cx_freeze" ==
-
    # pour assurer la traduction automatique du conversationnel à la locale
+
-
    locale = QtCore.QLocale.system().name()
+
-
    translator = QtCore.QTranslator ()
+
-
    translator.load("qt_" + locale, 
+
-
          QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath))
+
-
    app.installTranslator(translator)
+
-
 
+
-
    #========================================================================
+
-
    # lancement de la fenetre
+
-
    fen = Fenetre()
+
-
    fen.show()
+
-
    sys.exit(app.exec_())
+
-
</code>
+
-
 
+
-
===== Solution pour un exécutable "cx_freeze" =====
+
Vous avez fait ce qui précède, et vous essayez de faire une version autonome de votre programme grâce à cx_freeze, transportée dans un Windows ou Linux sans PyQt4. Et là, ça ne marche plus!
Vous avez fait ce qui précède, et vous essayez de faire une version autonome de votre programme grâce à cx_freeze, transportée dans un Windows ou Linux sans PyQt4. Et là, ça ne marche plus!
La solution est dès lors évidente:
La solution est dès lors évidente:
-
  * 1- pendant le traitement par cx_freeze, il faut recopier le contenu du répertoire cherché (répertoire translations de PyQt4 à trouver en fonction de votre OS) dans un sous-répertoire "translations". Cela peut se faire automatiquement en utilisant l'option "include_files":
+
1- pendant le traitement par cx_freeze, il faut recopier le contenu du répertoire cherché (répertoire translations de PyQt4 à trouver en fonction de votre OS) dans un sous-répertoire "translations". Cela peut se faire automatiquement en utilisant l'option "include_files":
-
\\
 
Pour le setup.py de cx_freeze (en plus des éventuelles autres copies à faire par l'option "include_files"):
Pour le setup.py de cx_freeze (en plus des éventuelles autres copies à faire par l'option "include_files"):
-
<code python>
+
<tt>if sys.platform == "win32":
-
if sys.platform == "win32":
+
    repexe = os.path.dirname(sys.executable)  # repertoire de python.exe
-
    repexe = os.path.dirname(sys.executable)  # repertoire de python.exe
+
    reppyqt4 = os.path.join(repexe, r"Lib\site-packages\PyQt4")  # repertoire de PyQt4
-
    reppyqt4 = os.path.join(repexe, r"Lib\site-packages\PyQt4")  # repertoire de PyQt4
+
    includefiles += [(os.path.join(reppyqt4, "translations"), "translations")]  # recopie du repertoire pour les traductions
-
    includefiles += [(os.path.join(reppyqt4, "translations"), "translations")]  # recopie du repertoire pour les traductions
+
elif sys.platform == "linux2":
-
elif sys.platform == "linux2":
+
    includefiles += [(r"/usr/share/qt4/translations", "translations")]  # repertoire pour les traductions
-
    includefiles += [(r"/usr/share/qt4/translations", "translations")]  # repertoire pour les traductions
+
else:
-
else:
+
    pass  # cas du Mac OSX non traité ici
-
    pass  # cas du Mac OSX non traité ici
+
</tt>
-
</code>
+
-
  * 2- il faut donner la possibilité au programme exécutable de trouver les fichiers de traduction: on fait ça facilement avec un simple fichier qt.conf qui donne les bonnes adresses:
+
2- il faut donner la possibilité au programme exécutable de trouver les fichiers de traduction: on fait ça facilement avec un simple fichier qt.conf qui donne les bonnes adresses:
-
\\
 
Fichier qt.conf, à placer simplement au même niveau que l'exécutable (exe sous Windows):
Fichier qt.conf, à placer simplement au même niveau que l'exécutable (exe sous Windows):
-
<code>
+
<tt>[Paths]  
-
[Paths]  
+
Translations = translations
-
Translations = translations
+
</tt>
-
</code>
+
Et là, ça marche dans tous les cas.  
Et là, ça marche dans tous les cas.  
A noter aussi que ce qui précède pour le répertoire "translations" (recopie et adresse) vaut aussi pour le répertoire "plugins" qui permettra, entre autres, à votre exécutable de retrouver les pilotes d'accès aux systèmes de gestion de base de données (sqlite3, mysql, ...).
A noter aussi que ce qui précède pour le répertoire "translations" (recopie et adresse) vaut aussi pour le répertoire "plugins" qui permettra, entre autres, à votre exécutable de retrouver les pilotes d'accès aux systèmes de gestion de base de données (sqlite3, mysql, ...).
-
 
-
\\
 
-
Amusez-vous bien!
 

Version actuelle

Contacter le responsable de la rubrique Accueil