首页 > 其他分享 >基于百度API的文本翻译器实现

基于百度API的文本翻译器实现

时间:2023-12-26 19:33:25浏览次数:25  
标签:return gbc 翻译器 API mainPanel import new 文本 String

软件构造的小实验,现给出源码造福未来学弟

依赖

<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.9.1</version> <!-- 请替换为最新版本 -->
</dependency>
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20160810</version>
</dependency>
 <!-- https://mvnrepository.com/artifact/com.github.insubstantial/substance -->
<dependency>
     <groupId>com.github.insubstantial</groupId>
     <artifactId>substance</artifactId>
     <version>7.3</version>
</dependency>

翻译功能实现模块

package com.std.www.homework.work1;


import lombok.SneakyThrows;
import okhttp3.*;
import org.json.JSONObject;
import java.io.*;
public class Translation {
    public static final String API_KEY = "hXnhw16cHsb6REP9hKTLX5AU";//替换为你自己的key
    public static final String SECRET_KEY = "kFHPegvFTAlmoNuY2cYSHbSab6QZKmCa";//这个也一样

    static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();

    @SneakyThrows
    public static String getTranslation(String from,String to,String q){
        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType, "{\"from\":\""+from+"\",\"to\":\""+to+"\",\"q\":\""+q+"\"}");
        Request request = new Request.Builder()
                .url("https://aip.baidubce.com/rpc/2.0/mt/texttrans/v1?access_token=" + getAccessToken())
                .method("POST", body)
                .addHeader("Content-Type", "application/json")
                .addHeader("Accept", "application/json")
                .build();
        Response response = HTTP_CLIENT.newCall(request).execute();
        String res=response.body().string();
//        System.out.println(res);
        return res;
    }


    /**
     * 从用户的AK,SK生成鉴权签名(Access Token)
     *
     * @return 鉴权签名(Access Token)
     * @throws IOException IO异常
     */
    static String getAccessToken() throws IOException {
        MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
        RequestBody body = RequestBody.create(mediaType, "grant_type=client_credentials&client_id=" + API_KEY
                + "&client_secret=" + SECRET_KEY);
        Request request = new Request.Builder()
                .url("https://aip.baidubce.com/oauth/2.0/token")
                .method("POST", body)
                .addHeader("Content-Type", "application/x-www-form-urlencoded")
                .build();
        Response response = HTTP_CLIENT.newCall(request).execute();
        return new JSONObject(response.body().string()).getString("access_token");
    }
}

翻译的GUI界面

package com.std.www.homework.work1;

import org.json.JSONArray;
import org.json.JSONObject;
import org.pushingpixels.substance.api.skin.SubstanceGeminiLookAndFeel;

import javax.swing.*;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TranslationGUI {
    private static String getType(String s) {
        switch (s) {
            case "中文":
                return "zh";
            case "英语":
                return "en";
            case "法语":
                return "fra";
            case "日语":
                return "jp";
            case "德语":
                return "de";
            case "俄语":
                return "ru";
            case "西班牙语":
                return "spa";
            case "阿拉伯语":
                return "ara";
            default:
                return "en";
        }
    }

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("文本翻译器");
        frame.setSize(600, 380);
        frame.setLayout(new BorderLayout());
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        frame.setBackground(new Color(240, 240, 240));

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new GridBagLayout());
        mainPanel.setBackground(new Color(255, 255, 255));
        mainPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

        Font font = new Font("Noto", Font.BOLD, 20);

        JTextField formText = new JTextField();
        JTextField toText = new JTextField();
        String[] options = {"中文", "英语", "法语", "日语", "德语",  "俄语", "西班牙语", "阿拉伯语"};
        JComboBox<String> comboBox1 = new JComboBox<>(options);
        JComboBox<String> comboBox2 = new JComboBox<>(options);
        JLabel formLabel = new JLabel("原文");
        JLabel toLabel = new JLabel("译文");


        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(15, 15, 15, 15);
        gbc.fill = GridBagConstraints.BOTH;

        formText.setFont(font);
        formText.setBorder(new TitledBorder(new LineBorder(Color.BLUE), "输入文本"));
        comboBox1.setFont(font);
        formLabel.setFont(new Font("Noto", Font.BOLD, 25));
        toText.setFont(font);
        toText.setBorder(new TitledBorder(new LineBorder(Color.BLUE), "翻译结果"));
        comboBox2.setFont(font);
        toLabel.setFont(new Font("Noto", Font.BOLD, 25));

        JButton translateButton = new JButton("点击翻译");
        translateButton.setFont(font);
        translateButton.setBackground(Color.cyan);
        translateButton.setBorder(new LineBorder(Color.ORANGE));

        translateButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Object value1 = comboBox1.getSelectedItem();
                Object value2 = comboBox2.getSelectedItem();
                value1 = getType((String) value1);
                value2 = getType((String) value2);
                String q = formText.getText();
                String res = Translation.getTranslation((String) value1, (String) value2, q);
                JSONObject jsonObject = new JSONObject(res);
                JSONObject resultObject = jsonObject.getJSONObject("result");
                JSONArray transResultArray = resultObject.getJSONArray("trans_result");
                JSONObject firstElement = transResultArray.getJSONObject(0);
                String dstValue = firstElement.getString("dst");
                toText.setText(dstValue);
            }
        });

        gbc.gridx = 0;
        gbc.gridy = 0;
        mainPanel.add(formLabel, gbc);

        gbc.gridx = 1;
        gbc.gridy = 0;
        mainPanel.add(comboBox1, gbc);

        gbc.gridx = 2;
        gbc.gridy = 0;
        mainPanel.add(toLabel, gbc);

        gbc.gridx = 3;
        gbc.gridy = 0;
        mainPanel.add(comboBox2, gbc);

        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.gridwidth = 2;
        mainPanel.add(formText, gbc);

        gbc.gridx = 2;
        gbc.gridy = 2;
        gbc.gridwidth = 2;
        mainPanel.add(toText, gbc);

        gbc.gridx = 0;
        gbc.gridy = 4;
        gbc.gridwidth = 4;
        mainPanel.add(translateButton, gbc);


        frame.add(mainPanel, BorderLayout.CENTER);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            try {
                UIManager.setLookAndFeel(new SubstanceGeminiLookAndFeel());
                createAndShowGUI();
            } catch (UnsupportedLookAndFeelException e) {
                e.printStackTrace();
            }
        });
    }
}

