Действительные имена локалей

Как вы находите правильные имена локалей?

В настоящее время я использую MAC OS X. Но информация о других платформах также будет полезна.

#include <fstream>
#include <iostream>
int main(int argc,char* argv[])
{
 try
 {
 std::wifstream data;
 data.imbue(std::locale("en_US.UTF-16"));
 data.open("Plop");
 }
 catch(std::exception const& e)
 {
 std::cout << "Exception: " << e.what() << "\n";
 throw;
 }
}
% g++ main.cpp
% ./a.out
Exception: locale::facet::_S_create_c_locale name not valid
Abort
</iostream></fstream>
1 ответ

Эта страница говорит:

Вызов конструктора std:: locale ( ") создает объект локали, который представляет пользовательские настройки. Стандарт не говорит, что это значит, но во многих системах библиотека заменяет все, что находится в переменной среды (часто LANG или LC_ALL) вместо пустой строки. Например, общее имя для американского языка -" en_US". (В системах POSIX вы можете ввести locale -a, чтобы отобразить имена поддерживаемых локалей.)

locale -a должен работать для вас.

Если вы имеете в виду программно из С++ std libary, я не уверен.

Этот вопрос о переполнении стека, вероятно, также уместен, но он, похоже, не получил большого ответа.

Edit

Для использования UTF-16 вам, вероятно, понадобится libiconv, как указано в этот вопрос.

licensed under cc by-sa 3.0 with attribution.