日本xxxx18视频在线观看-日本xxxx1819-日本xxxwww在线观看-日本xxx-日本xx-日本www在线视频

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C# 實(shí)現(xiàn)多語(yǔ)言支持的本地化(System.Globalization名稱空間)

admin
2025年3月22日 7:44 本文熱度 389

?

本章內(nèi)容:
● 使用表示區(qū)域性和區(qū)域的類
● 應(yīng)用程序的全球化
● 應(yīng)用程序的本地化
本章將介紹.NET 應(yīng)用程序的全球化和本地化。全球化(Globalization)用于國(guó)際化的應(yīng)用程序:使 應(yīng)用程序可以在國(guó)際市場(chǎng)上銷售。采用全球化策略,應(yīng)用程序應(yīng)根據(jù)區(qū)域性、不同的日歷等支持不 同的數(shù)字和日期格式。本地化(Localization)用于為特定的區(qū)域性翻譯應(yīng)用程序。而字符串的翻譯可 以使用資源,如.NET 資源或WPF 資源字典。

System.Globalization名稱空間

System.Globalization 名稱空間包含了所有的區(qū)域性類和區(qū)域類,以支持不同的日期格式、不同 的數(shù)字格式,甚至如GregorianCalendar 類、HebrewCalendar 類和JapaneseCalendar 類等表示的不同 日歷。使用這些類可以根據(jù)不同的地區(qū)顯示不同的表示法。

Unicode問(wèn)題

因?yàn)橐粋€(gè)Unicode 字符有16 位,所以共有65536 個(gè)Unicode 字符。這對(duì)于當(dāng)前在信息技術(shù)中使 用的所有語(yǔ)言夠用嗎?例如,漢語(yǔ)就需要80 000 多個(gè)字符。但是,Unicode 可以解決這個(gè)問(wèn)題。使 用Unicode 必須區(qū)分基本字符和組合字符。可以給一個(gè)基本字符添加若干個(gè)組合字符,組成一個(gè)可 顯示的字符或一個(gè)文本元素。

例如,冰島的字符Ogonek,就可以使用基本字符0x006F(拉丁小字母o)、組合字符0x0328(組 合Ogonek)和0x0304(組合Macron)組合而成,組合字符在0x0300~0x0345 之間定 義,對(duì)于美國(guó)和歐洲市場(chǎng),預(yù)定義字符有助于處理特殊的字符。字符Ogonek 也可以用預(yù)定義字符 0x01ED 來(lái)定義。

image

StringInfo 類的靜態(tài)方法

方 法
說(shuō) 明
GetNextTextElement()
返回指定字符串的第一個(gè)文本元素(基本字符和所有的組合字符)
GetTextElementEnumerator()
返回一個(gè)允許迭代字符串中的所有文本元素的TextElementEnumerator 對(duì)象
ParseCombiningCharacters()
返回一個(gè)引用字符串中的所有基本字符的整型數(shù)組

一個(gè)顯示字符可以包含多個(gè)Unicode 字符。要解決這個(gè)問(wèn)題,如果編寫(xiě)的應(yīng)用程 序要在國(guó)際市場(chǎng)銷售,就不應(yīng)使用數(shù)據(jù)類型char,而應(yīng)使用string。string 可以包含由 基本字符和組合字符組成的文本元素,但char 不能。

區(qū)域性和區(qū)域

世界分為多個(gè)區(qū)域性和區(qū)域,應(yīng)用程序必須知道這些區(qū)域性和區(qū)域的差異。區(qū)域性是基于用戶 的語(yǔ)言和區(qū)域性習(xí)慣的一組偏愛(ài)特性。RFC 1766(www.ietf.org/rfc/rfc1766.txt)定義了區(qū)域性的名稱, 這些名稱根據(jù)語(yǔ)言和國(guó)家或區(qū)域的不同在世界各地使用。例如en-AU、en-CA、en-GB 和en-US 分 別用于表示澳大利亞、加拿大、英國(guó)和美國(guó)的英語(yǔ)。

在 System.Globalization 名稱空間中,最重要的類是CultureInfo。這個(gè)類表示區(qū)域性,定義了日 歷、數(shù)字和日期的格式,以及和區(qū)域性一起使用的排序字符串。

