macOS 文件夹本地化(中文名称)Big Sur 之后的解决方案

2024-01-05
修改于 2024-02-24

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 软件中),它才显示为本地化名称。

有两种实现:

  1. 系统级别的实现:写死在系统中的。以中文为例,本地化配置写在 /System/Library/CoreServices/SystemFolderLocalizations/zh_CN.lprojSystemFolderLocalizations.strings 这个 Plist 文件中,比如 “Documents” 对应 “文档”。对于文件夹存在于该文件中且文件夹中有名为 .localized 空文件的文件夹,系统会自动进行本地化展示。
  2. 用户实现:需要将文件夹名手动更改为以 .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,让原路径依旧可用。

参考 Apple Documents

以我的 ~/projects 文件夹为例,我想要它在终端中依旧以 projects 名字可用;同时在系统语言为英语时在访达中显示为 Projects,中文系统是显示为“项目”。

将文件夹重命名,后面加上 .localized(即 mv ~/projects ~/projects.localized),然后进入文件夹,用终端新建一个文件夹(ui 方法创建的没用).localized ,里面放两个文件,分别为 en.stringszh.strings,放入以下内容:

"projects" = "Projects";
"projects" = "项目";

这样,原本的 projects 文件夹就可以在访达中显示为 “Projects” 或者 “项目” 了。

同时,还可以创建一个叫 projects 的符号链接,然后将这个符号链接隐藏,这样在访达里显示的是本地化之后的文件夹名,但是终端中 projects 文件夹依然可用。

# 在 ~ 中执行,由于两个文件夹处于同一目录,可以使用相对路径
ln -s projects.localized projects
# 用 chflags 隐藏符号链接(不加 -h 会 follow symlink)
chflags -h hidden projects
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v3.1.3