Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2413
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Delphi 10.3 Community Edition, Lazarus 2.0.6
BeitragVerfasst: Do 05.03.20 23:00 
Hallo!

Ich habe mir Lazarus installiert und bin gerade am Testen. Dabei ist mir gestern zunächst aufgefallen, dass die Buttons von MessageDlg etc. in englischer Sprache waren. Habe die Sprache dann von "Automatisch (oder englisch)" in "Deutsch [de]" geändert. Dann waren die Captions deutsch.

Aber ich bekomme es nicht hin, dass der Umlaut "ä" im Titel von MessageDlg bei mtCONFIRMATION korrekt dargestellt wird: Statt "Bestätigen" steht dort "Best?tigen".

Auch Lazarus selbst verwendet deutschen Text mit englischer Button-Beschriftung. Eine merkwürdige Kombination...

Wie stelle ich Lazarus richtig auf Deutsch ein?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 119



BeitragVerfasst: Fr 06.03.20 00:25 
Es gibt da zwei Möglichkeiten. Zuerst muss Lazarus auf deutsch umgestellt werden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var PODirectory: String;
begin
  PODirectory:='c:\lazarus\languages\';
  TranslateUnitResourceStrings('LCLStrConsts',PODirectory+
    'lazaruside.de.po','de','');
  PODirectory:='c:\lazarus\lcl\languages\';
  TranslateUnitResourceStrings('LCLStrConsts',PODirectory+
    'lclstrconsts.de.po','de','');
end;

Und hier der andere Grund:
In selbst erstellten oder aus Delphi importierten Units muss man sicher stellen, dass die Unit im UTF-8 Format gespeichert wurde.

Mit der o. g. Möglichkeit geht es dann auch international ganz gut:
BitBtn

ub60
Einloggen, um Attachments anzusehen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2413
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Delphi 10.3 Community Edition, Lazarus 2.0.6
BeitragVerfasst: Fr 06.03.20 16:25 
user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
Es gibt da zwei Möglichkeiten. Zuerst muss Lazarus auf deutsch umgestellt werden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var PODirectory: String;
begin
  PODirectory:='c:\lazarus\languages\';
  TranslateUnitResourceStrings('LCLStrConsts',PODirectory+
    'lazaruside.de.po','de','');
  PODirectory:='c:\lazarus\lcl\languages\';
  TranslateUnitResourceStrings('LCLStrConsts',PODirectory+
    'lclstrconsts.de.po','de','');
end;


Nützt nichts. Es bleibt bei "Best?tigen".
user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
Und hier der andere Grund:
In selbst erstellten oder aus Delphi importierten Units muss man sicher stellen, dass die Unit im UTF-8 Format gespeichert wurde.

Ich habe die selbst erstellte Unit1 mit notepad.exe als "UTF-8 mit BOM" abgespeichert - erfolglos. (Macht Lazarus das denn nicht selbst?)
Welche Unit genau muss ich im UTF-8 Format speichern?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2413
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Delphi 10.3 Community Edition, Lazarus 2.0.6
BeitragVerfasst: Fr 06.03.20 17:31 
Mit Application.MessageBox funktionieren auch deutsche Umlaute in der Caption.

Aber:
In meinem Testbeispiel ist der Titel der Applikation "project1".
Bei einer Caption wie PChar(Application.Title + ' - Bestätigung') wird nur das p ausgegeben.
Und MessageBox kennt Lazarus offenbar erst gar nicht.

Dazu bei den Projekteinstellungen und auch an anderen Stellen ein Mix aus deutsch und englisch.

Ist 2.0.6 wirklich eine ausgereifte Version? :hair:

Ich habe ja erwartet, dass Lazarus an Delphi nicht herankommt. Aber dass die Unterschiede schon bei so einfachen Sachen so gross sind, ja, sich geradezu als Bugs erweisen, habe ich nicht gedacht.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 119



BeitragVerfasst: Fr 06.03.20 18:05 
Also, Messagebox funktioniert.
Ich habe auf dem Rechner, an dem ich gerade sitze, nur die 1.8.4 installiert, aber folgendes funktioniert bei mir alles:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Translations, LCLType;

...

procedure TForm1.Button1Click(Sender: TObject);
var PODirectory: String;
begin
  PODirectory:='c:\lazarus\languages\';
  TranslateUnitResourceStrings('LCLStrConsts',PODirectory+
    'lazaruside.de.po','de','');
  PODirectory:='c:\lazarus\lcl\languages\';
  TranslateUnitResourceStrings('LCLStrConsts',PODirectory+
    'lclstrconsts.de.po','de','');
  MessageDlg(Application.Title + ' - Bestätigung', mtConfirmation, mbYesNo, 0);
  Application.MessageBox (PChar(Application.Title + ' - Bestätigung'), PChar(Application.Title + ' - Bestätigung'), MB_ICONQUESTION + MB_YESNO);
  Application.MessageBox (PChar(Application.Title + ' - Bestätigung'), PChar(Application.Title + ' - Bestätigung'), MB_ICONHAND);
