パッケージ化されたリソースのローカライズ
MicrosoftGame.config ファイルで使用されるリソース (文字列と画像) は、ユーザーのロケールに応じてローカライズできます。 Visual Studio 2019 以降を使用してタイトルを構築すると値常に、画像および文字列への参照を含むデータ ファイルである resource.pri ファイルが自動的に作成されます。 このファイルは自動生成され、OS が検索する、特別に名前が付けられたファイルです。 リソースが存在しない場合、既定の resources.pri ファイルには MicrosftGame.config ファイルで定義されたタイトルの名前のみが含まれます。 次に示すように、Microsoft Game Development Kit (GDK) コマンド プロンプトを使用して、このファイルの内容を確認できます。
MakePri.exe dump /if resources.pri /of out.xml
このコマンドは、resources.pri ファイルに含まれているすべてのリソースを XML 形式にダンプします。 ローカライズするすべてのリソース (画像や文字列など) がこのファイルに含まれているかどうかを確認できます。 resources.pri ファイルを更新して異なる言語の文字列や画像を含めるよう更新できます。 ユーザーのロケールに基づき、名前、起動画面、ロゴを様々な言語で表示します。 以降のセクションでは、Visual Studio 2019 以降を使用して文字列と画像をローカライズする方法について詳しく説明します。
アプリケーションの名前と説明のローカライズ
構成に含まれているすべてのリソース (文字列と画像) をローカライズできます。 ローカライズされた文字列を含めるためのパターンは、画像とは若干異なります。 以下のセクションではそれらを詳しく説明します。
ローカライズ可能な文字列の追加
.config ファイルの文字列は、ユーザー ロケールとタイトルでサポートされているロケールに基づいてローカライズできます。 ユーザー ロケールがゲームでサポートされていない場合は、フォールバックとして機能する既定の文字列を指定することが重要です。 このセクションでは、既定でローカライズされた文字列をゲームに追加する方法について詳しく説明します。これは、MicrosoftGame.config ファイル で使用できます。
Visual Studio ソリューションエクスプローラーで既定の文字列を追加する
- プロジェクト フォルダーを右クリックします。 オプション手順 (わかりやすく整理する場合) は以下の通りです。
- [Add (追加)] を選び、[New Fileter (新しいフィルター)] を選択します。
- 新しいフィルターに「Strings (文字列)」という名前を設定します。
- Strings フォルダーを右クリックします。
- [Add (追加)] 、[New Item (新規項目)]、[Visual C++\Resource] を選択します。
- アセンブリのリソース ファイル (.resx) を選択します。
- これにより、パッケージ ディレクトリのルートに resources.resx ファイルが作成されます。 このファイルには、言語に依存しないリソース文字列を追加します。 編集 UI では、既定の String1 エントリが空白で表示されます。
注意
Microsoft Game Development Kit (GDK) タイトルに必要なファイル拡張子は .resw ファイルです。 Visual Studio では、この拡張子の追加はサポートされていません。そのため、resources.resx ファイルの名前を resources.resw に変更して、resources.pri ファイルを生成する際の問題を回避することをお勧めします。
パッケージを更新して文字列参照を含める
新しく追加した文字列の説明は、MicrosoftGame.config ファイル中の "ms-resource:" 構文を使用して参照されます。 使用する名前は、リソース ファイルに追加した名前と同じであることに注意してください。
<ShellVisuals DefaultDisplayName="ms-resource:AppName"
PublisherDisplayName="Publisher Display name"
StoreLogo="StoreLogo.png"
Square150x150Logo="Logo.png"
Square44x44Logo="SmallLogo.png"
Description="ms-resource:AppDescription"
BackgroundColor="#000040"
SplashScreenImage="SplashScreen.png"/>
Visual Studio ソリューション エクスプローラーで特定の言語の文字列を追加する
- サポートする言語ごとに、プロジェクトのメイン フォルダーに最上位のサブフォルダーを作成します。
- Strings フォルダーを右クリックします。
- [Add (追加)] を選び、[New Fileter (新しいフィルター)] を選択します。
- 新しいフォルダーに「en-us」という名前を付け、目的のフォルダーを右クリックします。
- [Add (追加)] 、[New Item (新規項目)]、[Visual C++/Resource] を選択します。
- アセンブリのリソース ファイル (.resx) を選択します。
- en-us のサブフォルダーを作成する出力場所を選択します。 たとえば、C:\MyProject\en-us\resources.resx などです。
- これにより、パッケージの en-us フォルダーに resources.resx ファイルが作成されます。 このファイルには、英語のリソース文字列を追加します。 編集 UI では、既定の String1 エントリが空白で表示されます。
- ファイルのプロパティにおけるアイテムの種類がPRI リソースであることを確認してください。
- タイトルでサポートされている各言語について、この手順を繰り返します。
注意
Microsoft Game Development Kit (GDK) タイトルに必要なファイル拡張子は .resw ファイルです。 Visual Studio では、この拡張子の追加はサポートされていません。そのため、resources.resx ファイルの名前を resources.resw に変更して、resources.pri ファイルを生成する際の問題を回避することをお勧めします。
MicrosoftGame.config ファイルの言語を更新します。
以下に示すように、MicrosoftGame.config ファイルの Resources
セクション下でサポートされている各言語を追加します。
<Resources>
<Resource Language="en-US"/>
<Resource Language="fr-FR"/>
<Resource Language="de-DE"/>
</Resources>
繁体字中国語を含むように、MicrosoftGame.config の言語を更新する
ゲームが繁体字中国語をサポートしているか、サポートする計画がある場合、zh-TW または zh-HK のいずれかが既にリストに表示されています。 以下に示すように、適切な言語フォールバックを確保するために、zh-SG と zh-CN もリストに追加します。
<Resources>
<Resource Language="en"/>
<Resource Language="en-US"/>
<Resource Language="en-GB"/>
<Resource Language="fr"/>
<Resource Language="fr-FR"/>
<Resource Language="de-DE"/>
<Resource Language="ja-JP"/>
<Resource Language="zh-TW"/>
<Resource Language="zh-SG"/>
<Resource Language="zh-CN"/>
</Resources>
Visual Studio ソリューション エクスプローラーでローカライズ可能な画像を追加する
MicrosoftGame.config には、Logo
、SmallLogo
、SplashScreen
向けの画像があります。 これらは言語ごとにローカライズできます。
パッケージ マニフェスト内のすべてのローカライズ可能なイメージについて次の手順に従います。
- プロジェクトのメイン フォルダーに、サポートする言語ごとの最上位サブフォルダーを作成します。
- Resource Files フォルダーを右クリックします。
- [Add (追加)] を選び、[New Fileter (新しいフィルター)] を選択します。
- 新しいフォルダーに「en-us」という名前を付け、目的のフォルダーを右クリックします。
- [Add (追加)] を選び、[Exiting Item (既存のアイテム)] を選択します。
- プロジェクトのフォルダーの en-us サブフォルダーに移動します。 ローカライズする画像をすべて選択します。
- 画像を右クリックし、[プロパティ] に移動します。
- [アイテムの種類] が [画像] に設定され、[コンテンツ] が [はい] に設定されていることを確認します。
- タイトルでサポートされている各言語について、この手順を繰り返します。
Logo
、SmallLogo
、SplashScreen
、および StoreLogo
のそれぞれについて、選択した言語がサポートされていない場合に使用する既定の画像を、パッケージのルート フォルダーに作成します。
MicrosoftGame.config ファイルの言語を更新します。
前の例のように、構成の Resources
セクションを更新します。
MicrosoftGame.config ファイルの言語パスを更新します。
作成された画像の名前を使用して、構成の画像パスを更新します。 既定の画像がパッケージのルート フォルダーに存在する必要があります。 すべての言語について、最初にその特定の言語フォルダーで画像 ファイルがチェックされ、使用可能な場合はそのファイルが使用されます。 それ以外の場合で、画像が言語フォルダーに見つからない場合または言語がサポートされていない場合 (つまり、言語フォルダーが存在しない場合) は、以下に示すように、ルート フォルダーの画像 ファイルが既定で使用されます。
<ShellVisuals DefaultDisplayName="ms-resource:AppName"
PublisherDisplayName="Publisher Display name"
StoreLogo="StoreLogo.png"
Square150x150Logo="Logo.png"
Square44x44Logo="SmallLogo.png"
Description="ms-resource:AppDescription"
BackgroundColor="#000040"
SplashScreenImage="SplashScreen.png"/>
注意
ルートにすべての言語フォルダーを作成する代わりに、フォルダー ( イメージなど) を作成し、このフォルダー内に言語フォルダーを作成できます。 既定の画像は、画像フォルダー (たとえば、C:\MyProject\Images など) に表示されます。 これにより、画像の整理に役立ちます。 タイトルは任意の方法でリソースを整理できます。 この場合は、パスは次のようになります。
<ShellVisuals DefaultDisplayName="ms-resource:AppName"
PublisherDisplayName="Publisher Display name"
StoreLogo="Images\StoreLogo.png"
Square150x150Logo="Images\Logo.png"
Square44x44Logo="Images\SmallLogo.png"
Description="ms-resource:AppDescription"
BackgroundColor="#000040"
SplashScreenImage="Images\SplashScreen.png"/>
タイトルのローカリゼーションに関するヒント
それぞれのフォルダーに配置した画像と文字列はすべて、resources.pri ファイルで自動的に使用されます。 すべての言語について、最初にその特定の言語フォルダーでリソースがチェックされ、使用可能な場合はそれが使用されます。 それ以外の場合で、画像が言語フォルダーに見つからない場合または言語がサポートされていない場合 (つまり、言語フォルダーが存在しない場合) は、既定のリソースが使用されます。
タイトル内とパッケージ リソースのローカリゼーションの違いに注意してください。 MicrosoftGame.config ファイルでは、既定のリソースを使用して、文字列や画像を解決します。 ただし、タイトル内の場合、GetUserDefaultLocaleName()
API によって返される言語を使用することをお勧めします。 前述のように、Microsoft Game Development Kit (GDK) コマンド プロンプトを使用して 次に示すように、resources.pri ファイルの内容を確認できます。
MakePri.exe dump /if resources.pri /of out.xml
注意
プロパティに次の値を持つ少なくとも 1 つのイメージ リソースを含めます。Image
としてItem Type
し、Yes
としてContent
します。 これは、ローカライズされた文字列が実行時に解決されるために必要です。 これを含めないと、リソース ファイルから解決されたタイトルの名前ではなく、"ms-resource:AppName" という名前が表示されます。
チャンク レイアウト
チャンク レイアウト ファイルは、ローカリゼーション プロセスの一部として生成される resources.pri ファイルを含むように更新する必要があります。 リソース ファイルを含める必要はありません。これらのファイルからのすべての文字列が resources.pri ファイルにパックされています。 しかし、マニフェスト ファイルで使用されているすべての画像 ファイルを含める必要があります。 resources.pri ファイルは画像 ファイルへのパスを示し、画像自体は含まれません。 チャンク レイアウト ファイルの起動チャンクにこれらの画像ファイルと resources.pri ファイルを含めます。
<Chunk Id="1000" Marker="Launch">
… (All required files)
<FileGroup DestinationPath="\Images" SourcePath="Images" Include="*.*"/>
<FileGroup DestinationPath="\Images\en-US" SourcePath="Images\en-US" Include="*.*"/>
<FileGroup DestinationPath="\Images\fr-FR" SourcePath="Images\fr-FR" Include="*.*"/>
… (Other language files)
<FileGroup DestinationPath="\" SourcePath="." Include="resources.pri"/>
</Chunk>
… (Other Chunks)
インテリジェント配信
レイアウト ファイル内のチャンクに言語とロケールをタグ付けすると、それらのチャンクに含まれているローカライズ済みコンテンツが、指定された値だけに関連付けられていることを示すことができます。 ローカライズされたコンテンツを分離すると、コンソールが設定された言語に必要なコンテンツのみをインストールすることで、ユーザーのインストール時間が短縮されます。 また、この分離によって、テストに関係しないタグ付きチャンクを除外するオプションが提供されるので、MakePkg.exe を使って作成されたインストール パッケージをテストする際のイテレーション時間も短縮することができます。 たとえば、フランス語のオーディオ ファイルをテストする場合は、フランス語のコンテンツ ファイルのみをプッシュすることで、 xbapp
install
コマンドに必要な時間を短縮できます。 これらの例について、次のレイアウト ファイルを検討してください。
<Chunk Id="1005" Languages="en-US">
<FileGroup DestinationPath="\assets\audio" SourcePath="." Include="en_us_commentary.mp3"/>
</Chunk>
<Chunk Id="1006" Languages="fr-FR">
<FileGroup DestinationPath="\assets\audio" SourcePath="." Include="fr_fr_commentary.mp3"/>
</Chunk>
<Chunk Id="1007" Languages="es-MX">
<FileGroup DestinationPath="\assets\audio" SourcePath="." Include="es_mx_commentary.mp3"/>
</Chunk>
<Chunk Id="1008" Languages="es-MX, en-US">
<FileGroup DestinationPath="\assets" SourcePath="." Include="mixed_content.dat"/>
</Chunk>
インテリジェント インストールを利用するために必要な手順は、レイアウト ファイルで Languages
タグを使用するだけです。
注意
インテリジェント配信では、 OnDemand
や Devices
など、他のいくつかのタグを使用することもできます。
インテリジェント配信およびチャンク レイアウト タグの包括的な概要を説明することはこのトピックの範疇ではありません。 詳細については、「Intelligent Delivery (インテリジェント配信)の概要」または「Intelligent Delivery: language specifiers (インテリジェント配信: 言語指定子)」を参照してください。
ユーザー エクスペリエンス
ローカライズされたアセットを分割する主な利点は、ユーザーのインストール サイズを削減できることです。
Languages
タグを使用したゲームのダウンロードをユーザーが開始した場合、コンソールは、ユーザーの設定に基づく適切な言語/ロケールに関連付けられていないチャンクからは、コンテンツをダウンロードしません。 ユーザーの言語やロケールがレイアウト ファイル内のいずれの Languages
タグにも含まれていない場合、システムは、ゲームプレイに必要なアセットを利用可能にするために、最も適切な代替の言語/ロケールを判断します。 次に、ユーザーの設定に応じて、上記のレイアウト ファイルのどのチャンクがダウンロードされるかを示します。
- ユーザーのコンソールが "en-US" に設定されている場合、コンソールには 1005 と 1008 のチャンクがインストールされます。
- ユーザーのコンソールが "fr-FR" に設定されている場合、コンソールには 1006 のチャンクだけがインストールされます。
- ユーザーのコンソールが "en-GB" に設定されている場合、システムは英国の英語に対する明示的なサポートがないことを確認します。 その場合、本体はサポートされている言語の中から最適な代替言語 (この場合は "en-US") を検索し、1005 と 1008 のチャンクをインストールします。
- ユーザーの言語設定に関係なく、
Languages
タグが含まれていないすべてのチャンクがダウンロードされます。
インテリジェント配信のテスト
インテリジェント配信は、ゲームのプレイに必要なインストール パッケージのサイズを小さくします。 インストール プロセスのテストは、GDK コマンド プロンプトから xbapp
install
コマンドを使用して最も簡単に実行できます。 GDN で公開されている StreamingInstall サンプルでは、レイアウト ファイルからインストール パッケージを作成し、それをテストのための開発用コンソールにインストールするための基本的な手順が示されています。
レイアウト ファイルにインテリジェント配信に必要なタグが含まれており、パッケージ パスのみを使用して xbapp
install
を実行するだけの場合、動作はリテール エクスペリエンスに似ています。 コンソールの設定とは異なる言語のタグが付けられているチャンクはインストールされません。
複数の言語とロケールをテストする場合は、/Languages
フラグを使用して、コンソールの設定に関係なく、複数の言語のすべてのチャンクを強制的にインストールします。
/AllChunks
フラグを使用すると、パッケージ全体がコンソールにインストールされます。
初期インストールの後にコンソール言語設定の変更をテストする場合は、/w
フラグが必要です。
これにより、コンソールと、インストールの完了後にパッケージをホスティングする開発 PC との間の接続が開いたままになります。 後でより多くのチャンクをインストールできます。 これは、/AllChunks
フラグを使用する場合にのみインストールされる、OnDemand
コンテンツをテストする場合に特に便利です。