首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Windows 8 市集應用程式開發實戰 (57):本地化與全球化完整指南

     編輯:關於.NET

前言:世界級應用程式的語言與文化適應力

本地化與全球化雖常被混淆,實則分工明確:全球化 是架構層面的準備(支援 Unicode、文化特定格式化、不硬編碼字串),本地化 則是針對特定語言/地區進行資源翻譯與 UI 調整。Windows 8 提供完整的資源管理系統(.resw、ResourceLoader、ResourceManager)與全球化 API(Windows.Globalization),協助開發者打造真正的世界級應用。

一、本地化基礎實作

資源檔架構

  • Resources.resw:預設/後援資源
  • Resources.lang-en.resw:英文資源
  • Resources.lang-zh-Hans-CN.resw:簡體中文資源
  • 圖片資源同樣支援 logo.lang-en.scale-100.png 命名慣例

XAML 標記延伸套用

<TextBlock x:Uid="HelloTextBlock" />
<!-- 對應資源鍵:HelloTextBlock.Text, HelloTextBlock.FontSize -->

程式碼取得資源

ResourceLoader loader = new ResourceLoader(); // 預設 Resources.resw
string hello = loader.GetString("Hello");
// 指定資源檔
ResourceLoader loader2 = new ResourceLoader("MyResources"); // MyResources.resw
// 類別庫資源
ResourceLoader loader3 = new ResourceLoader("ClassLibrary/MyResources");

封裝清單與通知中的本地化

Package.appxmanifest、Tile/Toast 範本均支援 ms-resource:Hello 或 ms-resource:///Resources/Hello 參考資源。

二、動態語言切換與資源解析

取得/設定執行階段語言

// 目前語言
string current;
ResourceManager.Current.DefaultContext.QualifierValues.TryGetValue("Language", out current);
// 設定偏好語言(立即生效,觸發 MapChanged 事件)
ApplicationLanguages.PrimaryLanguageOverride = "zh-Hans-CN";
// 列舉清單支援語言
foreach (string tag in ApplicationLanguages.ManifestLanguages) {
    var lang = new Windows.Globalization.Language(tag);
    // lang.DisplayName, lang.NativeName, lang.Script
}

指定語言環境讀取資源

ResourceContext ctx = new ResourceContext { Languages = new[] { "en" } };
ResourceMap map = ResourceManager.Current.MainResourceMap.GetSubtree("Resources");
string englishHello = map.GetValue("Hello", ctx).ValueAsString;

監聽語言變更

ResourceManager.Current.DefaultContext.QualifierValues.MapChanged += async (s, e) => {
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
        // 更新 UI
    });
};

三、全球化 API 深度解析

使用者偏好設定

GlobalizationPreferences.Languages;      // 偏好語言清單
GlobalizationPreferences.Calendars;      // 偏好行曆(GregorianCalendar 等)
GlobalizationPreferences.Clocks;         // 時制(24HourClock 等)
GlobalizationPreferences.HomeGeographicRegion; // 家鄉區域("TW", "US" 等)
GlobalizationPreferences.WeekStartsOn;   // 週起始日(DayOfWeek.Monday 等)

Language 類別:語言中繼資料

var lang = new Windows.Globalization.Language("zh-Hans-CN");
lang.DisplayName;      // "中文 (中華人民共和國)"
lang.NativeName;       // "中文 (中国)"
lang.LanguageTag;      // "zh-Hans-CN"
lang.Script;           // "Hans"
Language.CurrentInputMethodLanguageTag; // 目前 IME 語言

GeographicRegion 類別:區域資訊

var region = new GeographicRegion(); // 目前使用者區域
region.DisplayName;        // "台灣"
region.NativeName;         // "台灣"
region.CurrenciesInUse;    // ["TWD"]
region.CodeTwoLetter;      // "TW"
region.CodeThreeLetter;    // "TWN"
region.CodeThreeDigit;     // "158"

Calendar 類別:多元行曆支援

var gregorian = new Calendar(); // 預設公曆
var hebrew = new Calendar(new[] { "zh-CN" }, CalendarIdentifiers.Hebrew, ClockIdentifiers.TwentyFourHour);
string day1 = gregorian.DayAsString(); // "15"
string day2 = hebrew.DayAsString();    // 希伯來曆對應日期

四、數字格式化:文化特定的呈現

// 百分比
new PercentFormatter().Format(3.1415926);       // "314.16%"
new PercentFormatter(new[]{"zh-Hans-CN"}, "CN").Format(3.1415926); // "314.16%"

// 千分比
new PermilleFormatter().Format(3.1415926);      // "3,141.59‰"

// 一般數字
new DecimalFormatter().Format(3.1415926);       // "3.1415926"

// 貨幣
new CurrencyFormatter("TWD").Format(3.1415926); // "NT$3.14"
new CurrencyFormatter("CNY", new[]{"zh-Hans-CN"}, "CN").Format(3.1415926); // "¥3.14"

所有格式化類別均支援建構式指定語言清單與區域,確保輸出符合使用者預期。

總結與原始碼下載

善用 ResourceLoader 與 x:Uid 實現聲明式本地化,配合 ApplicationLanguages.PrimaryLanguageOverride 提供應用程式內語言切換;全球化層面則透過 Windows.Globalization 命名空間處理日期、數字、貨幣、行曆等文化差異。記住:全球化是架構,本地化是內容,兩者缺一不可。

完整原始碼下載: https://files.cnblogs.com/webabcd/Windows8.rar

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved