【问题标题】:How can I get the preffered languages for a specific user on MacOS?如何在 MacOS 上获得特定用户的首选语言?
【发布时间】:2012-11-12 21:17:22
【问题描述】:
我正在为 Mac OS 开发一个应用程序,网络管理员使用它来提示交互式用户选择他想要在某些软件部署后执行的操作(例如现在重新启动、稍后重新启动等操作)。该对话框将从 root 帐户远程启动(通过 SSH 连接)。
我有一个包含本地化信息的 xml 文件,我想从中初始化对话框 GUI,为此我需要用户最喜欢的语言,但是
[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]
返回
(es, en, de) 当应用程序从交互式用户启动时
和
(zh) 何时从 root 帐户远程启动
为了获取用户名,我使用 bash 命令 'stat -f\%Su /dev/console' 但我找不到如何获取此特定用户的首选项。
提前致谢!
【问题讨论】:
标签:
objective-c
macos
cocoa
【解决方案1】:
找到一个“肮脏”的解决方案,位于 [user] 主目录的 Library/Preferences/ 文件夹中的首选项列表 .GlobalPreferences.plist 包含 [user] 的首选语言,默认主目录是 /Users/[user]如果用户是root,则路径是/var/root/,但是可以配置此路径,这里可以使用方法-(NSString *)stringByExpandingTildeInPath 形式的NSString 来获取主目录。
下面是获取此信息的代码:
NSString *interactiveUser = [self getInteractiveUser];
NSString *path = [NSString stringWithFormat: @"~%@/Library/Preferences/.GlobalPreferences.plist", interactiveUser];
path = [path stringByExpandingTildeInPath];
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];
NSArray *languages = [dict objectForKey:@"AppleLanguages"];
[self getInteractiveUser] 使用 'stat -f\%Su /dev/console' 命令返回交互式用户。
适用于豹和狮子。