WPF 的全球化

本主題介紹撰寫適用于全球市場的 Windows Presentation Foundation (WPF) 應用程式時應該注意的問題。 全球化程式設計項目定義于 命名空間中的 System.Globalization .NET 中。

XAML 全球化

可延伸的應用程式標記語言 (XAML) 是以 XML 為基礎,並利用 XML 規格中定義的全球化支援。 下列各節說明您應該注意的一些 XAML 功能。

字元參考

字元參考會提供它所代表之特定 Unicode 字元的 UTF16 程式碼單位,以十進位或十六進位為單位。 下列範例顯示 COPTIC 大寫字母 HORI 或 'Ϩ' 的十進位字元參考:

Ϩ

下列範例顯示十六進位字元參考。 請注意,它的十六進位數字前面有 x

Ϩ

編碼方式

XAML 支援的編碼方式為 ASCII、Unicode UTF-16 和 UTF-8。 編碼語句位於 XAML 檔的開頭。 如果沒有任何編碼屬性,而且沒有位元組順序,則剖析器預設為 UTF-8。 UTF-8 和 UTF-16 是慣用的編碼。 不支援 UTF-7。 下列範例示範如何在 XAML 檔案中指定 UTF-8 編碼。

?xml encoding="UTF-8"?

語言屬性

XAML 會使用 xml:lang 來表示專案的語言屬性。 若要利用 類別 CultureInfo ,語言屬性值必須是 預先 CultureInfo 定義的文化特性名稱之一。 xml:lang 在項目樹狀結構中為可繼承 (依 XML 規則,不一定是因為相依性屬性繼承),如未明確指派,其預設值為空字串。

語言屬性非常適用于指定區域語言。 例如,法國、魁北克、比利時和瑞士的法文拼字、字彙和發音不同。 此外,中文、日文和韓文在 Unicode 中共用字碼點,但表像圖案不同,而且它們使用完全不同的字型。

下列 Extensible Application Markup Language (XAML) 範例會使用 fr-CA 語言屬性來指定加拿大法文。

<TextBlock xml:lang="fr-CA">Découvrir la France</TextBlock>

Unicode

XAML 支援所有 Unicode 功能,包括 Surrogates。 只要字元集可以對應到 Unicode,就支援它。 例如,GB18030 推出可對應至中文、日文和韓文 (CFK) 延伸模組 A 和 B 及 surrogate 字組的某些字元,因此受到完整支援。 WPF 應用程式可用來 StringInfo 操作字串,而不需要瞭解字串是否有代理字組或結合字元。

使用 XAML 設計國際化的使用者介面

本節說明撰寫應用程式時應考慮的使用者介面 (UI) 功能。

國際文字

WPF 包含所有 Microsoft .NET Framework 支援的寫入系統的內建處理。

目前支援下列指令碼︰

  • 阿拉伯文

  • 孟加拉文

  • 梵文字母

  • 古斯拉夫文

  • 希臘文

  • 古吉拉特文

  • 果魯穆奇文

  • Hebrew

  • 表意指令碼

  • 坎那達文

  • 寮文

  • 拉丁文

  • 馬來亞拉姆文

  • 蒙古文

  • 歐迪亞文

  • 敘利亞文

  • 坦米爾文

  • 泰盧固文

  • 塔安那文

  • 泰文*

  • 西藏文

*本版支援泰文文字的顯示和編輯,不支援斷詞。

目前不支援下列指令碼︰

  • 高棉文

  • 古韓文

  • 緬甸

  • 僧伽羅文

所有撰寫系統引擎都支援 OpenType 字型。 OpenType 字型可以包含 OpenType 版面配置表格,讓字型建立者能夠設計更好的國際和高端印刷字型。 OpenType 字型版面配置表格包含圖像替代、圖像定位、對齊和基準定位的相關資訊,可讓文字處理應用程式改善文字版面配置。

OpenType 字型允許使用 Unicode 編碼處理大型圖像集。 這類編碼促進廣泛的國際支援以及各種印刷樣式字符。

WPF 文字轉譯是由支援解析度獨立性的 Microsoft ClearType 子圖元技術所提供。 這會大幅改善可讀性,並可讓您支援所有指令碼的高品質雜誌樣式文件。

國際版面配置

WPF 提供非常方便的方式來支援水準、雙向和垂直版面配置。 在簡報架構中, FlowDirection 屬性可用來定義版面配置。 流程方向模式有︰

  • LeftToRight - 拉丁文、東亞等的水平配置。

  • RightToLeft - 阿拉伯文、希伯來文等的雙向配置。

開發可當地語系化的應用程式

當您撰寫供全域使用的應用程式時,您應該記住應用程式必須是可當地語系化。 下列主題指出要考量的事項。

多語系使用者介面

多語系消費者介面 (MUI) 是 Microsoft 支援將 UI 從一種語言切換到另一種語言。 WPF 應用程式會使用元件模型來支援 MUI。 一個應用程式包含語言中性的組件以及語言相關的附屬資源組件。 進入點是主要組件中的 Managed .EXE。 WPF 資源載入器會利用架構的資源管理員來支援資源查閱和後援。 多語言附屬組件使用相同的主要組件。 載入的資源元件取決於 CurrentUICulture 目前線程的 。

可當地語系化的使用者介面

WPF 應用程式會使用 XAML 來定義其 UI。 XAML 可讓開發人員使用一組屬性和邏輯來指定物件的階層。 XAML 的主要用途是開發 WPF 應用程式,但可用來指定任何 Common Language Runtime (CLR) 物件的階層。 大部分的開發人員都會使用 XAML 來指定其應用程式的 UI,並使用 C# 之類的程式設計語言來回應使用者互動。

從資源觀點來看,UI 是資源元素,因此其最終散發格式必須可當地語系化以支援國際語言。 因為 XAML 無法處理許多 XAML 應用程式所要執行此動作的程式碼區塊事件。 如需詳細資訊,請參閱 WPF 中的 XAML。 當 XAML 檔案標記化成 BAML 形式的 XAML 時,程式碼會移除並編譯成不同的二進位檔。 BAML 格式的 XAML 檔案、映像和其他類型的 Managed 資源物件會內嵌到附屬資源組件中,以當地語系化為其他語言,或在不需要當地語系化時內嵌到主要組件中。

注意

WPF 應用程式支援所有 FrameworkCLR 資源,包括字串資料表、影像等等。

組建可當地語系化的應用程式

當地語系化表示將 UI 調整為不同的文化特性。 若要讓 WPF 應用程式當地語系化,開發人員必須將所有可當地語系化的資源建置到資源元件中。 資源元件會當地語系化為不同的語言,而程式碼後置會使用資源管理 API 來載入。 WPF 應用程式所需的其中一個檔案是專案檔 (.proj)。 專案檔案應該包含您在應用程式中使用的所有資源。 以下的 .csproj 檔案範例示範如何執行這項工作。

<Resource Include="data\picture1.jpg"/>
<EmbeddedResource Include="data\stringtable.en-US.restext"/>

若要在應用程式中使用資源,請具現化 ResourceManager 並載入您想要使用的資源。 下列範例示範如何進行這項操作。

void OnClick(object sender, RoutedEventArgs e)
{
  ResourceManager rm = new ResourceManager ("MySampleApp.data.stringtable",
       Assembly.GetExecutingAssembly());
  Text1.Text = rm.GetString("Message");
}

使用 ClickOnce 與當地語系化的應用程式

ClickOnce 是新的 Windows Forms 部署技術,隨附于 Visual Studio 2005。 它能讓應用程式安裝及升級 Web 應用程式。 當地語系化使用 ClickOnce 部署的應用程式時,只能在已當地語系化的文化特性中檢視它。 例如,如果已部署的應用程式當地語系化為日文,則只能在日文 Microsoft Windows 上檢視,而不是在英文 Windows 上檢視。 這會產生問題,因為日本使用者執行英文版 Windows 是常見的案例。

此問題的解決方案是設定中性的語言後援屬性。 應用程式開發人員可以選擇性地從主要組件中移除資源,指定可在附屬組件中找到的資源對應至特定的文化特性。 若要控制此程式, NeutralResourcesLanguageAttribute 請使用 。 類別的 NeutralResourcesLanguageAttribute 建構函式有兩個簽章,其中一個 UltimateResourceFallbackLocation 採用 參數來指定應該擷取後援資源的位置 ResourceManager :主要元件或附屬元件。 下列範例會示範如何使用 屬性。 針對最終後援位置,程式碼會使 在 ResourceManager 目前執行之元件的目錄 「de」 子目錄中尋找資源。

[assembly: NeutralResourcesLanguageAttribute(
    "de" , UltimateResourceFallbackLocation.Satellite)]

另請參閱