在.NET中, System.Globalization
命名空間中有CultureInfo
類。 它有兩個相似的屬性,它們都返回CultureInfo
類型的值: CurrentCulture
和CurrentUICulture
。 服務器
他們之間有什麼區別? 網站
我什麼時候以及爲什麼使用哪個? ui
CurrentCulture
是系統的默認用戶區域設置的.NET表示形式。 這能夠控制默認數字和日期格式等。 spa
CurrentUICulture
是指默認用戶界面語言,Windows 2000中引入的設置。這主要是關於應用程序的UI本地化/翻譯部分。 操作系統
不管系統配置的區域選項是什麼,都將是.NET應用程序中的「當前」值。 翻譯
一般它們都是相同的。 但在個人系統上他們會有所不一樣:我更喜歡德語格式的數字和日期,因此CurrentCulture
將是德語,但我也更喜歡個人全部英語應用程序,因此CurrentUICulture
將是英語。 代理
關於這個主題有一篇很好的文章: 對它進行排序:爲何咱們同時擁有CurrentCulture和CurrentUICulture code
區別: orm
CurrentCulture
用於格式化日期和貨幣,而CurrentUICulture
用於語言/翻譯。 ResourceManager
將使用它來按文化查找資源。 CurrentCulture
類的命名空間在System.Globalization
而CurrentUICulture
來自System.Threading
。 CurrentCulture
在會話中的不一樣請求中持久存在,而CurrentUICulture
須要與每一個請求一塊兒設置。 神似: 排序
它們都是System.Globalization.CultureInfo
實例。
除了用戶所作的漂亮解釋以外,還有一個很好的方法,以及Web應用程序開發的一個重要方面以下:
CurrentCulture
表示Web服務器的設置。 例如,若是您的ASP.NET Web應用程序託管在德國,則CutlureInfo.CurrentCulture
的值極可能是de-DE
。 所以, IFormattable
類型的默認.ToString()
格式將使用默認的德語格式,或者已在服務器操做系統上設置的默認格式。
CurrentUICulture
能夠從用戶代理捕獲,而且能夠表示鏈接到網站的客戶端的用戶界面文化。 例如,若是您從俄羅斯加載該網站,則您的本地設置將設置爲使用俄語,而且您的用戶代理會將您的區域設置發送到服務器(Opera和IE會自動執行此操做,不肯定Chrome和FireFox), CurrenUICulture
表明ru-RU
。 這將致使任何資源(如經過ResourceManager檢索的本地化字符串或ASP.NET aspx / ascx文件中的本地化表達式)使用俄語(若是可使用翻譯)。
這是一個簡單的技巧,我用它來記住使用哪個:
(date, currency, double).tostring = CurrentCulture resource.fr-CA.resx file = currentUICulture
值得注意的是, CurrentUICulture
支持非國家特定的語言環境,例如'en'(中性文化),而CurrentCulture
僅支持國家特定的語言環境,例如'en-GB'。 將CurrentCulture
設置爲中性文化將拋出ArgumentException
。
我認爲這是由於日期和貨幣等格式與國家自己的聯繫更緊密,但所顯示的語言在國家之間一般能夠互換。