RegionInfo 類表示區(qū)域設(shè)置(如貨幣),說(shuō)明該區(qū)域是否使用米制系統(tǒng)。在某些區(qū)域中,可以使用 多種語(yǔ)言。例如,西班牙區(qū)域就有Basque(eu-ES)、Catalan(ca-ES)、Spanish(es-ES)和Galician(gl-ES) 區(qū)域性。類似于一個(gè)區(qū)域可以有多種語(yǔ)言,一種語(yǔ)言也可以在多個(gè)區(qū)域使用,例如,墨西哥、西班 牙、危地馬拉、阿根廷和秘魯?shù)榷际褂梦靼嘌勒Z(yǔ)。

特定、中立和不變的區(qū)域性

在.NET Framework 中使用區(qū)域性,必須區(qū)分3 種類型:特定、中立和不變的區(qū)域性。

特定的區(qū)域性與真正存在的區(qū)域性相關(guān),這種區(qū)域性用上一節(jié)介紹的RFC 1766 定義。特定的 區(qū)域性可以映射到中立的區(qū)域性。例如,de 是特定區(qū)域性de-AT、de-DE、de-CH 等的中立區(qū)域性, de 是德語(yǔ)(German【Deutsch】)的簡(jiǎn)寫(xiě),AT、DE 和CH 分別是奧地利(Austria)、德國(guó)(Germany)和瑞 士(Switzerland)等國(guó)家的簡(jiǎn)寫(xiě)。

在翻譯應(yīng)用程序時(shí),通常不需要為每個(gè)區(qū)域翻譯,因?yàn)閵W地利和瑞士等國(guó)使用的德語(yǔ)沒(méi)有太大 的區(qū)別。所以可以使用中立的區(qū)域性來(lái)本地化應(yīng)用程序,而不需要使用特定的區(qū)域性。

不變的區(qū)域性獨(dú)立于真正的區(qū)域性。在文件中存儲(chǔ)格式化的數(shù)字或日期,或通過(guò)網(wǎng)絡(luò)把它們發(fā) 送到服務(wù)器上時(shí),最好使用獨(dú)立于任何用戶設(shè)置的區(qū)域性。

下圖顯示了區(qū)域性類型的相互關(guān)系。

image

CurrentCulture和CurrentUICulture

設(shè)置區(qū)域性時(shí),必須區(qū)分用戶界面的區(qū)域性和數(shù)字及日期格式的區(qū)域性。區(qū)域性與線程相關(guān), 并且通過(guò)這兩種區(qū)域性類型,就可以把兩種區(qū)域性設(shè)置應(yīng)用于線程。Thread 類提供了CurrentCulture 和CurrentUICulture 屬性。CurrentCulture 屬性用于設(shè)置與格式化和排序選項(xiàng)一起使用的區(qū)域性,而 CurrentUICulture 屬性用于設(shè)置用戶界面的語(yǔ)言。

使用 Windows 控制面板中的“區(qū)域和語(yǔ)言”選項(xiàng),就可以改變CurrentCulture 的默認(rèn)設(shè)置,如 下圖 所示。使用這個(gè)配置,還可以改變區(qū)域性的默認(rèn)數(shù)字、時(shí)間和日期格式。

CurrentUICulture 屬性不依賴于這個(gè)配置,而依賴于操作系統(tǒng)的語(yǔ)言。這有一個(gè)例外:如果 Windows 7、Windows Vista 或Windows XP 安裝了多語(yǔ)言用戶界面(Multi-language User Interface, MUI),就可以用區(qū)域配置改變用戶界面的語(yǔ)言,這會(huì)影響CurrentUICulture 屬性。

這些設(shè)置都使用默認(rèn)值,在許多情況下,不需要改變默認(rèn)值。如果需要改變區(qū)域性,只需把線 程的兩個(gè)區(qū)域性改為Spanish 區(qū)域性,如下面的代碼段所示:

System.Globalization.CultureInfo ci = new
System.Globalization.CultureInfo("es-ES");
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
System.Threading.Thread.CurrentThread.CurrentUICulture = ci;

前面已學(xué)習(xí)了區(qū)域性的設(shè)置,下面討論CurrentCulture 設(shè)置對(duì)數(shù)字和日期格式的影響。

數(shù)字格式

