c# - 文化不敏感 VS 文化敏感
问题描述
我已经看过很多关于文化不敏感和文化敏感的时间了,我不知道它们之间的区别到底是什么。
在一些书中,他们将说明符分为两类:
文化不敏感的日期/时间格式字符串和
文化敏感的日期/时间格式字符串
我知道说明符,但我不知道敏感和不敏感。
有人可以指导我吗?
解决方案
首先,我建议您参阅.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);
}
导致以下
这些技术一起可以帮助您创建一个对用户的语言和文化敏感的应用程序。如果您需要覆盖它,您也可以通过指定在呈现数据时使用哪种文化来有意识地做到这一点。对变化的实体进行硬编码对文化不敏感,并且无论运行它的机器的语言环境如何,都会显示相同的内容。
推荐阅读
- r - 几列的唯一值(基本问题)
- python - 在 django 中查询多对多字段会产生一个空查询集
- windows - 检索PowerShell中日期范围内修改的文件的完整路径和文件权限
- flutter - 小部件在第二次运行时为图标添加了额外的填充?
- r - 在 ggplot2 和 plotly 中仅显示一层的工具提示
- excel - MS Excel 日期转换
- azure - Azure 数据流 md5 函数无法将十进制值识别为唯一值
- html - 防止重叠文本区域中的文本
- postgresql - 通过 FLUTTER WEB APP 连接和使用 PostgreSQL 数据库的问题
- java - Java 重载是如何工作的?