Exception Messages lokalisieren



  • Hoi! 😉

    Mich würde mal interessieren was so die elegantesten Wege sind, eine Fehlernachricht vernünftig zu lokalisieren.

    Meine beste Idee ist es, einen ErrorCode zu werfen und den entsprechend umzuwandeln, gefällt mir aber auch nicht unbedingt ...

    Grüße,
    Ethon



  • Du meinst

    throw BlaFehler(__FILE__,__LINE__,"Es ist ein Bla entsprungen.");
    

    ?



  • Deutsch: Datei kann nicht geöffnet werden.
    Englisch: Cannot open file.
    Spanisch: No se puede abrir el archivo.

    Diese 3 sprachspezifischen Ausgaben und wohl noch einige mehr sollte der Nutzer je nach Einstellungen empfangen können.

    Meine Idee war ein

    throw ErrorCode::FileOpenError;
    

    Aber mich würde es interessieren, was die wohl eleganteste Möglichkeit wäre. 🙂



  • Nee, eine class FileOpenError mußt Du schon werfen, damit Du nach Exceptionklasse getrennt fangen könntest.
    Die FileOpenError muß eben in iherer char const* FileOpenError::what()//virtual oder void printAt(ostream&)//virtual den lokalisierten String ausgeben.



  • Hmm, ist es nicht etwas zu viel des Guten, für jeden Fehler eine Exceptionklasse zu bauen? Das erinnert mich so furchtbar an Java. 😉

    Errorcodes hätten halt den Vorteil, dass man sie gleichzeitig als Array-Indizen nutzen könnte um praktisch kostenlos eine entsprechende Meldung zum Errorcode herausfischenfischen zu können.



  • Hmm, ist es nicht etwas zu viel des Guten, für jeden Fehler eine Exceptionklasse zu bauen? Das erinnert mich so furchtbar an Java. 😉

    Kostet doch nichts. Du kannst ja außerdem noch nur die Basisklasse fangen oder (...), wenn dich der genaue Fehler nicht interessiert.

    Errorcodes hätten halt den Vorteil, dass man sie gleichzeitig als Array-Indizen nutzen könnte um praktisch kostenlos eine entsprechende Meldung zum Errorcode herausfischenfischen zu können.

    Kannst ja int s werfen, wenn du willst. 😉



  • Ethon schrieb:

    Errorcodes hätten halt den Vorteil, dass man sie gleichzeitig als Array-Indizen nutzen könnte um praktisch kostenlos eine entsprechende Meldung zum Errorcode herausfischenfischen zu können.

    Das ergänzt sich. Zum Beispiel eine Klasse für fast alles aus der WinAPI. Als Attribut hat sie nur einen errorcode, den man z.B. als Array-Index benutzen könnte.
    Und FileOpenError braucht nichmal ein Attribut, weil ihr Errorcode immer 147 wäre, ein FileOpenError schaut beim Index 147 im selben Array nach wie die ganzen anderen Errors auch.
    Wie weit Du aufgabelst, ist Deine Sache. Kannst ruhig anfangen mit Error (ohne Attribute), und OtherError (mit errorcode). Und falls irgendwann Bedarf besteht, nur einen FileOpenError zu fangen und die anderen durchzulassen, kannste noch den FileOpenError in die Fehlerhierarchie einbauen.
    Laß Dir den Weg einfach offen, würde ich vorschlagen.



  • Ok danke, werde mir das mal weiter durch den Kopf gehen lassen 😉



  • ich benutze Exceptions mit Fehlercodes kombiniert. throw file_open_error(); hätte z.B. den allg. Fehlercode err_file_open.

    Oder um die aktuelle Situation genauer zu spezifizieren: throw file_open_error (err_open_config_file);


Anmelden zum Antworten