![]() |
Das eigene Programm in Russisch
Hallo Wissende,
ich würde gern eines meiner Tools ins Russische übersetzen, verzweifele aber gerade, die Buchstaben in die Controls zu bekommen. Mir ist klar, dass da was mit UniCode ist, und das das nicht ganz einfach ist, aber was muss ich beachten und wie kann ich vorgehen, ohne dabei alle meine Controls ändern zu müssen. Ich erhalte nur ???? statt der Buchstaben, wie sie hier schön zu sehen sind. АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ Was muss ich also tun, um dieses Problem zu beheben? |
Re: Das eigene Programm in Russisch
schreib das ganze doch in eine ini und dann kann man bei einem button-klick die sprache ändern. und die fragezeichen bedeuten soweit ich weiß das du das language-pack nicht installiert hast. musst dann wohl machen. ja und nen russe hat das sicher schon standard auf seinem rechner denke ich mal...
|
Re: Das eigene Programm in Russisch
Du musst jedem Control in Font.Charset RUSSIAN_CHARSET (204) zuweisen. Geht per Code recht schnell, eine alle Controls der Form durchiterieren (Controls/ControlCount).
|
Re: Das eigene Programm in Russisch
Ok, dann werde ich das mal probieren. der Code, den ich über Skype erhielt war natürlich schon in UniCode, weshalb es nicht ging.
Ich habe soeben eine Textdatei in verschiedenen Formaten erhalten. Unicode Unicode Big endian UTF-8 Ansi Leider in den 3 erstgenannten Dateien zwar alles auf Russisch in Kyrillischen Schriftzeichen zu lesen, aber nach dem Kopieren in ein Label von Delphi waren nur Fragenzeichen zu lesen. In der Ansitextdatei waren von vornherein nur Fragezeichen drin. Ich hatte bei dem Label mal auf ANSI_CHARSET RUSSIAN_CHARSET gestellt, aber es scheint nicht zu funzen. Irgendwie mache ich immer noch was falsch...!? |
Re: Das eigene Programm in Russisch
Es gibt übrigens auch die
![]() Dummerweise wurden die gerade kommerziell, aber vielleicht findet sich ja auf Torry etc. noch ein etwas ältereres Download. |
Re: Das eigene Programm in Russisch
Zitat:
Zitat:
Zitat:
Zitat:
Die einzige vernünftige Lösungen ist Unicode-Controls wie ![]() |
Re: Das eigene Programm in Russisch
Zitat:
![]() Klar, TVirtualStringTree z.B. will lieber Unicode, dafür registriere ich in meiner Lokalisierungsklasse einen speziellen Handler, aber Controls, die nur ANSI können, dort aber Font.Charset ignorieren, sind mir noch nicht untergekommen (oder vielleicht schon, aber wegen mangelnder Qualität sofort rausgeflogen). Übrigens: auch mit ANSI-INI-Dateien gelöst ;) |
Re: Das eigene Programm in Russisch
Das war doch mal ne Aussage. Das tolle ist, dass ich von TMS das ComponentenPack gekauft habe und ehrlich gesagt nicht einsehe nun auf die optisch recht ansprechenden Controls verzichten zu müssen und nochmal extra zahlen soll. Ich werde mal den Support von den Kollegen anschreiben. Vielleicht lassen die sich ja zu nem Update hinreißen!?
Im übrigen hat es bei mir nicht einmal geklappt ein einfaches Label mit nem russischen Text zu bestücken. |
Re: Das eigene Programm in Russisch
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Das eigene Programm in Russisch
Zitat:
Lazarus (LCL, das VCL-Äquivalent) ist leider unter Windows auch nicht wirklich Unicode, bringt hier also keine Vorteile. Aber: Die Windows Mobile-Version ist pures FreePascal, die nächste Symbian-Version wird das ebenfalls sein, und insgesamt kompilieren inzwischen 100% mit beiden Compilern (fpc/dcc32) und 95% sind schon auf Funktion unter FPC getestet ;) Zitat:
![]() ![]() Ich sprech mich ja nicht dafür aus, daß Codepages & ANSI die ideale Lösung sind, nur daß die eben eine durchaus gut funktionierende Lösung sind, wenn man ein einfaches ANSI-Projekt mit durchgehend einer Benutzersprache umstellen will, und eben eigentlich nicht die Probleme machen muss, die Du erwähntest. |
Re: Das eigene Programm in Russisch
Zitat:
Zitat:
|
Re: Das eigene Programm in Russisch
Danke für die Nachfrage. Also ich habe jetzt bei mir erstmal noch ein russisches Tastaturlayout hinzugefügt. Damit kann ich jetzt in Textdateien schreiben, muss diese aber aber UniCode speichern, damit nix verloren geht. Soweit hoffen ich, habe ich das schon mal verstanden.
Habe ich es richtig verstanden, dass ich das Tool einfach so lassen soll, alle Komponenten auf Russischen Char umstellen soll und dann eine Übersetzungsdatei laden soll? So in der Art [Deutsch] btn_danke.caption = "Danke" [Russisch] btn_danke.caption = "спосйбо" ? Und das dann als UniCode-Datei abspeichern??? |
Re: Das eigene Programm in Russisch
So gehts schon mal nicht. Ich erhalte zwar keine Fragezeichen mehr in dem Programm, aber dafür dann auch gar keinen Inhalt. Ich probiere mal weiter...
Delphi-Quellcode:
Inhalt der Textdatei:
procedure TForm1.Button1Click(Sender: TObject);
var myList:TStringlist; begin myList:=TStringlist.Create; myList.LoadFromFile('c:\test.txt'); Label1.Caption := WideStringToStringEx(myList.Strings[0],251); end;
Delphi-Quellcode:
CP_ACP
ЕУЧЕ
???? TEXT CP_MACCP CP_OEMCP CP_SYMBOL CP_THREAD_ACP CP_UTF7 Windows CP_UTF8 Windows Habe jetzt auch diese CodePages versucht, aber ich erhalte NIE ЕУЧЕ im Label angezeigt. |
Re: Das eigene Programm in Russisch
Eine TStringList kann keine WideStrinsg, d.h. die brauchst Du auch nicht als WideString konvertieren. Die bereits erwähnten TNTWare Controls haben imho eine TWideStringList (und es gibt auch noch einige andere).
Oder einen Editor nehmen, der Dich die Codepage auswählen lässt (zur Not auch in Delphi selber schreiben, musst ja nur ein TMemo mit dem entsprechenden Charset versehen und nen Speicherknopf dazupacken), dann kannst Du TStringList nehmen und musst gar nichts mehr konvertieren. |
Re: Das eigene Programm in Russisch
Für mich waren und sind diese Codepages und Charsets bisher bömische Dörfer. Also einfach ein Memo nehmen und von dort laden? Muss aber dann schon wieder zwingend eine der TNT´s sein, oder? Ok, dann werde ich es später mal versuchen. Warum muss das alles so kompliziert sein?
|
Re: Das eigene Programm in Russisch
Zitat:
Zitat:
|
Re: Das eigene Programm in Russisch
Naja, nochmal von vorne :D
1. Wenn man ein Projekt frisch anfängt, sollte man gleich Unicode in Betracht ziehen, und dafür z.B. die TNTWare Controls (edit: wie Bernhard gerade sagte). 2. Wenn man ein bestehendes Projekt mit Komponenten, die es nur in ANSI gibt, umstellt (übrigens aus genau diesem Grund hab ich mir die LMDTools nie angetan, war mir zu unsicher, ob die mal Unicode können würden), geht es auch per ANSI. Was ich mit dem TMemo meinte, völlig ohne Unicode-Komponenten:
Womit ich jetzt nicht sagen will, daß eine rein Textdatei als TStringList ausgelesen wirklich geeignet wäre, aber als Ansatz zum Lernen kannst Du das ja mal versuchen. Kurze Erklärung zu Codepages: normale strings in Pascal bestehen aus normalen chars. Ein Char kann halt maximal 256 verschiedene Zeichen abbilden, das reicht natürlich nicht für alle Alphabete der Welt ;) Also hat man unterschiedliche Bedeutungen für die einzelnen Zeichen erfunden - Zeichen #65 ist auf "Standard"-Codepages (englisch, deutsch um es vereinfacht zu sagen) immer das kleine 'a', auf russichen Codepages immer das Zeichen für Vodka (letzeres natürlich nur erfunden, leider kenn ich keine echten russischen Buchstaben :D). @Bernhard Geyer: und leider werben Sie trotzdem groß mit Unicode-Unterstützung, meinen damit aber nur die IDE :( |
Re: Das eigene Programm in Russisch
Zitat:
|
Re: Das eigene Programm in Russisch
Hallo nochmals,
also nun klappt es. Ok, ich würde also wie folgt vorgehen und ich bitte hiermit nochmal sum Einspruch, falls erforderlich. In einer Schleife alle Controls und Forms durchsuchen und den Font-Charset ändern. Dabei schauen, ob das Control nen Namen, eine Caption bzw. einen Text besitzt. Den Namen in die Ini schreiben und dazu den Wert des Textes oder der Caption. Später im "Translator" in die Memo die Ini laden und den russischen Kollegen alles übersetzen lassen und speichern nicht vergessen. Gangbarer und sinnvoller Weg? Auf jeden Fall Danke ich euch!!! Edit: Gerade eben habe ich festgestellt, dass dies zwar wunderbar mit einem Label funktioniert aber nicht mit nem Button und der Cpation eines Forms und dabei habe ich definitiv den Charset eingestellt und auch Tahoma als Schriftart gewählt. Was ist denn nun wieder?
Delphi-Quellcode:
Die Memo wird beim Createn geladen. Da stimmt alles und steht auch alles kyrillisch drin...
procedure TForm1.Button1Click(Sender: TObject);
var myList:TStringlist; begin //erstmal speichern was drin ist Memo1.Lines.SaveToFile('c:\test.txt'); //und dann taufrisch rausholen was drin ist myList:=TStringlist.Create; myList.LoadFromFile('c:\test.txt'); //und verteilen Label1.Caption := myList.Strings[0]; self.Caption := myList.Strings[1]; Button1.Caption := myList.Strings[2]; end; |
Re: Das eigene Programm in Russisch
Zu beachten gibt es z.B. noch diverse Font-Eigenschaften von Screen, z.B. Screen.MenuFont etc. (siehe Hilfe unter TScreen).. auch im Application-Objekt findet sich beispielsweise noch ein BiDiMode (wobei der für russisch keine Rolle spielt)...
Nur so ganz nebenbei fällt mir ein, hat Delphi nicht sogar auch eine integrierte Lokalisierungshilfe? Ich hab die nie verwendet, weil 500KB+ pro Sprachdatei selbst für das kleinste Projekt für mich nicht in Frage kamen, aber drauf hinweisen kann ja nicht schaden ;) |
Re: Das eigene Programm in Russisch
Also zu Deinem ersten Punkt: Folgendes habe ich nun per Code gelöst, aber ohne Erfolg.
Delphi-Quellcode:
Auf dem Form liegen nur eine Button, ein Label und die Memo. Mehr nicht.
procedure TForm1.Button1Click(Sender: TObject);
var myList:TStringlist; begin //erstmal speichern was drin ist Memo1.Lines.SaveToFile('c:\test.txt'); //und dann taufrisch rausholen was drin ist myList:=TStringlist.Create; myList.LoadFromFile('c:\test.txt'); //und verteilen Label1.Caption := myList.Strings[0]; self.Caption := myList.Strings[1]; Button1.Caption := myList.Strings[2]; end; procedure TForm1.FormCreate(Sender: TObject); begin Screen.MenuFont.Charset := RUSSIAN_CHARSET; Memo1.Lines.LoadFromFile('c:\test.txt'); end; Zu Deiner 2. Aussage kann ich leider gar nix sagen, da mir da einfach die Tiefenkenntnisse fehlen - Leider! |
Re: Das eigene Programm in Russisch
Wenn du deine Anwendung mehrsprachenfähig machen willst (Du entwickelst in Deutsch, Dein Programm soll aber z.B. russische Texte anzeigen), dann würde Ich Dir einfach mal die TsiLang-Suite empfehlen. Damit bekommt man das wunderbar hin.
Alternativ wäre da auch noch GNU GetText zu empfehlen, damit hab ich aber keine Erfahrungen. Zitat:
|
Re: Das eigene Programm in Russisch
Zitat:
Hallo, ich habe das Problem mit TDBCheckBox. Hier wird der Zeichensatz offensichtlich nicht richtig gewechselt - oder mache ich etwas falsch ? Danke ! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 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