docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker翻译组件Deepl使用

Docker搭建开源翻译组件Deepl使用超详细教程(收藏)

作者:小码农叔叔

微服务项目中的多语言翻译需求日益增加,本文详细介绍了微服务架构中的翻译组件使用场景,以及多种开源翻译组件的解决方案,文中分析了国内外多个翻译服务如百度翻译、谷歌翻译等,以及如何在微服务项目中集成这些翻译组件

一、前言

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

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

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

2.1 多语言用户界面

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

2.2 业务逻辑中的翻译需求

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

2.3 满足实时通信的要求

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

2.4 内容管理系统

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

2.5 个性化推荐系统

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

2.6 日志和监控

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

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

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

3.1 国内翻译组件方案汇总

3.1.1 百度翻译

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

3.1.2 腾讯翻译

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

3.1.3 阿里翻译(通用版)

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

3.1.4 华为翻译

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

3.1.5 小牛翻译

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

3.1.6 有道翻译

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

3.1.7 火山翻译

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

3.1.8 讯飞翻译

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

3.2 国外翻译组件方案汇总

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

3.2.1 谷歌翻译

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

3.2.2 DeepL翻译

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

3.2.3 微软翻译

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

3.2.4 亚马逊翻译

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

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

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

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

接下来在演示如何在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为例进行本地化部署,并结合代码进行演示操作,希望对看到的同学有用,本篇到此结束,感谢观看。

到此这篇关于Docker搭建开源翻译组件Deepl使用超详细教程(收藏)的文章就介绍到这了,更多相关Docker翻译组件Deepl使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

阅读全文