确定主机区域设置和语言
可使用 GetUserDefaultLocaleName API 检索区域设置名称。 在这种情况下,User
就是登录会话。 此 API 实际上检索设置主机的区域设置,如下所示。
wchar_t localeName[LOCALE_NAME_MAX_LENGTH];
int retVal = GetUserDefaultLocaleName( localeName, ARRAYSIZE( localeName ) );
// The value is returned in localeName.
游戏一般不关心设备上指定的区域设置或语言。 它们真正关心的是它们应该加载的语言资源。 概括而言,建议在游戏包中选择与用户在设备上选择的语言“最接近”的语言。 三个因素促成了这一选择:
- 游戏的 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
在主机中,用户选择“法语”作为语言设置,选择“法国(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
基于以下条件返回语言:
- 如果用户的选定区域设置存在于 microsoftgame.config 文件中,它返回该区域设置。
- 如果该区域设置未在 microsoftgame.config 文件中提供,它将查找具有相同语言的其他区域设置。 如果该文件中有多个具有相同语言的区域设置,它返回最佳的回退区域设置。 回退语言基于用户的区域设置。
- 如果上述两种情况均不符合,则选择
Resources
部分中的第一个区域设置。 - 如果用户选择的语言中没有区域设置,则返回
Resources
部分中的第一个区域设置项。 - 如果 microsoftgame.config 中没有列出任何语言,则
XPackageGetUserLocale
返回主机语言。
另请参阅
GetUserDefaultLocaleName
XPackageGetUserLocale
本地化和全球化
MicrosoftGame.config 本地化