Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Übersetzung + Mehrsprachigkeit: Wie macht man das ? (https://www.delphipraxis.net/4657-uebersetzung-mehrsprachigkeit-wie-macht-man-das.html)

hacki 7. Mai 2003 23:20


Ü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

sakura 8. Mai 2003 12:02

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:...

wo0zy 8. Mai 2003 13:08

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

APP 8. Mai 2003 20:12

Hallo hacki,

schau mal hier: unter: Kochrezept zur Benutzung des TM

Meine private D5 Prof. Version hat noch keine ITE, D7 Enterp. schon.

hacki 8. Mai 2003 21:38

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

Alexander 9. Mai 2003 14:33

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.

wo0zy 9. Mai 2003 14:58

hier mal ein auszug aus der oben beschrieben ini datei
Zitat:

[Info]
Language=German (Germany)
SearchHtmlFile=german.htm
PrimaryLanguageID=7
SublanguageID=1
Translator=LOLOBYTE

[FrmMain]
;File Menu-----------------------------------------
actFile_Root=&Datei
actFile_New=&Neu
actFile_New_BlankPage=&Leere Seite
actFile_New_CurPage=&Aktuelle Seite
actFile_New_HomePage=&Startseite
actFile_New_CurPageInMWB=Aktuell im &neuem Fenster
actFile_New_CurPageInIE=Aktuell im &IExplorer
actFile_New_FromClipboard=Aus &Zwischenablage
actFile_OpenFile=Ö&ffnen...
actFile_OpenLink=Öffne &Link...
actFile_CloseCurPage=S&chließen
actFile_CloseCurPage.Hint=Tab Schließen
actFile_CloseAll=&Alle schließen
actFile_CloseAll_KeepCurrent=Alle schließen
vieleicht hilft dir das ja

Alexander 9. Mai 2003 15:44

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......

Stanlay Hanks 9. Mai 2003 15:58

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)

Luckie 9. Mai 2003 16:10

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.

Stanlay Hanks 9. Mai 2003 16:18

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.

Luckie 9. Mai 2003 16:21

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.

Stanlay Hanks 9. Mai 2003 16:50

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

woki 9. Mai 2003 17:29

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 ...

Luckie 9. Mai 2003 17:33

Wenn du die Messagebox nimmst, haben die Buttons automatsich die Windows-Sprache. Bei den Boxen aus der Unit Dialogs nicht. RaiseLastOSError sowieso Windows-Sprache.

hacki 9. Mai 2003 17:39

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:

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.
Das Menü und die Meldungstexte kann ich ja allesamt als Stringressourcen in eine separate Unit packen. Wie aber lade ich dynamisch und Sprachenabhängig ? Hast Du vielleicht ein Beispiel ?

Code:
unit ResStrngs;

interface

resourcestring

SsaveFile = 'Datei sichern';

implementation

end.
Muß ich den Text nun zweimal mit verschiedenen Namen definieren b.s.

Code:
SsaveFileDE = 'Datei sichern';
SsaveFileEN = 'Save File';
Und wie spreche ich sie im Programm dann dynamisch an ? Oder kann ich per spezieller Anweisungen Code-Blöcke mit gleicher StringResourcen-Namen aktivieren ?

:? :?

vielleicht kann mir jemand konkretes sagen ? Und wie mache ich es mit Texten auf den Formen ?

grüsse hacki

Luckie 9. Mai 2003 17:53

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.

woki 9. Mai 2003 18:22

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

Alexander 9. Mai 2003 18:26

Das mit dem autmoatischen Beispiel war eigentlich auch nicht als wirklich Idee gedacht. Zumal man ja ständig Online sein müsste....

City Light 9. Mai 2003 18:49

Ich habe hier was für dich, das müßte dir bestimmt weiter helfen

da is es

Luckie 10. Mai 2003 02:50

Das ist im prinzip genau das, wo von ich die ganze Zeit rede.

Luckie 10. Mai 2003 03:41

Zitat:

Zitat von woki
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

Wenn der Anwender solche Fehlermeldunmgen zu Gesicht bekommt, dann hast du was falsch gemacht und du solltest deine Fehlerbehandlung überdenken / überarbeiten. :roll:

hacki 23. Mai 2003 13:26

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

APP 23. Mai 2003 18:17

Hallo,
schön langsam wird dieser Tread redundant :mrgreen:

Zitat:

wie finde ich denn die ite
Siehe 1. Seite 2. Antwort von Sakura.

Zitat:

für weitere hilfe wäre ich sehr dankbar
Siehe 1. Seite 4. Antwort von mir.

woki 24. Mai 2003 17:16

@luckie

Zitat:

Wenn der Anwender solche Fehlermeldunmgen zu Gesicht bekommt, dann hast du was falsch gemacht und du solltest deine Fehlerbehandlung überdenken / überarbeiten
:shock:
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.

APP 24. Mai 2003 20:49

Hallo Woki,

es gibt da einen parallel laufenden Tread Delphi 7 Enterprise muß wohl her
dort weist jbg auf ein bemerkenswertes Programm hin,
das mich persönlich total beeindruckt:

Zitat:

....
Mach es doch so, wie 90% aller Linux Entwickler, nur eben für Delphi/Kylix: dxgettext. Das Programm(paket) ist gut dokumentiert (zwar auf Englisch, aber das macht nichts). Des weiteren können von der Homepage die schon fertigen Übersetzungen der RTL und VCL heruntergeladen werden.


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