gettext (i18n) в процессе, работающем как root / системный процесс - PullRequest
1 голос
/ 02 марта 2012

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

Можем ли мы изменить локаль процесса, который работает как системный процесс, а не как пользователь?

...