Search code examples
c++macoslocalesetuid

How can I get the user's locale when running as root?


I am running as root, but have the user's uid (e.g. 504). How can I work out the user's locale (in my case en_GB)? The following does not work:

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

This outputs en_US for me.


Solution

  • This information is contained in GlobalPreferences.plist, so running:

    $ defaults read /Library/Preferences/.GlobalPreferences AppleLocale
    

    gives the desired result.