文化特性
處理多國語言之前要先了解一下文化特性(Culture),標準的文化特性格式長這樣:en-US,en 表示語言,US 表示國家,文化特性格式符合 RFC 1766 和 RFC 3066,這個格式由 IETF 維護
Culture 和 UICulture 屬性
ASP.NET 的 Page 類別有兩個很重要的屬性,Culture、UICulture,它們吃的是字串格式,必須符合文化特性格式
- UICulture:用來決定載入何種語系的資源檔
- Culture:用來決定語系的日期、數值、貨幣格式,比較和排序
Thread 類別也有 CurrentCulture、CurrentUICulture,他們吃的是 CultureInfo 類別,他們和 Culture、UICulture 是相對應的
檢測瀏覽器文化特性
this.Request.UserLanguages 可以回傳瀏覽器的 Accept-Language heard
手動設定文化特性
在 <%@ Page %> 指示詞有 UICulture、Cultrue 兩個屬性可以設定文化特性
在頁面指定 en-US 文化特性
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Download.aspx.cs" Inherits="Download" Culture="en-US" UICulture="en-US"%>
當頁面設定auto,會去抓瀏覽器的預設的語言(文化特性),冒號後面代表一個預設的文化特性,當頁面找不到瀏覽器的文化特性時,則使用預設值
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Download.aspx.cs" Inherits="Download" Culture="auto:en-US" UICulture="auto:en-US" %>
在Web.config設定文化特性
除了在頁面個別指定文化之外,也可以在 web.config 的system.web 區塊加入 globalization culture,套用整個網站的文化特性
<system.web> <globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true" /> ....
使用程式取得文化特性
CultureInfo.GetCultures (CultureTypes) 靜態方法取得所有的文化特性
CultureInfo.CreateSpecificCulture(cultureName) 靜態方法取得特定的文化特性
使用程式設定網頁的文化特性
- 在特定頁面覆寫 Page.InitializeCulture 方法
- 在Global.asax的Application_BeginRequest
片斷程式碼
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage); Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);
Thread.CurrentThread.CurrentCulture 代表的是 Page 的 Culture
- Thread.CurrentThread.CurrentUICulture 代表的是 Page 的 UICulture
- 他們兩個都是 CultureInfo 類別
比較和排序字串
不同的文化特性對比較和排序會有不同的約定,應該使用具有 CultureInfo 參數的 string.Compare方法
- Compare(String, Int32, String, Int32, Int32, Boolean, CultureInfo)
- Compare(String, Int32, String, Int32, Int32, CultureInfo, CompareOptions)
- Compare(String, String, Boolean, CultureInfo)
片段程式碼如下
if (string.Compare("余小章", "余小章", true, new CultureInfo("zh-TW")) == 0) { //等於0,第一個字等於第二個字 //負數,第一個字小於第二個字 //正數,第一個字大於第二個字 }
文章出自:https://www.dotblogs.com.tw/yc421206/2015/11/26/multiple_language_culture
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET