如何通过boost::locale获取当前设置的应用程序区域设置
如何通过boost::locale获取当前设置的应用程序区域设置
我懂你碰到的问题了——你已经用boost::locale把应用的全局区域设置成de_DE.UTF-8了,但试着获取的时候,拿到的却是系统默认的en_US,完全不是你想要的结果对吧?
你之前的操作踩了个小坑:调用gen("")其实是根据系统环境变量(比如LANG、LC_*这类)重新生成一个新的locale实例,而不是读取你已经设置好的全局区域,所以自然拿不到之前设的de_DE。
正确的做法是直接获取当前的全局std::locale,而不是重新通过generator生成。具体步骤和代码示例如下:
#include <boost/locale.hpp> #include <format> #include <iostream> int main() { using namespace boost::locale; generator gen; // 先设置全局区域为de_DE.UTF-8 std::locale::global(gen("de_DE.UTF-8")); // 正确获取当前全局区域的方式:直接用无参构造的std::locale拿当前全局设置 std::locale current_global_locale; // 从这个locale中提取boost::locale::info facet const auto& locale_info = std::use_facet<boost::locale::info>(current_global_locale); // 拼接成你需要的{language}_{country}格式 auto locale_code = std::format("{}_{}", locale_info.language(), locale_info.country()); // 此时locale_code的值就是"de_DE" std::cout << locale_code << std::endl; // 额外补充:如果需要完整的区域名称(包含编码),可以用name()方法 auto full_locale_name = locale_info.name(); std::cout << full_locale_name << std::endl; // 输出会是"de_DE.UTF-8"或者对应平台的完整名称 return 0; }
再给你划个重点:
- 别再用
gen("")去获取已设置的区域,这只会生成系统默认的新locale - 直接用
std::locale()获取当前的全局区域设置,再从中提取info facet,就能拿到你之前设置的区域信息了
内容来源于stack exchange
相关产品推荐
相关产品推荐

