CultureInfo.DisplayName собирается саами на меня - PullRequest
2 голосов
/ 02 июня 2010

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

MSDN говорит

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

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

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

<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 Ответ

0 голосов
/ 02 июня 2010

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

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

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

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

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

...