AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Russische Übersetzung funktioniert nicht auf rus. Windows
Thema durchsuchen
Ansicht
Themen-Optionen

Russische Übersetzung funktioniert nicht auf rus. Windows

Ein Thema von H4ndy · begonnen am 15. Dez 2008 · letzter Beitrag vom 19. Dez 2008
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#11

Re: Russische Übersetzung funktioniert nicht auf rus. Window

  Alt 16. Dez 2008, 14:36
Zitat von Sherlock:
Also ist das Problem tatsächlich, daß die Übersetzung zum Compilezeitpunkt vorliegen mus, und hineinkompiliert wird. Es wird also kein Resourcestring im fertigen Kompilat ausgetauscht. Das dürfte dann auch der Kern des Problems sein, weil eben beim Compilieren die momentane Umgebung Einfluss hat.

Vielleicht habe ich das Verfahren auch missverstanden, aber so wie Du es schilderst scheint es unpraktisch.
Richtig, mit der Komponente kann man auch zur Laufzeit live die Sprache umschalten ohne Probleme. Die entsprechenden Strings sind eben innerhalb der Komponente gespeichert und liegen somit in der DFM (Das Format ist was eigenes und wird in der Text-DFM als Hex-Block gespeichert).
Und das funktioniert eben auch, außer auf dem richtigen russischen System, wo es eben den Text zerstört.
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#12

Re: Russische Übersetzung funktioniert nicht auf rus. Window

  Alt 17. Dez 2008, 13:54
Ich habe der Sache noch ein bisschen hinterher debuggt. Ich hab mir mal den TReader.ReadWideString angeguckt. In der DFM steht ein UTF8 String. Der TReader ließt dann und macht ruft UTF8Decode. Innerhalb dieser Funktion wird irgendwann mal auf WideChar gecastet. Vorher ist auf beiden Systemen das Zeichen identisch. Nach dem Typecast kommt auf beiden Systemen etwas unterschiedliches raus, sodass der String kaputt geht.

Hat vllt jemand dieses Phänomen schonmal beobachtet/gefixt bekommen?
Manuel
  Mit Zitat antworten Zitat
Ydobon

Registriert seit: 3. Mär 2006
264 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Russische Übersetzung funktioniert nicht auf rus. Window

  Alt 18. Dez 2008, 18:05
Das könnte jemand, der für Unicode Werbung machen will, vermutlich gut als abschreckendes Beispiel verwenden.

UTF8Decode müsste aus der UTF8-Kodierung wieder UCS2 bzw. einen Widestring machen, der sich auf den Systemen eigentlich nicht unterscheiden kann, da es mit den lokalen Einstellungen gar nichts zu tun hat. Wenn dieser danach aber einem Ansistring zugewiesen wird, bastelt Delphi automatisch Aufrufe von WideCharToMultiByte mit der aktuellen Codepage ein, die Ergebnisse unterscheiden sich dann.

Irgendwie sieht es so aus, als würde die Ansibytefolge als Unicode angenommen und zur kyrillischen Codepage konvertiert.
1. Загрузить (04170430043304400443043704380442044C)
2. Çàãðóçèòü (C7E0E3F0F3E7E8F2FC)
3. Caa?oceou (4361613F6F63656F75)

Für das Wort wäre 2. die richtige Bytefolge, als Latin 1 kommen die schönen Diakritika raus, ein russischer Rechner zeigt es richtig an. Nr. 3 wäre halt das Ergebnis, wenn man noch einmal konvertiert.

Eigentlich sollte sich die Komponente das UTF8 aus der DFM holen, in einen Widestring dekodieren und an einen Ansistring übergeben, wobei die Konvertierung entsprechend den Systemeinstellungen automatisch erfolgt. Da dürfte nicht viel passieren können.

Kann es sein, dass schon das falsche UTF8 gespeichert wird? Richtig wäre:
ЗагруЕить (D097D0B0D0B3D180D183D0B7D0B8D182D18C)
Çà ãðóçèòü (C387C3A0C3A3C3B0C3B3C3A7C3A8C3B2C3BC) sollte es nicht sein
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#14

Re: Russische Übersetzung funktioniert nicht auf rus. Window

  Alt 19. Dez 2008, 12:56
@Ydobon: Genauso scheint es eben zu sein.

Wir konnten aber jetzt erfolgreich einen Workaround für das Problem erstellen.
Die angehängt Unit muss einfach als erste Unit im Projekt ge-used werden (am besten in der DPR), danach sollte das Problem behoben sein.

Wurde bisher nur mit Russisch getestet, könnte aber auch mit anderen Sprachen funktionieren, die eine nicht-western Codepage benutzen.

Nochmals Danke an alle, die geholfen haben, das Problem einzugrenzen.
Angehängte Dateien
Dateityp: pas cyrillicfix_201.pas (4,1 KB, 25x aufgerufen)
Manuel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 12:10 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