实例是只读异常,而在asp.net中更改区域性

时间:2019-07-05 08:18:24

标签: c# .net asp.net-mvc currentculture

我尝试在用户能够更改语言,日期格式等的地方实现多文化应用程序。我编写了core,但是它返回Exception: 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;

我对线程不熟悉,不确定我使用的是否正确。 你能建议我如何正确地做到这一点吗?

1 个答案:

答案 0 :(得分:1)

您收到Instance is read-only错误,因为您正在尝试通过以下代码更改只读区域性上的属性。

Thread.CurrentThread.CurrentCulture.DateTimeFormat = europeanDateFormat;

您可以通过其IsReadOnly属性检查区域性是否为只读;内置的是。

相反,您必须对当前活动的区域性进行克隆/复制,在该克隆上进行任何更改,然后将其分配给当前线程的CurrentCulture和/或CurrentUICulture

var clone = Thread.CurrentThread.CurrentCulture.Clone() as CultureInfo;
clone.DateTimeFormat = CultureInfo.GetCultureInfo("it").DateTimeFormat;

Thread.CurrentThread.CurrentCulture = clone;
Thread.CurrentThread.CurrentUICulture = clone;