Page 1 sur 1

Multi Language Tout simple

Publié : mar. 02/sept./2014 6:23
par microdevweb
Image
Voila un module tout simple pour faire vos programme multi-langue

Le code du module

Code : Tout sélectionner

;////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;TRS 
;Module de traduction
;Vers 1.0 
;© AllDev /MicrodevWeb  2014
;////////////////////////////////////////////////////////////////////////////////////////////////////////////////
DeclareModule Trs
      Declare$ Send(Txt$)
      Declare SetLanguage(Language)
      Declare  GetLanguage()
EndDeclareModule 

Module Trs
      Global MyLanguage
     Procedure SetLanguage(Language)
           MyLanguage=Language
     EndProcedure
      Procedure.i  GetLanguage()
            ProcedureReturn MyLanguage
      EndProcedure
      Procedure$ Send(Txt$)
            Protected TxtReturn$
            TxtReturn$=StringField(Txt$,MyLanguage,"@")
            ProcedureReturn TxtReturn$
      EndProcedure
EndModule
Le code pour le teste

Code : Tout sélectionner

Enumeration FormWindow
      #MainForm
EndEnumeration

Enumeration FormGadget
      #Text_1
      #Text_2
      #Str1
      #Str2
      #Text_3
      #Str3
      #Text_4
      #Str3_Copy1
      #Text_5
      #Str3_Copy1_Copy1
      #Button_0
      #Button_1
      #Button_3
      #Button_4
      #Button_5
EndEnumeration

Enumeration FormFont
      #Font_MainForm_0
EndEnumeration


#FR=1
#EN=2
#NL=3


LoadFont(#Font_MainForm_0,"Arial", 12)


Procedure OpenMainForm(x = 0, y = 0, width = 380, height = 320)
      OpenWindow(#MainForm, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
      TextGadget(#Text_1, 15, 5, 225, 25, Trs::Send("Nom du client@Customer Name@Naam van de klant"))
      SetGadgetFont(#Text_1, FontID(#Font_MainForm_0))
      TextGadget(#Text_2, 15, 65, 225, 25, Trs::Send("Adresse@Address@Adres"))
      SetGadgetFont(#Text_2, FontID(#Font_MainForm_0))
      StringGadget(#Str1, 15, 30, 225, 25, "")
      StringGadget(#Str2, 15, 100, 225, 25, "")
      TextGadget(#Text_3, 15, 125, 225, 25, Trs::Send("Code postal@zip code@Postcode"))
      SetGadgetFont(#Text_3, FontID(#Font_MainForm_0))
      StringGadget(#Str3, 15, 150, 225, 25, "")
      TextGadget(#Text_4, 15, 185, 225, 25, Trs::Send("Localité@locality@lokalisatie"))
      SetGadgetFont(#Text_4, FontID(#Font_MainForm_0))
      StringGadget(#Str3_Copy1, 15, 210, 225, 25, "")
      TextGadget(#Text_5, 15, 245, 225, 25, Trs::Send("Pays@country@land"))
      SetGadgetFont(#Text_5, FontID(#Font_MainForm_0))
      StringGadget(#Str3_Copy1_Copy1, 15, 270, 225, 25, "")
      ButtonGadget(#Button_0, 260, 30, 100, 25, Trs::Send("Valider@Submit@valideren"))
      ButtonGadget(#Button_1, 260, 60, 100, 25, Trs::Send("Fermer@Close@Close"))
      ButtonGadget(#Button_3, 290, 100, 40, 25, "FR")
      ButtonGadget(#Button_4, 290, 140, 40, 25, "EN")
      ButtonGadget(#Button_5, 290, 180, 40, 25, "NL")
EndProcedure
Global gEvent
Trs::SetLanguage(#FR)
OpenMainForm()
Repeat 
      gEvent=WaitWindowEvent()
      Select gEvent  
            Case #PB_Event_Gadget
                  Select EventGadget()
                        Case #Button_3
                              Trs::SetLanguage(#FR)
                              CloseWindow(#MainForm)
                              OpenMainForm()
                        Case #Button_4
                              Trs::SetLanguage(#EN)
                              CloseWindow(#MainForm)
                              OpenMainForm()
                        Case #Button_5
                              Trs::SetLanguage(#NL)
                              CloseWindow(#MainForm)
                              OpenMainForm()
                  EndSelect
      EndSelect
Until gEvent=#PB_Event_CloseWindow

Re: Multi Language Tout simple

Publié : mar. 02/sept./2014 8:30
par djes
Tiens c'est pas bête ! Et puis c'est un bon exemple d'utilisation des modules !
Par contre, ce n'est pas très extensible car ça oblige à modifier le code et à recompiler pour tout nouveau langage. Mais j'aime bien ;)

Re: Multi Language Tout simple

Publié : mar. 02/sept./2014 8:44
par Ar-S
L'idée du module est sympa en effet.
Je préfère tout de même un fichier pref. C'est simple à mettre en place et à modifier sans avoir à recompiler le prog.

Re: Multi Language Tout simple

Publié : mar. 02/sept./2014 11:27
par microdevweb
Bonjour Djes,
djes a écrit :Tiens c'est pas bête ! Et puis c'est un bon exemple d'utilisation des modules !
Par contre, ce n'est pas très extensible car ça oblige à modifier le code et à recompiler pour tout nouveau langage. Mais j'aime bien ;)

Tu ajoute autant de langue que tu veux

Code : Tout sélectionner

#FR=1
#EN=2
#NL=3
#ES=4
#GE=5
Tu la défini avec

Code : Tout sélectionner

Trs::SetLanguage(#FR)
Et quant tu crée ta fenêtre tu sépare les différentes langues par un @ et fait comme ceci

Code : Tout sélectionner

TextGadget(#Text_4, 15, 185, 225, 25, Trs::Send("Français@Anglais@Néerlandais@Espagnol@Allemand"))
A chaque changement de langue tu réutilise par exemple

Code : Tout sélectionner

Trs::SetLanguage(#ES)
La seule contrainte, il faut fermer et ré ouvrir la fenêtre

--> Ar-S tu peux sauver le langage dans le fichier préférence tu récupère le langage courant comme ceci

Code : Tout sélectionner

myLanguage=Trs::GetLanguage()
J'aurais peu faire plus compliqué avec un fichier texte et les différentes langues, et puis reprendre l'id de la fenêtre du gadget et modifier automatiquement, j'ai simplement trouvé cette méthode simple, quant à la contrainte de ré ouvrir la fenêtre. Si le choix de la langue est dans le menu, toutes les fenêtres ouvertes après aurons la bonne langue.