ヘッダーをスキップ

Oracle Database Application Expressユーザーズ・ガイド リリース 3.0 E05267-02 |
| 目次 | 索引

前へ | 次へ |

# 14 アプリケーションのグローバリゼーションの管理

このセクションでは、アプリケーション・ビルダーで構築したアプリケーションを翻訳する方法を説明します。

このセクションの内容は次のとおりです。

- アプリケーションの翻訳およびグローバリゼーション・サポートについて

- アプリケーションへのプライマリ言語の指定

- 翻訳プロセスの理解

- メッセージの翻訳

- LOVをサポートするデータの翻訳

- サポートされるグローバリゼーション・コードについて

参照: 「インストール済の翻訳の表示」

## アプリケーションの翻訳およびグローバリゼーション・サポートについて

アプリケーション・ビルダーで、同時に異なる言語で実行可能なアプリケーションを開発できます。1つのOracle DatabaseインスタンスとOracle Application Expressで、異なる言語をサポートするようにカスタマイズされた複数のデータベース・セッションをサポートできます。

一般的に、アプリケーション・ビルダーで構築したアプリケーションの翻訳は、次のようなステップになります。

- プライマリおよびターゲットのアプリケーションIDをマップします

- 翻訳用のファイルにテキストをシードおよびエクスポートします

- ファイルのテキストを翻訳します

- 翻訳済ファイルを適用します

- 翻訳済ファイルを公開します

参照: 「翻訳プロセスの理解」

このセクションの構成は次のとおりです。

- 言語の指定について

- アプリケーション・ビルダーで構築したアプリケーションの翻訳ルール

- 翻訳済アプリケーションのレンダリング方法

- 翻訳可能なコンポーネントについて

### 言語の指定について

アプリケーションの作成後、グローバリゼーション属性の編集ページで言語プリファレンスを指定します。次にグローバリゼーション属性の編集ページで、プライマリ・アプリケーションの言語を選択し、Application Expressエンジンによるアプリケーション言語の決定方法を決定します。ユーザーのブラウザの言語プリファレンス、アプリケーション・プリファレンスまたはアイテム・プリファレンスに基づいてアプリケーション言語を指定できます。

参照: 「アプリケーションへのプライマリ言語の指定」

### アプリケーション・ビルダーで構築したアプリケーションの翻訳ルール

次のルールを使用して、使用する翻訳のバージョンを決定します。

- ユーザーの言語設定に完全一致する言語コードの翻訳済アプリケーションを検索します。

- 部分一致を検索します。つまり、言語およびロケールが存在するかどうかを確認します。 たとえば、ユーザーの言語設定が`en-us`で、`en-us`の翻訳済バージョンが存在しない場合は、言語コードが`en`の翻訳済アプリケーションを検索します。

- プライマリのアプリケーションを使用します。

たとえば、プライマリ言語がドイツ語（`de`）のアプリケーションを作成し、言語コードが`en-us`の翻訳済バージョンを作成すると想定します。ユーザーがブラウザ言語`en-us`を使用してこのアプリケーションにアクセスすると、英語（`en-us`）バージョンのアプリケーションが実行されます。ユーザーがブラウザ言語`en-gb`を使用してこのアプリケーションにアクセスすると、アプリケーションがプライマリ言語（つまりドイツ語）で表示されます。この例では、`en`のすべてのバリエーションに対応するために、言語コード`en`を使用して英語に翻訳されたバージョンを作成する必要があります。

### 翻訳済アプリケーションのレンダリング方法

Oracle Application Expressがアプリケーションの言語を決定した後、Application Expressエンジンは、特定のページ・リクエストに対してデータベース言語を変更します。その後、適切な言語に翻訳されたアプリケーションを検索します。その言語を検出すると、その定義を使用してアプリケーションをレンダリングします。それ以外の場合は、ベース（プライマリ）のアプリケーション言語でアプリケーションをレンダリングします。

アプリケーション内に表示されるテキストは、すぐには翻訳されないことに注意してください。Oracle Application Expressは、ベース言語アプリケーション定義または代替アプリケーション定義のいずれかから動的にページ属性を収集します。

参照: 「テキスト文字列の動的翻訳について」および「LOVをサポートするデータの翻訳」

### 翻訳可能なコンポーネントについて

Application Builderでアプリケーションを作成する際、フィールド・ラベル、リージョン・ヘッダー、ページ・ヘッダー・テキストなど、多数の宣言的な属性を定義します。このセクションで説明するステップを使用して、アプリケーション内のすべてのアプリケーション定義属性を翻訳可能にできます。

#### メッセージの翻訳をサポートするショートカットについて

Application Builderには、翻訳可能なメッセージを参照できる2つのタイプのショートカットがあります。

- メッセージ: 翻訳可能なメッセージを実行時に参照するには、このショートカットを使用します。ショートカット名は、対応するメッセージ名と一致している必要があります。実行時、ショートカット名は、現在の言語に翻訳可能なメッセージのテキストに拡張されます。

- JavaScriptにより一重引用符がエスケープされたメッセージ: JavaScriptリテラル文字列内部のショートカットを参照し、実行時に翻訳可能なメッセージを参照するには、このショートカットを使用します。このショートカットは、テキスト文字列を定義します。ショートカットが参照されると、JavaScriptに必要な一重引用符がエスケープされます。

参照: 「ショートカットの使用」

#### メッセージについて

アプリケーションにPL/SQLリージョンまたはPL/SQLプロセスが含まれている場合には、生成されるHTMLまたはテキストを翻訳する必要がある場合があります。また、Oracle Application Expressが翻訳されている10の言語以外の言語をアプリケーションで使用する場合、レポートで使用されているメッセージの翻訳が必要な場合もあります。

参照: 「メッセージの翻訳」

#### テキスト文字列の動的翻訳について

動的翻訳は、実行時に翻訳する必要があるデータベース・データに使用されます。たとえば、動的翻訳を使用して、データベース問合せに基づくLOVを翻訳する場合があります。動的翻訳は、翻訳元の言語文字列、言語コードおよび翻訳先の文字列で構成されています。また、`APEX_LANG.LANG` APIを使用して、動的翻訳をプログラム的に取得できます。

参照: 「LOVをサポートするデータの翻訳」

#### リージョン・タイトルの翻訳について

