簡體   English   中英

你如何處理本地化/ CultureInfo

[英]How do you handle localization / CultureInfo

某些方法(如string.Format()或.Parse())需要IFormatProvider。 你是如何提供的?

  • 在封閉環境應用程序中(您知道永遠不需要本地化),您是否只是跳過它並在沒有IFormatProvider的情況下調用方法?

  • 在可能已本地化的應用程序中,您是否考慮了每個方法調用的正確值,並將其設置在那里? 這可能是'CultureInfo.CurrentCulture'或'CultureInfo.CurrentUiCulture'。

  • 或者您是否使用“MyUiCultureInfo”和“MyCultureInfo”等全局變量來通過更改其值來切換本地化? 您如何以及在何處存儲這些變量?

  • 我開發庫或框架時有什么需要考慮的 - 在這種情況下如何處理本地化?

我總是將CurrentThread.Current(Ui)Culture設置為我們(ASP.NET)應用程序中的正確值。 這通常在每個請求開始時根據用戶的首選項或存儲在配置文件中的默認值(如果用戶尚未定義首選項)完成。

設置當前線程的這些屬性后,您可以停止考慮它 - 數字,日期等將被正確格式化/解析,即使沒有為這些方法提供IFormatProvider。 否則,您必須確保在任何地方傳遞正確的IFormatProvider。

我是一個庫的情況,我認為它應該只依賴於這些東西的應用程序,而不應該擔心這些事情。

我將當前的文化設置為美國英語,因為在我的國家,很少有“聰明”的人認為小數點分隔符是逗號。 有時十進制數用',',有時用'。'。 並非所有計算機都配置了正確的區域設置, 您不應該依賴它

要設置應用程序范圍的設置:

Application.CurrentCulture = new CultureInfo("en-US");
Application.CurrentCulture.NumberFormat.NumberDecimalSeparator = ".";

正如您所說,您可以在封閉的環境中調用方法,而無需提供任何IFormatProvider。

正如您所寫,您可以提供如下的CultureInfo對象:

        Console.WriteLine(String.Format(CultureInfo.CurrentCulture, "{0}", DateTime.Now));
        Console.WriteLine(String.Format(new CultureInfo("en-US"), "{0}", DateTime.Now));

這樣我可以用兩種不同的方式顯示日期,因為我的CurrentCulture是瑞典語,如下所示:

2009-05-28 13:12:43

5/28/2009 1:12:43 PM

CultureInfo.CurrentCulture處理日期等的格式化,並且是從您當前機器上的設置提供的。

CurrentCulture.CurrentUiCulture與翻譯本地化有關。 意思是在窗口中的菜單等上顯示的內容。

我的猜測是方法的默認行為是使用CurrentCulture(如果沒有提供)。

我總是將Culture屬性放在ASPX或Master頁面的開頭,它會為我完成所有轉換。 我永遠不需要做任何硬編碼或將日期/時間轉換為我自己所需的文化......

.
<%@ Page Language="C#" ..etc... Culture="en-AU" %>
.

Simplez

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM