Giter VIP home page Giter VIP logo

popup-dict's Introduction

popup-dict

Linux 下的划词翻译工具,支持使用有道等多种翻译服务。

使用 Python 3 + Gtk+ 3 编写,适用于 Gnome 桌面环境。

screenshots

功能特点:

  • 目前只支持英文->中文翻译,支持单词和短语
  • 主要针对 Gnome 桌面环境,不保证其它环境下的正常使用
  • 鼠标划词翻译,弹窗显示
  • 智能处理选中内容(去除两端非英文字符、压缩空白字符、删除换行符等)
  • 弹窗显示一段时间后自动关闭。若鼠标在弹窗中,延迟关闭
  • 点击弹窗中链接可打开有道词典网页版

本工具主要受 @idningyoudao-dict-for-ubuntu 启发。

依赖

安装

确保已安装 PyGObject

PyPI:

sudo pip install popupdict

运行

popup-dict

# 查看帮助
popup-dict -h

可使用 Gnome Shell Extension popup-dict-switcher 一键打开/关闭 popup-dict

配置

应用默认加载以下位置中第一个存在的配置文件:

  • ~/.config/popup-dict/config.ini
  • /etc/popup-dict/config.ini

也可通过命令参数指定配置文件位置。

注意:有道智云 API 是付费的,请自行注册账号、创建应用并配置 app_id, app_secret。参考官方文档

默认配置:

[global]
# 弹窗显示时间。单位:秒;类型:float
popup_timeout = 3
# 是否使用 Gtk Global Dark Theme。不设置或设为空则使用系统默认设置。类型: boolean
prefer_dark_theme =
# 调试模式
debug = false
# 缓存翻译结果和音频文件
cache = true
# 最大缓存条目数,仅针对单个查询客户端或发音下载器
max_cache_items = 1000

# 查询客户端配置
[query]
# 查询客户端 id
client = youdao-zhiyun

# 发音配置
[speech]
# 启用发音
enabled = true
# 自动播放
auto_play = true
# 发音客户端 id
client = youdao

# 各查询客户端的默认配置,可在各客户端的配置中覆盖
[query-client]
# 请求超时时间。单位:秒;类型:float
request_timeout = 3

# 各发音下载器的默认配置
[speech-client]
request_timeout = 5


##### 各查询客户端配置 ######

# 有道词典网页版
[query:youdao-web]

# 有道智云
# http://ai.youdao.com/doc.s#guide
[query:youdao-zhiyun]
app_id =
app_secret =


##### 各发音客户端配置 ######
[speech:youdao]

Todo

  • 实现有道词典网页版查询客户端
  • 根据选中文本位置而非鼠标位置定位弹窗(应对不用鼠标选中文本的情况;避免遮盖选中文本)
  • 支持 Wayland
  • 支持多显示器
  • 展示某些错误提示(比如 API 授权错误)
  • test
  • 进程退出时删除 pid 文件
  • 打包到 AUR
  • 版本更新提示
  • 实现 status, start, stop, restart 命令
  • 解决偶现的弹窗中列表显示异常
  • 选中内容在连字符("-")处换行时,区分是一个单词被断开还是本来就包含连字符的合成词
  • 生词本

类似工具

GUI:

Console:

License

This project is licensed under the terms of the MIT license.

popup-dict's People

Contributors

bianjp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

popup-dict's Issues

启动失败

Traceback (most recent call last):
File "/usr/bin/popup-dict", line 7, in
from popupdict.main import main
File "/usr/lib/python3.6/site-packages/popupdict/main.py", line 8, in
from .gtk import *
File "/usr/lib/python3.6/site-packages/popupdict/gtk/init.py", line 7, in
Gst.init()
TypeError: init() missing 1 required positional argument: 'argv'

SyntaxError: invalid syntax

