Page 1 sur 2

[R] Gui Multilanguage par choix d'un fichier langue

Posté : mer. 11 févr. 2009 18:55
par pierrotm777
Bonjour,

Je voudrais ajouter dans un programme déjà créé par ce forum , Merci Tlem, la possibilité multilanguage .

Je voudrais qu'un fichier language french.lng contienne les valeurs des GUICtrlCreateButton et des GUICtrlCreateLabel.
ainsi en créant un fichier english.lng ou spain.lng ou german.lng avec les textes traduits et dans le même ordre le GUI pourrais
passer d'un language à un autre .

Code : Tout sélectionner

$Annuler = GUICtrlCreateButton("[color=#FF0000]Annuler[/color]", 392, 296, 75, 25)
$Group1 = GUICtrlCreateGroup(" [color=#FF0000]Radars[/color] ", 8, 20, 297, 305)
$Lb_RF = GUICtrlCreateLabel("[color=#FF0000]Radars fixes (RF):[/color]", 16, 39, 200, 20)
$Lb_RM = GUICtrlCreateLabel("[color=#FF0000]Radars mobiles (RM):[/color]", 16, 95, 200, 20)
$Lb_RFR = GUICtrlCreateLabel("[color=#FF0000]Radars feu rouge (RFR):[/color]", 16, 159, 270, 20)
$Lb_ZD = GUICtrlCreateLabel("Radars zones dangereuse (ZD):", 16, 223, 270, 20)
$Cb_Fusion = GUICtrlCreateCheckbox("[color=#FF0000]Concaténer les fichiers :[/color]", 16, 287, 185, 17)
$Group2 = GUICtrlCreateGroup(" [color=#FF0000]Options[/color]", 312, 20, 241, 169)
$Lb_Minhdg = GUICtrlCreateLabel("[color=#FF0000]MINHDG :[/color]", 327, 75, 72, 20)
$Lb_Maxhdg = GUICtrlCreateLabel("[color=#FF0000]MAXHDG :[/color]", 327, 110, 76, 20)
$Lb_Distance = GUICtrlCreateLabel("[color=#FF0000]DISTANCE :[/color]", 327, 145, 88, 20)
$Lb_Unites = GUICtrlCreateLabel("[color=#FF0000]UNITES :[/color]", 327, 40, 68, 20)
GUICtrlSetData(-1, "Miles|Feet|Yards|Kilometers|Meters", "Kilometers")
Alors french.lng contiendrais ces lignes:
Annuler
Radars
Radars fixes (RF):
Radars mobiles (RM):
Radars feu rouge (RFR):
Radars zones dangereuse (ZD):
Concaténer les fichiers :
Options
MINHDG :
DISTANCE :
UNITES :

Il deviendrais ainsi facile pour chaque nouvel utilisateur de traduire le programme dans sa langue en créant son propre fichier .lng .

Merci de vore aide à nouveau

Re: [..] Gui Multilanguage par choix d'un fichier langue

Posté : mer. 11 févr. 2009 21:02
par jbnh
Utiliser seulement FileReadLine
Annuler serait simplement $line de $line = FileReadLine("francais.ing", 1)

Re: [..] Gui Multilanguage par choix d'un fichier langue

Posté : mer. 11 févr. 2009 21:15
par arrkhan
Plop,

cette solution pourrait éventuellement également te satisfaire http://www.autoitscript.fr/forum/viewto ... =11&t=1400

Re: [..] Gui Multilanguage par choix d'un fichier langue

Posté : mer. 11 févr. 2009 21:39
par Tlem
Une autre solution consisterait à mettre le fichier langage en tableau :

Code : Tout sélectionner

#Include <File.au3>

_FileReadToArray("Frenc.lng", $aLang)
Je passe bien évidement la question de la vérification de la présence du fichier et du nombre de ligne.

Ensuite le script deviendrait :

Code : Tout sélectionner