System 名稱空間中的數(shù)字結(jié)構(gòu)Int16、Int32 和Int64 等都有一個(gè)重載的ToString()方法。這個(gè)方 法可以根據(jù)地域創(chuàng)建不同的數(shù)字表示法。對(duì)于Int32 結(jié)構(gòu),ToString()方法有下述4 個(gè)重載版本:

public string ToString();
public string ToString(IFormatProvider);
public string ToString(string);
public string ToString(string,
IFormatProvider);

不帶參數(shù)的ToString()方法返回一個(gè)沒(méi)有格式化選項(xiàng)的字符串,也可以給ToString()方法傳遞一 個(gè)字符串和一個(gè)實(shí)現(xiàn)IFormatProvider 接口的類。

該字符串指定表示法的格式。而這個(gè)格式可以是標(biāo)準(zhǔn)數(shù)字格式化字符串或者圖形數(shù)字格式化字 符串。對(duì)于標(biāo)準(zhǔn)數(shù)字格式化,字符串是預(yù)定義的,其中C 表示貨幣符號(hào),D 表示輸出為小數(shù),E 表 示輸出用科學(xué)計(jì)數(shù)法表示,F(xiàn) 表示定點(diǎn)輸出,G 表示一般輸出,N 表示輸出為數(shù)字,X 表示輸出為 十六進(jìn)制數(shù)。對(duì)于圖形數(shù)字格式化字符串,可以指定位數(shù)、節(jié)和組分隔符、百分號(hào)等。圖形數(shù)字格 式字符串###, ###表示兩個(gè)3 位數(shù)塊被一個(gè)組分隔符分開(kāi)。

IFormatProvider 接口由NumberFormatInfo、DateTimeFormatInfo 和CultureInfo 類實(shí)現(xiàn)。這個(gè)接 口定義了GetFormat()方法,它返回一個(gè)格式對(duì)象。

NumberFormatInfo 類可以為數(shù)字定義自定義格式。使用NumberFormatInfo 類的默認(rèn)構(gòu)造函數(shù), 可以創(chuàng)建獨(dú)立于區(qū)域性的對(duì)象或不變的對(duì)象。使用這個(gè)類的屬性,可以改變所有格式選項(xiàng),如正號(hào)、 百分號(hào)、數(shù)字組分隔符和貨幣符號(hào)等。從靜態(tài)屬性InvariantInfo 返回一個(gè)與區(qū)域性無(wú)關(guān)的只讀 NumberFormatInfo 對(duì)象。NumberFormatInfo 對(duì)象的格式化值取決于當(dāng)前線程的CultureInfo 類,該線 程從靜態(tài)屬性CurrentInfo 返回。

下一個(gè)示例使用一個(gè)簡(jiǎn)單的控制臺(tái)項(xiàng)目。在這段代碼中,第一個(gè)示例顯示了在當(dāng)前線程的區(qū)域 性格式中所顯示的數(shù)字(這里是English-US,是操作系統(tǒng)的設(shè)置)。第二個(gè)示例使用了帶有 IFormatProvider 參數(shù)的ToString()方法。CultureInfo 類實(shí)現(xiàn)IFormatProvider 接口,所以創(chuàng)建一個(gè)使用 法國(guó)區(qū)域性的CultureInfo 對(duì)象。第3 個(gè)示例改變了當(dāng)前線程的區(qū)域性。使用Thread 實(shí)例的 CurrentCulture 屬性,把區(qū)域性改為德國(guó)區(qū)域性:

using System;
using System.Globalization;
using System.Threading;

namespace NumberAndDateFormatting
{
class Program
{
    static void Main(string[] args)
    {
        NumberFormatDemo();
    }
    private static void NumberFormatDemo()
    {
        int val = 1234567890;
        // culture of the current thread
        Console.WriteLine(val.ToString("N"));
        // use IFormatProvider
        Console.WriteLine(val.ToString("N", new CultureInfo("fr-FR")));
        // change the culture of the thread
        Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
        Console.WriteLine(val.ToString("N"));
    }
  }
}

結(jié)果如下所示。可以把這個(gè)結(jié)果與前面列舉的美國(guó)、英國(guó)、法國(guó)和德國(guó)區(qū)域性的結(jié)果進(jìn)行比較。

1,234,567,890.00
1 234 567 890,00
1.234.567.890,00


