【云原生】Docker搭建开源翻译组件Deepl使用详解

目录

一、前言

二、微服务项目使用翻译组件的场景

2.1 多语言用户界面

2.2 业务逻辑中的翻译需求

2.3 满足实时通信的要求

2.4 内容管理系统

2.5 个性化推荐系统

2.6 日志和监控

三、开源类翻译组件解决方案

3.1 国内翻译组件方案汇总

3.1.1 百度翻译

3.1.2 腾讯翻译​​​​​​​

3.1.3 阿里翻译(通用版)

3.1.4 华为翻译

3.1.5 小牛翻译

3.1.6 有道翻译

3.1.7 火山翻译

3.1.8 讯飞翻译

3.2 国外翻译组件方案汇总

3.2.1 谷歌翻译

3.2.2 DeepL翻译

3.2.3 微软翻译

3.2.4 亚马逊翻译

3.3 基于大模型或机器翻译框架

四、微服务项目中集成翻译组件

4.1 前置准备

4.2 对接小牛翻译

4.2.1 登录控制台

4.2.2 开通API翻译服务

4.2.3 代码集成与调用

4.3 补充说明

五、本地化部署翻译工具

5.1 DeeplX-Local 部署

5.1.1 项目说明

5.1.2 获取360 apikey

5.1.3 docker部署过程

5.1.4 效果测试

5.2 DeepLX Serverless 部署与使用

5.2.1 docker部署过程

5.2.2 效果测试

5.2.3 在Java代码中集成与使用

六、写在文末


一、前言

在微服务项目开发中,不少涉及需要进行中英互译,或不同语言进行翻译的场景,以满足实际业务的需求。随着国际化的潮流,很多互联网项目都在致力于打造并兼容多语言从而满足国际化的需求,从而增加了对翻译类技术的深度使用,本篇将介绍一些常用的解决方案,比如国内外开源组件,以及基于Docker本地化部署开源翻译组件。

二、微服务项目使用翻译组件的场景

在微服务架构的项目中,翻译类技术组件可以被用来解决多种语言环境下的需求,下面列举了一些通用的场景。

2.1 多语言用户界面

即操作界面需要支持国际化,具体来说:

  • 场景描述: 微服务应用需要支持多语言界面,为不同地区的用户提供本地化的体验。

  • 解决方案: 在前端微服务中集成翻译组件,根据用户的语言偏好动态加载翻译后的文本。

  • 实现方式: 前端微服务可以调用翻译服务的 API,获取当前语言环境下的 UI 文本。

2.2 业务逻辑中的翻译需求

程序代码中的特定场景下处理逻辑的需要,具体来说:

  • 场景描述: 在处理业务逻辑时,可能需要将某种语言的数据转换为另一种语言的数据。

  • 解决方案: 在处理业务逻辑的微服务中调用翻译服务,对数据进行翻译。

  • 实现方式: 业务逻辑微服务可以通过调用翻译服务的 REST API 来完成翻译操作。

2.3 满足实时通信的要求

一些实时通信的项目对此有最直接的需求:

  • 场景描述: 在提供实时通信功能(如聊天室、在线会议等)时,参与者可能来自不同国家和地区。

  • 解决方案: 在实时通信微服务中集成翻译组件,提供实时翻译功能。

  • 实现方式: 实时通信微服务可以监听消息队列中的消息,并调用翻译服务进行翻译后再转发给其他参与者。

2.4 内容管理系统

系统对各类内容发布的窗口需要支持多语言:

  • 场景描述: 内容管理系统需要支持多语言内容的创建、编辑和发布。

  • 解决方案: 在内容管理微服务中集成翻译组件,支持内容的多语言版本管理。

  • 实现方式: 内容管理微服务可以提供一个接口,允许用户提交内容翻译请求,并将翻译后的结果保存到数据库中。

2.5 个性化推荐系统

一些偏向推荐类的项目需要支持多语言的场景:

  • 场景描述: 个性化推荐系统需要根据用户的语言偏好推荐合适的内容。

  • 解决方案: 在推荐系统的微服务中集成翻译组件,对推荐内容进行翻译。

  • 实现方式: 推荐系统微服务可以根据用户的语言设置,调用翻译服务对推荐内容进行翻译。