$Annuler = GUICtrlCreateButton($aLang[1], 392, 296, 75, 25)
$Group1 = GUICtrlCreateGroup($aLang[2], 8, 20, 297, 305)
$Lb_RF = GUICtrlCreateLabel($aLang[3], 16, 39, 200, 20)
...
Par sécurité, je rajouterais éventuellement la création du tableau pour une langue principale dans le script lui même (Au cas ou les fichier de langue serait endomagé).

Code : Tout sélectionner

If @error Then
    Dim $aLang[12] = [11, "Annuler", "Radars", "Radars fixes (RF):", "Radars mobiles (RM):", _
    "Radars feu rouge (RFR):", "Radars zones dangereuse (ZD):", "Concaténer les fichiers :", _ 
    "Options", "MINHDG :", "DISTANCE :", "UNITES :"]
EndIf

Re: [..] Gui Multilanguage par choix d'un fichier langue

Posté : jeu. 12 févr. 2009 15:09
par pierrotm777
Bonjour Tlem,

J'ai travaillé sur votre proposition qui me semblait plus pratique .
Merci tout de même à jbnh et arrkhan pour leur propositions .


Je bloque un peu sur le menu configuration où je souhaiterais voir se lister
tous les fichiers disponibles au niveau @ScriptDir et pouvoir en choisir un
ainsi que la mise en variable du fichier langue choisi.


Voilà mon programme actuel . J'y joinds les 2 premiers fichiers langue .


► Afficher le texte

Merci d'avance

Pierre

Re: [..] Gui Multilanguage par choix d'un fichier langue

Posté : jeu. 12 févr. 2009 21:51
par Tlem
Pour gérer la partie du multi-langage, plusieurs solutions vont s'offrir à vous.

1 - Vous traduisez ce que vous connaissez dans des langues principale et vous intégrez la gestion de ces langues directement dans le script.
Lorsqu'un utilisateur d'un autre pays dont la langue n'a pas été incluse vous envoi le fichier .lng, vous rajouterez aux fil des versions la gestion de ces nouveaux langage.

2 - Vous êtes super prévoyant, et vous créez dans votre script la gestion des langues inscrites sur ce lien en déterminant à l'avance le nom de chaque fichier de langue.
Vous pouvez aussi vous contenter de traduire quelques langues principales par rapport à la colonne symboles du tableau.

3 - Vous vous la jouez à la Microsoft, et vous gérez les fichiers de langue par leur code tel qu'inscrit dans le lien que je vous ait donné précédemment (040c pour le Français standard).
Ce qui donnerais pour nous : 040C.lng

4 (ma préférée et la plus simple) - Vous créez dans votre script un lien vers le fichier Lang.lni ou Lang.lng ou encore csv2gpsexec.lng qui ce trouverait dans le répertoire du script.
Ensuite dans ce même répertoire, un répertoire Lang dans lequel chaque utilisateur peut piocher le fichier de langue qu'il copiera et renommera à la place du fichier de langue principale.
Vous pouvez aussi ajouter dans votre interface la gestion de cette manipulation, en demandant à l'utilisateur quel fichier utiliser (sélection de fichier) et faire la manipulation à ça place.

PS: Inutile de recopier tout votre code pour parler de la gestion des langages.

Re: [..] Gui Multilanguage par choix d'un fichier langue

Posté : ven. 13 févr. 2009 18:48
par pierrotm777
Bonjour Tlem,
Et merci encore pour votre patience à mon égard.

Je pense avoir choisi la 4ème solution et c'est ce que j'ai tenté de reproduire dans le script ,
mais je butte au niveau du listage des fichiers .lng dans le menu (Configuration-->Langue-->Langue1.lng,Langue2.lng) et l'attribution d'un de ces fichiers comme la langue à prendre en compte .
Autrement le reste semble fonctionner hormis ma fonction _DoIt2 qui ne me restitue pas ce que j'attends .

