Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | |||
cx_freeze_pyqt4_traductions [2011/02/25 08:34] tyrtamos |
cx_freeze_pyqt4_traductions [2015/02/13 10:04] (Version actuelle) tyrtamos |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Avoir les QMessageBox traduits (Yes/No => Oui/Non ), même avec cx_freeze ====== | ====== Avoir les QMessageBox traduits (Yes/No => Oui/Non ), même avec cx_freeze ====== | ||
+ | [mise à jour le 13/2/2015] | ||
===== Problématique ===== | ===== Problématique ===== | ||
Ligne 12: | Ligne 13: | ||
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, ce qui donnera pour le code de démarrage standard: | + | Voilà le code à insérer |
<code python> | <code python> | ||
Ligne 28: | Ligne 29: | ||
locale = QtCore.QLocale.system().name() | locale = QtCore.QLocale.system().name() | ||
translator = QtCore.QTranslator () | translator = QtCore.QTranslator () | ||
- | translator.load(QtCore.QString(" | + | translator.load(" |
- | QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath)) | + | QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath)) |
app.installTranslator(translator) | app.installTranslator(translator) | ||
Ligne 39: | Ligne 40: | ||
</ | </ | ||
- | ===== Solution pour un exécutable " | + | ===== Solution pour un exécutable " |
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! | ||
- | Pourquoi? Parce que l' | + | Pourquoi? Parce que l' |
- | + | ||
- | L' | + | |
- | + | ||
- | * sous Windows, ici: %%C: | + | |
- | + | ||
- | * sous Linux (Ubuntu 10.10), ici: %%/ | + | |
La solution est dès lors évidente: | La solution est dès lors évidente: | ||
- | * 1- pendant le traitement par cx_freeze, il faut copier | + | * 1- pendant le traitement par cx_freeze, il faut recopier |
- | + | ||
- | * 2- il faut tester si on est avec l' | + | |
- | + | ||
- | * 3- il ne reste plus qu'à donner le bon chemin des fichiers de traduction à " | + | |
- | + | ||
- | Voilà le code que ça donne: | + | |
\\ | \\ | ||
- | Pour le setup.py de cx_freeze (tenir compte | + | Pour le setup.py de cx_freeze (en plus des éventuelles |
<code python> | <code python> | ||
- | if sys.platform == "linux2": | + | if sys.platform == "win32": |
- | | + | |
- | elif sys.platform == "win32": | + | reppyqt4 = os.path.join(repexe, |
- | | + | includefiles += [(os.path.join(reppyqt4, |
+ | elif sys.platform == "linux2": | ||
+ | | ||
else: | else: | ||
- | # mettre | + | |
- | pass | + | |
</ | </ | ||
+ | |||
+ | * 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: | ||
\\ | \\ | ||
- | Et pour le code de démarrage de l'application: | + | Fichier qt.conf, à placer simplement au même niveau que l'exécutable (exe sous Windows): |
- | < | + | < |
- | from PyQt4 import QtCore, QtGui | + | [Paths] |
- | # ... | + | Translations |
- | # ...ici la classe Fenetre | + | </ |
- | # ... | + | |
- | if __name__ | + | |
- | + | ||
- | # lancement de l' | + | |
- | app = QtGui.QApplication(sys.argv) | + | |
- | # | ||
- | # pour assurer la traduction automatique du conversationnel à la locale | ||
- | locale = QtCore.QLocale.system().name() | ||
- | translator = QtCore.QTranslator () | ||
- | if os.path.splitext(sys.argv[0])[1] in [' | ||
- | # exécution par l' | ||
- | reptrad = unicode(QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath)) | ||
- | else: | ||
- | # exécution de la version exécutable après cx_freeze (ou équivalent): | ||
- | #les fichiers de traduction doivent se trouver dans " | ||
- | reptrad = unicode(" | ||
- | translator.load(QtCore.QString(" | ||
- | app.installTranslator(translator) | ||
- | |||
- | # | ||
- | # lancement de la fenetre | ||
- | fen = Fenetre() | ||
- | fen.show() | ||
- | sys.exit(app.exec_()) | ||
- | </ | ||
- | |||
- | \\ | ||
Et là, ça marche dans tous les cas. | Et là, ça marche dans tous les cas. | ||
- | Pour la version Windows | + | Pour la version Windows |
A noter que je ne me suis pas contenté de la traduction en français: c'est la " | A noter que je ne me suis pas contenté de la traduction en français: c'est la " | ||
+ | |||
+ | A noter aussi que ce qui précède pour le répertoire " | ||
\\ | \\ |