デフォルトでは、ページ・リージョン・タイトルは、生成された翻訳ファイルに含まれます。ただし、リージョン・タイトルは、翻訳不可と指定できます。

リージョン・タイトルを翻訳不可と指定するには、次のステップを実行します。

1. 「ページ定義」にナビゲートします。「ページ定義へのアクセス」を参照してください。

2. ページ定義で、リージョン・タイトルをクリックします。

   「リージョンの編集」ページが表示されます。

3. 「タイトルを翻訳から除外」チェック・ボックスを選択します。

#### 翻訳テンプレートについて

デフォルトでは、テンプレートは翻訳可能ではないため、生成された翻訳ファイルには含まれません。通常、テンプレートには翻訳可能なテキストを含めません。ただし、テンプレートを翻訳可能として指定する必要がある場合は、ページ・テンプレートの編集ページで、「翻訳可能」チェック・ボックスを選択します。

テンプレートを翻訳可能として指定するには、次のステップを実行します。

1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

2. アプリケーションを選択します。

3. アプリケーションのホームページで、「共有コンポーネント」をクリックします。

4. 「ユーザー・インタフェース」で、「テンプレート」を選択します。

   「テンプレート」ページが表示されます。

5. 編集するテンプレートを検索して、テンプレート名を選択します。

6. 「名前」の下で「翻訳可能」を選択します。

静的置換文字列を使用して翻訳可能なテキストを定義することで、翻訳可能なテキストをアプリケーション・レベルで含めることができます。アプリケーション・レベル属性は翻訳されるため、静的置換文字列として定義された任意のテキストは、生成された翻訳ファイルに含まれます。

参照: 「テンプレートの編集」 「置換」

## アプリケーションへのプライマリ言語の指定

グローバリゼーション属性は、Application Expressエンジンによるアプリケーションのプライマリ言語の決定方法を指定します。

グローバリゼーション属性を編集するには、次のステップを実行します。

1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

2. アプリケーションを選択します。

3. 「共有コンポーネント」をクリックします。

4. 「グローバリゼーション」で、「属性の編集」をクリックします。

5. 「アプリケーションのプライマリ言語」から、アプリケーションが開発されている言語を選択します。

6. 「アプリケーション言語の派生元」から、Application Expressエンジンによるアプリケーション言語の決定（派生）方法を指定します。表14-1に、使用可能なオプションを示します。

   表14-1 アプリケーション言語の派生元オプション

   オプション | 説明
   --- | ---
   NLSなし(アプリケーションは翻訳されない) | このオプションは、アプリケーションが翻訳されない場合に選択します。
   アプリケーションのプライマリ言語を使用 | アプリケーションのプライマリ言語属性に基づいて、アプリケーションのプライマリ言語を決定します（ステップ5を参照）。
   ブラウザ(ブラウザの言語プリファレンスを使用) | ユーザーのブラウザの言語設定に基づいて、アプリケーションのプライマリ言語を決定します。
   アプリケーション・プリファレンス(FSP_LANGUAGE_PREFERENCEを使用) | `APEX_UTIL`.`SET_PREFERENCE` APIを使用して定義された値に基づいて、アプリケーションのプライマリ言語を決定します。選択した言語プリファレンスを複数のログインで維持するには、このオプションを選択します。 参照: 「SET_PREFERENCEプロシージャ」
   アイテム・プリファレンス(プリファレンスを含むアイテムを使用) | `FSP_LANGUAGE_PREFERENCE`と呼ばれるアプリケーション・レベル・アイテムに基づいて、アプリケーションのプライマリ言語を決定します。このオプションを使用すると、ログインするたびにOracle Application Expressで適切な言語設定を決定する必要があります。

参照: 「アプリケーション定義の構成」、「グローバリゼーション属性の構成」および「サポートされるグローバリゼーション・コードについて」

### アイテムの書式マスクの使用

Application Expressエンジンは、レンダリングされた各ページにグローバリゼーション設定を適用します。デフォルトの動作は、数字や日付などの特定のアイテムの表示に影響する可能性があります。

たとえば、ユーザーのブラウザの言語設定に基づいて、アプリケーション言語を決定するとします。Application Expressエンジンが、ユーザーのブラウザの言語設定をフランス語と決定した場合、日付および数字は、フランス語の標準に合せた書式で表示されます。書式マスクを適用することによって、このデフォルトの動作をオーバーライドし、アイテムの表示方法を明示的に制御できます。「表示形式」リストから選択して、書式マスクを適用します。

- アイテム作成時

- アイテム属性を編集してアイテムを作成した後

次のステップでは、データベース列のソース・タイプを持つアイテムの属性の編集方法を説明します。

アイテム属性を編集するには、次のステップを実行します。

1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

2. アプリケーションを選択します。

3. ページを選択します。

   ページ定義が表示されます。

4. 「アイテム」で、アイテム名を選択します。

   ページ・アイテムの編集ページが表示されます。

5. 「名前」の下で、「表示形式」リストから選択します。

6. 「ソース」の下で書式マスクを選択または入力します。

参照: アイテム属性については、「アイテム」を参照してください。

### マルチバイト言語用のアプリケーション翻訳

アプリケーションを複数の言語（中国語と日本語など）で同時に実行する必要がある場合、すべての言語をサポートするキャラクタ・セットを使用してデータベースを構成することを検討してください。同じキャラクタ・セットは、mod_plsqlの対応するデータベース・アクセス記述子（DAD）で構成する必要があります。`UTF8`および`AL32UTF8`は、ほぼすべての言語をサポートするために使用できるキャラクタ・セットです。

## 翻訳プロセスの理解

アプリケーション・ビルダーで開発したアプリケーションを翻訳するには、プライマリおよびターゲット言語をマップし、テキストを翻訳ファイルにシードおよびエクスポートし、テキストを翻訳し、翻訳ファイルを適用し、翻訳済アプリケーションを公開する必要があります。

このセクションの構成は次のとおりです。

- ステップ1: ターゲット言語のマップ

- ステップ2: 翻訳ファイルへのテキストのシードおよびエクスポート

- ステップ3: XLIFFファイルの翻訳

- ステップ4: 翻訳済XLIFFドキュメントのアップロードおよび適用とアプリケーションの公開

- 翻訳の手動編集