运行截图

标签:return,gbc,翻译器,API,mainPanel,import,new,文本,String
From: https://www.cnblogs.com/liyiyang/p/17929155.html

相关文章

  • Spring Boot学习随笔- RestFul API(@RestController、@RequestBody、@PathVariable),使用
    学习视频:【编程不良人】2021年SpringBoot最新最全教程第十六章、RestFulAPI什么是RESTREST全称是ResourceRepresentationalStateTransfer,中文意思是表述性状态转移,它首次出现在2000年RoyFielding的博士论文中,RoyFielding是HTTP规范的主要编写者之一。他在论文中表......
  • API文档生成!超好用API调试工具
    在数字化时代,API已经成为了应用程序之间进行通信的关键桥梁。随着API的普及和复杂性的增加,API研发和管理也面临着越来越多的挑战。为了更好地应对这些挑战,Apipost提供了一整套API研发工具,包括API设计、API调试、API文档和API自动化测试等功能。本文将深入介绍Apipost的优势和特点,......
  • 从八字命运API接口获取您的未来走向
     随着科技的快速发展和人们对个人命运的关注,越来越多的人开始寻找各类方法来预测自己的未来走向。而其中,八字预测是一种古老而又传统的方法,通过计算生辰八字,从五行八字中揭示出个人的命运走势。在这个过程中,挖数据平台提供了一款免费算命的API接口,为用户提供了便捷的命运预测服......
  • 4、zabbix 调用API 发送邮件,告警周报统计
    #coding=utf-8importrequests,json,codecs,datetime,time,pandasfromemailimportencodersfromemail.headerimportHeaderfromemail.mime.textimportMIMETextfromemail.utilsimportparseaddrfromsmtplibimportSMTPimportsmtplibApiUrl='http://......
  • 测试开发 | 自然语言处理基础:从文本到智能
    自然语言处理(NaturalLanguageProcessing,简称NLP)是人工智能领域中一项关键技术,旨在让计算机理解、处理和生成人类语言。NLP使得计算机能够读懂、理解和产生文本数据,为机器与人之间的沟通搭建了桥梁。本文将介绍自然语言处理的基础知识,包括其定义、主要任务和关键技术。什么是自然......
  • 测试开发 | 命名实体识别(NER):解锁文本中的信息宝藏
    命名实体识别(NamedEntityRecognition,简称NER)是自然语言处理领域中一项关键任务,旨在从文本中识别出命名实体,并将其分类为预定义的类别,如人名、地名、组织名等。NER技术在信息提取、问答系统、机器翻译等多个领域都发挥着不可替代的作用。本文将深入介绍NER的定义、任务目标、方法......
  • 淘宝/天猫商品API:实时数据获取与安全隐私保护的指南
    一、引言随着电子商务的快速发展,淘宝/天猫等电商平台已成为商家和消费者的重要交易场所。对于电商企业而言,实时掌握店铺商品的销售情况、库存状态等信息至关重要。然而,手动管理和更新商品信息既费时又费力。因此,淘宝/天猫提供的商品API成为商家实时获取商品数据的关键工具。本文将......
  • 免费IDEA插件推荐-Apipost-Helper
    IDEA插件市场中的API调试插件不是收费(FastRequest)就是不好用(apidoc、apidocx等等)今天给大家介绍一款国产的API调试插件:Apipost-Helper,完全免费且好看好用!这款插件由Apipost团队开发的,其官方介绍是:用于IDEA项目快速生成API文档,快速查询接口、接口代码功能,并支持在IDEA中进行API调......
  • ArcGIS API for JavaScript 4.x 免登录调用arcgis online私有服务
    APIkeys|ArcGISDevelopers 前言 本来以为普通用户调用服务只能依靠登录,仔细研究了一下可以通过key来实现免登录调用服务。背景最近在做一个BIM结合GIS的Demo,先通过arcgispro将.rvt文件配准到实际位置,然后打包成slpk文件,拖拽到arcgisonline发布出来,最后在前端加载。 ......
  • 使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的
    在前面随笔《在Winform应用中增加通用的业务编码规则生成》,我介绍了基于Winform和WPF的一个通用的业务编码规则的管理功能,本篇随笔介绍基于后端WebAPI接口,实现快速的Vue3+ElementPlus前端界面的开发整合,同样是基于代码生成工具实现快速的前端代码的生成处理。1、通用的业务编码规......