在 asp.net 中更改区域性时实例是只读异常
Instance is read-only Exception while changing culture in asp.net
我尝试实现多文化应用程序,用户可以在其中更改语言、日期格式等。我写了核心,但它 returns 异常:
System.InvalidOperationException: 实例是只读的。
switch (culture)
{
case SystemCulture.English:
Thread.CurrentThread.CurrentCulture = new CultureInfo(CultureCodes.English);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(CultureCodes.English);
break;
//another cultures here
}
switch (cultureFormat)
{
case SystemDateFormat.European:
var europeanDateFormat = CultureInfo.GetCultureInfo(CultureCodes.Italian).DateTimeFormat;
Thread.CurrentThread.CurrentCulture.DateTimeFormat = europeanDateFormat;
Thread.CurrentThread.CurrentUICulture.DateTimeFormat = europeanDateFormat;
break;
//another cultures here
}
我在互联网上找到了一些信息,我必须使用我的文化的新实例对象,我更改了我的代码只是添加:
CultureInfo myCulture;
switch (culture)
{
case SystemCulture.English:
myCulture= new CultureInfo(CultureCodes.English);
break;
}
和波纹管,开关不在:
Thread.CurrentThread.CurrentCulture = cultureInfo;
我不熟悉 Threads,我不确定我使用的是否正确。
你能建议我如何正确地做到这一点吗?
您收到 Instance is read-only
错误是因为您试图通过以下代码更改 read-only 文化上的 属性。
Thread.CurrentThread.CurrentCulture.DateTimeFormat = europeanDateFormat;
您可以通过 IsReadOnly
属性 检查文化是否只读; built-in 个是。
相反,您必须对当前活动的区域性进行 clone/copy,对该克隆应用任何更改并将其分配给 CurrentCulture
and/or CurrentUICulture
当前线程。
var clone = Thread.CurrentThread.CurrentCulture.Clone() as CultureInfo;
clone.DateTimeFormat = CultureInfo.GetCultureInfo("it").DateTimeFormat;
Thread.CurrentThread.CurrentCulture = clone;
Thread.CurrentThread.CurrentUICulture = clone;
我尝试实现多文化应用程序,用户可以在其中更改语言、日期格式等。我写了核心,但它 returns 异常: System.InvalidOperationException: 实例是只读的。
switch (culture)
{
case SystemCulture.English:
Thread.CurrentThread.CurrentCulture = new CultureInfo(CultureCodes.English);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(CultureCodes.English);
break;
//another cultures here
}
switch (cultureFormat)
{
case SystemDateFormat.European:
var europeanDateFormat = CultureInfo.GetCultureInfo(CultureCodes.Italian).DateTimeFormat;
Thread.CurrentThread.CurrentCulture.DateTimeFormat = europeanDateFormat;
Thread.CurrentThread.CurrentUICulture.DateTimeFormat = europeanDateFormat;
break;
//another cultures here
}
我在互联网上找到了一些信息,我必须使用我的文化的新实例对象,我更改了我的代码只是添加:
CultureInfo myCulture;
switch (culture)
{
case SystemCulture.English:
myCulture= new CultureInfo(CultureCodes.English);
break;
}
和波纹管,开关不在:
Thread.CurrentThread.CurrentCulture = cultureInfo;
我不熟悉 Threads,我不确定我使用的是否正确。 你能建议我如何正确地做到这一点吗?
您收到 Instance is read-only
错误是因为您试图通过以下代码更改 read-only 文化上的 属性。
Thread.CurrentThread.CurrentCulture.DateTimeFormat = europeanDateFormat;
您可以通过 IsReadOnly
属性 检查文化是否只读; built-in 个是。
相反,您必须对当前活动的区域性进行 clone/copy,对该克隆应用任何更改并将其分配给 CurrentCulture
and/or CurrentUICulture
当前线程。
var clone = Thread.CurrentThread.CurrentCulture.Clone() as CultureInfo;
clone.DateTimeFormat = CultureInfo.GetCultureInfo("it").DateTimeFormat;
Thread.CurrentThread.CurrentCulture = clone;
Thread.CurrentThread.CurrentUICulture = clone;