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

GTK+ avec Python Discussion :

Python3 + Gtk3 + Windows : Internationalisation de Glade


Sujet :

GTK+ avec Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Python3 + Gtk3 + Windows : Internationalisation de Glade
    Bonsoir à tou(te)s,

    Je vous écris ce message car je suis un peu désepéré. J'ai passé ma journée à chercher une solution pour avoir un fonctionnement multiplateforme de l'internationalisation des fichiers Glade.

    Le problème est simple, sur Linux un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    self.builder = Gtk.Builder()
    self.builder.set_translation_domain(MON_DOMAINE)
    fonctionne.

    Mais sur Windows, impossible d'avoir une traduction des fichiers Glade, alors que le reste fonctionne avec gettext.

    Sur beaucoup de forums ils indiquent qu'il faut utiliser le module locale avec Glade et la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    locale.bindtextdomain(MON_DOMAINE,MON_DOSSIER)
    . Le problème c'est que cette fonction n'existe plus !

    Pour l'instant j'en suis là :
    Sur windows mes fichiers mo sont localisé ici : C:\locale\fr\LC_MESSAGES

    Le code de mon fichier main est celui-ci :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    from gi.repository import Gtk, GObject, Gdk, GLib
    from src.gui.mainwindow import MainWindow
     
    import os
    import locale
    import os
    import sys
    import gettext
     
    ######
    # PubliPhoto version alpha 1.0
    # Créé par *******
    # Licence : GNU GPL v3 ou suppérieure
    # Contact : contacter [dot] oradisson [dot] fr
    ######
     
    # setup translation support
    if sys.platform.startswith('linux'):
        (lang_code, encoding) = locale.getlocale()
     
        LOCALE_DOMAIN = 'publiphoto'
        LOCALE_DIR = os.path.join(sys.prefix, 'share', 'locale')
     
        gettext.bindtextdomain(LOCALE_DOMAIN, LOCALE_DIR)   # (1)
        gettext.textdomain(LOCALE_DOMAIN)                   # (2)
        gettext.install(LOCALE_DOMAIN)                      # (3)
    else:
        os.environ['LC_MESSAGES'] = locale.getdefaultlocale()[0]
        APP_NAME = "publiphoto"
        local_path = os.path.realpath( os.path.dirname( sys.argv[0] ) )
        local_path = os.path.join( "C:/", 'locale' )
        print(local_path)
     
    # Récupère la langue du système.
        os.environ['LANGUAGE'] = 'fr_FR'  
        os.environ['LANG'] = 'fr_FR'
        os.putenv('fr_FR', 'LANG')
        print(locale.LC_ALL)
        locale.setlocale(locale.LC_ALL,'French')
        print(locale.getlocale())
        lc, encoding = locale.getlocale()
     
        gettext.bindtextdomain( APP_NAME, local_path )
        gettext.bind_textdomain_codeset(APP_NAME,"UTF-8")
        gettext.textdomain( APP_NAME )
     
    # On crée notre fonction de translation. J'imagine qu'il y a un lien entre 
    # entre la liste des langages et les deux lignes du dessus. 
        #lang = gettext.translation( APP_NAME, local_path, languages=[ lc ], fallback = True)
        #gettext.install(APP_NAME)
    #fallback = true évite qu'une Exception IOError sois relevée quand 
    # APP_NAME n'est pas trouvé.
     
    # Gtk.bindtextdomain(LOCALE_DOMAIN, LOCALE_DIR) # (4)
    # Gtk.textdomain(LOCALE_DOMAIN)                 # (5)
     
    # Set the current directory to match files
    os.chdir(os.path.dirname(os.path.abspath(__file__)))
     
    window = MainWindow()
    window.show_all()
     
     
    Gtk.main()
    Le code de mon fichier qui charge les fichiers glade est celui-ci :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    # -*- coding: utf-8 -*-
     
    from gi.repository import Gtk
    from src.tools import root_path
     
     
    class View(Gtk.Alignment):
        """
            This class define a view and a constructor
             which load a glade view and connect theses signals
        """
     
        def __init__(self,gladeFile,viewName):
            Gtk.Alignment.__init__(self)
     
            ## Load from Glade
            self.builder = Gtk.Builder()
            #self.builder.bindtextdomain('C:\locale','publiphoto')
            self.builder.set_translation_domain('publiphoto.mo')
            self.builder.add_from_file(gladeFile)
            self.builder.connect_signals(self)
            self.viewBox = self.builder.get_object(viewName)
     
            try:
                self.viewBox.unparent()
            except AttributeError as e:
                print(e)
            self.add(self.viewBox)
     
        def load_objects(self,object_liste):
            """
                Return a dictionary contains objects loaded
            """
            result = dict()
            for object in object_liste:
                result[object] = self.builder.get_object(object)
            return result
    Avez vous une idée de solution ?

    Merci d'avance.
    Olivier.

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour Araminas,
    ma réponse ne vous aidera pas puisqu'elle vient après deux ans, mais elle pourra aider d'autres utilisateurs.
    La solution pour activer les traductions par gettext dans Gtk sous Python s'appelle : elib_intl.
    Vous trouverez facilement le fichier avec Google.

    Voici le code utilisé pour activer cela sous Python 2.7 pour le logiciel pdfbooklet
    Gtk est chargé par : pygi-aio-3.10.2-win32_rev18-setup.exe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from gi.repository import Gtk, Gdk
    import cairo
     
    import locale       #for multilanguage support
    import gettext
    import elib_intl
    elib_intl.install("pdfbooklet", "share/locale")
    Si vous utilisez Gtk 3, vous recevrez sans doute une erreur sur la ligne 447 :
    libintl = cdll.intl
    Cette erreur vous dit : module introuvable.
    Cela vient de ce que dans Gtk3, le nom de la dll a changé, ce n'est plus intl.dll. Dans l'installation Pygi précitée, ce nom est libintl-8. Il faut simplement remplacer la ligne fautive par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    libintl = cdll.LoadLibrary("libintl-8.dll")
    Si vous voulez un exemple complet, pdfBooklet 2.4.0 en est un (version pas encore en ligne au moment où j'écris).

    Bonne chance et merci à Dieter Verfaillie qui a écrit elib_intl.

Discussions similaires

  1. Glade sous windows
    Par ZbergK dans le forum GTK+ avec Python
    Réponses: 3
    Dernier message: 12/05/2009, 16h38
  2. [gnat-glade/Linux] Cross-compiler pour Windows
    Par xiosis dans le forum Ada
    Réponses: 1
    Dernier message: 06/02/2009, 07h23
  3. glademm sur windows ? ou glade et lib en c++?
    Par lezurp dans le forum GTK+
    Réponses: 3
    Dernier message: 21/01/2009, 19h19
  4. Réponses: 9
    Dernier message: 27/02/2007, 15h29
  5. glade et internationalisation
    Par magic.goby dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 23/11/2006, 12h06

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