参照: 「メッセージの翻訳」および「LOVをサポートするデータの翻訳」

### ステップ1: ターゲット言語のマップ

アプリケーション翻訳の最初のステップは、プライマリおよびターゲットのアプリケーション言語をマップすることです。プライマリ・アプリケーションは、翻訳されるアプリケーションです。ターゲット・アプリケーションは、翻訳結果のアプリケーションです。

プライマリおよびターゲットのアプリケーション言語をマップするには、次のステップを実行します。

1. アプリケーションの翻訳ページにナビゲートします。

   1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

   2. アプリケーションを選択します。

   3. 「共有コンポーネント」をクリックします。

   4. 「グローバリゼーション」の下で「アプリケーションの翻訳」をクリックします。

      アプリケーションの翻訳ページが表示されます。

2. 「翻訳されたアプリケーションにプライマリ言語アプリケーションをマップ」をクリックします。

   「アプリケーション・マッピング」ページが表示されます。

3. 「作成」をクリックします。

4. 「翻訳アプリケーション・マッピング」ページで、次のステップを実行します。

   - 翻訳アプリケーション: ターゲット・アプリケーションを識別する数値のアプリケーションIDを入力します。翻訳済アプリケーションIDは整数である必要があり、末尾は0（ゼロ）以外の整数にする必要があります。

   - 翻訳アプリケーション言語コード: 翻訳先となる言語を選択します。

   - イメージ・ディレクトリ: イメージの取得元となるディレクトリを入力します。

     この属性は、翻訳されたイメージの仮想パスを指定します。たとえば、プライマリ言語アプリケーションのイメージ接頭辞が`/i/`の場合、ドイツ語には`/i/de/`、スペイン語には`/i/es/`のように、その他の言語の仮想ディレクトリを追加で定義できます。

     この言語特定のイメージ・ディレクトリは通常、ほとんどの翻訳済アプリケーションに必要がないことに注意してください。

5. 「作成」をクリックします。

### ステップ2: 翻訳ファイルへのテキストのシードおよびエクスポート

2番目のステップでは、翻訳表をシードし、翻訳テキストを翻訳ファイルにエクスポートします。

このセクションの構成は次のとおりです。

- 翻訳可能なテキストのシード

- 翻訳ファイルへのテキストのエクスポート

#### 翻訳可能なテキストのシード

翻訳のシードにより、すべての翻訳可能なテキストが翻訳テキスト・リポジトリにコピーされます。言語を指定して翻訳テキストをシードすると、翻訳用のXLIFFファイルを生成してエクスポートできます。

シード・プロセスでは、プライマリ言語アプリケーションと翻訳テキスト・リポジトリの同期がとられます。プライマリ言語アプリケーションを変更するたびに、シード・プロセスを実行する必要があります。

翻訳可能なテキストをシードするには、次のステップを実行します。

1. アプリケーションの翻訳ページにナビゲートします。

   1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

   2. アプリケーションを選択します。

   3. 「共有コンポーネント」をクリックします。

   4. 「グローバリゼーション」の下で「アプリケーションの翻訳」をクリックします。

      アプリケーションの翻訳ページが表示されます。

2. 「アプリケーションの翻訳」ページで、「アプリケーションの翻訳テキストを翻訳ファイルにシードおよびエクスポート」を選択します。

3. 「言語マッピング」から、適切なプライマリおよびターゲットのアプリケーションIDマップを選択します。

4. 「翻訳可能なテキストのシード」をクリックします。

   「XLIFFのエクスポート」ページが表示されます。

   注意: XLIFF（XML Localization Interchange File Format）は、ローカリゼーション・データを変換するためのXMLベースのフォーマットです。XLIFFについて、またはXLIFF仕様を確認するには、次のURLを参照してください。
       http://www.xliff.org

#### 翻訳ファイルへのテキストのエクスポート

翻訳可能なテキストをシードすると、XLIFFのエクスポート・ページの上部のステータス・ボックスに、翻訳が必要な場合のある属性の合計数と次の項目の数が表示されます。

- 翻訳が必要な可能性のある既存の更新済属性

- 翻訳が必要な可能性のある新しい属性

- 翻訳が不要になった削除済属性

この情報を使用して、アプリケーション全体の翻訳可能なテキストをエクスポートするか、特定のページの翻訳可能なテキストをエクスポートするかを判断できます。

XLIFFのエクスポート・ページは、2つのセクションに分かれています。アプリケーション全体（すべてのページ、LOV、メッセージなど）の翻訳可能なテキストをエクスポートするには、ページの上のセクションを使用します。特定のページの翻訳可能なテキストをエクスポートするには、下のセクションを使用します。

##### アプリケーション全体の翻訳可能なテキストのエクスポート

アプリケーション全体の翻訳可能なテキストをエクスポートするには、次のステップを実行します。

1. 翻訳可能なテキストをシードします。「翻訳可能なテキストのシード」を参照してください。

2. 「XLIFFのエクスポート: ステップ2、XLIFFのエクスポート」で、次のステップを実行します。

   1. 「アプリケーション」から、適切なプライマリおよびターゲットのアプリケーションIDマップを選択します。

   2. XLIFFターゲット要素を含めるかどうかを指定します。

   3. 「エクスポート」で、XLIFFファイルに含める翻訳テキストを指定します。

   4. 「アプリケーションのXLIFFファイルのエクスポート」をクリックします。

3. 画面に表示されるステップに従います。

##### 特定のページの翻訳可能なテキストのエクスポート

特定のページの翻訳可能なテキストをエクスポートするには、次のステップを実行します。

1. 「翻訳可能なテキストのシード」のとおり、翻訳可能なテキストをシードします。

2. 「特定ページのXLIFFのエクスポート」で、次のステップを実行します。

   1. 「アプリケーション」から、適切なプライマリおよびターゲットのアプリケーションIDマップを選択します。

   2. XLIFFターゲット要素を含めるかどうかを指定します。

   3. 「エクスポート」で、XLIFFファイルに含める翻訳テキストを指定します。

   4. 「ページのXLIFFファイルのエクスポート」をクリックします。

3. 画面に表示されるステップに従います。

##### 含まれるXLIFFターゲット要素について

