Sprache umstellen (zB auf Englisch)


jupp2oo8

Mitglied
Hey Leute,
mein Programm soll eher für englischsprachige Personen sein. Wenn ich aber "Fehlermeldungs-Fenster" (MessageDialogs) verwende o.ä. dann ist die Überschrift ja immer noch auf deutsch, was natürlich so nicht sein soll.

Oder ist es automatisch so, dass zB auf einer englischen Windows-Version die Hilfe-/Fehlermeldungsfenster dann in englischer Sprache erscheinen?

Oder kann ich meinem Main Formular irgendwie "sagen", dass es bitte auf Englisch sein soll
 
Zuletzt bearbeitet:

CSANecromancer

Erfahrenes Mitglied
Also diesbezüglich habe ich da was in meinem Delphi-Projekt, sollte aber adaptierbar sein, da der CBuilder ja auch die VCL nutzt. Genau da liegt nämlich die Crux. In der VCL sind solche Resourcestrings fest verdrahtet und werden auch bei Lokalisierungen nicht ersetzt. Die Lösung, die ich hier habe (ich glaube, die habe ich damals von Torris Delphiseiten übernommen), besteht darin, das entsprechende Message-Fenster "manuell" zu bauen und noch vor der Anzeige die Komponenten des Fensters abzugrasen und die Beschriftungen entsprechend zu verändern:

Code:
{*-----------------------------------------------------------------------------
  Eigene MessageDlg-Routine

  Warum eine eigene MessageDlg-Routine? Die normale Delphi-Routine compiliert
  die Buttons der dynamischen Dialogfenster mit FESTEN Strings. Diese sind
  auch nicht mit dem Ressourcenmanager anpassbar, da sie in den VCL-Klassen
  liegen und nicht in irgendeiner Komponente. Leider werden die Button-
  Beschriftungen auch nicht vom Betriebssystem und dessen Sprache beein-
  flusst. Deswegen erzeugt diese Routine auch ein Dialogfeld, schreibt jedoch
  die Beschriftung der Buttons mit Resourcestrings, die in der Data.Globals
  hinterlegt sind => Lokalisierung dynamischer Dialogfenter.

  @param Msg Text, der innerhalb des Dialogfensters angezeigt werden soll
  @param Typ Art des Meldungsfensters (Information, Warning etc.)
  @param Buttons Die Buttons, die im Fenster angezeigt werden sollen
  @param HelpCtx Kontext für eine eventuell angebundene Hilfe
  @return Der Wert des angeklickten Buttons 
-----------------------------------------------------------------------------*}
function TMain.Message(const Msg: String; Typ: TMsgDlgType; Buttons:TMsgDlgButtons; HelpCtx: Longint): Word;
var
  lComponent: TComponent;
  k: Integer;
begin
  with CreateMessageDialog(Msg, Typ, Buttons) do
  begin
    // Alle Komponenten des Dialogs werden auf der Suche nach den Buttons durchlaufen
    for k := 0 to ComponentCount - 1 do
    begin
      lComponent := Components[k];
      // Jeder gefundene Button wird überprüft
      if lComponent is TButton then with TButton(lComponent) do
      // Zuweisung der jeweiligen Captions
      begin
        if UpperCase(Name) = 'YES' then Caption := rs_MAIN_DLG_YES;
        if UpperCase(Name) = 'NO' then Caption := rs_MAIN_DLG_NO;
        if UpperCase(Name) = 'OK' then Caption := rs_MAIN_DLG_OK;
        if UpperCase(Name) = 'CANCEL' then Caption := rs_MAIN_DLG_CANCEL;
      end;
    end;

    Result := ShowModal;
  end;
end;
Und in den rs_MAIN_DLG_... habe ich eben als Strings die jeweiligen Captions für die entsprechende Sprache hinterlegt.
 

jupp2oo8

Mitglied
Hm, danke für den Tipp, das muss ich mir mal genauer ansehen.
Aber es könnte ja trotzdem ein Fehler im Programm auftreten, mit dem ich nicht rechne. Dann öffnet (bei mir der Borland C++ Builder 2007) ein Fenster mit einer Meldung, wo aber in der Titelzeile "Fehler" steht. Also er würde immer deutsch sprechen.

Weiß jemand, ob auf einem englischen System dort "Error" stehen würde? Und bei allgemein gültigen Windows-Fehlermeldungen auch automatisch ein englischer Text?
Ich glaub, jeder Fehler hat nämlich eine Nummer, und das System ordnet dann erst eine entsprechende Meldung zu.
 

CSANecromancer

Erfahrenes Mitglied
Ausprobiert habe ich es nicht, aber hast du evtl. ein XP, bei dem du das englische Sprachpaket installieren und aktivieren kannst? Vielleicht lässt sich so rauskriegern, ob Exceptions dann auch in Englisch angezeigt werden. Ansonsten schau ich mal, ob ich ein englisches System auftreibe und teste es.
 

jupp2oo8

Mitglied
Also ich wüsste nicht, wo ich so was her kriegen sollte.
Aber eigentlich müsste man so was doch irgendwo mal nachlesen können!
AUßerdem kann ich mir auch nicht vorstellen, dass ich die erste bin, die dieses Problem hat...