Fehlermeldungen lokalisieren

Objective

After completing this lesson, you will be able to lokalisierte Fehlermeldungen bereitstellen

Textbündeldateien

Wir verwenden die Methode req.error() aus dem Nachrichten-API sowohl in der Implementierungsklasse für den AdminService aus unserem Szenario als auch in der Implementierungsklasse für unseren CatalogService. Mit dieser Methode geben wir Fehlermeldungen aus, wenn Validierungen fehlschlagen. Bisher haben wir die gemeldeten Nachrichten fest als Textliterale programmiert.

In dieser Lektion erfahren Sie, wie Sie Botschaften internationalisieren. Anstatt sie fest programmiert einzubetten, werden sie in separaten Dateien - sogenannten Textbündeln - als Schlüssel-Wert-Paare gepflegt. Die Schlüssel werden dann vom Anwendungscode verwendet, um auf die entsprechenden Texte zuzugreifen. Das bedeutet, dass die Werte für die Schlüssel die eigentlichen sprachabhängigen Texte sind. Um verschiedene Sprachen zu unterstützen, werden verschiedene Dateien gepflegt, die übersetzte Texte für dieselben Schlüssel bereitstellen (siehe folgende Abbildung). 

Erstellen von Bundle-Dateien für die Internationalisierung von Fehlermeldungen

Legen Sie eine Datei mit dem Namen messages.properties in einem Ordner namens _i18n, i18n oder assets/i18n an. Der Ordner für die Datei messages.properties muss sich entweder direkt unter dem Projektverzeichnis oder in einem Verzeichnis befinden, das Dateien enthält, die zur Definition von Service-Modellen verwendet werden (z.B. das srv-Verzeichnis in unserem Projekt).

Notiz

Die Namen der Ordner, in denen CAP nach Textbündeln sucht, können in der Datei package.json des Projekts über die Eigenschaft cds.i18n.folders konfiguriert werden. Standardmäßig sind dies die Ordnernamen _18n, i18n und assets/i18n.

Die erforderlichen Texte werden als Schlüssel-Wert-Paare in der Datei messages.properties gepflegt. In der Regel werden die Texte dort in Englisch gepflegt. Es können Platzhalter verwendet werden, die in der Form "{n} " notiert sind. n durchläuft die natürlichen Zahlen beginnend mit 0.

Um zusätzliche Sprachen zu unterstützen, werden zusätzliche Dateien im selben Ordner wie die Datei messages.properties gemäß der folgenden Namenskonvention angelegt: messages<_languageCode><_countryCode>.properties. Der Ländercode ist optional. Beispiele für solche Dateinamen sind messages_de.properties, messages_fr_CA.properties oder messages_es_MX.properties.

Die zusätzlichen Dateien verwenden dieselben Schlüssel wie die Datei messages.properties. Die Werte für die Schlüssel werden jedoch gemäß dem Sprachcode und ggf. dem Ländercode aus dem Dateinamen übersetzt.

Im gezeigten Beispiel wurden zwei .properties -Dateien angelegt: messages.properties mit englischen Texten und messages_de.properties mit den entsprechenden deutschen Übersetzungen.

Fallback-Kette

Angenommen, bei der Bearbeitung einer Anfrage wird ein Text über einen Schlüssel abgefragt, wobei für die Sprache Deutsch ermittelt wurde. Wenn in der Datei messages_de.properties ein Text für den Schlüssel gepflegt ist, wird dieser Text von der Anwendung verwendet. Wenn jedoch keine Datei messages_de.properties vorhanden ist oder der verwendete Schlüssel nicht in der vorhandenen Datei messages_de.properties gepflegt ist, greift CAP auf die Datei messages.properties zurück und versucht, über diese Datei einen Wert für den Schlüssel zu ermitteln. Wenn dies möglich ist, wird der entsprechende Text von der Anwendung verwendet. Wenn messages.properties auch keinen passenden Eintrag enthält, verwendet die Anwendung den Schlüsselnamen als Text.

Notiz

Die Meldungen des Basisnamens für die Textbündel sind obligatorisch. Das bedeutet, dass die erstellten Dateien wie folgt benannt werden müssen: messages<_languageCode><_countryCode>.properties. Technisch gesehen ist es jedoch nicht erforderlich, eine Rohdatei ohne Suffixe mit dem Namen messages.properties anzulegen. Englische Texte können auch in einer Datei namens messages_en.properties gepflegt werden. In diesem Fall profitieren Sie jedoch nicht von dem oben beschriebenen Fallback-Mechanismus. Dieser Mechanismus stellt sicher, dass die Texte aus der Datei messages.properties verwendet werden, wenn keine .properties-Datei für eine bestimmte Sprache angelegt wurde oder ein bestimmter Schlüssel für eine bestimmte Sprache in der zugehörigen .properties-Datei nicht gepflegt wurde.

Zugriff auf lokalisierte Nachrichten

Auf die in den Textbündeln gepflegten Texte kann über das Nachrichten-API zugegriffen werden, z.B. über die Methoden req.error() oder req.warn(). Dazu wird diesen Methoden statt der eigentlichen Meldung einfach der entsprechende Schlüssel übergeben (siehe folgende Abbildung).

Optional kann ein Array mit Platzhalterwerten als letzter Parameter an die Methoden aus dem Nachrichten-API übergeben werden. Der erste Wert aus dem Array wird dann für den Platzhalter {0}verwendet, der zweite Wert aus dem Array für den Platzhalter {1} usw.

Testen

Mit dem URL-Parameter sap-locale können Sie verschiedene Sprachen testen. Im folgenden Beispiel werden deutsche Texte angefordert:

Code Snippet
1234567
POST <service_url>/submitOrder?sap-locale=de Content-Type: application/json { "book": "0ec991dc-95c5-4d8f-91e6-f81a92744781", "quantity": 0 }

Alternativ können Sie auch Requests mit entsprechendem Accept-Language Header verwenden:

Code Snippet
12345678
POST <service_url>/submitOrder Accept-Language: de Content-Type: application/json { "book": "0ec991dc-95c5-4d8f-91e6-f81a92744781", "quantity": 0 }

Der URL-Parameter sap-locale hat die höchste Präferenz. Er übersteuert den Accept-Language Header, wenn dieser ebenfalls gesetzt werden soll.

Demonstration & Übung: Lokalisierte Fehlermeldungen verwenden

Notiz

Führen Sie als Übung die Schritt-für-Schritt-Anleitung in der folgenden Demonstration selbst im SAP Business Application Studio durch.

Verwenden Sie als Ausgangspunkt für die Übung das Ergebnis der vorherigen Übung Abfragen in der Implementierung von CAP-Services verwenden, wenn Sie sie erfolgreich abgeschlossen haben. Alternativ können Sie auch den Branch 14_queries aus dem folgenden GitHub-Repository als Ausgangspunkt verwenden:

https://github.com/SAP-samples/cap-development-learning-journey

Die vollständige Implementierung der Simulation finden Sie im Zweig 15_error_messages des GitHub-Repositorys.

Detaillierte Informationen zum Inhalt des Repositorys und dessen Verwendung finden Sie hier.

Sehen Sie sich das Video an, um zu erfahren, wie Sie lokalisierte Fehlermeldungen verwenden.