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

# Intelligent Delivery：語言規範

> Intelligent Delivery：語言規範

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

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

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

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

## 感知語言的安裝

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>  
```

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

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

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

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

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

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

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

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

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

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

> [!NOTE]
>
> 如果使用者選擇安裝某種語言，在新語言下載完成之前，他們仍可*以先前選擇的已安裝語言*
> 執行遊戲。我們假設
> 如果使用者一開始使用另一種語言，他們很可能理解該語言，並可能想在
> 等待其*偏好*語言下載期間遊玩遊戲。
>
> 請注意，此行為曾讓許多開發人員感到困惑。測試時，您應該在啟動遊戲之前
> 監視遊戲安裝佇列，以確認
> 新語言已完成安裝。如果使用者選擇安裝某種語言，[XPackageGetUserLocale](https://docs.xbox.com/zh-TW/reference/system/xpackage/functions/xpackagegetuserlocale.md)
> 在該語言下載完成之前不會回報該語言。

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

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

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

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

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

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

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

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

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

## 參考 API 文件

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

## 另請參閱

[Intelligent Delivery](https://docs.xbox.com/zh-TW/build/core-features/common/packaging/overviews/intelligentdelivery.md)


## Related topics

- [Intelligent Delivery](https://docs.xbox.com/zh-TW/build/core-features/common/packaging/overviews/intelligentdelivery.md)
- [XBOX Game Streaming 的開發最佳做法](https://docs.xbox.com/zh-TW/build/core-features/common/game-streaming/game-streaming-optimizing-your-game.md)
- [Intelligent Delivery：裝置規範](https://docs.xbox.com/zh-TW/build/core-features/common/packaging/intelligentdelivery-device.md)
- [Intelligent Delivery：功能與配方](https://docs.xbox.com/zh-TW/build/core-features/common/packaging/intelligentdelivery-features-recipes.md)
- [開始使用適用於 PC 的 MSIXVC2 封裝](https://docs.xbox.com/zh-TW/build/core-features/common/packaging/overviews/packaging-getting-started-for-PC-msixvc2.md)
