Identifiant
Mot de passe
Loading...
Mot de passe oublié ?
Je m'inscris ! (gratuit)
Forums
Tutoriels
FAQ
Blogs
Chat
Newsletter
Emploi
Études
Droit
Club
DI/DSI Solutions d'entreprise
DI/DSI Solutions d'entreprise
Big Data
BPM
Business Intelligence
Data Science
ERP / PGI
CRM
SAS
SAP
Sécurité
Droit informatique et entreprise
OnlyOffice
Cloud
Cloud Computing
Oracle
Azure
IBM Cloud
IA
Intelligence artificielle
ALM
ALM
Agile
Merise
UML
Microsoft
Microsoft
.NET
Microsoft Office
Visual Studio
Windows
ASP.NET
TypeScript
C#
VB.NET
Azure
Java
Java
Java Web
Spring
Android
Eclipse
NetBeans
Dév. Web
Développement et hébergement Web
AJAX
Apache
ASP
CSS
Dart
Flash / Flex
JavaScript
NodeJS
PHP
Ruby & Rails
TypeScript
Web sémantique
Webmarketing
(X)HTML
EDI
EDI
4D
Delphi
Eclipse
JetBrains
LabVIEW
NetBeans
MATLAB
Scilab
Visual Studio
WinDev
Visual Basic 6
Lazarus
Qt Creator
Programmation
Programmation
Débuter - Algorithmique
2D - 3D - Jeux
Assembleur
C
C++
C#
D
Go
Kotlin
Objective C
Pascal
Perl
Python
Rust
Swift
Qt
XML
Autres
SGBD
SGBD & SQL
4D
Access
Big Data
Data Science
DB2
Firebird
InterBase
MySQL
NoSQL
PostgreSQL
Oracle
Sybase
SQL-Server
MongoDB
Office
Microsoft Office
Access
Excel
Word
Outlook
PowerPoint
SharePoint
Microsoft Project
OpenOffice & LibreOffice
OnlyOffice
Mobiles
Mobiles
Android
iOS
Systèmes
Systèmes
Windows
Linux
Arduino
Hardware
HPC
Mac
Raspberry Pi
Réseau
Green IT
Sécurité
Systèmes embarqués
Virtualisation
TUTORIELS
FAQ
WEBINAIRES
LIVRES
TÉLÉCHARGEMENTS
SOURCES
DÉBATS
WIKI
DICO
HUMOUR
Voir le texte source
De WikiDeveloppez.
pour
Avoir les QMessageBox traduits
Aller à :
Navigation
,
Rechercher
[mise à jour: 13/2/2015] == 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". 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" == 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: <tt>from PyQt4 import QtCore, QtGui # ... # ...ici la classe Fenetre # ... if __name__ == "__main__": # lancement de l'application 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" == 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'exécutable ne trouve plus les fichiers de traduction de la locale: ils n'ont pas été recopiés, et même s'ils l'ont été, leurs adresses ont changé. 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": Pour le setup.py de cx_freeze (en plus des éventuelles autres copies à faire par l'option "include_files"): <tt>if sys.platform == "win32": repexe = os.path.dirname(sys.executable) # repertoire de python.exe 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 elif sys.platform == "linux2": includefiles += [(r"/usr/share/qt4/translations", "translations")] # repertoire pour les traductions else: pass # cas du Mac OSX non traité ici </tt> 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): <tt>[Paths] Translations = translations </tt> Et là, ça marche dans tous les cas. Pour la version Windows traitées par cx_freeze, ça continue à fonctionner avec le programme d'installation "innosetup" (qui va vraiment très bien avec cx_freeze!). A noter que je ne me suis pas contenté de la traduction en français: c'est la "locale" du PC qui sera utilisée! 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, ...).
Revenir à la page
Avoir les QMessageBox traduits
.
Affichages
Page
Discussion
Voir le texte source
Historique
Outils personnels
Identification
Navigation
Accueil
Modifications récentes
Toutes les pages
Aide
Forum Wiki
Rechercher
Boîte à outils
Pages liées
Suivi des liens
Importer un fichier
Pages spéciales
Contacter
le responsable de la rubrique Accueil
Nous contacter
Participez
Hébergement
Publicité / Advertising
Informations légales
© 2000-2024 - www.developpez.com