Restore dynamisch Verwenden
Code: Alles auswählen
Procedure Language_Init()
Enumeration
#Language_English
#Language_German
#Language_Count = #Language_German
EndEnumeration
Structure Lang
name.s
String.s[#Language_Count+1]
EndStructure
NewList Lang.Lang()
EndProcedure
Procedure.l Language_Add(name.s,ger.s,eng.s)
AddElement(Lang())
Lang()\name = name
Lang()\String[#Language_German] = ger
Lang()\String[#Language_English]= eng
ProcedureReturn ListIndex(Lang())
EndProcedure
Procedure.l Language_AddID(ger.s,eng.s)
AddElement(Lang())
Lang()\name = Str(ListIndex(Lang()))
Lang()\String[#Language_German] = ger
Lang()\String[#Language_English]= eng
ProcedureReturn Val(Lang()\name)
EndProcedure
Procedure.s Language_Get(name.s,ind.l)
ForEach Lang()
If Lang()\name = name
Break
EndIf
Next
ProcedureReturn Lang()\String[ind]
EndProcedure
Procedure.s Language_GetID(id.l,ind.l)
SelectElement(Lang(),id)
ProcedureReturn Lang()\String[ind]
EndProcedure
Language_Init()
;-Erste Möglichkeit
Language_Add("sayhello","Hallo welt","Hello world")
Language_Add("headline","Dies ist die Überschrift", "This is the headline")
Language_Add("title","Hier der Titel", "Here the title")
Debug "!!!Erste Möglichkeit!!!"
Debug "Sayhello:"
Debug Language_Get("sayhello",#Language_German)
Debug Language_Get("sayhello",#Language_English)
Debug ""
Debug "Titel:"
Debug Language_Get("title",#Language_German)
Debug Language_Get("title",#Language_English)
Debug ""
Debug "Headline:"
Debug Language_Get("headline",#Language_German)
Debug Language_Get("headline",#Language_English)
Debug ""
;-Zweite Möglichkeit
Debug "!!!Zweite Möglichkeit!!!"
Second = Language_AddID("Ein Versuch mit der zweiten Möglichkeit","A try with the second thing (good english here)")
HalloWelt2 = Language_AddID("Ein Hallo Welt","A Hello World")
Debug "Second:"
Debug Language_GetID(Second,#Language_German)
Debug Language_GetID(Second,#Language_English)
Debug ""
Debug "Hallo Welt2:"
Debug Language_GetID(HalloWelt2,#Language_German)
Debug Language_GetID(HalloWelt2,#Language_English)
Wenn du sowas wie
meinst, dann nein ^^
Code: Alles auswählen
abc = new Array
Um nochmal zum alten Problem zu kommen:
Code: Alles auswählen
;Danke Danilo :D
DataSection
title:
Data.s = "Hier der Titel", "Here the title"
headline:
Data.s = "Dies ist die Überschrift", "This is the headline"
EndDataSection
Procedure.s GetLanguageText(restorep,lan.l)
ger.s = PeekS(restorep)
eng.s = PeekS(restorep+Len(ger)+1)
ret.s
If lan = 0
ret = ger
Else
ret = eng
EndIf
ProcedureReturn ret
EndProcedure
; Sprachen ( 0 = de, 1 = en )
MessageRequester("Deutsch",GetLanguageText(?title,0))
MessageRequester("English",GetLanguageText(?title,1))
MessageRequester("Deutsch",GetLanguageText(?headline,0))
MessageRequester("English",GetLanguageText(?headline,1))
Nach diversen Gesprächen bin ich mal auf den Vorschlag von bluejoke zurückgekommen und glaube doch, dass .ini-Dateien der richtige Weg sein könnte.
Also könnte ich eine oder mehrere .ini-Dateien in die Exe via IncludeBinary einschließen und dann diese ansprechen.
Wenn mir jetzt noch jemand einen Tipp geben kann, wie ich die dann beim Programmaufruf ansprechen kann?
Anscheinend geht das nicht einfach über den Dateinamen. Muß ich die erst in ein temporäres Verzeichnis packen, dann die Dateien einlesen und dann die Dateien im temporären Verzeichnis wieder löschen?
Also könnte ich eine oder mehrere .ini-Dateien in die Exe via IncludeBinary einschließen und dann diese ansprechen.
Wenn mir jetzt noch jemand einen Tipp geben kann, wie ich die dann beim Programmaufruf ansprechen kann?

eine ini-datei als ressource ist wohl nicht das richtige. Warum nicht die einfache Lösung
data.s "deutsch","englisch","französisch","oderwasauchimmer"
data.s ...
data "%ende%","%ende%"","%ende%"","%ende%" (soviel mal wie sprachen)
mit repeat-until %ende% alles in ein einfaches array einlesen und anzahl merken (dann natürlich durch anzahl sprachen teilen)
einzelne sparache einlesen aus array mit for next bis anzahl und step wobei im step die sprachposition festgelegt wird. absolut übersichtlich und einfach zu pflegen (data kann über include eingebunden werden) - so spart man sich jeglichen firlefanz.
data.s "deutsch","englisch","französisch","oderwasauchimmer"
data.s ...
data "%ende%","%ende%"","%ende%"","%ende%" (soviel mal wie sprachen)
mit repeat-until %ende% alles in ein einfaches array einlesen und anzahl merken (dann natürlich durch anzahl sprachen teilen)
einzelne sparache einlesen aus array mit for next bis anzahl und step wobei im step die sprachposition festgelegt wird. absolut übersichtlich und einfach zu pflegen (data kann über include eingebunden werden) - so spart man sich jeglichen firlefanz.
... hmmm
- Andre
- PureBasic Team
- Beiträge: 1765
- Registriert: 11.09.2004 16:35
- Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10 - Wohnort: Saxony / Deutscheinsiedel
- Kontaktdaten:
@derRaab: nochmal eine grds. Anregung zur Lokalisierung von Programmen:
Die Lokalisierung wird ja oftmals auch nach Veröffentlichung eines Programmes noch erweitert, z.B. durch Anwender die für ihre Muttersprache Dir eine Sprachdatei zur Verfügung stellen.
Warum also unbedingt die einzelnen unterstützten Sprachen von Anfang an komplett im Programm einbauen ?
Damit schränkst Du in dieser Beziehung Deine Anwender ein, da eben nicht nachträglich noch weitere Sprachen ergänzt werden können.
Oder Du müsstest jedes Mal eine neue Exe erstellen + zum Download stellen.
Ich habe es beim C.A.V.-Tool so gemacht, dass ich die drei "Haupt-Anwendersprachen" deutsch, englisch und französisch direkt ins Programm integriere. Alle weiteren Sprachen sind als Textdateien in einem Locale-Verzeichnis verfügbar und können unbegrenzt erweitert werden...
Du kannst natürlich für Deinen spezifischen Anwendungszweck Recht haben, aber evtl. solltest Du Dein Konzept nochmal überdenken...
Die Lokalisierung wird ja oftmals auch nach Veröffentlichung eines Programmes noch erweitert, z.B. durch Anwender die für ihre Muttersprache Dir eine Sprachdatei zur Verfügung stellen.
Warum also unbedingt die einzelnen unterstützten Sprachen von Anfang an komplett im Programm einbauen ?
Damit schränkst Du in dieser Beziehung Deine Anwender ein, da eben nicht nachträglich noch weitere Sprachen ergänzt werden können.
Oder Du müsstest jedes Mal eine neue Exe erstellen + zum Download stellen.
Ich habe es beim C.A.V.-Tool so gemacht, dass ich die drei "Haupt-Anwendersprachen" deutsch, englisch und französisch direkt ins Programm integriere. Alle weiteren Sprachen sind als Textdateien in einem Locale-Verzeichnis verfügbar und können unbegrenzt erweitert werden...

Du kannst natürlich für Deinen spezifischen Anwendungszweck Recht haben, aber evtl. solltest Du Dein Konzept nochmal überdenken...

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
ich persönlich bevorzuge eine lösung über textdateien. (die müssen dann ja garnicht .txt heissen)
in jeder datei sind alle im programm vorkommenden begriffe in einer festen reihenfolge drin.
beim programmstart oder einer sprachumstellung im options-menu,
wird dann von einer routine die datei der aktuellen sprachversion
in ein array geladen.
bsp:
german.dat
english.dat
im code selbst wird die länderspezifische beschriftung aus dem array angezeigt.
die eigentliche herausforderung liegt hier im design der buttons und textfelder,
die größe muss für alle sprachversionen vernünftig aussehen.
in jeder datei sind alle im programm vorkommenden begriffe in einer festen reihenfolge drin.
beim programmstart oder einer sprachumstellung im options-menu,
wird dann von einer routine die datei der aktuellen sprachversion
in ein array geladen.
bsp:
german.dat
Code: Alles auswählen
Hauptmenu
Einstellungen
weiter
zurück
OK
Dieses Programm wurde entwickelt von blablabla
Code: Alles auswählen
Mainmenu
Options
next
previous
OK
This program was developed by blablabla
die eigentliche herausforderung liegt hier im design der buttons und textfelder,
die größe muss für alle sprachversionen vernünftig aussehen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.