# 宣传一下自己写的基于 web 技术的词典软件

**URL:** <https://forum.freemdict.com/t/topic/23724>\
**Category:** 软件经验交流展望\
**Created:** [2023 年9 月 30 日 04:39 UTC](https://forum.freemdict.com/t/topic/23724 "2023-09-30T04:39:00Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

作者： ![crissium](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/c/a5b964/32.png) [@crissium](https://forum.freemdict.com/u/crissium)\
发布日期： [2023 年9 月 30 日 04:39 UTC](https://forum.freemdict.com/t/topic/23724/1 "2023-09-30T04:39:00Z")

</div>

先放 GitHub 链接：

> **[GitHub - Crissium/SilverDict: Web-Based Alternative to GoldenDict](https://github.com/Crissium/SilverDict)**
>
> Web-Based Alternative to GoldenDict. Contribute to Crissium/SilverDict development by creating an account on GitHub.

以及 demo (在不要钱的 Okteto 容器里，慢得要死，完全不能代表实际效果）:

> **[SilverDict](https://reverse-proxy-crissium.cloud.okteto.net/)**
>
> Web site created using create-react-app

正文：

没想到这里这么多开发者，连 goldendict-ng 的作者都在，我也来宣传一下自己写的词典软件。

SilverDict 目前支持 MDict, StarDict, DSL 三种，Babylon 考虑支持，但这格式实在太难读了。后端是一个 Flask 服务器，核心部分是一个我自己写的 Flask 扩展，可以读取词典内容并输出 well-formatted HTML, 通过多线程和 SQLite 等种种技术确保速度非常可观；前端用的是 React, 页面非常简洁，该有的功能都有，比如：

- 词典分组，每组设置一些语言，可以进行拼写检查和词形分析（比如 walks → walk）
- 查询忽略音符（输入 etudier 可以查到 étudier）以及连字 ligature （ ~~soeur → sœur~~ 记错了，œ 不行，德语的 ß 才行）（GoldenDict 没有这个功能的），忽略大小写，忽略空格、连词符，忽略简繁词条
- 简繁转换
- 自动扫描添加指定目录中的词典
- 点击查询解释中的词
- 多媒体支持良好
- 超链接支持
- 搜索历史
- 由于采用 client-server 架构，可以把服务端部署到自己服务器上，或者放到路由器上，家里人都能用
- Geeks 可以试试用 w3m
- Python 和 web app 天然跨平台

功能太多了，我自己都想不起来了，总之是 as expected, 欢迎尝试，欢迎 fork, 欢迎 star ;）

* * *

补充：

可以用 Termux 运行在手机里，但这就比较 geeky 了。

有人说无法下载，我放飞书云文档里了：

[https://nankai.feishu.cn/drive/folder/L43mfggw0l4HLFdBePScUtrbnjb](https://nankai.feishu.cn/drive/folder/L43mfggw0l4HLFdBePScUtrbnjb)

* * *

写给程序员：

- 有没有人有 Arm Mac 呀？据说 OpenCC 在上面没法用？如果乐意的话，可以像 Windows 一样打包一个完整的 Python 运行环境，然后邮件发给我，或者我给你 GitHub 编辑权限，省得不懂技术的 Mac 用户折腾了。
- React 怎么写 nested dialogue? 现在的实现有问题，没有 overflow: scroll 词典太多会溢出到界面以外，有了的话词典太少时内层显示不全。
- 前端目前是英文的，总共没几个词，但还是可能会给用户带来麻烦，希望有本地化经验的同仁 fork 一下，加个靠谱本地化库，然后把字符串都翻译一下。Crowdin 和 Weblate 似乎对开源项目免费？

* * *

写给懂俄语的：

可以帮忙到一些俄语论坛宣传一下吗？我的大部分词典都是从各种 Russian sources 搜刮来的，大头是个古老的 torrent, 给蔑视法律的俄罗斯汉子竖个大拇指 👍 咱也得回馈一下人家。

---

<div class="post-metadata">

作者： ![hua](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/hua/32/11090_2.png) [@hua](https://forum.freemdict.com/u/hua)\
发布日期： [2023 年9 月 30 日 05:43 UTC](https://forum.freemdict.com/t/topic/23724/2 "2023-09-30T05:43:14Z")

</div>

2023 年9 月 30 日 05:43 UTC全站置顶



---

<div class="post-metadata">

作者： ![shaozhe](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/s/a5b964/32.png) [@shaozhe](https://forum.freemdict.com/u/shaozhe)\
发布日期： [2023 年9 月 30 日 06:54 UTC](https://forum.freemdict.com/t/topic/23724/3 "2023-09-30T06:54:54Z")

</div>

无法下载，谁能传一个到百度网盘？

---

<div class="post-metadata">

作者： ![crissium](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/c/a5b964/32.png) [@crissium](https://forum.freemdict.com/u/crissium)\
发布日期： [2023 年9 月 30 日 06:58 UTC](https://forum.freemdict.com/t/topic/23724/4 "2023-09-30T06:58:08Z")

</div>

看看新加的链接行不行？

---

<div class="post-metadata">

作者： ![shaozhe](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/s/a5b964/32.png) [@shaozhe](https://forum.freemdict.com/u/shaozhe)\
发布日期： [2023 年9 月 30 日 07:34 UTC](https://forum.freemdict.com/t/topic/23724/5 "2023-09-30T07:34:29Z")

</div>

可以了，谢谢

---

<div class="post-metadata">

作者： ![meandmyhomies](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/m/958977/32.png) [@meandmyhomies](https://forum.freemdict.com/u/meandmyhomies)\
发布日期： [2023 年9 月 30 日 12:46 UTC](https://forum.freemdict.com/t/topic/23724/6 "2023-09-30T12:46:35Z")

</div>

这个要赞！感觉很up to date

---

<div class="post-metadata">

作者： ![endnote](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/e/9de0a6/32.png) [@endnote](https://forum.freemdict.com/u/endnote)\
发布日期： [2023 年10 月 3 日 03:21 UTC](https://forum.freemdict.com/t/topic/23724/7 "2023-10-03T03:21:13Z")

</div>

支持一下。  
不知道能否整合成一个浏览器插件呢？

> [@【探讨】有没有可能将词典查询软件发布为浏览器插件](https://forum.freemdict.com/t/topic/22333):
>
> 现在的词典查询软件都是个单独的程序。对于在浏览器内的阅读，还要各种hook捕获手段才能跳转到词典程序进行 entry 查询。 有没有可能将词典程序以 Chrome / Edge 浏览器插件的形式发布呢？允许用户在本地指定MDX目录等一些自定义设置。查询结果显示在侧边栏。 本人不懂技术。也许出于安全考虑，浏览器插件的运行环境不允许插件访问本地磁盘？如果是这样，有没有可能以 [htt…](http://localhost)

---

<div class="post-metadata">

作者： ![crissium](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/c/a5b964/32.png) [@crissium](https://forum.freemdict.com/u/crissium)\
发布日期： [2023 年10 月 3 日 04:58 UTC](https://forum.freemdict.com/t/topic/23724/8 "2023-10-03T04:58:48Z")

</div>

完全可以的。后端只提供了一堆 API, 完全可以再用 React 写个扩展。之前写过 API 文档，在 GitHub 的 Wiki 下面，可以去看看，但有一段时间没更新了。

另外，其实不用目前的 web app 也是可以的，直接用 w3m [http://localhost:2628/api/query/Default%20Group/word](http://localhost:2628/api/query/Default%20Group/word) 就行，浏览器扩展必然也是一个道理。

* * *

补充一点，目前只有 GitHub 里面这个 React web app, 但我正在开发一个 Flutter app, 并且有计划开发 C++/Qt 桌面应用，命令行界面和浏览器扩展等等我个人不需要，如果哪位愿意开发这两个，欢迎回复告知我，我会尽可能帮忙。

---

<div class="post-metadata">

作者： ![Frank404](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/f/b5a626/32.png) [@Frank404](https://forum.freemdict.com/u/Frank404)\
发布日期： [2024 年2 月 2 日 11:31 UTC](https://forum.freemdict.com/t/topic/23724/9 "2024-02-02T11:31:21Z")

</div>

感谢楼主的作品，这个的简繁转换我没太看懂，麻烦楼主赐教。  
是需要安装opencc后，将 `zh` 添加到包含中文词典的组中，然后preferences.yaml中设置chinese\_preference:cn。就可以实现输入 一个简体汉字 也能查到对应的 繁体汉字的词典中的内容吗

---

<div class="post-metadata">

作者： ![crissium](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/c/a5b964/32.png) [@crissium](https://forum.freemdict.com/u/crissium)\
发布日期： [2024 年2 月 2 日 11:54 UTC](https://forum.freemdict.com/t/topic/23724/10 "2024-02-02T11:54:25Z")

</div>

> [@Frank404](#):
>
> 是需要安装opencc后，将 `zh` 添加到包含中文词典的组中，然后preferences.yaml中设置chinese\_preference:cn。就可以实现输入 一个简体汉字 也能查到对应的 繁体汉字的词典中的内容吗

如果仅仅是为了简查繁/繁查简，标记组的语言为 zh 即可，如果需要转换正文内容，需要修改 preferences.yaml 的 `chinese_preference` 字段为 `cn` （大陆简体，e.g. 意大利）/ `tw` （台湾正体，e.g. 义大利），此处故意写错字，以示这不只是字形转换，是整个表达的本地化。

---

<div class="post-metadata">

作者： ![Frank404](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/f/b5a626/32.png) [@Frank404](https://forum.freemdict.com/u/Frank404)\
发布日期： [2024 年2 月 2 日 12:00 UTC](https://forum.freemdict.com/t/topic/23724/11 "2024-02-02T12:00:59Z")

</div>

好的，谢谢  
感谢回复

---

<div class="post-metadata">

作者： ![Howie](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/h/9fc29f/32.png) [@Howie](https://forum.freemdict.com/u/Howie)\
发布日期： [2024 年2 月 2 日 12:25 UTC](https://forum.freemdict.com/t/topic/23724/12 "2024-02-02T12:25:57Z")

</div>

![image](https://forumcdn.freemdict.com/uploads/default/original/3X/6/b/6b5bb5d11a0a812db84ad53614a75b607dc6db16.png)

macOS14不管用

---

<div class="post-metadata">

作者： ![crissium](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/c/a5b964/32.png) [@crissium](https://forum.freemdict.com/u/crissium)\
发布日期： [2024 年2 月 2 日 12:40 UTC](https://forum.freemdict.com/t/topic/23724/13 "2024-02-02T12:40:03Z")

</div>

> [@Howie](#):
>
> macOS14不管用

不从源“编译”不需要用 node, 从 release 下载一个现成的就行了，自己只需要有 Python.

---

<div class="post-metadata">

作者： ![Frank404](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/f/b5a626/32.png) [@Frank404](https://forum.freemdict.com/u/Frank404)\
发布日期： [2024 年2 月 2 日 12:43 UTC](https://forum.freemdict.com/t/topic/23724/14 "2024-02-02T12:43:13Z")

</div>

![](https://forumcdn.freemdict.com/uploads/default/original/3X/e/b/eb8cb4a7693502b82118d82a8c00fd324c457909.png)  
是不是对这种 MDict词典的样式不太支持  
用的是这个 [Chinese-Mandarin-Dictionaries/教育部重編國語辭典(第五版) Taiwan MOE Dict at main · lxs602/Chinese-Mandarin-Dictionaries · GitHub](https://github.com/lxs602/Chinese-Mandarin-Dictionaries/tree/main/%E6%95%99%E8%82%B2%E9%83%A8%E9%87%8D%E7%B7%A8%E5%9C%8B%E8%AA%9E%E8%BE%AD%E5%85%B8(%E7%AC%AC%E4%BA%94%E7%89%88)%20Taiwan%20MOE%20Dict)

---

<div class="post-metadata">

作者： ![crissium](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/c/a5b964/32.png) [@crissium](https://forum.freemdict.com/u/crissium)\
发布日期： [2024 年2 月 2 日 13:10 UTC](https://forum.freemdict.com/t/topic/23724/15 "2024-02-02T13:10:46Z")

</div>

> [@Frank404](#):
>
> 是不是对这种 MDict词典的样式不太支持  
> 用的是这个 [Chinese-Mandarin-Dictionaries/教育部重編國語辭典(第五版) Taiwan MOE Dict at main · lxs602/Chinese-Mandarin-Dictionaries · GitHub](https://github.com/lxs602/Chinese-Mandarin-Dictionaries/tree/main/%E6%95%99%E8%82%B2%E9%83%A8%E9%87%8D%E7%B7%A8%E5%9C%8B%E8%AA%9E%E8%BE%AD%E5%85%B8(%E7%AC%AC%E4%BA%94%E7%89%88)%20Taiwan%20MOE%20Dict)

我自己用的十来个 MDict 词典是毫无问题的。我试着查了一下“教”字，也就是 Readme 里一个截了图的词条，得到的原始数据如下，跟你的结果很像：

```auto
`50`教`26`㈠`40``60`攴`62`7`63`11`80`ㄐㄧㄠˋ`81`jiào`42``15`動`6`①`1`訓誨、誘導。`14`如：「教導」、「教誨」。`1``16`《孟子・離婁上》：「古者易子而教之。」`2``6`②`1`使、讓。`16`唐・金昌緒〈春怨〉詩：「打起黃鶯兒，莫教枝上啼。」`1``16`宋・周邦彥〈玉樓春・當時攜手〉詞：「帳裡不教春夢到。」`2``20`名`6`①`1`禮儀、規矩。`16`《孟子・滕文公上》：「飽食暖衣，逸居而無教，則近於禽獸。」`1``16`《禮記・王制》：「脩其教，不易其俗。」`2``6`②`1`宗教的簡稱。`14`如：「佛教」、「基督教」。`2``6`③`1`姓。如明代有教輔直。`2``44``52`教`26`㈡`41``60`攴`62`7`63`11`80`ㄐㄧㄠ`81`jiāo`42``15`動`4`傳授。`14`如：「教唱」。`1``16`《左傳・襄公三十一年》：「教其不知，而恤其不足。」`1``16`唐・柳宗元〈六逆論〉：「教於後世，莫知其所以去就。」`2`

```

这看起来并不是 HTML, 其他的 MDict 词典其实都是一堆 HTML 文章通过极其复杂的方式合到一个 .mdx 文件中。那些前引号之间的数字看起来像是一种特殊的格式？

用别的 MDict 软件是什么效果？如果有现成的文档或者例子，我试着支持一下。

---

<div class="post-metadata">

作者： ![Frank404](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/f/b5a626/32.png) [@Frank404](https://forum.freemdict.com/u/Frank404)\
发布日期： [2024 年2 月 2 日 13:14 UTC](https://forum.freemdict.com/t/topic/23724/16 "2024-02-02T13:14:49Z")

</div>

![](https://forumcdn.freemdict.com/uploads/default/original/3X/6/2/62a792d46243d2ce28ef21d395cf0ce195913d42.png)  
我只用过goldendict-ng，格式是可以的

goldendict-ng的中文转换搜索也不错

 ![](https://forumcdn.freemdict.com/uploads/default/original/3X/e/d/ed7a71056b4b6d1ab88af8f09b4f25b0fa901047.png)

---

<div class="post-metadata">

作者： ![amob](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/amob/32/14630_2.png) [@amob](https://forum.freemdict.com/u/amob)\
发布日期： [2024 年2 月 2 日 13:17 UTC](https://forum.freemdict.com/t/topic/23724/17 "2024-02-02T13:17:17Z")

</div>

compact html，mdict自创的。就是用数字代替标签，目前而言其实没什么用。

---

<div class="post-metadata">

作者： ![last\_idol](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/last_idol/32/2205_2.png) [@last\_idol](https://forum.freemdict.com/u/last_idol)\
发布日期： [2024 年2 月 2 日 13:17 UTC](https://forum.freemdict.com/t/topic/23724/18 "2024-02-02T13:17:32Z")

</div>

这个叫紧凑格式，直接正则替换就可以。

> <https://github.com/liuyug/mdict-utils/issues/7>
>
> unpack很多mdx后，发现是compact html格式，例如 \[这个\](https://drive.google.com/file/d/1\_vdJcvRe…NIjVUsg7pXcrS8aILyedYvnI/view) 
> 按照mdict builder 的说明文件里的说法，compact html格式是
> 
> \`\`\`
> 4) MDict的紧凑型html格式(Compat Html)
> 这个格式由两个文件组成，正文文件格式基本和2）一样，但在正文里可以使用记号。另外
> 一个是记号文件。
> 
> 记号文件的格式：
> 由多个记号定义组成，每个记号定义有3行
> 第一行: 记号的名称(只能用数字，必须大于0，最大不超过255)
> 第二行: 开始字符串(可以为空)
> 第三行: 结束字符串(可以为空)
> 使用时在正文里使用\`记号\`(键盘左上角的那个符号)就会将后续的文字直到下一个记号前的文
> 字用记号定义的开始字符串和结束字符串括起来。正文里如果需要显示\` 则用"&#96;"表示。内
> 码应该和正文的一样(例如正文如果是用Unicode的话，记号文件也应该用Unicode)
> 
> 例如：
> 记号文件：
> 1
> \<font size=5\>
> \</font\>
> 2
> \<br\>
> 
> 3
> \<font face="Kingsoft Phonetic Plain, Tahoma"\>
> \</font\>
> 
> 
> 
> 正文文件:
> whole
> \`1\`whole&#96;s\`2\`\<p\>\`3\`(hol,hJl; houl)
> \</\>
> 
> 最后在显示的时候就会被替换成
> \<font size=5\>whole&#%96;s\</font\>\<br\>\<p\>\<font face="Kingsoft Phonetic Plain, Tahoma"\>(hol,hJl; houl)\</font\>
> 
> \`\`\`
> 可否在你的程序里，添加一个选项，将这种compact html，转换成一般的html和css文档？

---

<div class="post-metadata">

作者： ![Frank404](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/f/b5a626/32.png) [@Frank404](https://forum.freemdict.com/u/Frank404)\
发布日期： [2024 年2 月 2 日 13:30 UTC](https://forum.freemdict.com/t/topic/23724/20 "2024-02-02T13:30:26Z")

</div>

如果大佬可以对这种“紧凑格式”有支持就太棒啦，最近在找无版权免费使用的词典，但找到的好几本都用的这个

---

<div class="post-metadata">

作者： ![crissium](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/c/a5b964/32.png) [@crissium](https://forum.freemdict.com/u/crissium)\
发布日期： [2024 年2 月 2 日 13:37 UTC](https://forum.freemdict.com/t/topic/23724/21 "2024-02-02T13:37:41Z")

</div>

> [@Frank404](#):
>
> 我只用过goldendict-ng，格式是可以的
> 
> goldendict-ng的中文转换搜索也不错

如果 gd-ng 支持，那我就直接找找抄了，之前抄过不少代码了。这两天正在大翻新，顺手把这个也实现了。

另外我没加 hk ↔ cn, 因为我感觉 hk tw 绝大多数情况下是一样的吧。

[下一页](https://forum.freemdict.com/t/topic/23724.md?page=2)
