Skip to content

制作一本Mac dictionary可用的字典

Published: at 09:35 PM

在mac上,原生的app看着都比较舒服,和其他app的集成度也比较好。Dictionary也不例外,可以重按触摸板取词,很丝滑,这点欧陆之类的第三方字典好像做不到,或者我没有找到设置的方法。

最近新学习了一门外语,想找一些好用的Dictionary字典,没找到。网上搜索了一些如何自制mac Dictionary字典的文章,时间都比较久远,所以通过这些教程和自己尝试,成功转化了几本字典,非常好用。写个教程备用和分享。

Table of contents

Open Table of contents

关于Mdict字典文件

所谓Mdict格式的字典文件,一般下载下来后会包含.mdx这个扩展名的文件,还有一些字典除了.mdx外,还有.mdd, .css和.js文件,这些文件里:

环境设置

目录

为了演示和执行方便,我将文章所需的第三方软件和下载的字典文件统一放到~/Documents/dict_test下。在开始前,确保你已经安装了python3.9以上的版本,同时最好安装了Xcode,稍后编辑info.plist时需要用到,如果嫌Xcode太庞大臃肿,你可以用其他支持plist文件编辑的text editor,比如BBEdit

  1. 进入统一存放的目录:
cd ~/Documents/dict_test
  1. 安装python的虚拟环境:
python3 -m venv .venv
  1. 启用虚拟环境(启用后,输入deactivate可退出虚拟环境):
source .venv/bin/activate  #直接输入deactivate可退出虚拟环境 
  1. 安装python需要用到的库:
pip3 install lxml beautifulsoup4 html5lib
  1. 安装lzo,这是一个宣称解压缩非常快的工具,使用 Ansi C 编写。当你处理一个巨大的字典的时候(几本知名的字典容量都是以G为单位),你会感谢它的作者:
brew install lzo
  1. 以下两行用于设置环境变量。如果你使用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
  1. 安装另一个python需要用到的库,据我参考的文章提到,如果不和上述python库的安装分开执行的话,编译时会提示丢失C的header文件lzo/lzo1x.h,我没有验证,仅供参考,但我确实按那篇文章的作者建议,分步安装,没有遇到这个问题,也建议你照做:
pip3 install python-lzo
  1. 安装Dictionary Development Kit(项目github页面),这是苹果官方的Dictionary Development Kit的开源版本,虽然年代久远,但依然可用:
git clone https://github.com/SebastianSzturo/Dictionary-Development-Kit
  1. 安装本文章的最关键工具:
git clone https://github.com/ilius/pyglossary

完成后的目录结构

dict_test
├── .DS_Store
├── .venv
├── Dictionary-Development-Kit
├── hb  #我下载的字典1所在目录
├── pyglossary
└── xy  #我下载的字典2所在目录

解压缩和转换

  1. 进入hb字典所在目录:
cd hb
  1. 解压转换.mdx文件(如果有以.mdd结尾的同名文件,也会一同解压处理,不用额外操作),最后的hb_dir是解压和转换后存放文件的目录名,与字典在mac Dictionary里显示的名称无关,可随意取个好记的即可。但如果使用中文,记得名称前后要加双引号,比如 “虚构的字典目录”
python3 ~/Documents/dict_test/pyglossary/main.py --write-format=AppleDict hb.mdx hb_dir

Output of pyglossary

编译和安装

  1. 进入hb_dir目录:
cd hb_dir
  1. 修改Makefile文件内容,将其中 DICT_BUILD_TOOL_DIR 对应的值修改为Dictionary Development Kit的安装路径,我刚才用git clone安装在~/Documents/dict_test/Dicionary-Development-Kit,所以我这里填入的是 /Users/我的用户名/Documents/dict_test/Dictionary_Development_Kit,请注意,这里需要使用绝对路径,不能使用相对路径。修改完成如下图。

Modification of Makefile

  1. 编译。根据原始字典的大小,编译时间有长有短,慢慢等。如果有报错,先解决报错的问题,不然无法安装。编译顺利的话,完成后会在hb_dir目录下生成objects目录。
make

Output of make

  1. 设置
    • 设置字典内容的样式
      这里有两种方式:

      1. 原文章作者建议是将下载的MDict格式的字典包里自带的.css样式表文件直接替换为DefaultSytle.css
        我遇到的问题是,有些会造成mac Dictionary里显示混乱,或者有些下载的MDict里没有.css文件,只有光秃秃的一个.mdx文件。所以我建议:
      2. 保留编译时自动生成的DefaultStyle.css文件,如果下载的MDict格式的字典包里有自带的.css样式表文件,则将其内容追加到自动生成的DefaultStyle.css内容后面,有相同的设置项,按css工作原理,应该可以自动覆盖。
    • 设置在mac Dictionary里显示的字典名称
      用Xcode或者BBEdit打开hb_dir/objects/hb_dir.dictionary/Contents里的 Info.plist 文件,可以修改三处:Bundle nameBundle display nameDCSDictionaryCopyright,各自的最终呈现效果如下列图示:

Info.plist configuratio

Positions of Bundle display name and DCSDictionaryCopyright

Position of Bundle name in mac Dictionary.app

Position of Bundle name in shortcut translation

  1. 安装。确保你还在~/Documents/dict_test/hb/hb_dir/目录下:
make install

Output of make install

参考文章链接

  1. 从.mdx(Mdict)制作macOS原生词典
  2. Mdict to macOS Dictionary转换笔记
  3. Mdic词典文件转换为macOS原生词典