利用 Mdict 制作 macOS 原生词典

安装环境

为操作方便,统一建立了~/ConvertDict/路径,把需要的软件统一放到该路径下。

1
cd ~/ConvertDict/

Homebrew 安装 Python 3

安装 Homebrew 过程中应该完整安装了 Command Line Tools for Xcode。

1
2
3
4
5
6
X-MacBook-Pro ConvertDict → python --version
Python 2.7.18
X-MacBook-Pro ConvertDict → which python
/Users/X/.pyenv/shims/python
X-MacBook-Pro ConvertDict → which python3
/usr/local/bin/python3

安装 python 依赖包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
X-MacBook-Pro ConvertDict → pip3 install lxml beautifulsoup4 html5lib

X-MacBook-Pro ConvertDict → brew install lzo

# Apple Silicon 机型环境
# 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

# Intel 芯片
X-MacBook-Pro ConvertDict → export C_INCLUDE_PATH=/usr/local/Cellar/lzo/2.10/include/lzo:/usr/local/Cellar/lzo/2.10/include/
X-MacBook-Pro ConvertDict → export LIBRARY_PATH=/usr/local/lib

X-MacBook-Pro ConvertDict → echo $C_INCLUDE_PATH
/usr/local/Cellar/lzo/2.10/include/lzo:/usr/local/Cellar/lzo/2.10/include/
X-MacBook-Pro ConvertDict → echo $LIBRARY_PATH
/usr/local/lib

X-MacBook-Pro ConvertDict → pip3 install python-lzo

上面安装 python-lzo 的时候需要分步,否则编译时会提示丢失头文件 lzo/lzo1x.h

下载安装 Dictionary Development Kit

1
git clone https://github.com/SebastianSzturo/Dictionary-Development-Kit

虽然多年前的版本,但使用上是没有问题的。

下载关键工具 pyglossary

1
git clone https://github.com/ilius/pyglossary

转换

1
2
cd Mdict 字典下载文件夹
python3 ~/Developer/ConvertDict/pyglossary/main.py --write-format=AppleDict "牛津高阶英汉双解词典(第10版)V3.mdx" "牛津高阶英汉双解词典(第10版)V3"

最后一个参数是生成文件的路径名,为了方便,你也可以把相应文件都改成英文命名,避免带上那么多引号。
下面是可以修改实际显示名称的。

1
2
3
4
5
6
7
8
9
10
11
12
 Chenlongs-MacBook-Pro 牛津高阶英汉双解词典(第10版)V3 → python3 /Users/X/Developer/ConvertDict/pyglossary/main.py --write-format=AppleDict "牛津高阶英汉双解词典(第10版)V3.mdx" "牛津高阶英汉双解词典(第10版)V3"

[INFO] Found 1 mdd files with 275928 entries
[INFO] extracting links...
[INFO] extracting links done, sizeof(linksDict)=2621536
[INFO] wordCount = 62137
[INFO] Writing to AppleDict file '/Users/X/Downloads/牛津高阶英汉双解词典(第10版)V3/牛津高阶英汉双解词典(第10版)V3'
/Users/X/Developer/ConvertDict/pyglossary/pyglossary/plugins/appledict/_normalize.py:120: MarkupResemblesLocatorWarning: The input looks more like a filename than markup. You may want to open this file and pass the filehandle into Beautiful Soup.
title = BeautifulSoup.BeautifulSoup(
Converting | |██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████|%100.0 Time: 0:15:06
[INFO] Writing file '/Users/X/Downloads/牛津高阶英汉双解词典(第10版)V3/牛津高阶英汉双解词典(第10版)V3' done.
[INFO] Running time of convert: 916.6 seconds

编译安装

进入上面生成的文件夹,修改 Makefile,将 DICT_BUILD_TOOL_DIR 改为正确的 Dictionary-Development-Kit 路径(/Users/用户名/Developer/ConvertDict/Dictionary-Development-Kit,注意不能用相对路径名,必须是完整的)。

1
2
cd "牛津高阶英汉双解词典(第10版)V3"
make

生成的字典在 objects 文件夹里

修改配套格式

用原来 mdict 文件夹中.css 文件的覆盖掉 DefaultStyle.css

设置在原生词典中显示的名字

XCode(或者其他 plist 编辑器)打开 info.plist,可以修改其中的几个字段
Bundle name 对应的是界面上的字典名缩写,一般建议简略一些,比如“牛津高阶 V10”
Bundle display name 对应的是设置界面里的名称,一般建议可以放全称,比如“牛津高阶英汉双解词典(第 10 版)V3”

1
make install

字典安装路径是 ~/Library/Dictionaries,进去打开可以看到结构和上面编译以后的几乎一样,所以你也可以只在这里的 .plist 文件里修改显示的名称。

参考资料