修改现有文化?
CultureInfo culture = new CultureInfo("en-US"); culture.DateTimeFormat.DateSeparator = "/"; culture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy"; //dekadikoi arithmoi culture.NumberFormat.NumberDecimalSeparator = "."; Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture;
因为它需要在任何地方工作! 问题是做new CultureInfo("en-US");
所有其他计算机特定的设置都被省略…有没有办法复制CurrentCulture? 我试图修改currentculture但我只读了错误…
CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); culture.DateTimeFormat.DateSeparator = "/"; culture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy"; //dekadikoi arithmoi culture.NumberFormat.NumberDecimalSeparator = "."; Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture;
您可能希望使用:
CultureInfo culture = (CultureInfo)CultureInfo.CurrentUICulture.Clone();
代替。
只需更改一行:
CultureInfo culture = CultureInfo.GetCultureInfo("en-US");
那怎么样: CultureInfo culture=CultureInfo.CurrentCulture;
只需获取CurrentCulture类的副本并根据需要对其进行修改即可。 如果确实需要更改线程本身的CultureInfo(而不是使用副本),则需要为代码提供安全权限并将ControlThread
属性设置为true。 (见链接)
根据Jon Hanna的解决方案,我建议从特定的文化开始,因为CurrentCulture可以设置为任何东西。
public static CultureInfo GetCustomCulture(string baseCulture = "en-ZA", char numberDecimalSeperator = '.', char listSeperator = ',') { var culture = CultureInfo.GetCultureInfo(baseCulture).Clone(); culture.NumberFormat.NumberDecimalSeparator = numberDecimalSeperator + ""; culture.TextInfo.ListSeparator = listSeperator + ""; return culture; }
然后将此行添加到Program.cs
的开头
System.Globalization.CultureInfo.CurrentCulture = GetCustomCulture();