在 Windows 上使用 setlocale 更改语言

问题描述 投票:0回答:3

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

我正在一台默认语言环境为美国英语的机器上进行开发,并且想要测试德语输出。这在 Linux 上很容易,我可以使用环境变量更改语言,如下所示:

LANGUAGE=de_DE ./a.out

Windows上好像没有这样的环境变量? setlocale 的 CRT 参考说:

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

我找不到任何提及如何更改单个进程的默认区域设置的信息。还有这种事吗?

c winapi gettext
3个回答
1
投票

没关系,问题结果与 setlocale 无关。该程序使用/usr/share/locale 调用bindtextdomain,而Windows 上不存在该命令。当我将其更改为在正确的位置搜索 .mo 文件后,

set LANG=de
按预期工作。


0
投票

您可以使用受支持的区域设置字符串调用

setlocale
来设置每个进程的区域设置。
函数
_configthreadlocale
用于控制
setlocale
是否影响程序中所有线程的区域设置或仅影响调用线程的区域设置。
为什么不在程序中设置语言环境?


0
投票

从使用系统帐户运行的Windows服务调用setlocale(LC_AL,""),它似乎没有读取当前用户注册表HKCU(登录到桌面会话),而是系统默认区域设置,我设法从中读取当前用户的,但我想知道还有其他人遇到过这个吗? getlocaleinfo 还获取系统默认区域设置,也许将配置文件从用户复制到系统的?

© www.soinside.com 2019 - 2024. All rights reserved.