Gambas France BETA


Pas de compte ? Incription

Actualiser dynamiquement un executable Gambas

Ce sujet est résolu.

1
AuteurMessages
didier18#1 Posté le 30/5/2014 à 09:09:56
Bonjour

J'ai créé mon projet et je l'ai traduit, dans un menu se trouvent les langues disponible (jusque là tout va bien).
Je souhaiterai changer la langue du programme en cours d'utilisation sans avoir à redémarrer.
Comme par exemple lorsque l'on consulte l'aide de Gambas...
Si on change la langue, la traduction apparaît pratiquement instantanément.
Une explication, un bout de code, une idée ?
Merci d'éclairer ma lanterne.




Jack#2 Posté le 30/5/2014 à 09:32:57
bonjour,
j'imagine que tu stockes ta langue dans un fichier settings et que tu lis cette variable au lancement de ton programme ?
Je verrai la chose comme ça :
Tu fermes les connexions db, les tunnels ssh etc... (enfin, si tu en as)
Tu fermes ta fenêtre (me.close)
Tu kill ton menu (menu.delete)
Tu relances ton menu (Fmain.start)
Pour un code démocratique nationalisons Gambas.
spheris#3 Posté le 1/6/2014 à 14:31:04
Jack,
J'ai essayé ta solution.
sur le principe ça fonctionne, mais en pratique cela ne fonctionne pas.
Impossible de passer d'une traduction à l'autre.
Il faut savoir que la langue par défaut du projet est stockée dans le fichier caché .project dans le répertoire de l'application à la ligne : Language=en.
Même en changeant cette ligne par Language=fr et en redemarrant, rien ne fonctionne, ni en GB2, ni en GB3.
;)

Pourtant mes fichiers traductions ont été vérifiés par le traducteur GB et par le logiciel poedit.
rien n'y fait. Je ne comprends pas pourquoi....
didier18#4 Posté le 1/6/2014 à 23:43:19
Bonsoir à tous et toutes

Merci Jack et spheris pour vos réponses...
Visiblement ma question est plus ardue qu'elle ne paraît, quand à sa résolution...
Pour répondre à Jack : Oui je stocke les langues dans le fichier caché '.lang'.
A chaque fois 2 fichiers sont créés 'xx.mo' et 'xx.po'.
Ainsi pour une traduction en Anglais j'ai, dans le répertoire '.lang' le fichier 'MonProg-en.mo' et le fichier 'MonProg-en.po', pour une traduction Russe j'ai 'MonProg-ru.mo' et MonProg-ru.po' etc.
Et dans le répertoire des données de 'l'appli' les fichiers de translation 'MonProg-en-0.0.1.po' et 'MonProg-ru-0.0.1.po'
'MonProg' n'a pas de connexions db, mais effectivement c'est une éventualité à ne pas négliger.
Fermer la fenêtre de l'appli, 'killer' le menu et relancer 'Fmain' ne peut se faire qu'en mode 'création' pas dans l'exécutable (en tout cas ce n'est pas comme cela que je procède).

