2 回答

TA貢獻1802條經驗 獲得超4個贊
首先,我建議您參閱.NET 全球化和本地化以獲取更多信息。
有些價值觀/實體在不同的國家和地區受到不同的對待。此類實體包括貨幣符號、數字分隔符、日期等。向用戶顯示此數據時,您必須以對他們有意義的方式對其進行格式化。例如,如果您在貸款攤銷申請中顯示金額如下:
Console.WritLine("$" + amount.ToString());
這只會在使用美元的國家有效。并且沒有其他格式。為了使這種文化敏感,你必須這樣做......
Console.WriteLine(amount.ToString("C"));
通過這樣做,.NET 將使用正確的貨幣符號、數字分隔符和小數點來運行應用程序所在的區域性。
在某些情況下,您需要在特定文化中顯示此類數據。這樣做會改變它的顯示方式,但是您可以通過以下方式提供要使用的文化......
static void Main(string[] args)
{
decimal foo = 23434534.53M;
Dump(foo);
var culture = CultureInfo.CreateSpecificCulture("en");
CultureInfo.CurrentCulture = culture;
Dump(foo);
culture = CultureInfo.CreateSpecificCulture("es");
CultureInfo.CurrentCulture = culture;
Dump(foo);
culture = CultureInfo.CreateSpecificCulture("en-ZA"); // South Africa
CultureInfo.CurrentCulture = culture;
Dump(foo);
}
static void Dump(decimal value)
{
Console.WriteLine(value.ToString("C"));
Console.WriteLine(DateTime.Now.ToLongDateString());
}
當您在運行時更改區域性時,后續調用將值顯示為貨幣將更改貨幣符號、在某些情況下所述貨幣符號的位置、數字分隔符和小數點。
這也會影響數據的顯示方式,如您所見。
您還可以使用它來更改 UI 中顯示的文本。如果您的應用程序支持多種語言,例如美國英語、英國英語、西班牙語和法語,您無需事先了解這些語言。此外,您不能再對像“名字:”這樣的字符串文字進行硬編碼。一些簡單的事情可能會有所不同,例如顏色的拼寫(英國英語顏色)。對于不會說英語但在各個國家/地區受到重視的人來說,這些事情可能無關緊要。例如,如果您的應用程序向孩子們展示了正確的拼寫,您希望它根據它所在的位置正確地進行拼寫。
在這種情況下,您可以設置 UI 區域性并使用資源 (resx) 文件來放置您的字符串。在運行時您從資源文件中加載您的字符串,并且 .NET 運行時可以根據它檢測到的區域性加載正確的 resx 文件電腦設置為。如果沒有匹配項,它將回退到您的默認文化。
在我的測試應用程序中,我創建了 2 個資源文件,一個名為 Strings.resx,另一個名為 Strings.es.resx。第一個是默認語言,另一個是西班牙語。問候用戶時,我不必對問候進行硬編碼,但可以按如下方式使用它
static void Main(string[] args)
{
Console.WriteLine(ConsoleApp1.Strings.HelloString);
CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("es");
Console.WriteLine(ConsoleApp1.Strings.HelloString);
}
導致以下
這些技術一起可以幫助您創建對用戶的語言和文化敏感的應用程序。如果您需要覆蓋它,您也可以通過指定在呈現數據時使用哪種文化來有意地做到這一點。對不同的實體進行硬編碼對文化不敏感,并且無論運行它的機器的語言環境如何,都會顯示相同的內容。

TA貢獻1797條經驗 獲得超6個贊
直接與用戶交互時,應使用對文化敏感的操作。在與后端流程和交換系統(包括持久化數據)交互時,應始終使用對文化不敏感的操作。支持文化特定操作的數據可能會因多種原因發生變化。支持對文化不敏感的操作的數據永遠不會改變,因此可以安全地保存和交換。
- 2 回答
- 0 關注
- 308 瀏覽
添加回答
舉報