Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Mein Progi soll japanisch sprechen! (https://www.delphipraxis.net/49023-mein-progi-soll-japanisch-sprechen.html)

FrankBrin 4. Jul 2005 13:50


Mein Progi soll japanisch sprechen!
 
Hallo miteinander,
ich habe da ein nettes Programm, das bereits alle europäischen Sprachen beherrscht. D.h. unabhängig von der Windowseinstellung kann eine Sprache ausgewählt werden und das Programm setzt alle Ausgabetexte in die Sprache um. Dies geschieht über normale Textdateien, in denen die Übersetzungen hinterlegt sind.

So - und jetzt sollen die asiatischen Sprachen noch dazu kommen.

Hat jemand ne Ahnung, wie man sowas anstellt? Die bislang benutzten Textdateien sind in 8-Bit ASCII, muss ich da evtl. auf 16Bit Unicode gehen und dann alle meine Labels, Strings, Buttons usw. auf Unicode erweitern?

Wäre schön, wenn mir jemand da mal einen kleinen Einstieg geben kann

Gruß Frank

Bernhard Geyer 4. Jul 2005 13:54

Re: Mein Progi soll japanisch sprechen!
 
ElPack
Der Entwickler 5.2003, Artikel "We are a World"

toms 4. Jul 2005 13:57

Re: Mein Progi soll japanisch sprechen!
 
Zitat:

Zitat von FrankBrin
muss ich da evtl. auf 16Bit Unicode gehen und dann alle meine Labels, Strings, Buttons usw. auf Unicode erweitern?

Schau mal hier vorbei:
TntWare Delphi Unicode Controls

Bernhard Geyer 4. Jul 2005 14:11

Re: Mein Progi soll japanisch sprechen!
 
Zitat:

Zitat von FrankBrin
Hat jemand ne Ahnung, wie man sowas anstellt? Die bislang benutzten Textdateien sind in 8-Bit ASCII, muss ich da evtl. auf 16Bit Unicode gehen und dann alle meine Labels, Strings, Buttons usw. auf Unicode erweitern?

Ach ja. Falls dir jemand eine Lösung auf Basis von Codepages/Charsets vorschlagen will: Vergiss es. Das ist 'ne Frickellösung die nicht 100% Funktioniert (Delphi-Fehler, Win32-Controls-Fehler).

FrankBrin 6. Jul 2005 13:34

Re: Mein Progi soll japanisch sprechen!
 
Zitat:

Ach ja. Falls dir jemand eine Lösung auf Basis von Codepages/Charsets vorschlagen will: Vergiss es. Das ist 'ne Frickellösung die nicht 100% Funktioniert (Delphi-Fehler, Win32-Controls-Fehler).
So jetzt hab ich mich mal ein bischen mit TntWare beschäftigt. Die Controls umzuschreiben ist ja wirklich easy, doch wie in Gottes Namen bekomm ich nun die mittlerweile in Unicode abgelegten Texte aus den Textdateien in die .Captions.
Ist TntWare nicht genau diese "Frickellösung". Ich muss immer diesen Charset umschalten, wenn ich von Hand Captions eintrage.

Irgendwie sieht das alles chaotisch aus!!!

Gruß Frank

MosiXXL 6. Jul 2005 13:58

Re: Mein Progi soll japanisch sprechen!
 
Hier sind auch Hinweise zu diesem Thema.
Entwickler Forum

Bernhard Geyer 6. Jul 2005 13:59

Re: Mein Progi soll japanisch sprechen!
 
Zitat:

Zitat von FrankBrin
So jetzt hab ich mich mal ein bischen mit TntWare beschäftigt. Die Controls umzuschreiben ist ja wirklich easy, doch wie in Gottes Namen bekomm ich nun die mittlerweile in Unicode abgelegten Texte aus den Textdateien in die .Captions.

Indem du einen Unicode-Codierte Textdatei verwendest.

Zitat:

Zitat von FrankBrin
Ist TntWare nicht genau diese "Frickellösung". Ich muss immer diesen Charset umschalten, wenn ich von Hand Captions eintrage.

Nein TNT geht den richtigen weg. Aber was meinst Du mit "Hand Caption eintragen"?
Das Problem ist eher die Delphi-IDE (welche Delphi-Version hast Du denn?) welche kein Unicode kann.

FrankBrin 6. Jul 2005 15:07

Re: Mein Progi soll japanisch sprechen!
 
Zitat:

Das Problem ist eher die Delphi-IDE (welche Delphi-Version hast Du denn?) welche kein Unicode kann.
Ich verwende D7 Pro unter WinXP Pro (D2005 liegt hier bereits neben mir !!!Angst vor Neuem!!!).

Also jetzt mal konkret:
Ich habe mir erst einmal ein kleines Testprogi erstellt, welches nix anderes tut, wie eine Unicode - TextDatei zeilenweise einzulesen. Die Texte in der Datei zeigt Notepad auch richtig als japanisch an. Also gehe ich davon aus, dass es Unicode ist.
Die Texte werden in ein Array of WideString abgelegt und so ein einzelner WStr weise ich dann einem TntLabel.Caption zu. Das Ganze sieht dann so aus:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons,
  TntForms, TntStdCtrls, TntButtons, TntSystem;

type TForm1 = class(TTntForm)
    Lbl_01: TTntLabel;
    Btn_01: TTntBitBtn;
    Edt_01: TTntEdit;
    TntButton1: TTntButton;
    procedure FormCreate(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure TntButton1Click(Sender: TObject);
  private          { Private-Deklarationen }
    txtErrTexts    : Array of WideString;
  public           { Public-Deklarationen }
    MaxErrTexts    : Integer;
    procedure ReadUnicode();
end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  ReadUniCode();
end; //========================================================================

procedure TForm1.FormActivate(Sender: TObject);
var myWStr     : WideString;
begin
  myWStr := txtErrTexts[ 70];
  Lbl_01.Caption := myWStr;
end; //========================================================================

procedure TForm1.ReadUnicode();
var
  tf                 :   TextFile;
  strLine            : WideString;
   fname              : String;
  idx                : Integer;
  TntWideString
begin
  //Fehlertexte
  fname := 'Txt_Errors.ger';
  if ( FileExists( fname)) then begin
    SetLength( txtErrTexts, 0);
    MaxErrTexts := 0;
    AssignFile( tf, fname);
    Reset( tf);
    while not Eof( tf) do begin
      Readln( tf, strLine);
      idx := AnsiPos( ';', strLine);
      if idx <> 1 then begin //Kommentarzeilen beginnen mit ;
        if idx > 0 then strLine := Copy( strLine, 1, idx - 1);   // Alles nach ; entfernen
        //strLine := AnsiDequotedStr( strLine, '"');
        SetLength( txtErrTexts, MaxErrTexts + 1);
        txtErrTexts[ MaxErrTexts] := WideString( strLine);
        Inc( MaxErrTexts);
      end;
    end;
    CloseFile( tf);
  end;
end; //========================================================================

procedure TForm1.TntButton1Click(Sender: TObject);
begin
  Lbl_01.Caption := Edt_01.Text;
end;

end.
Bitte nicht an dem AnsiPos und Copy stören! es ist mir klar, das es nicht tut. Es wird ja auch nicht ausgeführt.

Wenn ich das Ganze debugge, dann sieht das Textfeld txtErrTexts in ReadUnicode echt gut aus. Kommt der Debugger aber in FormActivate steht im Textfeld was anderes und das TntLabel zeigt nix an.

Manchmal komm ich mir vor wie ein Anfänger!!!

xaromz 6. Jul 2005 16:15

Re: Mein Progi soll japanisch sprechen!
 
Hallo,

kann es sein, dass ReadLn nur mit AnsiStrings zurechtkommt?

Versuch doch mal eine TntStringList. Ist wahrscheinlich sowieso die bessere Alternative.

Gruß
xaromz

FrankBrin 7. Jul 2005 07:29

Re: Mein Progi soll japanisch sprechen!
 
Zitat:

Versuch doch mal eine TntStringList.
Jaja, die Lösung liegt so Nah und ist so schön einfach. Vielen Dank für den Tip.

Gibt es ausser der Homepage von Troy irgend eine Hilfedatei oder Beschreibung zu den Tnt Controls?

Gruß Frank

xaromz 7. Jul 2005 09:24

Re: Mein Progi soll japanisch sprechen!
 
Hallo,
Zitat:

Zitat von FrankBrin
Gibt es ausser der Homepage von Troy irgend eine Hilfedatei oder Beschreibung zu den Tnt Controls?

Gruß Frank

Die Tnt-Controls sind im Großen und Ganzen wie die VCL, nur eben mit Unicode-Support. Deshalb kannst Du eigentlich die Delphi-OH verwenden.

Gruß
xaromz

CodeX 19. Jul 2005 17:13

Re: Mein Progi soll japanisch sprechen!
 
wie sieht es denn aus, wenn ich mich entschließe einem programm nachträglich eine spache beizubringen, die unicodezeichen enthält?
müsste ich dann wirklich ALLE elemente, die text darstellen (labels, edits, buttons, ...) durch TntWare elemente ersetzen? das ist doch ne mordsarbeit.
oder gibts da einen trick? wenn ich nämlich "Die Controls umzuschreiben ist ja wirklich easy" lese, macht mir das doch etwas mut.
meine beschriftungen lese ich aus einer resource datei aus, weshalb ich mal davon ausgehe, dass es da keine probleme geben sollte, sobald die elemente unicode darstellen können.

CodeX 22. Jul 2005 20:51

Re: Mein Progi soll japanisch sprechen!
 
Zitat:

Zitat von CodeX
wie sieht es denn aus, wenn ich mich entschließe einem programm nachträglich eine spache beizubringen, die unicodezeichen enthält?
müsste ich dann wirklich ALLE elemente, die text darstellen (labels, edits, buttons, ...) durch TntWare elemente ersetzen? das ist doch ne mordsarbeit.
oder gibts da einen trick? wenn ich nämlich "Die Controls umzuschreiben ist ja wirklich easy" lese, macht mir das doch etwas mut.
meine beschriftungen lese ich aus einer resource datei aus, weshalb ich mal davon ausgehe, dass es da keine probleme geben sollte, sobald die elemente unicode darstellen können.

keiner eine idee? :(

Olli 22. Jul 2005 21:01

Re: Mein Progi soll japanisch sprechen!
 
Nimmste einfach das DFM in Textansicht und ersetzt die jeweiligen Elemente ... sollte doch gehen, oder?

CodeX 22. Jul 2005 23:37

Re: Mein Progi soll japanisch sprechen!
 
hm, das müsste dann in den form dateien und auch in den ganzen units geändert werden. und da es von hand viel zu aufwendig wäre, müsste suchen/ersetzen herhalten und das ist mir nicht immer geheuer.
wäre es nicht vielleicht eleganter, die delphi-eigenen komponenten so umzuschreiben, dass die auch unicode können? das müsste doch eigentlich gehen. oder spricht da was dagen? es wäre ja auch kein nachteil, wenn alle delphianwendungen theoretisch unicode könnten. man muss es ja nicht nutzen. oder übersehe ich da einen haken?

Bernhard Geyer 25. Jul 2005 08:46

Re: Mein Progi soll japanisch sprechen!
 
Zitat:

Zitat von CodeX
wäre es nicht vielleicht eleganter, die delphi-eigenen komponenten so umzuschreiben, dass die auch unicode können? das müsste doch eigentlich gehen.

Machen doch die TNT-Controls

Zitat:

Zitat von CodeX
oder spricht da was dagen? es wäre ja auch kein nachteil, wenn alle delphianwendungen theoretisch unicode könnten. man muss es ja nicht nutzen. oder übersehe ich da einen haken?

Wenn es nicht so geht wie die TNT-Controls wird dein Programm nicht mehr unter Win9x/ME laufen.
Und wenn es so wie die TNT-Controls gemacht wird, sind mit sicherheit neue Fehler drin. Sei es aufgrund der Umsetzung oder weil die API-Funktionen sich etwas anders verhalten. Und Borland wird sowas definitiv nicht mehr für Win32 durchführen.

Olli 25. Jul 2005 10:20

Re: Mein Progi soll japanisch sprechen!
 
Zitat:

Zitat von Bernhard Geyer
Und Borland wird sowas definitiv nicht mehr für Win32 durchführen.

Leider. Eigentlich würde sich das aber gehören. Zumal alle zukünftigen OSs von MS mit Unicodeverständnis ausgerüstet sein werden und intern sowieso das meiste in Unicode abläuft.

FriFra 25. Jul 2005 11:00

Re: Mein Progi soll japanisch sprechen!
 
Vielleicht könnte man ja ein eigenes Patch für die VCL schreiben... Die bettr. Stellen bräuchten im Grunde doch "nur" durch einfaches Find&Replace ersetzt und die Kompos anschließend neu compiliert zu werden :roll: .
Das hätte auf jeden Fall den Vorteil, dass alle Projekte auf einen Schlag Unicode-fähig wären.

Olli 25. Jul 2005 11:29

Re: Mein Progi soll japanisch sprechen!
 
Zitat:

Zitat von FriFra
Das hätte auf jeden Fall den Vorteil, dass alle Projekte auf einen Schlag Unicode-fähig wären.

... aber nicht mehr ANSI-fähig :roll: ...

Das ist genau das was Bernhard oben ansprach. TNT achtet darauf, daß die Programme sowohl auf Windows 9x/Me als auch auf den nativ unicodefähigen NTs laufen. Diesen Vorteil würdest du mit deiner Idee aufgeben, denn dafür ist ungleich mehr Arbeit nötig. Allen Respekt an Troy für seine TNT-Kompos!

FriFra 25. Jul 2005 11:33

Re: Mein Progi soll japanisch sprechen!
 
Ich hab gerade das hier gefunden:
http://www.sunisoft.com/smlpack

Kennt sich jemand daamit aus? So wie es aussieht, macht diese Komponentet alle VCL-Komponenen automatisch unicode fähig...

Olli 25. Jul 2005 11:42

Re: Mein Progi soll japanisch sprechen!
 
Zitat:

Zitat von FriFra
ennt sich jemand daamit aus? So wie es aussieht, macht diese Komponentet alle VCL-Komponenen automatisch unicode fähig...

Ich will nicht pedantisch sein, aber bist du sicher mit deiner Annahme, daß diese Kompo es auf Unicode umstellt? Multilingual geht auch notfalls ohne Unicode (ging ja zu ANSI-Zeiten auch, nur eben nicht gleichzeitig) und von "Unicode" kann ich auf dieser Seite nix finden.

FriFra 25. Jul 2005 11:46

Re: Mein Progi soll japanisch sprechen!
 
Ja, da hast Du recht :wall: ... zu früh gefreut :cry: .
Hm.. aber müsste es nicht theoretisch möglich sein, alle Komponenten einer Form zur Laufzeit unicode fähig zu machen :gruebel: ?

Olli 25. Jul 2005 11:55

Re: Mein Progi soll japanisch sprechen!
 
Zitat:

Zitat von FriFra
Hm.. aber müsste es nicht theoretisch möglich sein, alle Komponenten einer Form zur Laufzeit unicode fähig zu machen :gruebel: ?

Soweit ich weiß geht das bei den Common Controls erst ab einer Version die ab Windows 2000 oder so verfügbar war. Ansonsten wird dieses Flag bereits bei der Erzeugung des Fensters gesetzt. Auslesen kannst du es zB mit meinem EDA. Bei den Basiscontrols könnte es schon reichen wenn man SendMessageW() benutzt - bin aber nicht sicher. Basiscontrols sind all jene, die schon seit Win16 existieren und deshalb auch Sachen zulassen, die dank Prozeßtrennung nicht mehr in Win32 möglich sein sollten.

Bernhard Geyer 25. Jul 2005 12:29

Re: Mein Progi soll japanisch sprechen!
 
Zitat:

Zitat von Olli
Zitat:

Zitat von Bernhard Geyer
Und Borland wird sowas definitiv nicht mehr für Win32 durchführen.

Leider. Eigentlich würde sich das aber gehören. Zumal alle zukünftigen OSs von MS mit Unicodeverständnis ausgerüstet sein werden und intern sowieso das meiste in Unicode abläuft.

Borland ist zu klein um alle Kriegsplätze zu besetzen und und manchen ist ja Unicode-Fähigkeit gegeben.

Hier mal 'ne auflistung welche Möglichkeiten man mit Delphi hat
VCL.Win16 - Kein Unicode
VCL.Win32 - Kein Unicode
VCL.NET - Unicode
FCL - Unicode
VCL.Win64 - Unicode (Falls Borland 64-Bit unterstützen will)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:20 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