Oracle Application ExpressがXLIFFドキュメントを生成すると、各ドキュメントには複数の翻訳単位が含まれます。各翻訳単位は、ソース要素とターゲット要素で構成されます。XLIFFドキュメントは、各翻訳単位ごとのソースおよびターゲットの両方の要素で生成できます。生成するファイルにソース要素のみを含めることもできます。更新された翻訳は、翻訳単位のターゲット要素から適用されます。

##### エクスポートについて

「エクスポート」の下のオプションを使用して、XLIFFファイルに含める翻訳テキストを指定します。アプリケーションのすべての翻訳テキストを含めるには、「すべての翻訳可能な要素」を選択します。また、まだ翻訳されていない新しい要素のみを含めるには、「翻訳が必要な要素のみ」を選択します。「翻訳が必要な要素のみ」では、新規または変更された翻訳単位を含むXLIFFファイルが生成されます。また、翻訳単位が意図的に翻訳されなかった（つまり、翻訳要素のソースが翻訳要素のターゲットと同じである）場合は、これらの翻訳単位もそのファイルに含まれます

### ステップ3: XLIFFファイルの翻訳

翻訳可能なファイルをXLIFFフォーマットにエクスポートすると、これを適切な言語に翻訳できます。XLIFFは翻訳のためのオープン標準のXMLファイルであるため、ほとんどの翻訳ベンダーでサポートされています。Oracle Application Expressは、UTF-8キャラクタ・セットでエンコードされたXLIFFファイルのみをサポートしています。つまり、Oracle Application Expressでは、翻訳用のXLIFFファイルはUTF-8でエクスポートされ、翻訳済XLIFFファイルも同じキャラクタ・セットであることを前提としています。

翻訳は時間のかかるタスクです。Oracle Application Expressでは、アプリケーション開発と翻訳を並行して行えるように、増分的な翻訳をサポートしています。XLIFFファイルの一部のみが翻訳されている場合でも、ファイルを翻訳してOracle Application Expressにアップロードできます。対応する翻訳済アプリケーションに翻訳がない文字列の場合、Oracle Application Expressは、プライマリ言語の対応する文字列を使用します。

参照: XLIFFの詳細またはXLIFF仕様を確認するには、次のURLを参照してください。
    http://www.xliff.org

### ステップ4: 翻訳済XLIFFドキュメントのアップロードおよび適用とアプリケーションの公開

XLIFFドキュメントの翻訳後に、ドキュメントをアップロードして適用します。

このセクションの構成は次のとおりです。

- 翻訳済XLIFFドキュメントのアップロード

- アップロードしたXLIFFドキュメントの適用およびアプリケーションの公開

- アップロードしたXLIFFドキュメントの削除

#### 翻訳済XLIFFドキュメントのアップロード

翻訳済XLIFFドキュメントをアップロードするには、次のステップを実行します。

1. アプリケーションの翻訳ページにナビゲートします。

   1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

   2. アプリケーションを選択します。

   3. 「共有コンポーネント」をクリックします。

   4. 「グローバリゼーション」の下で「アプリケーションの翻訳」をクリックします。

      アプリケーションの翻訳ページが表示されます。

2. 「翻訳ファイルを適用して公開」をクリックします。

3. 「XLIFFのアップロード」をクリックします。

4. 「XLIFFのアップロード」ページで、次のステップを実行します。

   1. タイトルを指定します。

   2. 説明を入力します。

   3. 「参照」をクリックし、アップロードするファイルを指定します。

   4. 「XLIFFファイルのアップロード」をクリックします。

   アップロードされたドキュメントが、XLIFFファイル・リポジトリに表示されます。

#### アップロードしたXLIFFドキュメントの適用およびアプリケーションの公開

XLIFFドキュメントをアップロードした後、そのXLIFFドキュメントを適用して翻訳済アプリケーションを公開します。XLIFFドキュメントを適用すると、Application Expressエンジンはファイルを解析して、翻訳表を新しい翻訳可能なテキストで更新します。

アプリケーションを公開すると、ベース言語のアプリケーションのコピーが作成され、翻訳表の翻訳されたテキスト文字列が置換されます。その後、この公開されたアプリケーションを使用して、代替言語でアプリケーションをレンダリングできます。

アプリケーションを代替言語で実行するには、代替言語バージョンで表示するようにグローバリゼーション設定を行ってアプリケーションを実行する必要があります。たとえば、言語がブラウザ言語に従う場合は、ブラウザ言語を翻訳済アプリケーションと同じ言語に設定する必要があります。

参照: 「アプリケーションへのプライマリ言語の指定」

翻訳済XLIFFドキュメントを適用してアプリケーションを公開するには、次のステップを実行します。

1. アプリケーションの翻訳ページにナビゲートします。

   1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

   2. アプリケーションを選択します。

   3. 「共有コンポーネント」をクリックします。

   4. 「グローバリゼーション」の下で「アプリケーションの翻訳」をクリックします。

      アプリケーションの翻訳ページが表示されます。

2. 「翻訳ファイルを適用して公開」をクリックします。

3. XLIFFファイル・リポジトリで、公開するドキュメントの横にある「ビュー」アイコンをクリックします。

4. 「適用」から、適切なプライマリおよびターゲットのアプリケーションIDマップを選択します。

5. 「XLIFF翻訳ファイルの適用」をクリックします。

6. 「アプリケーションのパブリッシュ」をクリックします。

#### アップロードしたXLIFFドキュメントの削除

アップロードしたXLIFFドキュメントを削除するには、次のステップを実行します。

1. アプリケーションの翻訳ページにナビゲートします。

   1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

   2. アプリケーションを選択します。

   3. 「共有コンポーネント」をクリックします。

   4. 「グローバリゼーション」の下で「アプリケーションの翻訳」をクリックします。

      アプリケーションの翻訳ページが表示されます。

2. 「アプリケーションの翻訳」ページで、「翻訳ファイルを適用して公開」を選択します。

3. XLIFFファイル・リポジトリで、そのドキュメント・タイトルの左のチェック・ボックスを選択します。

4. 「チェックした項目の削除」をクリックします。

アプリケーションを公開した後、翻訳済アプリケーションの有無を確認する必要があります。翻訳済アプリケーションは、アプリケーション・ビルダーのホームページの「選択可能なアプリケーション」リストには表示されません。かわりに、そのページの左側のアプリケーション・ナビゲート・リストを使用します。

