Multi Language Tout simple

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Multi Language Tout simple

Message 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
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Multi Language Tout simple

Message 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 ;)
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Multi Language Tout simple

Message 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.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Multi Language Tout simple

Message 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.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Répondre