![]() |
Übersetzung + Mehrsprachigkeit: Wie macht man das ?
Hallo,
ich habe das Problem mein in Deutsch geschriebenes Programm auch für den englischen Anwender anbieten zu müssen. Die Strings habe ich bisher nicht in eine Ressourcen Datei ausgelagert. Es wäre einfach, wenn die gesamten String und Form Texte in einer separaten Datei wären. Wie mache ich das aber ? :? Nun habe ich etwas von ITE (integrated translation environment) gelesen, weiß aber nicht wie es funktioniert. :( Ich dachte dies unter "DATEI -> NEU -> Ressourcen DLL Experte" zu finden und hatte es auch einmal ausprobiert. Delphi erstellte mir zwei weitere Projekte DEU (Deutsch) und ENU (Englisch USA). Stringressourcen habe ich aber nicht gefunden, auch ist mir nicht klar, wie ich hier die jeweilige Sprachenversion erzeugen und auch warten soll !! :roll: Kann mir jemand auf die Sprünge helfen ?? Hoffe doch sehr, daß jemand weiß was zu tun ist. :wiejetzt: (Arbeitee übrigens mit Delphi Professional 6.0) danke und grüsse hacki |
Wenn ich mich jetzt nicht irre, gibt es die ITE erst ab der Enterprise-Version von Delphi.
Ansonsten schau mal in den Delphi-Demos nach dem Rich-Edit Projekt, daran wird die Mehrspachigkeit demonstriert. ...:cat:... |
also ich hab mal ein beispiel gesehen da wurde das mit ner *.ini datei gemacht, da wurde vorne ander variablen name und dahinter halt der wert geschrieben, und für jede sprache gabs ne *.ini datei ich weiß nicht wie die anderen das machen, aber vieleicht beläuft sich das ja auf das selbe
|
Hallo hacki,
schau mal hier: ![]() Meine private D5 Prof. Version hat noch keine ITE, D7 Enterp. schon. |
hallo,
nun hab ich erst einmal ein paar hausaufgaben. wenn ich den Ressourcen DLL Experte aufrufe, erzeugt er mir auch Unterverzeichnisse und Formulare für die Sprachenversionen. Leider weiß ich damit nichts anzufangen. Vielleicht geht es dann wirklich erst ab Delphi Enterprise 7 !? ich probiere es nochmal danke erstmal, melde mich wieder grüsse hacki |
eine andere Mölichkeit wäre es, einfach jeden TExt, z.b. in eine Ini-Datei oder besser in eine DAtenbank oder einfache Text-DAtei zu speichern.
|
hier mal ein auszug aus der oben beschrieben ini datei
Zitat:
|
OK. Wusste nicht, dass da schon eine Ini-Datei beschrieben wurde. Habe das hier nur kurz überflogen....
Aber das ist wirklich die einizige vernünftige Lösung, die es gibt. Ich habe auch mal folgendes gesehen: Ein ansich deutsches Programm will ins Internet, um mit irgendwelchen Englisch-Deutsch und umgekehrt Translatern das Programm zu übersetzen. Eigentlich eine schöne Idee. Nur leider sind diese Translater eigentlich der letzte Mist.....das Endlisch ist zum :kotzen: Doof ist es natürlich auch für die Nicht- oder Modem-Internet-Nutzen oder natürlich die, die keine Flatrate haben. Aber eigentlich keine schlechte Idee...... |
Das was alexander sagt, gibt es nicht nur im Internet sondern auch so zu kaufen. Ich weiß jetzt nicht mehr, wie das programm geheißen hat, aber es übersetzt während ein Programm läuft, sämtliche Strings in dem Programm. Muss allerding auch sagen, dass die Qualität der Übersetzungen sehr zu wünschen lassen. Hab damals so ne Englische Version von GMax übersetzt haben wollen.
Man liest sich, Stanlay 8) |
Man kann auch mit einer Ressource arbeiten und verschieden sprachigen Stringtabels. dannkümmert sich Windows automatisch drum welche Sprache paßt. Vorgemacht habe ich das bei meinem FileSplitter. Der kann deutsch und englisch. Wobei englisch standard ist. Ist Windows nicht deutsch wird englisch genommen.
Aber um eins wirst du nichr rum kommen: Alle Strings dynamisch zu laden. |
Ich denke das Laden ist dabie wohl der größte Aufwand. Ich meine, wenn jemand ein Programm mit 30 Buttons, 55 Labels, einen Lizenztext und und und hat, is das ne sch*** Arbeit.
|
Nicht unbedingt.
Unter nonVCL kann ich ID's vergeben, wenn die Controlls die gleiche ID haben wie die korrespondierende ID von dem String aus dem Stringtable, kann ich alles in einem Rutsch mit einer for-Schleife beschriften. Mit der VCL könnte man das mit der Tag-Property lösen. |
Ja Luckie, mach mich fertig. Ich bin grademal auf Seite 120 von
"Delphi Grundlagen und Profiwissen". Da muss ich sowas doch noch nich wissen, oder. :wink: Man liest sich, Stanlay :D |
Ich möchte mal zu bedenken geben, daß es nicht reicht, ein paar eigene Strings zu übersetzen, sondern auch alle von Delphi miteingebrachten Resourcestrings (z.B. Laufzeit Meldungen) müssen schließlich auch übersetzt werden (Überleg mal du sitzt vor einem Programm mit deuteschem Interface und plötzlich poppt da ne russische Meldung hoch, nur so als frei gewähltes Beispiel).
Außerdem müssen da noch Dinge im Interface angepaßt werden, weil die verschiedenenen Sprachen unterschiedlich viel Platz brauchen. ich hab mit der Translation Engine von Delphi noch nicht wirklich ein ganzes Projekt durchgezogen, aber auf den ersten Blick scheint sie doch ein extrem hilfreicher Ansatz zu sein, da sie versucht, selbst alle zu übersetzenden (oder sonstwie zu modifiezierenden ) Resourcen übersichtlich aufzulisten und automatisch zu warten. Vor irgendwelchen vollautomatischen Übersetzungen würde ich warnen, nicht nur wegen der Qualität, sondern woher soll die arme Maschine wissen, was sie nicht übersetzen darf, und man denke an die Anmerkung in den Quelltexten 'do not localize', plötzlich wird z. B. der name der zu ladenden DLL übersetzt, ich hatte sowas schon mal bei einem Wizzard in Delphi im Com+ Bereich ... |
Wenn du die Messagebox nimmst, haben die Buttons automatsich die Windows-Sprache. Bei den Boxen aus der Unit Dialogs nicht. RaiseLastOSError sowieso Windows-Sprache.
|
hi,
ich bin nun einwenig verwirrt. So tief stecke ich in der Programmierung wohl nicht drin. Mit dem dynamischen Laden der Stringressourcen finde ich eigentlich interessant. Zitat:
Code:
Muß ich den Text nun zweimal mit verschiedenen Namen definieren b.s.
unit ResStrngs;
interface resourcestring SsaveFile = 'Datei sichern'; implementation end.
Code:
Und wie spreche ich sie im Programm dann dynamisch an ? Oder kann ich per spezieller Anweisungen Code-Blöcke mit gleicher StringResourcen-Namen aktivieren ?
SsaveFileDE = 'Datei sichern';
SsaveFileEN = 'Save File'; :? :? vielleicht kann mir jemand konkretes sagen ? Und wie mache ich es mit Texten auf den Formen ? grüsse hacki |
Nein du brauchst eine richtige Ressourcen-Datei.
Wie man die von hand erstellt kann ich dir leider nicht sagen, ichmache es immer mit dem Ressourcen-Editor vom VC. Du lädst den String nur über die ID, die Sprache wählt Windows aus. |
Ich sprach ja auch von Delphi Runtime Meldungen:
also deutsches Delphi, englisches Windows, diese Meldungen und viele, viele mehr, kämen alle auf deutsch, zumindest teilt die ITE hier meine Meinung: SUnknown = '<unbekannt>'; SInvalidInteger = '''%s'' ist kein gültiger Integerwert'; SInvalidFloat = '''%s'' ist kein gültiger Gleitkommawert'; SInvalidCurrency = '''%s'' ist kein gültiger Währungwert'; SInvalidDate = '''%s'' ist kein gültiges Datum'; SInvalidTime = '''%s'' ist keine gültige Uhrzeit'; SInvalidDateTime = '''%s'' ist kein gültiger Datums- und Zeitwert'; SInvalidDateTimeFloat = '''%g'' kein gültiger Datums- und Zeitwet'; SInvalidTimeStamp = '''%d.%d'' ist kein gültiger Zeitstempel'; SInvalidGUID = '''%s'' kein gültiger Wert für GUID'; SInvalidBoolean = '''%s'' ist kein gültiger boolescher Wert'; etc |
Das mit dem autmoatischen Beispiel war eigentlich auch nicht als wirklich Idee gedacht. Zumal man ja ständig Online sein müsste....
|
|
Das ist im prinzip genau das, wo von ich die ganze Zeit rede.
|
Zitat:
|
hallo woki,
hört sich interessant an, daß du bereits mit der ite geabeitet hast. wie finde ich denn die ite ? in meiner delphi 6 professional ist die , denke ich nicht integriert, oder ? für weitere hilfe wäre ich sehr dankbar greetings hacki |
Hallo,
schön langsam wird dieser Tread redundant :mrgreen: Zitat:
Zitat:
|
@luckie
Zitat:
Na, dann schreib mal eine Mail an Borland, Die Konstantenliste war ein Auszug aus den Meldungen von Delphi, (weitere Beispiele zu finden in unit consts.pas) und wie du jeden Tag bei deiner Arbeit mit Delphi siehst, bekommt der Anwender die so nicht zu Gesicht. Aber er bekommt sie in dieser Sprache zu Gesicht, und zwar ganz egal auf welcher Sprachversion von Windows das Programm läuft: Es sollte nur untermauern: Um ein Programm z.B. von deutsch nach englsch zu transferieren, reicht es nicht, die die eigenen Meldungen (captions etc, etc etc) zu übersetzen, und dann das ganze auf einer englischen Windowsversion laufen zu lassen, sondern diese Meldungen müssen auch übersetzt werden, und das unterstützt der ITE, aber viele der Vorschläge die ich hier gesehen habe, führen an diesem Punkt zu einer bösen Überraschung. Dies schließt den Verlinkten Beitrag ein. Der ist damit eine nette akademische Betrachtung, löst in der Praxis bei der Erstellung eines professionellen Programms das Problem aber nur unvollständig. |
Hallo Woki,
es gibt da einen parallel laufenden Tread ![]() dort weist jbg auf ein bemerkenswertes ![]() das mich persönlich total beeindruckt: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22: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