我住在多米尼加共和国,多年来一直在使用 .NET Framework 开发应用程序。通常,我会为这种特定文化创建本地化应用程序 (es-DO
),使用内置的 .NET 全局化机制对我很有帮助。对于 Web 应用程序,我通常在 Web.Config 中定义全局文化:
<globalization culture="es-DO" uiCulture="es-DO" />
但在 DateTimeFormat
的 ShortDatePattern
中存在一个问题,这种文化让我和其他开发人员感到困惑。由于未知原因,默认的 ShortDatePattern
格式是 d/M/yy
而实际上这个国家/地区使用的常规范式是 dd/MM/yyyy
和 dd-MM-yyyy
与大多数其他讲西类牙语的国家(顺便说一句,配置正确)一样。
我创建了一个小型控制台应用程序来更好地说明:
我已经在多台 PC 上确认了相同的行为,甚至将我的 Web 应用程序发布到 Windows Azure 等托管服务提供商。
我一直在寻找关于这个主题的信息,但它似乎是一个关于这种特定(我可能会补充说不太流行)文化的非常本地化的问题,因此很难找到任何文档。
基本上,我有两个问题:
- 他们怎么知道正确的文化格式?他们做了什么研究?这是否记录在我可以查看的地方?并且,
- 是否可以解决这个问题而不必在我的应用程序中的任何地方指定所需的格式?
编辑
这已被报告为 Microsoft Connect 中的错误和 Visual Studio Forums .
最佳答案
How do they know the correct culture format? They did any kind of study? Is this documented somewhere that I can look at?
Microsoft 有一个团队负责维护这些数据。他们的内部研究没有直接发表(据我所知),但这暗示了以下来自 this article 的陈述。 :
Individual property values are subject to change and revision over time, as data is corrected, better data becomes available, or culture-specific conventions change.
此数据有其他公共(public)来源,特别是 Unicode CLDR .但尚不清楚微软是否在他们的决定中使用了这些信息。快速检查 the CLDR data for
es_DO
显示与es_419
(Latin American Spanish) 没有变化,即使显示日期时间格式与es
(general Spanish) 没有变化格式定义正确的地方。因此,如果 Microsoft 使用它,他们肯定不会逐字使用它,否则您会看到正确的结果。您或许能够在其中一个博客中找到隐藏的东西,或者直接联系作者:
Is it possible to fix this issue without having to specify the desired format everywhere in my application/s?
当然,只需更改当前线程的文化:
var currentCulture = Thread.CurrentThread.CurrentCulture; if (currentCulture.Name == "es-DO") { var culture = (CultureInfo) currentCulture.Clone(); culture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy"; Thread.CurrentThread.CurrentCulture = culture; }
在网络应用程序中,您可以在
Application_BeginRequest
中执行此操作您的 global.asax.cs 文件,它将贯穿您的整个应用程序。
关于.net - 文化 es-DO 的默认 DateTimeFormat.ShortDatePattern 不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18749374/