blob: b0aab03c7119daa93c7643efd7d6b5de14dcef9e [file] [log] [blame]
//
// Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
#define BOOST_LOCALE_SOURCE
#include <boost/locale/util.hpp>
#include <boost/config.hpp>
#include <stdlib.h>
#ifdef BOOST_MSVC
# pragma warning(disable : 4996)
#endif
#if defined(BOOST_WINDOWS) || defined(__CYGWIN__)
#ifndef NOMINMAX
#define NOMINMAX
#endif
#include <windows.h>
#define BOOST_LOCALE_USE_WIN32_API
#endif
namespace boost {
namespace locale {
namespace util {
std::string get_system_locale(bool use_utf8)
{
char const *lang = 0;
if(!lang || !*lang)
lang = getenv("LC_CTYPE");
if(!lang || !*lang)
lang = getenv("LC_ALL");
if(!lang || !*lang)
lang = getenv("LANG");
#ifndef BOOST_LOCALE_USE_WIN32_API
(void)use_utf8; // not relevant for non-windows
if(!lang || !*lang)
lang = "C";
return lang;
#else
if(lang && *lang) {
return lang;
}
char buf[10];
if(GetLocaleInfoA(LOCALE_USER_DEFAULT,LOCALE_SISO639LANGNAME,buf,sizeof(buf))==0)
return "C";
std::string lc_name = buf;
if(GetLocaleInfoA(LOCALE_USER_DEFAULT,LOCALE_SISO3166CTRYNAME,buf,sizeof(buf))!=0) {
lc_name += "_";
lc_name += buf;
}
if(!use_utf8) {
if(GetLocaleInfoA(LOCALE_USER_DEFAULT,LOCALE_IDEFAULTANSICODEPAGE,buf,sizeof(buf))!=0) {
if(atoi(buf)==0)
lc_name+=".UTF-8";
else {
lc_name +=".windows-";
lc_name +=buf;
}
}
else {
lc_name += "UTF-8";
}
}
else {
lc_name += ".UTF-8";
}
return lc_name;
#endif
}
} // impl
} // locale
} // boost
// vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4