Невозможно установить локаль процесса, выполняющегося от имени пользователя root, как я могу использовать 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
Можем ли мы изменить локаль процесса, который работает как системный процесс, а не как пользователь?