2.6 日志和监控

对于操作日志展示类的系统,需要能切换不同的操作语言:

  • 场景描述: 在日志记录和监控系统中,可能需要记录用户的操作日志,包括他们使用的语言。

  • 解决方案: 在日志和监控系统的微服务中集成翻译组件,支持日志的多语言记录。

  • 实现方式: 日志记录微服务可以在记录用户操作日志时,调用翻译服务将日志内容翻译成适当的语言。

三、开源类翻译组件解决方案

经过多年的发展,市面上也涌现出了很多优秀的开源翻译组件可以在系统中直接集成使用,下面汇总了一些国内外的开源类翻译组件解决方案。

3.1 国内翻译组件方案汇总

3.1.1 百度翻译

百度翻译API接口免费翻译额度:

  • 标准版(5万字符免费/每月)、高级版(100万字符免费/每月-需个人认证,基本都能通过)、尊享版(200万字符免费/每月-需企业认证,门槛高);

  • 超出免费额度价格:49元/百万字符;

  • 官方介绍:百度翻译开放平台

3.1.2 腾讯翻译

翻译API是一种提供自动翻译功能的云计算服务,具体来说:

  • API接口免费翻译额度:500万字符免费/每月;

  • 超出免费额度价格:58元/百万字符,有字符资源包出售;

  • 官方介绍:机器翻译 计费概述-购买指南-文档中心-腾讯云

3.1.3 阿里翻译(通用版)

依托阿里巴巴自然语言处理技术和海量数据优势,致力于解决全场景语言障碍,多领域适用,可快速实现一种语言到另一种语言的自动翻译,覆盖全球214种语言。具体来说:

  • 阿里云翻译API接口免费翻译额度:100万字符免费/每月;

  • 超出免费额度价格:50元/百万字符,有字符资源包出售;

  • 官方介绍:机器翻译的付费模式及具体定价_机器翻译-阿里云帮助中心

3.1.4 华为翻译

机器翻译(Machine Translation)致力于为企业和个人提供不同语种间快速翻译能力,通过API调用即可实现源语言文本到目标语言文本的自动翻译,具体来说:

  • 华为翻译API接口免费翻译额度: 100万字符免费/每月;

  • 超出免费额度价格:50元/100万字符;

  • 官方介绍:机器翻译语言翻译翻译中心即时通讯视频字幕翻译解决方案-华为云

3.1.5 小牛翻译

通过HTTP协议提供400+语言的互译服务,将一段源语言文本转换成目标语言文本,可根据语言参数的不同实现多国语言之间的互译。具体来说:

  • 小牛翻译API接口免费翻译额度: 20万字符免费/每日(相当于于600万免费每月),新用户还可以领一次100万字符免费福利;

  • 超出免费额度价格:只按字符资源包出售(例如1000万字符包-1年-500元,5000万字符包-1年-2000元...);

  • 官方介绍:小牛翻译开放平台 - 机器翻译找小牛-纯文本翻译、小牛翻译开放平台 - XML翻译

3.1.6 有道翻译

网易有道旗下一站式人工智能服务提供商,为政府、企业和开发者提供稳定可靠的基础AI能力,具体来说:

  • 有道翻译API接口免费翻译额度:无,新用户一次性赠50元免费体验资金;

  • 超出免费额度价格:48元/百万字符,有字符资源包出售;

  • 官方介绍:有道翻译产品文档-自然语言翻译服务

3.1.7 火山翻译

火山翻译的机器翻译服务提供快速、稳定、安全的多语言翻译能力,支持包括文本、图像、音视频文件、实时语音流等场景的翻译,开发人员可以轻松地集成使用。凭借多年数据积累和技术创新,火山翻译的API服务于新闻、视频、游戏、直播、小说、办公、社交等领域,具备独特的优势。具体来说:

  • 火山翻译API接口免费翻译额度:200万字符免费/每月;

  • 超出免费额度价格:49元/百万字符;

  • 官方介绍:产品计费--机器翻译-火山引擎

