iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Linux平台如何实现划词翻译工具
  • 953
分享到

Linux平台如何实现划词翻译工具

2023-06-15 18:06:46 953人浏览 泡泡鱼
摘要

这篇文章将为大家详细讲解有关linux平台如何实现划词翻译工具,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。所实现的划词翻译工具主要有以下特性:支持英文单词和短语到中文的翻译划词翻译,终端显示自动过滤选中

这篇文章将为大家详细讲解有关linux平台如何实现划词翻译工具,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

所实现的划词翻译工具主要有以下特性:

  • 支持英文单词和短语到中文的翻译

  • 划词翻译,终端显示

  • 自动过滤选中文本中的换行等特殊字符

  • 只依赖少数几个 Linux 命令工具

下面有动图进行演示。

Linux平台如何实现划词翻译工具

本人所使用的环境是运行在 VMware 虚拟机下的 Linux 发行版 ubuntu 18.04.3 LTS,因此这里介绍的步骤可能与其他 Linux  发行版中的实现略有不同。下面就来一步一步的实现它吧。

一. 安装必要的命令

1.xclip

$ sudo apt install xclip

xclip 命令建立了终端和剪切板之间通道,可以用命令的方式将终端输出或文件的内容保存到剪切板中,也可以将剪切板的内容输出到终端或文件。详细的用法可以使用  man xclip,见其手册。这里介绍几个常用的用法。

$ xclip file_name # 文件内容保存到X window剪切板 $ xclip -selection c file_name #文件内容保存到外部剪切板 $ xclip -o # X window剪切板内容输出到终端显示 $ xclip -selection c -o # 外部剪切板内容输出到终端显示

值得强调的是,这里所说的 X window 剪切板,简单的说就是你用鼠标选择的文本会实时的存放在这个剪切板,使用鼠标中键可以粘贴。而外部剪切板是保存你用  ctrl+c 复制的文本,ctrl+v 可以粘贴。这两个地方是不一样的。

2.translate-shell

$ sudo apt install translate-shell

这是命令行版的谷歌翻译工具,之前叫做 Google Translate CLI  是一款借助谷歌翻译(默认)、必应翻译等来翻译的命令行翻译器。它让你可以在终端访问这些翻译引擎。translate-shell 在大多数 Linux  发行版中都能使用。常用的方法如下:

$ trans en:zh [Word] # 英文到中文的单词翻译 $ trans en:zh -b [text] # 简要的输出,进行文本翻译

需要注意的是,使用这个翻译工具需要你能够访问外网,或者通过修改 translate-shell 的默认翻译引擎,具体的方法这里就不阐述了。

二. 编程实现

这个工具整体的思路就是 C 程序实时检测鼠标按键的动态,当检测到用户使用鼠标选择一段文本之后,调用 shell 脚本获取 X window  剪切板的内容进行翻译后输出到终端显示。

1. 定位鼠标设备文件

鼠标作为输入设备。其信息可以在文件 /proc/bus/input/devices 中,使用下列命令查看:

$ sudo cat /proc/bus/input/devices I: Bus=0011 Vendor=0002 Product=0013 Version=0006 N: Name="VirtualPS/2 VMware VMMouse" P: Phys=isa0060/serio1/input1 S: Sysfs=/devices/platfORM/i8042/serio1/input/input4 U: Uniq= H: Handlers=mouse0 event2  B: PROP=0 B: EV=b B: KEY=70000 0 0 0 0 B: ABS=3

其中的 Handlers 的值 event2 表示可以在 /dev/input/event2  文件下读取鼠标的状态。需要注意的是,对于不同的设备,读取鼠标的状态的文件可能不一样,比如也可能是 /dev/input/event3  。我们可以使用下面的命令找到你的鼠标对应的是哪一个 event。

$ sudo cat /dev/input/event2 | hexdump # 测试时改变数字即可

比如,当我运行上面这条命令之后,我移动鼠标、按鼠标左键/中键/右键,终端都会输出一些值,这就说明 event2  文件就是对应着我的鼠标。如果操作鼠标没有反应,说明这个就不是。你可以通过这种方法找到你的鼠标对应的 event 文件。

