返回首页

Arch桌面折腾——翻译

2 分钟阅读
505

最近给一台旧笔记本电脑换上了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

  1. 编写脚本 ~/.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

  1. 给权限 chmod +x ~/.local/bin/translate-selection

  1. 绑定快捷键

打开 ~/.config/sway/config,加一行:

bindsym $mod+t exec ~/.local/bin/translate-selection
  1. 重载 sway

折腾经历

trans -b 默认用google翻译,然后按快捷键时sway调用的脚本默认不走代理,然后就没反应,由于终端开了代理,执行脚本又可以用,然后就折腾了好久 ,改为trans -e bing -b 就可以了,bing不用翻墙嘿嘿

然后弹窗 刚开始用的是 mako 但有点简陋了,就换成了 swaync 是好看了点 。

截图翻译懒得搞了,有需要的时候再搞吧呃呃呃!!!