系统语言切换为英文后,右键菜单里很多项目仍显示中文?一次关于 LaunchServices 本地化注册机制的深挖过程

93 天前
 ahaxzh

[macOS] 系统语言改成英文后,右键菜单里很多项目仍是中文 —— 记录一次对 LaunchServices 本地化机制的深挖(未解)

起因很简单,就是我把 macOS 的系统语言从中文切换成了英文,然后在 Finder 中右键选择文字时,发现菜单里还有一项中文服务:

将文本转为音频

说实话这东西在一堆英文菜单里格外显眼,我本来以为是缓存没刷新,结果越查越离谱……最终没解决,但这个坑我踩得够深,就整理一下发出来,供有类似强迫症的朋友参考。


🧩 起因 & 表现

系统界面全英文,唯独 Finder 的服务菜单中仍有一项中文服务「将文本转为音频」。这不是自己建的 Automator ,也不是第三方插件,看起来就是系统自带的。


🔍 排查过程

1. ~/Library/Services 没东西

首先排除了用户级 Quick Action 的可能。

2. 在 /System/Library/Services/ 下找到了关键文件:

ChineseTextConverterService.app

目录结构正常,里面包含多语言本地化资源:

Contents/Resources/zh.lproj/ServicesMenu.strings Contents/Resources/en.lproj/ServicesMenu.strings

也就是说,这玩意确实支持英文显示,但我系统语言都切成英文了,它却还是显示中文服务名?很迷。


🧪 Gemini 推荐我执行了一条命令:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user

这条命令的作用是强制重建系统的 LaunchServices 数据库,理论上能刷新所有“打开方式”、服务项之类的注册信息。

我当时抱着试试看的态度执行了,没有报错,也没有立刻生效,问题依旧。

但,坑也就此埋下。

⸻

🧨 后续发现:它其实注册了这个服务(并锁定了中文)

我查了系统日志:

log show --predicate 'eventMessage contains "ChineseTextConverterService"' --last 30d

结果显示:

2025-06-08 02:02:41
com.apple.ChineseTextConverterService 被正式注册入系统

也就是说,这条命令其实是“首次激活”了这个原本未注册的系统服务项,注册时使用的是中文资源( zh.lproj ),于是它现在牢牢地以「将文本转为音频」出现在菜单中,无论你系统语言是否为英文。

⸻

❓那这个服务是什么时候写入系统的?

查 .app 文件的创建时间是 2025-05-04 ,结合我现在是 macOS Sequoia 15.5 ,可以合理推测是系统更新中自动部署的。

当时它只是静静地存在,并未被注册为 Finder 服务,直到我执行了那条命令,把它“唤醒”了……

⸻

🧱 崩溃瞬间:打开系统设置 > Keyboard > Services 后我彻底放弃

你以为只有一个中文服务名?

不,还有这些:

![hahah]( https://imgur.com/a/F4rjUMJ)

这些全部都还是中文,系统语言为英文,Finder 语言为英文,服务却全是中文。

⸻

🚫 尝试过但无效的操作
	•	删除 ~/Library/Preferences/com.apple.finder.plist
	•	删除 ~/Library/Preferences/com.apple.systempreferences.plist
	•	手动编辑 .strings 文件(被 SIP 拦截)
	•	新建用户(无效,LaunchServices 是系统级)
	•	多次执行 lsregister (只会让更多服务“苏醒”)
	•	怀疑人生(有效,但短暂)

⸻

✅ 所学到的冷知识
	•	macOS 的 LaunchServices 服务名注册是一次性的
	•	一旦注册,语言就固定了,以后语言切换不会影响已注册名称
	•	/System/Library/Services 下很多 .app 是“预部署未激活”的,直到某些动作(或你手贱)触发才注册
	•	lsregister -r 命令其实就是“全系统服务激活开关”,慎用
	•	系统不会回滚注册名,SIP 不允许你改名或清除

⸻

💡 可行的 Workaround (仅供参考)
	•	在系统设置 → Keyboard → Services 中,取消勾选“将文本转为音频”
	•	用 Automator 自建一个英文名的服务(比如叫 Convert Text to Audio )

我也顺便做了一个 .workflow 模板,如果你想下载,可以留言我发给你。

⸻

❌ 最终结论

这个问题没有解法,除非你抹盘重装一个最初语言为英文的 macOS 系统,才能避免注册为中文服务项。

否则,这些看起来“只是语言显示”的东西,其实是系统注册层面已经写死的。
1512 次点击
所在节点    macOS
12 条回复
drymonfidelia
93 天前
苹果的很多东西表面上看起来很优雅,去逆向看一下实际实现和屎一样。macOS 还有办法关 sip 改系统文件修复,我 iOS 遇到的 Bug 才真是只能抹盘解决 /t/1013867
SeaTac
93 天前
“将文本转为音频”
SeaTac
93 天前
my bad 我看岔了
bunnyblueair
93 天前
macOS 现在 bug 太多了,跟乔布斯那会是两个时代
cpstar
93 天前
大胆设想,第一个应用安装时选择 A 语言,然后切换 B 语言安装第二个应用,然后切 C 语言安装第三个,以此类推,于是。。。
咱就赌你初始化的时候固定到一种语言,爱咋咋地。
cpstar
93 天前
@bunnyblueair 4# 窃以为,这种机制不太可能是近年来“创造”的,而是固化多少年的东西,甚至可以上追到上个世纪 80 年代初代苹果机。
Kenshiro
93 天前
这个很早注意到了,一些关键设定的语言是走管理员的账户的设定的,把这俩的语言同步一下就好
ahaxzh
93 天前
@Kenshiro 嚯?按照你说的意思 我添加个新的用户为管理员 把当前用户删掉 再新增回来??
ahaxzh
93 天前
@Kenshiro 还有我目前单管理员用户的 不太明白你说的意思
Kenshiro
92 天前
@ahaxzh 方便发下图吗,怀疑这是捷径的动作
ahaxzh
91 天前
@Kenshiro Mac 上目前无捷径操作,这些中文项目我都查了,全是系统自带的。![hahah]( https://imgur.com/a/F4rjUMJ)
Kenshiro
91 天前
@ahaxzh
1. 重新更换语言
2. 去设置/语音 检查是否有单一 Apps 语言指定
3. 新建管理员用户,设定为英文,将原有账户降权为普通用户看看

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1137113

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX