Seite 1 von 2
Sprache Separieren
Verfasst: 28.11.2009 13:01
von Shadow-Gamer
Guten Tach^^
Wie trennt man am besten die Sprache vom Code ab?
Ich habe das bis jetzt immer so gemacht:
edit:
Code: Alles auswählen
lang.pb
z.B.
Global lang_Name$ = "Name"
Global lang_MyName$ = "Der Name"
output.pb
z.B debug lang_Name$ + lang_MyName$
Aber ich habe das auch schon mit Arrays gesehen.
Ich denke das es vielleicht auch Geschmackssache ist, aber ich will meinen Code auch für andere Benutzerfreundlich machen.
Re: Sprache Separieren
Verfasst: 28.11.2009 13:19
von ts-soft
Re: Sprache Separieren
Verfasst: 28.11.2009 14:48
von STARGÅTE
Ich würde es jetzt, wo es die Map in PB gibt, damit machen.
und dann auch eine Sprache aus einer .ini oder so laden und dann zB so befüllen:
Language("File") = "Datei"
Language("Open") = "Öffnen"
Was in der INI also Key und Value ist ...
...
das eigent sich nun besser als das Array oder eine LinkedList aus dem vorgeschlagenen Link, da dies bei vielen Wörtern so langsam ist.
Und vorallem wenn man diese SprachString in Laufzeit verwendet kann das zu problemne führen ...
Ich glaube Map ist da am geeignetsten.
Re: Sprache Separieren
Verfasst: 28.11.2009 15:45
von Shadow-Gamer
mal ne blöde Frage

was ist mit map gemeint?
Re: Sprache Separieren
Verfasst: 28.11.2009 16:03
von STARGÅTE
Maps (auch bekannt als Hashtable oder Dictionary; in Deutsch auch "Liste, Tabelle, Verzeichnis" genannt) sind Strukturen für das Speichern von Daten, welche entsprechend Ihren Bedürfnissen dynamisch zugewiesen werden. Es handelt sich dabei um eine Sammlung von Elementen (die Daten, die Sie speichern möchten) und jedes Element ist vollkommen unabhängig von den anderen. Sie können soviele Elemente hinzufügen, wie Sie möchten (oder soviele, wie in den Speicher Ihres Computers passen), und greifen mittels einem Key (Schlüssel) wieder darauf zu. Diese Art der Datenspeicherung ist sehr nützlich, wenn Sie schnellen Zugriff auf ein beliebiges Element benötigen. Die Einfüge-Reihenfolge der Elemente wird beim Verwenden einer Map nicht gespeichert (anders als bei einer @library"LinkedList" "LinkedList") und daher kann sie auch nicht sortiert werden.
Bevor Sie mit Maps arbeiten können, müssen Sie diese zuerst deklarieren. Dies kann mit dem Schlüsselwort NewMap erfolgen. Strukturen werden auch oft verwendet, um mehrere Daten in einem einzelnen Element zu speichern.
Beispiel:
Code: Alles auswählen
NewMap Language.s()
Language("File") = "Datei"
Language("Open") = "Öffnen"
Debug Language("File")
Debug Language("Save")
Debug Language("Open")
Re: Sprache Separieren
Verfasst: 28.11.2009 19:31
von Shadow-Gamer
Ok Danke, ich werde das ganze mal ausprobieren
Re: Sprache Separieren
Verfasst: 28.11.2009 22:49
von HeX0R
STARGÅTE hat geschrieben:
das eignet sich nun besser als das Array oder eine LinkedList aus dem vorgeschlagenen Link, da dies bei vielen Wörtern so langsam ist.
Hast du dir das "aus dem vorgeschlagenen Link" überhaupt mal angeschaut?
Das ist nämlich durchaus clever gelöst und mit Sicherheit nicht langsam.
Re: Sprache Separieren
Verfasst: 28.11.2009 23:07
von STARGÅTE
jo, hab ich, deswegen hab ich es ja geschrieben ...
Code: Alles auswählen
Procedure.s Language(Group$, Name$)
Static Group.l ; for quicker access when using the same group more than once
Protected String$, StringIndex, Result
Group$ = UCase(Group$)
Name$ = UCase(Name$)
String$ = "##### String not found! #####" ; to help find bugs
If LanguageGroups(Group)\Name$ <> Group$ ; check if it is the same group as last time
For Group = 1 To NbLanguageGroups
If Group$ = LanguageGroups(Group)\Name$
Break
EndIf
Next Group
If Group > NbLanguageGroups ; check if group was found
Group = 0
EndIf
EndIf
If Group <> 0
StringIndex = LanguageGroups(Group)\IndexTable[ Asc(Left(Name$, 1)) ]
If StringIndex <> 0
Repeat
Result = CompareMemoryString(@Name$, @LanguageNames(StringIndex))
If Result = 0
String$ = LanguageStrings(StringIndex)
Break
ElseIf Result = -1 ; string not found!
Break
EndIf
StringIndex + 1
Until StringIndex > LanguageGroups(Group)\GroupEnd
EndIf
EndIf
ProcedureReturn String$
EndProcedure
Die erste Schleife sucht eine Gruppe, die zweite Schleife sucht den Namen...
das dauert mit sicherheit länger (wenn man sehr viele Wörter hat) als alles in eine Map zu schmeisen und "nahezu" direkt auf ein Element zugreifen kann, auch wenn hier zB die Gruppe "gesavt" wird, und der Anfangsbuchstabe mit einem Index beschleunigt wird., was ja "anfänge" einer Map darstellt.
Das ist durch aus clever, nur jetzt löst die MAP das meiner Meinung nach ab !
Re: Sprache Separieren
Verfasst: 29.11.2009 01:11
von NicTheQuick
Wer PHP kennt, kann das in etwa mit assoziativen Arrays vergleichen. Oder eben die Maps in Java. Allerdings gibt es in Java verschiedene Arten von Maps. Map alleine ist da nur eine Obergruppe.
Re: Sprache Separieren
Verfasst: 29.11.2009 02:24
von Kaeru Gaman
wie effizient und performant Maps wirklich sind, wissen wahrscheinlich nur Freak und Fred....
außerdem gibt es zig Methoden so etwas zu veranstalten.
man kann genausogut die Schlüsselbegriffe als Konstanten definieren, in einer Enumeration,
und die sprachspezifischen Beschriftungen in einem Array ablegen, das über die Konstanten als Indices angesprochen wird.
das ist zwar weniger flexibel und garnicht zur Laufzeit manipulierbar, dafür performanter und einfacher als jede Liste oder Map.