次の方法で共有


本体の位置情報と言語を確認する

ロケール名は、GetUserDefaultLocaleName API を使用して取得できます。 この場合の User は、単なるサインイン セッションです。 この API は、実際には、次のように本体に設定されているロケールを取得します。

wchar_t localeName[LOCALE_NAME_MAX_LENGTH];
int retVal = GetUserDefaultLocaleName( localeName, ARRAYSIZE( localeName ) );
// The value is returned in localeName.

一般的に、ゲームではデバイスに指定されたロケールや言語は特に問題ではありません。 ゲームで本当に問題とされるのは、どのような言語リソースを読み込むべきかということです。 大まかに言えば、ユーザーがデバイスで選択した内容に "最も近い" ゲーム パッケージの言葉を選択することが推奨されます。 この選択の対象となる言語は 3 つあります。

  1. ゲームの microsoftgame.config で宣言されている言語。
  2. パッケージのレイアウト ファイルで宣言されている言語。
  3. デバイスで選択されている言語。

「最も近い」言語を選択することは難しい場合もあります。 これを実際に簡単にするために、開発者は 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 によって返され、次のようにして決まります。

  1. ユーザーが選択したロケールが microsoftgame.config に存在する場合は、そのロケールが返されます。
  2. ロケールが microsoftgame.config ファイルに存在しない場合は、同じ言語の他のロケールが検索されます。 同じ言語のロケールが複数ある場合は、最善のフォールバック ロケールが返されます。 フォールバック言語はユーザーのロケールに基づきます。
  3. 前述の 2 つの状況が当てはまらない場合は、Resources セクションの最初のロケールが選択されます。
  4. ユーザーが選択した言語にロケールがない場合は、Resources セクションの最初のロケール エントリが返されます。
  5. microsoftgame.config に言語がまったく一覧されていない場合、XPackageGetUserLocale はコンソール言語を返します。

関連項目

GetUserDefaultLocaleName
XPackageGetUserLocale
ローカライズとグローバリゼーション
MicrosoftGame.config のローカリゼーション