【问题标题】:How to make GetLocaleInfoEx return its data in a specific language?如何让 GetLocaleInfoEx 以特定语言返回其数据?
【发布时间】:2021-08-17 15:30:11
【问题描述】:

我正在使用GetLocaleInfoEx 获取区域设置的“显示名称”:但是,我希望以该区域设置中使用的语言返回“显示名称”。

代码相当于这个(这里以ex-MX为例):

const wchar_t localeName[] = L"es-MX";
wchar_t buf[1024];
GetLocaleInfoEx(localeName, LOCALE_SLOCALIZEDDISPLAYNAME, buf, sizeof(buf) / sizeof(*buf));
std::cout << to_utf8(buf) << '\n';

但是,返回的字符串是

Hiszpański (Meksyk)

大概是因为我的系统区域设置和显示语言设置为波兰语。

我能做些什么来强制GetLocaleInfoEx 以西班牙语返回字符串(在这种特殊情况下)?我希望它像

Español (México)

到目前为止我所做的尝试(这两件事都是在调用GetLocaleInfoEx之前完成的):

  1. 将语言环境名称转换为 LCID 并设置线程语言环境:
SetThreadLocale(LocaleNameToLCID(localeName, 0));
  1. 设置首选 UI 语言:
const wchar_t preferredLangs[] = L"es-MX\0";
unsigned long numLangsSet;
SetProcessPreferredUILanguages(MUI_LANGUAGE_NAME, preferredLangs, &numLangsSet);
if (numLangsSet != 1) {
  return 1;
}

但是,这些方法似乎都不起作用:返回的字符串仍然是Hiszpański (Meksyk)

还可以做些什么来设置GetLocaleInfoEx的输出所需的语言?

【问题讨论】:

    标签: c++ winapi locale


    【解决方案1】:

    您可以在调用GetLocaleInfoEx 时使用LOCALE_SNATIVEDISPLAYNAME 而不是LOCALE_SLOCALIZEDDISPLAYNAME

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      相关资源
      最近更新 更多