// // 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 #include #include #ifdef BOOST_MSVC # pragma warning(disable : 4996) #endif #if defined(BOOST_WINDOWS) || defined(__CYGWIN__) #ifndef NOMINMAX #define NOMINMAX #endif #include #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