2. Linux 下获取按键响应

在 Linux 内核中,input 设备用 input_dev 结构体描述,使用 input  子系统实现输入设备驱动的时候,驱动的核心工作就是向系统报告按键、触摸屏、键盘、鼠标等输入事件(event,通过 input_event  结构体描述),不再需要关心文件操作接口,因为 input 子系统已经完成了文件操作接口 Linux/input.h 这个文件定义了 event  事件的结构体,api 和标准按键的编码等。

// 结构体定义见 input.h struct input_event {     struct timeval time; // 按键时间     __u16 type;          // 事件类型     __u16 code;          // 要模拟成什么按键     __s32 value;         // 是按下还是释放 };  // 下面宏定义见 input-event-coses.h // type #define EV_KEY 0x01 #define EV_REL 0x02 #define EV_ABS 0x03 // ...  // code #define BTN_LEFT 0x110 #define BTN_RIGHT 0x111 #define BTN_MIDDLE 0x112 // ...  // value #define MSC_SERIAL 0x00 #define MSC_PULSELED 0x01 // ...

这里稍微介绍一下  type,指事件类型,常见的事件类型有:EV_KEY,按键事件,如键盘的按键(按下哪个键),鼠标的左键右键(是否击下)等;EV_REL,相对坐标,主要是指鼠标的移动事件(相对位移);EV_ABS,  绝对坐标,主要指触摸屏的移动事件 。

3. 编写 C 程序

下面就可以编写程序来检测鼠标的动态了。首先在你的用户~目录下建立文件夹 Translator。在 Translator 里建立一个 ct.c  源文件,代码如下:

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <linux/input.h> #include <fcntl.h>  int main(void) {     int keys_fd;     struct input_event t;      // 注意这里打开的文件根据你自己的设备情况作相应的改变     keys_fd = open("/dev/input/event2", O_RDONLY);     if (keys_fd <= 0)     {         printf("open /dev/input/event2 error!\n");         return -1;     }      while (1)     {         read(keys_fd, &t, sizeof(t));         if (t.type == EV_KEY)              // 有键按下             if (t.code == BTN_LEFT)        // 鼠标左键                 if (t.value == MSC_SERIAL) // 松开                     // 调用外部shell脚本                     system("~/Translator/goTranslate.sh");     }     close(keys_fd);     return 0; }

然后就是调用 GCc 编译器生成可执行文件 ct :

$ gcc ct.c -o ct

4. 编写 shell 脚本翻译剪切板内容

在 Translator 里建立 goTranslate.sh 文件,内容如下:

#!/bin/bash  str_old=$(cat ~/Translator/lastContent) str_new=$(xclip -o 2>/dev/null | xargs) if [[ "$str_new" != "$str_old" && $str_new ]]; then     echo -e "\n"     count=$(echo "$str_new" | wc -w)     if [ "$count" == "1" ]; then         echo -n -e "$str_new " >>~/Translator/words         echo "$str_new" | trans :zh-CN | tail -1 | cut -c 5- | sed "s,\x1b\[[0-9;]*[a-zA-Z],,g" | tee -a ~/Translator/words     else         echo "$str_new" | trans :zh-CN -b     fi     echo "$str_new" >~/Translator/lastContent fi

原理非常简单,读者自行了解。这里我们还要在 Translator 里建立一个 lastContent.txt  文件作为缓存,目的是本次调用脚本时能够获取上一次调用时翻译的文本内容,如果和本次调用的翻译文本一样,则本次就不进行翻译。

设置 ct 别名

这里已经可以通过下面的命令运行程序了:

$ sudo ~/Translator/ct

但是由于每次运行都要输出这么长的命令,因此我们在 ~/.bashrc 文件中加入下面一条命令。

alias ct='sudo ~/Translator/ct'

这样,以后每次看英文文献时就可以在命令行下输入:

$ ct

关于“Linux平台如何实现划词翻译工具”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: Linux平台如何实现划词翻译工具

