C# 作为根/系统进程运行的进程中的gettext(i18n)

C# 作为根/系统进程运行的进程中的gettext(i18n),c#,locale,gettext,C#,Locale,Gettext,无法设置以root用户身份运行的进程的区域设置,如何在这样的进程中使用gettext获取本地化字符串(区域设置不是自动检测的,也不能使用setlocale强制将其设置为特定值)。有什么解决办法吗 编辑->添加代码,我用于测试问题。我强制将环境变量-LC_ALL、LANGUAGE、LANG更改为fr_fr.UTF8。我还显式地将locale设置为fr\u fr.UTF8。所有putenv调用返回0,setlocale调用返回“C” 如果我在用户进程中尝试,同样的代码片段也可以工作。两个进程的exe

无法设置以root用户身份运行的进程的区域设置,如何在这样的进程中使用gettext获取本地化字符串(区域设置不是自动检测的,也不能使用setlocale强制将其设置为特定值)。有什么解决办法吗

编辑->添加代码,我用于测试问题。我强制将环境变量-LC_ALL、LANGUAGE、LANG更改为fr_fr.UTF8。我还显式地将locale设置为fr\u fr.UTF8。所有putenv调用返回0,setlocale调用返回“C”

如果我在用户进程中尝试,同样的代码片段也可以工作。两个进程的exe都位于同一目录中,该目录包含locale\fr\LC\u MESSAGES\default.mo目录


我们可以更改作为系统进程而不是用户运行的进程的区域设置吗?

您如何测试它?什么平台?Windows-系统进程我在系统进程和用户进程中调用char*loc=setlocale(de_de.UTF8)。在系统进程中,它将loc返回为NULL;在用户进程中,它将loc返回为“de_de.UTF8”。我的系统上的
setlocale()
手册页显示
setlocale()
包含两个参数;一个用于区域设置,一个用于要修改的类别。你能发布一个简短的复制程序吗?添加了代码和更多信息来解释我的问题。抱歉,我在上面的评论中错过了setlocale中的类别
 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");