Mole Mac 清理工具国际化一次讲透:多语言界面与 CJK 对齐是怎么做到的
【免费下载链接】Mole🐹 Clean, uninstall, analyze, optimize, and monitor your Mac. Free open-source CLI, plus a native Mac app.项目地址: https://gitcode.com/GitHub_Trending/mole15/Mole
Mole 是一款 macOS 清理优化工具:清缓存、卸应用、盯资源占用。它的多语言界面走了另一条路——不翻译界面文案,而是靠一组本地化配置,保证中文系统下的 CJK 字符、路径与数字格式正确显示。
一、问题切入:为什么终端工具的多语言没那么简单
CLI 工具没有图形界面的布局引擎兜底,三个坑躲不开:
- CJK 宽度错位:"微信"每字占 2 列终端格子,"WeChat"占 1 列,不做换算时列表列头与内容必然对不齐。
- 数字格式污染:俄语 locale(ru_RU)下,部分系统命令的小数点会输出成逗号,清理工具解析数字直接翻车。
- 中文路径转义:生成可点击的
file://链接时,UTF-8 环境下的字节级编码规则会把多字节字符弄坏。
界面文案保持英文没问题,但上述三件事必须解决。
二、机制拆解:Mole 如何实现自动语言适配
🔍 语言检测机制:把系统 locale 隔离进 C 环境
Mole 并不读取系统语言来"切换界面",而是给所有查询子进程强制 C locale。cmd/status/metrics.go 里的cLocaleEnv在启动ps、uptime前剥掉LC_ALL、LANG及所有LC_*变量。回归测试见 cmd/status/process_watch_test.go,专门守住 ru_RU 下逗号小数的问题。效果:无论系统是什么语言,Mole 拿到的数字与列输出都一致。
字符宽度计算:CJK 对齐怎么算出来
核心是 lib/core/ui.sh 的get_display_width,三步完成:
- 临时切到
LC_ALL=en_US.UTF-8数字符数; - 再切
LC_ALL=C数字节数,算完立即恢复原 locale; - 按启发式换算:CJK 字符在 UTF-8 里 3 字节、占 2 列,即
宽度 = 字符数 + (字节数 − 字符数) / 2,emoji 的 ZWJ 连接符、变体选择符等零宽字符再扣减修正。
export LC_ALL=en_US.UTF-8 # 按字符计数(UTF-8) export LC_ALL=C # 按字节计数(C)超长字符串交给truncate_by_display_width,它按显示宽度而非字符数截断,省略号不会把中文挤出列宽。lib/core/base.sh 的percent_encode_path则在LC_ALL=C下逐字节百分号编码,~/Downloads/微信_xxx这类中文路径也能渲染成可点击链接。
三、动手实操:语言切换与显示效果验证
🛠️ 三步验证本地化效果:
- 自动检测(默认):无需任何配置。中文系统下列表视图的应用名列显示中文名(微信、QQ、富途牛牛),列宽靠上面的宽度计算自动对齐。
- 手动切换:Mole 目前未提供切换界面文案的用户配置,界面固定英文。环境侧可动的是:查询子进程内部已强制 C locale,任何系统 locale 下运行都无需手动设
LC_ALL;NO_COLOR只关闭颜色,不影响宽度计算。 - 品牌名显示对比:品牌名不被翻译,直接呈现系统给的本地化名称:
| 系统 locale | WeChat 显示名 | 显示宽度 |
|---|---|---|
| 中文(zh_CN) | 微信 | 4 列 |
| 英文(en_US) | 5 列 |
混合列表中两类名称共用同一对齐列,无需手动调列宽。
四、避坑与常见疑问:显示异常自查清单
⚠️ 遇到显示异常,按序排查:
- 误当翻译 bug:Mole 没有切换界面语言的用户配置,界面英文是现状设计,不是配置问题。
- 数字变逗号小数:系统 locale 的经典坑,Mole 已用 C locale 隔离;自己新增查询命令时,参照
cLocaleEnv的做法先清掉 locale 变量。 - emoji 宽度仍有偏差:宽度算法是启发式(非 ASCII 一律按宽 2),冷门 emoji 组合可能差 1 列,属该快速路径的已知取舍。
- 中文路径链接点不开:检查输出路径是否经过
percent_encode_path的编码处理。 - 回归测试在哪:全套用例位于 tests/,宽度相关断言可在
tests/uninstall.bats中对照,Go 侧 CJK 补位用例见cmd/analyze/format_test.go的 "Pad CJK" 条目。
先在中文系统上跑一遍 Mole,观察列表视图里中文应用名列的对齐效果;若错位,再按上面的自查清单逐条定位。
【免费下载链接】Mole🐹 Clean, uninstall, analyze, optimize, and monitor your Mac. Free open-source CLI, plus a native Mac app.项目地址: https://gitcode.com/GitHub_Trending/mole15/Mole
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考