Список локалей в Windows

В системах *nix вы можете выполнить locale -a, чтобы получить список доступных локалей.

Что такое эквивалентная команда (или действие) в Windows?

Я видел списки в Интернете, но большинство из них состоят только из меток локалей, а не из названий локалей. Кроме того, не все системы гарантированно будут установлены, верно?

Обратите внимание, что мое определение «локали» здесь — это «строка локали», то есть второй параметр для C setlocale(), который приведет к возвращаемому значению, отличному от NULL.

Программные ответы тоже хороши, я просто устал от перебора угадывания имен локалей Windows.


person aib    schedule 01.03.2011    source источник


Ответы (2)


Сначала я не мог найти C/Win32 API для получения информации. (См. позднее редактирование.) Однако это похоже на класс .NET System.Globalization.CultureInfo может предоставить необходимую информацию. В частности, см. CultureInfo.GetCultures(). На этой странице есть полный пример того, что вы ищете.

РЕДАКТИРОВАТЬ: Если вы предпочитаете API C/Win32, см. EnumSystemLocales().

РЕДАКТИРОВАТЬ 2: В этом примере показано, как преобразовать LCID (который вы получаете от EnumSystemLocales()) в строку, которую может использовать setlocale().

person Eric Pi    schedule 01.03.2011
comment
Очень хорошая информация о локали, но по-прежнему нет строки локали, используемой setlocale(). - person aib; 01.03.2011
comment
[Последний] пример — это начало, но мне интересно, как он обрабатывает локали с несколькими кодовыми страницами (не говоря уже о языках или странах/регионах). Похоже, он извлекает только кодовую страницу ANSI по умолчанию или кодовую страницу по умолчанию, если она не существует. Кажется, также есть кодовые страницы EBCDIC и MAC по умолчанию. Не то чтобы это имело значение; Я получил ответ: такой утилиты не существует; нужно прочитать плохую документацию NLS и программно сгенерировать и исключить имена локалей. - person aib; 01.03.2011

Эта страница содержит ссылки на списки языков и стран/регионов, setlocale WIN32 распознает. Однако:

Набор доступных языков, кодов страны/региона и кодовых страниц включает все те, которые поддерживаются Win32 NLS API, за исключением кодовых страниц, для которых требуется более двух байтов на символ, таких как UTF-7 и UTF-8. Если вы укажете кодовую страницу, такую ​​как UTF-7 или UTF-8, setlocale завершится ошибкой и вернет NULL.

потерпеть неудачу.

person aib    schedule 01.03.2011
comment
Однако мне все еще интересно узнать о поддержке UTF-16. - person aib; 01.03.2011
comment
Не говоря уже о UTF-32. т.е. почему бы нет? :) - person mlvljr; 01.04.2011
comment
@mlvljr: пожимает плечами Я думаю, это потому, что UTF-32 определенно требует более двух байтов на символ (так же, как и UTF-16, но UTF-32 требует больше - некоторые требования более обязательны, чем другие?) Хотя если подумать, UTF-32 гораздо проще реализовать. - person aib; 03.04.2011