Re: [..] Gui Multilanguage par choix d'un fichier langue

Posté : ven. 13 févr. 2009 23:02
par Tlem
Pour la partie langue, il y à plusieurs solutions, mais je vais aller au plus simple.

Vous pourriez utiliser la fonction _FileListToArray pour lister les fichier *.lng du répertoire Lang.
Ensuite avec le tableau obtenu, vous faites une boucle de lecture de chaque élément que vous ajoutez dans un Combo, ou dans le sous menu de la config.
Après, selon la sélection, vous copiez le fichier en question sous le nom default.lng.
Après au choix, fermeture puis relance du programme, ou alors mise à jour de l'affichage des contrôles dans l'interface (dans ce cas créez une fonction qui affiche ces contrôles, pour pouvoir l'appeler par la suite plus facilement).

J'ai survolé votre code et j'ai remarqué dés le début pas mal d'erreurs.
1 - dans l'onglet N°1, dans la partie options, la première ligne devrait être Unités, et la dernière devrait être Distance. :roll:

2 - Ligne 48, il y à ceci :

Code : Tout sélectionner

Global $softName = "GCS Search 1.1"
:shock: :shock: :shock:

3 - Dans la partie Load Interface language, vous déclarez un chemin avec fichier générique, ensuite vous vérifiez si le fichier existe par une fonction avec création du fichier de langue par défaut si celui-ci n'existe pas, puis vous déclarez une variable en vue de l'utiliser pour un tableau, et enfin vous lisez le fichier dans le tableau ... :? Whaaaouuuu.

J'aurais plutôt fait ceci :

Code : Tout sélectionner

Dim $fileLanguagePath = @ScriptDir & "\default.lng"

Dim $aLang[16] = [15, "A Propos", "Configuration" , "Langue", "Annuler", "Radars", "Radars fixes", "Radars mobiles", _
    "Radars feu rouge", "Radars zones dangereuse", "Concaténer les fichiers :", _
    "Options", "MINHDG :", "MAXHDG" ,"DISTANCE :", "UNITES :"]

If Not FileExists($fileLanguagePath) Then 
    _FileWriteFromArray($fileLanguagePath, $aLang, 1)
    MsgBox(16, $softName, "Aucun fichier langue disponible" & @CR & @CR & "Le fichier de langue par défault à été crée.")
EndIf

If not _FileReadToArray($fileLanguagePath, $alang) Then
    MsgBox(16, "Erreur", "Impossible de lire le fichier language ...")
    Exit
EndIf
et virer les fonctions ExistFile et LanguageDefaut.

Re: [..] Gui Multilanguage par choix d'un fichier langue

Posté : ven. 13 févr. 2009 23:37
par Tlem
Bon, j'ai cherché un peut, et voici ce que je peut vous proposer pour le choix de la langue :

Après la ligne :

Code : Tout sélectionner

$Choix_Langage = GUICtrlCreateMenu($aLang[3], $Settings)
ajoutez ceci :

Code : Tout sélectionner

$aListlang = _FileListToArray(@ScriptDir, "*.lng")
Dim $EventID[$aListlang[0]+1]
For $i = 1 to $aListlang[0]
    $EventID[$i] = GUICtrlCreateMenuItem($aListlang[$i], $Choix_Langage)
Next
ensuite dans la boucle d'attente, ajoutez ce case à la fin, juste avant le EndSwitch :

Code : Tout sélectionner

        Case Else
            If $nMsg <> 0 Then 
                For $j = 1 to UBound($EventID) - 1
                    If $nMsg = $EventID[$j] Then 
                        $NewLang = GUICtrlRead($EventID[$j], 1)
                        FileCopy($NewLang, $fileLanguagePath, 1)
                        ShellExecute(@ScriptFullPath)
                        Exit
                    EndIf
                Next
            Endif
 
Pensez à modifier vos fichier french.lng et english.lng pour qu'ils contiennent le même nombre d'éléments que dans le tableau $aLang déclaré en début de script. ;)

