好久以前写过一篇文章,也是制作自己的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原生词典
Tao
2022年11月6日 @ 00:58
感谢,作为电脑小白,太不容易了!跟着作者做终于成功了!!
Tao
2022年11月6日 @ 01:08
太感谢作者了,网上这类教程很多,都是用到pyglossary工具,还是作者写的教程终于让我这个小白成功完成了转换