3.1.8 讯飞翻译

基于讯飞自主研发的机器翻译引擎,支持多达70+个语言与中文互译。适用于翻译机、同声传译等场景,可提供公有云接口及私有化部署方案。具体来说:

  • 讯飞翻译API接口免费翻译额度:讯飞翻译普通版 - 200万字符免费包(1年内,该免费包仅能领一次),讯飞翻译niutrans版 - 200万字符免费包(90天内,该免费包仅能领一次);

  • 超出免费额度价格:只按字符资源包出售(例如100万字符包-1年-48元,2000万字符包-1年-900元...);

  • 官方介绍:机器翻译-讯飞开放平台、机器翻译 niutrans - 语音扩展 - 讯飞开放平台

3.2 国外翻译组件方案汇总

相比国内的翻译组件,国外的几种翻译组件具有更长的历史,下面分别做说明。

3.2.1 谷歌翻译

谷歌翻译(Google Translate)是由谷歌公司开发的一款在线翻译服务,旨在帮助用户在不同语言之间进行文字翻译,其特点来说:

  • 广泛的语言支持

    • 谷歌翻译支持超过 100 种语言的互译,包括常见的英语、汉语、西班牙语、法语、德语等,以及一些较为少见的语言。

  • 实时翻译

    • 提供实时翻译功能,用户可以在输入框中键入文字,系统会自动识别语言并进行翻译。

    • 实时语音翻译功能,支持语音输入及输出。

  • 图片翻译

    • 支持通过摄像头拍摄或上传图片,识别图片中的文字并进行翻译。这一功能对于旅游、阅读外文菜单等场合非常有用。

  • 离线翻译

    • 用户可以下载离线语言包,在没有网络连接的情况下也能进行翻译。

  • API 接口

    • 提供了 Google Cloud Translation API,允许开发者将谷歌翻译的功能集成到自己的应用程序中。

翻译包说明:

  • Google翻译API接口免费翻译额度: 50万字符免费/每月,新用户赠300美元(90天内有效);

  • 超出免费额度价格:20美元(约140元)/百万字符;

  • 官方介绍:https://cloud.google.com/translate/?hl=zh-cn

3.2.2 DeepL翻译

DeepL 是一款高质量的在线翻译服务,以其出色的翻译质量和自然流畅的翻译效果而闻名。与谷歌翻译相比,DeepL 在某些方面表现更为出色,特别是在处理欧洲语言方面。以下是关于 DeepL 翻译的一些详细介绍:

  • 高质量翻译

    • DeepL 使用先进的神经网络机器翻译技术,能够生成接近人工翻译的质量。它特别擅长处理复杂的句子结构和上下文相关的翻译。

  • 广泛的语言支持

    • DeepL 支持多种语言,包括但不限于英语、德语、法语、西班牙语、意大利语等等。

  • 实时翻译

    • DeepL 提供实时翻译功能,用户可以在输入框中键入文字,系统会自动识别语言并进行翻译。

  • 文档翻译

    • 用户可以直接上传文档(如 Word、PDF、PPT 等),DeepL 会对其进行翻译并保持原文档格式不变。

  • API 接口

    • 提供了 DeepL API,允许开发者将 DeepL 的翻译功能集成到自己的应用程序或网站中。API 支持多种编程语言,包括 Python、Java、C# 等。

  • 用户界面友好

    • DeepL 的网页版和移动应用界面简洁易用,支持拖放文件、文本高亮等功能,方便用户进行翻译。

  • 个性化翻译记忆库

    • DeepL Pro 版本允许用户创建自己的翻译记忆库,保存常用的翻译内容,以便在未来重复使用。

翻译包说明:

  • DeepL翻译API接口免费翻译额度:50万字符免费/每月(API Free版本,超出50万后无法使用,需使用API Pro版本);

  • 超出免费额度价格:25美元(约180元)/百万字符(Pro版本才可以使用,每月固定5.49美元套餐费,例如新加坡地区),申请开通困难可以尝试某宝;

  • 官方介绍:DeepL翻译API|机器翻译技术