Re: [..] Gui Multilanguage par choix d'un fichier langue

Posté : sam. 14 févr. 2009 11:27
par pierrotm777
Merci Tlem,

Je vais essayer tout ça .

Pierre

Re: [..] Gui Multilanguage par choix d'un fichier langue

Posté : sam. 14 févr. 2009 18:11
par pierrotm777
J'ai , pense bien avoir ajouté les lignes conseillées , le programme se lance bien , je vois bien dans configuration autant de langues que de fichiers .lng ,
mais à la sélection d'un des fichiers langue , le programme sort de lui-même .

Par ailleurs, je pense avoir réussi à créer un fichier langue par defaut en cas absence de fichier .lng , voir code :
► Afficher le texte

Re: [..] Gui Multilanguage par choix d'un fichier langue

Posté : sam. 14 févr. 2009 22:08
par Tlem
Dans le code que je vous ait donné, la création du fichier de langue par défaut si aucun fichier n'est présent est déjà pris en compte par cette ligne :

Code : Tout sélectionner

Dim $aLang[16] = [15, "A Propos", "Configuration" , "Langue", "Annuler", "Radars", "Radars fixes", "Radars mobiles", _
    "Radars feu rouge", "Radars zones dangereuse", "Concaténer les fichiers :", _
    "Options", "MINHDG :", "MAXHDG" ,"DISTANCE :", "UNITES :"]
De plus effectivement, lors de la sélection d'une autre langue, le programme ce re-lance (si il est compilé) et sort de sa première occurance.
Donc pour tester le changement de langue, compilez le script.

Re: [..] Gui Multilanguage par choix d'un fichier langue

Posté : lun. 16 févr. 2009 12:39
par pierrotm777
Bonjour Tlem,

Une fois compilé , effectivement , le programme se relance mais ne lis pas le fichier .lng choisi !

Serait-il possible d'avoir la liste des langues qui se déploie à côté de Langue et non en dessous ?

Merci d'avance ,

Pierre

Re: [..] Gui Multilanguage par choix d'un fichier langue

Posté : lun. 16 févr. 2009 19:33
par Tlem
Placez le script en fichier joint pour que je puisse voir.

Re: [..] Gui Multilanguage par choix d'un fichier langue

Posté : lun. 16 févr. 2009 20:19
par pierrotm777
Ci-joint le programme en cours

Pierre

Re: [..] Gui Multilanguage par choix d'un fichier langue

Posté : lun. 16 févr. 2009 20:55
par Tlem
Corrections N°1 :
Remplacez

Code : Tout sélectionner

$Choix_Langage = GUICtrlCreateMenuItem($aLang[3], $Settings)
 
par

Code : Tout sélectionner

$Choix_Langage = GUICtrlCreateMenu($aLang[3], $Settings)
 
Correction N°2 :
Vous n'avez pas tenu compte de mes recommandations sur la création du fichier de langue or la partie du code qui fait le choix de la langue ce base sur un fichier qui est sensé s'appeler default.lng.
Dans la première partie de votre code vous écrivez :

Code : Tout sélectionner

Global $fileLanguagePath = @ScriptDir & "\*.lng"
or le code du case que je vous ait fait rajouter attend ceci :

Code : Tout sélectionner

Dim $fileLanguagePath = @ScriptDir & "\default.lng"
donc cela ne peut fonctionner.
Vous devez utiliser un langage dont le nom de fichier est différent d'un fichier langage .lng et adapter la variable du FileCopy pour que le nom soit correcte.

Correction N°3 :
Pour écrire un fichier de langue, au lieu de faire ceci :

