Tag: popup-dict

Soft hyphen (0xAD) - 看不见的连字符

今天在阅读一篇英文文章 The Last JSON Spec 时,发现自己写的划词翻译工具 popup-dict 对很多词无效,比如 "ir­ra­tional"。

细查之下,发现 "ir­ra­tional" 虽然看起来只有 10 个字符,但 "ir­ra­tional".length 却返回 12。第三个字符的 char code 是 173(16进制表示就是 0xAD),这不是字母 "r"。整个字符串不匹配英文单词/合成词/句子的正则表达式,因此被 popup-dict 忽略。

搜索发现,0xAD 是 soft hyphen,中文大概翻译为软连字符。这个字符用于在排版时显式建议换行位置,一般不可见,但如果需要换行,就可以从这个字符处换行,并渲染为一个可见的连字符(渲染成什么样与语言有关,HTML 的 lang 属性)。主流浏览器基本都支持。

测试发现,soft hyphen 对中文无效。相关的 zero-width space<wbr> 也都对中文无效。所以也就对英文有点用了。

了解了 soft hyphen,那么划词翻译无效的问题也就好解决了,匹配前直接去掉就好了。

text = text.replace('\xad', '')
Read more >>

popup-dict - Linux 下的划词翻译工具

查看英文网页或阅读英文电子书时,划词翻译是个非常实用的功能。

之前一直在用 youdao-dict-for-ubuntu,这是个基于 Python 2 + Gtk+ 2 + webkit 编写的小工具,简单实用。但也有些不足:

  • Python 2 和 Gtk+ 2 都是过时的技术
  • Python 2, Gtk+ 2, webkit 三者的 binding 依赖太多,又不在 Arch 的官方源里
  • 功能有些小问题
    • 重复选择同一个单词不会触发翻译
    • 弹窗位置固定在鼠标下方,有时显示不完整
    • 一点击弹窗中的链接,弹窗就全白了,必须重启才能解决

所以一直想使用 Python 3 + Gtk+ 3 重写。之前尝试过在 youdao-dict-for-ubuntu 基础上改进,不过由于对 Python 和 Gtk+ 都不熟悉,没什么进展。最近 youdao-dict-for-ubuntu 的依赖出现过两次动态链接错误,已经无法使用了,我也不想再修,于是有了 popup-dict

popup-dict screenshot

popup-dict 有以下特点:

  • 使用 Python 3 + Gtk+ 3 开发,使用 Gtk+ 原生 UI
  • 系统依赖少,只依赖 Python 3 + Gtk+ 3 + PyGObject
  • 使用多线程技术,主线程不阻塞,响应快
  • 封装查询接口,便于切换不同翻译服务
  • 弹窗位置自适应,保证显示完整
  • 弹窗中显示链接,点击打开在线词典
  • 方便打开/禁用词典,避免不需要的时候打扰(通过 Gnome Shell Extension popup-dict-switcher 实现一键开/关)

目前还只支持有道智云的翻译服务,功能也还有些不足,会逐渐完善。

这个工具主要还是为满足我个人的使用环境、需求(Arch Linux + Gnome 3,主要用于浏览器和 PDF 阅读器),同时也作为一个练手、学习项目。有时间有精力的话会尽量做完善,没有的话就只满足个人需要了。

Read more >>