Voici le gestionnaire de langues qui sera inclus dans SoundEditor. Il est écrit pour être utilisable dans n'importe quel programme.
Il vous permet de ne plus vous soucier du support multilangue. La seule contrainte et de rajouter BRTranslate("Machaine") à tous les endroits ou vous avez une chaine de caractère dans votre programme.
Les dictionnaires que vous créerez pour vos propres besoins peuvent être réutilisés dans n'importe quel autre programme et peuvent être échangés grâce à la fonction "Absorber un dictionnaire".
Comme ce programme s'utilise lui-même, il n'y a qu'à regarder le code pour avoir un exemple d'utilisation.
Le code se trouve à l'adresse suivante :
http://www.freesoundeditor.com/DownloadSrces.htm
BabelResolver
BabelResolver
Dernière modification par ZapMan le lun. 08/nov./2004 14:47, modifié 2 fois.
Tout obstacle est un point d'appui potentiel.
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
A vos souhaits, Version compatible PB 4.10
Code : Tout sélectionner
; BabelResolver by Zapman
;
; Gestion des langues pour la diffusion internationale de vos programmes PureBasic
; Réalisé avec PureBasic 3.90
; Pas de bibliothèque nécessaires
;
; L'intérêt principal de ce programme est de simplifier considérablement le support multilangue
;
; Il comprend une toute petite notice
;
;
;
If FileSize(GetCurrentDirectory()+"MonPianoDatas")=-1
CreateDirectory(GetCurrentDirectory()+"MonPianoDatas"):EndIf
If FileSize(GetCurrentDirectory()+"MonPianoDatas\Dictionnaries")=-1
CreateDirectory(GetCurrentDirectory()+"MonPianoDatas\Dictionnaries"):EndIf
#DataFolder = "MonPianoDatas\Dictionnaries"
#MaxTexts = 500
#IncludedLanguages="Français|English|Deutsch|" ; you can add more if you put
; more languages datas in datasection, but an easyest way to give more language
; possibility to your software is to give the "Dictionnary" folder to the user.
; (this folder will be automatically created by BabelResolver when you'll use it)
;
; Vous pouvez ajouter d'avantage de langues incluses si vous renseignez correctement
; la datasection, mais il y a une façon plus simple de transmettre des nouvelles langues
; à vos utilisateur : copiez simplement le contenu du dossier "Dictionnary"
; (ce dossier est créé automatiquement par BabelResolver quand vous l'utilisez)
; Vous pouvez démarrer avec une datasection vide.
;
#VK_ENTER = 13
Global SELanguage.s , mDictionnary$, mlanguage$
Global Dim LocalTexts$(#MaxTexts)
LocalTexts$(1)="EndText"
;
Declare.s BRTranslate (EnglishText$)
;Declare SetStringManipulationBufferSize(Bytes)
Declare.s ChooseLanguageWindow()
Declare LanguageWindow()
;
;
;
; Mettez les 5 lignes de programmes qui suivent sous forme de commentaires pour pouvoir
; utiliser ce fichier en tant que "IncludeFile" dans votre programme
;
; Comment the 5 following program lines to be able to use this file as an "IncludeFile"
; in your program.
;
;
;* ------------ FROM HERE - A PARTIR d'ICI ---------------
;
;
;SetStringManipulationBufferSize(500000)
;
SELanguage = ChooseLanguageWindow()
MessageRequester(BRTranslate("Introduction"),BRTranslate("IntroBabel"),0)
LanguageWindow()
End
;
;* ---------------- TO HERE - JUSQUE LA ------------------
;
;
; Ajoutez dans votre programme un appel à LanguageWindow() pour
; donner à l'utilisateur la possibilité de modifier les dictionnaires
;
; Add in your program a call to LanguageWindow() to allow users to
; modify dictionnaries.
;
; LA PROCEDURE SUIVANTE N'EST PLUS NECESSAIRE
; Procedure SetStringManipulationBufferSize(Bytes)
; ;Le truc de Fred pour augmenter la taille du buffer texte
; ;et éviter les plantage quand on manipule des grandes
; ;chaines de caractères.
; ;Fred tip to increase text buffer size and avoid problem
; ;when using big size strings
; PBStringBase.l = 0
; PBMemoryBase.l = 0
; !MOV eax, dword [PB_StringBase]
; !MOV [esp+4],eax
; !MOV eax, dword [PB_MemoryBase]
; !MOV [esp+8],eax
; HeapReAlloc_(PBMemoryBase, #GMEM_ZEROINIT, PBStringBase, Bytes)
; !MOV dword [_PB_StringBase],eax
; EndProcedure
;
Procedure.s GetAvailableLanguages ()
Languages$ = #IncludedLanguages
ExamineDirectory(0, #DataFolder, "")
While NextDirectoryEntry(0)
FName$ = DirectoryEntryName(0)
If FName$
If FindString(FName$,".",1)
FName$=Left(FName$,FindString(FName$,".",1)-1)
EndIf
If FName$
FName$+"|"
If FindString("|"+Languages$,"|"+FName$,1)=0
Languages$ + FName$
EndIf
EndIf
EndIf
Wend
ProcedureReturn Languages$
EndProcedure
;
Enumeration
#CChoose = 1000
#BCOK
EndEnumeration
;
Procedure.s ChooseLanguageWindow()
#LChoose = 30
Result$ = "Error"
If OpenWindow(#LChoose, 216, 0, 192, 71, "Choose your language", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#LChoose))
ComboBoxGadget(#CChoose, 8, 8, 176, 100)
Languages$ = GetAvailableLanguages ()
ct = 1
Repeat
LName$ = StringField(Languages$, ct, "|")
If LName$
AddGadgetItem(#CChoose,-1,LName$)
EndIf
ct + 1
Until LName$=""
SetGadgetState(#CChoose,0)
ButtonGadget(#BCOK, 104, 40, 80, 23, "OK")
QuitC = 0
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
If EventGadget() = #BCOK
QuitC = 1
EndIf
ElseIf Event = #PB_Event_CloseWindow
QuitC = 1
EndIf
Until QuitC
EndIf
Result$ = GetGadgetText(#CChoose)
CloseWindow(#LChoose)
EndIf
ProcedureReturn Result$
EndProcedure
;
Procedure.s GetDictionnary(Language.s)
; lit un dictionnaire enregistré sous forme de fichier
If Language=mlanguage$
Dictionnary$=mDictionnary$ ; To save time - Pour gagner du temps
Else
Dictionnary$ = "Error"
If Language
If FileSize(#DataFolder+"\"+Language+".txt")<1
If ReadFile(0,#DataFolder+"\English.txt") And FindString(#IncludedLanguages,Language,1)=0
Dictionnary$ =""
Repeat
RText$ = ReadString(0)
If RText$
Dictionnary$ + RText$ + Chr(13)+ Chr(10)
EndIf
Until RText$="" Or FindString(RText$,"EndText",1)
pos=FindString(Dictionnary$,"EndText[EOT]",pos)
If Pos
Dictionnary$=Left(Dictionnary$,pos-1)
EndIf
Dictionnary$ + "EndText[EOT]"
CloseFile(0)
Else
If Language = "Français"
Restore FraTexts
ElseIf Language = "Deutsch"
Restore DeuTexts
Else
Restore EngTexts
EndIf
Dictionnary$=""
Repeat
Read TTranslation$
Dictionnary$=Dictionnary$+TTranslation$+"[EOT]"
Until TTranslation$="EndText" Or TTranslation$=""
pos=FindString(Dictionnary$,"EndText[EOT]",pos)
If TTranslation$=""
Dictionnary$ + "EndText[EOT]"
EndIf
EndIf
If ExamineDirectory(0, #DataFolder, "") = 0
CreateDirectory(#DataFolder)
EndIf
If OpenFile(0,#DataFolder+"\"+Language+".txt")
WriteString(0,Dictionnary$)
CloseFile(0)
EndIf
Else
If ReadFile(0,#DataFolder+"\"+Language+".txt")
Dictionnary$ =""
Repeat
RText$ = ReadString(0)
If RText$
Dictionnary$ + RText$ + Chr(13)+ Chr(10)
EndIf
Until RText$="" Or FindString(RText$,"EndText[EOT]",1)
pos=FindString(Dictionnary$,"EndText[EOT]",pos)
If Pos
Dictionnary$=Left(Dictionnary$,pos-1)
EndIf
Dictionnary$ + "EndText[EOT]"
CloseFile(0)
EndIf
EndIf
EndIf
EndIf
mlanguage$=Language
mDictionnary$=Dictionnary$
ProcedureReturn Dictionnary$
EndProcedure
;
Procedure PutTextInOneDictionnary(Language.s,EnglishText$,LocalText$,InRef)
Result = 0
If Language And EnglishText$
Dictionnary$ = GetDictionnary(Language)
pos = FindString(LCase(Dictionnary$),"[eot]"+LCase(EnglishText$)+"|",1)
If pos = 0
If Left(LCase(Dictionnary$),Len("[eot]"+LCase(EnglishText$)+"|"))="[eot]"+LCase(EnglishText$)+"|"
pos = 1
EndIf
Else
pos+5
EndIf
If pos
If InRef = 0
pos2=FindString(Dictionnary$,"[EOT]",pos)
If pos2
Dictionnary$=Left(Dictionnary$,pos-1)+EnglishText$+"|"+LocalText$+"[EOT]"+Right(Dictionnary$,Len(Dictionnary$)-pos2-4)
EndIf
EndIf
Else
Result = 1
pos=FindString(Dictionnary$,"EndText[EOT]",pos)
If Pos
Dictionnary$=Left(Dictionnary$,pos-1)
EndIf
Dictionnary$ = Dictionnary$ + EnglishText$+"|"+LocalText$+"[EOT]EndText[EOT]"
EndIf
If OpenFile(0,#DataFolder+"\"+Language+".txt")
WriteString(0,Dictionnary$)
CloseFile(0)
EndIf
EndIf
mlanguage$=Language
mDictionnary$=Dictionnary$
ProcedureReturn Result
EndProcedure
;
Procedure PutTextInDictionnary(Language.s,EnglishText$,LocalText$)
If Language And EnglishText$
If LocalText$=""
LocalText$ = EnglishText$
EndIf
If PutTextInOneDictionnary(Language.s,EnglishText$,LocalText$,0)
ExamineDirectory(0, #DataFolder, "")
DirList$=""
While NextDirectoryEntry(0)
FName$ = GetFilePart(DirectoryEntryName(0))
If FName$<>Language+".txt"
If LCase(Right(FName$,4))=".txt"
FName$=Left(FName$,Len(FName$)-4)
DirList$=DirList$+FName$+"|"
EndIf
EndIf
Wend
ct = 1
Repeat
LName$ = StringField(#IncludedLanguages, ct, "|")
If LName$ And FindString(DirList$,LName$+"|",1)=0 And LName$<>Language
DirList$ + LName$+"|"
EndIf
ct + 1
Until LName$=""
ct = 1
While DirList$
pos=FindString(DirList$,"|",1)
FName$=Left(DirList$,pos-1)
DirList$=Right(DirList$,Len(DirList$)-pos)
PutTextInOneDictionnary(FName$,EnglishText$,EnglishText$,1)
Wend
EndIf
EndIf
EndProcedure
;
Procedure DelTextFromOneDictionnary(Language.s,EnglishText$)
Result = 0
If Language And EnglishText$
Dictionnary$ = GetDictionnary(Language)
pos = FindString(LCase(Dictionnary$),"[eot]"+LCase(EnglishText$)+"|",1)
If pos = 0
If Left(LCase(Dictionnary$),Len("[eot]"+LCase(EnglishText$)+"|"))="[eot]"+LCase(EnglishText$)+"|"
pos = 1
EndIf
Else
pos+5
EndIf
If pos
pos2=FindString(Dictionnary$,"[EOT]",pos)
If pos2
Dictionnary$=Left(Dictionnary$,pos-1)+Right(Dictionnary$,Len(Dictionnary$)-pos2-4)
EndIf
EndIf
If OpenFile(0,#DataFolder+"\"+Language+".txt")
WriteString(0,Dictionnary$)
CloseFile(0)
EndIf
EndIf
mlanguage$=Language
mDictionnary$=Dictionnary$
ProcedureReturn Result
EndProcedure
;
Procedure DelTextFromDictionnaries(EnglishText$)
If EnglishText$
ExamineDirectory(0, #DataFolder, "")
DirList$=""
While NextDirectoryEntry(0)
FName$ = GetFilePart(DirectoryEntryName(0))
If LCase(Right(FName$,4))=".txt"
FName$=Left(FName$,Len(FName$)-4)
DirList$=DirList$+FName$+"|"
EndIf
Wend
ct = 1
While DirList$
pos=FindString(DirList$,"|",1)
FName$=Left(DirList$,pos-1)
DirList$=Right(DirList$,Len(DirList$)-pos)
DelTextFromOneDictionnary(FName$,EnglishText$)
Wend
EndIf
EndProcedure
;
Procedure.s BRTranslate(EnglishText$)
EnglishText$ = ReplaceString(EnglishText$,Chr(10),"")
EnglishText$ = ReplaceString(EnglishText$,Chr(13),"[EOL]")
Localtext$ = EnglishText$
If EnglishText$
Dictionnary$ = GetDictionnary(SELanguage)
pos = FindString("]"+LCase(Dictionnary$),"]"+LCase(EnglishText$)+"|",1)
If pos
pos + Len(EnglishText$+"|")
pos2=FindString(Dictionnary$,"[EOT]",pos)
If pos2
Localtext$=Mid(Dictionnary$,pos,pos2-pos)
EndIf
Else
PutTextInDictionnary("English",EnglishText$,EnglishText$)
PutTextInDictionnary(SELanguage,EnglishText$,EnglishText$)
EndIf
EndIf
LocalText$ = ReplaceString(LocalText$,"[EOL]",Chr(13))
ProcedureReturn(LocalText$)
EndProcedure
;
Declare SetListFromDictionnary (Language.s)
Declare SaveBiText (Language.s)
Procedure LanguageWindow()
#LanguageWindow = 30
;
Structure BiText
EnglishText.s
LocalText.s
EndStructure
Global Dim BiText.BiText(#MaxTexts)
;
Enumeration
#LLList = 1002
#TLEnglish
#SLLocal
#CLLanguage
#TLLanguage
#BLSave
#BLNew
#BLDelete
#FLLook
#SLLook
#BLLook
#BLNext
#BLAbsorb
#BLHidden
#BLWebT
#BLQuit
EndEnumeration
;
hw = OpenWindow(#LanguageWindow, 216, 0, 515, 448, BRTranslate("Modify languages"), #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
If hw
If CreateGadgetList(WindowID(#LanguageWindow))
ListViewGadget(#LLList, 10, 39, 493, 247)
TextGadget(#TLEnglish, 10, 288, 493, 17, "")
TextGadget(#TLLanguage, 10, 12, 63, 20, BRTranslate("Language:"), #PB_Text_Right)
ComboBoxGadget(#CLLanguage, 80, 9, 133, 100)
Languages$ = GetAvailableLanguages ()
ct = 1
Repeat
LName$ = StringField(Languages$, ct, "|")
If LName$
AddGadgetItem(#CLLanguage,-1,LName$)
EndIf
ct + 1
Until LName$=""
;
noi = CountGadgetItems(#CLLanguage)
ct = 0
While ct<noi And SELanguage.s<>GetGadgetItemText(#CLLanguage,ct,0) : ct + 1 : Wend
If SELanguage.s=GetGadgetItemText(#CLLanguage,ct,0)
SetGadgetState(#CLLanguage,ct)
Else
SetGadgetState(#CLLanguage,0)
EndIf
ButtonGadget(#BLSave, 439, 10, 64, 20, BRTranslate("Save"))
ButtonGadget(#BLNew, 220, 10, 64, 20, BRTranslate("New"))
ButtonGadget(#BLDelete, 292, 10, 64, 20, BRTranslate("Delete"))
Frame3DGadget(#FLLook, 10, 368, 493, 44, BRTranslate("Look for"))
StringGadget(#SLLook, 18, 385, 272, 20, "")
ButtonGadget(#BLLook, 304, 385, 91, 20, BRTranslate("Look"))
ButtonGadget(#BLNext, 402, 385, 91, 20, BRTranslate("Next"))
ButtonGadget(#BLAbsorb, 10, 420, 140, 20, BRTranslate("Absorb a dictionnary"))
ButtonGadget(#BLHidden, 157, 420, 127, 20, BRTranslate("Hidden commands"))
ButtonGadget(#BLWebT, 291, 420, 120, 20, BRTranslate("Web Translation"))
ButtonGadget(#BLQuit, 442, 420, 61, 20, BRTranslate("Quit"))
;StringGadget(#SLLocal, 10, 305, 493, 60, "",#PB_String_Multiline|#WS_VSCROLL)
EditorGadget(#SLLocal, 10, 305, 493, 60)
SendMessage_(GadgetID(#SLLocal), #EM_SETTARGETDEVICE, #Null, 0)
SetListFromDictionnary(GetGadgetText(#CLLanguage))
CurrentLanguage$ = GetGadgetText(#CLLanguage)
;
QuitL = 0
;
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
GadgetID = EventGadget()
;
If GadgetID = #LLList
ct = GetGadgetState(#LLList)
LName$ = BiText(ct)\EnglishText
GetAsyncKeyState_(#VK_CONTROL) ; Empty Buffer
GetAsyncKeyState_(#VK_CONTROL) ; Empty Buffer
GetAsyncKeyState_(#VK_CONTROL) ; Empty Buffer
GetAsyncKeyState_(#VK_MENU) ; Empty Buffer
GetAsyncKeyState_(#VK_MENU) ; Empty Buffer
GetAsyncKeyState_(#VK_MENU) ; Empty Buffer
;
If GetAsyncKeyState_(#VK_CONTROL)
Result = MessageRequester(BRTranslate("Caution!"),BRTranslate("Do you really want to delete this text from all dictionnaries ?"),#PB_MessageRequester_YesNo)
If Result = 6
If Right(GetGadgetText(#CLLanguage),1)="*"
ct = GetGadgetState(#CLLanguage)
CurrentLanguage$ = GetGadgetText(#CLLanguage)
CurrentLanguage$ = Left(CurrentLanguage$,Len(CurrentLanguage$)-1)
SetGadgetItemText(#CLLanguage,ct,CurrentLanguage$,0)
SetGadgetState(#CLLanguage,ct)
SaveBiText(CurrentLanguage$)
EndIf
DelTextFromDictionnaries(LName$)
SetListFromDictionnary(GetGadgetText(#CLLanguage))
If GetGadgetItemText(#LLList,ct,0)=""
ct-1
EndIf
SetGadgetState(#LLList,ct)
EndIf
ElseIf GetAsyncKeyState_(#VK_MENU)
NewText$ = InputRequester(BRTranslate("New Text"), BRTranslate("Enter the english version of your new text:"), "")
If NewText$
If Right(GetGadgetText(#CLLanguage),1)="*"
ct = GetGadgetState(#CLLanguage)
CurrentLanguage$ = GetGadgetText(#CLLanguage)
CurrentLanguage$ = Left(CurrentLanguage$,Len(CurrentLanguage$)-1)
SetGadgetItemText(#CLLanguage,ct,CurrentLanguage$,0)
SetGadgetState(#CLLanguage,ct)
SaveBiText (CurrentLanguage$)
EndIf
PutTextInDictionnary(CurrentLanguage$,NewText$,NewText$)
SetListFromDictionnary(CurrentLanguage$)
ct = 0
While BiText(ct)\EnglishText And BiText(ct)\EnglishText<>NewText$ : ct + 1 : Wend
SetGadgetState(#LLList,ct)
EndIf
EndIf
If GetGadgetState(#LLList)<0
SetGadgetState(#LLList,0)
EndIf
tx$ = ReplaceString(GetGadgetText(#LLList),"[EOL]",Chr(13)+Chr(10))
SetGadgetText(#SLLocal,tx$)
SetGadgetText(#TLEnglish,BiText(GetGadgetState(#LLList))\EnglishText)
;
ElseIf GadgetID = #SLLocal
If BiText(GetGadgetState(#LLList))\LocalText <> GetGadgetText(#SLLocal)
tx$ = ReplaceString(GetGadgetText(#SLLocal),Chr(10),"")
tx$ = ReplaceString(tx$,Chr(13),"[EOL]")
BiText(GetGadgetState(#LLList))\LocalText = tx$
ct = GetGadgetState(#LLList)
SetGadgetItemText(#LLList,ct,tx$,0)
SetGadgetState(#LLList,ct)
ct = GetGadgetState(#CLLanguage)
If Right(GetGadgetText(#CLLanguage),1)<>"*"
SetGadgetItemText(#CLLanguage,ct,GetGadgetText(#CLLanguage)+"*",0)
SetGadgetState(#CLLanguage,ct)
CurrentLanguage$ = GetGadgetText(#CLLanguage)
EndIf
EndIf
;
ElseIf GadgetID = #CLLanguage
If GetGadgetState(#CLLanguage)>=0
If CurrentLanguage$<>GetGadgetText(#CLLanguage)
If Right(CurrentLanguage$,1)="*"
CurrentLanguage$ = Left(CurrentLanguage$,Len(CurrentLanguage$)-1)
Result = MessageRequester(BRTranslate("Caution!"),CurrentLanguage$+BRTranslate(" has been modified. Do you want to save it before seeing another language ?"),#PB_MessageRequester_YesNo)
If Result = 6
SaveBiText (CurrentLanguage$)
BRTranslate("Caution!") ; to be sure to include those messages in the language
BRTranslate(" has been modified. Do you want to save it before seeing another language ?")
EndIf
EndIf
CurrentLanguage$ = GetGadgetText(#CLLanguage)
ct = 0
Repeat
LText$ = GetGadgetItemText(#CLLanguage,ct,0)
If Right(LText$,1)="*"
SetGadgetItemText(#CLLanguage,ct,Left(LText$,Len(LText$)-1),0)
EndIf
ct + 1
Until LText$=""
SetListFromDictionnary(GetGadgetText(#CLLanguage))
EndIf
EndIf
;
ElseIf GadgetID = #BLNew
Language.s = InputRequester(BRTranslate("New language"), BRTranslate("Enter the new language name"), "")
If Language
AddGadgetItem(#CLLanguage,-1,Language)
ct = 0
While GetGadgetItemText(#CLLanguage,ct,0)<>Language : ct + 1 : Wend
SetGadgetState(#CLLanguage,ct)
SetListFromDictionnary(GetGadgetText(#CLLanguage))
EndIf
ElseIf GadgetID = #BLDelete
DName$ = GetGadgetText(#CLLanguage)
If DName$
If Right(DName$,1)="*"
DName$ = Left(DName$,Len(DName$)-1)
EndIf
Result = MessageRequester(BRTranslate("Caution!"),BRTranslate("Do you really want to delete this language (")+DName$+BRTranslate(") and all the associated texts ?"),#PB_MessageRequester_YesNo)
If Result = 6
If FileSize(#DataFolder+"\"+DName$+".txt")
DeleteFile(#DataFolder+"\"+DName$+".txt")
EndIf
ct = GetGadgetState(#CLLanguage)
If FindString(#IncludedLanguages,DName$,1)=0
RemoveGadgetItem(#CLLanguage, ct)
If GetGadgetItemText(#CLLanguage,ct,0)=""
ct-1
EndIf
SetGadgetState(#CLLanguage,ct)
Else
SetGadgetItemText(#CLLanguage,ct,DName$,0)
SetGadgetState(#CLLanguage,ct)
MessageRequester(BRTranslate("Caution!"),BRTranslate("This language can't be deleted."),0)
EndIf
SetListFromDictionnary(GetGadgetText(#CLLanguage))
EndIf
EndIf
;
ElseIf GadgetID = #BLLook
Find = 1
SFind = -1
;
ElseIf GadgetID = #BLNext
Find = 1
SFind = GetGadgetState(#LLList)
;
ElseIf GadgetID = #BLSave
If Right(GetGadgetText(#CLLanguage),1)="*"
ct = GetGadgetState(#CLLanguage)
CurrentLanguage$ = GetGadgetText(#CLLanguage)
CurrentLanguage$ = Left(CurrentLanguage$,Len(CurrentLanguage$)-1)
SetGadgetItemText(#CLLanguage,ct,CurrentLanguage$,0)
SetGadgetState(#CLLanguage,ct)
SaveBiText (CurrentLanguage$)
EndIf
GetAsyncKeyState_(#VK_CONTROL) ; Empty Buffer
GetAsyncKeyState_(#VK_CONTROL) ; Empty Buffer
GetAsyncKeyState_(#VK_CONTROL) ; Empty Buffer
If GetAsyncKeyState_(#VK_CONTROL)
suffixe$ = ".pb"
Title$ = "PureBasic Datas"
PNF$ = SaveFileRequester(Title$,"LanguageSet" , suffixe$,0)
If PNF$
If Right(PNF$,Len(suffixe$))<>suffixe$
PNF$ + suffixe$
EndIf
If OpenFile(1,PNF$)
WriteString(1,"DataSection"+Chr(13)+Chr(10))
ct = 0
Repeat
Language=GetGadgetItemText(#CLLanguage,ct,0)
If Language
WriteString(1,Left(Language,3)+"Texts:"+Chr(13)+Chr(10))
Dictionnary$ = GetDictionnary(Language)
IsFile(1)
Repeat
pos = FindString(Dictionnary$,"|",1)
If pos
EnglishText$=Left(Dictionnary$,pos-1)
EnglishText$=ReplaceString(EnglishText$,Chr(34),"$guillemets$")
EnglishText$=ReplaceString(EnglishText$,"$guillemets$",Chr(34)+"+Chr(34)+"+Chr(34))
EnglishText$=ReplaceString(EnglishText$,Chr(13)+Chr(10),Chr(34)+"+Chr(13)+Chr(10)+"+Chr(34))
EnglishText$=ReplaceString(EnglishText$,Chr(13),Chr(34)+"+Chr(13)+"+Chr(34))
EnglishText$=Chr(34)+EnglishText$+Chr(34)
Dictionnary$=Right(Dictionnary$,Len(Dictionnary$)-pos)
pos=FindString(Dictionnary$,"[EOT]",1)
If pos
LocalText$=Left(Dictionnary$,pos-1)
LocalText$=Left(Dictionnary$,pos-1)
LocalText$=ReplaceString(LocalText$,Chr(34),"$guillemets$")
LocalText$=ReplaceString(LocalText$,"$guillemets$",Chr(34)+"+Chr(34)+"+Chr(34))
LocalText$=ReplaceString(LocalText$,Chr(13)+Chr(10),Chr(34)+"+Chr(13)+Chr(10)+"+Chr(34))
LocalText$=ReplaceString(LocalText$,Chr(13),Chr(34)+"+Chr(13)+"+Chr(34))
LocalText$=Chr(34)+LocalText$+Chr(34)
WriteString(1," Data$ "+EnglishText$+"+"+Chr(34)+"|"+Chr(34)+"+"+LocalText$+Chr(13)+Chr(10))
Dictionnary$=Right(Dictionnary$,Len(Dictionnary$)-pos-4)
EndIf
EndIf
Until pos = 0
WriteString(1," Data$ "+Chr(34)+"EndText"+Chr(34)+Chr(13)+Chr(10)+Chr(13)+Chr(10))
ct + 1
EndIf
Until Language=""
WriteString(1,"EndDataSection")
CloseFile(1)
EndIf
EndIf
EndIf
;
ElseIf GadgetID = #BLAbsorb
If Right(CurrentLanguage$,1)="*"
ct = GetGadgetState(#CLLanguage)
CurrentLanguage$ = GetGadgetText(#CLLanguage)
CurrentLanguage$ = Left(CurrentLanguage$,Len(CurrentLanguage$)-1)
SetGadgetItemText(#CLLanguage,ct,CurrentLanguage$,0)
SetGadgetState(#CLLanguage,ct)
SaveBiText (CurrentLanguage$)
EndIf
Result = MessageRequester(BRTranslate("Absorb a dictionnary"),BRTranslate("You will be asked to open an external file named ")+CurrentLanguage$+".txt"+Chr(13)+BRTranslate("All words found in this file will be added to the actual dictionnary.")+Chr(13)+BRTranslate("Continue?"),#PB_MessageRequester_YesNo)
If Result = 6
PNF$ = OpenFileRequester(BRTranslate("Open a file named ")+CurrentLanguage$+".txt",CurrentLanguage$+".txt" , CurrentLanguage$+".txt|"+CurrentLanguage$+".txt",0)
If GetFilePart(PNF$)=CurrentLanguage$+".txt"
If ReadFile(0,PNF$)
Dictionnary$ =""
Repeat
RText$ = ReadString(0)
If RText$
Dictionnary$ + RText$ + Chr(13)+ Chr(10)
EndIf
Until RText$="" Or FindString(RText$,"EndText",1)
CloseFile(0)
Repeat
pos = FindString(Dictionnary$,"|",1)
If pos
EnglishText$=Left(Dictionnary$,pos-1)
Dictionnary$=Right(Dictionnary$,Len(Dictionnary$)-pos)
pos=FindString(Dictionnary$,"[EOT]",1)
If pos
LocalText$=Left(Dictionnary$,pos-1)
Dictionnary$=Right(Dictionnary$,Len(Dictionnary$)-pos-4)
PutTextInDictionnary(CurrentLanguage$,EnglishText$,LocalText$)
EndIf
EndIf
Until pos = 0
SetListFromDictionnary(GetGadgetText(#CLLanguage))
EndIf
EndIf
EndIf
;
ElseIf GadgetID = #BLHidden
MessageRequester(BRTranslate("Hidden Commands"),BRTranslate("This commands are for programmers only:"+Chr(13)+Chr(13)+"- Ctrl + Save : create a PureBasic data file with all the datas"+Chr(13)+"- Ctrl + clic on the list : delete a text"+Chr(13)+"- Alt + Clic on the list : add a text"),0)
;
ElseIf GadgetID = #BLWebT
ShellExecute_(hw,"open","http://www.foreignword.com/Tools/transnow.htm","","",#SW_SHOWNORMAL)
;
ElseIf GadgetID = #BLQuit
If Right(CurrentLanguage$,1)="*"
CurrentLanguage$ = Left(CurrentLanguage$,Len(CurrentLanguage$)-1)
Result = MessageRequester(BRTranslate("Caution!"),CurrentLanguage$+BRTranslate(" has been modified. Do you want to save it before quitting?"),#PB_MessageRequester_YesNo)
If Result = 6
SaveBiText (CurrentLanguage$)
BRTranslate("Caution!") ; to be sure to include those messages in the language
BRTranslate(" has been modified. Do you want to save it before quitting?")
EndIf
EndIf
QuitL = 1
;
EndIf
;
ElseIf Event = #WM_KEYDOWN
SendMessage_(GadgetID(#SLLocal),#EM_GETSEL,@StartS,@EndS)
If StartS=mStartS And EndS=mEndS
If GetFocus_()=GadgetID(#SLLocal) And GetAsyncKeyState_(#VK_DOWN)
ct = GetGadgetState(#LLList)
If GetGadgetItemText(#LLList,ct+1,0)
SetGadgetState(#LLList,ct+1)
SetGadgetText(#SLLocal,GetGadgetText(#LLList))
SetGadgetText(#TLEnglish,BiText(GetGadgetState(#LLList))\EnglishText)
EndIf
EndIf
EndIf
;
If StartS=mStartS And EndS=mEndS
If GetFocus_()=GadgetID(#SLLocal) And GetAsyncKeyState_(#VK_UP)
ct = GetGadgetState(#LLList)
If ct
SetGadgetState(#LLList,ct-1)
SetGadgetText(#SLLocal,GetGadgetText(#LLList))
SetGadgetText(#TLEnglish,BiText(GetGadgetState(#LLList))\EnglishText)
EndIf
EndIf
EndIf
;
If GetFocus_()=GadgetID(#SLLook) And GetAsyncKeyState_(#VK_ENTER)
Find = 1
SFind = GetGadgetState(#LLList)
EndIf
;
ElseIf Event = #PB_Event_CloseWindow
QuitL = 1
;
EndIf
If Find
Find = 0
ct = SFind +1
While BiText(ct)\EnglishText And FindString(LCase(BiText(ct)\EnglishText),LCase(GetGadgetText(#SLLook)),1)=0 : ct + 1 : Wend
If FindString(LCase(BiText(ct)\EnglishText),LCase(GetGadgetText(#SLLook)),1)=0
ct = SFind +1
While BiText(ct)\EnglishText And FindString(LCase(BiText(ct)\LocalText),LCase(GetGadgetText(#SLLook)),1)=0 : ct + 1 : Wend
EndIf
If BiText(ct)\EnglishText
SetGadgetState(#LLList,ct)
SetGadgetText(#SLLocal,GetGadgetText(#LLList))
SetGadgetText(#TLEnglish,BiText(GetGadgetState(#LLList))\EnglishText)
EndIf
EndIf
SetWindowPos_(hw,#HWND_TOP,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE) ; keep the window over the main window - maintient
If Right(GetGadgetText(#CLLanguage),1)="*"
DisableGadget(#BLSave,0)
Else
DisableGadget(#BLSave,1)
EndIf
SendMessage_(GadgetID(#SLLocal),#EM_GETSEL,@mStartS,@mEndS)
Until QuitL
EndIf
EndIf
Dim BiText.BiText(1)
CloseWindow(#LanguageWindow)
mlanguage$="" ; to update mDictionnary$
EndProcedure
;
Procedure SetListFromDictionnary (Language.s)
If Language
Dictionnary$ = GetDictionnary(Language)
ct = 0
ClearGadgetItemList(#LLList)
Repeat
pos = FindString(Dictionnary$,"|",1)
If pos
BiText(ct)\EnglishText=Left(Dictionnary$,pos-1)
Dictionnary$=Right(Dictionnary$,Len(Dictionnary$)-pos)
pos=FindString(Dictionnary$,"[EOT]",1)
If pos
BiText(ct)\LocalText=Left(Dictionnary$,pos-1)
AddGadgetItem(#LLList,-1,Left(Dictionnary$,pos-1))
Dictionnary$=Right(Dictionnary$,Len(Dictionnary$)-pos-4)
ct + 1
EndIf
EndIf
Until pos = 0
BiText(ct)\EnglishText=""
SetGadgetState(#LLLIst,0)
SetGadgetText(#SLLocal,GetGadgetText(#LLList))
SetGadgetText(#TLEnglish,BiText(GetGadgetState(#LLList))\EnglishText)
EndIf
EndProcedure
;
Procedure SaveBiText (Language.s)
If Language
Dictionnary$ = ""
ct = 0
Repeat
If BiText(ct)\EnglishText
Dictionnary$=Dictionnary$+BiText(ct)\EnglishText+"|"+BiText(ct)\LocalText+"[EOT]"
EndIf
ct + 1
Until BiText(ct)\EnglishText=""
Dictionnary$ + "EndText[EOT]"
If OpenFile(0,#DataFolder+"\"+Language+".txt")
WriteString(0,Dictionnary$)
CloseFile(0)
Else
MessageRequester(BRTranslate("Error"),BRTranslate("Error while saving the dictionnary!"),0)
EndIf
EndIf
EndProcedure
;
; This type of datas can be generated by this program itselfs !!!
; -> Start the program and press Ctrl while clicking on "Save"
;
; Ce type de datas peut être généré par ce programme lui-même !!!
; -> démarrez le programme et maintenez la touche Ctrl appuyée
; tout en cliquant sur "Enregistrer"
;
DataSection
FraTexts:
Data$ "OK"+"|"+"OK"
Data$ "Cancel"+"|"+"Annuler"
Data$ "Error"+"|"+"Erreur"
Data$ "New"+"|"+"Nouveau"
Data$ "Modify languages"+"|"+"Modifier les langues"
Data$ "Language:"+"|"+"Langue :"
Data$ "Save"+"|"+"Enregistrer"
Data$ "Delete"+"|"+"Supprimer"
Data$ "Look for"+"|"+"Rechercher"
Data$ "Look"+"|"+"Chercher"
Data$ "Next"+"|"+"Suivant"
Data$ "Absorb a dictionnary"+"|"+"Absorber un dictionnaire"
Data$ "Hidden commands"+"|"+"Commandes cachées"
Data$ "Quit"+"|"+"Quitter"
Data$ "Do you really want to delete this text from all dictionnaries ?"+"|"+"Voulez-vous réellement effacer ce texte de tous les dictionnaires ?"
Data$ "Caution!"+"|"+"Attention !"
Data$ "Enter the new language name"+"|"+"Entrez le nom de la nouvelle langue"
Data$ "Enter the english version of your new text:"+"|"+"Entrez la version anglaise de votre nouveau texte :"
Data$ "New Text"+"|"+"Nouveau texte"
Data$ "New language"+"|"+"Nouvelle langue"
Data$ " has been modified. Do you want to save it before seeing another language ?"+"|"+" a été modifiée. Voulez-vous l'enregistrer avant d'examiner une autre langue ?"
Data$ "Do you really want to delete this language ("+"|"+"Voulez-vous réellement supprimer cette langue ("
Data$ ") and all the associated texts ?"+"|"+") et tous les textes associés ?"
Data$ " has been modified. Do you want to save it before quitting?"+"|"+" a été modifiée. Voulez-vous enregistrer avant de quitter ?"
Data$ "You will be asked to open an external file named "+"|"+"Vous allez devoir ouvrir un fichier externe nommé "
Data$ "All words found in this file will be added to the actual dictionnary."+"|"+"Tous les textes qu'il contient seront ajoutés au dictionnaire actuel."
Data$ "Continue?"+"|"+"Continuer ?"
Data$ "Open a file named "+"|"+"Ouvrir un fichier nommé "
Data$ "Introduction"+"|"+"Introduction"
Data$ "IntroBabel"+"|"+"Ce programme a pour objectif de régler le problème des langues dans vos programmes."+Chr(13)+Chr(10)+"Pour l'utiliser, ajouter simplement IncludeFile "+Chr(34)+"BabelResolver.pb"+Chr(34)+" dans vos programmes, ajoutez une commande menu qui exécutera la commande "+Chr(34)+"ChooseLanguageWindow()"+Chr(34)+" et remplacez chaque instruction du type 'MessageResquester("+Chr(34)+"Error"+Chr(34)+","+Chr(34)+"Message"+Chr(34)+",0)' par : 'MessageResquester(BRTranslate("+Chr(34)+"Error"+Chr(34)+"),BRTranslate("+Chr(34)+"Message"+Chr(34)+"),0)'"+Chr(13)+Chr(10)+"Son principe à l'avantage de permettre une traduction des textes par l'utilisateur lui-même, ce qui ouvre votre programme à l'international même si vous ne parlez que l'anglais et le français."+Chr(13)+Chr(13)+"Si vous créez des dictionnaires, vous pourrez les ré-utiliser dans tous vos programmes !!"
Data$ "Web Translation|Traduction Web"
Data$ "Error While saving the dictionnary!|Erreur pendant l'enregistrement du dictionnaire !"
Data$ "EndText"
EngTexts:
Data$ "OK"+"|"+"OK"
Data$ "Cancel"+"|"+"Cancel"
Data$ "Error"+"|"+"Error"
Data$ "New"+"|"+"New"
Data$ "Modify languages"+"|"+"Modify languages"
Data$ "Language:"+"|"+"Language:"
Data$ "Save"+"|"+"Save"
Data$ "Delete"+"|"+"Delete"
Data$ "Look for"+"|"+"Look for"
Data$ "Look"+"|"+"Look"
Data$ "Next"+"|"+"Next"
Data$ "Absorb a dictionnary"+"|"+"Absorb a dictionnary"
Data$ "Hidden commands"+"|"+"Hidden commands"
Data$ "Quit"+"|"+"Quit"
Data$ "Enter the english version of your new text:"+"|"+"Enter the english version of your new text:"
Data$ "New Text"+"|"+"New Text"
Data$ "Do you really want to delete this text from all dictionnaries ?"+"|"+"Do you really want to delete this text from all dictionnaries ?"
Data$ "Caution!"+"|"+"Caution!"
Data$ "Enter the new language name"+"|"+"Enter the new language name"
Data$ "New language"+"|"+"New language"
Data$ " has been modified. Do you want to save it before seeing another language ?"+"|"+" has been modified. Do you want to save it before seeing another language ?"
Data$ "Do you really want to delete this language ("+"|"+"Do you really want to delete this language ("
Data$ ") and all the associated texts ?"+"|"+") and all the associated texts ?"
Data$ " has been modified. Do you want to save it before quitting?"+"|"+" has been modified. Do you want to save it before quitting?"
Data$ "You will be asked to open an external file named "+"|"+"You will be asked to open an external file named "
Data$ "All words found in this file will be added to the actual dictionnary."+"|"+"All words found in this file will be added to the actual dictionnary."
Data$ "Continue?"+"|"+"Continue ?"
Data$ "Open a file named "+"|"+"Open a file named "
Data$ "Introduction"+"|"+"Introduction"
Data$ "IntroBabel"+"|"+"This sofware tries to solve the language problems in your software."+Chr(13)+Chr(10)+"To use it, simply put IncludeFile "+Chr(34)+"BabelResolver.pb"+Chr(34)+" in your code, add a menu command which will execute "+Chr(34)+"ChooseLanguageWindow()"+Chr(34)+" and replace each relevant instruction. For example, 'MessageResquester("+Chr(34)+"Error"+Chr(34)+","+Chr(34)+"Message"+Chr(34)+",0)' would become: 'MessageResquester(BRTranslate("+Chr(34)+"Error"+Chr(34)+"),BRTranslate("+Chr(34)+"Message"+Chr(34)+"),0)'"+Chr(13)+Chr(10)+"It will allow a translation by the user and then you can distribute your software internationally even if you only speack english!"+Chr(13)+Chr(13)+"If you create dictionnaries, you could use them in all your codes !!"
Data$ "Web Translation|Web Translation"
Data$ "Error While saving the dictionnary!|Error While saving the dictionnary!"
Data$ "EndText"
DeuTexts:
Data$ "OK"+"|"+"Ok"
Data$ "Cancel"+"|"+"Abbrechen"
Data$ "Error"+"|"+"Fehler"
Data$ "New"+"|"+"Neu"
Data$ "Modify languages"+"|"+"Modify languages"
Data$ "Language:"+"|"+"Sprache:"
Data$ "Save"+"|"+"Speichern"
Data$ "Delete"+"|"+"Löschen"
Data$ "Look for"+"|"+"Suchen"
Data$ "Look"+"|"+"Suche"
Data$ "Next"+"|"+"Nächster"
Data$ "Absorb a dictionnary"+"|"+"Absorb a dictionnary"
Data$ "Hidden commands"+"|"+"Hidden commands"
Data$ "Quit"+"|"+"Schließen"
Data$ "Enter the english version of your new text:"+"|"+"Enter the english version of your new text:"
Data$ "New Text"+"|"+"New Text"
Data$ "New language"+"|"+"New language"
Data$ "Do you really want to delete this text from all dictionnaries ?"+"|"+"Do you really want to delete this text from all dictionnaries ?"
Data$ "Caution!"+"|"+"Achtung!"
Data$ "Enter the new language name"+"|"+"Enter the new language name"
Data$ " has been modified. Do you want to save it before seeing another language ?"+"|"+" has been modified. Do you want to save it before seeing another language ?"
Data$ "Do you really want to delete this language ("+"|"+"Do you really want to delete this language ("
Data$ ") and all the associated texts ?"+"|"+") and all the associated texts ?"
Data$ " has been modified. Do you want to save it before quitting?"+"|"+" has been modified. Do you want to save it before quitting?"
Data$ "You will be asked to open an external file named "+"|"+"You will be asked to open an external file named "
Data$ "All words found in this file will be added to the actual dictionnary."+"|"+"All words found in this file will be added to the actual dictionnary."
Data$ "Continue?"+"|"+"Continue ?"
Data$ "Open a file named "+"|"+"Open a file named "
Data$ "Introduction"+"|"+"Introduction"
Data$ "IntroBabel"+"|"+"This sofware tries to solve the language problems in your software."+Chr(13)+Chr(10)+"To use it, simply put IncludeFile "+Chr(34)+"BabelResolver.pb"+Chr(34)+" in your code, add a menu command which will execute "+Chr(34)+"ChooseLanguageWindow()"+Chr(34)+" and replace each relevant instruction. For example, 'MessageResquester("+Chr(34)+"Error"+Chr(34)+","+Chr(34)+"Message"+Chr(34)+",0)' would become: 'MessageResquester(BRTranslate("+Chr(34)+"Error"+Chr(34)+"),BRTranslate("+Chr(34)+"Message"+Chr(34)+"),0)'"+Chr(13)+Chr(10)+"It will allow a translation by the user and then you can distribute your software internationally even if you only speack english!"+Chr(13)+Chr(13)+"If you create dictionnaries, you could use them in all your codes !!"
Data$ "Web Translation|Web Translation"
Data$ "Error While saving the dictionnary!|Error While saving the dictionnary!"
Data$ "EndText"
EndDataSection
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Jusqu'ici j'utilise la commande localtext() de la DroopyLibs,
l'avantage est qu'il ni a pas à retaper les mêmes data$ pour les différentes langues.
Ex:
Commande Localtext droopy libs :
Commande avec le babel :
On voit qu'il est tout de même bien plus rapide d'utiliser LocalText.
Ni aurait-il pas un moyen de gérer les langues de cette façon avec babel ?
Sinon le soft est superbe, y'a pas de soucis

l'avantage est qu'il ni a pas à retaper les mêmes data$ pour les différentes langues.
Ex:
Commande Localtext droopy libs :
Code : Tout sélectionner
Messagerequester(localtext("Coucou","Hi","Hola"),localtext("Bienvenue","welcome","Bien venido"))
Code : Tout sélectionner
FraTexts:
Data$ "Hi"+"|"+"Coucou"
Data$ "Welcome"+"|"+"Bienvenue"
EngTexts:
Data$ "Hi"+"|"+"Hi"
Data$ "Welcome"+"|"+"Welcome"
EspTexts:
Data$ "Hi"+"|"+"Hola"
Data$ "Welcome"+"|"+"Bien venido"
Ni aurait-il pas un moyen de gérer les langues de cette façon avec babel ?
Sinon le soft est superbe, y'a pas de soucis

-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :