为了账号安全,请及时绑定邮箱和手机立即绑定

文化不敏感 VS 文化敏感

文化不敏感 VS 文化敏感

C#
梦里花落0921 2021-11-14 17:27:04
我已经看到很多关于文化不敏感和文化敏感的时间,我不知道它们之间的区别究竟是什么。在一些书中,他们将说明符分为两类:不区分文化的日期/时间格式字符串和区分区域性的日期/时间格式字符串我知道说明符,但我不知道敏感和不敏感。有人可以指导我吗?
查看完整描述

2 回答

?
慕虎7371278

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);

}

导致以下

//img1.sycdn.imooc.com//6190d6850001a76710150540.jpg

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


查看完整回答
反对 回复 2021-11-14
?
互换的青春

TA贡献1797条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-11-14
  • 2 回答
  • 0 关注
  • 262 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信