从.mdx(Mdict)制作macOS原生词典
好久以前写过一篇文章,也是制作自己的macOS字典。作为原生应用,确实在全屏取词方面是有很大优势的。但当时是从Stardict转换的,现在活下来并持续有生命力的还是Mdict类型。所以花了点时间研究,下面是成果。
安装环境
- 说明: 为操作方便,统一建立了
~/Developer/ConvertDict/路径,把需要的软件统一放到该路径下cd ~/Developer/ConvertDict/
Homebrew安装Python 3 这在网上有大量教程,就不赘述了。我用的是比较新的Python 3.9.7. 安装Homebrew过程中应该完整安装了Command Line Tools for Xcode。
安装python依赖包
pip3 install lxml beautifulsoup4 html5lib brew install lzo export C_INCLUDE_PATH=/opt/homebrew/Cellar/lzo/2.10/include/lzo:/opt/homebrew/Cellar/lzo/2.10/include/ export LIBRARY_PATH=/opt/homebrew/lib pip3 install python-lzo上面安装python-lzo的时候需要分步,否则编译时会提示丢失头文件lzo/lzo1x.h。 指定的环境变量路径是按照Apple Silicon机型环境,如果是Intel芯片,则将
/opt/homebrew/改为/usr/local/下载安装Dictionary Development Kit
git clone https://github.com/SebastianSzturo/Dictionary-Development-Kit虽然多年前的版本,但使用上是没有问题的。
下载关键工具pyglossary
git clone https://github.com/ilius/pyglossary
转换
cd Mdict字典下载文件夹
python3 ~/Developer/ConvertDict/pyglossary/main.py --write-format=AppleDict "朗文当代高级英语辞典(英英·英汉双解 第6版).mdx" "朗文当代高级英语辞典(英英·英汉双解 第6版)"最后一个参数是生成文件的路径名,为了方便,你也可以把相应文件都改成英文命名,避免带上那么多引号。下面是可以修改实际显示名称的。
编译安装
进入上面生成的文件夹,修改Makefile,将DICT_BUILD_TOOL_DIR改为正确的Dictionary-Development-Kit路径("/Users/用户名/Developer/ConvertDict/Dictionary-Development-Kit",注意不能用相对路径名,必须是完整的)。
cd "朗文当代高级英语辞典(英英·英汉双解 第6版)"
make生成的字典在objects文件夹里
修改配套格式 用原来mdict文件夹中
.css文件的覆盖掉DefaultStyle.css设置在原生词典中显示的名字 Xcode(或者其他plist编辑器)打开
info.plist,可以修改其中的几个字段Bundle name对应的是界面上的字典名缩写,一般建议简略一些,比如“朗文当代高级6ed”Bundle display name对应的是设置界面里的名称,一般建议可以放全称,比如“朗文当代高级英语辞典(英英·英汉双解 第6版)”
make install字典安装路径是~/Library/Dictionaries,进去打开可以看到结构和上面编译以后的几乎一样,所以你也可以只在这里的.plist文件里修改显示的名称。

补充说明
- 字典里面可能包含语音,我转换出来已经是mp3(也可能是mdict文件自带的格式就是mp3),所以不需要额外调整,已经可以点击朗读。如果你的字典里不是mp3或wav格式,请参考pyglossary官方文档或这里一篇教程批量转换
- 如果CSS文件里定制了字体等,可能也需要根据这一篇教程调整,我没遇到相关问题,直接把mdict下的CSS覆盖过去就完美了。
综上,其实找到一个好的字典源可以省掉很多事情。我自己是在某宝买的,就不多说了。
- 其他参考材料: Mdict转Mac词典小记 Mdict词典文件转换为macOS原生词典