翻訳済アプリケーションをアプリケーション・ビルダーに表示するには、アプリケーションのグローバリゼーション属性を正しく設定する必要があります。

参照: 「アプリケーションへのプライマリ言語の指定」

### 翻訳の手動編集

ターゲット言語をマップし、翻訳可能なテキストをシードした後は、手動で翻訳を編集できます。

手動で翻訳を編集するには、次のステップを実行します。

1. ターゲット言語をマップします。「ステップ1: ターゲット言語のマップ」を参照してください。

2. 翻訳可能なテキストをシードします。「翻訳可能なテキストのシード」を参照してください。

3. 翻訳可能なテキスト・ページにナビゲートします。

   1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

   2. アプリケーションを選択します。

   3. 「共有コンポーネント」をクリックします。

   4. 「グローバリゼーション」の下で「アプリケーションの翻訳」をクリックします。

4. 「翻訳ユーティリティ」リストから、「翻訳の手動編集」をクリックします。

   翻訳可能なテキスト・ページが表示されます。ページ上部の「ナビゲーション・バー」を使用してレポート表示を変更します。使用可能なオプションは次のとおりです。

   - 言語のマッピング: 言語のマッピングを選択し、「実行」をクリックします。

   - ページ: ページ番号を入力し、「実行」をクリックします。

   - 翻訳: 大/小文字を区別しない問合せを入力し、「実行」をクリックします。

   - 表示: 表示する行数を選択し、「実行」をクリックします。

5. 翻訳可能なテキストを編集するには、「編集」アイコンをクリックします。

   「翻訳可能なテキスト」フィールドが表示されます。

6. 適切なテキストを編集し、「変更の適用」をクリックします。

## メッセージの翻訳

アプリケーションが次に当てはまる場合、メッセージを翻訳する必要があることがあります。

- PL/SQLリージョンまたはPL/SQLプロセスが含まれる場合、あるいはPL/SQLパッケージ、プロシージャ、またはファンクションをコールする場合。この場合、生成されたHTMLを翻訳する必要があることがあります。

- Oracle Application Expressが翻訳されている10言語以外の言語を使用する場合。この場合、レポートに使用されているメッセージを翻訳する必要があることがあります。

このセクションの構成は次のとおりです。

- PL/SQLプロシージャで使用されるメッセージの翻訳

- Application Expressにより内部使用されるメッセージの翻訳

### PL/SQLプロシージャで使用されるメッセージの翻訳

アプリケーションにPL/SQLリージョンまたはPL/SQLプロセスが含まれる場合、あるいはアプリケーションがPL/SQLパッケージ、プロシージャ、またはファンクションをコールする場合は、生成されるHTMLを翻訳する必要がある場合があります。最初に、翻訳可能なメッセージ・ページで、各メッセージを定義します。次に、`APEX_LANG`.`MESSAGE` APIを使用して、PL/SQLストアド・プロシージャ、ファンクション、トリガーまたはパッケージ化されたプロシージャおよびファンクションのメッセージを翻訳します。

翻訳可能なメッセージ・ページで、翻訳可能なメッセージを作成します。

新しい翻訳メッセージを定義するには、次のステップを実行します。

1. アプリケーションの翻訳ページにナビゲートします。

   1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

   2. アプリケーションを選択します。

   3. 「共有コンポーネント」をクリックします。

   4. 「グローバリゼーション」の下で「テキスト・メッセージ」をクリックします。

2. メッセージの翻訳ページで、「作成」をクリックします。

3. 「テキスト・メッセージを指定」で次を指定します。

   1. 名前: メッセージを識別するための名前を入力します。

   2. 言語: メッセージが使用される言語を選択します。

   3. テキスト: テキスト・メッセージがコールされたときに戻されるテキストを入力します。

      たとえば、メッセージ`GREETING_MSG`を次のように英語で定義できます。

          Good morning %0

      また、メッセージ`GREETING_MSG`を次のようにドイツ語で定義できます。

          Guten Tag %0

4. 「作成」をクリックします。

#### APEX_LANG.MESSAGE APIについて

PL/SQLストアド・プロシージャ、ファンクション、トリガー、パッケージ化されたプロシージャおよびファンクションから生成されたテキスト文字列（メッセージ）を翻訳するには、`APEX_LANG`.`MESSAGE` APIを使用します。

構文

    APEX_LANG.MESSAGE (
        p_name    IN    VARCHAR2 DEFAULT NULL,
        p0        IN    VARCHAR2 DEFAULT NULL,
        p1        IN    VARCHAR2 DEFAULT NULL,
        p2        IN    VARCHAR2 DEFAULT NULL,
        ...
        p9        IN    VARCHAR2 DEFAULT NULL,
        p_lang    IN    VARCHAR2 DEFAULT NULL)
        RETURN VARCHAR2;

パラメータ

表14-2に、 `APEX_LANG`.MESSAGE APIで使用可能なパラメータを示します。

表14-2 APEX_LANG.MESSAGEのパラメータ

パラメータ | 説明
--- | ---
`p_name` | Oracle Application Expressで定義されたメッセージの名前。
`p0` ... `p9` | 動的置換値。`p0`は、メッセージの0%に対応します。`p1`は、メッセージの1%に対応します。p2は、メッセージの2%に対応します（以降同様）。
`p_lang` | 取得されるメッセージの言語コード。指定しない場合、Oracle Application Expressは、アプリケーション言語の派生元属性で定義されているとおり、ユーザーの現行の言語を使用します。 参照: 「アプリケーションへのプライマリ言語の指定」

例

次の例では、アプリケーションの`GREETING_MSG`というメッセージを、英語で`Good morning%0`、ドイツ語で`Guten Tag%1`と定義したと仮定しています。この例は、PL/SQLからこのメッセージを呼び出す方法を示しています。

    BEGIN
        --
        -- Print the greeting
        --
        APEX_LANG.MESSAGE('GREETING_MSG', V('APP_USER'));
    END;

`p_lang`属性の定義は、Application Expressエンジンがアプリケーションのプライマリ言語を導出する方法によって異なります。たとえば、アプリケーションをドイツ語で実行中で、前回のコールが`APEX_LANG`.`MESSAGE` APIに対して行われた場合、Application Expressエンジンは、最初に`LANG_CODE`が`de`である`GREETING_MSG`というメッセージを検索します。見つからない場合は、アプリケーションのプライマリ言語属性に戻ります。それでも見つからない場合、Application Expressエンジンは、言語コードが`en-us`であるこの名前のメッセージを検索します。