3.2.3 微软翻译

微软翻译(Microsoft Translator)是由微软公司提供的一项在线翻译服务,旨在帮助用户在多种语言之间进行文本翻译。其主要特点如下:

  • 广泛的语言支持

    • 微软翻译支持超过 60 种语言的互译,包括常见的英语、汉语、西班牙语、法语、德语等,以及一些较为少见的语言,如阿塞拜疆语、哈萨克语等。

  • 实时翻译

    • 提供实时翻译功能,用户可以在输入框中键入文字,系统会自动识别语言并进行翻译。

    • 实时语音翻译功能,支持语音输入及输出。

  • 图片翻译

    • 支持通过摄像头拍摄或上传图片,识别图片中的文字并进行翻译。这一功能对于旅游、阅读外文菜单等场合非常有用。

  • 离线翻译

    • 用户可以下载离线语言包,在没有网络连接的情况下也能进行翻译。

  • 文档翻译

    • 支持上传文档(如 Word、Excel、PowerPoint、PDF 等),并将文档内容翻译成所需的目标语言。

  • API 接口

    • 提供了 Azure Translator Text API,允许开发者将微软翻译的功能集成到自己的应用程序中。API 支持多种编程语言,包括 C#、Java、Python、Node.js 等。

  • 个性化设置

    • 用户可以根据需要选择不同的发音风格和翻译风格,以适应不同的场景需求。

  • 集成工具

    • 微软翻译可以与 Office 等微软产品无缝集成,提供更便捷的翻译体验。

翻译包说明:

  • 微软翻译API接口免费翻译额度:200万字符免费/每月(新用户前12个月才有);

  • 超出免费额度价格:10美元(约71元)/百万字符;

  • 官方介绍:Translator - 翻译服务型软件 | Microsoft Azure

3.2.4 亚马逊翻译

亚马逊翻译(Amazon Translate)是亚马逊云服务(AWS)提供的一项机器翻译服务,旨在为企业和个人用户提供高质量的文本翻译。其主要特点如下:

  • 广泛的语言支持

    • 亚马逊翻译支持多种语言的互译,包括常见的英语、汉语、西班牙语、法语、德语、意大利语、日语、韩语、葡萄牙语等。具体支持的语言列表会随着服务的发展而更新。

  • 高质量翻译

    • 亚马逊翻译采用神经网络机器翻译(Neural Machine Translation, NMT)技术,能够生成自然流畅的翻译结果,尤其适合处理长句和复杂的语法结构。

  • 实时翻译

    • 提供实时翻译功能,用户可以在输入框中键入文字,系统会自动识别语言并进行翻译。

  • 文档翻译

    • 支持上传文档(如 PDF、Word、Excel、PowerPoint 等),并将文档内容翻译成所需的目标语言。

  • API 接口

    • 提供了 Amazon Translate API,允许开发者将翻译功能集成到自己的应用程序或网站中。API 支持多种编程语言,包括 Java、Python、Node.js 等。

  • 高度可扩展性

    • 作为 AWS 的一部分,亚马逊翻译具有高度的可扩展性,可以轻松处理大量翻译请求,适合大规模的企业级应用。

  • 集成与自动化

    • 可以与其他 AWS 服务集成,如 Amazon S3、Amazon Lex、Amazon Polly 等,提供更加丰富的功能组合。

翻译包说明:

  • Amazon翻译API接口免费翻译额度:200万字符免费/每月(新用户前12个月才有);

  • 超出免费额度价格:15美元(约107元)/百万字符;

  • 官方介绍:Amazon Translate 神经网络机器翻译_自然语言处理-AWS云服务

3.3 基于大模型或机器翻译框架

