[ASP.NET] 多國語系 - 了解文化特性

文化特性

處理多國語言之前要先了解一下文化特性(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

Note:瀏覽器大都允許輸入自訂義的語言,這可能就會拿到非法的文化特性格式

手動設定文化特性

在 <%@ 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方法

片段程式碼如下

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

Image result for microsoft+mvp+logo