Multi-Language-Programme mit Lazarus - wie?
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Multi-Language-Programme mit Lazarus - wie?
Ich stehe erstmals vor der Aufgabe, Programme für mehrere Sprachen, auch später erweiterbar, zu schreiben. In PureBasic hab ich dazu ein mehrdimensionales Array mit Stringkonstanten angelegt, in dem die verschiedenen Sprachvarienten standen. Nicht ganz Stand der Technik.
1. Ist i18n mit resourcestrings hier der richtige und aktuelle Weg, oder gibt es noch andere Möglichkeiten?
2. Kann ich Widgets (Buttons) im Designer resourcestrings direkt zuweisen, oder muss ich das nach Erstellen des Formulars im Programm von Hand machen?
3. Werden die Sprachdateien (.po, .mo?) in die Exe eingebunden, oder muss ich die extra mit ausliefern?
4. Kann ich aus dem laufenden Programm raus (Menu=>Einstellungen=>Sprache) die Sprache wechseln?
Ich hab damit unter Lazarus noch nichts gemacht, und ich möchte es gern gleich richtig machen.
1. Ist i18n mit resourcestrings hier der richtige und aktuelle Weg, oder gibt es noch andere Möglichkeiten?
2. Kann ich Widgets (Buttons) im Designer resourcestrings direkt zuweisen, oder muss ich das nach Erstellen des Formulars im Programm von Hand machen?
3. Werden die Sprachdateien (.po, .mo?) in die Exe eingebunden, oder muss ich die extra mit ausliefern?
4. Kann ich aus dem laufenden Programm raus (Menu=>Einstellungen=>Sprache) die Sprache wechseln?
Ich hab damit unter Lazarus noch nichts gemacht, und ich möchte es gern gleich richtig machen.
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Multi-Language-Programme mit Lazarus - wie?
Das habe ich durchaus auch schon alles gefunden.
-
- Beiträge: 351
- Registriert: Mi 25. Nov 2015, 17:06
- OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
- CPU-Target: i386 + x86_64
- Wohnort: in der Nähe von Stuttgart
- Kontaktdaten:
Re: Multi-Language-Programme mit Lazarus - wie?
Vor nicht allzulanger Zeit habe ich selbst eine Übersetzungsengine auf INI-Datei Basis geschrieben. Die Sprachdatei wird nicht in die exe eingebunden und muss seperat ausgeliefert werden. Vielleicht hilft dir das ja weiter: http://lazarusforum.de/viewtopic.php?f=29&t=11928.
Der Vorteil meiner Engine ist: Man kann Sprachen vererben, wie bei der objektorientierten Programmierung. Möchtest du jetzt also American und British English unterstützen musst du nicht alles doppelt machen, sondern erstellst ein mal z.B. American English und leitest British English davon ab. Bei British English trägst du dann nur die veränderten Strings ein (z.B. "color" -> "colour").
Der Vorteil meiner Engine ist: Man kann Sprachen vererben, wie bei der objektorientierten Programmierung. Möchtest du jetzt also American und British English unterstützen musst du nicht alles doppelt machen, sondern erstellst ein mal z.B. American English und leitest British English davon ab. Bei British English trägst du dann nur die veränderten Strings ein (z.B. "color" -> "colour").
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
- kupferstecher
- Beiträge: 431
- Registriert: Do 17. Nov 2016, 11:52
Re: Multi-Language-Programme mit Lazarus - wie?
Deine Fragen lassen sich eigentlich alle mit 'ja' beantworten. Die i18n-Unterstuetzung ist m.E. sehr gut, es lohnt die Einarbeitung.
2. Die Standardkomponenten haben bereits eingebaute Unterstuetzung fuer Mehrsprachigkeit. Allein einen Button zu verwenden erzeugt schon einen Eintrag fuer die Caption in der PO-Datei. Einfach mal i18n aktivieren uns die po-Datei anschauen.
3. Von Haus aus werden die Dateien nicht eingebunden, sondern liegen separat, muessen vom Binary also zugaenglich sein. Die PO-Dateien koennen aber als Lazarus-Ressource eingebunden werden, ich mach das auch so. Nach Sprachanpassung muss man halt die lrs-Datei neu erstellen was aber per Batch-Datei auf Knopfdruck geht, danach das Projekt nochmals kompilieren.
4. Auch das geht.
Im Wiki ist die Kombination aus 3. und 4. beschrieben:
http://wiki.lazarus.freepascal.org/Ever ... le_running
Noch eine Anmerkung dazu: Wenn man Uebersetzungen als lrs in einer zentralen Unit einbindet, muss man diese Unit nach dem Update der Uebersetzungen neu kompilieren, was Lazarus nicht automatisch macht, wenn sich der Quellcode der Unit nicht geaendert hat. Eine kleine Aenderung, wie Einfuegen einer neuen Zeile hilft, man muss halt drandenken. Vielleicht kann man die Datei aber irgendwo in den Einstellungen vormerken, dass sie jedes Mal neu kompiliert wird, k.A.
2. Die Standardkomponenten haben bereits eingebaute Unterstuetzung fuer Mehrsprachigkeit. Allein einen Button zu verwenden erzeugt schon einen Eintrag fuer die Caption in der PO-Datei. Einfach mal i18n aktivieren uns die po-Datei anschauen.
3. Von Haus aus werden die Dateien nicht eingebunden, sondern liegen separat, muessen vom Binary also zugaenglich sein. Die PO-Dateien koennen aber als Lazarus-Ressource eingebunden werden, ich mach das auch so. Nach Sprachanpassung muss man halt die lrs-Datei neu erstellen was aber per Batch-Datei auf Knopfdruck geht, danach das Projekt nochmals kompilieren.
4. Auch das geht.
Im Wiki ist die Kombination aus 3. und 4. beschrieben:
http://wiki.lazarus.freepascal.org/Ever ... le_running
Noch eine Anmerkung dazu: Wenn man Uebersetzungen als lrs in einer zentralen Unit einbindet, muss man diese Unit nach dem Update der Uebersetzungen neu kompilieren, was Lazarus nicht automatisch macht, wenn sich der Quellcode der Unit nicht geaendert hat. Eine kleine Aenderung, wie Einfuegen einer neuen Zeile hilft, man muss halt drandenken. Vielleicht kann man die Datei aber irgendwo in den Einstellungen vormerken, dass sie jedes Mal neu kompiliert wird, k.A.
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Multi-Language-Programme mit Lazarus - wie?
Tja, nun hab ich erst die Gui gebaut und dann i18n aktiviert, das po-Verzeichnis ist noch leer. Muss mal schauen wie ich das nachträglich hingebogen bekomme. Beim nächsten Mal mach ich es andersrum.kupferstecher hat geschrieben:Allein einen Button zu verwenden erzeugt schon einen Eintrag fuer die Caption in der PO-Datei. Einfach mal i18n aktivieren uns die po-Datei anschauen.
Klingt gut.kupferstecher hat geschrieben:Die PO-Dateien koennen aber als Lazarus-Ressource eingebunden werden
Re: Multi-Language-Programme mit Lazarus - wie?
Es ist sinnvoll, die Checkboxen "Create/update .po file when saving .lfm" und "Force update po files on next build" zu markieren (letzteres erst ab Laz 2.0+). Damit wird die po-Datei automatisch aktuell gehalten. Die Vorlagen-Datei <project>.po heißt im Trunk jetzt übrigens "<projcct>.pot" ("t" für "template" = "Vorlage", siehe http://lists.lazarus.freepascal.org/pip ... 35850.html).Timm Thaler hat geschrieben:Tja, nun hab ich erst die Gui gebaut und dann i18n aktiviert, das po-Verzeichnis ist noch leer. Muss mal schauen wie ich das nachträglich hingebogen bekomme. Beim nächsten Mal mach ich es andersrum.
Würde ich nicht machen. Ohne die po-Dateien nimmst du deinen Kunden die Möglichkeit, die Übersetzung zu überarbeiten oder selbst eine für ihre eigene Sprache zu erzeugen. Wenn du sichergehen willst, dass alle benötigten Dateien ausgeliefert werden, schreibe ein Setup-Script für InnoSetup oder packe alles in ein einfaches zip.Timm Thaler hat geschrieben:Klingt gut.kupferstecher hat geschrieben:Die PO-Dateien koennen aber als Lazarus-Ressource eingebunden werden
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Multi-Language-Programme mit Lazarus - wie?
Ohh, meine Kunden sind froh, wenn sie den Startknopf finden...wp_xyz hat geschrieben:Ohne die po-Dateien nimmst du deinen Kunden die Möglichkeit, die Übersetzung zu überarbeiten oder selbst eine für ihre eigene Sprache zu erzeugen.
Aber ja, ist ein Argument. Kann man nicht die de-po und en-po als Ressource einbinden und weiter po zusätzlich als Datei ablegen?
Was zeigt denn das Programm, wenn es die po-Datei nicht findet?
Und wenn ich ein Programmpaket habe, welches aus mehreren kleinen Programmen im selben Verzeichnis besteht: Können alle diese Programme die gleichen po-Dateien verwenden?
Re: Multi-Language-Programme mit Lazarus - wie?
Die Standard-Sprache, also die Sprache, in der die ursprünglichen Resource-Strings erstellt wurden.Timm Thaler hat geschrieben:Was zeigt denn das Programm, wenn es die po-Datei nicht findet?
Ja. Du musst nur sicherstellen, dass sie den richtigen po-Dateinamen verwenden; der leitet sich normalerweise aus dem Projektnamen ab. Das müsste ich mir Detail ansehen. Im Laz trunk gibt es dagegen die Möglichkeit, den Namen der Sprachdatei unabhängig vom Projektnamen einzustellen (wenn ich mich recht erinnere).Timm Thaler hat geschrieben:Und wenn ich ein Programmpaket habe, welches aus mehreren kleinen Programmen im selben Verzeichnis besteht: Können alle diese Programme die gleichen po-Dateien verwenden?
- kupferstecher
- Beiträge: 431
- Registriert: Do 17. Nov 2016, 11:52
Re: Multi-Language-Programme mit Lazarus - wie?
Verschieben der Komponenten auf der Form hilft. Weiß aber nicht mehr, ob man das mit allen Komponenten machen muss.Timm Thaler hat geschrieben:Tja, nun hab ich erst die Gui gebaut und dann i18n aktiviert, das po-Verzeichnis ist noch leer.
Ich mag in sich geschlossene Programme ohne Beiwerk, also als naktes Binary. Kommt aber natürlich aufs Programm an.wp_xyz hat geschrieben:Würde ich nicht machen. Ohne die po-Dateien nimmst du deinen Kunden die Möglichkeit, die Übersetzung zu überarbeiten oder selbst eine für ihre eigene Sprache zu erzeugen.
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
Re: Multi-Language-Programme mit Lazarus - wie?
https://www.corpsman.de/index.php?doc=k ... tilanguage
Mit Multilanguage ist es möglich eine Anwendung
so zu modifizieren, dass sie mehrere Sprachen
unterstützt.
Alles was hierzu notwendig ist.
Einbinden der Datei "ulanguage.pas"
und Language.CurrentLanguage auf den gewünschten
Wert setzen. Das Demo Programm ist gleichzeitig
der Editor zum Editieren der Sprach Dateien.
Einzige Besonderheit sind fest im Programm
verwendete Strings, diese müssen als Ressourcen
Strings in der Datei "ressourcestrings.include"
hinterlegt sein.
Mit Multilanguage ist es möglich eine Anwendung
so zu modifizieren, dass sie mehrere Sprachen
unterstützt.
Alles was hierzu notwendig ist.
Einbinden der Datei "ulanguage.pas"
und Language.CurrentLanguage auf den gewünschten
Wert setzen. Das Demo Programm ist gleichzeitig
der Editor zum Editieren der Sprach Dateien.
Einzige Besonderheit sind fest im Programm
verwendete Strings, diese müssen als Ressourcen
Strings in der Datei "ressourcestrings.include"
hinterlegt sein.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.