對(duì)于日期,也提供了與數(shù)字相同的支持。DateTime 結(jié)構(gòu)有一些把日期轉(zhuǎn)換為字符串的方法。公 共實(shí)例的ToLongDateString()、ToLongTimeString()、ToShortDateString()和ToShortTimeString()方法都使用當(dāng)前區(qū)域性來(lái)創(chuàng)建字符串表示法。使用ToString()方法,可以指定另一種區(qū)域性:

public string ToString();
public string ToString(IFormatProvider);
public string ToString(string);
public string ToString(string, IFormatProvider);

使用ToString()方法的字符串參數(shù),可以指定預(yù)定義格式字符或自定義格式字符串,把日期轉(zhuǎn)換 為字符串。DateTimeFormatInfo 類指定了可能的值。DateTimeFormatInfo 類指定的格式字符串有不同 的含義。例如,D 表示長(zhǎng)日期格式,d 表示短日期格式, ddd 表示星期的縮寫(xiě),dddd 表示星期的全 稱,yyyy 表示年份,T 表示長(zhǎng)時(shí)間格式,t 表示短時(shí)間格式。使用IFormatProvider 參數(shù)可以指定區(qū) 域性。使用不帶IFormatProvider 參數(shù)的重載方法,表示所使用的是當(dāng)前線程的區(qū)域性:

DateTime d = new DateTime(2009, 06, 02);
// current culture
Console.WriteLine(d.ToLongDateString());
// use IFormatProvider
Console.WriteLine(d.ToString("D", new CultureInfo("fr-FR")));
// use culture of thread
CultureInfo ci = Thread.CurrentThread.CurrentCulture;
Console.WriteLine("{0}: {1}", ci.ToString(), d.ToString("D"));
ci = new CultureInfo("es-ES");
Thread.CurrentThread.CurrentCulture = ci;
Console.WriteLine("{0}: {1}", ci.ToString(), d.ToString("D"));

這個(gè)示例程序的結(jié)果說(shuō)明了使用線程的當(dāng)前區(qū)域性的ToLongDateString()方法,其中給ToString() 方法傳遞一個(gè)CultureInfo 實(shí)例,則顯示其法國(guó)版本,把線程的CurrentCulture 屬性改為es-ES,則顯 示其西班牙版本,如下所示。

Tuesday, June 02, 2009
mardi 2 juin 2009
en-US: Tuesday, June 02, 2009
es-ES: martes, 02 de junio de 2009

使用區(qū)域性

為了全面介紹區(qū)域性,下面使用一個(gè)WPF 應(yīng)用程序示例,該應(yīng)用程序列出所有的區(qū)域性,描 述區(qū)域性屬性的不同特征。下圖 顯示了該應(yīng)用程序在Visual Studio 2010 WPF 設(shè)計(jì)器中的用戶界 面。

在應(yīng)用程序的初始化階段,所有可用的區(qū)域性都添加到應(yīng)用程序左邊的樹(shù)形視圖控件中。這個(gè)初 始化在AddCulturesToTree()方法中進(jìn)行,該方法在Window類CultureDemoWindow的構(gòu)造函數(shù)中調(diào)用:

public CultureDemoWindow()
{
    InitializeComponent();
    AddCulturesToTree();
}

在AddCulturesToTree()方法中,從通過(guò)靜態(tài)方法CultureInfo.GetCultures()中獲取所有區(qū)域性。給 這個(gè)方法傳遞CultureTypes.AllCultures,就會(huì)返回所有可用區(qū)域性的未排序數(shù)組。該數(shù)組用一個(gè) Lambda 表達(dá)式排序,這個(gè)Lambda 表達(dá)式要傳遞給Array.Sort()方法的第二個(gè)參數(shù)的Comparison 委 托。在foreach 循環(huán)中,把每個(gè)區(qū)域性添加到樹(shù)形視圖中。為每種區(qū)域性創(chuàng)建一個(gè)TreeViewItem 對(duì) 象,因?yàn)閃PF 的TreeView 類使用TreeViewItem 對(duì)象來(lái)顯示。將TreeViewItem 對(duì)象的Tag 屬性設(shè)置 為CultureInfo 對(duì)象,以便以后訪問(wèn)這個(gè)樹(shù)型視圖中的CultureInfo 對(duì)象。

