全球化和當地語系化的新功能
更新:2010 年 5 月
本主題說明 .NET Framework 4 版 中 System.Globalization 命名空間內類別和列舉的變更。本主題包含下列章節:
新的中性文化特性
新的特定文化特性
已更新全球化屬性值
取得最新的全球化資訊
字串處理
已減少使用地區設定識別碼
中性文化特性的屬性
自訂文化特性的變更
尚未變更的功能
新的中性文化特性
.NET Framework 4 至少支援 354 個文化特性 (與 .NET Framework 3.5 至少支援 203 個文化特性相較之下)。 許多新的文化特性都是中性文化特性,它們是為了完成根中性文化特性的父鏈結所加入。 例如,三個依奴提圖特文中性文化特性加入至已經存在的依奴提圖特文 (語音節,加拿大) 和依奴提圖特文 (拉丁,加拿大) 文化特性,如下表所示。
文化特性顯示名稱 |
文化特性名稱 |
LCID |
---|---|---|
依奴提圖特文 |
Iu |
0x005d |
依奴提圖特文 (語音節) |
iu-Cans |
0x785D |
依奴提圖特文 (語音節,加拿大) |
iu-Cans-CA |
0x045D |
依奴提圖特文 (拉丁) |
iu-Latn |
0x7C5D |
依奴提圖特文 (拉丁,加拿大) |
iu-Latn-CA |
0x085D |
新的特定文化特性
.NET Framework 4 也引入新的特定文化特性,例如新的塞爾維亞文文化特性。 舊的塞爾維亞文文化特性已重新命名為塞爾維亞文 (斯拉夫,前塞爾維亞蒙特內哥羅) 和塞爾維亞文 (拉丁,前塞爾維亞蒙特內哥羅),以避免顯示名稱衝突。 這些文化特性仍保留在 .NET Framework 中,而且會保存現有的資訊,包括其文化特性名稱和文化特性識別項。
文化特性顯示名稱 |
文化特性名稱 |
LCID |
---|---|---|
塞爾維亞文 - 塞爾維亞 (拉丁) |
sr-Latn-RS |
0x241A |
塞爾維亞文 - 塞爾維亞 (斯拉夫) |
sr-Cyrl-RS |
0x281A |
塞爾維亞文 - 蒙特內哥羅 (拉丁) |
sr-Latn-ME |
0x2C1A |
塞爾維亞文 - 蒙特內哥羅 (斯拉夫) |
sr-Cyrl-ME |
0x301A |
中文文化特性的顯示名稱已變更為遵循以下命名慣例:LanguageName ([Script,] Country/RegionName)。 在 .NET Framework 4 中,zh-CHS 和 zh-CHT 顯示名稱會附加「舊版」一詞,以便與 zh-Hans 和 zh-Hant 區別。 zh (最近引入 Windows) 的顯示名稱為「中文」。
顯示名稱 |
文化特性名稱 |
LCID |
---|---|---|
中文 |
zh |
0x7804 |
中文 (簡體) 舊版 |
zh-CHS |
0x0004 |
中文 (繁體) 舊版 |
zh-CHT |
0x7C04 |
中文 (簡體) |
zh-Hans |
0x0004 |
中文 (繁體) |
zh-Hant |
0x7C04 |
中文 (簡體,中華人民共和國) |
zh-CN |
0x0804 |
中文 (繁體,香港特別行政區) |
zh-HK |
0x0C04 |
中文 (繁體,澳門特別行政區) |
zh-MO |
0x1404 |
中文 (簡體,新加坡) |
zh-SG |
0x1004 |
中文 (繁體,台灣) |
zh-TW |
0x0404 |
中文文化特性的父鏈結現在包括根中文文化特性。 下列範例會顯示兩個中文特定文化特性的完整父鏈結:
zh-CN → zh-CHS → zh-Hans → zh → Invariant
zh-TW → zh-CHT → zh-Hant → zh → Invariant
藏文 (中華人民共和國)、法文 (摩納哥)、塔馬塞特文 (拉丁,阿爾及利亞) 和西班牙文 (西班牙,國際排序) 顯示名稱也已經更新。 當顯示名稱變更時,通常英文和原始名稱會反映這項變更。不過,手寫體、語言和國家的 ISO 和縮寫名稱可能也會變更。
已更新全球化屬性值
.NET Framework 4 也會更新全球化屬性的值,例如貨幣、日期和時間格式、日期和月份名稱、A.M. 和 P.M. 指示項,以及某些數字格式化屬性。 下表提供 System.Globalization.RegionInfo 類別中貨幣名稱變更的範例。
文化特性名稱 |
版本 3.5 貨幣名稱 |
版本 4 貨幣名稱 |
---|---|---|
mt-MT |
馬爾他里拉 |
歐元 |
sk-SK |
斯洛伐克克朗 |
歐元 |
sl-SI |
斯洛維尼亞托拉 |
歐元 |
tr-TR |
新土耳其里拉 |
土耳其里拉 |
下表提供 System.Globalization.DateTimeFormatInfo 類別中簡短日期模式變更的範例。
文化特性名稱 |
版本 3.5 簡短日期模式 |
版本 4 簡短日期模式 |
---|---|---|
ar-SA |
dd/MM/yy |
dd/MM/yyyy |
prs-AF |
dd/MM/yy |
yyyy/M/d |
ps-AF |
dd/MM/yy |
yyyy/M/d |
pt-BR |
d/M/yyyy |
dd/MM/yyyy |
許多地區設定的部分日曆資料 (例如日期和月份名稱) 已變更,例如,阿拉伯文地區設定的 DateTimeFormatInfo.ShortestDayNames 屬性。 某些由右至左的地區設定 (例如 prs-AF、ps-AF 和 ug-CN) 具有錯誤的 TextInfo.IsRightToLeft 屬性值,而且已在這個版本中修正。
取得最新的全球化資訊
.NET Framework 4 的其中一項主要全球化功能就是能夠在可用時提供最新的資訊。 這個版本所提供的最舊全球化資訊是產品出貨時可用的資料,而且只在 Windows 7 之前的 Windows 上執行時才提供。 在 Windows 7 和更新版本上執行時,就會直接從作業系統中擷取全球化資訊。這表示,當客戶升級為新版 Windows 時,將會取得最新的全球化資訊。 不論是原生 (Win32) 還是 Managed (.NET) 應用程式,執行 Windows 7 和更新版本的客戶都將感受到統一的全球化使用經驗。
因為世界不斷改變,所以全球化資訊可能會隨時變更。開發人員不應該預期全球化屬性的值在不同的版本之間存續,甚至是相同的 .NET Framework 版本也一樣。 對於 .NET Framework 使用者而言,這並非全新的行為。 在不同的 Windows 版本上執行時,自從 .NET Framework 2 以來就支援的 Windows-Only-Cultures 屬性可能會有不同的值。
文化特性名稱是最穩定的文化特性資訊屬性,而且在未來的版本中,應該會維持穩定狀態。 其他屬性 (例如文化特性顯示名稱) 可能會隨時變更,所以應用程式不應該相依於顯示名稱或任何其他文字或數值資料的拼字。
.NET Framework 4 中的全球化資訊擷取機制已變更。 如果您的應用程式正在 Windows 7 或更新的版本上執行,就會直接從作業系統中擷取全球化資訊。 如果您的應用程式在舊版的 Windows 上執行 (例如 Windows Vista、Windows XP、Windows Server 2003 或 Windows Server 2008),它會從內部資料存放區擷取全球化資訊,以確保資料是最新的。
在新的全球化資訊擷取模型中,某些 CultureTypes 的定義將變更,因為系統會根據主機作業系統,從不同的位置中擷取全球化資訊。 CultureTypes 成員 WindowsOnlyCultures 和 FrameworkCultures 現在已過時。 如果您嘗試使用這些成員,即使編譯成功,編譯器依然會產生警告。 使用 WindowsOnlyCultures 不會傳回任何文化特性,而使用 FrameworkCultures 會傳回所有文化特性。 其他 CultureTypes 成員則繼續擁有與之前相同的定義。
字串處理
許多 .NET Framework 類別 (包括 System.Globalization 命名空間中的 CharUnicodeInfo、CompareInfo、StringInfo、TextInfo 和 TextElementEnumerator) 會實作排序、大小寫和正規化規則,並擷取 Unicode 字元資訊。 在 .NET Framework 4 中,這些功能已經與 Windows 7 同步,可針對中日韓 (CJK) 語言提供更豐富的語言排序和大小寫功能,而且也修正了客戶所回報的許多問題。 最重要的變更是符合 Unicode 5.1 標準,這個標準新增了大約 1400 個字元的支援,包括新的符號、箭號、變音符號、標點符號、數學符號、中日韓筆劃、表意字元,以及馬來亞拉姆文和特拉古文數字字元。 此外,Unicode 5.1 改善了下列現有手寫體中字元的排序和大小寫:拉丁文、緬甸文、阿拉伯文、希臘文、蒙古文、斯拉夫文、果魯穆奇文字、歐利亞文、坦米爾文、特拉古文和馬來亞拉姆文。 它也新增了下列新手寫體的支援:巽丹文、雷布查文、桑塔爾文、范文、紹拉斯徹文、開亞里文、拉讓文和查姆文。
許多案例 (例如資料庫索引) 需要在不同 Windows 版本之間具有一致的字串處理行為。 不論主機 Windows 版本為何,.NET Framework 4 可確保一致的字串處理作業行為。
建立資料庫索引或儲存排序鍵的現有應用程式可能會取決於 .NET Framework 2.0 或 3.5 中的排序和大小寫行為。 為了支援這些應用程式,.NET Framework 4 可讓開發人員套用舊版的排序和大小寫行為,方法是將 <CompatSortNLSVersion> 項目併入應用程式的組態檔中。 舊版的排序和大小寫規則也可以在每一個應用程式定義域中套用,方法是在設定應用程式定義域時,使用 "NetFx40_LegacySecurityPolicy" 參數呼叫 AppDomainSetup.SetCompatibilitySwitches 方法。 請注意,成功還原舊版的行為取決於本機系統上是否有 sort00001000.dll 動態連結程式庫存在。
.NET Framework 4 為某些文化特性提供多個排序選項。 例如,德文 (德國) 文化特性預設會使用字典排序次序,但是支援電話簿排序當做替代的排序次序。 另一個範例是,中文 (簡體,中華人民共和國) 文化特性支援使用發音排序當做預設行為而使用筆劃排序當做替代排序次序。 如果要指定替代排序次序,您可以使用替代排序次序的 LCID 或名稱來建立 CultureInfo 物件。 .NET Framework 4 中移除了三個替代排序次序,因為它們已經在 Windows 中被取代了。因為已被取代之替代排序次序不再被支援,所以使用這些替代排序次序的 LCID 來嘗試建構 CultureInfo 物件的行為會擲回 CultureNotFoundException 例外狀況。.NET Framework 所支援的替代排序次序列於下表。
文化特性名稱 |
語言-國家/地區 |
預設的排序名稱和 LCID |
替代排序名稱和 LCID |
---|---|---|---|
zh-HK |
中文 - 香港特別行政區 |
預設:0x00000c04 |
zh-HK_stroke:0x00020c04 |
ja-JP |
日文 - 日本 |
預設:0x00000411 |
ja-JP_unicod:0x00010411 |
ko-KR |
韓文 - 韓國 |
預設:0x00000412 |
ko-KR_unicod:0x00010412 |
已減少使用地區設定識別碼
在 .NET Framework 4 中,ToString 和 ToString 方法會使用文化特性名稱,而不包含所有文化特性的 LCID。 例如,.NET Framework 4 會傳回 "en-US CompareInfo - en-US" 而非 "en-US CompareInfo – 1033" (舊版 .NET Framework 中的傳回值)。
中性文化特性的屬性
如果應用程式嘗試存取某些中性文化特性屬性 (例如 DateTimeFormatInfo.FirstDayOfWeek),先前的 .NET Framework 版本就會擲回例外狀況。 在 .NET Framework 4 中,中性文化特性屬性所傳回的值會反映來自該中性文化特性最主要的特定文化特性。 例如,法文中性地區設定將從法文 (法國) 中擷取其大部分屬性的值。 FirstDayOfWeek 屬性會傳回 DayOfWeek.Monday,它會反映該屬性在法文 (法國) 文化特性中的值。
但是,某些屬性 (例如語言名稱) 的值與主要文化特性不同。 例如,挪威文中性文化特性的語言名稱是挪威文,而巴克摩 (挪威) 此特定挪威文文化特性的語言名稱是挪威文 (巴克摩)。
在 .NET Framework 4 中,中性文化特性的某些屬性和方法所傳回的值會反映特定文化特性,而非中性文化特性。 CultureInfo 類別中的 KeyboardLayoutId 屬性和 GetConsoleFallbackUICulture 方法是這項變更的兩個範例:
KeyboardLayoutId 值變更:
文化特性名稱
3.5 版
4 版
ar
1
1025
es
10
1034
fr
12
1036
zh-CHS
4
2052
GetConsoleFallbackUICulture 值變更:
文化特性名稱
3.5 版
4 版
af
af
af-ZA
de
de
de-DE
en
en
en-US
ja
ja
ja-JP
自訂文化特性的變更
.NET Framework 版本 2.0 建立的中性替代文化特性不會在 .NET Framework 4 中載入。
當您使用 CultureAndRegionInfoBuilder 類別來註冊替代文化特性之後,自訂文化特性中覆寫的資訊將不會立即提供給建立自訂文化特性的處理序使用。 不過,註冊這個自訂文化特性之後啟動的處理序將能夠讀取覆寫的資訊。
尚未變更的功能
.NET Framework 4 中尚未變更文字資訊、編碼、日曆功能和國際化的網域名稱 (IDN) 功能。 這些領域會跟以前一樣繼續運作。
變更記錄
日期 |
記錄 |
原因 |
---|---|---|
2010 年 5 月 |
請注意,還原舊版的排序和比較取決於 sort00001000.dll。 |
內容 Bug 修正。 |