Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文化不敏感与文化敏感_C#_.net_Datetime_Globalization_Cultureinfo - Fatal编程技术网

C# 文化不敏感与文化敏感

C# 文化不敏感与文化敏感,c#,.net,datetime,globalization,cultureinfo,C#,.net,Datetime,Globalization,Cultureinfo,我看过很多关于文化不敏感和文化敏感的文章,我不知道它们之间到底有什么区别 在一些书中,他们将说明符分为两类: 不区分区域性的日期/时间格式字符串和 区域性敏感日期/时间格式字符串 我知道说明符,但我不知道它是否敏感和不敏感 有人能给我介绍一下吗?首先,我想请你参考更多信息 某些价值观/实体在不同的国家和地区受到不同的对待。这些实体包括货币符号、数字分隔符、日期等。当向用户显示此数据时,您必须以对他们有意义的方式对其进行格式化。例如,如果您在贷款摊销应用程序中显示货币,如下所示: Console.

我看过很多关于文化不敏感和文化敏感的文章,我不知道它们之间到底有什么区别

在一些书中,他们将说明符分为两类:

不区分区域性的日期/时间格式字符串

区域性敏感日期/时间格式字符串

我知道说明符,但我不知道它是否敏感和不敏感


有人能给我介绍一下吗?

首先,我想请你参考更多信息

某些价值观/实体在不同的国家和地区受到不同的对待。这些实体包括货币符号、数字分隔符、日期等。当向用户显示此数据时,您必须以对他们有意义的方式对其进行格式化。例如,如果您在贷款摊销应用程序中显示货币,如下所示:

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());
}
当您在运行时更改区域性时,将值显示为货币的后续调用将更改货币符号、在某些情况下所述货币符号的位置、数字分隔符和小数点

这也会影响DAT的显示方式

您还可以使用它来更改UI中显示的文本。如果您的应用程序支持多种语言,例如美国英语、英国英语、西班牙语和法语,则无需事先了解这些语言。此外,您不能再硬编码字符串文字,如“First name:”。一些简单的事情可能会有所不同,比如颜色的拼写(英国英语颜色)。对于一个不会说英语但在各自国家受到重视的人来说,这些事情可能无关紧要。例如,如果你的应用程序正在向孩子们显示正确的拼写,那么你希望它能够正确地显示它所在的位置

在这种情况下,您可以设置UI区域性并使用资源(resx)文件将字符串放入其中。在运行时,您可以从资源文件加载字符串,.NET运行时可以根据检测到的PC设置为的区域性加载正确的resx文件。如果没有匹配项,它将返回到默认区域性

在我的测试应用程序中,我创建了两个资源文件,一个名为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);
}
结果如下


这些技术结合在一起可以帮助您创建对用户的语言和文化敏感的应用程序。如果您需要覆盖它,也可以通过指定在显示数据时使用的区域性来有意地覆盖它。对不同的实体进行硬编码不区分区域性,并且无论运行该实体的计算机的区域设置如何,都将显示相同的实体。

直接与用户交互时,应使用区域性敏感操作。与后端进程和交换系统(包括持久化数据)交互时,应始终使用区域性不敏感的操作。支持区域性特定操作的数据可能因多种原因而更改。支持区域性不敏感操作的数据永远不会更改,因此可以安全地保存和交换。

Related:,和。