TreeViewItem 對(duì)象添加到樹(shù)中的什么地方取決于區(qū)域性類型。如果區(qū)域性沒(méi)有父區(qū)域性,它就 會(huì)添加到樹(shù)的根節(jié)點(diǎn)上。要查找父區(qū)域性,必須把所有區(qū)域性保存到一個(gè)字典中。相關(guān)內(nèi)容參見(jiàn)前 面章節(jié),其中第10 章介紹了字典,第8 章介紹了Lambda 表達(dá)式。

// add all cultures to the tree view
private void AddCulturesToTree()
{
    var culturesByName = new Dictionary<string, TreeViewItem>();
    // get all cultures
    var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
    Array.Sort(cultures, (c1, c2) = c1.Name.CompareTo(c2.Name));
    var nodes = new TreeViewItem[cultures.Length];
    int i = 0;
    foreach (var ci in cultures)
    {
        nodes[i] = new TreeViewItem();
        nodes[i].Header = ci.DisplayName;
        nodes[i].Tag = ci;
        culturesByName.Add(ci.Name, nodes[i]);
        TreeViewItem parent;
        if (!String.IsNullOrEmpty(ci.Parent.Name) &&culturesByName.TryGetValue(ci.Parent.Name, out parent))
        {
            parent.Items.Add(nodes[i]);
        }
        else
        {
            treeCultures.Items.Add(nodes[i]);
        }
        i++;
    }
}

在用戶選擇樹(shù)中的一個(gè)節(jié)點(diǎn)時(shí),就會(huì)調(diào)用TreeView 類的SelectedItemChanged 事件的處理程序。 在這里,這個(gè)處理程序在TreeCultures_SelectedItemChanged()方法中實(shí)現(xiàn)。在這個(gè)方法中,先調(diào)用 ClearTextFields()方法清除所有字段,再選擇TreeViewItem 對(duì)象的Tag 屬性,從樹(shù)中獲取CultureInfo 對(duì)象。接著使用CultureInfo 對(duì)象的屬性Name、NativeName 和EnglishName 設(shè)置一些文本字段。如果 CultureInfo 對(duì)象是一個(gè)可以使用IsNeutralCulture 屬性進(jìn)行查詢的中立區(qū)域性,就設(shè)置相應(yīng)的復(fù)選框。

private void treeCultures_SelectedItemChanged(object sender,
RoutedPropertyChangedEventArgs<object> e)
{
    ClearTextFields();
    // get CultureInfo object from tree
    CultureInfo ci = (CultureInfo)((TreeViewItem)e.NewValue).Tag;
    textCultureName.Text = ci.Name;
    textNativeName.Text = ci.NativeName;
    textEnglishName.Text = ci.EnglishName;
    checkIsNeutral.IsChecked = ci.IsNeutralCulture;

然后獲取區(qū)域性的日歷信息。CultureInfo 類的Calendar 屬性返回特定區(qū)域性的默認(rèn)Calendar 對(duì) 象。因?yàn)镃alendar 類沒(méi)有對(duì)應(yīng)的名稱屬性,所以需要使用基類的ToString()方法獲取類的名稱,并刪 除要在文本字段textCalendar 中顯示的這個(gè)字符串的名稱空間。

因?yàn)橐环N區(qū)域性可能支持多種日歷,所以O(shè)ptionalCalendars 屬性返回額外支持的Calendar 對(duì)象 數(shù)組。這些可選的日歷顯示在列表框listCalendars 中。派生自Calendar 的GregorianCalendar 類還有 一個(gè)CalendarType 屬性,它列出了Gregorian 日歷的類型。這個(gè)類型可以是GregorianCalendarTypes 枚舉的一個(gè)值:Arabic、MiddleEastFrench、TransliteratedFrench、USEnglish 或Localized,這取決于 區(qū)域性。使用Gregorian 日歷,類型還可以顯示在列表框中。

// default calendar
textCalendar.Text = ci.Calendar.ToString().
Remove(0, 21).Replace("Calendar", "");
// fill optional calendars
listCalendars.Items.Clear();
foreach (var optCal in ci.OptionalCalendars)
{
    StringBuilder calName = new StringBuilder(50);
    calName.Append(optCal.ToString());
    calName.Remove(0, 21);
    calName.Replace("Calendar", "");
    // for GregorianCalendar add type information
GregorianCalendar gregCal = optCal as GregorianCalendar;
    if (gregCal != null)
    {
        calName.AppendFormat(" {0}", gregCal.CalendarType.ToString());
    }
    listCalendars.Items.Add(calName.ToString());
}

