Java调用百度翻译API和调用有道翻译API进行翻译

目录

界面编写

调用百度API

调用有道API

源代码


界面编写

我们首先需要设计出这个翻译程序的GUI界面,我们写一个类继承自JFrame类,用来展示程序的主窗口,设置好窗口的名称和大小,设置在关闭窗口时终止程序,为了界面的美观,我们将布局设置为流式布局,居中对齐。

接下来准备使用四个panel作为容器让整个界面分为四行。

首先第一行显示中文原文的label和输入框,以及一个翻译按钮。

第二行显示百度翻译label和一行用于显示百度翻译后的译文的文本显示框。

类似的,第三行显示有道翻译label和文本显示框。

最后一行显示相同部分的label和文本显示框。

最后在主函数上,在Swing事件调度线程上执行窗口的显示,这里为了方便,使用了一个lambda匿名函数。

运行程序看看显示的效果,可见美观性还是具有的,因为其实我们是经过多次测试确定下来窗口的大小和组件的长度,使得整个页面看起来比较整齐。

调用百度API

接下来我们需要调用翻译API实现功能。

首先使用百度账号登录百度翻译开发平台,百度翻译开放平台 (baidu.com),注册成为开发者。

然后在百度翻译开放平台 (baidu.com)开通通用翻译API服务。

选择开通标准版就行。

稍微写一下申请表格。

然后在管理控制台就可以看到调用API所需要的APP ID和密钥。

根据官方文档通用翻译API接入文档的教程,我们需要拼接出请求参数加密,这里可以借助百度写好的DEMO,下载Java版本的demo。

解压后将包com放到我们的项目源码目录下。

然后在项目中导入这个包。

然后通过传入APP ID和密钥调用API将中文翻译成英文。

我们给点击按钮添加一个监听事件,当按钮被点击时执行这个lambda匿名函数,在函数中将百度翻译的文本显示在文本框上。

运行程序测试一下百度翻译,这个返回的结果貌似不是我们想要的理想结果。

通过查阅官方文档知道返回的结果是一个JSON对象。

Java中并没有内置JSON的解析,如果要处理JSON必须要借助第三方库,我们这里可以简单的使用正则表达式来提取翻译结果。

再次运行程序,这个可以输出我们想要的翻译结果了。

调用有道API

同理,需要调用有道翻译API,我们需要进行类似的流程操作。

在有道智云 (youdao.com)注册成为开发者。

然后创建应用。

创建完应用后就可以查看到应用ID和应用密钥了。

同样下载有道写好的Java版本demo下来。

我们把有道的软件包放到项目中,和百度的软件包放在一起。

然后把pom.xml也放到项目目录下,点击加载maven项目,将软件包里面的TranslateDemo.java拉出来放到项目源代码目录下,重命名为YouDaoAPI.java,我们将修改这个程序。

首先添加YouDaoAPI的构造函数,为应用ID和应用密钥赋值。

然后将创建请求参数的函数修改为通过传入参数设置请求参数。

最后把主函数修改为对外的翻译接口,通过传入的原文和原语言与目标翻译语言调用创建请求参数函数,返回请求相应。

然后通过传入APP ID和密钥调用API将中文翻译成英文。

同样的,我们通过正则表达式来提取翻译结果。

运行程序,可见翻译成功。

源代码

TranslationDemo.java