end;


ub60

Für diesen Beitrag haben gedankt: galagher
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2413
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Delphi 10.3 Community Edition, Lazarus 2.0.6
BeitragVerfasst: Fr 06.03.20 18:27 
user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
Also, Messagebox funktioniert.
Wenn du Application.MessageBox meinst, das ja, aber MessageBox nicht!

Ich habe immer noch das Problem mit den Umlauten, bei mir sehen deine Beispiele so aus:
Einloggen, um Attachments anzusehen!
_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4247
Erhaltene Danke: 901

Win10
C#, C++ (VS 2015/17)
BeitragVerfasst: Fr 06.03.20 19:01 
Das abgeschnittene 'p' sieht nach Unicode aus, d.h. als ob ein Unicode-String mit einer ANSI-Funktion benutzt wird.

Und bei der ersten MessageBox scheint wohl nur der Titel nicht unicode- (bzw. codepage-)fähig zu sein (denn im Text wird ja das 'ä' richtig dargestellt).
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 119



BeitragVerfasst: Fr 06.03.20 19:21 
Also ich sitze jetzt an einem Rechner mit Lazarus 2.0.6 und alles funktioniert.

messagebox

Kannst Du mal ein Testprogramm mit dem Fehler zum Kompilieren hochladen?
PS: Hast Du schon mal in der Unit Dialogs nachgeschaut? Eventuell ist ja was Passendes dabei.
PPS: Warum muss es unbedingt MessageBox sein?

ub60
Einloggen, um Attachments anzusehen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2413
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Delphi 10.3 Community Edition, Lazarus 2.0.6
BeitragVerfasst: Fr 06.03.20 20:33 
user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
Also ich sitze jetzt an einem Rechner mit Lazarus 2.0.6 und alles funktioniert.
Das freut mich für dich! Bei mir nicht!

user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
Kannst Du mal ein Testprogramm mit dem Fehler zum Kompilieren hochladen?
Gerne, siehe Anhang.

user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
PS: Hast Du schon mal in der Unit Dialogs nachgeschaut? Eventuell ist ja was Passendes dabei.
Habe dort nichts gefunden. Auch der String "Bestätigen", wie er in MessageDlg vorkommt, habe ich in keiner Datei in den Lazaurus-Ordnern gefunden.

user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
PPS: Warum muss es unbedingt MessageBox sein?
Muss es ja nicht, aber warum funktioniert das nicht?

//Edit: Zwischenzeitlich habe ich Lazarus beendet und erneut gestartet: Mit einem neuen Projekt klappt es jetzt, bist auf "Best?tigen" im MessageDlg. Verstehe das, wer will, aber jetzt sind alle Strings korrekt, auch PChar.

Ich veräpple euch nicht, da wurde vorher wirklich nur ein p statt project1 als Application.Titel angezeigt. Mal sehen...

Übrigens: Ich brauche gar keine Sprachdatei einbinden. Das hat aber auch vorher nichts genutzt.
Einloggen, um Attachments anzusehen!
_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 119



BeitragVerfasst: Sa 07.03.20 01:32 
Das Umstellen der Sprache in der IDE auf Deutsch hat bei mir nicht geholfen (Ausgabe: Confirmation). Die Umstellung im Quelltext war allerdings erfolgreich.
Ich habe mal meine funktionierende Version angehangen. Leider kann ich den Fehler nicht nachvollziehen.

In der Datei "lazaruside.de.po" habe ich den String "Bestätigung" (allerdings nicht "bestätigen") gefunden.

ausblenden Quelltext
1:
2:
3:
#: lazarusidestrconsts.lisconfirmation
msgid "Confirmation"
msgstr "Bestätigung"

ub60
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: galagher
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2413
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Delphi 10.3 Community Edition, Lazarus 2.0.6
BeitragVerfasst: Sa 07.03.20 06:25 
user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
Das Umstellen der Sprache in der IDE auf Deutsch hat bei mir nicht geholfen (Ausgabe: Confirmation). Die Umstellung im Quelltext war allerdings erfolgreich.
Das ist es ja: Ich habe gestern gar nichts umgestellt, aber nach dem Neustart von Lazarus funktioniert es. Und ja, das Umstellen der Sprache in der IDE stellt die Sprache der IDE ein, das hat nichts mit Compilieren zu tun. Wusste ich zunächst nicht bzw. ich habe es einfach versucht.
user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
Leider kann ich den Fehler nicht nachvollziehen.
Kann ich jetzt auch nicht (mehr).

