本体の位置情報と言語を確認する
ロケール名は、GetUserDefaultLocaleName API を使用して取得できます。 この場合の User
は、単なるサインイン セッションです。 この API は、実際には、次のように本体に設定されているロケールを取得します。
wchar_t localeName[LOCALE_NAME_MAX_LENGTH];
int retVal = GetUserDefaultLocaleName( localeName, ARRAYSIZE( localeName ) );
// The value is returned in localeName.
一般的に、ゲームではデバイスに指定されたロケールや言語は特に問題ではありません。 ゲームで本当に問題とされるのは、どのような言語リソースを読み込むべきかということです。 大まかに言えば、ユーザーがデバイスで選択した内容に "最も近い" ゲーム パッケージの言葉を選択することが推奨されます。 この選択の対象となる言語は 3 つあります。
- ゲームの microsoftgame.config で宣言されている言語。
- パッケージのレイアウト ファイルで宣言されている言語。
- デバイスで選択されている言語。
「最も近い」言語を選択することは難しい場合もあります。 これを実際に簡単にするために、開発者は XPackageGetUserLocale 関数を使うことができます。 これは常に「最も近い」言語を返します。 ゲームは、この言語を使用して読み込むゲーム リソースを決定します。 次のコードは、この関数の使用例を示しています。
char gameLocale[LOCALE_NAME_MAX_LENGTH];
// Get the best user locale that is installed
HRESULT hr = XPackageGetUserLocale(_countof(gameLocale), gameLocale);
if (SUCCEEDED(hr))
{
printf("Game using locale: %s\n", gameLocale);
}
可能性のあるいくつかのシナリオについて以下の例で説明します。
例 1
コンソールで、ユーザーは [言語] 設定に [フランス語] を選択し、[国や地域] 設定に [France (fr-FR) (フランス (fr-FR))] を選択します。 ユーザーのロケールは fr-FR になります。 ユーザーが所有するゲームでは、microsoftgame.config の Resources
セクションに次の内容が含まれています。
<Resources>
<Resource Language="en-US"/>
<Resource Language="fr-FR"/>
<Resource Language="de-DE"/>
<Resource Language="en-GB"/>
</Resources>
これは、ゲームの文字列/イメージが英語 - 米国 (en-US)、フランス語 - フランス (fr-FR)、ドイツ語 - ドイツ (de-DE)、英語 - 英国 (en-GB) にローカライズされていることを意味します。 ユーザーのロケールがマニフェストでサポートされるロケールと一致しているため、XPackageGetUserLocale
は値 fr-FR を返します。 すべてのゲーム内のテキストは、フランス語 (fr-FR) 設定で表示されます。
XPackageGetUserLocale
の戻り値は fr-FR です。
GetUserDefaultLocaleName
の戻り値も fr-FR です。
例 2
コンソールで、ユーザーは [言語] 設定に [英語] を選択し、[国や地域] 設定に [UK (en-GB) (英国 (en-GB))] を選択します。 ユーザーのロケールは en-GB になります。 ユーザーが所有するゲームでは、microsoftgame.config の Resources
セクションに次の内容が含まれています。
<Resources>
<Resource Language="en-US"/>
<Resource Language="fr-FR"/>
<Resource Language="de-DE"/>
</Resources>
ユーザーのロケールはマニフェストにないので、同じ言語 (英語) のフォールバック ロケールが既定の言語として選択されます。 この場合は en-US なので、XPackageGetUserLocale
はこの値を返します。 すべてのゲーム内テキストは英語 (en-US) になります。
XPackageGetUserLocale
の戻り値は en-US です。
GetUserDefaultLocaleName
の戻り値は en-GB です。
GetUserDefaultLocaleName
は、ゲームが宣言した内容とは無関係に、コンソールに設定された内容を返すことにご注意ください。
例 3
前の例に似たシナリオで、本体でのユーザーの設定によってユーザーのロケールは fr-FR になっています。
MicrosoftGame.config contains の Resources
セクションに、次の内容が含まれます。
<Resources>
<Resource Language="en-US"/>
<Resource Language="de-DE"/>
</Resources>
ユーザーのロケールは .config ファイルになく、同じ言語の他のロケールもないので、Resources
タグの最初の言語 (en-US) が既定の言語として選択されます。
XPackageGetUserLocale
はこの値を返します。 すべてのゲーム内テキストは英語 (en-US) になります。
XPackageGetUserLocale
の戻り値は en-US です。
GetUserDefaultLocaleName
の戻り値は fr-FR です。
サマリー
コンソールのロケールは GetUserDefaultLocaleName
によって返されます。 これは、ゲームが宣言した内容とは無関係に、ユーザーがデバイスに設定した内容を返します。
言語は XPackageGetUserLocale
によって返され、次のようにして決まります。
- ユーザーが選択したロケールが microsoftgame.config に存在する場合は、そのロケールが返されます。
- ロケールが microsoftgame.config ファイルに存在しない場合は、同じ言語の他のロケールが検索されます。 同じ言語のロケールが複数ある場合は、最善のフォールバック ロケールが返されます。 フォールバック言語はユーザーのロケールに基づきます。
- 前述の 2 つの状況が当てはまらない場合は、
Resources
セクションの最初のロケールが選択されます。 - ユーザーが選択した言語にロケールがない場合は、
Resources
セクションの最初のロケール エントリが返されます。 - microsoftgame.config に言語がまったく一覧されていない場合、
XPackageGetUserLocale
はコンソール言語を返します。
関連項目
GetUserDefaultLocaleName
XPackageGetUserLocale
ローカライズとグローバリゼーション
MicrosoftGame.config のローカリゼーション