宣传一下自己写的 GoldenDict 替代

感觉 GoldenDict 用户量还是挺大的,但原始的 GoldenDict 用的是 Qt 4, Leap 15.4 仓库里的版本渲染 HTML 挺慢的,而且有莫名其妙的 segfault, 我现在还用的 15.3 的包, 看起来原作者也不打算维护了。GitHub 上的 GoldenDict-ng 能用 Qt 5 编译,还有内置暗色主题,代码也整洁得多,确实不错,但是也有 HTML 渲染缓慢的问题。

反正从各种词典格式读出来的解释都是 HTML, 我就想,为什么不直接用浏览器渲染呢?在浏览器中还可以用 Dark Reader 之类的扩展。于是就有了:

现在其实还不能叫 GoldenDict 替代,因为只支持 MDict 格式,我水平有限,不懂 dictzip 工作原理且暂时没有时间精力学习。So contributions would be appreciated!

3赞

Leap 15.4 仓库里

openSUSE 仓库里面的就是 -ng 特别早期的版本,自然有很多 bug。

我提交了一个新的还没接收,不过只支持 qt6(leap15.4 里没有)。

https://build.opensuse.org/request/show/1086887

反正从各种词典格式读出来的解释都是 HTML, 我就想,为什么不直接用浏览器渲染呢?

这个有计划

难的一点是有些词典用的是很特别的音频和图片格式,可能需要一些额外的转换…

dictzip 工作原理

dictzip 本质上是在普通的 gzip 文件添加一个表/索引,记录一下每个文件开始到结束的位置,这样可以 O(1) 读取任意位置的数据后用 zlib 解压

实际上 StarDict 和 gd 都是用从 dictd 里面扣出来的 dictzip.c/dictzip.h (加起来小于 1000 行),(不过它们都对这两个文件做了不少的改动)。

所以不需要了解太多的细节,配合 python 用的话可能需要写一下点 C :)

另外 stardict 自带索引 .idx,DSL 本质是纯文本文件,这两个可以直接把 .dz 当 gzip 文件解压,然后手动建索引。


另外对于其它格式的支持,有 https://github.com/ilius/pyglossary 可以参考。

感谢 gd 开发者回复 :wink:

其实我本来是想直接把 gd GUI 部分去除,然后拿来当服务端用的,不过用 Qt 写个单纯的 API 服务器感觉怪怪的,而且 GUI 部分不太好剥离。

dictzip 的问题主要在于,我没用 C 写过只有用 C 才能写出来的程序,大一学的根本不够用,所以看不懂这种底层代码。等暑假有空了再试试吧。

pyglossary 我在查现成的词典格式处理库的时候查到了,确实值得参考,但人家的目的也是读整个词典然后转换,还不能直接拿来当个库用。其实修改应该也很简单,读的时候把位置存到表就行了?关键还是解压,人家可以直接解压整个词典,我要这么干,内存会炸。