You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 11:54:32