文化不敏感 VS 文化敏感

Culture-insensitive VS Culture-sensitive

我看了很多时间关于文化不敏感文化敏感我不知道到底是什么他们之间的区别。

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

文化不敏感 date/time 格式字符串

文化敏感 date/time 格式字符串

我知道说明符,但我不知道敏感和不敏感。

有人可以指导我吗?

首先,我建议您参考 .NET Globalization & Localization 了解更多信息。

某些 values/entities 在不同的国家和地区受到不同的对待。这些实体包括货币符号、数字分隔符、日期等。向用户显示此数据时,您必须以对他们有意义的方式对其进行格式化。例如,如果您在贷款分期付款申请中按如下方式显示资金:

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:"。一些简单的事情可能会有所不同,例如颜色的拼写(英国英语颜色)。对于不会说英语但在各自国家受到重视的人来说,这些事情可能无关紧要。例如,如果您的应用显示 children 正确的拼写,您希望它能够正确显示它所在的位置。

在这种情况下,您可以设置 UI 区域性并使用资源 (resx) 文件来放置字符串。在 运行 时,您可以从资源文件和 .NET 加载字符串运行time 可以根据它检测到的 PC 设置的文化加载正确的 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);
}

结果如下

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

直接与用户交互时应使用文化敏感操作。与后端进程和交换系统交互时,应始终使用文化不敏感操作,包括持久数据。由于多种原因,支持文化特定操作的数据可能会发生变化。支持文化不敏感操作的数据永远不会改变,因此可以安全地保留和交换。