Multi-Language-Programme mit Lazarus - wie?

Rund um die LCL und andere Komponenten

Multi-Language-Programme mit Lazarus - wie?

Beitragvon Timm Thaler » 3. Mär 2019, 01:08 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.
Timm Thaler
 
Beiträge: 897
Registriert: 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
Nach oben

Beitragvon creed steiger » 3. Mär 2019, 02:48 Re: Multi-Language-Programme mit Lazarus - wie?

creed steiger
 
Beiträge: 953
Registriert: 11. Sep 2006, 21:56

Beitragvon Timm Thaler » 3. Mär 2019, 03:53 Re: Multi-Language-Programme mit Lazarus - wie?

Das habe ich durchaus auch schon alles gefunden.
Timm Thaler
 
Beiträge: 897
Registriert: 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
Nach oben

Beitragvon compmgmt » 3. Mär 2019, 06:29 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").
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)
compmgmt
 
Beiträge: 351
Registriert: 25. Nov 2015, 17:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4 | 
CPU-Target: i386 + x86_64
Nach oben

Beitragvon kupferstecher » 3. Mär 2019, 10:24 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.
kupferstecher
 
Beiträge: 206
Registriert: 17. Nov 2016, 11:52

Beitragvon Timm Thaler » 3. Mär 2019, 11:39 Re: Multi-Language-Programme mit Lazarus - wie?

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.
Timm Thaler
 
Beiträge: 897
Registriert: 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
Nach oben

Beitragvon wp_xyz » 3. Mär 2019, 12:03 Re: Multi-Language-Programme mit Lazarus - wie?

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.
wp_xyz
 
Beiträge: 2894
Registriert: 8. Apr 2011, 08:01

Beitragvon Timm Thaler » 3. Mär 2019, 12:12 Re: Multi-Language-Programme mit Lazarus - wie?

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?
Timm Thaler
 
Beiträge: 897
Registriert: 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
Nach oben

Beitragvon wp_xyz » 3. Mär 2019, 12:26 Re: Multi-Language-Programme mit Lazarus - wie?

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).
wp_xyz
 
Beiträge: 2894
Registriert: 8. Apr 2011, 08:01

Beitragvon kupferstecher » 3. Mär 2019, 15:51 Re: Multi-Language-Programme mit Lazarus - wie?

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.
kupferstecher
 
Beiträge: 206
Registriert: 17. Nov 2016, 11:52

Beitragvon MacWomble » 3. Mär 2019, 17:29 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.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
Lazarusforum e. V.
 
Beiträge: 787
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.1 Cinnamon / CodeTyphon LAB Version 6.80 / FP 3.3.1 SVN Rev 41791 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste

porpoises-institution
accuracy-worried