智能交付:语言说明符
语言说明符声明区块中的内容适用的语言。 如果你在安装包中用一个或多个语言说明符标记了某一区块,则在安装时,主机执行以下操作。
确定哪个区块是用户所需语言和程序包中语言之间的最佳匹配
仅下载为该语言标记的区块以及不具有语言说明符的区块
如果找不到完全匹配,则可以使用语言说明符声明回退语言。
识别语言的安装
智能交付语言说明符标记内容,以便在主机上仅安装一个程序包中所有本地化资产的一部分。 这可为执行数字安装的客户节省带宽,并且为所有客户节省硬盘空间。
要指示内容是特定于一个或多个语言的,请在您的 layout.xml 文件上将 Languages
属性添加到某一区块中。 以下示例显示一个区块,该区块将仅安装在已确定法语作为运行该主机所用语言的最佳匹配的主机上。 该区块将安装在使用加拿大区域性 (fr-CA) 或法语区域性 (fr-FR) 设置为法语的主机上。 不具有语言说明符的区块将安装在所有主机上,除非通过使用其他说明符(例如设备类型)排除了该主机。
<Chunk Id="1001" Languages="fr">
<FileGroup DestinationPath="\Data\Maps\X1\fr" SourcePath="Y:\Maps\Level1\X1\fr" Include="*.map"/>
<Chunk>
确定用户选择的语言
使用 XPackageGetUserLocale 函数查询操作系统确定的区域设置的名称,以便与用户系统上的游戏安装最好地匹配。
返回的区域设置由一个算法决定,该算法将大致执行以下操作,以基于用户的所有可用数据确定可能最好的匹配项。
- 将生成与用户的当前语言设置最佳匹配的语言列表。
- 将生成在 MicrosoftGame.config/manifest 中声明的所有语言的列表。
- 将生成当前已安装并在程序包中可用的所有语言的列表。
- 清单中声明的第一种语言是语言选择的最终回退。
- 结果将始终为在 MicrosoftGame.config/manifest 中声明的语言,如果未声明任何语言,则为用户语言。
注意
使用的算法可能会随着时间的推移而更改,并且不一定与上述描述完全相同。
XPackageGetUserLocale 返回的语言不一定会匹配 GetUserDefaultLocaleName 或其他与区域语言支持 (NLS) 和本地化相关的 Win32 API 函数返回的语言,因此应优先调用。
有关 MicrosoftGame.config 中本地化和语言设置的详细信息,请参阅区域语言支持 API 和本地化 GDK 示例。
注意
必须确保在你的 layout.xml 文件中引用的所有语言也存在于你的 MicrosoftGame.config 文件中。 否则,MakePkg 工具将生成一个错误。
用户切换到另一种语言后启动游戏时的行为
如果用户启动您的游戏,并且该用户的最佳区域设置作为程序包的一部分提供,但尚未安装(例如,用户在您的游戏未运行时切换了语言),则下次您的游戏启动时,将向其提供安装最佳匹配语言的机会。
注意
如果用户选择安装某一语言,则在新语言下载之前,仍可以用以前选择的已安装语言运行游戏。 我们假定,如果它们以另一种语言启动,则可能要理解该语言,并且可能想要在玩游戏的同时等待其首选语言下载。
请注意,此行为已给许多开发者带来困惑。 测试时,应通过在启动游戏之前监视游戏安装队列,确认新语言已完成安装。 如果用户选择安装语言 XPackageGetUserLocale,直到该语言下载完成后,才会报告该语言。
在您的游戏中提供其他语言
某些游戏允许用户选择一种语言(作为首次玩游戏的一部分或通过菜单),而不考虑主机的语言设置。 在安装时,智能交付将根据主机的语言设置以及在 layout.xml 文件中指定的语言,对于某一特定程序包仅安装一种语言。 默认情况下,您的游戏应该用此语言呈现。
此外,Xbox Shell 允许安装次要语言。 您可以通过使用自己的 UI 从您的游戏内公开此选项。 您的游戏可通过调用 XPackageEnumeratePackages 方法确定可用于安装的语言。 根据所选语言和安装源上的语言,安装可能来自某一磁盘或来自 Xbox Live。 在用户选择的语言并非默认语言时,您的游戏应该调用 XPackageFindChunkAvailability 方法以便确定使用该语言标记的区块的安装状态。 该 API 返回具有下表所示值之一的 XPackageChunkAvailability 对象。
状态 | 说明 |
---|---|
就绪 | 该区块已安装并且可以读取。 |
待处理 | 该区块尚未安装但将安装。 |
可安装 | 该区块将不安装,但可以下载它。 要安装资产,请使用相应的说明符调用 XPackageInstallChunks 方法。 |
不可用 | 无法下载该区块 |
如果 XPackageChunkAvailability 返回 Unavailable,则指定的语言不可联机使用,或者不可在磁盘上的游戏版本中使用。
如果某一用户选择安装可用、但当前未安装的语言,则您的游戏应使用指定要安装的语言的 XPackageChunkSelector 对象调用 XPackageInstallChunks 方法。 此调用显示系统呈现的 UI,该 UI 会提示用户接受其他下载和安装。 您的游戏可以将返回的安装监视器句柄与 XPackageGetInstallationProgress 方法或 XPackageRegisterInstallationProgressChanged 方法一起使用,以便监视新数据的下载和安装,或者确定用户是否拒绝了附加安装。
您的游戏可以通过调用 XPackageUninstallChunks 方法卸载某一语言。 如果只安装了一种语言,会自动忽略该调用。
对 Xbox One 软件开发工具包所做的更改
如果你之前在 Xbox One 软件开发工具包上使用过智能交付,请注意声明和映射语言的方式不同。 如果你已向块添加了 Languages
属性,则还必须在 MicrosoftGame.config 中声明该语言。现在要根据最佳匹配语言的单个值来确定安装语言的哪些区块。 例如,如果您的布局文件中包含一个标记为“en”的区块和另一个标记为“en-US”的区块,如果用户的语言设置为“en-US”,将不会安装“en”区块。 如果想要该传统行为,请在声明该块时加入其应该安装的所有语言: en;en-US。