接著,在if 語(yǔ)句中使用“!ci.IsNeutralCulture”,以檢查區(qū)域性是否為特定區(qū)域性(不是中立區(qū)域 性)。使用ShowSamples()方法顯示數(shù)字和日期示例。這個(gè)方法將在下一段代碼中實(shí)現(xiàn)。使用 ShowRegionInformation()方法顯示區(qū)域的一些信息。對(duì)于不變的區(qū)域性,只能顯示數(shù)字和日期示例, 不能顯示區(qū)域信息。因?yàn)椴蛔兊奈募c實(shí)際的語(yǔ)言無(wú)關(guān),所以它與區(qū)域也無(wú)關(guān)。

if (!ci.IsNeutralCulture)
{
    groupSamples.IsEnabled = true;
    ShowSamples(ci);
    // invariant culture doesn’t have a region
    if (String.Compare(ci.ThreeLetterISOLanguageName, "IVL", true) == 0)
    {
        groupRegion.IsEnabled = false;
    }
    else
    {
        groupRegion.IsEnabled = true;
        ShowRegionInformation(ci.Name);
    }
}
else // neutral culture: no region, no number/date formatting
  {
    groupSamples.IsEnabled = false;
    groupRegion.IsEnabled = false;
  }
}

為了顯示一些本地化的數(shù)字和日期,把CultureInfo 類型的選中對(duì)象傳遞給ToString()方法的 IFormatProvider 參數(shù)。

private void ShowSamples(CultureInfo ci)
{
    double number = 9876543.21;
    textSampleNumber.Text = number.ToString("N", ci);
    DateTime today = DateTime.Today;
    textSampleDate.Text = today.ToString("D", ci);
    DateTime now = DateTime.Now;
    textSampleTime.Text = now.ToString("T", ci);
}

為了顯示與RegionInfo 對(duì)象相關(guān)的信息,通過(guò)在ShowRegionInformation()方法中傳遞選中的區(qū)域性標(biāo)識(shí)符,構(gòu)造一個(gè)RegionInfo 對(duì)象,然后訪問(wèn)DisplayName、CurrencySymbol、ISOCurrencySymbol 和IsMetric 屬性,以顯示這些信息。

private void ShowRegionInformation(string culture)
{
    var ri = new RegionInfo(culture);
    textRegion.Text = ri.DisplayName;
    textCurrency.Text = ri.CurrencySymbol;
    textCurrencyISO.Text = ri.ISOCurrencySymbol;
    checkIsMetric.IsChecked = ri.IsMetric;
}

啟動(dòng)應(yīng)用程序,在樹(shù)形視圖中就會(huì)看到所有的區(qū)域性,選擇一個(gè)區(qū)域性后,就會(huì)列出該區(qū)域性 的特征。

排序

排序字符串取決于區(qū)域性。一些區(qū)域性有不同的排列順序。例如在芬蘭,字符V 和W 就是相 同的。在默認(rèn)情況下,為排序而比較字符串的算法要使用與區(qū)分區(qū)域性的排序方式,其中排序依賴 于區(qū)域性。

為了說(shuō)明芬蘭的排序方式,下面的代碼創(chuàng)建一個(gè)控制臺(tái)應(yīng)用程序小示例,其中對(duì)數(shù)組中尚未排 序的美國(guó)州名進(jìn)行排序。因?yàn)槲覀儗⑹褂肧ystem.Collections.Generic 、System.Threading 和 System.Globalization 名稱空間中的類,所以必須聲明這些名稱空間。下面的DisplayNames()方法用 于在控制臺(tái)上顯示數(shù)組或集合中的所有元素:

static void DisplayNames(string title, IEnumerable<string> e)
{
    Console.WriteLine(title);
    foreach (string s in e)
      Console.Write(s + "—");
    Console.WriteLine();
    Console.WriteLine();
}

在Main()方法中,在創(chuàng)建了包含一些美國(guó)州名的數(shù)組后,就把線程的CurrentCulture 屬性設(shè)置 為Finnish 區(qū)域性,這樣,下面的Array.Sort()方法就使用芬蘭的排列順序。調(diào)用DisplayNames()方法 在控制臺(tái)上顯示所有的州名:

