macOS 文件夹本地化(中文名称)Big Sur 之后的解决方案
macOS 中的文件本地化有两种实现方式:一种是一些系统文件夹采用的,比如“文稿”,“桌面”;还有就是以普通用户权限就可以创建的本地化。而在 Big Sur 及之后版本的系统中,即使关闭 SIP,sudo 也不再有权更改 system 文件,因此只能通过第二种方法进行本地化了。
TL; DR
一个例子:
# ./projects/ should have a locale to "项目"
mv projects projects.localized
mkdir projects.localized/.localized
echo '"projects" = "项目";' > projects.localized/.localized/zh.strings
# Optional: making a symlink
ln -s projects.localized projects
chflags -h hidden projects
小知识:macOS 的本地化是如何实现的?
首先,macOS 上的本地化不会改变文件夹本身的名称——这点和 Windows 不同。在终端等不显示本地化字符的地方,它还是原本的名字;而在访达(或者其他使用系统 API 并且支持的你用的本地化的语言的 GUI 软件中),它才显示为本地化名称。
有两种实现:
- 系统级别的实现:写死在系统中的。以中文为例,本地化配置写在
/System/Library/CoreServices/SystemFolderLocalizations/zh_CN.lprojSystemFolderLocalizations.strings
这个 Plist 文件中,比如 “Documents” 对应 “文档”。对于文件夹存在于该文件中且文件夹中有名为.localized
空文件的文件夹,系统会自动进行本地化展示。 - 用户实现:需要将文件夹名手动更改为以
.localized
结尾,在其中的.localized
子文件夹中写入本地化信息。
需要注意的是,由于引入了新的安全机制,在 macOS Catalina 之前,通过关闭 SIP 即可修改
/System
下的文件;在 Catalina 版本中,需要关闭 SIP 并且重新挂载硬盘;而在 Big Sur 及以后,即使使用 root、关闭 SIP,都无法更改系统宗卷。
参见:
iOS、iPadOS 和 macOS 中的签名系统宗卷安全性 - 官方 Apple 支持
Is Big Sur’s system volume sealed? – The Eclectic Light Company
当 Mac 升级到 Catalina 时,苹果在硬盘里施了点魔法 - 少数派
警告⚠️:
如果尝试在恢复模式下更改该文件,请做好全盘备份,并且仔细阅读文档:设备在每次启动时会检查系统文件是否被篡改,除非选择进入更低的安全性模式并且单独选择停用签名系统宗卷;如果出现问题,可能需要全新安装系统。
操作方案
既然在 macOS Big Sur 之后没有办法使用系统方案了,只能用“不那么优雅”的方法:需要重命名文件夹。我的 workaround 是创建一个隐藏的 symlink,让原路径依旧可用。
以我的 ~/projects
文件夹为例,我想要它在终端中依旧以 projects 名字可用;同时在系统语言为英语时在访达中显示为 Projects,中文系统是显示为“项目”。
将文件夹重命名,后面加上 .localized
(即 mv ~/projects ~/projects.localized
),然后进入文件夹,用终端新建一个文件夹(ui 方法创建的没用).localized
,里面放两个文件,分别为 en.strings
和 zh.strings
,放入以下内容:
"projects" = "Projects";
"projects" = "项目";
这样,原本的 projects 文件夹就可以在访达中显示为 “Projects” 或者 “项目” 了。
同时,还可以创建一个叫 projects 的符号链接,然后将这个符号链接隐藏,这样在访达里显示的是本地化之后的文件夹名,但是终端中 projects 文件夹依然可用。
# 在 ~ 中执行,由于两个文件夹处于同一目录,可以使用相对路径
ln -s projects.localized projects
# 用 chflags 隐藏符号链接(不加 -h 会 follow symlink)
chflags -h hidden projects