# 词典与词典软件制作规约

**URL:** <https://forum.freemdict.com/t/topic/11094>\
**Category:** 技术交流与词典编修\
**Created:** [2022 年2 月 19 日 04:33 UTC](https://forum.freemdict.com/t/topic/11094 "2022-02-19T04:33:31Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

作者： ![xiaoyifang](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/x/df788c/32.png) [@xiaoyifang](https://forum.freemdict.com/u/xiaoyifang)\
发布日期： [2022 年2 月 19 日 04:33 UTC](https://forum.freemdict.com/t/topic/11094/1 "2022-02-19T04:33:31Z")

</div>

本人从未制作过一本词典，只是在使用中有些感受，更希望大家可以集体补充。  
目前词典制作的质量各有特色。对制作词典中使用的资源的方式进行下规范，希望对词典的制作有个参考。

## 词典制作

- js使用
  - js使用的时候如果引用了第三方库如jquery等，要使用noConflict并定义自己的 $别名。 防止影响其他词典或者被其他词典影响。
  - 如果需要对全局事件处理，考虑到多词典共存的 情况下兼容及影响。 from [词典与词典软件制作规约 - #14，来自 demo](https://forum.freemdict.com/t/topic/11094/14)
  - 不要依赖浏览器本身的函数定义。如chrome中的$

- css使用
  - css中尽量不要出现全局定位的样式，避免对其他词典产生影响，如果想出现一些全局浮层，也只保证在自己的词典范围内出现（可能需要js控制）

- 图片使用
  - 目前的主流图片格式，词典软件应该都支持。如果新词典，建议使用webp格式。大小质量都比较好。开源格式，一般的软件都是内嵌浏览器实现的，对开源格式支持比较好

- 音频使用
  - 首选开源，使用范围广泛的音频格式，如ogg、speex等。 这个不强求，目前音频支持一般问题不大。

- 视频使用
  - 建议使用webm等开源格式。mp4一般由于专利授权，需要专门授权，造成词典软件使用的内嵌浏览器支持性有问题。目前词典软件一般内嵌webkit、webengine，对开源格式支持较好

## 词典软件

目前词典对词典软件的要求，应该集中中探测定期使用的词典软件是goldendict,bluedict之类的方式，并据此提供一些特性。  
检测的方式各种各样，有检测useragent,有检测 document element的。（当然原则上还是希望词典可以通用，不要为了某个软件做单独优化）  
词典制作也可以对词典软件提出要求，用于方便探测。  
比如几种方式：

- 输出的html中，包含特定的html字段。
- 输出的html中，含有特定的js全局变量。（命名冲突避免）  
如

```auto
__DICT__ VERSION__={
    "name":"xxx dict",
    "version":"1.0.0",
    "description":""
}

```

- useragent包含特定信息，这个不通用。各软件实现方式也可能有困难。

---

<div class="post-metadata">

作者： ![xiaoyifang](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/x/df788c/32.png) [@xiaoyifang](https://forum.freemdict.com/u/xiaoyifang)\
发布日期： [2022 年2 月 19 日 04:44 UTC](https://forum.freemdict.com/t/topic/11094/3 "2022-02-19T04:44:32Z")

</div>

作出目标，大家努力朝着去，未必一下子就达到。

---

<div class="post-metadata">

作者： ![shaoshi](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/shaoshi/32/14529_2.png) [@shaoshi](https://forum.freemdict.com/u/shaoshi)\
发布日期： [2022 年2 月 19 日 05:16 UTC](https://forum.freemdict.com/t/topic/11094/4 "2022-02-19T05:16:01Z")

</div>

> [@xiaoyifang](#):
>
> 本人从未制作过一本词典

兄台自言“本人从未制作过一本词典”，没做过怎么就侃侃而谈，指导起实际做过的人呢？

建议兄台先卷起袖子动手，至少做过一本，了解了其中甘苦后，再来发言。

补充：

我应该再加几句：这些建议很好，不过大概无法在所有阅读器中实现，特别是旧的阅读器。

我没有贬低兄台的意思。我个人觉得有点陈义太高，但也许是因为我用的阅读器比较旧。也许在新的阅读器中是可以实现的？

或者兄台按照自己的建议，做一个词典示范一下？

---

<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)\
发布日期： [2022 年2 月 19 日 05:21 UTC](https://forum.freemdict.com/t/topic/11094/5 "2022-02-19T05:21:00Z")

</div>

> [@xiaoyifang](#):
>
> css中尽量不要出现全局定位的样式

这个无所谓的，合格的词典软件会给你处理。

> [@shaoshi](#):
>
> 没做过

楼主的思考都挺好的，不需要做过才能谈。

---

<div class="post-metadata">

作者： ![First\_Last](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/first_last/32/5_2.png) [@First\_Last](https://forum.freemdict.com/u/First_Last)\
发布日期： [2022 年2 月 19 日 05:49 UTC](https://forum.freemdict.com/t/topic/11094/6 "2022-02-19T05:49:06Z")

</div>

Goldendict 有支援 webp 嗎？

---

<div class="post-metadata">

作者： ![xiaoyifang](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/x/df788c/32.png) [@xiaoyifang](https://forum.freemdict.com/u/xiaoyifang)\
发布日期： [2022 年2 月 19 日 05:50 UTC](https://forum.freemdict.com/t/topic/11094/7 "2022-02-19T05:50:21Z")

</div>

> [@First\_Last](#):
>
> Goldendict 有支援 webp

现在新版有支持 [https://forum.freemdict.com/t/topic/10213](https://forum.freemdict.com/t/topic/10213)

---

<div class="post-metadata">

作者： ![匿名1219](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/%E5%8C%BF/e495f1/32.png) [@匿名1219](https://forum.freemdict.com/u/%E5%8C%BF%E5%90%8D1219)\
发布日期： [2022 年2 月 19 日 06:38 UTC](https://forum.freemdict.com/t/topic/11094/8 "2022-02-19T06:38:00Z")

</div>

> [@xiaoyifang](#):
>
> - 音频使用
> - 首选开源，使用范围广泛的音频格式，如ogg、speex等。 这个不强求，目前音频支持一般问题不大。
> - 视频使用
> - 建议使用webm等开源格式。mp4一般由于专利授权，需要专门授权，造成词典软件使用的内嵌

请尊驾先看懂楼主在说什么再开尊口

---

<div class="post-metadata">

作者： ![mooned](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/mooned/32/7628_2.png) [@mooned](https://forum.freemdict.com/u/mooned)\
发布日期： [2022 年2 月 19 日 07:01 UTC](https://forum.freemdict.com/t/topic/11094/9 "2022-02-19T07:01:00Z")

</div>

> [@xiaoyifang](#):
>
> 如果新词典，建议使用webp格式

新格式也需要修圖軟件廣泛支援格式導出方可。  
敝人當下主要精力在古漢語論著的圖片詞典製作這塊，很自然會用到老馬套裝處理掃描影像，  
但 `ComicEnhancerPro` 目前是不支援導出 `webp` 格式的，如果說再換用第三方軟件倒騰一遍，這也是麻煩事，不可能回回都增加額外工作。

---

<div class="post-metadata">

作者： ![sxingbai](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/s/919ad9/32.png) [@sxingbai](https://forum.freemdict.com/u/sxingbai)\
发布日期： [2022 年2 月 19 日 07:29 UTC](https://forum.freemdict.com/t/topic/11094/10 "2022-02-19T07:29:50Z")

</div>

楼主高屋建瓴，谈的都切中要害，但更期望能做一个或修改一个词典作为范本。

---

<div class="post-metadata">

作者： ![mixivivo](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/m/8491ac/32.png) [@mixivivo](https://forum.freemdict.com/u/mixivivo)\
发布日期： [2022 年2 月 19 日 07:47 UTC](https://forum.freemdict.com/t/topic/11094/11 "2022-02-19T07:47:31Z")

</div>

楼主既然能大量修改goldendict的源码（ [GitHub - xiaoyifang/goldendict: A feature-rich dictionary lookup program, supporting multiple dictionary formats (StarDict/Babylon/Lingvo/Dictd) and online dictionaries, featuring perfect article rendering with the complete markup, illustrations and other content retained, and allowing you to type in words without any accents or correct case.](https://github.com/xiaoyifang/goldendict) ），是不需要制作一个mdx词典来证明自己确实明白mdx词典是怎么回事的，修改goldendict源码要求的技术水平、知识范围比制作一个通常的mdx词典高多了，而且，既然修改goldendict源码，免不了经常要拆解开各种导致bug的奇葩mdx查看，会令楼主可能比一般的mdx制作者更熟悉更了解mdx。

---

<div class="post-metadata">

作者： ![sxingbai](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/s/919ad9/32.png) [@sxingbai](https://forum.freemdict.com/u/sxingbai)\
发布日期： [2022 年2 月 19 日 08:15 UTC](https://forum.freemdict.com/t/topic/11094/13 "2022-02-19T08:15:27Z")

</div>

统一标准是不容易，但主要是缺少像楼主这样有思想有技术的人振臂一呼并耐心普及，当大家都尝到其中的好处，自然异议就少了

---

<div class="post-metadata">

作者： ![demo](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/d/e47774/32.png) [@demo](https://forum.freemdict.com/u/demo)\
发布日期： [2022 年2 月 20 日 02:17 UTC](https://forum.freemdict.com/t/topic/11094/14 "2022-02-20T02:17:46Z")

</div>

支持楼主的建议，词典越规范维护就越方便。  
本人在测试楼主升级 GoldenDict WebEngine 期间收集了350+词典，遇到最多的问题就是全局 CSS & JS 对其它词典的干扰。切换到 GoldenDict WebEngine 版后按F12打开开发者工具快且对 CSS & JS 支持好了，但也看到很多JS错误与资源加载失败错误。

> [@xiaoyifang](#):
>
> js使用的时候如果引用了第三方库如jquery等，要使用noConflict并定义自己的 $别名。 防止影响其他词典或者被其他词典影响。

看 GoldenDict 刚嵌入 jquery 3.6.0 时以为是它版本过高导致的JS兼容问题还向楼主误反馈过，经过对比测试发现兼容性反而更好了，因为好多词典中的JS用到了 jquery 但没有带上它。@xiaoyifang 目前我自用的版本已经屏蔽了noConflict并定义自己的 $别名，还在试用中。  
词典中JS另一个常见问题是注册全局事件与用 innerHTML 修改词典内容，导致一些怪问题。比如：  
《海•词(豪华版)》中的js会为img标签注册error事件并尝试重新加载，导致开发者工具中看到大量重复的404  
《辞海第七版》中的JS会在 document.ready 后修改body.innerHTML 内容，导致很多词典点标签切换没反应

> [@xiaoyifang](#):
>
> css中尽量不要出现全局定位的样式

CSS干扰问题在测试期间遇到的也多，主要是不同词典释义内容标签的 class 值重叠，而一些词典带的CSS太全就干扰了。由于测试词典多加上CSS干扰导致查词典结果后半部分排版基本都是乱的，目前只能把常用的词典放前面，空了花点时间修改CSS解决。

最后一个遇到较多的问题就是词典HTML内容不规范，很多标签没有关闭，尤其是 div 标签没有关闭导致后面的词典被干扰了。

---

<div class="post-metadata">

作者： ![demo](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/d/e47774/32.png) [@demo](https://forum.freemdict.com/u/demo)\
发布日期： [2022 年2 月 20 日 02:20 UTC](https://forum.freemdict.com/t/topic/11094/15 "2022-02-20T02:20:57Z")

</div>

> [@Impact](#):
>
> 楼主可以自己修改自己常用的词典以适配自己编译的词典软件

这是见效最快的好方法，目前已经修改了好多部词典

---

<div class="post-metadata">

作者： ![sxingbai](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/s/919ad9/32.png) [@sxingbai](https://forum.freemdict.com/u/sxingbai)\
发布日期： [2022 年2 月 20 日 03:03 UTC](https://forum.freemdict.com/t/topic/11094/16 "2022-02-20T03:03:35Z")

</div>

如果阁下能把自己发现的问题归类共享，作为这个规约的技术细则，这个规约才可能落到实处

---

<div class="post-metadata">

作者： ![anonymous36](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/a/f07891/32.png) [@anonymous36](https://forum.freemdict.com/u/anonymous36)\
发布日期： [2022 年2 月 20 日 03:48 UTC](https://forum.freemdict.com/t/topic/11094/17 "2022-02-20T03:48:12Z")

</div>

上面的建议都很好，但因为楼主自己没制作过词典，所以看的角度会有局限。

一部词典通常制作者用着没什么问题才会考虑分享出来。所以你提的这些恰恰是制作者不需要关心的东西，因为制作者本地使用一切正常。至于不同客户端、不同词典、不同用户遇到了问题，用爱发电的制作者可以解决也可以不管。

一个没有办法用来盈利的东西，恐怕是不需要规约，实际上也很难搞出一个规约来让别人遵守。一旦有利可图，即便没有规约制作者也会精益求精，更新修复层出不穷，参考隔壁某些作品 :goutou:

---

<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)\
发布日期： [2022 年2 月 20 日 03:56 UTC](https://forum.freemdict.com/t/topic/11094/18 "2022-02-20T03:56:56Z")

</div>

> [@xiaoyifang](#):
>
> 不通用。各软件实现方式

思考有意义。  
但症结是上述这个

只能慢慢等待某个开源软件的一统天下吧

---

<div class="post-metadata">

作者： ![xiaoyifang](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/x/df788c/32.png) [@xiaoyifang](https://forum.freemdict.com/u/xiaoyifang)\
发布日期： [2022 年2 月 20 日 04:20 UTC](https://forum.freemdict.com/t/topic/11094/19 "2022-02-20T04:20:57Z")

</div>

> [@sxingbai](#):
>
> 发现的问题归类共享，作为这个规约的技术细则，这个规约才可能落到实处

我提个引子，大家可以共同完善、补充。作为目标，不作为即刻实现的要求。

---

<div class="post-metadata">

作者： ![H4M5TER](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/h4m5ter/32/18734_2.png) [@H4M5TER](https://forum.freemdict.com/u/H4M5TER)\
发布日期： [2022 年6 月 10 日 15:50 UTC](https://forum.freemdict.com/t/topic/11094/20 "2022-06-10T15:50:43Z")

</div>

我觉得与其称作【规约】，不如叫【参考建议】比较好，楼主提出的问题是制作词典会遇到比较通用的问题。

> [@anonymous36](#):
>
> 制作者本地使用一切正常。至于不同客户端、不同词典、不同用户遇到了问题，用爱发电的制作者可以解决也可以不管。

你说的没问题，我们当然不可能强迫用爱发电的人遵守什么，但是这些人其中总会有乐于修复兼容性问题的，所以这个帖子能够做的就是帮助这些人定位这些问题，了解问题的来源并且去解决。
