由于某种原因,我的Sierra安装未正确设置语言环境。我已经为终端和外壳程序目的正确导出了语言环境设置,但是如果我从外壳程序外部执行locale
命令,则会得到以下信息:
LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
如何设置系统范围的非Shell语言环境?
答案 0 :(得分:0)
在外壳程序之外,您是指从GUI运行的应用程序(Finder,Dock,Launchpad等)吗?此外,您还需要指定影响区域设置的内容,要使用的与区域设置相关的API。
如果使用的是C库,则需要构造适当的语言环境字符串并将其传递给setlocale()
,而不是使用""
。 (或者,您可以在调用setenv()
之前使用setlocale(..., "")
来设置相关的环境变量,但这似乎是回旋处。)
那么,您从哪里获得构造该区域设置字符串的信息?如果使用Objective-C,则可以使用NSLocale
。您也可以在Swift中使用它,但是Swift-ier API是Locale
。如果您使用C或其他具有C绑定的语言,则应使用CFLocale
。
但是,有一个重要警告。与那些高级API相比,macOS上的C库支持的语言环境要少得多。如果您基于高级API构造一个语言环境字符串,并将其传递给C库,而C库不支持它,那么您仍然会以“ C”语言环境结束。仅使用某些语言环境信息(例如省去国家/地区代码),可能会做得更好。
对于这种方法的一个(有点费解的)示例,您可以查看Wine的源代码,但要知道它是LGPLv2。查看this file中特定于__APPLE__
的代码。