What std::locale names are available on common windows compilers?

Ok, there is a difference between C and C++ locales.

Let’s start:

  • MSVC C++ std::locale and C setlocale

    Accepts locale names as “Language[_Country][.Codepage]” for example “English_United States.1251” Otherwise would throws. Note: codepage can’t be 65001/UTF-8 and should be consistent with ANSI codepage for this locale (or just omitted)

  • MSVC C++ std::locale and C setlocale in Vista and 7 should accept locales
    [Language][-Script][-Country] like “en-US” using ISO-631 language codes and
    ISO 3166 regions and script names.

    I tested it with Visual Studio on Windows 7 – it does not work.

  • MinGW C++ std::locale accepts “C” and “POSIX” it does not support other locales,
    actually gcc supports locales only over GNU C library – basically only under Linux.

    setlocale is native Windows API call so should support all I mentioned above.

    It may support wider range of locales when used with alternative C++ libraries
    like Apache stdcxx or STL Port.

  • ICC – I hadn’t tested it but it depends on the standard C++ library it uses. For
    example under Linux it used GCC’s libstdc++ so it supports all the locales gcc
    supports. I don’t know what standard C++ library it uses under Windows.

If you want to have “compiler and platform” independent locales support (and actually
much better support) take a look on Boost.Locale

Artyom

Leave a Comment