改不动英文界面的 Omarchy:一次 locale 配置的"破案"

我按官方教程把 Omarchy 装好了。系统 locale 调成 zh_CN.UTF-8,中文字体装了,Fcitx5 输入法也跑起来了。然后我盯着屏幕看了很久 —— 整个桌面还是英文。

不是某个角落,是全部。菜单、顶栏、设置项、系统通知,一个中文字都没有。

按说这不对。Linux 的本地化我折腾过不少,改个 locale 而已,怎么会纹丝不动。于是这场” 破案” 就开始了。

配置明明生效了

先排查最基础的。locale 命令一看:

LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
...

localectl status 也写着 System Locale: LANG = zh_CN.UTF-8,echo $LANG 出来就是 zh_CN.UTF-8。

配置是对的。字体、输入法也都在。到这一步只能得出一个结论:不是我的配置问题。

那问题出在哪?

先分清两拨” 界面”

这里有个容易踩的坑,得先掰扯清楚:Fcitx5 和” 界面语言” 是两回事。输入法进程在跑,不代表界面会跟着变中文,它俩本来就没关系。

更要紧的是另一条分界线:

  • 第三方应用 ——waybar、文件管理器、浏览器、终端。这些是标准 GTK / Qt 程序,会读 LANG,只要它们自己带了 zh_CN 翻译,就会跟着变中文。
  • Omarchy 自家的界面 ——SUPER 键弹出来的菜单、顶栏、Omarchy 设置、快捷菜单。这些,纹丝不动。

我观察下来,纹丝不动的全是 Omarchy 自己的东西,第三方应用其实已经部分变中文了。

这指向一个我不太愿意相信的方向:问题出在 Omarchy 自己身上。

翻源码,真凶浮出

正好 Omarchy 是开源的,我把它 clone 下来翻了一遍。结果比想象的更彻底。

shell/ 目录下 175 个 QML 文件,约 3.7 万行。我搜 qsTr、qsTranslate、QT_TR_NOOP—— 这三个是 Qt 世界里做翻译的标准入口。

调用次数:0。一个都没有。

菜单定义文件 default/omarchy/omarchy-menu.jsonc 里,标签是一行行英文写死的:

"apps": {"label":"Apps"},
"setup": {"label":"Setup"},
"install": {"label":"Install"},
"update": {"label":"Update"},
"about": {"label":"About"},

Apps、Setup、Install、Update、About…… 全是硬编码。

所以真相不是” Omarchy 缺中文翻译”,而是” Omarchy 压根没有翻译机制”。整个 shell 从设计上就是英文的,跟 locale 一点关系都没有。

为什么连 qsTr 都救不了

你可能会想:那加上 qsTr 不就行了?翻译不都是这么做的吗。

问题是加不了。Omarchy 的桌面 shell 用的是 Quickshell,而 Quickshell 构造的是一个裸的 QQmlEngine—— 不是标准 Qt 应用用的 QQmlApplicationEngine。

这个” 裸” 意味着:代码里根本没有 QTranslator、installTranslator、retranslate 这些东西。没有安装翻译器的入口,也没有自动加载 qml_zh_CN.qm 的机制。

结果就是,就算你在 QML 里写了 qsTr (“Connect”),它也会静默地返回 “Connect” 原文。翻译机制在这个 shell 里是死的。

这不是 bug,是压根没搭这条通道。

GitHub 上已经有人喊了

既然根因在源码,我就去 GitHub 上看有没有人提。一看,早就有人在喊了。

issue #7284,标题直白:“add an i18n/localization system for Omarchy”,open 状态。诉求和我遇到的一模一样:给 shell、菜单、插件加本地化,允许用户在 ~/.config 下覆盖翻译。

而且不止是” 喊”,社区已经在动手:PR #8765 是一个 I18n 翻译原语框架,先搭地基;PR #10083 是运行时 i18n,用系统 gettext catalog 翻译整个 shell;xavivars 的 omal10n-poc 是个能跑的原型,已经在真机上验证过,还带语言切换器。

最值得玩味的是 DHH 在另一个 locale issue 上的态度。有人报时钟不尊重系统语言,他关闭时说了一句:

Need a comprehensive solution to full OS translation before this makes sense to me.

翻译过来:要一个完整的 OS 级翻译方案,零散的 locale 补丁不接。

这解释了为什么这条路到现在还没通 —— 不是没人做,是作者明确要一个” 完整方案”,而完整方案还在 review 路上。

写在最后

所以结论得说清楚:改不动英文界面,不是你的配置失败,是 Omarchy 目前压根没给界面留翻译的入口。

这个坑我替你踩过了。现在的正确姿势是:locale、字体、输入法该配的配好,这些都对,中文输入已经能用;界面语言这事,去 issue #7284 点个 👍,等官方框架合入。

等它合了的那天,中文界面只剩一件事 —— 贡献一个 zh_CN 的 PO 文件。到那时候,“改不动” 就真的成了历史。