Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Das eigene Programm in Russisch (https://www.delphipraxis.net/90947-das-eigene-programm-russisch.html)

Bernhard Geyer 26. Apr 2007 13:37

Re: Das eigene Programm in Russisch
 
Zitat:

Zitat von CCRDude
Zitat:

Zitat von Bernhard Geyer
Wolltest Du nicht mal nach Freepascal wechseln ...

Was genau hat das damit jetzt zu tun? :D

Sorry. da hat <OffTopic></OffTopic> gefehlt.

Zitat:

Zitat von CCRDude
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.

Dann lassen wir wieder mal den Fragesteller zu Wort kommen ob für ihn die Codepage-Lösung reicht oder er eine Lösung ohne die Codepage-Einschränkungen benötigt.

torud 26. Apr 2007 13:52

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

torud 26. Apr 2007 13:58

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:
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;
Inhalt der Textdatei:
Delphi-Quellcode:
&#1045;&#1059;&#1063;&#1045;
????
TEXT
CP_ACP
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.

CCRDude 26. Apr 2007 14:08

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.

torud 26. Apr 2007 14:11

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?

Bernhard Geyer 26. Apr 2007 14:16

Re: Das eigene Programm in Russisch
 
Zitat:

Zitat von torud
Für mich waren und sind diese Codepages und Charsets bisher bömische Dörfer.

Deshalb mein vorschlag: lass es und nimm gleich Unicode-Controls.

Zitat:

Zitat von torud
Warum muss das alles so kompliziert sein?

Delphi wurde zu einer Zeit entwickelt (Delphi 1) als Windows noch kein Unicode konnte. Und bisher hat es Borland/Codegear vermieten (Zeit/Kostenaufwand/Kompatiblität) alles komplet auf Unicode umzustellen sodas das alles im "Hintergrund" ablaufen würde.

CCRDude 26. Apr 2007 14:19

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:
  • Neues Projekt erstellen
  • TMemo hinzufügen
  • Memo1.Font.Charset = RUSSIAN_CHARSET;
  • Knopf hinzufügen, der Memo1.Lines.SaveToFile('c:\meinrussisch.txt'); macht.
  • Mit dem Mini-Programm speicherst Du dann einfach eine Textdatei, die Du später auch OHNE Unicode-Konvertierungen oder Controls umwandeln kannst, in der Dein Codeschnipsel von vorhin einfahc mit Label1.Font.Charset := RUSSIAN_CHARSET; Label1.Caption := myList[0]; enden würde.

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

Bernhard Geyer 26. Apr 2007 14:46

Re: Das eigene Programm in Russisch
 
Zitat:

Zitat von CCRDude
@Bernhard Geyer: und leider werben Sie trotzdem groß mit Unicode-Unterstützung, meinen damit aber nur die IDE :(

Nicht ganz. Die VCL.NET ist Unicode-Enabled genauso wie WinForms. Die "Gott hab sie Selig" CLX-GUI-Controls waren auch teilweise Unicode-Enbled (Qt hat diese Fähigkeit). Und falls ein Win64-Port kommen wir so wird diese mit sicherheit auch Win64-Fähig sein. Nur die "alte" Win32 wurde noch nicht erweitert.

torud 26. Apr 2007 19:30

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:
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;
Die Memo wird beim Createn geladen. Da stimmt alles und steht auch alles kyrillisch drin...

CCRDude 26. Apr 2007 20:38

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 ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 Uhr.
Seite 2 von 3     12 3      

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