![]() |
japanische Sprache
Ich habe folgendes Problem:
Mein Programm ist mehrsprachig ausgelegt. Es funktionieren auch die europäischen Sprachen wie deutsch, englisch, spanisch, etc. problemlos. Zur Laufzeit werden den Controls Texte aus einer Sprachdatei zugewiesen, je nach Klasse die properties Caption, Hint, Text usw. Nun habe ich japanisch dazugenommen, ein Japaner hat Texte übersetzt. Auf einem japanischen Windows sollten dann die Texte entsprechend sein. Nun habe ich aber das Problem, daß es bei einigen Controls klappt, bei anderen nicht. Z.B. klappt es bei TMenuItem, TButton oder TRadioButton. Es klappt nicht bei TGroupBox, TLabel oder TBitButton. Was mir aufgefallen ist, daß die japanischen Texte in UniCode (2 Byte / Zeichen) gespeichert sind. Offensichtlich kommen einige Controls damit klar, andere nicht. Seltsamerweise ist TBitButton von TButton abgeleitet und verhält sich anders. Jemand eine Idee ?!? Roderich |
Re: japanische Sprache
Unicode funktioniert generell nicht unter Win95 und 98 (bei ME weiß ich's nicht mehr). Bei den Systemen muss man sich den Microsoft Unicode Mapper runterladen. Deine Strings müssen alle als WideString deklariert sein, damit pro Zeichen 2 Byte benutzt werden.
Ansonsten hat ![]() |
Re: japanische Sprache
hi tommie-lie,
schon mal vielen Dank für die Hilfe. Ich werd's mal mit WideString probieren. Auf dem Japaner-Rechner läuft Windows XP. Komisch ist nur trotzdem, daß einige Controls ihre Caption richtig setzen - als ob sie in SetCaption erkennen, daß der String einen UniCode-String darstellt. In NotePad sehe ich in den Strings immer abwechselnd eine Art Lo-Character und einen Hi-Character. erst mal vielen Dank Roderich |
Re: japanische Sprache
Zitat:
Zitat:
|
Re: japanische Sprache
hi tommie-lie,
ich lese die Sprachdateien ganz einfach ein mit TIniDatei.ReadString, d.h. in einen normalen 1 Byte-pro-Zeichen-String. Trotzdem funktioniert es auf dem Japaner-PC komischerweise bei einigen Controls. Wie gesagt scheinen einige Controls die Intelligenz zu haben, einen UniCode-String in einem "normalen" String zu erkennen. Roderich |
Re: japanische Sprache
Zitat:
Zitat:
Bei C-Strings wie sie Wndows verwendet markiert ein Nullbyte ja das Stringende. Da bei Unicode im westlichen Raum das ja jedes zweite byte ist, ist bei Unicodestrings ein Doppel-Nullbyte der Terminator, evtl erkennen das einige. Aber theoretisch müssten es alle erkennen, schließlich sollte Windows da nicht großartig unterscheiden, die VCL greift ja auch nur auf die Windows-Funktionen zurück... |
Re: japanische Sprache
Zitat:
Ich würde bei dir im Moment auf Zufall tippen. |
Re: japanische Sprache
hi tommie-lie,
bei den Controls, wo es nicht funktioniert (z.B. TBitButton) wird der Text so dargestellt, als ob es ein normaler String wäre. Also beispielweise ƒŒƒCƒAƒEƒg (= 10 Zeichen Schrott), wo eigentlich 5 japanische Zeichen stehen sollten. Man erkennt deutlich das jeweilige Lo-Char (ƒ). Die Caption-Zuweisung bei TButtons, wo es klappt, ist haargenau die gleiche; grob gesagt aButton.Caption := aIniFile.ReadString(blabla, blabla). Wenn man googelt, findet man Aussagen, daß Delphi kaum UniCode-Unterstützung bietet und man daher Komponenten verwenden muß, deren Caption ein WideString ist und deren TextOut speziell angepasst ist. Nur leider hat mein Hauptprogramm ca. 250.000 Zeilen und ca. 100 Formulare mit zusammen sowiesoviel Komponenten :-( Habe keine Lust, die alle zu ersetzen. Dir jedenfalls 1000 Dank für die Hilfe ! viele Grüße Roderich |
Re: japanische Sprache
250.000 Zeilen :shock: Hast du ein Betriebsystem geschrieben?
|
Re: japanische Sprache
Zitat:
nee, das Projekt läuft schon 3 Jahre. Aber eigener Code sind es vielleicht 200.000 Zeilen, der Rest sind Komponenten. Luckie, ich glaube nicht an Zufall. Ich habe einige Screenshots bekommen, und da sieht man, daß z.B. TMenuItems immer funktionieren und TBitButtons nie. Es muß daran liegen, daß einige Komponenten ihre eigene nicht-unicode-fähige Draw-Routine haben, während andere Komponenten auf ExtTextOutW o.ä. aus der API zugreifen. Dieses ExtTextOutW ist dann wohl so schlau, daß es UniCode-Strings richtig ausgibt. Roderich |
Re: japanische Sprache
Der erste Linux-Kernel waren nicht mehr als 4 Kb Quelltext, das kann es also nicht sein :)
|
Re: japanische Sprache
Zitat:
|
Re: japanische Sprache
Unicode Controls!
![]() Nachtrag: Zitat:
|
Re: japanische Sprache
hi Luckie,
hast Recht, im Zusammenhang mit Microsoft verbietet sich das Wort "schlau" von selbst. Daß ExtTextOutW mit WideChars umgehen kann, ist klar, aber was mich wundert, daß es funktioniert, obwohl der Caption ja ein normaler String zugewiesen war. Das mit dem ExtTextOutW ist nur so ne Vermutung, bin gerade dabei, den Source von TButton zu verstehen..... Roderich |
Re: japanische Sprache
Zitat:
|
Re: japanische Sprache
hi Assarbad,
danke für den Link. Aber wenn ich alle meine Standard-Komponenten durch UniCode-fähige ersetzen muß, habe ich verloren (s.o.).... Also wo man sich umhört, jeder sagt, daß UniCode ohne WideString gar nicht funktioniert. Borland scheint seine VCL auch auf die ...A API-Routinen hinprogrammiert zu haben und nicht auf die ...W Routinen. Nur kapier ich nicht, warum einige der Komponenten damit keine Probleme haben, einen normalen String als UniCode auszugeben !?! Roderich (am verzweifeln) |
Re: japanische Sprache
Zitat:
Ich habe die Erfahrung gemacht, dass bei Ansi-Apps auch noch die Locale stimmen muss. ZB sehe ich auf meinem Rechner daheim (W2K) keine kyrillischen Zeichen im TurboNavigator (Locale = Deutsch) ... bei dem Server an welchem ich grad sitze, aber schon (Locale = Russisch). TButton uebernimmt nur intern die ganze Nachrichtenverarbeitung. Er verhaelt sich aber wie jeder normale Button. Und Buttons (und auch andere Basiscontrols) haben IMMER die gleiche Nachricht (WM_SETTEXT) fuer das setzen von Unicode UND Ansi-Strings ... das koennte die Loesung des Raetsels sein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:23 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