Code : Tout sélectionner

    FileWriteLine($fileEN, "About" & @CRLF)
    FileWriteLine($fileEN, "Settings" & @CRLF)
    FileWriteLine($fileEN, "Language" & @CRLF)
    FileWriteLine($fileEN, "Cancel" & @CRLF)
    FileWriteLine($fileEN, " Speedcam " & @CRLF)
    FileWriteLine($fileEN, "Speedcam (RF):" & @CRLF)
    FileWriteLine($fileEN, "Speedcam Mobiles (RM) :" & @CRLF)
    FileWriteLine($fileEN, "Speedcam RedLight (RFR) :" & @CRLF)
    FileWriteLine($fileEN, "Caution Zones (ZD) :" & @CRLF)
    FileWriteLine($fileEN, "Concatenation All Files" & @CRLF)
    FileWriteLine($fileEN, " Options " & @CRLF)
    FileWriteLine($fileEN, "MINHDG :" & @CRLF)
    FileWriteLine($fileEN, "MAXHDG :" & @CRLF)
    FileWriteLine($fileEN, "DISTANCE :" & @CRLF)
    FileWriteLine($fileEN, "UNITS :" & @CRLF)
faites plutôt ceci :

Code : Tout sélectionner

    FileWrite($fileEN, "About" & @CRLF & _
    "Settings" & @CRLF & _
    "Language" & @CRLF & _
    "Cancel" & @CRLF & _
    " Speedcam " & @CRLF)
    "Speedcam (RF):" & @CRLF & _
    "Speedcam Mobiles (RM) :" & @CRLF & _
    "Speedcam RedLight (RFR) :" & @CRLF & _
    "Caution Zones (ZD) :" & @CRLF & _
    "Concatenation All Files" & @CRLF & _
    " Options " & @CRLF & _
    "MINHDG :" & @CRLF & _
    "MAXHDG :" & @CRLF & _
    "DISTANCE :" & @CRLF & _
    "UNITS :" & @CRLF)
Cela fera une seule écriture fichier au lieu de 15. 8)

Pour les reste, pas le temps de voir plus loin, car je vais me mettre à la fonction de filtrage des radars. :wink:

Re: [..] Gui Multilanguage par choix d'un fichier langue

Posté : mar. 17 févr. 2009 19:03
par pierrotm777
Fantastique Tlem ,

C'est exactement ce que je souhaitais .

C'est fou ce que l'on peu apprendre ici.

Juste un détail , domage que l'on vois defaut.lng listé avec les autre fichiers mais
cela ne me dérange pas plus que cela .

Merci

Re: [R] Gui Multilanguage par choix d'un fichier langue

Posté : mar. 17 févr. 2009 20:49
par Tlem
Pour ne pas voir le fichier default.lng, vous pouvez rajouter ce traitement :

Code : Tout sélectionner

For $i = ubound($aListlang)-1 To 1 Step - 1
    If $aListlang[$i] = "default.lng" Then _ArrayDelete($aListlang, $i)
Next
après la ligne

Code : Tout sélectionner

$aListlang = _FileListToArray(@ScriptDir, "*.lng")
 

Re: [R] Gui Multilanguage par choix d'un fichier langue

Posté : jeu. 19 févr. 2009 16:17
par pierrotm777
Bonjour Tlem ,

Aprés ajout des lignes recommandées j'obtient une erreur :
► Afficher le texte

Code : Tout sélectionner

C:\tmp\AutoIt\Csv2Gpsexec\csv2gpsexec_v1.3.au3 (83) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
$EventID[$i] = GUICtrlCreateMenuItem($aListlang[$i], $Choix_Langage)
$EventID[$i] = GUICtrlCreateMenuItem(^ ERROR
->16:13:10 AutoIT3.exe ended.rc:1
+>16:13:12 AutoIt3Wrapper Finished
>Exit code: 1    Time: 1.794

Re: [R] Gui Multilanguage par choix d'un fichier langue

Posté : sam. 21 févr. 2009 10:00
par Tlem
Probablement parce que lors de votre test vous n'avez que le fichier default.lng.
Il faut évidement que les fichiers de langue soient présents (au moins 1) pour que ça fonctionne.