Multi-Language-Programme mit Lazarus - wie?

Rund um die LCL und andere Komponenten
Antworten
Timm Thaler
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?

Beitrag von Timm Thaler »

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.


Timm Thaler
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?

Beitrag von Timm Thaler »

Das habe ich durchaus auch schon alles gefunden.

compmgmt
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?

Beitrag von compmgmt »

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").

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

Benutzeravatar
kupferstecher
Beiträge: 418
Registriert: Do 17. Nov 2016, 11:52

Re: Multi-Language-Programme mit Lazarus - wie?

Beitrag von kupferstecher »

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.

Timm Thaler
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?

Beitrag von Timm Thaler »

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.


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:Die PO-Dateien koennen aber als Lazarus-Ressource eingebunden werden


Klingt gut.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Multi-Language-Programme mit Lazarus - wie?

Beitrag von wp_xyz »

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.

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:
kupferstecher hat geschrieben:Die PO-Dateien koennen aber als Lazarus-Ressource eingebunden werden

Klingt gut.

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
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?

Beitrag von Timm Thaler »

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.


Ohh, meine Kunden sind froh, wenn sie den Startknopf finden...

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?

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Multi-Language-Programme mit Lazarus - wie?

Beitrag von wp_xyz »

Timm Thaler hat geschrieben:Was zeigt denn das Programm, wenn es die po-Datei nicht findet?

Die Standard-Sprache, also die Sprache, in der die ursprünglichen Resource-Strings erstellt wurden.

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?

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).

Benutzeravatar
kupferstecher
Beiträge: 418
Registriert: Do 17. Nov 2016, 11:52

Re: Multi-Language-Programme mit Lazarus - wie?

Beitrag von kupferstecher »

Timm Thaler hat geschrieben:Tja, nun hab ich erst die Gui gebaut und dann i18n aktiviert, das po-Verzeichnis ist noch leer.

Verschieben der Komponenten auf der Form hilft. Weiß aber nicht mehr, ob man das mit allen Komponenten machen muss.

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.
Ich mag in sich geschlossene Programme ohne Beiwerk, also als naktes Binary. Kommt aber natürlich aufs Programm an.

MacWomble
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?

Beitrag von MacWomble »

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.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Antworten