[ERLEDIGT] Anfänger Frage in Sachen Multilanguage

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

Re: Anfänger Frage in Sachen Multilanguage :(

Beitrag von udg »

Eine Frage zu folgendem Sachverhalt:

gibt es denn auch die Möglichkeit über die Map-Funktion von STARGÅTE, die ich nun erfolgreich eingearbeitet habe, folgende ROT markiert Teile noch zu übersetzen:
Case #Button_6;
open.s = OpenFileRequester("Open File", "", "ExE Files (*.exe)|*.exe|All Files (*.*)|*.*", 0)
If open <> ""
SetGadgetText(#String_6, open)
EndIf
und
AddGadgetColumn(#ListIcon_0, 1, "Filename", 150)
AddGadgetColumn(#ListIcon_0, 2, "Command line", 100)

mit welchem Befehl kann man hier die Übersetzung freischalten:
??????(#ListIcon_0, 1,Language()\Translate("Filename"))
??????(#ListIcon_0, 2,Language()\Translate("Command line"))


und geht diese Methode auch mit dem ToolTip?
GadgetToolTip(#Button_6, "Open File") ; Alt Tag über dem Button [...]
Grüße und vielen Dank für eure Hilfe
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
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Anfänger Frage in Sachen Multilanguage :(

Beitrag von Bisonte »

Ein String ist und bleibt ein String.

in der Hilfe steht :

Code: Alles auswählen

Syntax
DateiName$ = OpenFileRequester(Titel$, StandardDatei$, Pattern$, PatternPosition [, Flags])
Dein Titel$ wäre dann z.B. Language("English")\Translate("Open File") usw.

Das funktioniert natürlich mit allen Strings ;)
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 »

nun gut. folgendes habe ich bereits definiert:

Code: Alles auswählen

AddMapElement(Language(), "Deutsch")   ;füge Deutsch hinzu
    With Language()
    \Translate("Filename") = "Filename"
    \Translate("Command line") = "Command line"
    \Translate("Open File") = "Datei auswählen"
    \Translate("Filename") = "Filename"
    \Translate("ExE Files") = "ExE Dateien"
    \Translate("All Files") = "Alle Dateien"
EndWith
mit welcher Syntax kann ich die Strings nun übersetzen lassen?

definieren:

Code: Alles auswählen

Case 3;#Deutsch
        FindMapElement(Language(), "Deutsch")
???   (#ListIcon_0, 1, Language()\Translate("Filename"))        ; AddGadgetColumn Element    
???   (#ListIcon_0, 2, Language()\Translate("Command line"))    ; AddGadgetColumn Element
???    Language()\Translate("Open File")
???    Language()\Translate("ExE Files")
???    Language()\Translate("All Files")
EndSelect
selbiges bei den beiden Column's ?


Bild
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
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Anfänger Frage in Sachen Multilanguage :(

Beitrag von Danilo »

Ich würde das etwas übersichtlicher machen und ein Macro oder eine Procedure tr() oder translate() verwenden.
Für C gibt es eine verbreitete Bibliothek dafür, da ist das so üblich. Finde ich so lesbarer.

Code: Alles auswählen

Structure Language
    Map Text.s()
EndStructure

Global NewMap Languages.Language()
Global currentLanguage.s = "English"

Procedure AddLanguage_German()
    If AddMapElement(Languages(), "Deutsch")
        With Languages()
            \Text("Open")      = "Mit Programm öffnen..."
            \Text("Add")       = "Hinzufügen"
            \Text("Edit")      = "Bearbeiten"
            \Text("Delete")    = "Löschen"
            \Text("ExE Files") = "ExE Dateien"
            \Text("All Files") = "Alle Dateien"
        EndWith
    EndIf
EndProcedure


Procedure AddLanguage_English()
    If AddMapElement(Languages(), "English")
        With Languages()
            \Text("Open")      = "Open with application..."
            \Text("Add")       = "Add"
            \Text("Edit")      = "Edit"
            \Text("Delete")    = "Delete"
            \Text("ExE Files") = "ExE Files"
            \Text("All Files") = "All Files"
        EndWith
    EndIf
EndProcedure

Procedure SetLanguage(language.s)
    If FindMapElement(Languages(), language)
        currentLanguage = language
        ProcedureReturn #True
    Else
        currentLanguage = "English" ; default = English
        ProcedureReturn #False
    EndIf
EndProcedure

; Macro tr(_string_)
;     Languages(currentLanguage)\Text(_string_)
; EndMacro

Procedure.s tr(string.s)
    Protected result.s = Languages(currentLanguage)\Text(string)
    
    If result = ""          ; string not found, use default language: English
        result.s = Languages("English")\Text(string)
        If result = ""      ; string not found in english dictionary, ERROR
            result = string ; return string, translation not possible
            ;result = "<ERROR, string not found>"
        EndIf
    EndIf
    ProcedureReturn result
EndProcedure

;---------------------------------


AddLanguage_English()
AddLanguage_German()


Debug tr("Open")
Debug tr("Add")
Debug "----------"


SetLanguage("Deutsch")
Debug "--> Deutsch:"
Debug tr("Open")
Debug tr("Add")
Debug "----------"


SetLanguage("Thai")
Debug "--> Thai:"
Debug tr("Open")
Debug tr("Add")
Debug "----------"

SetLanguage("Deutsch")
Debug "--> Deutsch:"
Debug tr("Open")
Debug tr("Add")
Debug "----------"

SetLanguage("English")
Debug "--> English:"
Debug tr("Opn") ; error
Debug tr("Add")
Debug "----------"


SetLanguage("Deutsch")
Debug tr("ExE Files")+" (*.exe)|*.exe|"+tr("All Files")+" (*.*)|*.*"
SetLanguage("English")
Debug tr("ExE Files")+" (*.exe)|*.exe|"+tr("All Files")+" (*.*)|*.*"
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
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 »

Aus der Hilfe von 'ListIconGadget':
- SetGadgetItemText(): Changes the current text of the specified item. (or column header, if item = -1).
Das heißt mit 'SetGadgetItemText(#ListIcon_0, -1, Language()\Translate("Filename"), 0)' kannst du die Überschrift der ersten Spalte ändern und mit der 1 als letzten Parameter den Titel der zweite Spalte, usw.

Und das Problem mit dem "Open File" verstehe ich nicht so ganz. Wo liegt da das Problem?

Code: Alles auswählen

OpenFileRequester(Language()\Translate("Open File"), "", Language()\Translate("ExE Files") + " (*.exe)|*.exe|" + Language()\Translate("All Files") + " (*.*)|*.*", 0)
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 einmal mit FindMapElement eine Sprache gewählt hast, kannst du jederzeit und überall diese Sprache und deren Übersetungen verwenden:
Also auch in OpenFileRequester, der erst später aufgerufen wird: Language()\Translate("Open File")

Der Vorschlag von Danilo ist natürlich richtig.
Ich selbst habe mir auch ein Include dafür geschrieben, wo ich eine Procedure definiert habe, um zB auch auf Übersetzungslücken zu reagieren, oder mit Parametern zu arbeiten, die noch in die Übersetzung mit eingebunden werden sollen.
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 »

Hallo
erstmal großes Danke Danke für Eure Mühe und Tipps.
Zu meiner Verteidigung möchte ich sagen, dass ich dieses Programm nur
halbfertig von einem Freund bekommen habe und nun darüber sitz, um es zu einem ordentlichen Ende zu führen.

Wie Ihr wisst ist "Fremd Code" schwer nachvollziehbar da jeder seine Eigenarten hat beim schreiben von Programmcode
und somit hatte und habe ich diverse Schwierigkeiten mich zurecht zufinden.

Und Multilanguage , hui mein erster Versuch. Aber es geht voran. :allright: Auswählbar über den Button [Advanced>>]

Hier mein Zwischenstand, erstellt in PB v4.61 (einziges Problem das ich noch gelöst brauch: siehe DEBUG Ausgabe)
PS: ich hatte zuvor ein SubMenu erstellt. Leider gibt es keine Möglichkeit die Bezeichnung dafür, ohne große Umwege zu übersetzen.
Aus diesem Grund habe ich den SubMenü Eintrag weggelassen

Code: Alles auswählen

im letzten Post
Zuletzt geändert von udg am 27.11.2013 02:47, 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
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Anfänger Frage in Sachen Multilanguage :(

Beitrag von Bisonte »

schonmal daran gedacht den OpenFileRequesteraufruf zu ändern ?

Code: Alles auswählen

Title$    = Language()\Translate("Open File")
Pattern$  = Language()\Translate("ExE Files") + " (*.exe)|*.exe|"+Language()\Translate("All Files")+" (*.*)|*.*"
OpenFileRequester(Title$, "", Pattern$, 0)
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
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 »

Bisonte hat geschrieben:schonmal daran gedacht den OpenFileRequesteraufruf zu ändern ?
Siehe meinen letzten Post. Hat er wohl übersehen. :wink:
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

[ERLEDIGT] Anfänger Frage in Sachen Multilanguage :(

Beitrag von udg »

NicTheQuick hat geschrieben:
Bisonte hat geschrieben:schonmal daran gedacht den OpenFileRequesteraufruf zu ändern ?
Siehe meinen letzten Post. Hat er wohl übersehen. :wink:
Habs gesehen und dankend eingearbeitet :allright:

PS:
das mit dem ToolTip übersetzen geht auch?

Code: Alles auswählen

Endversion im letzten Post
Grüße
Zuletzt geändert von udg am 28.11.2013 03:53, insgesamt 1-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
Antworten