import javax.swing.*;
import java.awt.*;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import com.baidu.translate.demo.TransApi;public class TranslationDemo extends JFrame {private JLabel inputLabel, baiduLabel, youdaoLabel, commonLabel;private JTextField inputText, baiduTranslation, youdaoTranslation, commonTextArea;private JButton translateButton;public TranslationDemo() {setTitle("中译英 Demo");setSize(500, 200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLayout(new FlowLayout(1));inputLabel = new JLabel("中文原文:");inputText = new JTextField(33);translateButton = new JButton("翻译");JPanel panel1 = new JPanel();panel1.add(inputLabel);panel1.add(inputText);panel1.add(translateButton);add(panel1);baiduLabel = new JLabel("百度翻译:");baiduTranslation = new JTextField(40);baiduTranslation.setEditable(false);JPanel panel2 = new JPanel();panel2.add(baiduLabel);panel2.add(baiduTranslation);add(panel2);youdaoLabel = new JLabel("有道翻译:");youdaoTranslation = new JTextField(40);youdaoTranslation.setEditable(false);JPanel panel3 = new JPanel();panel3.add(youdaoLabel);panel3.add(youdaoTranslation);add(panel3);commonLabel = new JLabel("相同部分:");commonTextArea = new JTextField(40);commonTextArea.setEditable(false);JPanel panel4 = new JPanel();panel4.add(commonLabel);panel4.add(commonTextArea);add(panel4);translateButton.addActionListener(e -> {String inputText = this.inputText.getText();String outputBaidu, outputYouDao, same;try {outputBaidu = translateUsingBaidu(inputText);outputYouDao = translateUsingYoudao(inputText);} catch (UnsupportedEncodingException | NoSuchAlgorithmException ex) {throw new RuntimeException(ex);}Pattern pattern = Pattern.compile("\"dst\":\"(.*?)\"");Matcher matcher = pattern.matcher(outputBaidu);if (matcher.find())outputBaidu = matcher.group(1);baiduTranslation.setText(outputBaidu);pattern = Pattern.compile( "\"translation\":\\[\"(.*?)\"\\]");matcher = pattern.matcher(outputYouDao);if (matcher.find())outputYouDao = matcher.group(1);youdaoTranslation.setText(outputYouDao);commonTextArea.setText(findCommonPart(outputBaidu, outputYouDao));});}private String translateUsingBaidu(String text) throws UnsupportedEncodingException {    // 调用百度翻译API进行翻译TransApi api = new TransApi("", "");return api.getTransResult(text, "zh", "en");}private String translateUsingYoudao(String text) throws NoSuchAlgorithmException {    // 调用有道翻译API进行翻译YouDaoAPI api = new YouDaoAPI("", "");return api.getTransResult(text, "zh", "en");}private String findCommonPart(String text1, String text2) {    // 比较两个翻译结果,找出相同部分String[] baidu = text1.split("[ ,.]");String[] youdao = text2.split("[ ,.]");StringBuilder common = new StringBuilder();for (String a : baidu) {for (String b : youdao) {if (Objects.equals(a, b)) {common.append(a).append(" ");}}}return common.toString();}public static void main(String[] args) {SwingUtilities.invokeLater(() -> {TranslationDemo demo = new TranslationDemo();demo.setVisible(true);});}
}

YouDaoAPI.java

import com.youdao.aicloud.translate.utils.AuthV3Util;
import com.youdao.aicloud.translate.utils.HttpUtil;import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;/*** 网易有道智云翻译服务api调用demo* api接口: https://openapi.youdao.com/api*/
public class YouDaoAPI {private static String APP_KEY = "";     // 您的应用IDprivate static String APP_SECRET = "";  // 您的应用密钥public YouDaoAPI(String appid, String securityKey) {APP_KEY = appid;APP_SECRET = securityKey;}public String getTransResult(String query, String from, String to) throws NoSuchAlgorithmException {// 添加请求参数Map<String, String[]> params = createRequestParams(query, from, to);// 添加鉴权相关参数AuthV3Util.addAuthParams(APP_KEY, APP_SECRET, params);// 请求api服务byte[] result = HttpUtil.doPost("https://openapi.youdao.com/api", null, params, "application/json");return new String(result, StandardCharsets.UTF_8);}private static Map<String, String[]> createRequestParams(String query, String from, String to) {return new HashMap<String, String[]>() {{put("q", new String[]{query});put("from", new String[]{from});put("to", new String[]{to});}};}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/218101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高效数组处理的Numpy入门总结

NumPy是Python中一个重要的数学库&#xff0c;它提供了高效的数组操作和数学函数&#xff0c;是数据科学、机器学习、科学计算等领域的重要工具。下面是一个简单的NumPy学习教程&#xff0c;介绍了NumPy的基本用法和常用函数。 安装NumPy 在使用NumPy之前&#xff0c;需要先安…

删除Tencent files

QQ或者TIM卸载后,它还会残留在电脑上.要修改会说需要权限,修改权限又会重新变回去.这时候可以把整个文档放到其它盘,然后就可以删除Tencent files 方法是右键文档 选中属性–位置 然后就可以改掉了

【后端学前端】第三天 css动画 动态搜索框(定位、动态设置宽度)

1、学习信息 视频地址&#xff1a;css动画 动态搜索框&#xff08;定位、动态设置宽度&#xff09;_哔哩哔哩_bilibili 2、源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>test3</title>…

14:00面试,14:08就出来了,问的问题有点变态。。。。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

Flutter的BuildContext简介

文章目录 BuildContext 简介BuildContext的主要作用 BuildContext 简介 BuildContext是Flutter中的一个重要概念&#xff0c;表示当前Widget在树中的位置上下文。它是一个对Widget树的一个位置的引用&#xff0c;用于查找、访问和操作该位置上的相关信息。每个Widget都有一个关…

VMware Fusion Pro 中文 for mac:好用的虚拟机

VMware Fusion 不仅能让你在 Mac 苹果电脑上运行 Windows 或 Linux 系统、使用非 Mac 平台的软件&#xff0c;而且还可以支持各种 USB硬件设备&#xff0c;它无疑是 macOS 用户的最佳助手。VMWare Fusion 是在 Mac 下虚拟运行 Windows / Linux 的最佳方式 无比轻松地在 Mac 上…

Map、Set集合与Gson注解

一、Map的序列化与反序列化 1.Map集合类型对象在反序列化时与List一样&#xff0c;需要使用TypeToken完成反序列化。 2.Set在反序列化时需要使用TypeToken完成反序列化。 创建User类和job类 public class User {Exposeprivate String userName;Exposeprivate String passwo…

Netflix Mac(奈飞客户端)激活版软件介绍

Netflix Mac(奈飞客户端)是一款流行的视频播放软件&#xff0c;专为Mac用户设计。它提供了大量的高质量电影、电视剧、纪录片和动画片资源&#xff0c;让用户可以随时随地观看自己喜欢的内容。 首先&#xff0c;Netflix Mac(奈飞客户端)以其简洁直观的用户界面而闻名。用户可以…

2024测试开发面试题完整版本(附答案)

目录 1. 什么是软件测试&#xff0c; 谈谈你对软件测试的了解 2. 我看你简历上有写了解常见的开发模型和测试模型, 那你跟我讲一下敏捷模型 3. 我看你简历上还写了挺多开发技能的, 那你给我讲讲哈希表的实现流程 4. 谈一谈什么是线程安全问题, 如何解决 5. 既然你选择走测…

Java - Spring中BeanFactory和FactoryBean的区别

BeanFactory Spring IoC容器的顶级对象&#xff0c;BeanFactory被翻译为“Bean工厂”&#xff0c;在Spring的IoC容器中&#xff0c;“Bean工厂”负责创建Bean对象。 BeanFactory是工厂。 FactoryBean FactoryBean&#xff1a;它是一个Bean&#xff0c;是一个能够辅助Spring实例…

【项目管理】CMMI对项目管理有哪些个人启发和思考

导读&#xff1a;本人作为项目经理参与公司CMMI5级评审相关材料准备工作&#xff0c;现梳理CMMI有关知识点&#xff0c;并结合项目给出部分示例参考&#xff0c;以及本人对于在整理材料过程中一些启发和体验思考。 目录 1、CMMI定义 2、CMMI-5级 3、CMMI文档清单 4、示例-度…

Node.js黑马时钟案例

先上没有使用node.js之前的html部分代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title></title><style>* {margin: 0;padding: 0;}html,body {height: 100%;overflow: hidden;backgrou…

Zabbix+Grafana

背景 对指标采集 将采集的信息存储 可视化 报警 因为节点上本身就是zabbix&#xff0c;但对应的server在数据中心&#xff0c;不知道一个agent可否服务于多个server端&#xff0c;而且不确定数据中心是否会提供用户。所以还是放弃zabbix 架构

如何使用CFImagehost结合内网穿透搭建简洁易用的私人图床并远程访问

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

OBS如何安装NDI 插件

能检索到这个文章的人&#xff0c;想必是知道什么是OBS和NDI&#xff0c;也知道他们的用途的。所以&#xff0c;不作赘述。4 安装NDI插件 1 直接访问https://github.com/obs-ndi/obs-ndi&#xff0c;打不开的同志你们自己想办法。 2 有两个东西要下载&#xff0c;如下图所示&a…

Python中栈的概念和使用

目录 一、引言 二、栈的概念 三、栈的使用 1、创建栈 2、入栈操作 3、出栈操作 4、查看栈顶元素 5、判断栈是否为空 四、应用场景 1、函数调用 2、表达式求值 3、深度优先搜索 4、括号匹配 五、总结 一、引言 栈是一种重要的数据结构&#xff0c;它遵循后进先出…

Axure元件基本介绍进阶

Axure元件基本介绍进阶 1.Axure元件基本介绍1.在 Axure 中&#xff0c;元件是构建原型的基本构成单元&#xff0c;能够帮助设计师快速创建、重复使用和管理设计元素。以下是 Axure 中元件的基本介绍&#xff1a;1.基本元件&#xff1a; 2.基本元件的使用一.【举例说明】积木&am…

Qt提升绘制效率,绘制加速。

在我们绘制一些复杂逻辑且数据量巨大的图形时&#xff0c;经常会出现流畅性问题&#xff0c;本文就是来进行讲解如何提升绘制效率的。 实现思路&#xff1a; 场景1&#xff1a;我们绘制多个静态图形和绘制一张图片哪个更快。很明显绘制多个图形的时候要慢很多。所以我们将多个图…

【二分查找】【区间合并】LeetCode2589:完成所有任务的最少时间

作者推荐 【动态规划】【广度优先】LeetCode2258:逃离火灾 本文涉及的基础知识点 二分查找算法合集 有序向量的二分查找&#xff0c;向量只会在尾部增加删除。 题目 你有一台电脑&#xff0c;它可以 同时 运行无数个任务。给你一个二维整数数组 tasks &#xff0c;其中 ta…

圣诞节酷炫特效合集【含十几个HTML+CSS前端特效+34个桌面酷炫圣诞程序】

写在前面 ❤️源码获取:订阅后见文末 ❤️内容介绍:包含HTML+CSS等十几个圣诞特效;以及三十四个桌面酷炫圣诞树合集 ❤️订阅后所得如下: ❤️HTML圣诞+桌面圣诞程序效果如下: 下方展示代码仅举例其中几个 所有效果源码及文件订阅后找博主获取即可 🎄css3圣诞雪人动…