Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.
Info

ab Nuclos v4.2025.15 erste Beta Version dieses Features

Inhalt
maxLevel2

Wie ein Nuclet auf die Lokalisierung optimal vorbereitet wird finden Sie hier.


Lokalisierung / Localization

Über diese Administrationsmaske können weitere Lokalisierungen angelegt werden.

Systemsprachen sind Deutsch (de-DE) und Englisch (en-GB), welche nicht gelöscht werden können, aber deaktiviert. Im Hintergrund existieren sie bei einer Deaktivierung weiter und werden für Übersetzungen anderer Lokalisierungen verwendet, die auf einer von diesen aufbauen.

(auto)-Attribute werden bei Neuanlage auf Basis der internen Java Funktionen automatisch befüllt.

Übersetzungen erfolgen automatisch im Hintergrund, wenn ein Übersetzer ausgewählt und aktiviert wurde.

Treten bei der Übersetzung Fehler auf, können diese direkt an den Texten eingesehen werden. Eine Gesamtanzahl dieser Fehler wird auch an der Lokalisierung angezeigt, nebst einer Funktion einen weiteren Übersetzungsversuch für diese Texte zu starten.

Hinweis

Erfolgt eine einfache Übersetzung nicht schnell genug (Default 10 Sekunden) oder treten andere Fehler auf, wird der Ausgangstext (Übergeordneter) weiterverwendet.

Damit erreichen wir eine höhere Priorisierung der normalen Businesslogik gegenüber einer Übersetzung, und zusätzlich werden potenzielle Hohe Wartezeiten, bedingt durch einen externen Übersetzungsdienst, minimiert. Die API bietet jedoch auch Möglichkeiten von diesem Standard abzuweichen.

Eine Übersetzung kann, je nach Aufruf und Implementierung des Übersetzers, aber auch noch im Hintergrund weiter laufen und dauerhaft gespeichert werden, so dass eine später Anforderung über den gleichen Schlüssel eine Übersetzung liefert.

Systemparameter

LOCALIZATION_NOTIFY_DELAY_IN_SECONDS

LOCALIZATION_TRANSLATION_THREAD_POOL_SIZE

LOCALIZATION_TRANSLATION_API_IN_MEMORY_CACHE_SIZE

