List of locales in Windows

2019-02-18 05:56发布

On *nix systems you can do locale -a to get a list of available locales.

What is the equivalent command (or action) in Windows?

I've seen lists on the Internet, but most of them are of just locale labels and not actual locale names. Plus, not all systems are guaranteed to have all of them installed, right?

Note that my definition of "locale" here is "locale string", i.e. a second parameter to C's setlocale() which will result in a non-NULL return value.

Programmatic answers are also fine, I'm just tired of brute force guessing Windows locale names.

2条回答
Rolldiameter
2楼-- · 2019-02-18 06:00

This page seems to contain links to lists of language and country/region that the WIN32 setlocale recognizes. However:

The set of available languages, country/region codes, and code pages includes all those supported by the Win32 NLS API except code pages that require more than two bytes per character, such as UTF-7 and UTF-8. If you provide a code page like UTF-7 or UTF-8, setlocale will fail, returning NULL.

fail.

查看更多
你好瞎i
3楼-- · 2019-02-18 06:19

Initially, I couldn't find a C/Win32 API to get the information. (See later edit.) However, it looks like the .NET class System.Globalization.CultureInfo could provide the information you need. In particular, see CultureInfo.GetCultures(). This page seems to have a complete example of what you are looking for.

EDIT: If you prefer a C/Win32 API, see EnumSystemLocales() function, along with simple example code.

EDIT 2: This example shows how to convert an LCID (which you get from EnumSystemLocales()) into a string useable by setlocale().

查看更多
登录 后发表回答