How to set a per-app locale in MacOS
Posted on October 20, 2023 with tags macos, tech. See the previous or next posts.
Where is the good MacOS documentation?
After spending ~20+ years with a Linux desktop, I’m trying to expand my desktop setup to include MacOS (well, desktop/laptop, I mean end user in general). And to my surprise, there’s no clear repository of MacOS info. Man pages yes, some StackOverflow, some Apple forums, but no canonical version. Or, I didn’t find it, please enlighten me 🙏
Another issue is that Apple apparently changes behaviour without clearly documenting it. In this specific case, the “region” part of the locale went through significant churn lately.
So, my goal:
- keep system wide locale set to English default, with region Switzerland.
- this
region=CHmeans that date and number formats are also changed to CH version, e.g. one thousand + ½ is displayed as1'000,50. - however, for a single app, I want a “standard”
en_USlocale, with the above number shown/formatted as1,000.50; well, it’s more about parsing than formatting, but that’s irrelevant.
In Linux, this would simply mean running the app with the correct environment variables. But MacOS deprecated this a while back (it used to work). After reading what I could, the solution is quite easy, just not obvious:
% defaults read .GlobalPreferences|grep en_
AKLastLocale = "en_CH";
AppleLocale = "en_CH";
% defaults read -app FooBar
(has no AppleLocale key)
% defaults write -app FooBar AppleLocale en_USAnd that’s it. Now, the defaults man page says the global-global is
NSGlobalDomain, I don’t know where I got the
.GlobalPreferences. But I only needed to know the key name (in this
case, AppleLocale - of course it couldn’t be LC_ALL/LANG).
One day I’ll know MacOS better, but I try to learn more for 2+ years now, and it’s not a smooth ride. Old dog new tricks, right?