Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Standard-Exceptions lokalisieren (https://www.delphipraxis.net/180868-standard-exceptions-lokalisieren.html)

Der schöne Günther 25. Jun 2014 19:11

Standard-Exceptions lokalisieren
 
Ich stelle mich wahrscheinlich ziemlich dumm an- Dinge wie "So übersetzen auch Schimpansen ihre Borland-Anwendungen in 360 Sekunden" gibt es zuhauf.

Ich will nicht meinen eigenen Kram lokalisieren- Ich will verhindern dass in Feuerland-Mitte eine Exception die bis auf die Oberfläche durchbubbelt plötzlich "Achtung Schwitzen Sauerbrot!" steht: Keine deutschen Texte, Englisch.

Ich finde partout nichts, wo ich das irgendwie anfassen könnte. Ich habe bei der Installation immer ein Häkchen für Deutsch und Englisch gesetzt aber das scheint mir momentan auch nicht weiterzuhelfen...

Dejan Vu 25. Jun 2014 21:02

AW: Standard-Exceptions lokalisieren
 
Sorge doch einfach dafür, das keine Exception bis an die Oberfläche kommt.
Die Holzhammermethode ist, per TApplication.OnException einfach alle Exceptions abzufangen.
Die richtige (imho) Methode ist die, um jede Klasse bzw. System einen Exceptionwrapper zu legen.

Das bedeutet in PseudoCode:

Delphi-Quellcode:
Procedure TOuterClass.Method;
Var
  outerExceptionInfo : TOuterExceptionInfo;

Begin
  Try
    InnerClass.AnotherMethod();
  ...
  Except
    On E:EInnerException do begin
      outerExceptionInfo := HandleInnerException(E);
      raise EOuterException.Create(outerExceptionInfo);
// alternativ: AnotherMethod nochmals aufrufen (falls das Sinn macht)
    End;
    On E:Exception do
      raise EFatalException.Create(E);
  End
End;
D.h. Du verbirgst die inneren Exception, indem Du sie behandelst, also z.B. den Grund auflöst und nochmal probierst. Das geht nur manchmal, denn wenn z.B. das Kennwort falsch ist, ist es falsch, da wird man nichts machen können. Aber wenn ein Deadlock aufgetreten ist, kann man z.B. kurz warten und es dann nochmal probieren usw. Falls Du die Exception nicht auflösen kannst, dann kapselst Du die ziemlich wirren Aussagen (EIdConnectionAbortException, EFooBarBlaFasel usw) und verpasst dann der EOuterException anständige teutonisch-anglistische Haikus. Oder ähnlich Seriöses.

Ein wenig Aufwand, aber deinem Bestreben, ästhetisch ansprechende Software zu schreiben, durchaus zuträglich.

Stevie 25. Jun 2014 21:13

AW: Standard-Exceptions lokalisieren
 
Wenn du deine Anwendung mit BPLs auslieferst, einfach die passenden EN Dateien dazu mitliefern. Wenn es sich um eine einzige Binary handelt, dann kannst du mit der BDSSetLang.exe (liegt im bin Verzeichnis deiner Delphi Installation) die Sprache der RTL umschalten.

Weitere Informationen findest du im Wiki.

Sir Rufo 25. Jun 2014 21:15

AW: Standard-Exceptions lokalisieren
 
Schau mal unter
Code:
Tools/Optionen/Umgebungsoptionen/Delphi-Optionen/Bibliothek - Übersetzt
und dann noch unter
Code:
Tools/Optionen/Umgebungsoptionen/Umgebungsvariablen -> LANGDIR
Stell dort einfach mal von DE auf EN um, dann hast du garantiert alles in Englisch ;)

Deine eigenen Quellen kannst du auch in solchen Lang-Ordnern unterbringen
Code:
ressources
  DE
  EN
und auf die Verzeichnisse über .\ressources\$(LANGDIR) verweisen (Suchpfad in den Projekt-Einstellungen).

Doof ist, dass man diese LANGDIR Einstellungen nicht auf Projektebene einstellen kann ... wäre ja auch zu schön gewesen ...

Der schöne Günther 26. Jun 2014 07:13

AW: Standard-Exceptions lokalisieren
 
Alle drei fühlen sich bitte herzlich gedrückt :love:

Die BDS-Umgebungsvariable $LANGDIR führt ebenso zu dem was ich wollte wie Benutzung der BDSSetLang.exe. Komischerweise ändert letztere die Umgebungsvariable nicht sondern wohl wieder etwas anderes, aber was solls.

Zitat:

Zitat von Dejan Vu (Beitrag 1263497)
Sorge doch einfach dafür, das keine Exception bis an die Oberfläche kommt.

Das ist natürlich vollkommen richtig, ich hätte nicht nur Exceptions ansprechen sollen. Weiteres Beispiel: Bei Dialogen wie "Ja/Nein" oder "Abbrechen/Wiederholen" bleiben die Schaltflächen weiterhin in Deutsch. Ein Text in Kyrillisch und dann "Abbrechen/Wiederholen?" darunter sieht schon schräg aus 8-)

Uwe Raabe 26. Jun 2014 08:09

AW: Standard-Exceptions lokalisieren
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1263516)
Weiteres Beispiel: Bei Dialogen wie "Ja/Nein" oder "Abbrechen/Wiederholen" bleiben die Schaltflächen weiterhin in Deutsch. Ein Text in Kyrillisch und dann "Abbrechen/Wiederholen?" darunter sieht schon schräg aus 8-)

Wenn es sich um reine Windows-Dialoge handelt, kommt dort wohl eher die Spracheinstellung des aktuellen Windows-Users zum tragen.

Der schöne Günther 26. Jun 2014 08:15

AW: Standard-Exceptions lokalisieren
 
Ja, direkt über die WinAPI gehen hätte man das wohl nicht gehabt. Ich war so frei
Delphi-Quellcode:
Vcl.Dialogs.MessageDlg(..)
zu nehmen, ich kannte nichts anderes. Und scheint das alles immer selbst über die VCL zusammenzubauen und fest aus
Delphi-Quellcode:
Vcl.Consts
eingebackene Strings zu nehmen.

Und wer weiß wo noch mehr solche Fälle sind. Einfach auf Mondsprech umstellen und ich kann wieder ruhig schlafen.

Uwe Raabe 26. Jun 2014 10:45

AW: Standard-Exceptions lokalisieren
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1263526)
Ich war so frei
Delphi-Quellcode:
Vcl.Dialogs.MessageDlg(..)
zu nehmen, ich kannte nichts anderes. Und scheint das alles immer selbst über die VCL zusammenzubauen und fest aus
Delphi-Quellcode:
Vcl.Consts
eingebackene Strings zu nehmen.

Wenn die Strings aus Vcl.Consts genommen werden, sollte die Delphi-Sprachumschaltung aber wirken. Die Vcl.Consts.dcu gibt es gerade deswegen in unterschiedlichen Versionen in den Sprach-Unterverzeichnissen.


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