探寻 StarDict 词库的发音问题很久, 前后历程有 8, 9 年了, 一直想做出一个与 MDict 一样功能的词库 (能否实现? 本文的最末会为您揭晓). 之前努力了 3-4 次, 但一直搞不定的是词库的发音问题, 本已打算放弃治疗了, 这次在 @ johannhuang 帖子的大力感召之下, 再次对这个问题进行了探究, 并最终在 johannhuang 的大力帮助下, 对 StarDict 词典对音频的处理方式有了大致的结论, 不敢私藏, 写出来与大家共享. 不知能否算是词典制作经验吧, 如果发帖的位置不对, 烦请版主帮忙移动, 但请保留这个帖子, 这对仍在使用或者将要使用 StarDict 词库的同学们估计会有一定的帮助…
首先说结论: StarDict 词库能否实现单词或例句的发音? 答案是: … 可以, 但不一定满足你的需求, 且实现方法并不简便
实现方式 (这里只提供大略的思路, 具体的步骤不做过多阐述):
- StarDict 词库源文件使用 xdxf 格式编写, 编译后 .ifo 文件中的 sametypesequence=x , 音频文件和图片放在 res 目录下, res目录与词典文件放在一起, res 目录在 GD (GoldenDict) 中不支持压缩为 zip, 但 DU (Dictionary Universal) 支持 res.zip
- 如果 StarDict 词库源文件采用 html 格式编写, 则发音文件的链接必须根据 GD 或 DU 的私有的发音协议改写, 类似在 MDict 词库里音频地址的 href=“sound://…” 写法, 只是类似, 实现起来并不简单…
- 对于 DU, 还有一种方式是由作者提供的: 将音频文件全部放入一个文件夹中, 但音频文件的文件名必须严格对应单词词头, 该文件夹支持 zip 压缩. 如果单词有多种发音, 则要放在不同的音频文件夹中, 具体的实现方法可以看 DU 的帮助文档.
以上不同方法的优劣:
- 对于第一种方法, xdxf 格式实际上是 xml 结构, 全套自有标签, 除非获得的原始资源就是这种结构, 否则从 html 转过去估计不太容易, 且样式固定, 不如 html 灵活, 想要做出漂亮的 StarDict 词库非常费劲, 想要如 MDict 词库一样各种花式跳转, 切换, 变化是不可能实现的, 但这种格式层级非常清晰, 感兴趣的同学可以自行研究
- 对于第二和第三种方法, StarDict 词库可以采用 html 格式来编写, 除了音频的发音处理与 MDict 词库不同之外, 其它的东西应该 (正在进一步尝试) 都能和 MDict 词库一样, 跳转, css 改变样式, js 代码处理页面都可以做到, 也就是说, MDict 词库的源文件只需要做很少的改动, 就可以完全转换为 StarDict 的词库.
为什么执着于 StarDict 词库?
这都要从词典软件说起, 话说 10 年前当我需要一部能离线使用的电子词典 (小语种) 时, 全网只有一个中国留学生做出了一部 dsl 格式的, 而那时, 苹果的 App Store 里支持这个格式的词典程序评分最高的的就是 Dictionary Universal 这个软件, 在经过越狱手机上的 免费
试用后果断买票上车, 但这个软件只支持 StarDict 词库和简单的 dsl 词库, 而 StarDict 软件在更久的以前因为工作需求就曾经接触过, 所以就开始了自己制作使用 StarDict 词库的道路, 跟之后的 MDict 大行其道可以说是完美的逆行…
再啰嗦几句关于 Dictionary Universal 这个软件
这个软件是我在苹果 App Store 里付费的第一个软件, 用了这么多年, iOS 系统从 3.x 升级到现在的 13.x, 10 个大版本, 作者一直在更新, 虽然不是很勤, 但每次 iOS 大版本升级后产生的问题都能修复, 可以说是相当的良心了, 多年前也曾因为软件更新后支持了 css 和 js 但不知如何使用而写过邮件给作者, 作者也回复并帮助我解决了疑惑. 其与其它 MDict 词库的软件使用感受上最大的不同是横向滑动切换不同的词库, 其它的功能: 自定义词库组, 生词收藏导出, 点击查询, 链接跳转…都差不太多.
好了, 写了 N 多的废话, 如果你坚持看到这里, 那么最终揭示答案的时候到了:
到底能不能做出与 MDict 词库显示效果和功能一样的 StarDict 词库?
可以! 但不同的词典软件方法不同, GD 下完全没有必要, 毕竟有那么多 MDict 资源; DU 之下, 我似乎应该是猜出了 DU 的私有音频协议的写法, 目前正在以 html 格式重新制作那本我用了快 10 年的小语种词库, 这次会把音频功能加入其中, 也终于可以了却一个执着了将近 10 年的心愿. 之后应该会挑选合适使用的 MDict 词库转化一波.
再次感谢坛友 johannhuang 在这次实践中的大力支持, 感谢你的代码支持和充满灵感的提示, 助我终于了此心愿, 感谢!