词典与词典软件制作规约

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

词典制作

  • js使用
    • js使用的时候如果引用了第三方库如jquery等,要使用noConflict并定义自己的 $别名。 防止影响其他词典或者被其他词典影响。
    • 如果需要对全局事件处理,考虑到多词典共存的 情况下兼容及影响。 from 词典与词典软件制作规约 - #14,来自 demo
    • 不要依赖浏览器本身的函数定义。如chrome中的$
  • css使用
    • css中尽量不要出现全局定位的样式,避免对其他词典产生影响,如果想出现一些全局浮层,也只保证在自己的词典范围内出现(可能需要js控制)
  • 图片使用
    • 目前的主流图片格式,词典软件应该都支持。如果新词典,建议使用webp格式。大小质量都比较好。开源格式,一般的软件都是内嵌浏览器实现的,对开源格式支持比较好
  • 音频使用
    • 首选开源,使用范围广泛的音频格式,如ogg、speex等。 这个不强求,目前音频支持一般问题不大。
  • 视频使用
    • 建议使用webm等开源格式。mp4一般由于专利授权,需要专门授权,造成词典软件使用的内嵌浏览器支持性有问题。目前词典软件一般内嵌webkit、webengine,对开源格式支持较好

词典软件

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

  • 输出的html中,包含特定的html字段。
  • 输出的html中,含有特定的js全局变量。(命名冲突避免)
__DICT__VERSION__={
    "name":"xxx dict",
    "version":"1.0.0",
    "description":""
}
  • useragent包含特定信息,这个不通用。各软件实现方式也可能有困难。
2 个赞

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

1 个赞

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

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

补充:

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

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

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

3 个赞

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

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

3 个赞

Goldendict 有支援 webp 嗎?

1 个赞

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

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

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

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

楼主既然能大量修改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. ),是不需要制作一个mdx词典来证明自己确实明白mdx词典是怎么回事的,修改goldendict源码要求的技术水平、知识范围比制作一个通常的mdx词典高多了,而且,既然修改goldendict源码,免不了经常要拆解开各种导致bug的奇葩mdx查看,会令楼主可能比一般的mdx制作者更熟悉更了解mdx。

2 个赞

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

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

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

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

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

1 个赞

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

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

1 个赞

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

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

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

2 个赞

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

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

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

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

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