user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
In der Datei "lazaruside.de.po" habe ich den String "Bestätigung" (allerdings nicht "bestätigen") gefunden.
Ja, ich auch.

Und immer noch ist es so, dass ich nicht weiss, wozu es gut ist, TranslateUnitResourceStrings aufzurufen. Das hat keine sichtbare Auswirkung.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4247
Erhaltene Danke: 901

Win10
C#, C++ (VS 2015/17)
BeitragVerfasst: Sa 07.03.20 10:46 
Die Language-Dateien von Lazarus solltest du lokal zu deinem Projekt-Ausgabeordner kopieren (sonst würde es ja auf einem anderen Rechner nicht mehr funktionieren) und dann den Pfad (nur) so setzen:
ausblenden Delphi-Quelltext
1:
PODirectory:='languages\';					

Lies dir auch mal folgende Artikel durch:
- Step-by-step instructions for creating multi-language applications (besonders ab "Switching languages")
- Getting translation strings right (bzw. in deutsch: Getting translation strings right/de)

Und in den Projektoptionen dann I18n noch aktivieren (für eigene Übersetzungen), wie im ersten Link unter Enable translations beschrieben.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2413
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Delphi 10.3 Community Edition, Lazarus 2.0.6
BeitragVerfasst: Sa 07.03.20 11:15 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Die Language-Dateien von Lazarus solltest du lokal zu deinem Projekt-Ausgabeordner kopieren

Ich weiss nicht, wozu ich die Language-Dateien brauche. Jetzt sind alle deutschen Umlaute korrekt (bist auf das "Best?tigen" im MessageDlg, aber damit kann man leben. Egal, ob ich die Language-Dateien einbinde oder nicht, es wird deutsch verwendet. Offenbar reichte nach der Umstellung der Sprache in der IDE der Neustart von Lazarus. Ich weiss ehrlich gesagt nicht, warum es zuerst nicht funktionierte und jetzt doch.

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Und in den Projektoptionen dann I18n noch aktivieren (für eigene Übersetzungen), wie im ersten Link unter Enable translations beschrieben.
Ok, habe ich gemacht.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2413
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Delphi 10.3 Community Edition, Lazarus 2.0.6
BeitragVerfasst: Sa 07.03.20 13:35 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
//Delphi:
    MessageDlg(
         'Bestätigung',
         mtCONFIRMATION,
         [mbYES, mbNO],0);

//Lazarus:
    MessageDlg('Bestätigung',
         'Bestätigung',
         mtCONFIRMATION,
         [mbYES, mbNO],0);
//Aber auch wie unter Delphi möglich

Wenn man bei Lazarus MessageDlg wie unter Delphi angibt, erkennt Lazarus die Caption anhand des Typs des Dialogs, hier also eine Frage und es wird als Caption "Best?tigen" ausgegeben. Gibt man Caption explizit an, wird dies als Caption verwendet. Das muss man ja erstmal wissen!

So übel ist Lazarus gar nicht, wie ich zuerst dachte. Werde es wohl doch behalten!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2413
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Delphi 10.3 Community Edition, Lazarus 2.0.6
BeitragVerfasst: So 08.03.20 20:31 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Ich weiss nicht, wozu ich die Language-Dateien brauche.
Bei der Eigenschaft "Kind" von TBitBtn wirkt es sich aus, da ist die Caption zunächst englisch. Wenn man 1x (!) die Language-Dateien wie in den Beispielen der letzten Posts einbindet, sind die Buttons zur Laufzeit deutsch beschriftet. Zur Entwurfszeit bleiben sie natürlich englisch. Wenn man den entsprechenden Code für die Language-Dateien danach entfernt und auch danach nicht mehr anwendet, ja selbst bei einem neuen Projekt, bleiben die Captions trotzdem deutsch.

Das verstehe ich insofern nicht, da ich im Installationsordner von Lazarus keine Schreibrechte habe, Lazarus kann dort also keine Dateien ändern, Informationen ablegen etc. Also muss es die Spracheinstellungen in die Registry schreiben, den auch im Ordner Appdata\Roaming ist nichts dergleichen.

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Die Language-Dateien von Lazarus solltest du lokal zu deinem Projekt-Ausgabeordner kopieren (sonst würde es ja auf einem anderen Rechner nicht mehr funktionieren)
Wie bilde ich den relativen Pfad?
'languages' oder, wie mit Freund Google gefunden, '/path/to/lazarus/lcl/languages/' sind keine gültigen Pfadnamen. Ich muss also zunächst herausfinden, wie ich den Installationsordner von Lazarus ermitteln kann.

Noch mehr aber interessiert mich, warum eine einmalige Einstellung per Programmcode(!) dazu führt, dass andere Projekte plötzlich ebenfalls die deutsche Sprache verwenden. Ist ja natürlich schön so, aber wie und warum?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!