ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【云原生】Docker搭建开源翻译组件Deepl使用详解 [打印本页]

作者: 勿忘初心做自己    时间: 2024-11-4 13:46
标题: 【云原生】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 多语言用户界面

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


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工程,导入下面基础依靠
  1.                 <dependency>
  2.             <groupId>org.springframework.boot</groupId>
  3.             <artifactId>spring-boot-starter-web</artifactId>
  4.         </dependency>
  5.         <dependency>
  6.             <groupId>org.projectlombok</groupId>
  7.             <artifactId>lombok</artifactId>
  8.             <scope>provided</scope>
  9.         </dependency>
  10.         <dependency>
  11.             <groupId>com.alibaba</groupId>
  12.             <artifactId>fastjson</artifactId>
  13.             <version>2.0.35</version>
  14.         </dependency>
  15.         <dependency>
  16.             <groupId>com.squareup.okhttp3</groupId>
  17.             <artifactId>okhttp</artifactId>
  18.             <version>4.12.0</version>
  19.         </dependency>
复制代码
4.2 对接小牛翻译

官方主页:小牛翻译开放平台 - 呆板翻译找小牛
4.2.1 登录控制台

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

4.2.2 开通API翻译服务

点击开通服务

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

点击查看开辟文档:小牛翻译开放平台 - 呆板翻译找小牛,即可看到如下具体的文档对接阐明。


4.2.3 代码集成与调用

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

完整的代码如下:
  1. package com.congge.translate;
  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4. import java.io.OutputStream;
  5. import java.net.HttpURLConnection;
  6. import java.net.URL;
  7. import java.nio.charset.StandardCharsets;
  8. public class NiuTransAPIExample {
  9.     public static void main(String[] args) {
  10.         String requestUrl = "http://api.niutrans.com/NiuTransServer/translation";
  11.         String apiKey = "你的apikey";
  12.         String textToTranslate = "你好,世界!";
  13.         String sourceLang = "zh";
  14.         String targetLang = "en";
  15.         try {
  16.             URL url = new URL(requestUrl);
  17.             HttpURLConnection connection = (HttpURLConnection) url.openConnection();
  18.             // 设置请求类型为 POST
  19.             connection.setRequestMethod("GET");
  20.             // 添加请求头
  21.             connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
  22.             // 设置允许输出
  23.             connection.setDoOutput(true);
  24.             // 构造请求参数
  25.             String requestBody = "from=" + sourceLang + "&to=" + targetLang + "&src_text=" + textToTranslate +"&apikey="+apiKey;
  26.             // 写入请求数据
  27.             try (OutputStream os = connection.getOutputStream()) {
  28.                 byte[] input = requestBody.getBytes(StandardCharsets.UTF_8);
  29.                 os.write(input, 0, input.length);
  30.             }
  31.             // 获取响应码
  32.             int responseCode = connection.getResponseCode();
  33.             System.out.println("Response Code : " + responseCode);
  34.             // 读取响应数据
  35.             try (BufferedReader br = new BufferedReader(
  36.                     new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {
  37.                 StringBuilder response = new StringBuilder();
  38.                 String responseLine;
  39.                 while ((responseLine = br.readLine()) != null) {
  40.                     response.append(responseLine.trim());
  41.                 }
  42.                 System.out.println("Response Body: " + response.toString());
  43.             }
  44.         } catch (Exception e) {
  45.             e.printStackTrace();
  46.         }
  47.     }
  48. }
复制代码
运行上面的代码,控制台可以看到能够正常将中文翻译成英文

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 快速摆设的用户,只需执行以下命令:
  1. 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=你的路由名称,例如:
  1. 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 效果测试

摆设成功后,使用下面的命令做一下测试
  1. curl -X POST http://localhost:8081/translate \
  2.      -H 'Content-Type: application/json' \
  3.      --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摆设过程

运行下面的命令启动容器
  1. docker run -d -p 8085:6119 ghcr.io/guobao2333/deeplx-serverless
复制代码

5.2.2 效果测试

使用下面的命令举行测试
  1. 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的翻译服务,下面通过代码调用测试一下,下面是调用的完整代码
  1. package com.congge.translate;
  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4. import java.io.OutputStream;
  5. import java.net.HttpURLConnection;
  6. import java.net.URL;
  7. import java.nio.charset.StandardCharsets;
  8. public class DeepLLocalTest {
  9.     public static void main(String[] args) {
  10.         String requestUrl = "http://部署的IP:8085/translate";
  11.         String requestJson = "{"text": "Hello , World!", "source_lang": "en", "target_lang": "zh"}";
  12.         try {
  13.             URL url = new URL(requestUrl);
  14.             HttpURLConnection connection = (HttpURLConnection) url.openConnection();
  15.             // 设置请求类型为 POST
  16.             connection.setRequestMethod("POST");
  17.             // 添加请求头 Content-Type
  18.             connection.setRequestProperty("Content-Type", "application/json");
  19.             // 设置允许输出
  20.             connection.setDoOutput(true);
  21.             // 写入请求数据
  22.             try (OutputStream os = connection.getOutputStream()) {
  23.                 byte[] input = requestJson.getBytes(StandardCharsets.UTF_8);
  24.                 os.write(input, 0, input.length);
  25.             }
  26.             // 获取响应码
  27.             int responseCode = connection.getResponseCode();
  28.             System.out.println("Response Code : " + responseCode);
  29.             // 读取响应数据
  30.             try (BufferedReader br = new BufferedReader(
  31.                     new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {
  32.                 StringBuilder response = new StringBuilder();
  33.                 String responseLine;
  34.                 while ((responseLine = br.readLine()) != null) {
  35.                     response.append(responseLine.trim());
  36.                 }
  37.                 System.out.println("Response Body: " + response.toString());
  38.             }
  39.         } catch (Exception e) {
  40.             e.printStackTrace();
  41.         }
  42.     }
  43. }
复制代码
运行上面的代码,通过控制台可以看到已经得到正确的翻译结果


六、写在文末

本文通过较大的篇幅具体结束了常用的翻译组件的使用,最后以deepl为例举行本地化摆设,并联合代码举行演示操纵,希望对看到的同学有用,本篇到此结束,感谢观看。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4