上述提供的国内外开源翻译组件你仍然觉得对接麻烦,或者担心存在一定的数据安全风险,也可以考虑基于开源的大模型,或一些成熟的机器学习框架进行本地化部署,通过一定的训练之后用于提供翻译服务。下面提供几种可用于本地部署的翻译类机器学习框架:

  • OpenNMT

    • 描述: OpenNMT 是一个开源的神经网络机器翻译框架,支持多种语言对。

    • 用途: 适合有机器学习经验的开发者,需要自己训练模型。

    • 集成方式: 通过 REST API 或者部署为微服务后调用。

  • Marian NMT

    • 描述: Marian 是一个快速的神经机器翻译框架,支持 GPU 和 CPU。

    • 用途: 同样适合有机器学习经验的开发者,需要自行训练模型。

    • 集成方式: 可以通过 REST API 调用。

  • Apertium

    • 描述: Apertium 是一个轻量级的开源机器翻译平台,专注于资源匮乏的语言对。

    • 用途: 提供了一些预训练的模型,包括一些不太常见的语言对。

    • 集成方式: 可以通过 HTTP API 调用,也可以直接部署本地服务。

四、微服务项目中集成翻译组件

接下来在演示如何在springboot项目中集成常用的翻译组件进行使用。

4.1 前置准备

提前搭建一个springboot工程,导入下面基础依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.35</version>
        </dependency>

        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.12.0</version>
        </dependency>

4.2 对接小牛翻译

官方主页:小牛翻译开放平台 - 机器翻译找小牛

4.2.1 登录控制台

登录官网之后注册一个账号,然后从控制台获取apikey的信息,以及API层面的对接文档,如下:

4.2.2 开通API翻译服务

点击开通服务

开通之后,会产生 api-key和appid,请妥善保管

点击查看开发文档:小牛翻译开放平台 - 机器翻译找小牛,即可看到如下详细的文档对接说明。

4.2.3 代码集成与调用

以文本翻译API为例进行操作,你也可以翻到每个API的最后,里面提供了对接API的代码示例

完整的代码如下:

package com.congge.translate;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

public class NiuTransAPIExample {

