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
;
;}
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
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