static void Main()
{
    string[] names = {"Alabama", "Texas", "Washington",
"Virginia", "Wisconsin", "Wyoming",
"Kentucky", "Missouri", "Utah", "Hawaii",
"Kansas", "Louisiana", "Alaska", "Arizona"};
    Thread.CurrentThread.CurrentCulture =
new CultureInfo("fi-FI");
    Array.Sort(names);
    DisplayNames("Sorted using the Finnish culture", names);

在以芬蘭排列順序第一次顯示美國(guó)州名后,數(shù)組將再次排序。如果希望排序獨(dú)立于用戶的區(qū)域 性,就可以使用不變的區(qū)域性。在已排序的數(shù)組要發(fā)送到服務(wù)器上,或存儲(chǔ)到某個(gè)地方時(shí),就可以 采用這種方式。
為此,給Array.Sort()方法傳遞第二個(gè)參數(shù)。Sort()方法希望第二個(gè)參數(shù)是實(shí)現(xiàn)IComparer 接口的 一個(gè)對(duì)象。System.Collections 名稱空間中的Comparer 類實(shí)現(xiàn)IComparer 接口。 Comparer.DefaultInvariant 返回一個(gè)Comparer 對(duì)象,該對(duì)象使用不變的區(qū)域性比較數(shù)組值,以進(jìn)行獨(dú) 立于區(qū)域性的排序。

// sort using the invariant culture
Array.Sort(names, System.Collections.Comparer.DefaultInvariant);
DisplayNames("Sorted using the invariant culture", names);
}

這個(gè)程序的輸出顯示了用Finnish 區(qū)域性進(jìn)行排岸的結(jié)果和獨(dú)立于區(qū)域性的排序結(jié)果。在使用獨(dú) 立于文件的排序方式時(shí),Virginia 排在Washington 的前面。用Finnish 區(qū)域性進(jìn)行排序時(shí),Virginia 排在Washington 的后面。

Sorted using the Finnish culture
Alabama-Alaska-Arizona-Hawaii-Kansas-Kentucky-Louisiana-Missouri-Texas-Utah-
Washington-Virginia-Wisconsin-Wyoming -
Sorted using the invariant culture
Alabama-Alaska-Arizona-Hawaii-Kansas-Kentucky-Louisiana-Missouri-Texas-Utah-
Virginia-Washington-Wisconsin-Wyoming -

如果對(duì)集合進(jìn)行的排序應(yīng)獨(dú)立于區(qū)域性,該集合就必須用不變的區(qū)域性進(jìn)行排 序。在把排序結(jié)果發(fā)送給服務(wù)器或存儲(chǔ)在文件中時(shí),這種方法尤其有效。

除了依賴地域的格式化和測(cè)量系統(tǒng)之外,文本和圖片也可能因區(qū)域性的不同而不同。此時(shí)就需要使用資源。


閱讀原文:原文鏈接


該文章在 2025/3/24 13:20:49 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 99九九99九九视频精品 | 国产又大又黄又粗又长的视频 | 午夜视频免费在线观看 | 日韩阿v高清视频在线观看 国产精品玖玖 | 日本高清中文字幕在线 | 国精产品一区一区三区 | 九九视频在线免费观看 | 亚洲不卡视频在线观看 | 韩国美女直播福利一区二区 | 91po国产在线高清福利 | 日韩欧美一区二区三 | 精品国产网红福利在线观看 | 国产人碰人摸人爱视频 | 国产精品怡红院在线观看 | 国产网友自拍一区 | 欧美国产一区二区 | 国产精品日韩激情在线观看 | 欧美一区日韩国产 | 国产做国产 | 成人免费精品视频 | 日本欧美一区二区三区高清 | 日韩精品视频在线 | 欧美亚洲激情视频在线观看 | 国产高清在线视频色 | 成年在线网站免费观看无广告 | 亚洲影视网 | 91尤物国产网红尤物福利 | 牛牛精品一区二区三区 | 办公室玩| 精品国产欧美精品v | 99ri精品| 精品国产高清自在线a免费片 | 成人精品丝 | 免费观看性欧美一级 | 日本在线精品视 | 国产在线一区二区播放精品 | 国产亚洲玖玖玖在线观看 | 日本一二三区成人 | 国产一区二区三区精品 | 日韩精品欧美大片资源 | 国产在沙发上午睡被强 |