Использование CultureAndRegionInfoBuilder для обновления встроенной культуры .Net - PullRequest
1 голос
/ 29 июля 2009

Я пытаюсь изменить встроенную .Net-культуру fr-CA, используя следующий метод:

    CultureAndRegionInfoBuilder cib = new CultureAndRegionInfoBuilder("fr-CA", CultureAndRegionModifiers.Replacement);

    try
    {
        Console.WriteLine("Updating " + cib.CultureName);

        cib.NumberFormat.CurrencyGroupSeparator = ",";
        cib.NumberFormat.CurrencyDecimalSeparator = ".";
        cib.NumberFormat.NumberGroupSeparator = ",";
        cib.NumberFormat.NumberDecimalSeparator = ".";

        cib.Register();

        Console.WriteLine("Culture updated.");
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
        Console.ReadKey();
    }

Однако вызов Register () завершается с ошибкой «System.InvalidOperationException: сбой метода« Register », поскольку пользовательская культура fr-CA» уже существует ».

Можно ли обновить встроенную культуру? В соответствии с документами (http://msdn.microsoft.com/en-us/library/system.globalization.cultureandregioninfobuilder.cultureandregioninfobuilder.aspx), похоже, я могу просто обновить его, хотя, возможно, я неправильно читаю.

Ответы [ 2 ]

6 голосов
/ 06 августа 2009

Я просто должен был добавить:

CultureAndRegionInfoBuilder.UnRegister("fr-CA");

до регистрации ().

1 голос
/ 27 октября 2009

Возможно, вам лучше создать копию существующей культуры и зарегистрировать ее под новым именем, например, "fr-CACustom".

[Обратите внимание, что пользовательский язык может быть зарегистрирован на компьютере только пользователем, имеющим права администратора на этом компьютере.]

try
{
    CultureAndRegionInfoBuilder cib = new CultureAndRegionInfoBuilder("fr-CACustom", CultureAndRegionModifiers.None);
    cib.LoadDataFromCultureInfo(new CultureInfo("fr-CA"));
    Console.WriteLine("Creating" + cib.CultureName);

    cib.NumberFormat.CurrencyGroupSeparator = ",";
    cib.NumberFormat.CurrencyDecimalSeparator = ".";
    cib.NumberFormat.NumberGroupSeparator = ",";
    cib.NumberFormat.NumberDecimalSeparator = ".";

    // add some region info also
    cib.LoadDataFromRegionInfo(new RegionInfo("CA"));
    cib.RegionEnglishName = "RegionInfo derived from French-speaking Canada";

    cib.Register();

    Console.WriteLine("New culture created.");
}
catch (Exception e)
{
    Console.WriteLine(e);
    Console.ReadKey();
}

Этот код регистрирует пользовательскую культуру, определяемую именем культуры, в системном каталоге% WINDIR% \ Globalization, где% WINDIR% - это каталог операционной системы Windows. Это сделает пользовательскую культуру доступной для других приложений.

CultureInfo test = new CultureInfo("fr-CACustom");

[Примечание: чтобы иметь доступ к классу CultureAndRegionInfoBuilder, вам нужна ссылка на сборку sysglobl, которая не является ссылкой по умолчанию в большинстве шаблонов проектов Visual Studio.]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...