CultureInfo.DisplayName использует Sami для меня

#.net #cultureinfo

#.net #cultureinfo

Вопрос:

Почему CultureInfo.DisplayName внезапно появляется на Sami? Я использую его для отображения списка названий стран. Возможно, это не очень хорошая идея, но до недавнего времени это работало, и я совершенно уверен, что это было на шведском (думаю, это мог быть английский).

MSDN говорит

Это свойство представляет локализованное имя из версии .NET Framework. Например, если установлена английская версия .NET Framework, свойство возвращает «Английский (Соединенные Штаты)» для названия культуры в США. Если установлена испанская версия .NET Framework, независимо от языка, на котором настроена система для отображения, название языка отображается на испанском, а свойство для en-US возвращает «Ingles (Estados Unidos)».

Но я совершенно уверен, что у меня не установлена версия фреймворка Sami.

Мой веб-конфиг имеет:

 <globalization
        culture="sv-SE"
        uiCulture="sv-SE"/>
  

Дополнение: код

         public static IEnumerable<KeyValuePair<string, string>> CountryList
    {
        get
        {
            Thread.CurrentThread.CurrentCulture =
                CultureInfo.CreateSpecificCulture("sv-SE");
            Thread.CurrentThread.CurrentUICulture = new
                CultureInfo("sv-SE"); 

            var cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
            /*Array.Sort(countries.Select(
                x => Regex.Match(x.DisplayName, "\(([\w- ] )\)").ToString()).ToArray(),
                countries);
            */

            SortedDictionary<string, CultureInfo> d = new SortedDictionary<string, CultureInfo>();
            foreach (CultureInfo cultureInfo in cultures)
            {
                string key = Regex.Match(cultureInfo.DisplayName, "\(([\w- ] )\)").ToString();
                if (!d.ContainsKey(key))
                    d.Add(key, cultureInfo);
            }

            var countries = d
                .Where(x => Regex.Match(x.Value.DisplayName, "\([A-ZÅÄÖ]").Success)
                .Select(
                x => new KeyValuePair<string, string>(
                         Regex.Match(x.Value.Name, "-(\w )").Groups[1].ToString(),
                         Regex.Match(x.Value.DisplayName, "\(([\w- ] )\)").Groups[1].ToString()
                         ));
            return countries;
        }
    }
  

Ответ №1:

Я предполагаю, что для вашего окна установлен языковой стандарт smj-sv или что-то подобное. Затем .NET Framework сгенерирует культуру, как описано в

Культуры, созданные из локалей Windows

Обычно значения в вашем Web.config должны перезаписывать настройки локали Windows (пользователя), но, возможно, значения больше не извлекаются из вашего Web.config. Вы проверили, что файл не поврежден и действителен?

Чтобы узнать, не проблема ли это с вашим Web.config, я бы попробовал настроить язык программно, переопределив InitializeCulture метод, как описано здесь:

Как: Установить культуру и пользовательский интерфейс для ASP.NET Глобализация веб-страниц

Комментарии:

1. Спасибо за ваше предложение. Я сделал, как вы сказали. Ничего нового.