以root身份运行进程的setlocale是不可能的,如何在这样的进程中使用gettext来获取本地化字符串(不会自动检测语言环境,也不能使用setlocale将其强制为特定值)。有没有解决方法?
编辑 - >添加代码,我用来测试问题。我强制将环境变量--LC_ALL,LANGUAGE,LANG更改为fr_FR.UTF8。我也明确地将语言环境设置为fr_FR.UTF8。所有putenv调用都返回0并且setlocale调用返回“C”。
int err = putenv("LC_ALL=fr_FR.UTF8");
err = putenv("LANG=fr_FR.UTF8");
err = putenv("LANGUAGE=fr_FR.UTF8");
char *loc = setlocale(LC_ALL, "fr_FR.UTF8");
bindtextdomain("default", "locale");
textdomain("default");
char *text = gettext("hello");
如果我在用户进程中尝试,则相同的代码段可以正常工作。这两个进程的exe都在同一目录下,其中包含目录语言环境\ fr \ LC_MESSAGES \ default.mo
我们可以更改作为系统进程而不是用户运行的进程的语言环境吗?