本文链接: https://www.lsjlt.com/news/281312.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux平台如何实现划词翻译工具
    这篇文章将为大家详细讲解有关Linux平台如何实现划词翻译工具,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。所实现的划词翻译工具主要有以下特性:支持英文单词和短语到中文的翻译划词翻译,终端显示自动过滤选中...
    99+
    2023-06-15
  • C#如何实现文件筛选读取并翻译的自动化工具
    这篇文章主要介绍了C#如何实现文件筛选读取并翻译的自动化工具的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#如何实现文件筛选读取并翻译的自动化工具文章都会有所收获,下面我们一起来看看吧。思路首选读取项目文件夹...
    99+
    2023-07-05
  • 基于Python如何实现抢注大词的提词工具
    本篇内容主要讲解“基于Python如何实现抢注大词的提词工具”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Python如何实现抢注大词的提词工具”吧!假设通过爬虫获得了一个自媒体.txt想要...
    99+
    2023-07-05
  • 如何实现java公众平台通用接口工具类HttpConnectUtil
    这篇文章给大家分享的是有关如何实现java公众平台通用接口工具类HttpConnectUtil的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实例如下:package com.common.util;im...
    99+
    2023-05-30
  • 如何使用python实现一款属于自己的翻译词典软件
    这篇文章主要介绍如何使用python实现一款属于自己的翻译词典软件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、设计理念先写一个登录的py文件,用python的tkinter库2.再写一个py文件用于爬取有道翻译...
    99+
    2023-06-15
  • Linux系统下如何安装跨平台团队开发工具Vagrant
    本篇内容介绍了“Linux系统下如何安装跨平台团队开发工具Vagrant”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Vagrant 是一个...
    99+
    2023-06-12
  • 如何利用Linux平台实现Java异步编程?
    在当前的互联网时代,高并发是一个常见的问题,而异步编程则是解决高并发的有效方式之一。Java作为一门成熟的编程语言,也提供了异步编程的解决方案,本文将介绍如何利用Linux平台实现Java异步编程。 什么是异步编程? 在传统的同步编程中,程...
    99+
    2023-10-15
    分布式 linux 异步编程
  • 如何在Linux平台上实现ASP开发技术?
    在Linux平台上实现ASP开发技术一直是一个备受关注的问题,因为Linux平台上的ASP开发需要用到特定的工具和框架。在本文中,我们将详细介绍如何在Linux平台上实现ASP开发技术,并且提供一些演示代码来帮助您更好地理解。 一、什么是A...
    99+
    2023-11-05
    linux 开发技术 接口
  • Linux测试工具netstat如何配置及实现
    这篇文章主要介绍Linux测试工具netstat如何配置及实现,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络...
    99+
    2023-06-16
  • Linux平台下如何实现RMAN 全备和增量备份shell脚本
    这篇文章主要介绍了Linux平台下如何实现RMAN 全备和增量备份shell脚本,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。全备脚本以&n...
    99+
    2022-10-19
  • 如何在Windows和Linux平台下利用GO语言实现高效的API通信?
    随着互联网和移动互联网的发展,API通信已经成为了现代化应用程序必不可少的一部分。而GO语言作为一门高效的编程语言,已经受到了越来越多的开发者的青睐。那么,如何在Windows和Linux平台下利用GO语言实现高效的API通信呢?本文将为...
    99+
    2023-10-26
    linux windows api
  • 在Linux中如何通过expect工具实现脚本的自动交互
    这篇文章给大家介绍在Linux中如何通过expect工具实现脚本的自动交互,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。expect是一个自动化交互套件,是建立在tcl基础上的,能过通过脚本设置自动进行交互通信。1 安...
    99+
    2023-06-28
  • PHP打包技术在Linux平台上的应用,如何实现高效大数据处理?
    PHP是一种广泛应用于网络应用开发的脚本语言,而在大数据处理方面,PHP打包技术则是非常重要的一环。本文将介绍PHP打包技术在Linux平台上的应用,以及如何实现高效大数据处理。 一、什么是PHP打包技术? PHP打包技术是指将多个PHP...
    99+
    2023-11-13
    打包 大数据 linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作