-
*.mo magiques ?
Salut les gtk de tous bords,
je voudrai savoir s'il il est possible de changer une variable d'environement pendant l'exécution d'un programme. :ptdr:
Bien sur que oui mais comment faire pour la faire prendre en compte par le processus sans l'arréter...??? :roll:
Je vais jouer cash: :weird:
Je désire pouvoir mettre a disposition le changement de langue d'un programme gtk+3.0 dans l'écran de configuration sans bousculer les paramètres de l'utilisateur.
La traduction en fr et de est déjà faites et j'aimerai en plus que l'interface par défaut soit en anglais.
Seulement quand ont change une variable d'environement pendant l'exécution d'un programme (La varaible $LANGUAGE) il faudrait aussi updater l'interface.
Cela soulève beaucoups de questions...!!!
Toute aide est la bienvenue.
Merci pour votre aide et vos précieuses réponses.
PS: J'ai Xenial (Ubuntu 16.04) et il semble que gtk dispose de nouveau compléments comme un canvas, un paquets de widgets d'extension, etc...
Je suis content que la communauté gtk s'active concernant gtk+3.0.
-
Bonjour,
changer une variable d'environnement pendant l'exécution d'un programme, oui c'est possible, y compris programmaticalement. La GLib fournit g_setenv et g_unsetenv pour ça. Ensuite pour changer la locale à la volée, je n'ai jamais essayé, mais regarde la page de manuel de setlocale: man 3 setlocale
setlocale change les paramètres de localisation (langue, séparateurs décimaux, etc.). Pou changer tout cela, je pense qu'il faut utiliser la variable d'environnement LC_ALL plutôt que LANGUAGE, ou à la rigueur LC_MESSAGES pour avoir au moins les traductions des .mo sans changer de séparateur décimal par exemple. En revanche je ne sais pas comment réagit GTK à un changement de locale en cours d'exécution. Normalement il appelle lui même setlocale dans gtk_init. Si on change la locale ensuite, soit il la verra, soit il ne le verra pas et tu auras sans doute autre chose à faire pour mettre à jour ton interface. Fais le test et dis nous ce qu'il se passe ;)
-
OKAY c'est fait,
il suffit de changer la variable $LANGUAGE en cours d'exécution, car je voulais faire un menu de choix de langue dans mon interface, applicable immédiatement, donc en itération.
Plus un obscur incrément d'une variable _nl_msg_cat_cntr définis dans loadmsgcat.c dont ont ne devraient se soucier.
Pour arriver a ce qui est dynamiquement charger (sélecteurs de fichiers, toplevel, etc...) change de langue, AUTOMATIQUEMENT.
Par contre tous ce qui a été définis aux démarrage reste dans la même langue.
Après ce qui se passe quand ont modifie $LANGUAGE dès le départ tel n'était pas mon but et je n'ai pas encore essayer.
Par contre ce passage citant cette technique est dit obsolète et a remanier...
Il faut dire aussi que le fait d'utiliser le GNU gettext joue un rôle et qu'il existe une variable AUTOMAKE.
Voilà je n'ai pas lu complètement le GNU gettext tools (GNU manual), car ce sujet est a mon goût personnel un peu rébarbatif.