    public static void main(String[] args) {
        String requestUrl = "http://api.niutrans.com/NiuTransServer/translation";
        String apiKey = "你的apikey";
        String textToTranslate = "你好,世界!";
        String sourceLang = "zh";
        String targetLang = "en";
        try {
            URL url = new URL(requestUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            // 设置请求类型为 POST
            connection.setRequestMethod("GET");
            // 添加请求头
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            // 设置允许输出
            connection.setDoOutput(true);
            // 构造请求参数
            String requestBody = "from=" + sourceLang + "&to=" + targetLang + "&src_text=" + textToTranslate +"&apikey="+apiKey;
            // 写入请求数据
            try (OutputStream os = connection.getOutputStream()) {
                byte[] input = requestBody.getBytes(StandardCharsets.UTF_8);
                os.write(input, 0, input.length);
            }
            // 获取响应码
            int responseCode = connection.getResponseCode();
            System.out.println("Response Code : " + responseCode);
            // 读取响应数据
            try (BufferedReader br = new BufferedReader(
                    new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {
                StringBuilder response = new StringBuilder();
                String responseLine;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }
                System.out.println("Response Body: " + response.toString());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行上面的代码,控制台可以看到能够正常将中文翻译成英文

4.3 补充说明

上面演示了其中一种市面上的开源翻译组件的对接过程,像腾讯云、阿里云、亚马逊等翻译组件的对接过程也是大同小异,有兴趣的同学可以用类似的方式对接并在程序中集成即可,要注意的是,针对新注册的账户,不同的厂商提供了一定的免费额度以供使用,但是如果你的实际业务中翻译量很大,免费的额度不够用,建议还是开通付费包,避免使用过程中因为额度问题造成了业务上的影响。

五、本地化部署翻译工具

如果上面的方式都不能满足你的需求,最后再提供一种可行的解决方案,即本地私有化部署开源的翻译工具进行使用,当然,这种方式根据你的场景不同,在部署的成本上也不太一样,比如你只是做简单的开发测试,跟你想大规模使用翻译,在组件的选择上也会存在差异,下面以deepl的一个开源工具插件为例,进行本地化部署和对接使用的操作演示。

5.1 DeeplX-Local 部署

项目地址:GitCode - 全球开发者的开源社区,开源代码托管平台

5.1.1 项目说明

ycvk/deeplx-local 是一个基于 DeepL 翻译引擎的本地部署解决方案,它使开发者和用户能够无需外部 API 密钥,在本地环境中运行高效、低延迟的翻译服务。该项目设计用于支持大规模文本的翻译,并提供了智能的文本拆分与并行处理能力,确保了翻译任务的流畅进行。它支持一键启动并通过 Docker 化简化了部署流程,非常适合希望拥有私有翻译服务的个人或企业。

5.1.2 获取360 apikey

使用docker部署deeplx-local时,为了确保能够正常使用,还需要在docker运行的参数里面添加360_api_key,否则无法正常运行,通过git项目中的链接跳转到quake.360进行一下注册,然后在自己的控制台上即可获取这个apikey

需要注意的是,这种方式是有次数限制的

5.1.3 docker部署过程

对于希望通过 Docker 快速部署的用户,只需执行以下命令:

docker run -itd --name deeplx-local -p 8081:62155 -e 360_api_key="你的360apikey" neccen/deeplx-local:latest

这将启动容器并将服务暴露在本地的 8080 端口,翻译接口可通过 http://localhost:8080/translate 访问。如需自定义路由,可以添加环境变量 -e route=你的路由名称,例如:

docker run -itd --name deeplx-local -p 8081:62155 -e route=my-translate -e 360_api_key="你的360apikey" neccen/deeplx-local:latest

5.1.4 效果测试

部署成功后,使用下面的命令做一下测试

curl -X POST http://localhost:8081/translate \
     -H 'Content-Type: application/json' \
     --data '{"text":"你好,世界!","targetLang":"en"}'

可以看到能够正常进行翻译

5.2 DeepLX Serverless 部署与使用

这是一个基于 DeepL翻译API 的无服务器函数部署项目,旨在提供一个可直接对接的免费翻译解决方案,很适合需要在无服务器环境中集成DeepL翻译服务的开发者使用。

与原项目DeepLX的区别在于利用了无服务器函数(边缘函数)请求IP不固定的特性,有效避免了Error 429请求太频繁的报错;

虽然因此不会立马被暂时封禁,但也请不要滥用!目前我部署在vercel上会有流量限制,如果您有大量内容需要翻译,请购买DeepL的付费版,当前项目使用的free接口会受到DeepL政策限制由于目前项目未对pro接口进行适配,所以现在还只能使用free接口,不过在将来会完善

5.2.1 docker部署过程

运行下面的命令启动容器

docker run -d -p 8085:6119 ghcr.io/guobao2333/deeplx-serverless

5.2.2 效果测试

使用下面的命令进行测试

curl --location --request POST 'http://localhost:8085/translate' --header 'Content-Type: application/json' --data '{"text": "你好,世界!", "source_lang": "zh", "target_lang": "en"}'

也能正确得到翻译结果

5.2.3 在Java代码中集成与使用

基于上述搭建的本地deepl的翻译服务,下面通过代码调用测试一下,下面是调用的完整代码

package com.congge.translate;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

public class DeepLLocalTest {

    public static void main(String[] args) {
        String requestUrl = "http://部署的IP:8085/translate";
        String requestJson = "{\"text\": \"Hello , World!\", \"source_lang\": \"en\", \"target_lang\": \"zh\"}";
        try {
            URL url = new URL(requestUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            // 设置请求类型为 POST
            connection.setRequestMethod("POST");
            // 添加请求头 Content-Type
            connection.setRequestProperty("Content-Type", "application/json");
            // 设置允许输出
            connection.setDoOutput(true);
            // 写入请求数据
            try (OutputStream os = connection.getOutputStream()) {
                byte[] input = requestJson.getBytes(StandardCharsets.UTF_8);
                os.write(input, 0, input.length);
            }
            // 获取响应码
            int responseCode = connection.getResponseCode();
            System.out.println("Response Code : " + responseCode);
            // 读取响应数据
            try (BufferedReader br = new BufferedReader(
                    new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {
                StringBuilder response = new StringBuilder();
                String responseLine;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }
                System.out.println("Response Body: " + response.toString());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

运行上面的代码,通过控制台可以看到已经得到正确的翻译结果

六、写在文末

本文通过较大的篇幅详细结束了常用的翻译组件的使用,最后以deepl为例进行本地化部署,并结合代码进行演示操作,希望对看到的同学有用,本篇到此结束,感谢观看。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hms?: 1渗透测试

靶机&#xff1a;Hms?: 1 Hms?: 1 ~ VulnHub 攻击机&#xff1a;kail linux 2024 主机扫描阶段发现不了靶机&#xff0c;所以需要按DriftingBlues2一样手动配置网卡 1,将两台虚拟机网络连接都改为NAT模式&#xff0c;并查看靶机的MAC地址 2&#xff0c;攻击机上做主机扫描发现…

linux-环境变量

环境变量是系统提供的一组 name value 的变量&#xff0c;不同的变量有不同的用途&#xff0c;通常都具有全局属性 env 查看环境变量 PATH PATH是一个保存着系统指令路径的一个环境变量&#xff0c;系统提供的指令不需要路径&#xff0c;直接就可以使用就是因为指令的路径…

基于Spring Boot的私房菜定制上门服务系统的设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统私房菜定制上门服务系统信息管理难度大&#xff0c;容错率…

qt QMenuBar详解

1、概述 QMenuBar是Qt框架中用于创建菜单栏的类&#xff0c;它继承自QWidget。QMenuBar通常位于QMainWindow对象的标题栏下方&#xff0c;用于组织和管理多个QMenu&#xff08;菜单&#xff09;和QAction&#xff08;动作&#xff09;。菜单栏提供了一个水平排列的容器&#x…

转载:【lwip】03-内存管理 - 李柱明 - 博客园

目录 前言3. 内存管理 3.1 内存分配策略 3.1.1 固定大小的内存块3.1.2 可变大小分配3.2 动态内存池&#xff08;pool&#xff09; 3.2.1 介绍3.2.2 内存池的预处理3.2.3 内存池的初始化3.2.4 内存分配3.2.5 内存释放3.2.6 内存池源码定义简要分析 定义内存池资源源码分析保存各…

「Mac畅玩鸿蒙与硬件25」UI互动应用篇2 - 计时器应用实现

本篇将带领你实现一个实用的计时器应用&#xff0c;用户可以启动、暂停或重置计时器。该项目将涉及时间控制、状态管理以及按钮交互&#xff0c;是掌握鸿蒙应用开发的重要步骤。 关键词 UI互动应用时间控制状态管理用户交互 一、功能说明 在这个计时器应用中&#xff0c;用户…

使用MongoDB Atlas构建无服务器数据库

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用MongoDB Atlas构建无服务器数据库 MongoDB Atlas 简介 注册账户 创建集群 配置网络 设置数据库用户 连接数据库 设计文档模式…

从零开始的c++之旅——继承

1. 继承 1.继承概念及定义 继承是面向对象编程的三大特点之一&#xff0c;它使得我们可以在原有类特性的基础之上&#xff0c;增加方法 和属性&#xff0c;这样产生的新的类&#xff0c;称为派生类。 继承 呈现了⾯向对象程序设计的层次结构&#xff0c;以前我们接触的…

正向解析和反向解析

正向解析 服务端&#xff1a; [rootlocalhost rhel]# vim /etc/named.conf [rootlocalhost named]# vim /var/named/named.openlab.com 客户端&#xff1a; [rootlocalhost rhel]# nslookup 反向解析 服务端&#xff1a; [rootlocalhost rhel]# vim /etc/named.conf [ro…

计算机网络:网络层 —— 路由信息协议 RIP

文章目录 路由选择协议动态路由协议路由信息协议 RIPRIP 的重要特点RIP的基本工作过程RIP的距离向量算法RIP存在的问题RIP版本和相关报文的封装 路由选择协议 因特网是全球最大的互联网&#xff0c;它所采取的路由选择协议具有以下三个主要特点&#xff1a; 自适应&#xff1a…

基于yolov5的输电线,电缆检测系统,支持图像检测,视频检测和实时摄像检测功能(pytorch框架,python源码)

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; yolov5&#xff0c;输电线(线缆)检测系统&#xff0c;系统既支持图像检测&#xff0c;也支持视频和摄像实时检测【pytorch框架】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov5的输…

删除WPS的智能识别目录

很烦&#xff0c;对吧 智能识别目录很垃圾&#xff0c;无法直接删除&#xff0c;如果你选择左边的目录&#xff0c;删除的话&#xff0c;会顺便把右边的正文也删除了。 那么如何只删除左边目录&#xff0c;保留右边的正文呢&#xff1f;只有一个办法&#xff1a; ctrlshiftC复…

客户端与微服务之间的桥梁---网关

当我们创建好了N多个微服务或者微服务的实例之后&#xff0c;每个服务暴露出不同的端口地址&#xff0c;一般对于客户端请求&#xff0c;只需要请求一个端口&#xff0c;要隔离客户端和微服务的直接关系&#xff0c;保证微服务的安全性和灵活性&#xff0c;避免敏感信息的泄露。…

构建您自己的 RAG 应用程序:使用 Ollama、Python 和 ChromaDB 在本地设置 LLM 的分步指南

在数据隐私至关重要的时代&#xff0c;建立自己的本地语言模型 &#xff08;LLM&#xff09; 为公司和个人都提供了至关重要的解决方案。本教程旨在指导您完成使用 Ollama、Python 3 和 ChromaDB 创建自定义聊天机器人的过程&#xff0c;所有这些机器人都托管在您的系统本地。以…

C++STL-deque、stack、queue、priority_queue

C教学总目录 deque、stack、queue、priority_queue 1、deque2、stack使用介绍3、stack实现4、queue使用介绍5、queue实现6、priority_queue使用介绍7、priority_queue实现8、反向迭代器 1、deque deque是双端队列&#xff0c;我们学习的队列是先进先出的(First in first out)&a…

【c++篇】:掌握vector基础知识--基本操作与使用全知道

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨个人主页&#xff1a;余辉zmh–CSDN博客 ✨文章所属专栏&#xff1a;c篇–CSDN博客 文章目录 前言一.vector的基本概念1.定义2.主要特性和优点 二.vector的基本操作…

如何建购物网站提升用户体验

在构建一个购物网站时&#xff0c;用户体验是至关重要的&#xff0c;它直接影响到顾客的满意度和转化率。为了提升用户体验&#xff0c;可以从以下几个方面入手。 首先&#xff0c;网站设计应简洁明了。确保导航栏清晰易懂&#xff0c;让用户在寻找商品时不会迷失。此外&#x…

勒索软件如何传播?

在本文中&#xff0c;我们将讨论勒索软件对企业的影响并解释这些攻击的具体传播方式。 我们还将提供可采取的切实步骤来保护您自己和您的企业免受这些不断上升的威胁。 勒索软件对小型企业的攻击日益增多 勒索软件仍然是全球各种规模企业的头号威胁。 小型企业数据泄露的成…

Claude 3.5 新功能 支持对 100 页的PDF 图像、图表和图形进行可视化分析

Claude 3.5 Sonnet发布PDF图像预览新功能&#xff0c;允许用户分析长度不超过100页的PDF中的视觉内容。 此功能使用户能够轻松上传文档并提取信息&#xff0c;特别适用于包含图表、图形和其他视觉元素的研究论文和技术文档。 视觉PDF分析&#xff1a;用户现在可以从包含各种视觉…

交换排序(冒泡/快排)

一 . 交换排序 交换排序基本思想 : 所谓交换 &#xff0c; 就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置 。 交换序列的特点是 &#xff1a; 将键值较大的记录向序列的尾部移动 &#xff0c; 键值较小的记录向序列的前部移动 1.1 冒泡排序 在前面中 …