Beta Version (nur versteckt über den Webclient zu erreichen http://.../webclient/#/view/org_nuclos_system_Localization)

Auswahl für die Benutzer

Webclient

Im Webclient kann jederzeit über das Menü zwischen den unterschiedlichen Lokalisierungen gewechselt werden.

Rich-Client

Der Rich-Client initialisiert sich über die Login Maske mit der ausgewählten Lokalisierung. Zum wechseln in einem geöffneten Client beenden Sie diesen mittels "Abmelden und Beenden", und wählen Sie beim neuen Login eine andere.

Lokalisierungstext / Localization text

Nuclos übersetzt standardmäßig:

  • Die System Texte wie zum Beispiel Titel, Beschriftungen, Tooltips und Meldungen von Nuclos selbst. (Text Schlüssel beginnen mit "sys#")
  • Alle festen Texte eines Nuclets die heute schon in den beiden Systemsprachen DE/EN hinterlegt werden können. (Text Schlüssel beginnen mit "#")
  • Meldungen die über die Regel API generiert werden. (Text Schlüssel beginnen mit "api#")

Für System- und Nuclet-Texte werden immer eindeutige Textschlüssel generiert und eine Übersetzung erfolgt direkt mit dem ersten Start des Servers bzw. mit Konfigurationsänderung oder einem Nuclet Import. Für die API gilt dies nicht!

Beta Version (nur versteckt über den Webclient zu erreichen http://.../webclient/#/view/org_nuclos_system_LocalizationText)

Im gezeigten Screenshot wird beispielhaft nur nach Texten gesucht, deren übergeordneter Text / Parent text sich geändert hat. Siehe auch "Überschreibung" weiter unten.

Übersetzer / Translator

Die Ermittlung der zur Verfügung stehenden Übersetzer (Nuclos Extension) erfolgt nur einmalig beim Start des Servers.

Die Konfiguration eines Übersetzers erfolgt mittels eines JSON dessen Struktur ein Übersetzer vorgibt. Eine Lokalisierung kann die Standard Konfiguration am Übersetzer überschreiben, da hier ebenfalls ein JSON für den ausgewählten Übersetzer hinterlegt werden kann. 

Informationen zur Struktur und den unterschiedlichen Einstellmöglichkeiten müssen der Hilfeseite des Übersetzers entnommen werden (Attribut URL)

Es können mehrere Übersetzer zur gleichen Zeit aktiv sein, und auch mit jeweils unterschiedlichen Konfigurationen für die jeweiligen Lokalisierungen.

Weitere Informationen für Entwickler: Translator

Info
titleVorhandene Übersetzer


Beta Version (nur versteckt über den Webclient zu erreichen http://.../webclient/#/view/org_nuclos_system_LocalizationTranslator)

Nuclet
Anker
Nuclet
Nuclet

Verfügbare Sprachen: Neues Attribute am Nuclet. Nur Systemsprachen (aktuell de und/oder en). Default en,de

Die hier hinterlegten Sprachen geben Auskunft über die Vollständigkeit der in einem Nuclet hinterlegten Übersetzungen. Wurden bei der Entwicklung eines Nuclets vorrangig z.B. nur deutsche Texte erfasst, geben Sie hier nur "de" an. Damit geben Sie Nuclos den nötigen Hinweis, bei Anforderung eines englischen Textes, den im Nuclet hinterlegten Wert für "en" zu ignorieren und eine Übersetzung von de → en in den Lokalisierungstexten nachzuschlagen. 

Hinweis

Allgemein haben nun die Lokalisierungstexte vorrang gegenüber den Texten eines Nuclets selbst.

Überschreibung

Mit den Lokalisierungstexten können also alle Texte im System überschrieben werden, ohne das Nuclet anfassen zu müssen. Was in gewisser Weise auch für Nuclos selbst gilt. Kommt eine neue Version zum Einsatz (Nuclos oder Nuclet) wird geprüft ob vom vorherigen Wert abgewichen wurde. Dies erfolgt im Hintergrund über generierte Check-Summen (sha256). Stimmen die Check-Summen überein, wird eine Änderung von der neuen Version übernommen, stimmt sie nicht überein, bleibt die Überschreibung erhalten. Letztere Fälle werden mit einem Flag versehen, um diese schneller finden und kontrollieren zu können, da hier eine potentielle Neu-Übersetzung notwendig sein kann.

Besonderheit bezüglich API

Für Regeln gab es bis heute keine Möglichkeit die Meldungen an einen Benutzer in unterschiedlichen Sprachen zu hinterlegen. Zumindest nicht über die Standard API, und nicht ohne einen Nuclet internen Übersetzungsmechanismus mittels eigener BOs oder Übersetzungsressourcen. Womit viele Regeln (zumindest vor v4.2024.15) entweder fest deutsche oder englische Meldungen für die Benutzer generieren, die restlichen Konfigurationsbestandteile aber ordentliche Übersetzungen für beide Systemsprachen aufweisen können.

Info

Sollte Ihr Nuclet schon so einen hohen Grad gepfelgter Texte bereithalten, aber innerhalb aller Regeln nur mit deutschen Texten arbeiten, geben Sie "en,de!" an. Im Falle von nur englischen API Meldungen: "en!,de".


Was bedeutet der Default en,de?

Nuclos geht davon aus, dass für beide Systemsprachen Texte vorliegen, die so wie sie sind eingesetzt werden sollen, und keine Übersetzung norwendig ist. In Regeln sind Meldungen an den Benutzer, über die unten genannten API Methoden, immer fest englische Texte. Fehlende/vergessene Übersetzungen, für z.B. einen Tabreiter in einem Layout, werden ebenfalls als statische englische Texte behandelt. Die erst genannte Systemsprache wird also nur bei einer fehlenden Übersetzung eines Textes von einem Übersetzer (wenn eingerichtet und aktiviert) als Quelle verwendet.

Datenschutz

Die Übertragung von Inhalten an einen externen Übersetzungsdienst kann den Datenschutz betreffen. Nuclos und feste Nuclet Bestandteile dürften hier keine Probleme bereiten, anders sieht es bei automatisch generierten Meldungen über die API aus.

Hinweis

Prüfen Sie daher bitte Ihren Regelcode auf etwaige Meldungen an die Benutzer bevor sie einen Übersetzer aktivieren!

Der DeepL Translator kann gezielt nur solche, noch ungeprüften automatischen Meldungen der API, blockieren. Siehe allowInMemoryTranslation

Beispiel Anpassung einer BusinessException damit keine Daten an einen Übersetzungsdienst übermittelt werden:

Codeblock
languagejava
titleDatenschutz kritisch!
throw new BusinessException("Das Budget für das Vorhaben " + projekt.getName() + " ist erschöpft.");
Codeblock
languagejava
titleSichere Verwendung von Daten
throw new BusinessException("org.nuclet.handel.project-budget-exhausted", "Das Budget für das Vorhaben {} ist erschöpft.").withArgs(projekt.getName());

So wird nur ein Template an einen Dienst übermittelt, und in der zurückgelieferten Übersetzung wird "{}" durch den Text der Daten ersetzt. Weiterer Vorteil: Die Übersetzung steht als Lokalisierungstext fest zur Verfügung und ist dauerhaft gecacht.

Regel API
Anker
RegelAPI
RegelAPI

Übersetzungen aus der API erfolgen erst mit durchlaufen der Businesslogik (On-The-Fly) und nicht vorab. Folgende Klassen bieten Unterstützung für Übersetzungen:

Standardmäßig werden Übersetzungen nur "In-Memory" gehalten, also nicht dauerhaft im neuen System Businessobjekt der Lokalisierungstexte abgelegt. Hintergrund: Da Nuclos nicht ausschließen kann, dass es Texte mit dynamischen Inhalten sind (Daten, Zeitstempel etc.) besteht die Gefahr diese Liste und das entsprechende Caching zu überlasten.

Erfolgt eine Prüfung des Quellcodes kann auf neue Methoden / Konstruktoren umgestellt werden, die eine Persistierung unterstützen, grobt unterteilt in:

  • generiere einen Text Schlüssel (sha256)
  • fest vorgegebenen Text Schlüssel

Wird der Ausgangstext bei einem zu generierenden Text Schlüssel geändert, wird auch ein neuer Schlüssel generiert. Verwenden Sie daher möglichst feste Schlüssel mit einem Bezug zum Nuclet, um Kollisionen zu vermeiden und um eine größt mögliche Abwärtskompatibilität zu gewährleisten. Dies ist besonders für Utility-Nuclets zu empfehlen die in vielen Systemen verwendet werden und damit auch vermutlich in anderen Sprachen arbeiten sollen, wie z.B. das Email-Nuclet.

Noch mehr übersetzen (Daten?)

Wenn eine Übersetzung für Daten gefordert wird (Achtung bitte Datenschutz abklären!) sollten die "Checked" Methoden der Translation und des LocalizationProviders verwendet werden. Diese Methoden liefern einen Text (java.lang.String) nur wenn es bei der Übersetzung keinen Fehler gab, ansonsten wird eine Exception geworfen. Auch sollte von der Angabe eines Schlüssels und insbesondere von Verwendungen der "InMemory"-Methode Abstand genommen werden, da diese einen Lokalisierungstext erzeugen bzw. den Speicher des Servers mit Übersetzungen füllen die in dieser Form gar nicht weiter benötigt werden.

Beispiel Anpassung einer BusinessException damit die Übersetzung dauerhaft gespeichert wird, und zur Lokalisierung zur Verfügung steht:

Codeblock
languagejava
titleOhne Persistierung (In-Memory-Only)
throw new BusinessException("Bitte geben Sie ein Lieferdatum an");
Codeblock
languagejava
titlePersistierung mit generiertem Text Schlüssel
 throw new BusinessException(true, "Bitte geben Sie ein Lieferdatum an");
Codeblock
languagejava
titlePersistierung mit fest vorgegebenen Schlüssel
throw new BusinessException("org.nuclet.handel.enter-delivery-date", "Bitte geben Sie ein Lieferdatum an");


Zukünftige Ausbaustufen

  • Ex- und Import von Lokalisierungsdateien
  • Ablage von Lokalisierungsdateien an einem Nuclet
  • Übersetzungen von alternativen Tooltips im Layout ermöglichen → Lokalisierung für diesen Typ ebenfalls aktivieren
  • Übersetzungen von Einstellungen und Arbeitsumgebungen ermöglichen → Lokalisierung für diese Daten ebenfalls aktivieren