インテリジェント配信: 言語指定子
言語指定子は、チャンク内のコンテンツが適用することのできる言語を宣言するものです。 インストール パッケージ内のチャンクを 1 つ以上の言語指定子でマークすると、インストール時にコンソールで次のことが実行されます。
ユーザーに必要な言語とパッケージ内の言語を確認し、どのチャンクが最適かを決定します。
その言語用にマークされているチャンクと、言語指定子がないチャンクだけをダウンロードします。
完全一致が見つからない場合は、言語指定子を使用してフォールバック言語を宣言することができます。
各言語に対応したインストール
インテリジェント配信の言語指定子を使用すると、コンテンツにタグ付けをして、パッケージ内のローカライズ済みアセットのうち、一部のサブセットだけが本体にインストールされるようにすることができます。 これにより、デジタルでインストールを行うユーザーの帯域幅を節約すると共に、すべてのユーザーのハードドライブ容量を節約することができます。
コンテンツが 1 つ以上の言語に固有のものであることを示すには、layout.xml ファイル内のチャンクに Languages
属性を追加します。 次の例は、実行する言語としてフランス語が最適と判断された本体にのみインストールされるチャンクを示したものです。 このチャンクは、カナダのロケール (fr-CA) かフランスのロケール (fr-FR) を使用してフランス語に設定された本体にのみインストールされます。 言語指定子がないチャンクは、他の指定子 (デバイス タイプなど) を使用して除外された場合を除き、すべての本体にインストールされます。
<Chunk Id="1001" Languages="fr">
<FileGroup DestinationPath="\Data\Maps\X1\fr" SourcePath="Y:\Maps\Level1\X1\fr" Include="*.map"/>
<Chunk>
ユーザーが選択した言語の確認
XPackageGetUserLocale 関数を使用すると、ユーザーのシステム上でタイトルのインストールに最も適したオペレーティング システムによって決定されたロケールの名前をクエリできます。
返されるロケールはアルゴリズムによって決定され、ユーザーに関するすべての使用可能なデータに基づいて可能な限り最善の一致を特定するために、次のような操作を実行します。
- ユーザーの現在の言語設定に最も一致する言語のリストが生成されます。
- MicrosoftGame.config/manifestで宣言されているすべての言語のリストが生成されます。
- 現在インストールされており、パッケージで使用可能なすべての言語のリストが生成されます。
- マニフェストで宣言されている最初の言語は、言語選択の究極のフォールバックです。
- 結果は常に、MicrosoftGame.config/manifestで宣言されている言語、または言語が宣言されていない場合はユーザーの言語になります。
注意
使用されるアルゴリズムは時間の経過と共に変更される可能性があり、前記と必ずしも同じではありません。
XPackageGetUserLocale で返される言語は、GetUserDefaultLocaleName またはその他の各国語サポート (NLS) およびローカリゼーション関連の Win32 API 関数で返されるものと必ずしも一致せず、また、優先して呼び出される必要があります。
ローカリゼーションと MicrosoftGame.config の言語設定の詳細については、「各国語サポート API とローカリゼーション」の GDK サンプルを参照してください。
注意
layout.xml ファイル内で参照されているすべての言語が、MicrosoftGame.config ファイルにも存在していることを必ず確認するようにしてください。 そうでない場合、MakePkg ツールでエラーが発生します。
ユーザーが別の言語に切り替えた後でタイトルを起動したときの動作
ユーザーがタイトルを起動し、ユーザーの最適なロケールがパッケージの一部として利用可能であるがまだインストールされていない場合 (たとえば、タイトルを実行していないときにユーザーが言語を切り替えた場合)、次回タイトルを起動したときに最適な言語をインストールする機会が提供されます。
注意
ユーザーが言語のインストールを選択した場合、新しい言語がダウンロードされるまで、以前に選択したインストール済み言語でゲームを実行できます。 ユーザーは設定言語を変更した場合でも、変更前の言語も理解していることがあり、変更後の希望する言語がダウンロードされるのを待つ間もゲームをプレイするものと推測されます。
この行動パターンによって多くの開発者が混乱したことに注意してください。 テストする場合、タイトルを起動する前に、ゲーム インストール キューを監視して、新しい言語のインストールが完了したことを確認する必要があります。 ユーザーが言語のインストールを選択した場合、XPackageGetUserLocale では、ダウンロードされるまでその言語は報告されません。
タイトルの言語を追加する
一部のタイトルでは、本体の言語設定に関係なく、(ゲームの初回プレイ時やメニューから) ユーザーが言語を選択できます。 インストール時には、インテリジェント配信によって本体の言語設定と layout.xml ファイルの言語指定が確認され、パッケージに対する言語が 1 つだけインストールされます。 既定では、この言語でタイトルがレンダリングされます。
これに加え、Xbox シェルを使用すれば、第 2 言語をインストールすることもできます。 このオプションは、タイトル内から独自の UI を使用して公開できます。 タイトルでは、XPackageEnumeratePackages メソッドを呼び出すことで、インストール可能な言語を確認することができます。 選択された言語やインストール ソースによって、インストール ファイルがディスクから取得される場合もあれば、Xbox Live から取得される場合もあります。 ユーザーが既定以外の言語を選択した場合は、タイトルから XPackageFindChunkAvailability メソッドを呼び出し、その言語でタグ付けされたチャンクのインストール ステータスを確認するようにしてください。 この API は、次の表に示すいずれかの値の XPackageChunkAvailability オブジェクトを返します。
状態 | 説明 |
---|---|
Ready | チャンクは既にインストール済みで、読み取り可能です。 |
Pending | チャンクはまだインストールされていませんが、インストールされる予定です。 |
Installable | チャンクのインストールは予定されていませんが、ダウンロードは可能です。 アセットをインストールするには、適切な指定子を使用して XPackageInstallChunks メソッドを呼び出します。 |
Unavailable | チャンクはダウンロードできません。 |
XPackageChunkAvailability によって Unavailable が返される場合、指定された言語がオンラインでは利用できないか、またはディスク上のタイトルのバージョンでは利用できません。
現在インストールされていないがインストール可能な言語をユーザーが選択した場合は、インストールする言語を指定する XPackageChunkSelector オブジェクトを使用して、タイトルから XPackageInstallChunks メソッドを呼び出すようにしてください。 これを呼び出すと、システムでレンダリングされた UI が表示され、追加のダウンロードとインストールを受け入れるよう求めるメッセージがユーザーに表示されます。 タイトルでは、返されたインストール モニター ハンドルを XPackageGetInstallationProgress メソッドや XPackageRegisterInstallationProgressChanged メソッドと共に使用して、新しいデータのダウンロードやインストールを監視したり、ユーザーが追加インストールを拒否したかどうかを確認することができます。
タイトルの言語をアンインストールするには、XPackageUninstallChunks メソッドを呼び出します。 この呼び出しは、言語が 1 つしかインストールされていない場合には暗黙的に無視されます。
Xbox One ソフトウェア開発キットからの変更
以前に Xbox One ソフトウェア開発キットでインテリジェント配信を使用したことがある場合は、言語を宣言してマップする方法が異なることに注意してください。 チャンクに Languages
属性を追加した場合は、MicrosoftGame.config でもその言語を宣言する必要があります。任意の言語にどのチャンクをインストールするかの識別は、最適な言語に対する単一の値に基づくようになっています。 たとえば、レイアウト ファイルに "en" でマークされたチャンクと、"en-US" でマークされた別のチャンクが含まれている場合、ユーザーの言語が "en-US" に設定されていると、"en" チャンクはインストールされません。 これを従来の動作にする場合は、インストールする必要があるすべての言語 (en;en-US) でチャンクを宣言します。