参照: アプリケーションのプライマリ言語属性については、「アプリケーションへのプライマリ言語の指定」を参照してください。

### Application Expressにより内部使用されるメッセージの翻訳

Oracle Application Expressはドイツ語、スペイン語、フランス語、イタリア語、日本語、韓国語、ポルトガル語（ブラジル）、簡体字中国語、および繁体字中国語に翻訳されています。これらの翻訳された10言語以外の言語をアプリケーションで使用する場合は、Application Expressレポート・エンジンによって表示されるメッセージを翻訳する必要があります。

たとえば、ロシア語のアプリケーションを開発してロシア語のレポート・メッセージ（ページ区切りなど）を使用する場合は、レポートに表示されるメッセージで使用される文字列を翻訳する必要があります。

メッセージを翻訳するには、次のステップを実行します。

1. アプリケーションの翻訳ページにナビゲートします。

   1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

   2. アプリケーションを選択します。

   3. 「共有コンポーネント」をクリックします。

   4. 「グローバリゼーション」の下で「テキスト・メッセージ」をクリックします。

2. メッセージの翻訳ページで、「作成」をクリックします。

3. 「テキスト・メッセージを指定」で次を指定します。

   1. 名前: 翻訳する必要のある各メッセージの名前を入力します。表14-3を参照してください。

   2. 言語: メッセージが使用される言語を選択します。

   3. テキスト: テキスト・メッセージがコールされたときに戻されるテキストを入力します。英語のテキスト・メッセージに定位置の置換値（`%0`、`%1`など）が含まれている場合、ユーザー定義のメッセージにも同じ名前と数字の定位置の置換値を含めてください。

4. 「作成」をクリックします。

表14-3に、翻訳が必要な内部メッセージを示します。

表14-3 翻訳が必要な内部メッセージ

メッセージ名 | 英語のテキスト
--- | ---
`FLOW.SINGLE_VALIDATION_ERROR` | 1 error has occurred
`FLOW.VALIDATION_ERROR` | %0 errors have occurred
`OUT_OF_RANGE` | Invalid set of rows requested, the source data of the report has been modified
`PAGINATION.NEXT` | Next
`PAGINATION.NEXT_SET` | Next Set
`PAGINATION.PREVIOUS` | Previous
`PAGINATION.PREVIOUS_SET` | Previous Set
`REPORT_TOTAL` | report total
`RESET` | reset pagination
`SINCE_DAYS_AGO` | %0 days ago
`SINCE_HOURS_AGO` | %0 hours ago
`SINCE_MINUTES_AGO` | %0 minutes ago
`SINCE_MONTHS_AGO` | %0 months ago
`SINCE_SECONDS_AGO` | %0 seconds ago
`SINCE_WEEKS_AGO` | %0 weeks ago
`SINCE_YEARS_AGO` | %0 years ago
`TOTAL` | Total
`WWV_FLOW_UTILITIES.CAL` | Calendar
`WWV_FLOW_UTILITIES.CLOSE` | Close
`WWV_FLOW_UTILITIES.OK` | Ok
`WWV_RENDER_REPORT3.FOUND_BUT_NOT_DISPLAYED` | Minimum row requested: %0, rows found but not displayed: %1
`WWV_RENDER_REPORT3.SORT_BY_THIS_COLUMN` | Sort by this column
`WWV_RENDER_REPORT3.X_Y_OF_MORE_THAN_Z` | row(s) %0 - %1 of more than %2
`WWV_RENDER_REPORT3.X_Y_OF_Z` | row(s)%0 - %1 of %2
`WWV_RENDER_REPORT3.X_Y_OF_Z_2` | %0 - %1 of %2

## LOVをサポートするデータの翻訳

動的データを翻訳するには、動的翻訳を作成します。たとえば、データベース問合せに基づくLOVで動的翻訳を使用する場合があります。

動的翻訳は、メッセージ名ではなく特定の文字列を問い合せるという点でメッセージとは異なります。動的翻訳は、動的翻訳ページで定義します。その後、`APEX_LANG`.`LANG` APIを使用して、パラメータ`p_primary_text_string`で指定された動的翻訳文字列を戻します。

### 動的翻訳の定義

動的翻訳は、動的翻訳ページで定義します。動的翻訳は、翻訳元の言語文字列、言語コードおよび翻訳先の文字列で構成されています。

動的翻訳を定義するには、次のステップを実行します。

1. アプリケーションの翻訳ページにナビゲートします。

   1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

   2. アプリケーションを選択します。

   3. 「共有コンポーネント」をクリックします。

   4. 「グローバリゼーション」の下で「アプリケーションの翻訳」をクリックします。

2. 「アプリケーションの翻訳」ページで、「(オプション)SQLに基づくLOVをサポートするために動的に翻訳する必要があるデータを指定」を選択します。

3. 「動的翻訳」ページで、「作成」をクリックし、次の項目を指定します。

   1. 言語: ターゲットの言語を選択します。

   2. 翻訳元テキスト: 翻訳するテキストを入力します。

   3. 翻訳先: 翻訳したテキストを入力します。

4. 「作成」をクリックします。

### APEX_LANG.LANG API

構文

    APEX_LANG.LANG (
        p_primary_text_string    IN    VARCHAR2 DEFAULT NULL,
        p0                       IN    VARCHAR2 DEFAULT NULL,
        p1                       IN    VARCHAR2 DEFAULT NULL,
        p2                       IN    VARCHAR2 DEFAULT NULL,
        ...
        p9                       IN    VARCHAR2 DEFAULT NULL,
        p_primary_language       IN    VARCHAR2 DEFAULT NULL)
        RETURN VARCHAR2;

パラメータ

表14-4に、`APEX_LANG`.`LANG` API.で使用可能なパラメータを示します。

表14-4 APEX_LANG.LANGのパラメータ

パラメータ | 説明
--- | ---
`p_primary_string` | プライマリ言語のテキスト文字列。これは、「動的翻訳」の「翻訳元テキスト」の値になります。
`p0` ... `p9` | 動的置換値。`p0`は、翻訳文字列の0%に対応します。`p1`は、翻訳文字列の1%に対応します。`p2`は、翻訳文字列の2% に対応します（以降同様）。
`p_primary_language` | 取得されるメッセージの言語コード。指定しない場合、Oracle Application Expressは、アプリケーション言語の派生元属性で定義されているとおり、ユーザーの現行の言語を使用します。 参照: 「アプリケーションへのプライマリ言語の指定」

例

すべての1次色を定義する表があるとします。それぞれの色に動的メッセージを定義し、問合せで定義された値に`LANG`ファンクションを適用します。次に例を示します。

    SELECT APEX_LANG.LANG(color)
      FROM my_colors

アプリケーションをドイツ語で実行中の場合、`my_colors`表の「カラー」列の値が`RED`であったとすると、赤にドイツ語を定義すると、前述の例では、`ROT`が戻されます。

## サポートされるグローバリゼーション・コードについて

多言語アプリケーションを構築する場合、グローバリゼーション・コードが、アプリケーションの実行方法に与える影響を理解しておくことが重要です。これらのコードは、選択したアプリケーション・レベルのグローバリゼーション属性に基づいて自動的に設定されます。

参照: 「アプリケーションへのプライマリ言語の指定」

`NLS_LANGUAGE`および`NLS_TERRITORY` によって、数字、日付および通貨のデフォルトの表示形式が決まります。

表14-5に、Oracle Application Expressのグローバリゼーション・コードを示します。

表14-5 Oracle Application Expressのグローバリゼーション・コード

