[ERLEDIGT] Anfänger Frage in Sachen Multilanguage

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

[ERLEDIGT] Anfänger Frage in Sachen Multilanguage

Beitrag von udg »

Hallo Leute und Brains,

Ich habe ein Tool soweit fertig, dass es läuft und macht was es nun mal machen soll. "Files einladen, im Kontextmenü
einen String eintragen somit man dann zB. mehrere "exe files" auf einmal, mit zB. ASPACK komprimieren kann, wenn dieser
Packer im Tool selber vorher in die Liste hinzugefügt wurde." Läuft.......

soweit so gut.

Nun habe ich jedoch die Anfrage bekommen das Tool in 3 verschiedene Sprachen verfügbar zu machen. Also MultiLanguage.
Hierfür suche ich dringend eine freundliche helfende Hand die mir bei der Lösung zur Seite steht. Multilanguage ist nicht mein
Ding :( und habe leider mit diversen Beispielen nichts anfangen können die mir auf die Sprünge helfen würden.

Folgende Sprachen sollen inkludiert sein:
~ Deutsch
~ Englisch
~ Spanish

weitere könnten im Nachhinein folgen.
Ich möchte jedoch die Sprachen direkt in den Source Code implementiert haben und keine externe *ini laden. falls das ohne
Probleme zu bewerkstelligen geht.
Ändern sollen sich hier nicht sehr viele Strings. Nur der Button Text und wenige Infos im Tool selber.

Alles in Allem handelt es sich um 21 Wörter je Sprache.

Wenn der Anwender nun den Button [Erweitert >>] --> [Sprache] --> [English] drückt, möchte ich, dass sich dann das Tool
in die Englische Sprache ändert. Selbiges für die anderen beiden Sprachen.

Über eine schnelle Hilfe würde ich mich sehr freuen und auch bereit sein zu honorieren.

Ich habe Euch das Tool angehängt um es einmal ansehen zu können.
Unter dem Button [Über] habe ich noch ein kleines NFO Demo programmiert :)
Exe Packer: UPX

Erstellt ist das Ganze mit PureBasic v 4.61 32Bit unter Windows 7

Final Version Download Direkt-Link 30.11.2013:
FileMenu-Tool

so long

inc.


hier einmal meine 3 Language Files (Die Sprachen sind im Gadget deklariert. --> Beispiel: TextGadget(#Text_7, 23, 405, 80, 18, "Kommandozeile:")

Code: Alles auswählen

Landessprache     = Deutsch
Author   	  = inc

[Lines]
L0001   = Mit Programm öffnen...
L0002   = Name
L0003   = Dateien
L0004   = Hinzufügen
L0005   = Löschen
L0006   = Bearbeiten
L0007   = Dateiname
L0008   = Name:
L0009   = Datei:
L0010   = Kommandozeile:
L0011   = Über
L0012   = Erweitert >>
L0013   = Beenden
L0014   = Registriere\ lösche Kontextmenü Eintrag
L0015   = Sprache
L0016   = 
L0017   = Dateiname
L0018   = Kommandozeile
L0019   = Datei auswählen
L0020   = ExE Dateien
L0021   = Alle Dateien
L0022	= Dateiname
; End of Language ini

Code: Alles auswählen

Native Language		= Español
Author   		= LordCoder

[Lines]
L0002   = Abrir con la aplicación...
L0002   = Nombre
L0003   = Elementos
L0004   = Añadir
L0005   = Borrar
L0006   = Administrar
L0007	= Nombre de Archivo
L0008   = Nombre:
L0009   = Nombre de Archivo:
L0010   = Línea de Comandos:
L0011   = Acerca de
L0012   = Avanzado >>
L0013   = Salir
L0014   = Registrar Extensión Shell
L0015   = Idioma
L0016	= 
L0017   = Nombre de archivo:
L0018   = Línea de comandos:
L0019   = Abrir Archivo
L0020   = Archivos ExE
L0021   = Todos los archivos
L0022   = Nombre de Archivo
; End of Language ini

Code: Alles auswählen

Native Language  = English  
Author           = inc

[Lines]
L0001   = Open with application...
L0002   = Name
L0003   = Items
L0004   = Add
L0005   = Delete
L0006   = Manage
L0007	= Filename
L0008   = Name:
L0009   = Filename:
L0010   = Command line:
L0011   = About
L0012   = Advanced >>
L0013   = Exit
L0014   = Register\ unregister Shell Extension
L0015   = Language
L0016	= 
L0017   = Filename
L0018   = Command line
L0019   = Open File
L0020   = ExE Files
L0021   = All Files
L0022	= Filename
; End of Language ini
Zuletzt geändert von udg am 30.11.2013 21:39, insgesamt 4-mal geändert.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Anfänger Frage in Sachen Multilanguage :(

Beitrag von STARGÅTE »

Wenn du eh keine externen INI-FIles haben möchtest, kannst du die Übersetzungen ja direkt in einer Map speichern.

Hier mal ein Beispiel, wo ich oben zwei Sprachen definiere und dann unten auswähle welche benutzt werden soll:

Code: Alles auswählen

Structure Language
	Map Translate.s()
EndStructure

Global NewMap Language.Language()

; Definieren

AddMapElement(Language(), "Deutsch")
With Language()
	\Translate("Open")   = "Mit Programm öffnen..."
	\Translate("Add")    = "Hinzufügen"
	\Translate("Edit")   = "Bearbeiten"
	\Translate("Delete") = "Löschen"
EndWith

AddMapElement(Language(), "English")
With Language()
	\Translate("Open")   = "Open with application..."
	\Translate("Add")    = "Add"
	\Translate("Edit")   = "Edit"
	\Translate("Delete") = "Delete"
EndWith

; Benutzen

FindMapElement(Language(), "Deutsch")

Debug Language()\Translate("Delete")
Debug Language()\Translate("Edit")

FindMapElement(Language(), "English")

Debug Language()\Translate("Delete")
Debug Language()\Translate("Edit")
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Anfänger Frage in Sachen Multilanguage :(

Beitrag von Bisonte »

Ich würde nur eine Sprache fest integrieren und diese trotzdem auch als Language.ini mitgeben,
damit sie als Basis für eigene Kreationen dienen kann.

Eingelesen wird eine Sprache nur wenn das File vorhanden ist, ansonsten die eingebaute.
Da diese nur eingelesen werden, reicht eine Abspeicherung per Installation im Programmordner.

Und innerhalb des Programmes mit einer Map, wie Stargate beschrieb.
Wobei ein NewMap Sprache.s() reicht (es werden ja andere bei Bedarf nachgeladen), weil
ja nur eine Sprache aktiv sein kann.

Wenn alle fest integriert sind, kann ja niemand ausser Dir Sprachen hinzufügen ;)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Anfänger Frage in Sachen Multilanguage :(

Beitrag von udg »

Bisonte hat geschrieben:Ich würde nur eine Sprache fest integrieren und diese trotzdem auch als Language.ini mitgeben,
damit sie als Basis für eigene Kreationen dienen kann.

Eingelesen wird eine Sprache nur wenn das File vorhanden ist, ansonsten die eingebaute.
Da diese nur eingelesen werden, reicht eine Abspeicherung per Installation im Programmordner.

Und innerhalb des Programmes mit einer Map, wie Stargate beschrieb.
Wobei ein NewMap Sprache.s() reicht (es werden ja andere bei Bedarf nachgeladen), weil
ja nur eine Sprache aktiv sein kann.

Wenn alle fest integriert sind, kann ja niemand ausser Dir Sprachen hinzufügen ;)
Angedacht ist: die Sprache "englisch" als default Language
und was ich vorhabe, da hast Du genau meine Gedanken gelesen: die englische.ini soll auf jeden fall mitgeliefert werden, damit weitere Landessprachen editiert werden können
und mir zugesendet, sodass ich dann das Pulldownmenü erweitere und die entsprechende Sprache in den Code implementiere.

Der Gedanke ist, keine externen ini's einzulesen da sonst evtl. einmal jemand Schindluder betreibt und Müll in eine INI schreibt die dann das Programm verhunzt.
(es gibt zwar immer Wege ein Programm zu zerstören aber so sollte es ausreichen)
Aus diesem Grund möchte ich die Sprachen in den Code implementieren.

@Stargate

Danke für den Tipp. ich werde das sofort ausprobieren :)

Interessenfrage:
Habt Ihr das Tool einmal geladen und getestet? evtl. Bugs?

Danke Euch
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Anfänger Frage in Sachen Multilanguage :(

Beitrag von Derren »

Ich verstehe das Problem nicht. Hast du Angst, dass jemand Code in die ini-Datei schreiben könnte, die dein Programm zerstört?
Wenn eine ini-Datei nur Murks enthält, weil jemand damit rumgespielt hat, kann man sich von deiner Website einfach die entsprechende Sprache herunterladen. Fertig.

Ich würde auf jeden Fall eine Auswahlmöglichkeit anbieten:
"Folgende Sprachen sind implementiert
(Liste aller Sprachen, die du deinem Programm hinzugefügt hast)
Folgende Sprachen stehen als externe Dateien zur Verfügung
(Auflistung aller ini-Dateien im Verzeichnis)"
Signatur und so
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Anfänger Frage in Sachen Multilanguage :(

Beitrag von udg »

Derren hat geschrieben:Ich verstehe das Problem nicht. Hast du Angst, dass jemand Code in die ini-Datei schreiben könnte, die dein Programm zerstört?
Wenn eine ini-Datei nur Murks enthält, weil jemand damit rumgespielt hat, kann man sich von deiner Website einfach die entsprechende Sprache herunterladen. Fertig.

Ich würde auf jeden Fall eine Auswahlmöglichkeit anbieten:
"Folgende Sprachen sind implementiert
(Liste aller Sprachen, die du deinem Programm hinzugefügt hast)
Folgende Sprachen stehen als externe Dateien zur Verfügung
(Auflistung aller ini-Dateien im Verzeichnis)"

Nein, da hab ich keine Angst, das jemand damit Unfug betreibt(maximal Vorbeuge wie bereits erwähnt).
Mir gings einfach nur darum, dass kein Müll eingetragen wird und verbreitet.

Die english.ini wird auf jeden fall mitgeliefert damit, wie schon erwähnt, jemand von Frankreich zB. diese übersetzen kann, mir schicken und ich hämmer es ins Tool. Standardmäßig wird das Tool immer english starten. Egal ob die english.ini dabei ist oder nicht denn wenn eine ini sofort eingelesen werden könnte, ---> zb. nimmt man die english.ini und schreibt seine Sprache rein. Könnte man diese dann unter dem namen english.ini speichern und würde vom Tool automatisch dann französisch geladen, jedoch wäre das Pulldown Menü nicht mit der Landessprachenkennung zur Auswahl versehen.

Verstehst Du mein Anliegen ;) ?

Das ist der Hauptgrund.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Anfänger Frage in Sachen Multilanguage :(

Beitrag von udg »

Hallo STARGÅTE.

Danke für Deine Hilfe und den Denkanstoß wie ich zu meinem Ziel komme... :allright:

nun habe ich Deinen Code übernommen und angepasst. Es ist nun möglich über den Button:
ADVANCED >>
Language
English|Deutsch|Espanol

die Übersetzung (Debugger seitig) zu aktivieren und zu überprüfen das es nun funktioniert. Danke für den Tipp.

Ich habe jedoch ein weiteres Problem, es entzieht sich meiner Kenntnis wie ich die Übersetzung
auf meine Tool Oberfläche nebst Gadgets anwende um die Debuger Ausgabe (die ja schon toll funktioniert)
eben nicht mehr im Debugger sondern in meinem Programm anwenden zu können.
Kurzum: Das es funktioniert ;)

Hierfür wäre ich für einen weiteren Tip/ Hilfe/ Lösung sehr sehr dankbar.
Die Oben im Code erzeugten Gadgets/API ect. müssen nun mit einer Variable gekennzeichnet werden damit
sie angesprochen werden und die jeweilige MAP ihren Dienst tut.

Code einfach kopieren und kompilieren. Erstellt mit PB V4.61

Code: Alles auswählen

Im letzten Post

viele Grüße und danke an alle für Eure Hilfe

inc.
Zuletzt geändert von udg am 27.11.2013 02:46, insgesamt 2-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Anfänger Frage in Sachen Multilanguage :(

Beitrag von NicTheQuick »

Ich hab eine andere Frage. Wieso machst du mehrere "Select Event"-Blöcke? Einmal "Select Event" und dann "EndSelect" reicht doch völlig. Oder findest du das so übersichtlicher? ;)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Anfänger Frage in Sachen Multilanguage :(

Beitrag von STARGÅTE »

inc hat geschrieben:Ich habe jedoch ein weiteres Problem, es entzieht sich meiner Kenntnis wie ich die Übersetzung
auf meine Tool Oberfläche nebst Gadgets anwende um die Debuger Ausgabe (die ja schon toll funktioniert)
eben nicht mehr im Debugger sondern in meinem Programm anwenden zu können.
Anstatt debug zu schreiben, kannst du für deine Elemente aud der Oberfläche einfach mit SetGadgetText, den Anzeigetext ändern.

Code: Alles auswählen

SteGadgetText(#Button_0, Language()\Translate("Add"))
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Anfänger Frage in Sachen Multilanguage :(

Beitrag von udg »

NicTheQuick hat geschrieben:Wieso machst du mehrere "Select Event"-Blöcke? Einmal "Select Event" und dann "EndSelect" reicht doch völlig. Oder findest du das so übersichtlicher? ;)
rein aus Übersichts-Gründen. Natürlich kann ich vieles zusammenfassen und auch unnötiges hier und da noch entfernen.
Sollte ich den Code in einem Jahr mal wieder gebrauchen oder auch andere meiner Projekte, habe ich so, schnell wieder den Überblick und finde sofort alles was ich gleich mit Copy&Paste ( wird nicht gern gelesen aber spart Zeit) in meine neuen Sachen verwenden. Somit muss nicht alles neugeschrieben werden. Jeder hat da so seine eigene Herangehensweise ;)
Hatte nach 10 Jahren PlayStation1 Coding alles vergessen und damals in den Codes nur das nötigste Kommentiert. Es war furchtbar alles wieder zu begreifen. Daraus habe ich gelernt.

STARGÅTE hat geschrieben:Anstatt debug zu schreiben, kannst du für deine Elemente auf der Oberfläche einfach mit SetGadgetText, den Anzeigetext ändern.
Vielen vielen Dank. Natürlich SetGadgetText :) In der unendlichen Vielfalt von Befehlen muss einem erstmal immer alles in den Sinn kommen :)

Ich werde nun den Code anpassen und hoffen, dass ich es auf jede notwendige Übersetzungszeile anwenden kann. Da ich auch ein paar Übersetzungen brauche die nicht als Gadget deklariert sind. Na schauen wir mal....
Ich gebe dann FeedBack

LG
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Antworten