Autor |
Beitrag |
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Do 05.03.20 22: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
Beiträge: 762
Erhaltene Danke: 127
|
Verfasst: Do 05.03.20 23:25
Es gibt da zwei Möglichkeiten. Zuerst muss Lazarus auf deutsch umgestellt werden:
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:
ub60
Einloggen, um Attachments anzusehen!
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Fr 06.03.20 15:25
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Fr 06.03.20 16: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?
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
Beiträge: 762
Erhaltene Danke: 127
|
Verfasst: Fr 06.03.20 17: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:
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
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Fr 06.03.20 17:27
ub60 hat folgendes geschrieben : | 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
Beiträge: 4791
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 06.03.20 18: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
Beiträge: 762
Erhaltene Danke: 127
|
Verfasst: Fr 06.03.20 18:21
Also ich sitze jetzt an einem Rechner mit Lazarus 2.0.6 und alles funktioniert.
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
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Fr 06.03.20 19:33
ub60 hat folgendes geschrieben : | Also ich sitze jetzt an einem Rechner mit Lazarus 2.0.6 und alles funktioniert. |
Das freut mich für dich! Bei mir nicht!
ub60 hat folgendes geschrieben : | Kannst Du mal ein Testprogramm mit dem Fehler zum Kompilieren hochladen? |
Gerne, siehe Anhang.
ub60 hat folgendes geschrieben : | 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.
ub60 hat folgendes geschrieben : | 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
Beiträge: 762
Erhaltene Danke: 127
|
Verfasst: Sa 07.03.20 00: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.
Quelltext 1: 2: 3:
| #: lazarusidestrconsts.lisconfirmation msgid "Confirmation" msgstr "Bestätigung" |
ub60
Einloggen, um Attachments anzusehen!
Für diesen Beitrag haben gedankt: galagher
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Sa 07.03.20 05:25
ub60 hat folgendes geschrieben : | 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.
ub60 hat folgendes geschrieben : | Leider kann ich den Fehler nicht nachvollziehen. |
Kann ich jetzt auch nicht (mehr).
ub60 hat folgendes geschrieben : | 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
Beiträge: 4791
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Sa 07.03.20 09: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:
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
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Sa 07.03.20 10:15
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Sa 07.03.20 12:35
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| MessageDlg( 'Bestätigung', mtCONFIRMATION, [mbYES, mbNO],0);
MessageDlg('Bestätigung', 'Bestätigung', mtCONFIRMATION, [mbYES, mbNO],0); |
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
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: So 08.03.20 19:31
galagher hat folgendes geschrieben : | 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.
Th69 hat folgendes geschrieben : | 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!
|
|
|