在mac上,原生的app看着都比较舒服,和其他app的集成度也比较好。Dictionary也不例外,可以重按触摸板取词,很丝滑,这点欧陆之类的第三方字典好像做不到,或者我没有找到设置的方法。
最近新学习了一门外语,想找一些好用的Dictionary字典,没找到。网上搜索了一些如何自制mac Dictionary字典的文章,时间都比较久远,所以通过这些教程和自己尝试,成功转化了几本字典,非常好用。写个教程备用和分享。
Table of contents
关于Mdict字典文件
所谓Mdict格式的字典文件,一般下载下来后会包含.mdx这个扩展名的文件,还有一些字典除了.mdx外,还有.mdd, .css和.js文件,这些文件里:
- .mdx包含的是文字释义信息,比如 propaganda -(政治性,欺骗性)宣传
- .mdd包含的是类似单词发音的音频文件,或有些字典还会包含图片,这些都保存在这个文件里
- .css包含的是字典的排版信息,比如字体,文字大小,背景色等等,熟悉前端的肯定不陌生
- .js包含一些动态交互功能,我还没怎么用到过,也属于前端程序员的传统艺能
环境设置
目录
为了演示和执行方便,我将文章所需的第三方软件和下载的字典文件统一放到~/Documents/dict_test
下。在开始前,确保你已经安装了python3.9以上的版本,同时最好安装了Xcode,稍后编辑info.plist
时需要用到,如果嫌Xcode太庞大臃肿,你可以用其他支持plist文件编辑的text editor,比如BBEdit。
- 进入统一存放的目录:
cd ~/Documents/dict_test
- 安装python的虚拟环境:
python3 -m venv .venv
- 启用虚拟环境(启用后,输入
deactivate
可退出虚拟环境):
source .venv/bin/activate #直接输入deactivate可退出虚拟环境
- 安装python需要用到的库:
pip3 install lxml beautifulsoup4 html5lib
- 安装lzo,这是一个宣称解压缩非常快的工具,使用 Ansi C 编写。当你处理一个巨大的字典的时候(几本知名的字典容量都是以G为单位),你会感谢它的作者:
brew install lzo
- 以下两行用于设置环境变量。如果你使用apple M系列的芯片,请将命令中的
/usr/local/
改为/opt/homebrew/
:
export C_INCLUDE_PATH=/usr/local/Cellar/lzo/2.10/include/lzo:/opt/homebrew/Cellar/lzo/2.10/include/
export LIBRARY_PATH=/usr/local/lib
- 安装另一个python需要用到的库,据我参考的文章提到,如果不和上述python库的安装分开执行的话,编译时会提示丢失C的header文件
lzo/lzo1x.h
,我没有验证,仅供参考,但我确实按那篇文章的作者建议,分步安装,没有遇到这个问题,也建议你照做:
pip3 install python-lzo
- 安装
Dictionary Development Kit
(项目github页面),这是苹果官方的Dictionary Development Kit的开源版本,虽然年代久远,但依然可用:
git clone https://github.com/SebastianSzturo/Dictionary-Development-Kit
- 安装本文章的最关键工具:
git clone https://github.com/ilius/pyglossary
完成后的目录结构
dict_test
├── .DS_Store
├── .venv
├── Dictionary-Development-Kit
├── hb #我下载的字典1所在目录
├── pyglossary
└── xy #我下载的字典2所在目录
解压缩和转换
- 进入hb字典所在目录:
cd hb
- 解压转换.mdx文件(如果有以.mdd结尾的同名文件,也会一同解压处理,不用额外操作),最后的
hb_dir
是解压和转换后存放文件的目录名,与字典在mac Dictionary里显示的名称无关,可随意取个好记的即可。但如果使用中文,记得名称前后要加双引号,比如 “虚构的字典目录”:
python3 ~/Documents/dict_test/pyglossary/main.py --write-format=AppleDict hb.mdx hb_dir
编译和安装
- 进入
hb_dir
目录:
cd hb_dir
- 修改
Makefile
文件内容,将其中 DICT_BUILD_TOOL_DIR 对应的值修改为Dictionary Development Kit的安装路径,我刚才用git clone
安装在~/Documents/dict_test/Dicionary-Development-Kit
,所以我这里填入的是 /Users/我的用户名/Documents/dict_test/Dictionary_Development_Kit,请注意,这里需要使用绝对路径,不能使用相对路径。修改完成如下图。
- 编译。根据原始字典的大小,编译时间有长有短,慢慢等。如果有报错,先解决报错的问题,不然无法安装。编译顺利的话,完成后会在
hb_dir
目录下生成objects
目录。
make
-
设置
-
设置字典内容的样式
这里有两种方式:- 原文章作者建议是将下载的MDict格式的字典包里自带的.css样式表文件直接替换为
DefaultSytle.css
。
我遇到的问题是,有些会造成mac Dictionary里显示混乱,或者有些下载的MDict里没有.css文件,只有光秃秃的一个.mdx文件。所以我建议: - 保留编译时自动生成的
DefaultStyle.css
文件,如果下载的MDict格式的字典包里有自带的.css
样式表文件,则将其内容追加到自动生成的DefaultStyle.css
内容后面,有相同的设置项,按css工作原理,应该可以自动覆盖。
- 原文章作者建议是将下载的MDict格式的字典包里自带的.css样式表文件直接替换为
-
设置在mac Dictionary里显示的字典名称
用Xcode或者BBEdit打开hb_dir/objects/hb_dir.dictionary/Contents
里的 Info.plist 文件,可以修改三处:Bundle name,Bundle display name 和 DCSDictionaryCopyright,各自的最终呈现效果如下列图示:
-
- 安装。确保你还在
~/Documents/dict_test/hb/hb_dir/
目录下:
make install