我已经花了很多时间来了解文化不敏感和文化敏感,我不知道它们到底有什么区别。
在某些书中,他们将说明符分为两类:
不区分文化的日期/时间格式字符串和
区域性敏感的日期/时间格式字符串
我知道说明符,但我不知道是敏感还是不敏感。
有人可以指导我吗?
最佳答案
首先,请参考.NET Globalization & Localization以获得更多信息。
在不同的国家和地区,某些价值观/实体的处理方式有所不同。这样的实体包括货币符号,数字分隔符,日期等。在向用户显示此数据时,必须以一种对他们有意义的方式对其进行格式化。例如,如果您在贷款摊销应用程序中显示货币,如下所示:
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中显示的文本。如果您的应用程序支持多种语言,例如美国英语,英式英语,西班牙语和法语,则无需事先知道这些语言。此外,您不能再对字符串等字符串进行硬编码,例如“ First name:”。一些简单的事情可能会有所不同,例如颜色的拼写(英国英文颜色)。对于那些不会说英语但在相应国家受到重视的人来说,这样的事情可能无关紧要。例如,如果您的应用向儿童显示正确的拼写,那么您希望它针对所处位置正确显示。
在这种情况下,您可以设置UI区域性,并使用资源(resx)文件放置字符串。在运行时,您从资源文件中加载字符串,.NET运行时可以根据其检测到的区域性来加载正确的resx文件。 PC设置为。如果没有匹配项,它将回到您的默认区域性。
在测试应用程序中,我创建了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);
}
导致以下
这些技术一起可以帮助您创建对用户的语言和文化敏感的应用程序。如果您需要覆盖它,也可以通过指定在显示数据时使用哪种区域性来有意识地做到这一点。对变化的实体进行硬编码对区域性不敏感,并且无论运行该计算机的语言环境如何,都将显示相同的内容。