共用方式為


MUI 基本概念說明

MUI 的必要條件

建置適用于 Windows Vista 和更新版本之 MUI 相容應用程式的基本必要條件,是根據 Windows 全球化指導方針來設計應用程式。

將原始程式碼與語言特定資源區隔

MUI 技術的基本部署之一是將應用程式原始程式碼與特定語言資源分開,以更有效率地在應用程式中啟用多語系案例。 程式碼和資源分離是透過不同的機制和一段時間的不同程度來達成,如下列各節所述。 每個方法在建置、部署及維護應用程式時提供不同程度的彈性。

建議的 MUI 相容應用程式解決方案是這裡概述的最後一種方法,也就是實際區隔應用程式原始程式碼和資源,資源本身會進一步細分為每個支援語言的一個檔案,以取得建置、部署和服務的最大彈性。

早期:程式碼和資源一起上線

一開始,當地語系化的應用程式是藉由編輯原始程式碼和變更資源 (通常是程式碼本身中的字串) ,然後重新編譯應用程式來建立。 這表示產生當地語系化的版本,必須複製原始原始程式碼、將文字 (資源轉譯) 原始程式碼中的元素,然後重新編譯程式碼。 下圖顯示需要當地語系化文字的應用程式程式碼。

此概念圖顯示包含內嵌文字資源單位的應用程式

雖然此方法可建立當地語系化的應用程式,但也有顯著的缺點:

  • 它需要多個版本的原始程式碼、至少一個用於來來源語言,以及每個目的語言的一個版本。 這會在同步處理應用程式的不同語言版本時產生重大問題。 特別是,當程式碼中需要修正瑕疵時,必須在原始程式碼的每個複本中修正瑕疵品, (每個語言) 一個。
  • 由於需要不是開發人員的當地語系化人員,因此在原始程式碼中進行修改,因此在程式碼完整性方面會產生相當大的風險,因此很容易發生錯誤。

這些缺點的組合讓這成為非常沒有效率的主張,而且需要更好的模型。

以邏輯方式分隔程式碼和可當地語系化的資源

上述模型的大幅改善是應用程式的程式碼和可當地語系化資源的邏輯區隔。 這會隔離程式碼與資源,並確保程式碼在當地語系化變更資源時維持不變。 從實作的觀點來看,字串和其他使用者介面元素會儲存在資源檔中,這相對容易轉譯,並以邏輯方式與程式碼區段分開。

在理想情況下,新增任何指定語言的支援可以像將可當地語系化的資源翻譯成這個新語言一樣簡單,而且使用這些翻譯的資源來建立新的當地語系化版本應用程式,而不需要修改任何程式碼。 下圖說明如何在應用程式中以邏輯方式分隔程式碼和可當地語系化的資源。

顯示應用程式的概念圖表,其中包含與程式碼分開的可當地語系化資源

此模型可讓您更輕鬆地建立應用程式的當地語系化版本,並大幅改善先前的模型。 此模型是透過使用資源管理工具所實作,在過去數年都非常成功,目前仍由許多應用程式經常使用。 不過,其有顯著的缺點:

  • 雖然以邏輯方式分隔,但程式碼和當地語系化資源仍會在一個可執行檔中實際聯結。 特別是,服務性仍然有問題,因為所有語言版本中的相同程式碼瑕疵 (相同,) 都需要每個語言的修補程式。 因此,如果有一個以 20 種語言寄送應用程式,服務修補程式就必須針對每個) 語言發出 20 次 (一次,即使程式碼只修正一次也一次。
  • 此模型無法充分支援多語系應用程式的散發和使用。 這在 OEM 和企業案例中可能是重大問題。 例如,如果要使用不同語言的兩位使用者之間共用電腦,則必須使用此模型安裝兩次應用程式,然後必須啟用某些機制,才能在兩個安裝之間替代。 這假設沒有任何額外的相依性可防止實作此案例。 下圖顯示需要兩個修補程式的單一程式碼瑕疵範例。

此概念圖顯示兩個具有相同程式碼瑕疵的當地語系化應用程式

很明顯地,雖然此模型在某些案例中運作良好,但其多語系應用程式的限制及其部署可能會非常有問題。

此模型的變化可減輕某些多語言應用程式問題,就是可當地語系化資源包含一組不同語言資源的模型。 此模型在相同應用程式中具有通用程式碼基底和數個不同語言的資源。 例如,應用程式可以在相同的套件中隨附英文、德文、法文、西班牙文、荷蘭文和義大利文。 下圖顯示包含多種語言資源的應用程式。

顯示與兩個地區設定特定資源分開之應用程式的概念圖表

此模型可讓您更輕鬆地在需要修正程式碼缺失時為應用程式提供服務,這是一項改進,但在支援其他語言時,不會改善先前的模型。 在此情況下,仍然需要發行新版本的應用程式 (,而且該版本可能很複雜,因此需要確保所有語言資源在相同的散發) 內同步處理。

實際分隔程式碼和資源

下一個進化步驟是實際分隔程式碼和資源。 在此模型中,資源會從程式碼中擷取,並在不同的實作檔案中實際分隔。 特別是,這表示程式碼可以真正獨立語言;應用程式的所有當地語系化版本實際上都隨附相同的實體程式碼。 下圖說明必須實際分隔程式碼和可當地語系化的資源。

顯示應用程式與其可當地語系化資源分開的概念圖表

此方法比先前的方法有數個優點:

  • 多語系解決方案的部署已大幅簡化。 新增任何指定語言的支援只需要寄送並安裝這個特定語言的新語言資源集。 當語言資源並非全部同時可用時,這特別重要。 透過此模型,您可以部署一組核心語言的應用程式,並隨著時間增加支援的語言數目,而不需要修改或重新部署實際程式碼。 這項優點會由後援機制進一步擴充,其可藉由確保此慣用語言中找不到的資源「後援」到使用者也瞭解的另一種語言,讓特定語言的部分當地語系化應用程式和系統元件。 整體來說,此模型有助於減輕全球公司在以多種語言部署應用程式時所面對的相當負擔,因為它能夠以更有效率的方式進行單一映射部署。
  • 服務性已改善。 程式碼缺失只需要修正並部署一次,因為程式碼完全與當地語系化無關。 使用此模型時,如果變更與 UI 無關,就發出程式碼瑕疵的修正,比先前任何模型更簡單且符合成本效益。

動態載入語言特定資源

實際 分隔原始程式碼與特定語言資源,以及為應用程式建置語言中性核心二進位檔的 MUI 基本概念,基本上會設定一個架構,以根據使用者和系統語言設定實作語言特定資源的動態載入。

組合至語言中性核心二進位檔的應用程式原始程式碼可以利用 Windows 平臺中的 MUI API,為指定的內容擷取適當的顯示使用者介面語言選取專案。 MUI 支援下列方式:

  • 根據系統、使用者和應用層級、使用者層級和系統層級設定,建構顯示使用者介面語言的優先順序清單。
  • 實作後援機制,根據當地語系化資源的可用性,從此優先的語言清單中選擇適當的候選項目。

動態載入具有優先後援的使用者介面資源優點如下:

  • 它允許特定語言中的應用程式和系統元件部分當地語系化,因為此慣用語言中找不到的資源會自動回復到優先清單上的下一種語言。
  • 它可讓您以動態方式從一種語言切換到另一種語言等案例。
  • 它允許建立涵蓋 OEM 和企業一組語言的區域或全球單一部署映射。

建置 MUI 應用程式

上一節概述將原始程式碼與語言特定資源分開的選項,以及能夠利用核心 Windows 平臺 API 動態載入當地語系化資源的結果優點。 雖然這些是指導方針,但也應該指出沒有針對 Windows 平臺開發 MUI 應用程式的特定規范方式。

應用程式開發人員對於處理各種使用者介面語言設定、資源建立選項和資源載入方法的方式有完整選擇。 開發人員可以評估本檔中提供的指導方針,並選擇符合其需求和開發環境的組合。

下表摘要說明想要為 Windows 平臺建立 MUI 應用程式的應用程式開發人員可用的不同設計選項。

使用者介面語言設定 資源建立 資源載入
遵循作業系統${REMOVE}$ 中的 UI 語言設定
分割資源二進位 (MUI 資源技術中的單一語言)
-或-
非分割資源二進位檔中的多種語言
應用程式會呼叫標準資源載入函式。 資源會以符合作業系統設定的語言傳回。
應用程式特定的資源機制
應用程式會呼叫 MUI API,從作業系統擷取執行緒慣用 UI 語言或進程慣用 UI 語言,並使用這些設定來載入自己的資源。
應用程式特定的 UI 語言設定${REMOVE}$
分割資源二進位檔中的單一語言
-或-
非分割資源二進位檔中的多種語言
應用程式會呼叫 MUI API 來設定應用程式特定的 UI 語言或程式慣用 UI 語言,然後呼叫標準資源載入函式。 資源會以應用程式或系統語言所設定的語言傳回。
-或-
應用程式會以特定語言探查資源,並從擷取的二進位資料處理自己的資源擷取。
應用程式特定的資源機制
應用程式會管理自己的資源載入。