Tiny multilanguage GUI

Share your advanced PureBasic knowledge/code with the community.
User avatar
menschmarkus
User
User
Posts: 18
Joined: Fri Dec 28, 2012 11:23 pm
Location: Center Germany

Tiny multilanguage GUI

Post by menschmarkus »

OK, I made proposal for the new FormDesigner for multilanguage support. If Polo includes it, it would be fine.

Until then I wrote a tiny frontend GUI for multilangual administration. It is based on Preference structure and automatically creates language depending procedures which easily can be called as a procedure. Also necessary string variables are created automatically as Global variables. All this information is created in a pbi file which needs to be included in the main control file.
Sometimes you need to search a string in your domestic language so a search feature for your own language (1st language) is included as well.

If someone likes it, I am happy.
If not, it was just a small programming training for me.

Here the code:

Code: Select all

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Small aid for multilingual variable administration 
; Based on Preference file which can hold free definable qty of languages
; and up to "never used quantity of" variables
;
; Advantage:       includes a frontend for administration 
;                  gives an overview over all languages
;                  generates procedures for each language
;             
; Disadvantage:    does not use mnemonic variable expressions
; 
;
; Last modified:  16.04.2013
; 
; Author:  menschmarkus
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 
EnableExplicit

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #ListIcon
  #String_1
  #Text_2
  #Button_3
  #Button_4
  #String_5
  #Combo_6
  #Button_7
  #String_8
  #Button_9
  #Button_Export
  #File
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
Global.s lngFile, strTMP, strTMP1, strTMP2
Global.i i, j, TMP, TMP1
;}
;{ Macros
;******************************************
Macro ListIcon_Width
    (WindowWidth(#Window_0)-20)
EndMacro
Macro ListIcon_Height
    (WindowHeight(#Window_0)-190)
EndMacro
Macro ListIcon_X
    10
EndMacro
Macro ListIcon_Y
    15
EndMacro
;******************************************
Macro StringGadget1_Width
    (WindowWidth(#Window_0)-20)
EndMacro
Macro StingGadget1_Height
    20
EndMacro
Macro StringGadget1_X
    10
EndMacro
Macro StringGadget1_Y
    (WindowHeight(#Window_0)-87)
EndMacro
;******************************************
Macro TextGadget1_Width
    (WindowWidth(#Window_0)-20)
EndMacro
Macro TextGadget1_Height
    20
EndMacro
Macro TextGadget1_X
    10
EndMacro
Macro TextGadget1_Y
    (WindowHeight(#Window_0)-110);120
EndMacro
;******************************************
Macro StringGadget2_Width
    (WindowWidth(#Window_0)-20)
EndMacro
Macro StingGadget2_Height
    25
EndMacro
Macro StringGadget2_X
    Buttongadget2_Width+20
EndMacro
Macro StringGadget2_Y
    (WindowHeight(#Window_0)-35);202
EndMacro
;******************************************
Macro ButtonGadget1_Width
    (WindowWidth(#Window_0)-345)
EndMacro
Macro ButtonGadget1_Height
    25
EndMacro
Macro ButtonGadget1_X
    10
EndMacro
Macro ButtonGadget1_Y
    (WindowHeight(#Window_0)-65);170
EndMacro
;******************************************
Macro ButtonGadget2_Width
    (WindowWidth(#Window_0)-345)
EndMacro
Macro ButtonGadget2_Height
    25
EndMacro
Macro ButtonGadget2_X
    10
EndMacro
Macro ButtonGadget2_Y
    (WindowHeight(#Window_0)-35);200
EndMacro
;******************************************
Macro ComboBox1_Width
    (WindowWidth(#Window_0)-20)
EndMacro
Macro ComboBox1_Height
    25
EndMacro
Macro ComboBox1_X
    Buttongadget1_Width+20 ;10
EndMacro
Macro ComboBox1_Y
    (WindowHeight(#Window_0)-63);200
EndMacro
;******************************************
Macro ButtonGadget3_Width
    (WindowWidth(#Window_0)-220)
EndMacro
Macro ButtonGadget3_Height
    25
EndMacro
Macro ButtonGadget3_X
    10
EndMacro
Macro ButtonGadget3_Y
    (WindowHeight(#Window_0)-140);170
EndMacro
;******************************************
Macro ButtonGadgetExport_Width
    (WindowWidth(#Window_0)-325)
EndMacro
Macro ButtonGadgetExport_Height
    25
EndMacro
Macro ButtonGadgetExport_X
    Buttongadget3_X + ButtonGadget3_Width + 10
EndMacro
Macro ButtonGadgetExport_Y
    (WindowHeight(#Window_0)-140);170
EndMacro
;******************************************
Macro ButtonGadget9_Width
    (WindowWidth(#Window_0)-220)
EndMacro
Macro ButtonGadget9_Height
    25
EndMacro
Macro ButtonGadget9_X
    10
EndMacro
Macro ButtonGadget9_Y
    (WindowHeight(#Window_0)-170)
EndMacro
;******************************************
Macro StringGadget8_Width
    190
EndMacro
Macro StingGadget8_Height
    20
EndMacro
Macro StringGadget8_X
    ButtonGadget9_Width+20
EndMacro
Macro StringGadget8_Y
    (WindowHeight(#Window_0)-167)
EndMacro
;}

XIncludeFile "Lingua.lng.pbi"

;DeutschLng()
EnglishLng()

Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, #PB_Ignore, #PB_Ignore, 515, 355, L00000000 + "   " + Str(#pb_editor_CreateExecutable) + "." + Str(#PB_editor_BuildCount) + "." + Str(#PB_Editor_CompileCount), #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
    WindowBounds(#Window_0,515,345,#PB_Ignore,#PB_Ignore)
    ListIconGadget(#ListIcon, ListIcon_X, ListIcon_Y, ListIcon_Width, ListIcon_Height, L00000001, 100, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines|#PB_ListIcon_HeaderDragDrop)  ; Variable
    ButtonGadget(#Button_9,ButtonGadget9_X,Buttongadget9_Y,ButtonGadget9_Width,ButtonGadget9_Height,L00000002)  ; Suchbegriff
    StringGadget(#String_8,150,(WindowHeight(#Window_0)-160),StringGadget8_Width,20,"")
    ButtonGadget(#Button_7,ButtonGadget3_X,ButtonGadget3_Y,ButtonGadget3_Width,ButtonGadget3_Height,L00000003)  ; Neue Zeile
    ButtonGadget(#Button_Export,ButtonGadgetExport_X,ButtonGadgetExport_Y,ButtonGadgetExport_Width,ButtonGadgetExport_Height,L00000004) ;Export
    StringGadget(#String_1, 10, (WindowHeight(#Window_0)-35), WindowWidth(#Window_0)-20, 20, "")
    TextGadget(#Text_2, TextGadget1_X, TextGadget1_Y, TextGadget1_Width, TextGadget1_Height, "", #PB_Text_Border)
    ButtonGadget(#Button_3, ButtonGadget1_X, ButtonGadget1_Y, ButtonGadget1_Width, ButtonGadget1_Height, L00000005) ; Bestätigen
    ComboBoxGadget(#Combo_6,10,WindowHeight(#Window_0)-85,WindowWidth(#Window_0)-200,20)
    ButtonGadget(#Button_4, ButtonGadget2_X, ButtonGadget2_Y, Buttongadget2_Width, Buttongadget2_Height, L00000006) ; Neue Sprache
    StringGadget(#String_5, 10, WindowHeight(#Window_0)-95, WindowWidth(#Window_0)-200, 25, "")
    
  EndIf
EndProcedure

OpenWindow_Window_0()

;{ Load language file
strTMP.s = OpenFileRequester(L0000000B,"*.*", L0000000B + " (*.lng)|*.lng",0)
If strTMP.s = ""    ;finalized If : EndIf condition to surely use new created lng file in next if condition
    strTMP.s = "NewLingua.lng"
    If CreatePreferences(strTMP.s)
        PreferenceGroup("Deutsch")      ; Enter your domestic language as your first languages
        WritePreferenceString("00000000"," ")
        ClosePreferences()   
    EndIf
EndIf
If strTMP.s <> ""                   ;This if statement should be always true
    lngFile.s = strTMP.s
    OpenPreferences(strTMP.s)
    ExaminePreferenceGroups()
    i=1
    Repeat 
        TMP.i = NextPreferenceGroup()
        If TMP.i = 0 : Break : EndIf        ; exit if no more language exists
        strTMP.s = PreferenceGroupName()
        AddGadgetColumn(#ListIcon,i,strTMP.s,200)
        AddGadgetItem(#Combo_6,-1,strTMP.s)
        ExaminePreferenceKeys()
        j=0
        Repeat
            TMP1.i = NextPreferenceKey()
            If TMP1.i = 0 : Break : EndIf
            If i = 1 
                strTMP1.s = PreferenceKeyName() 
                strTMP2.s = PreferenceKeyValue()
                AddGadgetItem(#ListIcon,-1,strTMP1 + Chr(10) + strTMP2.s)
            Else
                strTMP2.s = PreferenceKeyValue()
                SetGadgetItemText(#ListIcon,j,strTMP2.s,i)
                j+1
            EndIf
        ForEver
        i+1
    ForEver
    ClosePreferences()
    SetGadgetState(#Combo_6,0)    
    SetGadgetState(#ListIcon,0)
EndIf

;}

Procedure   GetLngField()
    TMP = GetGadgetState(#ListIcon)
    TMP1 = GetGadgetState(#Combo_6)
    SetGadgetText(#Text_2,GetGadgetItemText(#ListIcon,TMP.i,1))
    SetGadgetText(#String_1,GetGadgetItemText(#ListIcon,TMP.i,TMP1.i+1))
    
EndProcedure

Procedure   SetLngField()
    TMP.i = GetGadgetState(#ListIcon)
    TMP1.i = GetGadgetState(#Combo_6)
    SetGadgetItemText(#ListIcon,TMP.i,GetGadgetText(#String_1),TMP1.i+1)
    OpenPreferences(lngFile.s)
    strTMP.s = GetGadgetText(#Combo_6)
    PreferenceGroup(strTMP.s)
    strTMP.s = GetGadgetText(#String_1)
    strTMP1.s = GetGadgetItemText(#ListIcon,TMP.i,0)
    WritePreferenceString(GetGadgetItemText(#ListIcon,TMP.i,0),strTMP.s)
    ClosePreferences()
    
EndProcedure

Procedure   AddLanguage()
    If GetGadgetText(#String_5) <> ""
        OpenPreferences(lngFile.s)
        ExaminePreferenceGroups()
        i=0
        Repeat
            TMP.i = NextPreferenceGroup()
            If TMP.i = 0 : Break : EndIf
            i+1
        ForEver
        strTMP.s = GetGadgetText(#String_5)
        If strTMP.s <> ""
            AddGadgetColumn(#ListIcon,i+1,strTMP.s,200)
        EndIf
        PreferenceGroup(strTMP.s)
        WritePreferenceString("00000000"," ")
        ClosePreferences()
        AddGadgetItem(#Combo_6,-1,strTMP.s)
    Else
        MessageRequester(L00000008,L00000009,#MB_ICONINFORMATION)   ; Info / erst neuer Sprachname
    EndIf
    
EndProcedure

Procedure   AddNewLine()
    OpenPreferences(lngFile.s)
    ExaminePreferenceGroups()
    NextPreferenceGroup()
    ExaminePreferenceKeys()
    Repeat
        TMP = NextPreferenceKey()
        If TMP = 0
            TMP1 = Val("$"+strTMP.s)
            TMP1+1
            AddGadgetItem(#ListIcon,-1,RSet(Hex(TMP1),8,"0"))
            WritePreferenceString(RSet(Hex(TMP1),8,"0"),"")
            Break
        EndIf
        strTMP.s = PreferenceKeyName()
    ForEver
    ClosePreferences()
    SetGadgetState(#ListIcon,CountGadgetItems(#ListIcon)-1)
    SetActiveGadget(#String_1)
EndProcedure

Procedure   SearchIt()
    strTMP1.s = GetGadgetText(#String_8)
    If strTMP.s <> ""
        TMP.i = CountGadgetItems(#ListIcon)
        For i = 0 To TMP.i-1
            If strTMP1.s = ""
                SetGadgetItemColor(#ListIcon,i,#PB_Gadget_FrontColor,$000000,1)
            Else
                strTMP.s = GetGadgetItemText(#ListIcon,i,1)
                TMP1.i = FindString(UCase(strTMP.s),UCase(strTMP1.s),1)
                If TMP1.i > 0
                    SetGadgetItemColor(#ListIcon,i,#PB_Gadget_FrontColor,$0000ff,1)
                Else
                    SetGadgetItemColor(#ListIcon,i,#PB_Gadget_FrontColor,$000000,1)
                EndIf
            EndIf
        Next
    Else
        MessageRequester(L00000008,L0000000A,#MB_ICONINFORMATION)
    EndIf
EndProcedure

Procedure   ExportLng()
    Protected exTMP1.s, exTMP2.s, exTMP3.s, exInt1.i, exInt2.i, ItemCounter.l, exGlobal.s = "Global.s "
    CreateFile(0,lngFile.s + ".pbi")
    CloseFile(0)
    OpenFile(0,lngFile.s + ".pbi")
    ItemCounter.l = CountGadgetItems(#ListIcon)
    j=0
    For i = 0 To ItemCounter-1
        j+1
        exGlobal + " L" + GetGadgetItemText(#ListIcon,i,0) + ", "
        If j>0 And j/16 = 1
            exInt1.i = Len(exGlobal.s)
            WriteStringN(0,Left(exGlobal.s,exInt1.i-2))
            exGlobal = "Global.s "
            j=0
        EndIf
    Next
    exInt1.i = Len(exGlobal.s)
    WriteStringN(0,Left(exGlobal.s,exInt1.i-2))
    WriteStringN(0,"",#PB_UTF8)
    OpenPreferences(lngFile.s)
    ExaminePreferenceGroups()
    exInt1.i = NextPreferenceGroup()
    While exInt1.i = 1
        exTMP1.s = PreferenceGroupName()
        WriteStringN(0,"Procedure  " + exTMP1.s + "Lng()")
        ExaminePreferenceKeys()
        exInt2.i = NextPreferenceKey()
        While exInt2.i = 1
            exTMP2.s = PreferenceKeyName()
            exTMP3.s = ReadPreferenceString(exTMP2.s,"")
            WriteStringN(0,"L" + exTMP2.s + " = " + Chr(34) + exTMP3.s + Chr(34))
            exInt2.i = NextPreferenceKey()
        Wend
        WriteStringN(0,"Endprocedure" + Chr(13))
        exInt1.i = NextPreferenceGroup()
    Wend
    ClosePreferences()
    CloseFile(0)
    MessageRequester("Export",L00000007 + lngFile.s + ".pb")    ; Export in Datei: 
EndProcedure


;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #ListIcon
          GetLngField()
      ElseIf EventGadget = #Button_3
          SetLngField()
      ElseIf EventGadget = #Button_4
          AddLanguage()
      ElseIf EventGadget = #Button_7
          AddNewLine()
      ElseIf    EventGadget = #Button_9
          SearchIt()
      ElseIf EventGadget = #Button_Export
          ExportLng()
      EndIf
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
    Case #PB_Event_SizeWindow
        ResizeGadget(#ListIcon,#PB_Ignore,#PB_Ignore,ListIcon_Width,ListIcon_Height)
        ResizeGadget(#String_1,#PB_Ignore,StringGadget1_Y,StringGadget1_Width,#PB_Ignore)
        ResizeGadget(#Text_2,#PB_Ignore,TextGadget1_Y,TextGadget1_Width,#PB_Ignore)
        ResizeGadget(#Button_3,#PB_Ignore,ButtonGadget1_Y,ButtonGadget1_Width,#PB_Ignore)
        ResizeGadget(#Button_Export,ButtonGadgetExport_X,ButtongadgetExport_Y,#PB_Ignore,#PB_Ignore)
        ResizeGadget(#Combo_6,ComboBox1_X,ComboBox1_Y,#PB_Ignore,#PB_Ignore)
        ResizeGadget(#Button_4,#PB_Ignore,ButtonGadget2_Y,Buttongadget2_Width,#PB_Ignore)
        ResizeGadget(#String_5,StringGadget2_X,StringGadget2_Y,#PB_Ignore,#PB_Ignore)
        ResizeGadget(#Button_7,#PB_Ignore,ButtonGadget3_Y,ButtonGadget3_Width,#PB_Ignore)
        ResizeGadget(#Button_9,#PB_Ignore,ButtonGadget9_Y,ButtonGadget9_Width,#PB_Ignore)
        ResizeGadget(#String_8,StringGadget8_X,StringGadget8_Y,#PB_Ignore,#PB_Ignore)
  EndSelect
ForEver

End
;
;}
and here the necessary pbi language file which is to include ( should be named "Lingua.lng.pbi" ) Will be created new if you press export button!

Code: Select all

Global.s  L00000000,  L00000001,  L00000002,  L00000003,  L00000004,  L00000005,  L00000006,  L00000007,  L00000008,  L00000009,  L0000000A,  L0000000B

Procedure  DeutschLng()
L00000000 = "Lingua"
L00000001 = "Variable"
L00000002 = "Suchbegriff"
L00000003 = "Neue Zeile"
L00000004 = "Export"
L00000005 = "Bestätigen"
L00000006 = "Neue Sprache"
L00000007 = "Export in Datei:"
L00000008 = "Info"
L00000009 = "Bitte zuerst den Namen der neuen Sprache eingeben"
L0000000A = "Bitte zuerste einen Suchbegriff eingeben"
L0000000B = "Sprachdatei"
EndProcedure

Procedure  EnglishLng()
L00000000 = "Lingua"
L00000001 = "variable"
L00000002 = "Search string"
L00000003 = "New line"
L00000004 = "Export"
L00000005 = "Confirm"
L00000006 = "New language"
L00000007 = "Export to file:"
L00000008 = "Info"
L00000009 = "Please enter new language name first"
L0000000A = "Please enter search term first"
L0000000B = "Language file"
EndProcedure
at last the native language file which is used by the program ( should be named as "Lingua.lng")

Code: Select all

[Deutsch]
L00000000 = Lingua
L00000001 = Variable
L00000002 = Suchbegriff
L00000003 = Neue Zeile
L00000004 = Export
L00000005 = Bestätigen
L00000006 = Neue Sprache
L00000007 = Export in Datei:
L00000008 = Info
L00000009 = Bitte zuerst den Namen der neuen Sprache eingeben
L0000000A = Bitte zuerste einen Suchbegriff eingeben
L0000000B = Sprachdatei
[English]
L00000000 = Lingua
L00000001 = variable
L00000002 = Search string
L00000003 = New line
L00000004 = Export
L00000005 = Confirm
L00000006 = New language
L00000007 = Export to file:
L00000008 = Info
L00000009 = Please enter new language name first
L0000000A = Please enter search term first
L0000000B = Language file
As soon you do it right, it works !
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: Tiny multilanguage GUI

Post by Kwai chang caine »

Good idea, thanks for sharing 8)
ImageThe happiness is a road...
Not a destination
User avatar
menschmarkus
User
User
Posts: 18
Joined: Fri Dec 28, 2012 11:23 pm
Location: Center Germany

Re: Tiny multilanguage GUI

Post by menschmarkus »

I made some small corrections described in the header

If you find bugs you can report them
If you have proposals to improve it you can tell

Additional files from my first post are still necessary!

Here the code:

Code: Select all

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Small aid for multilingual variable administration 
; Based on Preference file which can hold free definable qty of languages
; and up to "never used quantity of" variables
; I wrote this program especially to extend the new Formdesigner included in PB IDE
; written by Polo (many thanks for his efforts at this place)
;
; Advantage:       includes a frontend for administration 
;                  gives an overview over all languages
;                  generates procedures for each language
;             
; Disadvantage:    does not use mnemonic variable expressions
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; PB Version     : 5.11
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Lase modified  : 21.04.2013
;   add:  Return Key for all string fields and its corresponding functions
;   add:  + Key for adding a new line
;   
;   straighten: constants renamed for better readability
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
; first release:  16.04.2013
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Author:  menschmarkus
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 
;

EnableExplicit

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #ListIcon
  #String_TextContent
  #Text_2
  #Button_Confirm
  #Button_NewLanguage
  #String_NewLanguage
  #Combo_6
  #Button_NewLine
  #String_SearchString
  #Button_Search
  #Button_Export
  #File
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, MEvent
Global.s lngFile, strTMP, strTMP1, strTMP2
Global.i i, j, TMP, TMP1
;}
;{ Macros
;******************************************
Macro ListIcon_Width
    (WindowWidth(#Window_0)-20)
EndMacro
Macro ListIcon_Height
    (WindowHeight(#Window_0)-190)
EndMacro
Macro ListIcon_X
    10
EndMacro
Macro ListIcon_Y
    15
EndMacro
;******************************************
Macro StringGadget1_Width
    (WindowWidth(#Window_0)-20)
EndMacro
Macro StingGadget1_Height
    20
EndMacro
Macro StringGadget1_X
    10
EndMacro
Macro StringGadget1_Y
    (WindowHeight(#Window_0)-87)
EndMacro
;******************************************
Macro TextGadget1_Width
    (WindowWidth(#Window_0)-20)
EndMacro
Macro TextGadget1_Height
    20
EndMacro
Macro TextGadget1_X
    10
EndMacro
Macro TextGadget1_Y
    (WindowHeight(#Window_0)-110);120
EndMacro
;******************************************
Macro StringGadget2_Width
    (WindowWidth(#Window_0)-20)
EndMacro
Macro StingGadget2_Height
    25
EndMacro
Macro StringGadget2_X
    Buttongadget2_Width+20
EndMacro
Macro StringGadget2_Y
    (WindowHeight(#Window_0)-35);202
EndMacro
;******************************************
Macro ButtonGadget1_Width
    (WindowWidth(#Window_0)-345)
EndMacro
Macro ButtonGadget1_Height
    25
EndMacro
Macro ButtonGadget1_X
    10
EndMacro
Macro ButtonGadget1_Y
    (WindowHeight(#Window_0)-65);170
EndMacro
;******************************************
Macro ButtonGadget2_Width
    (WindowWidth(#Window_0)-345)
EndMacro
Macro ButtonGadget2_Height
    25
EndMacro
Macro ButtonGadget2_X
    10
EndMacro
Macro ButtonGadget2_Y
    (WindowHeight(#Window_0)-35);200
EndMacro
;******************************************
Macro ComboBox1_Width
    (WindowWidth(#Window_0)-20)
EndMacro
Macro ComboBox1_Height
    25
EndMacro
Macro ComboBox1_X
    Buttongadget1_Width+20 ;10
EndMacro
Macro ComboBox1_Y
    (WindowHeight(#Window_0)-63);200
EndMacro
;******************************************
Macro ButtonGadget3_Width
    (WindowWidth(#Window_0)-220)
EndMacro
Macro ButtonGadget3_Height
    25
EndMacro
Macro ButtonGadget3_X
    10
EndMacro
Macro ButtonGadget3_Y
    (WindowHeight(#Window_0)-140);170
EndMacro
;******************************************
Macro ButtonGadgetExport_Width
    (WindowWidth(#Window_0)-325)
EndMacro
Macro ButtonGadgetExport_Height
    25
EndMacro
Macro ButtonGadgetExport_X
    Buttongadget3_X + ButtonGadget3_Width + 10
EndMacro
Macro ButtonGadgetExport_Y
    (WindowHeight(#Window_0)-140);170
EndMacro
;******************************************
Macro ButtonGadget9_Width
    (WindowWidth(#Window_0)-220)
EndMacro
Macro ButtonGadget9_Height
    25
EndMacro
Macro ButtonGadget9_X
    10
EndMacro
Macro ButtonGadget9_Y
    (WindowHeight(#Window_0)-170)
EndMacro
;******************************************
Macro StringGadget8_Width
    190
EndMacro
Macro StingGadget8_Height
    20
EndMacro
Macro StringGadget8_X
    ButtonGadget9_Width+20
EndMacro
Macro StringGadget8_Y
    (WindowHeight(#Window_0)-167)
EndMacro
;}

XIncludeFile "Lingua.lng.pbi"

;DeutschLng()
EnglishLng()

Procedure OpenWindow_Window_0()
    If OpenWindow(#Window_0, #PB_Ignore, #PB_Ignore, 515, 355, L00000000 + "   " + Str(#pb_editor_CreateExecutable) + "." + Str(#PB_editor_BuildCount) + "." + Str(#PB_Editor_CompileCount), #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
        AddKeyboardShortcut(#Window_0,#PB_Shortcut_Return,13)
        AddKeyboardShortcut(#Window_0,#PB_Shortcut_Add,107)
    WindowBounds(#Window_0,515,345,#PB_Ignore,#PB_Ignore)
    ListIconGadget(#ListIcon, ListIcon_X, ListIcon_Y, ListIcon_Width, ListIcon_Height, L00000001, 100, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines|#PB_ListIcon_HeaderDragDrop)  ; Variable
    ButtonGadget(#Button_Search,ButtonGadget9_X,Buttongadget9_Y,ButtonGadget9_Width,ButtonGadget9_Height,L00000002)  ; Suchbegriff
    StringGadget(#String_SearchString,150,(WindowHeight(#Window_0)-160),StringGadget8_Width,20,"")
    ButtonGadget(#Button_NewLine,ButtonGadget3_X,ButtonGadget3_Y,ButtonGadget3_Width,ButtonGadget3_Height,L00000003)  ; Neue Zeile
    ButtonGadget(#Button_Export,ButtonGadgetExport_X,ButtonGadgetExport_Y,ButtonGadgetExport_Width,ButtonGadgetExport_Height,L00000004) ;Export
    StringGadget(#String_TextContent, 10, (WindowHeight(#Window_0)-35), WindowWidth(#Window_0)-20, 20, "")
    TextGadget(#Text_2, TextGadget1_X, TextGadget1_Y, TextGadget1_Width, TextGadget1_Height, "", #PB_Text_Border)
    ButtonGadget(#Button_Confirm, ButtonGadget1_X, ButtonGadget1_Y, ButtonGadget1_Width, ButtonGadget1_Height, L00000005) ; Bestätigen
    ComboBoxGadget(#Combo_6,10,WindowHeight(#Window_0)-85,WindowWidth(#Window_0)-200,20)
    ButtonGadget(#Button_NewLanguage, ButtonGadget2_X, ButtonGadget2_Y, Buttongadget2_Width, Buttongadget2_Height, L00000006) ; Neue Sprache
    StringGadget(#String_NewLanguage, 10, WindowHeight(#Window_0)-95, WindowWidth(#Window_0)-200, 25, "")
    
  EndIf
EndProcedure

OpenWindow_Window_0()

;{ Load language file
strTMP.s = OpenFileRequester(L0000000B,"*.*", L0000000B + " (*.lng)|*.lng",0)
If strTMP.s = ""    ;finalized If : EndIf condition to surely use new created lng file in next if condition
    strTMP.s = "NewLingua.lng"
    If CreatePreferences(strTMP.s)
        PreferenceGroup("Deutsch")      ; Enter your domestic language as your first languages
        WritePreferenceString("00000000"," ")
        ClosePreferences()   
    EndIf
EndIf
If strTMP.s <> ""                   ;This if statement should be always true
    lngFile.s = strTMP.s
    OpenPreferences(strTMP.s)
    ExaminePreferenceGroups()
    i=1
    Repeat 
        TMP.i = NextPreferenceGroup()
        If TMP.i = 0 : Break : EndIf        ; exit if no more language exists
        strTMP.s = PreferenceGroupName()
        AddGadgetColumn(#ListIcon,i,strTMP.s,200)
        AddGadgetItem(#Combo_6,-1,strTMP.s)
        ExaminePreferenceKeys()
        j=0
        Repeat
            TMP1.i = NextPreferenceKey()
            If TMP1.i = 0 : Break : EndIf
            If i = 1 
                strTMP1.s = PreferenceKeyName() 
                strTMP2.s = PreferenceKeyValue()
                AddGadgetItem(#ListIcon,-1,strTMP1 + Chr(10) + strTMP2.s)
            Else
                strTMP2.s = PreferenceKeyValue()
                SetGadgetItemText(#ListIcon,j,strTMP2.s,i)
                j+1
            EndIf
        ForEver
        i+1
    ForEver
    ClosePreferences()
    SetGadgetState(#Combo_6,0)    
    SetGadgetState(#ListIcon,0)
EndIf

;}

Procedure   GetLngField()
    TMP = GetGadgetState(#ListIcon)
    TMP1 = GetGadgetState(#Combo_6)
    SetGadgetText(#Text_2,GetGadgetItemText(#ListIcon,TMP.i,1))
    SetGadgetText(#String_TextContent,GetGadgetItemText(#ListIcon,TMP.i,TMP1.i+1))
    
EndProcedure

Procedure   SetLngField()
    TMP.i = GetGadgetState(#ListIcon)
    TMP1.i = GetGadgetState(#Combo_6)
    SetGadgetItemText(#ListIcon,TMP.i,GetGadgetText(#String_TextContent),TMP1.i+1)
    OpenPreferences(lngFile.s)
    strTMP.s = GetGadgetText(#Combo_6)
    PreferenceGroup(strTMP.s)
    strTMP.s = GetGadgetText(#String_TextContent)
    strTMP1.s = GetGadgetItemText(#ListIcon,TMP.i,0)
    WritePreferenceString(GetGadgetItemText(#ListIcon,TMP.i,0),strTMP.s)
    ClosePreferences()
    
EndProcedure

Procedure   AddLanguage()
    If GetGadgetText(#String_NewLanguage) <> ""
        OpenPreferences(lngFile.s)
        ExaminePreferenceGroups()
        i=0
        Repeat
            TMP.i = NextPreferenceGroup()
            If TMP.i = 0 : Break : EndIf
            i+1
        ForEver
        strTMP.s = GetGadgetText(#String_NewLanguage)
        If strTMP.s <> ""
            AddGadgetColumn(#ListIcon,i+1,strTMP.s,200)
        EndIf
        PreferenceGroup(strTMP.s)
        WritePreferenceString("00000000"," ")
        ClosePreferences()
        AddGadgetItem(#Combo_6,-1,strTMP.s)
    Else
        MessageRequester(L00000008,L00000009,#MB_ICONINFORMATION)   ; Info / enter new language name first
    EndIf
    
EndProcedure

Procedure   AddNewLine()
    OpenPreferences(lngFile.s)
    ExaminePreferenceGroups()
    NextPreferenceGroup()
    ExaminePreferenceKeys()
    Repeat
        TMP = NextPreferenceKey()
        If TMP = 0
            TMP1 = Val("$"+strTMP.s)
            TMP1+1
            AddGadgetItem(#ListIcon,-1,RSet(Hex(TMP1),8,"0"))
            WritePreferenceString(RSet(Hex(TMP1),8,"0"),"")
            Break
        EndIf
        strTMP.s = PreferenceKeyName()
    ForEver
    ClosePreferences()
    SetGadgetState(#ListIcon,CountGadgetItems(#ListIcon)-1)
    SetActiveGadget(#String_TextContent)
EndProcedure

Procedure   SearchIt()
    strTMP1.s = GetGadgetText(#String_SearchString)
    If strTMP.s <> ""
        TMP.i = CountGadgetItems(#ListIcon)
        For i = 0 To TMP.i-1
            If strTMP1.s = ""
                SetGadgetItemColor(#ListIcon,i,#PB_Gadget_FrontColor,$000000,1)
            Else
                strTMP.s = GetGadgetItemText(#ListIcon,i,1)
                TMP1.i = FindString(UCase(strTMP.s),UCase(strTMP1.s),1)
                If TMP1.i > 0
                    SetGadgetItemColor(#ListIcon,i,#PB_Gadget_FrontColor,$0000ff,1)
                Else
                    SetGadgetItemColor(#ListIcon,i,#PB_Gadget_FrontColor,$000000,1)
                EndIf
            EndIf
        Next
    Else
        MessageRequester(L00000008,L0000000A,#MB_ICONINFORMATION)
    EndIf
EndProcedure

Procedure   ExportLng()
    Protected exTMP1.s, exTMP2.s, exTMP3.s, exInt1.i, exInt2.i, ItemCounter.l, exGlobal.s = "Global.s "
    CreateFile(0,lngFile.s + ".pbi")
    CloseFile(0)
    OpenFile(0,lngFile.s + ".pbi")
    ItemCounter.l = CountGadgetItems(#ListIcon)
    j=0
    For i = 0 To ItemCounter-1
        j+1
        exGlobal + " L" + GetGadgetItemText(#ListIcon,i,0) + ", "
        If j>0 And j/16 = 1
            exInt1.i = Len(exGlobal.s)
            WriteStringN(0,Left(exGlobal.s,exInt1.i-2))
            exGlobal = "Global.s "
            j=0
        EndIf
    Next
    exInt1.i = Len(exGlobal.s)
    WriteStringN(0,Left(exGlobal.s,exInt1.i-2))
    WriteStringN(0,"",#PB_UTF8)
    OpenPreferences(lngFile.s)
    ExaminePreferenceGroups()
    exInt1.i = NextPreferenceGroup()
    While exInt1.i = 1
        exTMP1.s = PreferenceGroupName()
        WriteStringN(0,"Procedure  " + exTMP1.s + "Lng()")
        ExaminePreferenceKeys()
        exInt2.i = NextPreferenceKey()
        While exInt2.i = 1
            exTMP2.s = PreferenceKeyName()
            exTMP3.s = ReadPreferenceString(exTMP2.s,"")
            WriteStringN(0,"L" + exTMP2.s + " = " + Chr(34) + exTMP3.s + Chr(34))
            exInt2.i = NextPreferenceKey()
        Wend
        WriteStringN(0,"Endprocedure" + Chr(13))
        exInt1.i = NextPreferenceGroup()
    Wend
    ClosePreferences()
    CloseFile(0)
    MessageRequester("Export",L00000007 + lngFile.s + ".pb")    ; Export in File: 
EndProcedure


;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
  ; ///////////////////
    Case #PB_Event_Menu
        MEvent = EventMenu()
        Select MEvent
            Case #PB_Shortcut_Return
                If GetActiveGadget() = #String_TextContent
                    SetLngField()
                ElseIf GetActiveGadget() = #String_SearchString
                    SearchIt()
                ElseIf GetActiveGadget() = #String_NewLanguage
                    AddLanguage()
                EndIf
                
            Case #PB_Shortcut_Add
                AddNewLine()
        EndSelect
    ; ////////////////////////        
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #ListIcon
          GetLngField()
      ElseIf EventGadget = #Button_Confirm
          SetLngField()
      ElseIf EventGadget = #Button_NewLanguage
          AddLanguage()
      ElseIf EventGadget = #Button_NewLine
          AddNewLine()
      ElseIf    EventGadget = #Button_Search
          SearchIt()
      ElseIf EventGadget = #Button_Export
          ExportLng()
      EndIf
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
    Case #PB_Event_SizeWindow
        ResizeGadget(#ListIcon,#PB_Ignore,#PB_Ignore,ListIcon_Width,ListIcon_Height)
        ResizeGadget(#String_TextContent,#PB_Ignore,StringGadget1_Y,StringGadget1_Width,#PB_Ignore)
        ResizeGadget(#Text_2,#PB_Ignore,TextGadget1_Y,TextGadget1_Width,#PB_Ignore)
        ResizeGadget(#Button_Confirm,#PB_Ignore,ButtonGadget1_Y,ButtonGadget1_Width,#PB_Ignore)
        ResizeGadget(#Button_Export,ButtonGadgetExport_X,ButtongadgetExport_Y,#PB_Ignore,#PB_Ignore)
        ResizeGadget(#Combo_6,ComboBox1_X,ComboBox1_Y,#PB_Ignore,#PB_Ignore)
        ResizeGadget(#Button_NewLanguage,#PB_Ignore,ButtonGadget2_Y,Buttongadget2_Width,#PB_Ignore)
        ResizeGadget(#String_NewLanguage,StringGadget2_X,StringGadget2_Y,#PB_Ignore,#PB_Ignore)
        ResizeGadget(#Button_NewLine,#PB_Ignore,ButtonGadget3_Y,ButtonGadget3_Width,#PB_Ignore)
        ResizeGadget(#Button_Search,#PB_Ignore,ButtonGadget9_Y,ButtonGadget9_Width,#PB_Ignore)
        ResizeGadget(#String_SearchString,StringGadget8_X,StringGadget8_Y,#PB_Ignore,#PB_Ignore)
  EndSelect
ForEver

End
;
;}
Enjoy it
As soon you do it right, it works !
Post Reply