确定主机区域设置和语言

可使用 GetUserDefaultLocaleName API 检索区域设置名称。 在这种情况下,User 就是登录会话。 此 API 实际上检索设置主机的区域设置,如下所示。

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

游戏一般不关心设备上指定的区域设置或语言。 它们真正关心的是它们应该加载的语言资源。 概括而言,建议在游戏包中选择与用户在设备上选择的语言“最接近”的语言。 三个因素促成了这一选择:

  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

在主机中,用户选择“法语”作为语言设置,选择“法国(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

在主机中,用户选择“英语”作为语言设置,选择“英国(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 的 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. 如果上述两种情况均不符合,则选择 Resources 部分中的第一个区域设置。
  4. 如果用户选择的语言中没有区域设置,则返回 Resources 部分中的第一个区域设置项。
  5. 如果 microsoftgame.config 中没有列出任何语言,则 XPackageGetUserLocale 返回主机语言。

另请参阅

GetUserDefaultLocaleName
XPackageGetUserLocale
本地化和全球化
MicrosoftGame.config 本地化