Как я могу получить локаль пользователя при запуске от имени пользователя root? - PullRequest
3 голосов
/ 24 ноября 2011

Я работаю от имени пользователя root, но у меня есть uid пользователя (например, 504). Как я могу определить язык пользователя (в моем случае en_GB)? Следующее не работает:

setuid(user_uid);
fprintf(stderr,
        CFStringGetCStringPtr(CFLocaleGetIdentifier(CFLocaleCopyCurrent()),
                              kCFStringEncodingMacRoman);
setuid(0);

Это выводит en_US для меня.

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

Эта информация содержится в GlobalPreferences.plist, поэтому работает:

$ defaults read /Library/Preferences/.GlobalPreferences AppleLocale

дает желаемый результат.

0 голосов
/ 24 ноября 2011

Вы не можете, потому что он не существует. Локаль управляется переменные среды, и могут изменяться динамически, и из окна в окно и даже от приложения к приложению (т.е. если пользователь запустил программу с:

env LC_LANG=fr_FR program_name ...

.) В Unix вы можете получить локаль пользователя по умолчанию, выполнив что-то вроде:

FILE* in = popen( "su -c 'env | grep ^LC_ ; env | grep ^LANG' - <i>user</i>", "r" );

, затем читает и анализирует ввод, но я не думаю, что есть что-нибудь попроще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...