让kindle连续从不同词典取词

推友Yaodis在奋战13小时后,实现了在 kindle 上“同时”使用1本以上词典,可以从不同词典连续取词。以下是他的研究’成果’,有疑问和更多想法可以在twitter上和他继续交流和探讨。

起因

在拥有 kindle 之前,我一直使用手机上的 mobipocket 来阅读 mobi 格式的文件(mobipocket 公司后被 Amazon 收购,有了基于 mobi 的 azw 亚马逊专用格式文件)。手机里安装了不止一部词典,比如我平常的使用习惯是先看英英词典(比如我最喜欢的collins cobuild dictionary)再看双解词典,蛋疼的时候还会再看一下韦氏这样的母语者使用词典。取词时 mobipocket 会通过一个多选框来选择要使用的词典,所以在手机上多词典同时使用完全没有问题。现在到了 kindle 了,我发现她只能同时查一部设定为主词典的词典,起初,我无所谓,less is more,这样我花在词典上的时间会少了阅读就会多了,但后来,一方面我有时真的不是很清楚英英解释的意思,另一方面,我看到了这个帖子——

If you select a word with the cursor in your kindle- the translation pops up. Then if you press enter you get to the dictionary. And now if I select a word within my dictionary- the definition from another dictionary pops up.

这的确是一种达到目的的方法,如果可行的话

准备

stehk的这种方法成功的前提是什么?

1. 先来看看 kindle 是如何管理多本多语言词典的使用的

  • 如果你有多本相同语言的词典,那么被设置为主词典的词典会被在取词中使用(这我们都知道)
  • 如果你有多本不同语言的词典,比如法语和英语,那么在法语书籍中,法语词典将被使用(假设你的 kindle 里只装了一本法语词典)无论主词典被如何设置
2. 其次需要了解 mobi 文件(以及其相近格式 prc,azw)中是有含有语言信息的。对于同样是 mobi  词典,其语言信息稍有差别, 词典的语言信息(其实就是“地区语言”)基础上多了“输入语言”和“输出语言”这两个语言信息项。
  • 地区语言决定文件的内容是用什么语言写成的
  • 输入语言是决定取词和查询时使用的语言
  • 输出语言是词典解释项使用的语言
知道了上面两点你是不是对接下来的实施有了大概的猜测
是的,正是按照stehk所说那样,我翻译下中文——把主词典(比如英英的 collins cobuild dictionary)的地区语言换成法语,把另一本词典(比如牛津双解词典)的输入语言换成法语(还可以无限连续下去,比如把牛津双解地区语言换成德语,再整本韦氏搞成德语的输入)
就可以实现连续取词了来达到“同时”使用1本以上词典的目的。

实现

这里我先不打算用stehk说的几个工具来实现,先通过PoP 所说的十六进制编辑来实现,我认为这是简单干净的方法
下面就按上面列举的词典来示范
1. 下载一个十六进制编辑器,我使用的是 XVI32
2. 打开collins词典,参照这篇 wiki了解要修改的语言信息项在什么地方——我们要修改的语言信息位于 mobi 文件 header 里 offset 92,96,100。我也不知道什么是 offset ,但有个相对值,就是从 offset 16 开始,第76个项就是 offset 92了。offset 16 通过字符 MOBI 确定
  • 在十六进制编辑器中查找 MOBI(注意会有 BOOKMOBI 这个结果,不是它)
  • 利用编辑器的跳转功能(跳转距设置成76)
  • collins 是英英的,会看到连续的 00 00 00 09 00 00 00 09 00 00 00 09 这段以4个为一组的三组数据,这三组数据依次就是 local ,input language ,output language (1个十六进制数4个bit 组成,8bit=1Byte ,所以4Bytes就是00 00 00 09这8个十六进制数)
3.修改头4Bytes大小的信息,也就是 local 这一项。00 00 00 09 这个十六制进数中09是英语的Locale ID,Locale ID是微软搞的一个约定[ link] ,可以看到所有英语都是以09结尾的,09前两位位是方言,比如en-US是0409。法语是0c结尾
  • 现在修改00 00 00 09 至 00 00 00 0c ,collins 这部主词典就修改好了
4.修改牛津双解,local ,output language 可以不用动,把 input language 修改成 00 00 00 0c
至此可以在 collins 中取词的牛津双解做好了,还想继续接火车的话,把牛津的 local 改成德语,把韦氏的 input 也改成德语就行了
5. 传进 kindle 里看看效果吧

扩展

  • 对于书,上面所说的 input language 和 output language 都是 0
  • 也可以用 mobi2mobi 这个小工具来修改且只能修改 local 项(可能目前他的开发者没意识到词典的特殊性)
  • 按照stehk说的用 mobiPatch 可以修改 input 项,但我实际操作后,再用十六进制查看发现input, output 均未变。mobiPatch 的作者说他是通过20个左右的十六进制数 FF 来确定语言信息项的[via],不是通过字符“MOBI”,而且是 at three different offsets ,但用他的软件的确也成功了,可能他的软件修改的是另外一个地方,有谁知道确定答案了请告诉我
  • 用 calibre 编辑元数据在十六进制中查看三个语言信息均无变化,这也是我疑惑的地方

转载文章  来自:blog.yaodis.tk

ajax loader

相关文章:

  1. Send to kindle的圈子模式
  2. Kindle3 固件升级到 3.3的福利
  3. Kindle3入手折腾日记

你可能感兴趣的:(sharing,字典,kindle)