AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

japanische Sprache

Ein Thema von roderich · begonnen am 23. Jul 2003 · letzter Beitrag vom 23. Jul 2003
Antwort Antwort
Seite 1 von 2  1 2      
roderich
(Gast)

n/a Beiträge
 
#1

japanische Sprache

  Alt 23. Jul 2003, 11:05
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
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#2

Re: japanische Sprache

  Alt 23. Jul 2003, 11:23
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 Mike Lischke irgendwo mal Unicode-Komponenten für Delphi geschrieben. Die könntest du alternativ zu den Borland-Komponenten verwenden, ob die aber das Problem des fehlenden Mappers lösen, weiß ich nicht.
  Mit Zitat antworten Zitat
roderich
(Gast)

n/a Beiträge
 
#3

Re: japanische Sprache

  Alt 23. Jul 2003, 12:26
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
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#4

Re: japanische Sprache

  Alt 23. Jul 2003, 14:02
Zitat von roderich:
Komisch ist nur trotzdem, daß einige Controls ihre Caption richtig setzen - als ob sie in SetCaption erkennen, daß der String einen UniCode-String darstellt.
Das finde ich auch seltsam. Ich weiß zwar nicht, wie du deine Sprachdateien einliest, aber wenn du es beispielsweise mit 'nem Filestream machst und in einen "normalen" String einliest, sollte das eigentlich sowieso nix werden...

Zitat:
In NotePad sehe ich in den Strings immer abwechselnd eine Art Lo-Character und einen Hi-Character.
Jupp, weil für das deutsche Notepad ein Zeichen ein Byte lang ist. Da bei Unicode es immer zwei Byte sind, zeigt er jedes getrennt an. In einem Hexeditor solltest du erkennen, daß bei Zeichen, die noch in die ASCII/ANSI-Tabelle passen, das zweite Byte immer 00h ist und das erste Byte den ANSI-Wert des Zeichens hat. Das ändert sich dann bei den Zeichen, die in ASCII/ANSI nicht mehr darstellbar sind.
  Mit Zitat antworten Zitat
roderich
(Gast)

n/a Beiträge
 
#5

Re: japanische Sprache

  Alt 23. Jul 2003, 15:11
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
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#6

Re: japanische Sprache

  Alt 23. Jul 2003, 16:15
Zitat von roderich:
Trotzdem funktioniert es auf dem Japaner-PC komischerweise bei einigen Controls.
Wie sieht es denn bei den Controls aus, bei denen es nicht funktioniert? Einfach nichts, oder nur der erste Buchstabe oder was ganz anderes?

Zitat:
Wie gesagt scheinen einige Controls die Intelligenz zu haben, einen UniCode-String in einem "normalen" String zu erkennen.
Hmm...
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...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: japanische Sprache

  Alt 23. Jul 2003, 16:29
Zitat von roderich:
ich lese die Sprachdateien ganz einfach ein mit TIniDatei.ReadString, d.h. in einen normalen 1 Byte-pro-Zeichen-String.
Dann sollte das aber nicht gehen. Du liest einen 2 Byte Zeichensatzstring in ein 1 Byte Zeichensatzstring ein. Und was passiert mit dem zweiten Byte? Bei den westlichen Sprachen mit Lateinischenbuchstaben mag das ja noch gehen, da das zweite Byte #0 ist und keine Informationen trägt, aber was ist bei anderen Sprachen, wo das zweite Byte auch Informationen beinhaltet?
Ich würde bei dir im Moment auf Zufall tippen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
roderich
(Gast)

n/a Beiträge
 
#8

Re: japanische Sprache

  Alt 23. Jul 2003, 16:38
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
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: japanische Sprache

  Alt 23. Jul 2003, 16:45
250.000 Zeilen Hast du ein Betriebsystem geschrieben?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
roderich
(Gast)

n/a Beiträge
 
#10

Re: japanische Sprache

  Alt 23. Jul 2003, 16:54
Zitat:
250.000 Zeilen Hast du ein Betriebsystem geschrieben?
so ungefähr.....
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz