MacOS 导入 MDX 词典
条评论本文介绍了在 macOS 上将 MDX 词典文件转换并导入为本地词典的方法。主要步骤包括:使用 Python 虚拟环境安装 pyglossary 工具,将其转换为 AppleDict 格式;处理紧凑型 MDX 文件中的特殊格式;通过 mdict-utils 工具解包并还原字典条目;修改样式和配置文件;使用 Dictionary Development Kit 编译安装词典。整个流程适用于需要在 macOS 系统中使用自定义 MDX 词典的用户。
1. 建立并激活 Python 虚拟环境
1 | python -m venv pyenv |
2. 安装 pyglossary
1 | pip install lxml beautifulsoup4 html5lib pyglossary |
3. 使用 pyglossary 转换 mdx 文件为MacOS词典格式
1 | pyglossary ~/Documents/漢語大詞典2018/漢語大詞典.mdx ~/Documents/漢語大詞典 --read-format=OctopusMdict --write-format=AppleDict |
这步会在~/Documents/漢語大詞典目录下生成名为漢語大詞典.xml的文件(还有Makefile、css等文件)。
4. 紧凑型 MDX 文件的处理
如果从 MDX 转过来的 XML文件包含很多反引号,类似
`1``2⺬13``12qí13``14ㄑㄧˊ15`\undefined`10111神祇。亦專指地神。
这种就是MDict特有的紧凑型html格式(Compat Html),得特殊处理:
(1)格式化 pyglossary 生成的xml文件
1 | perl -pi -e 's/\`\`/\`\n\`/g' ~/Documents/漢語大詞典/漢語大詞典.xml |
(2)使用 mdict-utils 解包 mdx 文件
1 | pip install mdict-utils |
这样当前路径会有一个名为漢語大詞典.mdx.stylesheet的文件,也就是mdict的记号文件,格式为:
第一行: 记号的名称(只能用数字,必须大于0,最大不超过255)
第二行: 开始字符串(可以为空)
第三行: 结束字符串(可以为空)
(3)修改漢語大詞典.mdx.stylesheet,保证替换后所有html tag标签是完全闭合的
(4)去掉漢語大詞典.mdx.stylesheet文件中的\r符号
1 | sed -i '' 's/\r$//' 漢語大詞典.mdx.stylesheet |
(5)转换漢語大詞典.mdx.stylesheet文件
1 | perl -pe 's/^(\d+)$/XXX$1|/g' 漢語大詞典.mdx.stylesheet |perl -pe 's/^/|/g'|perl -pe 's/\n//g;g'|perl -pe 's/\|XXX/\n/g'|perl -pe 's/\|\|/|/g' > 漢語大詞典_edited.mdx.stylesheet |
这一步的目的,是把mdict记号文件合并成一行,以|作为分隔符
(6)还原正确的字典条目,脚本如下:
1 |
|
5. 安装Dictionary Development Kit
先安装Command Line Tools for Xcode:
1 | xcode-select --install |
从developer.apple.com下载Additional Tools for Xcode,然后将Dictionary Development Kit复制到Documents目录下
6. 修改第三步生成的Makefile文件,指定Dictionary Development Kit的路径
1 | DICT_BUILD_TOOL_DIR = "~/Documents/Dictionary Development Kit" |
7. 复制样式文件及词典名称的修改
复制词典原来附随的css样式,粘贴到漢語大詞典.css文件中。在漢語大詞典.plist文件更改的CFBundleDisplayName值,这将会词典app显示的名字。
8. 安装
1 | make && make install |
词典将会安装到/Library/Dictionaries目录
9. 重启词典app,在词典的设置里,启用该词典
本文标题:MacOS 导入 MDX 词典
文章作者:杜子腾
发布时间:2025-09-14
最后更新:2025-09-14
原始链接:https://blog.xueyin.club/post/macos-import-mdx-dictionary-z4g9mp.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!