![]() |
Tipps zu mehrsprachigen Programmen
Hallo!
Ich beschäftige mich derzeit mit der Frage, wie ich meien Programme am besten Mehrsprachig gestellten kann. Hier gibt es ja schon eine Reihe von Diskussionen über die Verschiedenen Möglichkeiten (GNU Gettext, Multilizer, INI-Dateien, Ressource-DLLs, etc), ich hätte jedoch noch ein paar allgemeine Fragen. Ich möchte meine Programme gerne so erstellen, dass die Sprache zur Laufzeit nicht geändert werden kann. Das Programm wird also mit einer Sprache compiliert, die dann nicht mehr geändert werden kann. Ideal wäre es, wenn das Programm anschließend nur aus der EXE bestehen würde, also keine weiteren Dateien benötigt werden aus denen sich die EXE die übersetzten Daten holt. Die Programme enthalten sowohl Texte (logisch...) als auch Bilder mit Texten, die übersetzt werden müssten. Wie wäre so etwas am Besten zu lösen? Die Diskussionen die ich hier gefunden haben, beschäftigen sich nur mit der Übersetzung der Text. Wie bekomme ich unterschiedliche Bilder in das Programm? Ich stelle mir das so vor: (ich habe von Ressource-Dateien wenig Ahnung, also bitte nicht lachen wenn das totaler Quatsch ist...) Bilder und Text werden für jede Sprache in einer eigenen Ressource-Datei (SpracheX.res, SpracheY.res, ...) angelegt. Die Ressource Datei Sprache.res wird in das Delphi-Projekt eingebunden und kann dann darin verwendet werden.
Delphi-Quellcode:
Je nach gewünschter Sprache wird die Datei SpracheXYZ.res in das Projektverzeichnis kopiert, in Sprache.res umbenannt und das Projekt compiliert. Ergebis: Das Programm in Sprache XYZ...
{$R Sprache.res}
... label1.Caption := sprache.string1; label2.Caption := sprache.string2; ... image.Picture := sprache.image1; ... Ist etwas in der Richtung machbar (wie?) oder ist das Quatsch? Wie würdet ihr die Aufgabe sonst lösen? Besten Dank Ares |
Re: Tipps zu mehrsprachigen Programmen
Also für den Text würde ich GNU gettext nehmen. Wenn die Sprache fest eingestellt sein soll, dann kannst Du die jeweiligen übersetzten Daten (mo-Files) an die Exe anbinden. So hast Du nur eine Datei, die alles enthält.
Mit den Bildern hab ich auch keine Idee. Was sind denn das für Bilder? In der Regel sollte man bei mehrsprachigen Programmen ja sprachabhängige Bilder verzichten, sonst artet das schnell in Arbeit aus. Eindeutige Symbole, die von allen verstanden werden, sind da sinnvoller. |
Re: Tipps zu mehrsprachigen Programmen
Ich habe für Bilder (also Skizzen von Produkten mit Bemaßung und produktspezifischen Beschriftungen) ein kleines Tool geschrieben, das aus einem Bild (Nur eine Zeichung) zur Laufzeit die aktuellen Beschriftungen in der jeweiligen Landessprache und Einheiten (inch, mm etc.) zeichnet. Der Aufwand dafür ist relativ überschaubar.
Ich kenne GetText nicht. Ich habe mit der ITE von Delphi gearbeitet und mich fast deswegen umgebracht :wall: . Multilizer soll angeblich das Geilste sein, was es gibt. Kein Wunder, kostet auch ne Stange Geld. Nur wir konnten es nicht verwenden, da es ein Tool (8 MB, 100 BDE Tabellen, 100 Formulare) nicht übersetzen konnte. Die anderen Produkte, die es so gibt, habe ich z.T. getestet (Visual Localize und ein Teil aus Tschechien), ging bei uns nicht richtig. Dann wollte Ich auf TsiLang umsteigen, was wohl ziemlich gut ist (hat ettliche Preise eingeheimst). während die o.g. Produkte auf der EXE aufbauen und Resourcen patchen, ist TsiLang sourcecode basiert. Die ITE von Delphi (6.0 Enterprise benutze ich) hat den Vorteil, das man die Forms, Labels etc für jede Sprache individuell anpassen kann. Der riesige Nachteil ist der, das man jedesmal alles Neu übersetzen muss. Weiterhin muss man aufpassen, wie ein Luchs: Projektdateien einfach mal so verschieben quitiert die ITE mit absolut hirnrissigen Fehlermeldungen immerhin bekommt man alles wieder repariert, aber bis man einigermassen flüssig damit arbeiten kann, vergehen schon Monate. |
Re: Tipps zu mehrsprachigen Programmen
Hi Ares,
mach es doch über Units, in denen die diversen Strings definiert sind. Bzw. Bilder in res-Dateien. Auswahl dann über Compiler-Optionen ($ifdef). So bleibt das Prog auch schön klein, da ja nur die benötigten Texte/Bilder enthalten sind. |
Re: Tipps zu mehrsprachigen Programmen
Hallo!
Zitat:
Zitat:
Besten Dank Ares |
Re: Tipps zu mehrsprachigen Programmen
Zitat:
|
Re: Tipps zu mehrsprachigen Programmen
Zitat:
Bei liefen die Komponenten einwandfrei, Fehlermeldungen bekam ich bis jetzt noch keine. Ich habe die Kompos in Delphi 4 und Delphi 6 genutzt, allerdings bezahlt, und nicht als Shareware. |
Re: Tipps zu mehrsprachigen Programmen
Zitat:
Zitat:
Hat sonst noch jemand einen Tipp, wo ich mich über den Umgang mit Res-Dateien schlau machen kann? Besten Dank Ares |
Re: Tipps zu mehrsprachigen Programmen
Zitat:
Ich hatte damals die Komponenten benutzt, und da wurde unter anderem folgendes per Knopfdruck übersetzt:
|
Re: Tipps zu mehrsprachigen Programmen
Zitat:
lg |
Re: Tipps zu mehrsprachigen Programmen
Weiß nicht genau ob´s passt, aber ich habe das alles über eine ini-Datei gelöst, was den Vorteil hat, dass ich die ini-Datei jemandem zum Übersetzen geben kann und ich habe im Quellcode nichts damit zu tun. Einmal die Arbeit quasi im Quellcode erledigt, ab nur noch Pflege über externe Datei.
|
Re: Tipps zu mehrsprachigen Programmen
Hallo padavan,
wir haben das Ganze auch mit INI Dateien gelöst. Unsere Sprachen sind durch senkrechte Striche getrennt. Funktioniert ausgezeichnet und vor allem schnell. Nachteil: wenn die ini nicht irgendwie an die exe angehängt ist kann jeder darin rumpfuschen. Achtung Ini Dateien haben einen Nachteil: Unter win9x dürfen die Dinger nicht gr össer als 64k sein. Rainer |
Re: Tipps zu mehrsprachigen Programmen
Zitat:
Zitat:
Hey, ich habe da gerade eine Idee: Also Texte werden wie geplant als Konstanten in eigener Unit abgelegt. Bilder werden als Bilder auf einem eigenen Formular abgelegt. Unit und Formular-Datei werden je nach Sprache ausgetauscht, und beim Start des Programms den eigentlichen Texten und Bildern zugewiesen:
Delphi-Quellcode:
Das sollte doch eigentlich gehen, oder? Sieht jemand Probleme oder Nachteile?
label1.caption := langConstLabel1;
image1.picture := langPicture1.Picture; ... |
Re: Tipps zu mehrsprachigen Programmen
Was hälst du denn von einer Imageliste? Für jede Sprache eine Liste. Beim Wechsel der Sprache wird dann nur die Liste ausgetauscht. Willst du die Bilder eigentlich mit hineinkompilieren?
Gruß, Robert |
Re: Tipps zu mehrsprachigen Programmen
Zitat:
Zitat:
|
Re: Tipps zu mehrsprachigen Programmen
Zitat:
Hier eine Kurzanleitung wie du das einfach machen kannst. 1. Schreibe im Notepad für jede Bilddatei eine Zeile im Format: NAME ART "DATEINAME" z.B.
Code:
2. Speichere diese ab als XYZ.rc
BildNr1 BMP 'Bild1.bmp'
3. Kompiliere diese Datei mit brcc32. Ich erstelle mir dafür eine Batchdatei (XYZ.bat) die folgendermassen aussieht:
Code:
Diese Batchdatei lege ich dann im gleichen Verzeichnis ab und starte sie.
brcc32 XYZ.rc
PAUSE Dadurch wird eine neue Datei (XYZ.res) erzeugt. 4. Im Delphi-Quellcode schreibst du dann in der jeweiligen Unit, wo du die Übersetzungen Handeln möchtest:
Delphi-Quellcode:
Dadurch wird die Resourcendatei mit in deine Exe gelinkt.
{$R XYZ.res}
5. Um dann das Bitmap in einem TImage anzeigen zu lassen (z.B. mit TResourceStream) schreibst du dann:
Delphi-Quellcode:
Vorsicht nicht getestet, sollte aber laufen ;)
var Res: TResourceStream;
... Res := TResourceStream.Create(HInstance, 'BildNr1', 'BMP'); try Image1.Picture.Bitmap.LoadFromStream(Res); finally Res.Free; end; Viel Spaß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 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