エラーメッセージのローカライズ

Objective

After completing this lesson, you will be able to ローカライズされたエラーメッセージの提供

テキストバンドルファイル

メッセージ API のメソッド req.error() は、シナリオからの AdminService の実装クラスと CatalogService の実装クラスの両方で使用します。このメソッドを使用して、検証が失敗した場合にエラーメッセージを出力します。これまで、レポートされるメッセージはテキストリテラルとしてハードコーディングされています。

このレッスンでは、メッセージの国際化対応方法について学習します。 ハードコーディングされたファイルを埋め込むのではなく、キーと値のペアとして個別のファイル (テキストバンドル) に保持されます。その後、キーはアプリケーションコードによって使用され、対応するテキストにアクセスします。つまり、キーの値は実際の言語依存テキストです。異なる言語をサポートするために、同じキーに対して翻訳されたテキストを提供する異なるファイルが更新されます (以下の図を参照)。 

エラーメッセージを国際化するためのバンドルファイルの登録

詳細な手順は以下のとおりです。messages.properties という名前のファイルを _i18ni18n、または assets/i18n というフォルダに作成します。messages.properties ファイルのフォルダは、プロジェクトディレクトリのすぐ下か、サービスモデルの定義に使用されるファイル (プロジェクト内の srv ディレクトリなど) を含むディレクトリに配置する必要があります。

注記

CAP がテキストバンドルを検索するフォルダの名前は、cds.i18n.folders プロパティを使用してプロジェクトの package.json ファイルで設定できます。デフォルトでは、これらはフォルダ名 _18ni18n、およびアセット/i18n です。

必要なテキストは、messages.properties ファイルでキーと値のペアとして更新されます。通常、テキストは英語で更新されます。プレースホルダを使用することができます。プレースホルダは、"{n} " の形式で記述されます。n は、0 で始まる自然数を実行します。

追加言語をサポートするために、命名規則 messages<_languageCode><_countryCode>.properties に従って、messages.properties ファイルと同じフォルダに追加ファイルが作成されます。国コードはオプションです。このようなファイル名の例としては、messages_de.propertiesmessages_fr_CA.propertiesmessages_es_MX.properties などがあります。

追加ファイルでは、messages.properties ファイルと同じキーが使用されます。ただし、キーの値は、言語コード、および該当する場合はファイル名の国コードに従って翻訳されます。

この例では、英語のテキストを含む messages.properties、対応するドイツ語翻訳を含む messages_de.properties の 2 つの .properties ファイルが作成されています。

フォールバックチェーン

要求の処理時にキーを使用してテキストがクエリされ、言語に対してドイツ語が決定されたとします。messages_de.properties ファイルでキーのテキストが更新されている場合、このテキストはアプリケーションで使用されます。ただし、messages_de.properties ファイルがない場合、または使用されているキーが既存の messages_de.properties ファイルで更新されていない場合、CAP は messages.properties ファイルにフォールバックし、このファイルを使用してキーの値を決定しようとします。可能な場合、対応するテキストがアプリケーションで使用されます。messages.properties にも一致するエントリが含まれていない場合、アプリケーションではキー名がテキストとして使用されます。

注記

テキストバンドルの基本名メッセージは必須です。つまり、登録されるファイルの名称は messages<_languageCode><_countryCode>.properties にする必要があります。ただし、技術的には、名称 messages.properties の接尾辞なしでローファイルを登録する必要はありません。英語のテキストは、messages_en.properties というファイルで更新することもできます。ただし、この場合、上記のフォールバックメカニズムのメリットはありません。このメカニズムにより、特定の言語に対して .properties ファイルが作成されていない場合、または関連する .properties ファイルで特定の言語に対して特定のキーが更新されていない場合に、messages.properties ファイルのテキストが使用されるようになります。

ローカライズされたメッセージへのアクセス

テキストバンドルで更新されたテキストには、メッセージ API (メソッド req.error()req.warn() など) を使用してアクセスすることができます。これを行うために、対応するキーが実際のメッセージではなく単純にこれらのメソッドに渡されます (以下の図を参照)。

任意で、プレースホルダ値を含む配列を最後のパラメータとしてメッセージ API からメソッドに渡すことができます。配列の最初の値がプレースホルダ {0} に使用され、配列の 2 番目の値がプレースホルダ {1} などに使用されます。

テスト

URL パラメータ sap-locale を使用して、さまざまな言語をテストすることができます。以下の例では、ドイツ語のテキストが要求されています。

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

または、適切な Accept-Language ヘッダを含む要求を使用することもできます。

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

URL パラメータ sap-locale の優先度が最も高くなります。これを設定する必要がある場合は、Accept-Language ヘッダが上書きされます。

デモおよび演習:ローカライズされたエラーメッセージの使用

注記

演習問題として、SAP Business Application Studio で、以下のデモのステップバイステップの手順を実行します。

演習の開始点として、CAP サービスの実装におけるクエリの使用の前の演習問題の結果 (正常に完了した場合) を使用します。または、以下の GitHub リポジトリのブランチ 14_queries を開始点として使用することもできます。

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

シミュレーションの完全な実装は、GitHub リポジトリの 15_error_messages 分岐にあります。

リポジトリのコンテンツとその使用方法の詳細については、ここを参照してください。

ローカライズされたエラーメッセージの使用方法については、ビデオを視聴してください。