ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Mole 多语言支持完整指南:从界面英文到中文错位的原理与配置

Mole 多语言支持完整指南:从界面英文到中文错位的原理与配置 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/MoleMole 是一款开源的 Mac 清理优化工具一条命令完成卸载、磁盘分析、系统优化和实时监控。如果你运行mole analyze时看到满屏英文列名或中文应用名把进度条挤歪这篇 Mole 国际化指南会讲清楚背后的机制并给出手动切换语言、二次开发加语言的具体路径。什么情况下你会撞上语言问题三种最常见的现场纯英文系统终端默认LANG是en_US.UTF-8Mole 输出的列标题、菜单全是英文。这不是 bug是工具跟随系统语言环境。中英混排清理列表中既有Xcode DerivedData也有「微信缓存」列宽按字符数算时中文会「占两位却按一位算」右侧大小列整体右移错位。终端中文错位文件名含中文时进度条、对齐空格、省略号位置跑偏——终端按显示宽度排版而简单按字节或按字符计数都会错。语言是怎么被检测到的Mole 的 i18n 配置机制Mole 没有独立的语言配置文件界面语言跟随 shell 的语言环境macOS 在「系统设置 → 通用 → 语言与地区」里改系统语言后终端会话的LANG、LC_ALL会自动带上工具直接继承。代码里的做法很务实核心在 lib/core/ui.sh。渲染需要按「字符」计数的地方会临时把LC_ALL切到en_US.UTF-8取字符数再切到LC_ALLC取字节数用完立刻恢复原值export LC_ALLen_US.UTF-8 char_count${#str} # 按 UTF-8 字符数 export LC_ALLC byte_count${#str} # 按字节数另一侧是数据解析bin/和lib/里的大批量解析脚本统一用LC_ALLC按字节跑awk/sort保证不同语言环境下数字、排序结果一致比如某些 locale 下小数点变逗号cmd/status/里专门有测试守住这一点。所谓「品牌名本地化」在这套机制里体现为应用展示名的取值卸载和清理时优先读 macOS 的本地化显示名mdls -name kMDItemDisplayName中文系统下自然就是「微信」「备忘录」代码层不需要维护一张 WeChat→微信 的映射表。难点篇让中文不错位的宽度算法CJK 字符难处理的原因一个汉字在 UTF-8 里占 3 字节但在终端里占 2 列。按字节算是 3按字符算是 1只有「显示宽度」才是 2。Bash 侧的get_display_width()用了个不用调外部命令的近似公式宽度 ≈ 字符数 (字节数 - 字符数) / 2中是 1 字符 3 字节算出 112正确A是 1 字符 1 字节算出 1正确。遇到零宽连接符ZWJ和 emoji 变体选择符这些「占字节不占宽」的字符再单独减掉。配套的truncate_by_display_width()按这个宽度截断超长名。Go 侧mole analyze/mole status的表格更精确cmd/analyze/format.go 里的runeWidth()直接列出 Unicode 区段表——CJK 统一表意文字、日文假名、韩文音节、全角符号、emoji 区间返回 2其余返回 1displayWidth()、padName()、trimNameWithWidth()负责补空格对齐和按宽度截断列宽本身由calculateNameWidth()根据终端宽度动态算出。实操篇确认当前语言与手动切换界面语言确认当前语言locale # 查看当前 locale重点看 LANG echo $LANG输出en_US.UTF-8就是英文环境zh_CN.UTF-8就是中文环境。手动切换Mole 没有config语言项改语言就是改环境变量的作用域。临时对单次运行生效LANGzh_CN.UTF-8 mole analyze长期生效就写进~/.zshrc的export LANGzh_CN.UTF-8或直接改系统语言设置让 macOS 自动下发。注意改完要重开终端会话LC_ALL如果已被设置它会覆盖LANG需要一起调整。语言相关代码集中在 lib/core/环境切换、路径处理和 cmd/analyze/、cmd/status/表格排版改行为前先确认自己改的是「解析层」还是「渲染层」。开发者篇新增一门语言从哪入手先说结论界面文案层目前是「跟随系统 宽度自适应」的薄设计团队在规划更多语言包但新增一门语言的真正工作量在宽度表和测试宽度逻辑如果目标语言的字符宽度不符合「ASCII1 / 其余非 ASCII2」的假设改 cmd/analyze/format.go 的runeWidth()区段表和 lib/core/ui.sh 的启发式公式两边都要改。测试保障仓库在 tests/ 下有多语言防线——tests/fuzz_corpus/dangerous_paths.txt提供中文路径语料cmd/analyze/delete_test.go里TestValidatePathWithChineseAndSpecialChars验证中文路径校验format_test.go覆盖了「中文宽度 2」的断言cmd/status/process_watch_test.go则守住「逗号小数 locale 下子进程必须用 C locale」。新增语言时照这个模式补用例构造该语言的长文件名断言宽度、截断、对齐三点。locale 隔离习惯凡是 fork 出awk/sort/ps的解析逻辑保持LC_ALLC只让「展示」层吃用户 locale——这是这个项目多语言稳定的核心约定。回到开头那两个症状英文界面把LANG切过去即可中文错位交给宽度公式。Mole 的国际化没有复杂的翻译框架语言检测、宽度计算、locale 隔离三件事做扎实其余的都顺了。【免费下载链接】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),仅供参考
返回列表