你如何处理本地化/ CultureInfo

某些方法(如string.Format()或.Parse())需要IFormatProvider。 你是如何提供的?

  • 在封闭环境应用程序中(您知道永远不需要本地化),您是否只是跳过它并在没有IFormatProvider的情况下调用方法?

  • 在可能已本地化的应用程序中,您是否考虑了每个方法调用的正确值,并将其设置在那里? 这可能是’CultureInfo.CurrentCulture’或’CultureInfo.CurrentUiCulture’。

  • 或者您是否使用“MyUiCultureInfo”和“MyCultureInfo”等全局变量来通过更改其值来切换本地化? 你如何以及在哪里存储这些变量?

  • 在开发库或框架时有什么需要考虑的 – 在这种情况下如何处理本地化?

我将当前的文化设置为美国英语,因为在我的国家,很少有“聪明”的人认为小数点分隔符是逗号。 有时十进制数用’,’,有时用’。’。 并非所有计算机都配置了正确的区域设置, 您不应该依赖它

要设置应用程序范围的设置:

Application.CurrentCulture = new CultureInfo("en-US"); Application.CurrentCulture.NumberFormat.NumberDecimalSeparator = "."; 

正如您所说,您可以在封闭的环境中调用方法,而无需提供任何IFormatProvider。

正如您所写,您可以提供如下的CultureInfo对象:

  Console.WriteLine(String.Format(CultureInfo.CurrentCulture, "{0}", DateTime.Now)); Console.WriteLine(String.Format(new CultureInfo("en-US"), "{0}", DateTime.Now)); 

这样我可以用两种不同的方式显示日期,因为我的CurrentCulture是瑞典语,如下所示:

2009-05-28 13:12:43

5/28/2009 1:12:43 PM

CultureInfo.CurrentCulture处理日期等的格式化,并且是从您当前机器上的设置提供的。

CurrentCulture.CurrentUiCulture与翻译本地化有关。 意思是在窗口中的菜单等上显示的内容。

我的猜测是,如果没有提供,则方法的默认行为是使用CurrentCulture。

我总是将Culture属性放在ASPX或Master页面的开头,它会为我完成所有转换。 我永远不需要做任何硬编码或将日期/时间转换为我自己所需的文化……

 . <%@ Page Language="C#" ..etc... Culture="en-AU" %> . 

Simplez