Локальная поддержка похожа на поддержку форматирования, о чем свидетельствует следующий пример:
namespace cnv = boost::cnv;
namespace arg = boost::cnv::parameter;
boost::cnv::cstream cnv;
std::locale rus_locale;
std::locale eng_locale;
char const* eng_locale_name = test::cnv::is_msc ? "English_United States.1251" : "en_US.UTF-8";
char const* rus_locale_name = test::cnv::is_msc ? "Russian_Russia.1251" : "ru_RU.UTF-8";
char const* rus_expected = test::cnv::is_msc ? "1,235e-002" : "1,235e-02";
char const* eng_expected = test::cnv::is_msc ? "1.235e-002" : "1.235e-02";
char const* double_s01 = test::cnv::is_msc ? "1.2345E-002" : "1.2345E-02";
cnv(arg::precision = 4)
(arg::uppercase = true)
(arg::notation = cnv::notation::scientific);
double double_v01 = convert<double>(double_s01, cnv).value_or(0);
string double_s02 = convert<string>(double_v01, cnv).value_or("bad");
BOOST_TEST(double_s01 == double_s02);
try { rus_locale = std::locale(rus_locale_name); }
catch (...) { printf("Bad locale %s.\n", rus_locale_name); exit(1); }
try { eng_locale = std::locale(eng_locale_name); }
catch (...) { printf("Bad locale %s.\n", eng_locale_name); exit(1); }
cnv(arg::precision = 3)(arg::uppercase = false);
string double_rus = convert<string>(double_v01, cnv(rus_locale)).value_or("bad double_rus");
string double_eng = convert<string>(double_v01, cnv(eng_locale)).value_or("bad double_eng");
BOOST_TEST(double_rus == rus_expected);
BOOST_TEST(double_eng == eng_expected);