Tag: cultureinfo

WPF默认日期时间格式

使用大型WPF应用程序并遇到DateTime格式的一些问题,这是一个巨大的代码库,很多地方都没有指定文化。 当用户在Windows 7或8上打开应用程序时,日期时间格式不同(Win 7使用斜杠,Win 8使用短划线)。 我尝试在应用程序启动时将文化设置为“en-US”(参见下面的链接),但它似乎不起作用? 在WPF应用程序中设置全局文化(en-IN) 如何将我的WPF应用程序设置为不使用用户计算机的文化?

文化不变的Decimal.TryParse()

我正在为十进制validation器编写一个自定义字符串,需要使用忽略文化的Decimal.TryParse(即不关心输入是否包含“。”或“,”作为小数点分隔符)。 这是建议的方法: public static bool TryParse( string s, NumberStyles style, IFormatProvider provider, out decimal result ) 我无法弄清楚要用什么作为第三个参数。 我见过的例子看起来像这样: culture = CultureInfo.CreateSpecificCulture(“en-GB”); Decimal.TryParse(value, style, culture, out number) 所以他们创造了一种特定的文化 CultureInfo没有“CreateInvariantCulture”方法,CultureInfo.InvariantCulture不是必需的类型。 什么是正确的用法?

根据链接MVC4更改文化

我对MVC中的文化变化有好奇心。 我试过两种方式,但显然我错了。 在我的Web.config中,我有: 这就是我试图改变线程文化的方式: @Html.ActionLink(“Eng”, “ChangeCulture”, “Home”, new { lang=”en-US”}, new { @class = “languageSelectorEnglish” }) 第一种方法 我有以下控制器: public void ChangeCulture(string lang) { Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(lang); Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang); Response.Cookies.Remove(“Language”); var langCookie = new HttpCookie(“Language”); langCookie[“Language”] = lang; langCookie.Value = lang; langCookie.Expires = System.DateTime.Now.AddDays(21); Response.Cookies.Add(langCookie); Response.Redirect(Request.UrlReferrer.ToString()); } 第二种方法 public ActionResult ChangeCulture(string lang) { Thread.CurrentThread.CurrentCulture = […]

我应该何时指定CurrentCulture或InvariantCulture以及何时不指定?

指定CurrentCulture或InvariantCulture而不指定文化的最佳做法是什么? 例如,根据我的阅读,如果您正在进行序列化,则需要使用InvariantCulture作为指定数据值的规范表示的方法。 这是基于文化的字符串操作的相对较小的百分比。 我发现它很长,很冗长,而且大多数时候都是丑陋的,每次我都说出来,比如说: var greeting = string.Format(CultureInfo.CurrentCulture, “Hello “, userName); 然而,我的团队最近开启了FxCop,现在总是在每个地方都使用CultureInfo。 结合简洁性,可读性和function性的最佳技术是什么? 一些好的阅读材料: 使用InvariantCulture属性 CultureInfo类

最佳实践 – 格式化多种货币

下面列出的场景的最佳做法是什么? 我们有一个应用程序,我们想支持多种货币。 该软件将尊重用户的区域设置和区域设置,以指定正确的数字格式,即$ 10,000.00或10.000,00₴等。 但是,我们希望能够根据货币ID(可能是三字母ISO4217代码)格式化不同的数字。 我们的想法是使用每种货币在数据库中存储一个表,然后请求用户选择将使用的货币符号。 然后,程序将根据区域设置/区域设置格式化所有数字,但将使用我们程序中定义的货币符号。 因此,给出以下价值和货币 10000澳元 5989.34美元 450欧元 该程序将输出 $ 10,000.00 $ 5,989.34 €450.00 或者使用区域设置将数字格式化为#####,## $结果将是; 10000,00 $ 5989,34 $ 450,00€ 尊重区域设置/区域编号格式但显示不同的货币,最佳做法是什么? 我希望这是有道理的。 使用的技术是c#.NET 2.0。

为什么不在CultureInfo.GetCultures()中展示所有国家/地区?

我使用此标准代码填充国家/地区列表: static void Main(string[] args) { List cultureList = new List(); CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures); foreach (CultureInfo culture in cultures) { try { RegionInfo region = new RegionInfo(culture.LCID); if (!(cultureList.Contains(region.EnglishName))) { cultureList.Add(region.EnglishName); Console.WriteLine(region.EnglishName); } } catch (ArgumentException ex) { // just ignore this continue; } } } 我看到一些国家被遗漏了。 只是想知道这种情况的原因是什么?

如何使用TypeConverter转换特定于文化的double?

我有TypeConverter类的问题。 它与CultureInvariant值一起正常工作,但无法转换特定文化,如英语千位分隔符。 下面是一个我无法开展工作的小型测试程序。 这是问题:) – ConvertFromString抛出exception,并显示以下消息“2,999.95不是Double的有效值”。 并且内部exception“输入字符串的格式不正确”。 。 using System; using System.Globalization; using System.ComponentModel; class Program { static void Main() { try { var culture = new CultureInfo(“en”); var typeConverter = TypeDescriptor.GetConverter(typeof(double)); double value = (double)typeConverter.ConvertFromString( null, culture, “2,999.95”); Console.WriteLine(“Value: ” + value); } catch (Exception e) { Console.WriteLine(“Error: ” + e.Message); } } } […]

为国家,语言组合创建自定义CultureInfo

我正在开发一个.net 4.5应用程序,需要多语言支持多文化等。 以下是国家/语言的示例列表 俄罗斯/俄罗斯 比利时/法国 比利时/荷兰 对于上述所有内容,可以根据上述文化名称创建CultureInfo对象 RU-RU FR-BE NL-BE 当用户进入站点时,我将Thread.CurrentThread.CurrentCulture和Thread.CurrentThread.CurrentUICulture设置为使用上述名称创建的文化,例如。 Thread.CurrentThread.CurrentCulture = new CultureInfo(“nl-BE”, false) Thread.CurrentThread.CurrentUICulture = new CultureInfo(“nl-BE”, false) 以上所有名称均为有效的文化名称。 不,但我需要在俄罗斯添加另一种文化名称,英语。 但问题是代码en-RU无效,所以当我创建new CultureInfo(“en-RU”, false)我得到一个CultureNotFoundException,因为en-RU无效。 有了这种文化,我希望俄罗斯的格式等数字,日期等,但我希望网站上的语言是英语。 是否可以使用国家/地区(俄罗斯)的行为为无效的文化名称创建自定义CultureInfo对象?

如何正确设置Silverlight CurrentUICulture / CurrentCulture?

我正在使用C#开发SL5应用程序,我希望将其国际化。 我发现以下内容来设置UI文化: var culture = new CultureInfo(Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName); Thread.CurrentThread.CurrentUICulture = culture; Thread.CurrentThread.CurrentCulture = culture; 像DatePicker这样的控件似乎可以选择它。 如果我使用’d’格式字符串格式化任何日期时间,我仍然会得到默认格式“M / dd / yyyy”。 SL究竟如何解释文化以及如何为整个应用程序正确设置? 谢谢 更新: 找到答案: 首先,在Application_Startup中设置适当的文化: var culture = new CultureInfo(“nl-BE”); Thread.CurrentThread.CurrentUICulture = culture; Thread.CurrentThread.CurrentCulture = culture; 然而,关键因素是添加以下内容以强制RootVisual的文化/语言: var root = RootVisual as Page; if (root != null) { root.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name); }

格式化不同文化中的数字

假设文化不变 ,是否可以以格式定义不同的组分隔符 – 而不是逗号? Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; Console.WriteLine(String.Format(“{0:#,##0}”, 2295)); 输出: 2,295 期望的输出: 2.295 不变文化是一项要求,因为来自许多不同语言环境的货币都使用格式字符串格式化,这些格式字符串是用户定义的。 即丹麦他们已经将价格格式定义为“{0:0}, – ”,而对于爱尔兰,它可能是“€{0:#,## 0}”。