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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

changer de langue via un menu avec Tkinter et Gettext


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 57
    Par défaut changer de langue via un menu avec Tkinter et Gettext
    Bonjour,

    en consultant la doc de gettext, je vois que l'on peut changer la langue utilistaur à la volée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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()
    J'ai donc fait un test avec une fenêtre Tkinter et un menu:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    from __future__ import unicode_literals
    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()
    print _('Repertoire') # CONTROLE: Ca affiche 'Repertoire'
     
    def langue():
        lang2 = gettext.translation('messages', localdir, languages=['nl'])
        lang2.install()
        print _('Repertoire') #CONTROLE: Ca affiche 'REP' donc c'est traduit
     
    root = Tk()
    root.title(_("Repertoire"))
    mainmenu = Menu(root)
    menuFichier = Menu(mainmenu)
    menuFichier.add_command(label=_("Encoder"))    #Ajouter la commande
    menuFichier.add_command(label=_("Quitter"), command = quitte)
    menuFichier.add_command(label=_("Changer la langue"), command= langue)
    mainmenu.add_cascade(label = _("Programme"), menu=menuFichier)
    root.config(menu = mainmenu)
     
    root.mainloop()
    Mais volià, si dans la console, celà fonctionne bien (mes prints de contrôles), dans ma fenêtre là ca fonctionne pas du tout, mes chaines de carractères restent en fr

    Comment puis-je faire pour que mes chaînes soient traduites dans Tk ?

    Merci d'avance,

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 696
    Par défaut
    Salut,
    "a la volee" est quelque peu optimiste: une fois que la chaine de caractere a ete assigne dans la langue X, elle ne switchera pas "automagiquement" si on change la langue.

    Comment avez vous definit _ ?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 57
    Par défaut
    _ est définit par défaut à l'utilisation de .install()
    en fait celà fonctionne, tout ce que je passe en console est traduit, mais les labels dans Tkinter restent figés, ainsi, si le tritre de ma fenêtre est "Repertoire", dans mes fichiers .po et .mo, la traduction est "REP".
    Si en cliquant la langue Nl dans le menu je, fait dans ma fonction langue() , le retour console est bien "REP", mais le titre de ma fenêtre reste "Repertoire".

    En clair, je cherche à savoir comment faire pour afficher une fenetre Tkinter multilingue suivant le choix de l'utilisateur (en choisissant sa langue dans un menu).

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 696
    Par défaut
    Normalement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    menuFichier.add_command(label=_("Encoder"))    #Ajouter la commande
    mettra dans label le retour de getext("Encoder").
    Si vous faites:
    juste avant le .add_command, vous obtenez quoi?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 57
    Par défaut
    justement, là c'est bien traduit...
    Et si je lance une nouvelle fenetre dans la fonction langue (), le gui est bien traduit aussi.
    par contr j'ai essayé root.update (), mais là pas de résultat.
    je pensais aussi passer par un fichier de configuration, mais l'application est destinée à etre mise en réseau. je vais voir la possibilité de reconnaître l'utilisateur et appeler le fichier de traduction via ses données personnelles dans une bdd...

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 57
    Par défaut
    sinon, je vais aller voir du côté de pyqt via eric4 et qtlinguist....

Discussions similaires

  1. Comment changer la langue d'un menu Struts via un bouton
    Par OdréCobel dans le forum Struts 2
    Réponses: 4
    Dernier message: 28/02/2012, 17h17
  2. changer la langue avec les raccourcis de clavier
    Par cherifa_m dans le forum Debian
    Réponses: 3
    Dernier message: 30/05/2008, 16h42
  3. [ZedGraph] changer la langue du menu
    Par afrodje dans le forum VB.NET
    Réponses: 5
    Dernier message: 21/03/2008, 11h15
  4. Comment changer la langue avec 2 TMainMenu ?
    Par aliwassem dans le forum Composants VCL
    Réponses: 1
    Dernier message: 20/01/2006, 18h50
  5. [Swing] Changer le contenu d'un Container via un menu
    Par TheSeb dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 07/12/2004, 23h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo