Seite 2 von 4
Re: Anfänger Frage in Sachen Multilanguage :(
Verfasst: 26.11.2013 04:21
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
Re: Anfänger Frage in Sachen Multilanguage :(
Verfasst: 26.11.2013 04:57
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

Re: Anfänger Frage in Sachen Multilanguage :(
Verfasst: 26.11.2013 05:35
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 ?

Re: Anfänger Frage in Sachen Multilanguage :(
Verfasst: 26.11.2013 07:58
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")+" (*.*)|*.*"
Re: Anfänger Frage in Sachen Multilanguage :(
Verfasst: 26.11.2013 10:58
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)
Re: Anfänger Frage in Sachen Multilanguage :(
Verfasst: 26.11.2013 12:41
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.
Re: Anfänger Frage in Sachen Multilanguage :(
Verfasst: 26.11.2013 16:24
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.

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
Re: Anfänger Frage in Sachen Multilanguage :(
Verfasst: 26.11.2013 17:29
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)
Re: Anfänger Frage in Sachen Multilanguage :(
Verfasst: 26.11.2013 17:44
von NicTheQuick
Bisonte hat geschrieben:schonmal daran gedacht den OpenFileRequesteraufruf zu ändern ?
Siehe meinen letzten Post. Hat er wohl übersehen.

[ERLEDIGT] Anfänger Frage in Sachen Multilanguage :(
Verfasst: 27.11.2013 01:58
von udg
NicTheQuick hat geschrieben:Bisonte hat geschrieben:schonmal daran gedacht den OpenFileRequesteraufruf zu ändern ?
Siehe meinen letzten Post. Hat er wohl übersehen.

Habs gesehen und dankend eingearbeitet
PS:
das mit dem ToolTip übersetzen geht auch?
Grüße