使用pip3安装依赖及软件后运行报错:
File "/home/user/.local/lib/python3.5/site-packages/popupdict/query/client/init.py", line 8
valid_clients: List[Type[AbstractQueryClient]] = [
^
SyntaxError: invalid syntax
将默认python版本设为2.7后依然无效.请问是什么问题?

ubuntu18.04中查询失败

popup-dict
[2019-02-21 16:25:24.686] [ERROR] [youdao-zhiyun] Query failed for query='done': errorCode=401
[2019-02-21 16:25:30.022] [ERROR] [youdao-zhiyun] Query failed for query='GStreamer': errorCode=401
[2019-02-21 16:25:33.947] [ERROR] [youdao-zhiyun] Query failed for query='popupdict': errorCode=401
[2019-02-21 16:25:38.567] [ERROR] [youdao-zhiyun] Query failed for query='comprehensive': errorCode=401
[2019-02-21 16:25:41.972] [ERROR] [youdao-zhiyun] Query failed for query='comprehensive': errorCode=401
[2019-02-21 16:25:42.885] [ERROR] [youdao-zhiyun] Query failed for query='comprehensive': errorCode=401
[2019-02-21 16:26:00.344] [ERROR] [youdao-zhiyun] Query failed for query='and': errorCode=401
[2019-02-21 16:26:23.424] [ERROR] [youdao-zhiyun] Query failed for query='support': errorCode=401

划词时的问题

首先感谢作者开发出这么好用的工具!

但是我发现,当我划一个较长的短语或者句子时,程序经常出现只能选到前面的几个单词或者字母

无法翻译(SSL证书验证失败)

系统:Ubuntu 18.04 64位
现象:
前段时间一直能正常使用,最近出现问题。
使用popup-dict-switcher启动成功,选中文字后无反应。
使用命令行popup-dict启动成功,任意选中一段文字,命令行输出:

[2018-09-18 08:18:22.791] [ERROR] [youdao-zhiyun] Request failed for query='stall'
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 601, in urlopen
chunked=chunked)
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 346, in _make_request
self._validate_conn(conn)
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 852, in validate_conn
conn.connect()
File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 326, in connect
ssl_context=context)
File "/usr/lib/python3/dist-packages/urllib3/util/ssl
.py", line 329, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "/usr/lib/python3.6/ssl.py", line 407, in wrap_socket
_context=self, _session=session)
File "/usr/lib/python3.6/ssl.py", line 814, in init
self.do_handshake()
File "/usr/lib/python3.6/ssl.py", line 1068, in do_handshake
self._sslobj.do_handshake()
File "/usr/lib/python3.6/ssl.py", line 689, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/requests/adapters.py", line 440, in send
timeout=timeout
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 639, in urlopen
_stacktrace=sys.exc_info()[2])
File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 388, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='openapi.youdao.com', port=443): Max retries exceeded with url: /api?q=stall&from=EN&to=zh-CHS&appKey=43f66ef2247d5446&salt=5023&sign=c1c4b5978d0438a83f28743ece64e959 (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)'),))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/popupdict/query/client/youdao_zhiyun.py", line 27, in query
res = requests.get(self.API, params=self._params(text), timeout=self.config.request_timeout)
File "/usr/lib/python3/dist-packages/requests/api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python3/dist-packages/requests/api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 508, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 618, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python3/dist-packages/requests/adapters.py", line 506, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='openapi.youdao.com', port=443): Max retries exceeded with url: /api?q=stall&from=EN&to=zh-CHS&appKey=43f66ef2247d5446&salt=5023&sign=c1c4b5978d0438a83f28743ece64e959 (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)'),))
[2018-09-18 08:18:22.934] [ERROR] [youdao-zhiyun] Request failed for query='nstall'
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 601, in urlopen
chunked=chunked)
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 346, in _make_request
self._validate_conn(conn)
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 852, in validate_conn
conn.connect()
File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 326, in connect
ssl_context=context)
File "/usr/lib/python3/dist-packages/urllib3/util/ssl
.py", line 329, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "/usr/lib/python3.6/ssl.py", line 407, in wrap_socket
_context=self, _session=session)
File "/usr/lib/python3.6/ssl.py", line 814, in init
self.do_handshake()
File "/usr/lib/python3.6/ssl.py", line 1068, in do_handshake
self._sslobj.do_handshake()
File "/usr/lib/python3.6/ssl.py", line 689, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/requests/adapters.py", line 440, in send
timeout=timeout
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 639, in urlopen
_stacktrace=sys.exc_info()[2])
File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 388, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='openapi.youdao.com', port=443): Max retries exceeded with url: /api?q=nstall&from=EN&to=zh-CHS&appKey=43f66ef2247d5446&salt=8599&sign=75e2df61a2f77d7226283c6304b54ef3 (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)'),))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/popupdict/query/client/youdao_zhiyun.py", line 27, in query
res = requests.get(self.API, params=self._params(text), timeout=self.config.request_timeout)
File "/usr/lib/python3/dist-packages/requests/api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python3/dist-packages/requests/api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 508, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 618, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python3/dist-packages/requests/adapters.py", line 506, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='openapi.youdao.com', port=443): Max retries exceeded with url: /api?q=nstall&from=EN&to=zh-CHS&appKey=43f66ef2247d5446&salt=8599&sign=75e2df61a2f77d7226283c6304b54ef3 (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)'),))
[2018-09-18 08:18:23.092] [ERROR] [youdao-zhiyun] Request failed for query='install'
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 601, in urlopen
chunked=chunked)
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 346, in _make_request
self._validate_conn(conn)
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 852, in validate_conn
conn.connect()
File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 326, in connect
ssl_context=context)
File "/usr/lib/python3/dist-packages/urllib3/util/ssl
.py", line 329, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "/usr/lib/python3.6/ssl.py", line 407, in wrap_socket
_context=self, _session=session)
File "/usr/lib/python3.6/ssl.py", line 814, in init
self.do_handshake()
File "/usr/lib/python3.6/ssl.py", line 1068, in do_handshake
self._sslobj.do_handshake()
File "/usr/lib/python3.6/ssl.py", line 689, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/requests/adapters.py", line 440, in send
timeout=timeout
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 639, in urlopen
_stacktrace=sys.exc_info()[2])
File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 388, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='openapi.youdao.com', port=443): Max retries exceeded with url: /api?q=install&from=EN&to=zh-CHS&appKey=43f66ef2247d5446&salt=2470&sign=d9f75ded4fd29c9e18a56a3f6ed33b3f (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)'),))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/popupdict/query/client/youdao_zhiyun.py", line 27, in query
res = requests.get(self.API, params=self._params(text), timeout=self.config.request_timeout)
File "/usr/lib/python3/dist-packages/requests/api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python3/dist-packages/requests/api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 508, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 618, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python3/dist-packages/requests/adapters.py", line 506, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='openapi.youdao.com', port=443): Max retries exceeded with url: /api?q=install&from=EN&to=zh-CHS&appKey=43f66ef2247d5446&salt=2470&sign=d9f75ded4fd29c9e18a56a3f6ed33b3f (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)'),))

发音配置&popup_timeout似乎有Bug

发音配置
[speech]
启用发音
enabled = true
自动播放
auto_play = false
如上配置时,能正确查词,但仍然会自动播放

发音配置
[speech]
启用发音
enabled = false
自动播放
auto_play = false
这样配置时,大概查完一次词就会出错(命令行输出如下),不能继续查词,似乎没缓存的单词不会自动播放,有缓存的则会自动播放

Exception in thread Thread-1: Traceback (most recent call last): File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner self.run() File "/usr/lib/python3.6/site-packages/popupdict/daemon/query.py", line 87, in run self.speech_adapter.remove_old_cache() AttributeError: 'NoneType' object has no attribute 'remove_old_cache'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.