如何根据区域设置中定义的语言本地化 DatePicker 的日期格式
Posted
技术标签:
【中文标题】如何根据区域设置中定义的语言本地化 DatePicker 的日期格式【英文标题】:How to localize DatePicker's date format based on the language defined in Regional settings 【发布时间】:2012-10-14 11:53:13 【问题描述】:我的机器上安装了英语 windows 7,并且选择的默认语言是英语(使用“区域和语言设置”)。当我使用以下 C# 语句阅读 DateTimeFormat.ShortDatePattern
时:
System.Threading.Thread.CurrentThread.CurrentUICulture.DateTimeFormat.ShortDatePattern
我得到了这个结果
"M/d/yyyy"
我也试过这个说法,还是一样的字符串。
System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern
"M/d/yyyy"
但是,现在我将语言从“区域和语言设置”更改为丹麦语。现在,如果我切换到格式选项卡并在短日期格式下显示"M/d/åååå"
,它已本地化为丹麦语。这意味着通过更改语言,日期时间格式也会发生变化。
但是,在我的应用程序中,即使加载的 CurrentUICulture 是正确的,即丹麦语的 da-DK,我仍然会得到上述英文格式字符串。我想显示本地化的 ShortDateFormat,如区域设置中所示。我是否需要自己进行本地化,或者是否有任何构建方法可以做到这一点。如果我在这里遗漏了什么,请告诉我。
编辑:添加此信息是为了根据与 Peter 的讨论进一步澄清问题。
格式组合框显示丹麦语(丹麦)。格式读得很好,即丹麦语,但字符串仍然显示 M/d/yyyy 而不是 M/d/åååå。这是我想在 DatePicker 控件中显示的确切字符串 M/d/åååå。换句话说,水印应该显示本地化的 ShortDatePattern。还在苦苦挣扎……
【问题讨论】:
【参考方案1】:尝试设置 CurrentCulture,而不是 CurrentUICulture。例如:
Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
CurrentUICulture 指定应用程序需要的资源。
CultureInfo 指定日期、时间、数字、货币值、文本排序顺序、大小写约定和字符串比较的默认格式,这是您需要的。
【讨论】:
感谢您的回复,但是您希望在上述声明之后的以下声明的结果是什么? Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern 结果是“dd-MM-yyyy”,它仍然是一个英文字符串,而不是像“dd-MM-åååå”这样的丹麦语。【参考方案2】:这是一个 C# 示例,说明您可以做什么。 (Dump 是一种 linqpad 扩展方法,您可以在自己的代码中忽略它)。
日期格式字符串的完整列表可用here
var languages = new List<string>"de-DE", "en", "es-ES", "es-MX", "fr-FR", "it-IT", "pt-BR", "sv-SE";
var date = DateTime.Now;
languages.Select (l => new
Lang=l,
d_shortDate = date.ToString("d", new CultureInfo(l)),
D_longDate = date.ToString("D", new CultureInfo(l)),
g_generalDate1 = date.ToString("g", new CultureInfo(l)),
m = date.ToString("m", new CultureInfo(l)),
y = date.ToString("y", new CultureInfo(l)),
dd = date.ToString("dd", new CultureInfo(l)),
mm = date.ToString("mm", new CultureInfo(l)),
yy = date.ToString("yy", new CultureInfo(l)),
) .Dump();
【讨论】:
以上是关于如何根据区域设置中定义的语言本地化 DatePicker 的日期格式的主要内容,如果未能解决你的问题,请参考以下文章