Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / Affichage multilingue au choix dans une application Tkinter

Affichage multilingue au choix dans une application Tkinter

Remonter à Forum général Python

Affichage multilingue au choix dans une application Tkinter

Envoyé par brp-log le 18 Octobre 2013 à 07:12

Bonjour,

J'essaye d'internationnaliser une aplication Tkinter.

En consultant la doc, j'ai vu que l'on pouvait changer de langue via le code:

import gettext
 
lang1 = gettext.translation('myapplication', languages=['en'])
lang2 = gettext.translation('myapplication', languages=['fr'])
lang3 = gettext.translation('myapplication', languages=['de'])
 
# start by using language1
lang1.install()
 
# ... time goes by, user selects language 2
lang2.install()
 
# ... more time goes by, user selects language 3
lang3.install()



Reprenons  le code :

from Tkinter import *
import gettext
import os
 
pathname = os.path.dirname(sys.argv[0])
localdir = os.path.abspath(pathname) + "/locale"
 
 
lang1 = gettext.translation("messages", localdir, languages=['fr'])
lang1.install()
 
def langue():
    lang2 = gettext.translation("messages", localdir, languages=['nl'])
    lang2.install()
 
def retour_langue():
    lang1 = gettext.translation("messages", localdir, languages=['fr'])
    lang1.install()
 
def imprime():
    print _("Ceci est un test")
 
def quitter():
    print _("Quitter")
 
root = Tk()
root.title(_("Repertoire"))
mainmenu = Menu(root)
menuFichier = Menu(mainmenu)
menuFichier.add_command(label=_("Quitter"), command = quitter)
menuFichier.add_command(label="Changer de langue", command= langue)
menuFichier.add_command(label="revenir à la langue", command= retour_langue)
mainmenu.add_cascade(label = _("Programme"), menu=menuFichier)
root.config(menu = mainmenu)
 
bouton = Button(root, text = _("Imprimer"), command = imprime)
bouton.pack()
 
root.mainloop()

Dans mes fichiers .po et .mo, les chaînes de caractères traduites sont:

"Repertoire" : "AGENDA"
"Quitter" : "EXIT"
"Programme" : "APPLICATION"
"Imprimer" : "PRINT"
"Ceci est un test" : "TEST OK"

Quand je lance le programme, celui-ci démarre en français puisque:

lang1 = gettext.translation("messages", localdir, languages=['fr'])
lang1.install()

Dès lors, si je clique sur le bouton "Imprimer", le texte en console est

"Ceci est un test"

idem si dans le menu je clique sur "Quitter" j'obtiens

"Quitter"

Je vais dans le menu et je clique sur "Changer de langue", cela active :

menuFichier.add_command(label="Changer de langue", command= langue)
#...
def langue():
    lang2 = gettext.translation("messages", localdir, languages=['nl'])
    lang2.install()

si à présent je clique sur le bouton "Imprimer", j'obtiens

"TEST OK"

et de même si je clique sur "Quitter" dans le menu, j'obtiens bien

"EXIT"

Si à présent dans le menu je clique sur "Retour à la langue", je retrouve mes chaîne de caractères du départ ( "Ceci est un test" et "Quitter" ) en cliquant à nouveau sur le bouton ou dans le menu.

Donc, mes chaînes de caractères sont bel et bien traduites, cela fonctionne en mode console, mais l'affichage Tkinter reste désespérément en français.
J'ai bien essayé de faire un rafraîchissement de la fenêtre via root.update(), mais ça ne change rien.

Casse-tête  :(

Ma question est donc:

Comment parvenir à faire changer la langue d'affichage d'une application Tkinter au choix de l'utilisateur ?

 

Merci d'avance pour vos réponses.

Rendu par Ploneboard