言語名 | 言語コード | NLS_LANGUAGE | NLS_TERRITORY
--- | --- | --- | ---
アフリカーンス語 | `af` | ENGLISH | SOUTH AFRICA
アラビア語 | `ar` | ARABIC | UNITED ARAB EMIRATES
アラビア語（アルジェリア） | `ar-dz` | ARABIC | ALGERIA
アラビア語（バーレーン） | `ar-bh` | ARABIC | BAHRAIN
アラビア語（エジプト） | `ar-eg` | EGYPTIAN | EGYPT
アラビア語（イラク） | `ar-iq` | ARABIC | IRAQ
アラビア語（ヨルダン） | `ar-jo` | ARABIC | JORDAN
アラビア語（クウェート） | `ar-kw` | ARABIC | KUWAIT
アラビア語（レバノン） | `ar-lb` | ARABIC | LEBANNON
アラビア語（リビア） | `ar-ly` | ARABIC | LIBYA
アラビア語（モロッコ） | `ar-ma` | ARABIC | MOROCCO
アラビア語（オマーン） | `ar-om` | ARABIC | OMAN
アラビア語（カタール） | `ar-qa` | ARABIC | QATAR
アラビア語（サウジアラビア） | `ar-sa` | ARABIC | SAUDI ARABIA
アラビア語（シリア） | `ar-sy` | ARABIC | SYRIA
アラビア語（チュニジア） | `ar-tn` | ARABIC | TUNISIA
アラビア語（アラブ首長国連邦） | `ar-ae` | ARABIC | UNITED ARAB EMIRATES
アラビア語（イエメン） | `ar-ye` | ARABIC | YEMEN
アッサム語 | `as` | ASSAMESE | INDIA
バスク語 | `eu` | FRENCH | FRANCE
ベラルーシ語 | `be` | RUSSIAN | RUSSIA
ベンガル語 | `bn` | BANGLA | BANGLADESH
ブルガリア語 | `bg` | BULGARIAN | BULGARIA
カタロニア語 | `ca` | CATALAN | CATALONIA
中国語 | `zh` | SIMPLIFIED CHINESE | CHINA
中国語（中国） | `zh-cn` | SIMPLIFIED CHINESE | CHINA
中国語（香港SAR） | `zh-hk` | TRADITIONAL CHINESE | HONG KONG
中国語（マカオSAR） | `zh-mo` | TRADITIONAL CHINESE | HONG KONG
中国語（シンガポール） | `zh-sg` | SIMPLIFIED CHINESE | SINGAPORE
中国語（台湾） | `zh-tw` | TRADITIONAL CHINESE | TAIWAN
クロアチア語 | `hr` | CROATIAN | CROATIA
チェコ語 | `cs` | CZECH | CZECH REPUBLIC
デンマーク語 | `da` | DANISH | DENMARK
オランダ語（ベルギー） | `nl-be` | DUTCH | BELGIUM
オランダ語（オランダ） | `nl` | DUTCH | THE NETHERLANDS
英語 | `en` | AMERICAN | AMERICA
英語（オーストラリア） | `en-au` | ENGLISH | AUSTRALIA
英語（ベリーズ） | `en-bz` | ENGLISH | UNITED KINGDOM
英語（カナダ） | `en-ca` | ENGLISH | CANADA
英語（アイルランド） | `en-ie` | ENGLISH | IRELAND
英語（ジャマイカ） | `en-jm` | ENGLISH | UNITED KINGDOM
英語（ニュージーランド） | `en-nz` | ENGLISH | NEW ZEALAND
英語（フィリピン） | `en-ph` | ENGLISH | PHILIPPINES
英語（南アフリカ） | `en-za` | ENGLISH | SOUTH AFRICA
英語（トリニダード） | `en-tt` | ENGLISH | UNITED KINGDOM
英語（イギリス） | `en-gb` | ENGLISH | UNITED KINGDOM
英語（米国） | `en-us` | AMERICAN | AMERICA
英語（ジンバブエ） | `en-zw` | ENGLISH | UNITED KINGDOM
エストニア語 | `et` | ESTONIAN | ESTONIA
フェロー語 | `fo` | ENGLISH | UNITED KINGDOM
ペルシア語 | `fa` | ENGLISH | UNITED KINGDOM
フィンランド語 | `fi` | FINNISH | FINLAND
フランス語（ベルギー） | `fr-be` | FRENCH | BELGIUM
フランス語（カナダ） | `fr-ca` | CANADIAN FRENCH | CANADA
フランス語（フランス） | `fr` | FRENCH | FRANCE
フランス語（ルクセンブルグ） | `fr-lu` | FRENCH | LUXEMBOURG
フランス語（モナコ） | `fr-mc` | FRENCH | FRANCE
フランス語（スイス） | `fr-ch` | FRENCH | SWITZERLAND
FYROマケドニア語 | `mk` | MACEDONIAN | FYR MACEDONIA
ゲール語 | `gd` | ENGLISH | UNITED KINGDOM
ガリシア語 | `gl` | SPANISH | SPAIN
ドイツ語（オーストリー） | `de-at` | GERMAN | AUSTRIA
ドイツ語（ドイツ） | `de` | GERMAN | GERMANY
ドイツ語（リヒテンシュタイン） | `de-li` | GERMAN | GERMANY
ドイツ語（ルクセンブルグ） | `de-lu` | GERMAN | LUXEMBOURG
ドイツ語（スイス） | `de-ch` | GERMAN | SWITZERLAND
ギリシャ語 | `el` | GREEK | GREECE
グジャラト語 | `gu` | GUJARATI | INDIA
ヘブライ語 | `he` | HEBREW | ISRAEL
ヒンディー語 | `hi` | HINDI | INDIA
ハンガリー語 | `hu` | HUNGARIAN | HUNGARY
アイスランド語 | `is` | ICELANDIC | ICELAND
インドネシア語 | `id` | INDONESIAN | INDONESIA
イタリア語（イタリア） | `it` | ITALIAN | ITALY
イタリア語（スイス） | `it-ch` | ITALIAN | SWITZERLAND
日本語 | `ja` | JAPANESE | JAPAN
カンナダ語 | `kn` | KANNADA | INDIA
カザフ語 | `kk` | CYRILLIC KAZAKH | KAZAKHSTAN
コンカニ語 | `kok` | KOREAN | KOREA
韓国語 | `ko` | KOREAN | KOREA
キルギス語 | `kz` | RUSSIAN | RUSSIA
ラトビア語 | `lv` | LATVIAN | LATVIA
リトアニア語 | `lt` | LITHUANIAN | LITHUANIANA
マラヤーラム語（マレーシア） | `ms` | MALAY | MALAYSIA
マラヤーラム語 | `ml` | MALAYALAM | INDIA
マルタ語 | `mt` | ENGLISH | UNITED KINGDOM
マラーティー語 | `mr` | ENGLISH | INDIA
ネパール語（インド） | `ne` | ENGLISH | UNITED KINGDOM
ノルウェー語（ブークモール） | `nb-no` | NORWEGIAN | NORWAY
ノルウェー語（ブークモール） | `no` | NORWEGIAN | NORWAY
ノルウェー語（ニーノシュク） | `nn-no` | NORWEGIAN | NORWAY
オリヤー語 | `or` | ORIYA | INDIA
ポーランド語 | `pl` | POLISH | POLAND
ポルトガル語（ブラジル） | `pt-br` | BRAZILIAN PORTUGUESE | BRAZIL
ポルトガル語（ポルトガル） | `pt` | PORTUGUESE | PORTUGAL
パンジャブ語 | `pa` | PUNJABI | INDIA
ルーマニア語 | `ro` | ROMANIAN | ROMANIA
ロシア語 | `ru` | RUSSIAN | RUSSIA
ロシア語（モルドバ） | `ru-md` | RUSSIAN | RUSSIA
セルビア語 | `sr` | CYRILLIC SERBIAN | SERBIA AND MONTENEGRO
スロバキア語 | `sk` | SLOVAK | SLOVAKIA
スロベニア語 | `sl` | SLOVENIAN | SLOVENIA
スペイン語（アルゼンチン） | `es-ar` | LATIN AMERICAN SPANISH | ARGENTINA
スペイン語（ボリビア） | `es-bo` | LATIN AMERICAN SPANISH | ARGENTINA
スペイン語（チリ） | `es-cl` | LATIN AMERICAN SPANISH | CHILE
スペイン語（コロンビア） | `ec-co` | LATIN AMERICAN SPANISH | COLUMBIA
スペイン語（コスタリカ） | `es-cr` | LATIN AMERICAN SPANISH | COSTA RICA
スペイン語（ドミニカ共和国） | `es-do` | LATIN AMERICAN SPANISH | PUERTO RICO
スペイン語（エクアドル） | `es-ec` | LATIN AMERICAN SPANISH | ECUDOR
スペイン語（エルサルバドル） | `es-sv` | LATIN AMERICAN SPANISH | EL SALVADOR
スペイン語（グアテマラ） | `es-gt` | LATIN AMERICAN SPANISH | GUATEMALA
スペイン語（ホンジュラス） | `es-hn` | LATIN AMERICAN SPANISH | GUATEMALA
スペイン語（メキシコ） | `es-mx` | MEXICAN SPANISH | MEXICO
スペイン語（ニカラグア） | `es-ni` | LATIN AMERICAN SPANISH | NICARAGUA
スペイン語（パナマ） | `es-pa` | LATIN AMERICAN SPANISH | PANAMA
スペイン語（パラグアイ） | `es-py` | LATIN AMERICAN SPANISH | ARGENTINA
スペイン語（ペルー） | `es-pe` | LATIN AMERICAN SPANISH | PERU
スペイン語（プエルトリコ） | `es-pr` | LATIN AMERICAN SPANISH | PUERTO RICO
スペイン語（標準） | `es` | LATIN AMERICAN SPANISH | SPAIN
スペイン語（米国） | `es-us` | LATIN AMERICAN SPANISH | AMERICAN
スペイン語（ウルグアイ） | `es-uy` | LATIN AMERICAN SPANISH | ARGENTINA
スペイン語（ベネズエラ） | `es-ve` | LATIN AMERICAN SPANISH | VENEZUELA
スウェーデン語 | `sv` | SWEDISH | SWEDEN
スウェーデン語 | `sv-fi` | SWEDISH | FINLAND
タミル語 | `ta` | TAMIL | INDIA
テルグ語 | `te` | TELUGU | INDIA
タイ語 | `th` | THAI | THAILAND
トルコ語 | `tr` | TURKISH | TURKEY
ウクライナ語 | `uk` | UKRAINIAN | UKRAINE
ウルドゥー語 | `ur` | ENGLISH | UNITED KINGDOM
ウズベク語 | `uz` | LATIN UZBEK | UZBEKISTAN
ベトナム語 | `vi` | VIETNAMESE | VIETNAM
ズールー語 | `zu` | ENGLISH | UNITED KINGDOM