messagebox: englische texte

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

messagebox: englische texte

Beitrag von malabarista »

Bei der messagebox sind in der Windows-Version (=WIN8) die Buttons englisch beschriftet: Yes und No. Obwohl es eine deutsche WIN-Installation ist.
(in der Linux-Variante ist es korrekt auf deutsch)

Kann man das irgendwo einstellen ?

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: messagebox: englische texte

Beitrag von Mathias »

So was wurde da auch diskutiert, scheint ein etwa kompliziertere Sache zu sein.
viewtopic.php?f=5&t=182&p=76018&hilit=messagebox+deutsch#p76018

Folgendes, kommt bei mir in deutsch, unter WinXP Lazarus 1.6

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  MessageBox(0, 'Leider ein Fehler' + LineEnding +
    'Programm wird beendet !', 'Fehler !', MB_ICONSTOP or MB_YESNO);
end


(in der Linux-Variante ist es korrekt auf deutsch)

Wie hast du dies unter Linux hingekriegt, dafür wird bei mir die Unit windows verlangt.
Zuletzt geändert von Mathias am Fr 19. Aug 2016, 20:37, insgesamt 1-mal geändert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: messagebox: englische texte

Beitrag von Michl »

Eigentlich gibt es genügend Einträge über Translations hier im Forum. Wie auch immer, verkürzt geht das so:

Du erstellst ein Unterverzeichnis in deinem Projektverzeichnis mit dem Namen "languages". Dieses kannst du auch für eigene Resourcestrings nutzen (Google: i18n).
In dieses Verzeichnis kopierst du entweder das komplette languages - Verzeichnis der lcl oder aber mindestens die Dateien:

Code: Alles auswählen

lclstrconsts.po
lclstrconsts.de.po
von z.B. C:\lazarus\lcl\languages.

Achtung, dieses Verzeichnis mit allen zu unterstützenden Sprachen (.po - Files) musst du so mit deinem Programm verteilen.

Nun noch folgender Code

Code: Alles auswählen

uses ..., Translations;  
...
procedure TForm1.FormCreate(Sender: TObject);
var
  PODirectory: String;
begin
  PODirectory := Application.Location + 'languages' + DirectorySeparator;
  TranslateUnitResourceStrings('LCLStrConsts', PODirectory + 'lclstrconsts.%s.po', 'de', '');
  MessageDlg('Title', 'Text', mtInformation, [mbOk, mbCancel, mbYes], 0); // sollte jetzt deutsche Beschriftungen haben
end

Siehe:
http://www.lazarusforum.de/viewtopic.php?f=5&t=182

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: messagebox: englische texte

Beitrag von Mathias »

Jetzt sehe ich vielleicht durch, der Thread-Ersteller meinte wahrscheinlich Application.MessageBox, dann sieht dies einiges anders aus, da dies auch unter Linux geht.

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject)// Braucht zwingend die Unit Windows, dafür kommt es in der Spache des Betriebsystemes.
begin
  MessageBox(0, 'Leider ein Fehler' + LineEnding +
    'Programm wird beendet !', 'Fehler !', MB_ICONSTOP or MB_YESNO or MB_HELP);
end;
 
procedure TForm1.Button1Click(Sender: TObject); // Ist Systemunabhängig, dafür aber englisch.
begin
  Application.MessageBox('Leider ein Fehler' + LineEnding +
    'Programm wird beendet !', 'Fehler !', MB_ICONSTOP or MB_YESNO or MB_HELP);
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: messagebox: englische texte

Beitrag von malabarista »

Zum einen: ich habe application.messagebox gemeint. Dass es noch eine andere messagebox gibt, wusste ich nicht.

Das Ganze scheint mir etwas komplizierter zu sein, das hatte ich nicht erwartet.
Da mache ich lieber einen modalen Dialog, welcher den Text für die Frage und die beiden Buttons "Ja" und "Nein" enthält.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: messagebox: englische texte

Beitrag von Michl »

malabarista hat geschrieben:ich habe application.messagebox gemeint
Ist eigentlich egal, da das oben geschriebene Vorgehen für alle in den in den .po- Files vorhandenen ResourceStrings funktioniert.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

VB_Lazarus
Beiträge: 90
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10/11 32/64bit, L 2.2.0 32bit, FPC 3.2.2 32bit
CPU-Target: 32Bit

Re: messagebox: englische texte

Beitrag von VB_Lazarus »

Hallo,

falls du keine Lokalisierung brauchst, kannst du es auch mit QuestionDLG machen.

mit Frage und Antwort:

Code: Alles auswählen

if QuestionDlg('Wartungen Datum ändern', 'Sollen alle angezeigten Wartungen zurückgemeldet und das Datum entsprechend dem Intervall angepasst werden?', mtConfirmation, [mrYes, 'Ja', mrNo, 'Nein'], 0) = mrYes then


nur als Message

Code: Alles auswählen

QuestionDlg('Wartung löschen', 'Es gibt keine Daten zu löschen.', mtWarning, [mrYes, 'Ok'], 0);


So habe ich es gelöst.

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: messagebox: englische texte

Beitrag von malabarista »

QuestionDLG ist ein guter Tipp. Ich brauche keine Lokalisierung, nur unbedingt alles auf deutsch.
Dankeschön.

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: messagebox: englische texte

Beitrag von Mathias »

Den kannte ich nicht, das muss ich mir merken. :wink:

Damit kann man den Anwender zur Verzweiflung bringen: :mrgreen:

Code: Alles auswählen

QuestionDlg('Wartungen Datum ändern', 'Sollen alle angezeigten Wartungen zurückgemeldet und das Datum entsprechend dem Intervall angepasst werden?',
    mtConfirmation, [mrLast, 'Letzte', mrYes, 'Ja', mrNo, 'Nein', mrOk, 'Ok', mrCancel, 'Abbruch', mrIgnore, 'Ingnorieren',  mrAbort, 'Fort', mrNoToAll, 'Nein-Alle', mrYesToAll, 'Ja-Alle'], 0);
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten