![]() |
Anwendung mit Resourcestring mehrsprachig, aber wie?
Hallo,
ich möchte meine Anwendung mehrsprachig machen, dass heißt Englisch und Deutsch. Nun habe ich im Forum gesucht und einige Themen gefunden die sich mit mehrsprachige Anwendungen beschäftigen. Doch die meisten verwenden wohl die GNU GetText, die ich nicht nehmen will sondern ich möchte es über eine Resource selber machen. Die Frage ist, wie ich solch eine Resource erstelle? Ich weis es geht über Resourcestring, aber ich habe mich damit noch nie beschäftigt, dass soll sich nun ändern :wink:. Gruß Mazel |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Und wieso nicht über GNU GetText?
Ab der Pro-Version gäbe es noch die Möglichkeit mit Resourcen-DLL's zu arbeiten und auch noch IDE-Unterstützung zu haben. Aber wenn du nur die Personal-Version hast wirst Du diese Möglichkeit nicht haben. |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Hi,
mit der Personal ist es also nicht möglich eine mehrsprachige Anwendung ohne zusätzliche Programme zu erstellen? |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Möglich schon aber mit großen Aufwand.
|
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Mhm,
man könnte doch Konstanten deklarieren und immer, wenn der Benutzer die Sprache ändert, die entsprechenden Konstanten setzen. Gruß Mazel |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Möglichkeiten gibt es viel und jede Methode hat Vor und Nachteile.
Aber wieso nicht eine fertige Lösung nehmen die schon viele der Probleme gelößt hat auf die du stoßen wirst wenn du die nächste Variante entwickelst. |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Mhm.
ok, du hast mich überzeugt. Das Problem, was die GNU GetText hat ist, das sie nicht frei ist, oder habe ich da falsche Informationen? Ich muss doch da eine Licene.txt und noch andere Informationen mitliefern, oder doch nicht? Gruß Mazel |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Zitat:
erstelle eine neue DLL und füge dieser einfach Resourcestrings hinzu:
Delphi-Quellcode:
Diese Resourcestring werden wie Konstanten definiert nur eben mit dem Schlüsselwort "resourcestring" anstatt "const". Das sorgt dann dafür, daß diese Strings in die Resourcen des betreffenden Moduls (also der DLL oder der EXE) aufgenommen werden.
resourcestring
STEXT1 = 'Das ist Text Nummer 1'; STEXT2 = 'Hier ist noch ein Text'; Anschliessend können diese Strings mittels "LoadString" aus der Resource geladen werden. Da sich Resourcen in (z.B.) DLLs auslagern lassen können diese ganz einfach ausgetauscht werden => andere Sprache. GNUGetText nimmt dir diese ganze Arbeit nun ab und verwendet eine eigene Version von "LoadString" welche die Daten nicht aus der Resource sondern aus den MO-Dateien liest. Die Übersetzung findet also fast ohne eine Zeile Code (genauer ein Aufruf von "TranslateComponent()") von deiner Seite statt. Warum willst du GNUGetText nicht verwenden? Texte die nicht in Formularen (DFM-Dateien) sondern im Code stehen müssen trotzdem als Resourcestrings definiert werden da GNUGetText diese ausliest wenn die PO-Dateien erzeugt werden. Ciao, Ralf |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Hi,
warum ich die GNU GetText nicht haben will steht ein Beitrag weiter oben. Wenn ich das so mache wie du, wo ist dann der andere Teil für die englische Sprache? Gruß Mazel |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Zitat:
Wenn du das System einfach nur verwendest dann muss keine Lizenz weitergegeben werden. Ciao, Ralf |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Aso, ok dann werde ich mir Hilfe wohl doch anschaffen.
Danke. Gruß Mazel |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
HI,
wie wende ich die GNU Gettext nun an? Gruß Mazel |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Halli Hallo,
Zitat:
Link: ![]() Dort wird eigentlich alles Schritt für Schritt erklärt. Ciao, Ralf |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Oh, nein hatte ich mir nicht durchgelesen, werde ich aber jetzt tun, danke.
Edit: Ich habe mir diese Seite nun durchgelesen, und habe eine po sowie eine mo Datei erstellt. Doch wie kann ich die Sprache in meine Anwendung einbringen? Darüber steht nichts auf der Seite. Und wie kann ich die Sprache zur Laufzeit ändern? Gruß Mazel |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Hi,
aaalso: Du entwickelst deine Anwendung erst einmal ganz normal ohne dich um die Sprachproblematik zu kümmern. Ich entwickle immer alles in Englisch und zwar aus dem ganz einfachen Grund, weil ich ein englisches Delhi habe und bei den meisten Komponenten/Bibliotheken alle Meldungen auch in englisch gehalten sind. So habe ich eine konsistente Ausgangsbasis. Dann scannst du mit GNUGettext deinen Source und erhälst eine PO-Datei. Diese kopierts du in jeweils ein Verzeichnis pro Sprache (z.B. <PROGRAMMVERZEICHNIS>\locale\LC_MESSAGES\DE für Deutsch). Die PO-Dateien werden dann mit (z.B.) POEdit in die gewünschte Zielsprache übersetzt. Beim Speichern entsteht automatisch die MO-Datei. Wenn das Programm auf einem Deutschen Windows läuft und eine MO-Datei für Deutsch vorhanden ist, so wird dxGetText automatisch alles in Deutsche übertragen wenn "TrnaslateComponent(Self)" ausgeführt wird. Wenn das Programm verschiedene Sprachen unterstützen soll, so muss für jede Sprache ein Verzeichnis mit der übersetzten MO-Daatei existieren. Im Programm kann durch den Aufruf von "UseLanguage(<SPRACHCODE>)" vor dem "TranslateComponent()" die Sprache bestimmt werden. Wenn das Programm also also auf Spanisch laufen soll so wird folgendes augefrufen:
Delphi-Quellcode:
Der Parameter bei "UseLanguage" ist immer der ISO-Code der Sprache. Das Verzeichnis in "locale" muss genauso benannt sein.
UseLanguage('ES');
TranslateComponent(Self); Findet dxGetText die jeweilige Sprache nicht so tut es einfach: nichts. Das Programm erscheint dann so wie es in Delphi erstellt wurde (also z.B. in Englisch). Das macht es sehr einfach neue Sprachen hinzuzufügen ohne das Programm neu zu erstellen, also z.B. auf dem Rechner des Benutzers durch einen Download neuer Sprachdateien. Ich hoffe das hilft erst einmal ein wenig weiter, Ciao, Ralf |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Danke für diese ausführlichen Informationen. So wie es aussieht muss ich also die Sprachdateien mitliefern, und POEdit ist also auch notwendig, wenn ich den deutschen Text in Englisch übersetzen will?
Gruß Mazel |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Genau. Die Sprachdateien werden vom Setup in die entsprechenden Verzeichnisse kopiert.
POEdit ist nur ein etwas komfortabler Weg die PO-Dateien zu bearbeiten. Man kann sie auch mit jedem Editor der UTF-8 speichern kann bearbeiten. POEdit bietet aber z.B. ein TranslationMemory an damit man Sachen die man schon mal übersetzt hatte nicht komplett neu übersetzen muss. [EDIT:] man kann die Sprachdateien auch an das Programm "kleben" in dem "HowTo" steht ziemlich weit unten, wie das geht (rechte Maustaste auf die EXE, dann "Embedd strings"...) Ciao, Ralf |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Ok, danke.
Ich werde diese Tools aber doch nicht verwenden, es ist einfach zu ümständlich. Ich habe es nun folgendermaßen gelöst (ist natürlich noch nicht fertig):
Delphi-Quellcode:
Ist einfacher und braucht keine weiteren Programme. Ich brauche zwar bis zu 40 Zeilen Code für die Zuweisung aber ich kann den Text in dem Array ohne weiteres ändern.
//eine Array-Konstante mit beiden Sprachen:
Lang: array[1..12] of String = ('Datei', 'File', 'Öffnen', 'Open', 'Liste der PlugIns...', 'PlugIns...', 'Beenden', 'Close', 'Effekte', 'Effects', 'Vollbild', 'Fullscreen'); //Im Menü gibt es die Möglichkeit die Sprache zu ändern über Optionen -> Sprache -> Englsich oder Detusch //im Tag steht für Deutsch die 1 und für Englisch die 2 eingegeben //die SetLanguage Prozedur wird beim Klick auf die ensprechende Sprache aufgerufen procedure TForm1.SetLanguage(LangID: Word); begin //LangID: 1 - Deutsch; 2 - Englisch Datei.Caption:=Lang[0 + LangID]; Oeffnen.Caption:=Lang[2 + LangID]; PlugIns.Caption:=Lang[4 + LangID]; Beenden.Caption:=Lang[6 + LangID]; Effekte.Caption:=Lang[8 + LangID]; Vollbild.Caption:=Lang[10 + LangID]; end; Gruß Mazel |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Zitat:
Kannst du dir vorstellen, wie kompliziert so etwas zu warten ist wenn immer mehr Formulare hinzukommen und dann eventuell noch eine weitee Sprache unterstützt werden soll? Mit dxGetText wird einfach nur eine weitere MO-Datei dazukopiert und fertig ist die Sache. Neue Formulare sind hinzugekommen? Mit dxGetText neu den Source scannen, das alte PO-File mit dem neuen "mergen" (dafür gibt es auch einen Menüpunkt bei dxGetText) und nur noch die z.B. 10 neu hinzugekommenen Strings übersetzten. Fertig. Es geht eigentlich kaum unkomplizierter (OK, bei 5 Menüpunkten und eventuell 3 Bildschirmmeldungen sieht deine Lösung noch einfacher aus. NOCH!) :wink: Ciao, Ralf |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
also ich verwende folgende möglichkeit:
![]() in einer extradatei werden die strings auf folgende weise gespeichert. (lässt sich auch auf mehrere dateien verteilen -> eine datei pro sprache)
Code:
STRINGTABLE
BEGIN 1, "Sprachwandler" 2, "Deutsch" 3, "Englisch" 1001, "LanguageChanger" 1002, "German" 1003, "English" END da mein programm immer umfangreicher wurde, wuchs auch die liste mit den begriffen. klappte aber trotzdem alles wunderbar. ich würde mir aber ein programm zum bearbeiten der strings wünschen. sowas in der art von POEdit. ich habe leider keine info dazu gesehen, ob sich POEdit in soweit anpassen lässt, dass es auch mit anderen resource-dateien zurecht kommt. es müsste eben die darstellung 1, "Sprachwandler" korrekt auseinandergenommen werden. hat jemand eine idee dafür? (also ob das mit POEdit geht oder mit einem anderen programm?) schlimmstenfalls müsste ich mir selber was basteln, wäre aber schön, wenn ich mir die zeit sparen könnte. ;) |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Zitat:
Wenn man schreibt:
Code:
entsteht in der EXE (oder in der DLL) genau die selbe STRINGTABLE!
resourcestring
S1 = 'Sprachwandler'; S2 = 'Deutsch'; S3 = 'Englisch'; S1001 = 'LanguageChanger'; S1002 = 'German'; S1003 = 'English'; Ciao, Ralf |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
ich habe leider deine aussageabsicht nicht ganz verstanden.
wie hilft mir das bei meiner frage? |
Re: Anwendung mit Resourcestring mehrsprachig, aber wie?
Zitat:
Es existieren mittlerweile Lösungen (unter anderem dxGetText) die die Lokalisierung ohne oder mit minimalsten Codeänderungen möglich machen und die es ausserdem erlauben neue Sprachen ohne neu-compillieren der EXE hinzuzufügen. Aber nochmal zu deiner Frage: POEdit kann nur PO-Dateien bearbeiten. Etwas anderes ist ja auch nicht nötig, da diese Art der Lokalisierung eine der einfachsten und unkompliziertesten ist. Es mag eventuell kommerzielle Übersetzungssuiten geben die allees noch einfacher machen aber die kosten dann eben was! Schön wäre es natürlich wenn Source-Scanner, Übersetzungseditor und Translation Memory direkt als Experten in der IDE vorhanden wären oder wenn man eine Vorschau der übersetzen Formulare erzeugen könnte (wegen der unterschiedlichen Stringlängen) Aber soll doch jeder die Lokalisierungsmethode verwenden die ihm am besten gefällt... Ciao, Ralf |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz