LanguageManager technische Hinweise zur Verwaltung der Sprachdateien

Aus GEVITAS
Version vom 19. August 2020, 09:30 Uhr von Gevitas (Diskussion | Beiträge) (LNG-Dateien auf Entwickler-Maschine holen, Dateien/Strings refreshen)
Wechseln zu: Navigation, Suche

1 Allgemeines

Hier wird beschrieben, wie man Sprachdateien für den LanguageManager (eigentlich "Localizer") verwalten und Updates handeln kann.

Dieser Beitrag richtet sich ausschließlich an den Entwickler!


2 Sprachdateien

Für jede Sprache gibt es zwei Dateien:


{Appname}.{Sprache} Dies ist eine DLL, in der die Ressource-Strings mit den übersetzten Texten in der jeweiligen Sprache enthalten sind. Diese DLL wird zur Laufzeit geladen.
{Appname}.{Sprache}.LNG Diese Datei ist für die Übersetzer in einem bestimmten Format.

Beispiel:

REFLEX.EN
REFLEX.EN.LNG

Die Ausgangssprache (Deutsch) wird als "Native Language" bezeichnet. Diese wird in den Dateien {Appname}.NTV (DLL) und {Appname}.NTV.LNG gespeichert. Diese Dateien müssen im Programmverzeichnis liegen und bei einem Update mitgeliefert werden!

Zusätzlich gibt es Dateien mit der Endung ".LEO". Dies sind Dateien, in der der LanguageManager seine Einstellungen speichert. Diese Datei darf nicht im Update enthalten sein, weil sonst die Einstellungen des Entwicklers ausgeliefert werden würden.

3 Server-Struktur, Server-Parks

In einer einfachen Umgebung kann man die Übersetzungen mit dem LanguageManager direkt mit den Dateien im Programmverzeichnis machen.

In einer komplexen Umgebung mit mehreren Remote-Servern oder gar einem Server-Park geht das nicht, weil die User auf irgendeinem Server arbeiten und so mal diese Datei übersetzen mal eine andere auf einem anderen Server. Deshalb muss man die Sprachdateien auf einem zentralen Server (-Laufwerk) ablegen.

Damit das ganze kontrolliert abläuft, gibt es das Programm "RxLangManTool". Wenn man aus REFLEX heraus im Menü "Extras" den LanguageManager startet, öffnet sich zuerst das Tool und bietet den Usern ein Menü, mit dem sie auswählen können, welches Modul und welche Sprache übersetzt werden soll. RxLangManTool überwacht auch, dass nur ein User pro Modul und Srach gleichzeitig übersetzen kann.

Dabei setzt das Programm folgendes voraus:

  • Die Sprachdateien liegen auf einem Server in einem beliebigen Verzeichnis.
  • Darin befinden sich Unterverzeichnisse mit dem Namen der jeweiligen Sprache

Beispiel:

Stamm-Verzeichnis:

R:\International\LanguageManager\FilesForTranslators

Unterverzeichnisse:

R:\International\LanguageManager\FilesForTranslators\EN
R:\International\LanguageManager\FilesForTranslators\FRA
R:\International\LanguageManager\FilesForTranslators\IT
R:\International\LanguageManager\FilesForTranslators\NLD
R:\International\LanguageManager\FilesForTranslators\PLK

Die Sprachdateien der Module liegen in den Unterverzeichnissen, z.B.

REFLEX.NTV.lng
REFLEX.EN.lng
GevitasFormPrint.NTV.lng
GevitasFormPrint.EN.lng
RxDispo.NTV.lng
RxDispo.EN.lng

usw.

Wichtig!
Die .NTV-Dateien der Programme/Module müssen in jedem Unterverzeichnis liegen!!!
Die .DLL- und .LNG-Dateien der Programme/Module müssen bei einem Update auch in das Programmverzeichnis kopiert werden!
Wenn nicht alle aktuellen Dateien im Programmverzeichnis liegen, erzeugt der eingebaute Localizer beim Start des Programm die DLL-Datei neu! Das dauert!
Für die User sieht es so aus, als ob sich das Programm "aufgehängt" hat!

Beispiel:

Datei Update-Ordner LNG-Ordner
..\exe\Reflex.exe Ja Nein
..\exe\Reflex.ntv Ja Nein
..\exe\Reflex.ntv.lng Ja Ja
..\exe\Reflex.en Ja Nein
..\exe\Reflex.en.lng Ja Ja

Das Das LanguageManager-Tool für den Entwickler "weiß" das und hat eine Update-Funktion, die die Benötigten Dateien in die entsprechenden Verzeichnisse kopiert. Das Tool Server-Update Tool (ServerUp.exe) kann dabei helfen, die Dateien aus einem Update-Ordner in das Programmverzeichnis des jeweiligen Servers zu kopieren.

  • REFLEX Menü Datei⇒Admin-Optionen⇒Update auf Server kopieren


