我有一个 CLI 程序,它使用 libintl 的 gettext,并调用 setlocale(LC_ALL, "") 将输出语言更改为用户的首选语言。
我正在一台默认语言环境为美国英语的机器上进行开发,并且想要测试德语输出。这在 Linux 上很容易,我可以使用环境变量更改语言,如下所示:
LANGUAGE=de_DE ./a.out
Windows上好像没有这样的环境变量? setlocale 的 CRT 参考说:
区域设置名称设置为 GetUserDefaultLocaleName 返回的值。
我找不到任何提及如何更改单个进程的默认区域设置的信息。还有这种事吗?
没关系,问题结果与 setlocale 无关。该程序使用/usr/share/locale 调用bindtextdomain,而Windows 上不存在该命令。当我将其更改为在正确的位置搜索 .mo 文件后,
set LANG=de
按预期工作。
setlocale
来设置每个进程的区域设置。_configthreadlocale
用于控制 setlocale
是否影响程序中所有线程的区域设置或仅影响调用线程的区域设置。从使用系统帐户运行的Windows服务调用setlocale(LC_AL,""),它似乎没有读取当前用户注册表HKCU(登录到桌面会话),而是系统默认区域设置,我设法从中读取当前用户的,但我想知道还有其他人遇到过这个吗? getlocaleinfo 还获取系统默认区域设置,也许将配置文件从用户复制到系统的?