【问题标题】:changing language with setlocale on Windows在 Windows 上使用 setlocale 更改语言
【发布时间】:2021-07-31 06:33:58
【问题描述】:

我有一个使用 libintl 的 gettext 的 CLI 程序,并调用 setlocale(LC_ALL, "") 将输出语言更改为用户的首选语言。

我正在以美国英语为默认语言环境的机器上进行开发,并希望测试德语输出。这在 Linux 上很容易,我可以使用环境变量更改语言,如下所示:LANGUAGE=de_DE ./a.out

在 Windows 上似乎没有这样的环境变量? setlocale 的 CRT 参考说:

区域名称设置为 GetUserDefaultLocaleName 返回的值。

我找不到任何关于如何更改单个进程的默认语言环境的信息。有这种事吗?

【问题讨论】:

    标签: c winapi gettext


    【解决方案1】:

    您可以使用支持的语言环境字符串调用setlocale 来设置每个进程的语言环境。
    函数_configthreadlocale用于控制setlocale是影响程序中所有线程的语言环境还是只影响调用线程的语言环境。
    为什么不在程序中设置语言环境?

    【讨论】:

    • 这不是我要修改的程序,我也不想分叉它。在其他操作系统上,不需要修改,因为可以使用环境变量设置语言环境 - 我只是问在 Windows 上是否可以这样做。
    【解决方案2】:

    没关系,这个问题原来与 setlocale 无关。该程序使用 /usr/share/locale 调用 bindtextdomain,这在 Windows 上不存在。一旦我将其更改为在正确的位置搜索 .mo 文件,set LANG=de 就会按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 2015-06-12
      相关资源
      最近更新 更多