最近给一台旧笔记本电脑换上了arch系统,也是一直在折腾啊。
折腾的过程中,老是看到一些英文,有些词不认识,看的我很难受(毕竟我是一个求知若渴的人哈哈哈)。然后就想着有没有这么个工具,在任何地方,选取文字或截图,可以随意翻译。首先想到的是有道,但奈何我电脑性能有限,恐无法胜任。于是和ai一番交流之后,决定自己组一个,此篇旨在记录,留个纪念。
arch 系统,桌面:sway
相关工具
sudo pacman -S --needed wl-clipboard translate-shell libnotify swaync# 截图翻译额外需要的
sudo pacman -S --needed grim slurp tesseract tesseract-data-chi_sim tesseract-data-eng 选取翻译实现原理 :wl-paste -p | trans -b :zh
- 编写脚本
~/.local/bin/translate-selection:
#!/bin/sh
# 有代理就取消注释,改成你自己的
# export http_proxy="http://127.0.0.1:7890"
# export https_proxy="http://127.0.0.1:7890"
# export all_proxy="socks5://127.0.0.1:7891"
# 读选中:主选择 → 普通剪贴板
TEXT=$(wl-paste -p 2>/dev/null)
[ -z "$TEXT" ] && TEXT=$(wl-paste 2>/dev/null)
if [ -z "$TEXT" ]; then
notify-send -t 2500 "翻译" "未选中任何文字"
exit 0
fi
# 压成单行
TEXT=$(printf '%s' "$TEXT" | tr '\n' ' ' | sed 's/ */ /g')
# 第一条:翻译中(拿到通知 ID)
ID=$(notify-send -p -t 0 "翻译" "「${TEXT%% *}…」 翻译中…" 2>/dev/null)
[ -z "$ID" ] && ID=$(notify-send -p -t 0 "翻译" "翻译中…" 2>/dev/null)
# 翻中文
OUT=$(printf '%s' "$TEXT" | trans -e bing -b :zh 2>/dev/null)
if [ -z "$OUT" ] || [ "$OUT" = "$TEXT" ]; then
OUT=$(printf '%s' "$TEXT" | trans -e bing -b :en 2>/dev/null)
# 原地替换
notify-send -r "$ID" -t 5000 "译文 (→en)" "$OUT"
else
notify-send -r "$ID" -t 5000 "译文 (→zh)" "$OUT"
fi- 给权限
chmod +x ~/.local/bin/translate-selection
- 绑定快捷键
打开 ~/.config/sway/config,加一行:
bindsym $mod+t exec ~/.local/bin/translate-selection- 重载 sway
折腾经历
trans -b 默认用google翻译,然后按快捷键时sway调用的脚本默认不走代理,然后就没反应,由于终端开了代理,执行脚本又可以用,然后就折腾了好久 ,改为trans -e bing -b 就可以了,bing不用翻墙嘿嘿
然后弹窗 刚开始用的是 mako 但有点简陋了,就换成了 swaync 是好看了点 。
截图翻译懒得搞了,有需要的时候再搞吧呃呃呃!!!