4 Typischer Ablauf einer Update-Prozedur

4.1 LNG-Dateien auf Entwickler-Maschine holen, Dateien/Strings refreshen

Auf der Entwickler-Maschine das RxLangManTool mit der Online-INI starten.

Die Seite Update öffnen.

  • Diese Seite ist nur sichtbar, wenn das Programm einen REFLEX-Entwickler erkannt hat!
1. Schritt ausführen
Von den Übersetzern bearbeitete .LNG-Dateien in das Exe-Verzeichnis kopieren.
Neue Strings im Code scannen und als Ressource-Strings speichern.
Dazu alle Programm-Fenster (Forms und Units) schließen! Ganz wichtig!!! Diese Units werden vom Localizer u.U. auf Datei-Ebene geändert und müssen neu geladen werden. Delphi merkt das zwar am Ende, doch manche Forms/Units haben Nachfahren und können nicht neu geladen werden!
Dann ausführen:
LangMan ExtractHardcodedString 01.png
  • Zuerst alle Forms abwählen mit dem Button X
  • Dann die Form anwählen, die gescannt werden sollen
  • Auf Scan klicken
  • Im folgenden Dialog sicherheitshalber alles abwäheln mit dem Button X!
  • Nur die Programm-Meldungen auswählen, die übersetzt werden dürfen.
Beispiel:
LangMan ExtractHardcodedString 02.png
Auf Next klicken, bis alle Forms gescannt wurden!
  • Achtung!
  • Nicht ausgewählt/übersetzt werden dürfen:
  • SQL-Befehle
  • Parameter-Namen
  • Feld-Namen
  • Tabellen-Namen
  • usw.


2. Schritt ausführen
Sprachdateien einbinden/aktualisieren:
Delphi --> Localizer --> Refresh Language Files
Damit werden die neuen/geänderten Strings im Programm in die Ressourcen eingebunden.
Wenn man das nicht macht und ein Update ausliefert, kommen die Texte im Programm total falsch raus!
Delphi --> Localizer --> LanguageManager --> Snych DLLs
Obwohl "Refresh Language Files" eigentlich alles machen soll, tut es das nicht immer. Deshalb am Ende der Programmierung (vor dem Ausrollen des Updates) dieses hier nochmal ausführen.

Wenn im Programm Strings geändert werden müssen die o.a. Schritte wiederholt werden, mindestens bevor man das Update ausrollt!

Wenn man das Refresh nicht ausführt kann es zu unsinnigen Meldungen und Fehlern kommen. Beispiel:

LangMan OhneRefresh UnsinngeMeldung.png


Diese Meldung befolgen:

LangMan ExtractHardcodedString 03.png

LanguageManager starten und die neuen Strings kontrollieren bzw. gleich übersetzen.
Wenn man einen Google-Developer-Account hat und in den Optionen eingibt, kann man die Übersetzungen auch mit Hilfe von Google vornehmen lassen (Popup oder Strg+G)
Speichern klicken
Menü File ⇒ DLLs synchronize ausführen
Testen!
Das Programm mit einer Fremdsprache starten und die neuen Strings kontrollieren.
  • Unbedingt einige Fenster öffnen und auf "unsinnige" Beschriftungen kontrollieren!

4.2 LNG-Dateien veröffentlichen

Auf der Entwickler-Maschine das RxLangManTool mit der Online-INI starten.

Die Seite Update öffnen.

3. Schritt ausführen
Refreshte .LNG-Dateien vom Exe-Verzeichnis in die jeweiligen LNG-Unterordner kopieren.
Dazu auch xxx.ntv.lng mit kopieren!


4.3 Update-Dateien veröffentlichen

Auf der Entwickler-Maschine das RxLangManTool mit der Online-INI starten.

Die Seite Update öffnen.

4. Schritt ausführen
Refreshte .LNG-Dateien (.XX und .XX.lng!) vom Exe-Verzeichnis in das Update-Verzeichnis kopieren.
Dazu auch xxx.exe mit kopieren!
Je nach Option auf Seite "Developer" wird Unterzeichnis mit dem aktuellen Datum angelegt (empfohlen!) und die EXE selbst auch kopiert.
Wenn es neuere Modul-Exen gibt als im Update-Ordner, werden diese mit LNG-Dateien auch kopiert!

Die Update-Dateien stehen nun auf dem Server in einem Unterverzeichnis.


4.4 Update-Dateien auf jeweiligen Server kopieren

5. Schritt ausführen
Nacheinander Remote auf jedem Remote-Server anmelden.
Alle Dateien vom Update-Unterordner in das Programmverzeichnis kopieren.
Dazu aus REFLEX heraus Datei ⇒ Admin-Optionen ⇒ Update auf Server kopieren (startet das Server-Update Tool (ServerUp.exe).

5 Links

Das LanguageManager-Tool für den Admin

Das LanguageManager-Tool für den Entwickler