Lorsque la traduction est terminée et la langue attribuée (comme décrit dans l'aide), je l'enregistre et c'est apparemment à ce moment que Gambas créé les fameux fichier '.mo et .po' dans le répertoire '.lang'.
Il me suffit de lancer (en mode création) le projet pour qu'il apparaisse traduit.
Pour retrouver mon projet en Français, je supprime purement et simplement les 2 fichiers '.mo et .po' (a la limite et je l'ai déjà fait), on peut supprimer tout le contenu de '.lang' ça fonctionne également.

Ceci m'amène à la conclusion suivante :
'MonProg' (traduit ou pas) est lancé dans la langue utilisé par le système au moment de la création, puis la traduction est ajoutée (comme un maquillage) et ensuite on donne l'accès à l'utilisateur
D'ou ma question initiale... Comment changer la couleur de ce 'maquillage' sans avoir à redémarrer 'MonProg'.
Si je demande à Gambas de faire un 'exe', pardon un '.gambas', il le fait avec la traduction en cours.
Exemple : 'MonProg' en mode développement est traduit en Anglais, il est bien compilé en Anglais.
(Peut être un élément de réponse pour Sphéris).
Évidemment , je ne le sent pas, de faire une compilation de 'MonProg' pour chaque langue  !
Après recherches sur d'autres sites, le problème semble récurrent, les amis 'VB-iste' effleurent le sujet sans vraiment y apporter de réponse satisfaisante, Ajax et Symfony2 n'ont pas non plus trouvé la solution miracle...
Si ce n'est une résolution, j'ai trouvé un début d'explication sur ce lien :

http://fr.openclassrooms.com/informatique/cours/programmez-avec-le-langage-c/traduire-son-programme-avec-qt-linguist

Qu'en pensez-vous ?

bonne fin de soirée.

spheris#5 Posté le 2/6/2014 à 23:51:44
Bon problème résolu avec une solution parallèle:

dans le répertoire de l'applic je crée un fichier fr.txt, un fichier en.txt.
Chaque ligne correspond à une chaine de caractères.
Au lancement de mon prog je précharge chaque ligne dans un tableau(chaque colonne une langue, chaque ligne, une chaine de caractères.
Ainsi le simple numéro de colonne me permet de basculer d'une traduction à l'autre instantanément.
Je vais faire un tuto pour expliquer ce cheminement.
A bientôt.
;)
spheris#6 Posté le 3/6/2014 à 00:52:01
Voilà chose faite :
http://gambaslinux.eg2.fr/articles.php?lng=fr&pg=2105
;)
didier18#7 Posté le 3/6/2014 à 20:31:50
Bonsoir spheris et tout le monde.

Merci pour ta réponse et le 'tuto' qui va avec...
Même si elle est perfectible et je pense, redondante avec ce qui est précisé dans l'aide, au moins ta solution a le mérite d'exister.
Idéale pour un petit 'soft', ses limites seront vite atteinte pour les plus gros programmes avec plusieurs langues.
Elle sous-entend que tu dois fournir l'intégralité de ton code au traducteur (qui ne sera pas forcément toi) et là, bien que la plupart des 'appli' sont du domaine plus ou moins libre, j'ai des craintes quand à l'intégrité et au respect de la propriété intellectuelle.
Bon admettons...
Le traducteur, qui n'est pas forcément un programmeur chevronné, sera obligé de parcourir l'intégralité du code pour bien vérifier à ne rien oublier alors que la tache est largement simplifiée avec les fichiers contenus dans le répertoire '.lang' créé et 'maintenu' par le traducteur.
Ceci étant, ta solution ouvre de nouvelles perspectives pour le "tout en un" programme ET traduction incluse.
Je laisse le sujet ouvert pour l'instant (Grrrrr... il faudrait que l'on puisse mettre "partiellement résolu" ou "en cours de résolution" bref intermédiaire entre résolu et non résolu) car je reste persuadé qu'il y a d'autres astuces à trouver pour cette question...

Bonne soirée.


didier18#8 Posté le 4/6/2014 à 15:21:43
Un exemple sur la forge (le ComboBox du pauvre -modifié-)...

Je conseille vivement l'activation de qt4 afin que les petits drapeaux soient visible dans les menus.
Ils (les petits drapeaux) faciliteront le retour votre langue de prédilection.

On peut se faciliter la tache en faisant créer les fichiers à traduire par l'interface de Gambas3. De cette façon on s'y retrouve plus facilement pour mettre les mots à traduire dans les feuilles 'txt' des différentes traductions à mettre en corrélation avec la feuille de référence.

(Mise en application de ton idée spheris ;-)

Bonne fin de journée.
didier18#9 Posté le 17/6/2014 à 00:43:24
La question étant résolue, le 'post' l'est également...
valaquarus#10 Posté le 18/2/2018 à 16:30:54
-- Unus Ex Altera --
Voilà chose faite :
http://gambaslinux.eg2.fr/articles.php?lng=fr&pg=2105
;)


bonjour Spheris,
valaquarus du forum,
je voulais simplement récupérer les infos que tu avais gentillement déposées sur le lien précédent mais changement de site lien impossible (404). Question où récupérer ces infos?
Merci.

Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
gambix#11 Posté le 18/2/2018 à 18:45:23
Faire simple !le site est mort je crois
Moins de texte dans une signature c'est agrandir son espace.
didier18#12 Posté le 19/2/2018 à 18:12:17
Bonsoir

Oui l'ancien site n'est plus...
Je crois que spheris a tout remis ici.

Bonne soirée
valaquarus#13 Posté le 19/2/2018 à 19:18:03
-- Unus Ex Altera --Merci de vos réponses et du lien.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
1