我知道这有效(source):
double x = 9.7;
x.ToString("C", CultureInfo.CreateSpecificCulture("nl-NL"));
但我的代码背后有这个代码:
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB");
在我的aspx webform中,我想使用double.tostring("C")
所以没有cultureinfo。因为它是在当前线程上设置的。但是本地机器是nl-NL
。在后面的代码中,CurrentThread被设置为en-GB,但是valutasign仍然是欧元符号而不是英镑。
我错过了什么吗?或者使用tostring的重载与cultureinfo需要?换句话说,我是否必须重写所有双重tostrings才能使用cultureinfo?
答案 0 :(得分:1)
确保在页面生命周期中尽快初始化文化。实际上,甚至还有一种方法可以专门为此目的覆盖:Page.InitializeCulture
。
基于cookie的示例:
protected override void InitializeCulture()
{
var cookie = Request.Cookies[WebConfigurationManager.AppSettings["LocaleCookieName"]];
if (cookie != null)
Culture = UICulture = cookie.Value;
}
无需调用基本方法,请参阅文档以获取更多信息。