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 关注
- 262 浏览
添加回答
举报