Bonjour,
j'ai un logiciel en PyQt4 + python3.3 qui est au choix en français ou en anglais.
Pas de soucis pour charger la bonne langue au démarrage mais je souhaiterai laisser le choix de la langue via une combobox.
J'ai réussis à activer la traduction dynamique pour le contenu du fichier python créé par qtdesigner (via le lancement de la fonction retranslateUi).
Cela marche bien de ce fait seules les traductions du fichier graphique sont mise à jour.
Je présume qu'il faut relancer toutes les commandes ayant les textes à retraduire via une fonction aussi.
Pour une partie des textes ca peut le faire mais c'est dessuite plus compliqué lorsque des statusTip sont créés dans une fonction qui rempli un tableau.
Dans le cas present, on peut relancer la fonction (ce qui est vachement lourd pour juste changer quelques textes).
Dans le cas de statusbar.showMessage comment fait-on ? car il ne faut afficher forcement le texte dessuite...
Alors dans l'idée si on passe par un dictionnaire contenant tous les textes il suffirait de le traduire et le recharger non ?
J'ai vu qu'il ne pouvait etre utiliser tr() directement dans le dictionnaire et qu'il fallait utiliser QT_TR_NOOP() Dixit : http://qt-quarterly.developpez.com/q...ion-dynamique/
J'ai essayé mais lorsque je veux faire un tr() sur ma variable :
Alors voila donc mes questions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part TypeError: 'set' object is not subscriptable
- Est-il possible de traduire de façon automatique tous les textes ?
- Si non :
- Est-il possible de passer par un dictionnaire et est-ce plus simple ?
- Est-il possible de faire autrement ?
Merci à vous !
Je pense essayer d'en faire un article ou du moins compléter le lien ci-dessus avec un exemple ou plus des compléments d'informations.
EDIT :
Je me reponds à moi meme.
Apres plusieurs tests, il s'avere que l'utilisation d'une fonction pour traduire les textes du fichier python fonctionne.
il faut lancer cette fonction via la fonction __init__ par ex (ou le main).
Code : 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 def TextTraduction(self): # Dictionnaire des textes self.Traductions = {"DelTemp" : self.tr("New value for DelTemp option :"), "SubtitlesOpen" : self.tr("New value for SubtitlesOpen option :"), "Stereo" : self.tr("New value for Stereo option :"), "MKVLinkToggle" : self.tr("New value for MKVLinkToggle option :"), "MKVFolderToggle" : self.tr("New value for MKVFolderToggle option :"), "Reencapsulate" : self.tr("New value for Reencapsulate option :"), "VobsubToSrt" : self.tr("New value for VobsubToSrt option :"), "DtsToAc3" : self.tr("New value for DtsToAc3 option :"), "Ac3Kbits" : self.tr("New value for Ac3Kbits option :"), "Ac3Boost" : self.tr("New value for Ac3Boost option :"), "Language" : self.tr("New language :"), "MKVOpen" : self.tr("Select the MKV File"), "MKVFolder" : self.tr("Select the output folder") }
Et il faut relancer cette meme commande lors du changement de langue.
La traduction est appelée ainsi par ex : self.Traductions["SubtitlesOpen
Il semble pour le moment que tout fonctionne ainsi...
Partager