> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Intelligent Delivery：語言規範

> Intelligent Delivery：語言規範

語言規範會宣告區塊中的內容適用於哪種語言。如果您以一或多個語言規範標記安裝套件中的區塊，主機會在安裝時執行下列動作。

1. 判斷哪些區塊在使用者所需語言與套件中的語言之間最相符

2. 只下載標記為該語言的區塊，以及沒有語言規範的區塊

如果找不到完全相符的項目，可以使用語言規範宣告後援語言。

<a id="ID4EV" />

## 感知語言的安裝

Intelligent Delivery 語言規範會標記內容，讓套件中所有當地語系化資產只有一部分會安裝在主機上。這可為以數位方式安裝的客戶節省頻寬，也能為所有客戶節省硬碟空間。

若要表示內容專屬於一或多種語言，請在 layout.xml 檔案中的區塊加上 `Languages` 屬性。下列範例顯示的區塊，只會安裝在已判定法文為其執行語言最佳相符項目的主機上。此區塊會安裝在設定為法文且地區設定為加拿大 (fr-CA) 或法國 (fr-FR) 的主機上。沒有語言規範的區塊會安裝在所有主機上，除非它被其他規範 (例如裝置類型) 排除。

```xml theme={null}
<Chunk Id="1001" Languages="fr">
    <FileGroup DestinationPath="\Data\Maps\X1\fr" SourcePath="Y:\Maps\Level1\X1\fr" Include="*.map"/>
<Chunk>  
```

<a id="ID4EQB" />

## 判斷使用者選擇的語言

使用 [XPackageGetUserLocale](/zh-TW/reference/system/xpackage/functions/xpackagegetuserlocale) 函式查詢作業系統判定
與使用者系統上的遊戲安裝最相符的地區設定
名稱。

傳回的地區設定由一個演算法決定，該演算法大致會執行下列動作，
依據使用者的所有可用資料判斷最佳的相符項目。

1. 產生與使用者目前語言設定最相符的語言清單。
2. 產生 MicrosoftGame.config/資訊清單中宣告的所有語言清單。
3. 產生套件中目前已安裝且可用的所有語言清單。
4. 資訊清單中宣告的第一個語言，是語言選取的最終後援。
5. 結果一律會是 MicrosoftGame.config/資訊清單中宣告的語言；如果未宣告任何語言，則為使用者語言。

<Note>
  使用的演算法可能會隨時間變更，且不一定與
  上述說明完全相同。
</Note>

[XPackageGetUserLocale](/zh-TW/reference/system/xpackage/functions/xpackagegetuserlocale) 傳回的語言不一定會
與 **GetUserDefaultLocaleName** 或其他國家語言支援 (NLS) 及當地語系化相關 Win32 API 函式傳回的語言相符，因此應優先呼叫此函式。

如需當地語系化及 MicrosoftGame.config 中語言設定的詳細資訊，請參閱
National Language Support API 和 Localization GDK 範例。

<Note>
  您必須確保 layout.xml 檔案中參照的所有語言也都存在於 MicrosoftGame.config 檔案中。如果不是如此，MakePkg 工具會產生錯誤。
</Note>

<a id="BehaviorOnLaunch" />

## 使用者切換至不同語言後啟動遊戲時的行為

如果使用者啟動您的遊戲，而使用者的最佳地區設定可在您的套件中取得
但尚未安裝 (例如，使用者在您的遊戲未執行時切換了語言)，
則下次啟動您的遊戲時，系統會讓使用者選擇是否安裝最相符的語言。

<Note>
  如果使用者選擇安裝某種語言，在新語言下載完成之前，他們仍可*以先前選擇的已安裝語言*
  執行遊戲。我們假設
  如果使用者一開始使用另一種語言，他們很可能理解該語言，並可能想在
  等待其*偏好*語言下載期間遊玩遊戲。

  請注意，此行為曾讓許多開發人員感到困惑。測試時，您應該在啟動遊戲之前
  監視遊戲安裝佇列，以確認
  新語言已完成安裝。如果使用者選擇安裝某種語言，[XPackageGetUserLocale](/zh-TW/reference/system/xpackage/functions/xpackagegetuserlocale)
  在該語言下載完成之前不會回報該語言。
</Note>

<a id="ID4E5B" />

## 在遊戲中提供其他語言

有些遊戲允許使用者選擇語言 (在初次遊玩時或透過選單)，而不考慮主機的語言設定。在安裝時，Intelligent Delivery 會依據主機的語言設定和 layout.xml 檔案中指定的語言，只為特定套件安裝一種語言。您的遊戲預設應以此語言呈現。

此外，XBOX 殼層允許安裝次要語言。您可以使用自己的 UI，從遊戲內公開此選項。您的遊戲可以呼叫 [XPackageEnumeratePackages](/zh-TW/reference/system/xpackage/functions/xpackageenumeratepackages) 方法來判斷可安裝的語言。依據所選語言和安裝來源，安裝可能來自光碟或 XBOX Live。當使用者選取預設以外的語言時，您的遊戲應呼叫 [XPackageFindChunkAvailability](/zh-TW/reference/system/xpackage/functions/xpackagefindchunkavailability) 方法，以判斷標記為該語言之區塊的安裝狀態。此 API 會傳回 [XPackageChunkAvailability](/zh-TW/reference/system/xpackage/enums/xpackagechunkavailability) 物件，其值為下表所示的其中之一。

| 狀態 | 描述 |
| - | - |
| Ready | 區塊已安裝且可供讀取。 |
| Pending | 區塊尚未安裝，但將會安裝。 |
| Installable | 區塊不會被安裝，但可以下載。若要安裝資產，請以適當的規範呼叫 [XPackageInstallChunks](/zh-TW/reference/system/xpackage/functions/xpackageinstallchunks) 方法。 |
| Unavailable | 無法下載區塊 |

如果 [XPackageChunkAvailability](/zh-TW/reference/system/xpackage/enums/xpackagechunkavailability) 傳回 *Unavailable*，表示指定的語言無法在線上或光碟上的遊戲版本中取得。

如果使用者選擇安裝可用但目前未安裝的語言，您的遊戲應以指定要安裝之語言的 [XPackageChunkSelector](/zh-TW/reference/system/xpackage/structs/xpackagechunkselector) 物件呼叫 [XPackageInstallChunks](/zh-TW/reference/system/xpackage/functions/xpackageinstallchunks) 方法。此呼叫會顯示系統轉譯的 UI，提示使用者接受額外的下載和安裝。您的遊戲可以使用傳回的安裝監視器控制代碼，搭配 [XPackageGetInstallationProgress](/zh-TW/reference/system/xpackage/functions/xpackagegetinstallationprogress) 方法或 [XPackageRegisterInstallationProgressChanged](/zh-TW/reference/system/xpackage/functions/xpackageregisterinstallationprogresschanged) 方法，來監視新資料的下載和安裝，或判斷使用者是否已拒絕額外的安裝。

您的遊戲可以呼叫 [XPackageUninstallChunks](/zh-TW/reference/system/xpackage/functions/xpackageuninstallchunks) 方法來解除安裝語言。如果只安裝了一種語言，此呼叫會被無聲忽略。

<a id="ID4EYE" />

## 與 XBOX One 軟體開發套件的差異

如果您先前曾在 XBOX One 軟體開發套件上使用 Intelligent Delivery，請注意語言的宣告和對應方式有所不同。如果您已在區塊中加入 `Languages` 屬性，該語言也必須在 MicrosoftGame.config 中宣告。現在判斷要為某語言安裝哪些區塊，是以最相符語言的單一值為依據。例如，如果您的配置檔案包含一個標記為 'en' 的區塊和另一個標記為 'en-US' 的區塊，當使用者的語言設定為 'en-US' 時，將不會安裝 'en' 區塊。如果您想要這種舊版行為，請以區塊應安裝的所有語言來宣告該區塊：en;en-US。

## 參考 API 文件

* [XPackage (API 內容)](/zh-TW/reference/system/xpackage/xpackage_members)
  * 函式
    * [XPackageGetUserLocale](/zh-TW/reference/system/xpackage/functions/xpackagegetuserlocale)
    * [XPackageEnumeratePackages](/zh-TW/reference/system/xpackage/functions/xpackageenumeratepackages)
    * [XPackageFindChunkAvailability](/zh-TW/reference/system/xpackage/functions/xpackagefindchunkavailability)
    * [XPackageInstallChunks](/zh-TW/reference/system/xpackage/functions/xpackageinstallchunks)
    * [XPackageGetInstallationProgress](/zh-TW/reference/system/xpackage/functions/xpackagegetinstallationprogress)
    * [XPackageRegisterInstallationProgressChanged](/zh-TW/reference/system/xpackage/functions/xpackageregisterinstallationprogresschanged)
    * [XPackageUninstallChunks](/zh-TW/reference/system/xpackage/functions/xpackageuninstallchunks)
  * 結構
    * [XPackageChunkSelector](/zh-TW/reference/system/xpackage/structs/xpackagechunkselector)

## 另請參閱

[Intelligent Delivery](/zh-TW/build/core-features/common/packaging/overviews/intelligentdelivery)


## Related topics

- [XBOX 主機遊戲的認證測試 XBOX 需求](/zh-TW/publishing/certification/console-cert-tested-requirements.md)
- [Intelligent Delivery](/build/core-features/common/packaging/overviews/intelligentdelivery.md)
- [Intelligent Delivery: device specifiers](/build/core-features/common/packaging/intelligentdelivery-device.md)
- [Intelligent Delivery: features and recipes](/build/core-features/common/packaging/intelligentdelivery-features-recipes.md)
- [Intelligent Delivery: language specifiers](/build/core-features/common/packaging/intelligentdelivery-language.md)
