探秘LibreTranslate:免费开源的翻译神器

最近有模型数据翻译的需求,找了一些翻译api、软件,不是收费就是太费劲,巴拉巴拉找到了LibreTranslate,用着还是不错

https://github.com/LibreTranslate/LibreTranslate

在线试用!

在这里插入图片描述

先上下ai生成的简介:

LibreTranslate是一款开源的机器翻译工具,以下是关于它的详细介绍:

特点

  • 开源免费:LibreTranslate的源代码是公开的,遵循GNU Affero General Public License v3.0许可协议。这意味着用户可以自由地使用、修改和分发该软件,无需支付任何费用,降低了使用成本,尤其适用于对成本敏感的个人和组织。
  • 隐私保护:与许多在线翻译服务不同,LibreTranslate允许用户在自己的服务器或设备上运行翻译服务。这样,用户的数据就可以保留在本地,避免了将敏感信息上传到第三方服务器所带来的隐私风险,确保用户数据的安全性和保密性。
  • 多语言支持:支持多种语言之间的相互翻译,能满足不同用户在不同语言场景下的翻译需求。常见的如英语、汉语、西班牙语、法语、德语等语言之间的翻译都能很好地完成。
  • 可定制性强:用户可以根据自己的需求对翻译模型和设置进行定制。例如,可以根据特定的领域术语、语言风格等对翻译进行优化,以提高翻译的准确性和适用性,满足专业领域或特定场景的翻译要求。
  • API可用性:提供API,方便开发者将翻译功能集成到自己的应用程序、网站或其他软件项目中,从而为用户提供个性化的翻译服务,扩展了其在不同软件开发场景中的应用范围。

工作原理

  • 基于统计和神经网络:LibreTranslate的翻译功能主要基于统计机器翻译和神经网络机器翻译技术。它通过分析大量的平行语料库,学习不同语言之间的词汇、语法和语义对应关系,建立语言模型和翻译模型。在翻译时,根据输入的文本,利用这些模型计算出最可能的翻译结果。
  • 模型训练与优化:开发团队会不断收集和整理新的语料数据,对翻译模型进行持续训练和优化,以提高翻译的质量和准确性。同时,借助社区的力量,收集用户反馈和贡献,进一步改进模型,使其能够更好地适应各种语言场景和用户需求。

应用场景

  • 个人使用:适用于个人在阅读外文文献、浏览国外网站、与外国友人交流等场景下的翻译需求,帮助用户快速理解和处理外文信息。
  • 企业应用:企业在处理跨国业务文档、客户沟通、产品本地化等工作中,可以利用LibreTranslate搭建内部的翻译系统,提高工作效率,降低翻译成本,同时确保数据安全。
  • 教育领域:可用于辅助语言学习,帮助学生理解外文教材、学习资料等,也可以用于教育机构开展跨语言教学活动,促进语言教育的发展。
  • 网站和应用开发:开发者可以将LibreTranslate的API集成到网站或移动应用中,为用户提供实时翻译功能,提升用户体验,扩大应用的用户群体和市场覆盖范围。

实际使用

实际的使用,可以根据自己的使用场景来,支持多种的部署方式的,我这边就是训练模型数据使用,直接pip安装使用了,毕竟翻译模型和语言模型都是很耗资源的,当然除了内存,最好还有 GPU 的支持。

import requests
result=requests.post("http://10.1xx.228.127:8089/translate",json={"q":"Set the text for this element. Arguments: text (str): The text cls (str): The class of the text, defaults to ``current`` (leave this unless you know what you are doing). There may be only one text content element of each class associated with the element.","source":"en","target":"zh"})
print(result.json())
翻译结果:
{'translatedText': '设置此元素的文本 。 参数:文本 (str): 文本 cls( str) : 文本的类, 默认为“ 当前 ” (除非您知道您在做什么 ) 。 每个与该元素相关的类别可能只有一个文本内容元素.'}

翻译自开源项目简介:

LibreTranslate

在线试用! | API 文档 | 社区论坛

完全免费且开源的机器翻译 API,可以完全自托管。与其他 API 不同,它不依赖 Google 或 Azure 等专有服务提供翻译服务。相反,其翻译引擎由开源的 Argos Translate 库提供支持。

在线试用! | API 文档

API 示例

简单示例

请求:

const res = await fetch("https://libretranslate.com/translate", {
  method: "POST",
  body: JSON.stringify({
    q: "Hello!",
    source: "en",
    target: "es",
  }),
  headers: { "Content-Type": "application/json" },
});

console.log(await res.json());

响应:

{
    "translatedText": "¡Hola!"
}

语言代码列表: https://libretranslate.com/languages

自动检测语言

请求:

const res = await fetch("https://libretranslate.com/translate", {
  method: "POST",
  body: JSON.stringify({
    q: "Ciao!",
    source: "auto",
    target: "en",
  }),
  headers: { "Content-Type": "application/json" },
});

console.log(await res.json());

响应:

{
    "detectedLanguage": {
        "confidence": 83,
        "language": "it"
    },
    "translatedText": "Bye!"
}

HTML 示例

请求:

const res = await fetch("https://libretranslate.com/translate", {
  method: "POST",
  body: JSON.stringify({
    q: '<p class="green">Hello!</p>',
    source: "en",
    target: "es",
    format: "html",
  }),
  headers: { "Content-Type": "application/json" },
});

console.log(await res.json());

响应:

{
    "translatedText": "<p class=\"green\">¡Hola!</p>"
}

替代翻译

请求:

const res = await fetch("https://libretranslate.com/translate", {
  method: "POST",
  body: JSON.stringify({
    q: "Hello",
    source: "en",
    target: "it",
    format: "text",
    alternatives: 3,
  }),
  headers: { "Content-Type": "application/json" },
});

console.log(await res.json());

响应:

{
    "alternatives": [
        "Salve",
        "Pronto"
    ],
    "translatedText": "Ciao"
}

安装与运行

只需几步简单的设置即可运行自己的 API 服务器!

确保已安装 Python(推荐 3.8 或更高版本),然后运行以下命令:

pip install libretranslate
libretranslate [args]

接着在浏览器中打开 http://localhost:5000

默认情况下,LibreTranslate 会安装对所有可用语言的支持。为了仅加载某些语言并减少启动时间,可以使用 –load-only 参数:

libretranslate --load-only en,es,fr

请参考以下内容了解其他 参数

在 Ubuntu 20.04 上,也可以使用安装脚本,详见:https://github.com/argosopentech/LibreTranslate-init

使用 Docker 运行

你还可以使用 Docker 运行该应用程序:

Linux/macOS

./run.sh [args]

Windows

run.bat [args]

构建与运行

请参考 CONTRIBUTING.md 获取关于如何自行构建和运行该项目的详细信息。

CUDA 支持

在配备 CUDA 12.4.1 的 GPU 设备上,可以使用硬件加速来提高翻译速度,前提是已安装 nvidia-docker

运行此版本的命令如下:

docker compose -f docker-compose.cuda.yml up -d --build

参数

通过命令行传递的参数或通过环境变量设置的参数分为两种类型:

  • 设置或运行标志:用于切换特定的运行模式或禁用应用程序的某些部分。当添加或移除这些标志时,它们会作为开关使用。

  • 配置参数:用于设置各种限制和配置应用程序。这些参数需要传递值,如果未设置,将使用默认参数。

设置 / 标志

参数描述默认设置环境变量名
–debug启用调试环境禁用LT_DEBUG
–ssl是否启用 SSL禁用LT_SSL
–api-keys启用 API 密钥数据库,用于在达到 --req-limit 请求限制时对每个客户端进行限速不使用 API 密钥LT_API_KEYS
–require-api-key-origin要求 API 程序化访问使用 API 密钥,除非请求的来源域名与该域名匹配无来源域名限制LT_REQUIRE_API_KEY_ORIGIN
–require-api-key-secret要求 API 程序化访问使用 API 密钥,除非客户端还发送匹配的密钥不需要密钥LT_REQUIRE_API_KEY_SECRET
–suggestions允许用户建议禁用LT_SUGGESTIONS
–disable-files-translation禁用文件翻译允许文件翻译LT_DISABLE_FILES_TRANSLATION
–disable-web-ui禁用 Web UI启用 Web UILT_DISABLE_WEB_UI
–update-models在启动时更新语言模型仅在未找到模型时启用LT_UPDATE_MODELS
–metrics启用 /metrics 端点以导出 Prometheus 使用指标禁用LT_METRICS

配置参数

参数描述默认值环境变量名
–host设置服务器绑定的主机127.0.0.1LT_HOST
–port设置服务器绑定的端口5000LT_PORT
–char-limit设置字符限制无限制LT_CHAR_LIMIT
–req-limit设置每个客户端每分钟最大请求次数(不包括由 API 密钥设置的限制)无限制LT_REQ_LIMIT
–req-limit-storage为请求限制数据存储设置存储 URI。详见 Flask Limitermemory://LT_REQ_LIMIT_STORAGE
–req-time-cost为请求限制目的设置时间成本(以秒为单位)。如果一个请求需要 10 秒,而该值设置为 5,则请求成本为 2 或实际成本(取较大值)。无时间成本LT_REQ_TIME_COST
–batch-limit设置批量请求中最大可翻译文本数无限制LT_BATCH_LIMIT
–ga-id在 API 客户端页面启用 Google Analytics,并提供 ID空(无跟踪)LT_GA_ID
–frontend-language-source设置前端默认语言 - 来源autoLT_FRONTEND_LANGUAGE_SOURCE
–frontend-language-target设置前端默认语言 - 目标locale(匹配站点的区域设置)LT_FRONTEND_LANGUAGE_TARGET
–frontend-timeout设置前端翻译超时时间500LT_FRONTEND_TIMEOUT
–api-keys-db-path为本地数据库设置路径(容器内)。可以是绝对路径或相对路径db/api_keys.dbLT_API_KEYS_DB_PATH
–api-keys-remote使用此远程端点查询有效的 API 密钥,而不是使用本地数据库空(改为使用本地数据库)LT_API_KEYS_REMOTE
–get-api-key-link在 UI 中显示一个链接,指向用户可以获取 API 密钥的页面空(Web UI 上不显示链接)LT_GET_API_KEY_LINK
–shared-storage设置共享存储 URI,用于多进程数据共享(例如使用 gunicorn 时)memory://LT_SHARED_STORAGE
–secondary将此实例标记为辅助实例,以避免在多节点设置中与主节点冲突主节点LT_SECONDARY
–load-only设置可用语言空(使用 Argos Translate 中的全部)LT_LOAD_ONLY
–threads设置线程数4LT_THREADS
–metrics-auth-token通过仅允许具有有效授权令牌的客户端保护 /metrics 端点空(不需要认证)LT_METRICS_AUTH_TOKEN
–url-prefix为 URL 添加前缀:example.com:5000/url-prefix//LT_URL_PREFIX

注意事项:

  • 每个参数都有一个等效的环境变量可以代替使用。环境变量会覆盖默认值,但其优先级低于命令行参数。环境变量在使用 Docker 时特别有用。这些环境变量的名称是相应命令行参数名称的大写蛇形命名格式,并添加 LT 前缀。

  • 若要配置 API 密钥的使用要求,请将 --req-limit 设置为 0 并添加 --api-keys 标志。没有正确 API 密钥的请求将被拒绝。

  • 设置 --update-models 参数将更新模型,无论是否有可用更新。

更新

软件

如果通过 pip 安装:

pip install -U libretranslate

如果使用 Docker:

docker pull libretranslate/libretranslate

语言模型

使用 --update-models 参数启动程序。例如:libretranslate --update-models./run.sh --update-models

或者,你也可以运行 scripts/install_models.py 脚本。

使用 WSGI 和 Gunicorn 运行

pip install gunicorn
gunicorn --bind 0.0.0.0:5000 'wsgi:app'

你可以通过以下方式直接将应用参数传递给 Gunicorn:

gunicorn --bind 0.0.0.0:5000 'wsgi:app(api_keys=True)'

Kubernetes 部署

请参阅 JM Robles 的 Medium 文章 和 @rasos 改进的 k8s.yaml

Helm Chart

基于 @rasos 的工作,现在可以使用 Helm 在 Kubernetes 上安装 LibreTranslate。

Helm Chart 可在 helm-chart 仓库中找到,你可以在那里了解更多详细信息。

通过以下命令快速使用 Helm 在 Kubernetes 上安装 LibreTranslate:

helm repo add libretranslate https://libretranslate.github.io/helm-chart/
helm repo update
helm search repo libretranslate

helm install libretranslate libretranslate/libretranslate --namespace libretranslate --create-namespace

管理 API 密钥

LibreTranslate 支持每用户限额,例如,你可以向用户发放 API 密钥,使其每分钟享受更高的请求限制(如果你也设置了 --req-limit)。默认情况下,所有用户的速率限制基于 --req-limit,但通过向 REST 端点传递一个可选的 api_key 参数,用户可以享受更高的请求限制。此外,你还可以针对每个密钥指定不同的字符限制,从而绕过默认的 --char-limit 值。

若要使用 API 密钥,只需通过 --api-keys 选项启动 LibreTranslate。如果你通过 --api-keys-db-path 修改了 API 密钥数据库的路径,则在使用 ltmanage keys 命令时,必须使用相同的参数标志指定路径。

添加新密钥

要生成一个限制为每分钟 120 次请求的新 API 密钥:

ltmanage keys add 120

要生成一个限制为每分钟 120 次请求且每次请求最多 5,000 个字符的新 API 密钥:

ltmanage keys add 120 --char-limit 5000

如果更改了 API 密钥数据库路径:

ltmanage keys --api-keys-db-path path/to/db/dbName.db add 120

删除密钥

ltmanage keys remove <api-key>

查看密钥

ltmanage keys

Prometheus 指标

当启动时传递 --metrics 参数时,LibreTranslate 具备 Prometheus exporter 功能(默认情况下禁用)。启用指标后,实例上会挂载一个 /metrics 端点:

http://localhost:5000/metrics

# HELP libretranslate_http_requests_in_flight Multiprocess metric
# TYPE libretranslate_http_requests_in_flight gauge
libretranslate_http_requests_in_flight{api_key="",endpoint="/translate",request_ip="127.0.0.1"} 0.0
# HELP libretranslate_http_request_duration_seconds Multiprocess metric
# TYPE libretranslate_http_request_duration_seconds summary
libretranslate_http_request_duration_seconds_count{api_key="",endpoint="/translate",request_ip="127.0.0.1",status="200"} 0.0
libretranslate_http_request_duration_seconds_sum{api_key="",endpoint="/translate",request_ip="127.0.0.1",status="200"} 0.0

你可以在 prometheus.yml 中配置读取指标:

scrape_configs:
  - job_name: "libretranslate"

    # 如果使用 --metrics-auth-token 则需要
    #authorization:
    #credentials: "mytoken"

    static_configs:
      - targets: ["localhost:5000"]

要保护 /metrics 端点,你可以使用 --metrics-auth-token mytoken

如果使用 Gunicorn,确保创建一个目录来存储多进程数据指标并设置 PROMETHEUS_MULTIPROC_DIR

mkdir -p /tmp/prometheus_data
rm /tmp/prometheus_data/*
export PROMETHEUS_MULTIPROC_DIR=/tmp/prometheus_data
gunicorn -c scripts/gunicorn_conf.py --bind 0.0.0.0:5000 'wsgi:app(metrics=True)'

语言绑定

你可以使用以下绑定来访问 LibreTranslate API:

Discourse 插件

你可以使用 官方 Discourse 翻译插件 来使用 LibreTranslate 翻译 Discourse 主题。要安装它,只需修改 /var/discourse/containers/app.yml

## 插件配置
## 详情参见 https://meta.discourse.org/t/19157
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-translator
    ...

然后运行 ./launcher rebuild app。在 Discourse 管理面板中选择 “LibreTranslate” 作为翻译提供商,并设置相关的端点配置。

你可以在 此页面 上查看插件的实际效果。

移动应用

网络浏览器

镜像站点

以下是公开的 LibreTranslate 实例列表,其中一些需要 API 密钥。如果想添加新的 URL,请提交一个 pull request。

URL是否需要 API 密钥链接
libretranslate.com✔️[ 获取 API 密钥 ] [ 服务状态 ]
translate.flossboxin.org.in[ 联系/电子邮件 ]

TOR/i2p 镜像

URL
lt.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion
lt.vern.i2p

添加新语言模型

您可以通过以下两种方式创建新的语言模型:

大多数训练数据来自 Opus,这是一个开源的平行语料库。同时可以查看 NLLU

本地化

LibreTranslate 的 Web 界面支持所有 LibreTranslate 可翻译的语言。它还可以(大致)自我翻译! 由于某些语言尚未经过人工审查,可能不会出现在 UI 中。您可以通过启用 --debug 模式显示所有语言。

要帮助改进或审查界面翻译:

{
 "name": "<语言名称>",
 "reviewed": true <-- 将此从 false 更改为 true
}

UI 支持的语言

语言是否已审查Weblate 链接
阿拉伯语编辑
阿塞拜疆语编辑
巴斯克语✔️编辑
中文编辑
中文(繁体)编辑
捷克语✔️编辑
丹麦语编辑
荷兰语编辑
英语✔️编辑
世界语✔️编辑
芬兰语编辑
法语✔️编辑
德语✔️编辑
希腊语编辑
希伯来语编辑
印地语编辑
匈牙利语编辑
印度尼西亚语编辑
爱尔兰语编辑
意大利语✔️编辑
日语编辑
卡拜尔语✔️编辑
韩语✔️编辑
奥克西塔尼亚语编辑
波斯语编辑
波兰语编辑
葡萄牙语✔️编辑
俄语✔️编辑
斯洛伐克语编辑
西班牙语✔️编辑
瑞典语编辑
土耳其语编辑
乌克兰语✔️编辑
越南语编辑

路线图

欢迎通过提交拉取请求(Pull Request)来帮助我们!

欢迎提出其他想法。

常见问题 (FAQ)

我可以将 libretranslate.com 的 API 服务用于生产环境中的应用程序吗?

简单来说,可以,但前提是您需要购买 API 密钥。当然,您也可以在自己的服务器上免费运行 LibreTranslate。

为什么 libretranslate.com 上的某些翻译与自托管版本的不同?

默认情况下,语言模型是从 argos-index 加载的。有时,我们会在 libretranslate.com 上部署尚未添加到 argos-index 中的模型,例如从 OPUS 转换的模型(讨论帖)。

语言模型保存在哪里?

保存在 $HOME/.local/share/argos-translate/packages 路径下。在 Windows 上是 C:\Users\youruser\.local\share\argos-translate\packages

我可以在反向代理(例如 Apache2 或 Caddy)后使用 LibreTranslate 吗?

可以,以下是将子域名(使用 HTTPS 证书)重定向到本地运行的 Docker 容器中 LibreTranslate 的配置示例。

sudo docker run -ti --rm -p 127.0.0.1:5000:5000 libretranslate/libretranslate

如果希望通过 domain.tld:5000(除了 subdomain.domain.tld)访问,也可以移除上述命令中的 127.0.0.1(这有助于判断问题是否出在 Apache2 配置还是 Docker 容器中)。

如果希望 Docker 在启动时自动运行,请添加 --restart unless-stopped 参数。

Apache 配置

将 [YOUR_DOMAIN] 替换为您的完整域名,例如 translate.domain.tldlibretranslate.domain.tld

如果需要记录请求日志,请取消 ErrorLogCustomLog 行的注释。

#Libretranslate

# 将 HTTP 重定向到 HTTPS
<VirtualHost *:80>
    ServerName http://[YOUR_DOMAIN]
    Redirect / https://[YOUR_DOMAIN]
    # ErrorLog ${APACHE_LOG_DIR}/error.log
    # CustomLog ${APACHE_LOG_DIR}/tr-access.log combined
</VirtualHost>

# HTTPS 配置
<VirtualHost *:443>
    ServerName https://[YOUR_DOMAIN]

    ProxyPass / http://127.0.0.1:5000/
    ProxyPassReverse / http://127.0.0.1:5000/
    ProxyPreserveHost On

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/[YOUR_DOMAIN]/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/[YOUR_DOMAIN]/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/[YOUR_DOMAIN]/fullchain.pem

    # ErrorLog ${APACHE_LOG_DIR}/tr-error.log
    # CustomLog ${APACHE_LOG_DIR}/tr-access.log combined
</VirtualHost>

将此配置添加到现有站点配置文件中,或创建一个新的文件 /etc/apache2/sites-available/new-site.conf,然后运行 sudo a2ensite new-site.conf

如果需要获取 HTTPS 子域名证书,请安装 certbot(snap 版本),运行以下命令:

sudo certbot certonly --manual --preferred-challenges dns

按提示输入信息(域名为 subdomain.domain.tld),并在域名注册商处添加 DNS TXT 记录。这会将证书和密钥保存到 /etc/letsencrypt/live/{subdomain.domain.tld}/。如果不想使用 HTTPS,可以注释掉 SSL 相关的行。

Caddy 配置

将 [YOUR_DOMAIN] 替换为您的完整域名,例如 translate.domain.tldlibretranslate.domain.tld

#Libretranslate
[YOUR_DOMAIN] {
  reverse_proxy localhost:5000
}

将此配置添加到现有的 Caddyfile 中,或保存为 Caddyfile 文件,运行以下命令以重新加载配置:

sudo caddy reload
NGINX 配置

将 [YOUR_DOMAIN] 替换为您的完整域名,例如 translate.domain.tldlibretranslate.domain.tld

删除 access_logerror_log 行前的 #,可以禁用日志记录。

server {
  listen 80;
  server_name [YOUR_DOMAIN];
  return 301 https://$server_name$request_uri;
}

server {
  listen 443 http2 ssl;
  server_name [YOUR_DOMAIN];

  #access_log off;
  #error_log off;

  # SSL 配置
  ssl_certificate /etc/letsencrypt/live/[YOUR_DOMAIN]/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/[YOUR_DOMAIN]/privkey.pem;

  ssl_protocols TLSv1.2 TLSv1.3;

  # 使用推荐的加密套件: https://wiki.mozilla.org/Security/Server_Side_TLS
  ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';

  ssl_session_timeout 10m;
  ssl_session_cache shared:MozSSL:10m;  # 约 40000 个会话
  ssl_session_tickets off;

  # 为 ECDHE 密码指定曲线
  ssl_ecdh_curve prime256v1;
  # 服务器优先选择密码套件
  ssl_prefer_server_ciphers on;

  # HTTP 头配置
  add_header Strict-Transport-Security  "max-age=31536000; includeSubDomains; preload" always;
  add_header Referrer-Policy            "strict-origin" always;

  add_header X-Frame-Options            "SAMEORIGIN"    always;
  add_header X-XSS-Protection           "1; mode=block" always;
  add_header X-Content-Type-Options     "nosniff"       always;
  add_header X-Download-Options         "noopen"        always;
  add_header X-Robots-Tag               "none"          always;

  add_header Feature-Policy             "microphone 'none'; camera 'none'; geolocation 'none';"  always;
  add_header Permissions-Policy         "microphone=(), camera=(), geolocation=()" always;

  # 移除 X-Powered-By,避免信息泄露
  fastcgi_hide_header X-Powered-By;

  # 不显示 nginx 服务器头
  server_tokens off;

  # GZIP 配置
  gzip on;
  gzip_disable "msie6";

  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_min_length 256;
  gzip_types text/xml text/javascript font/ttf font/eot font/otf application/x-javascript application/atom+xml application/javascript application/json application/manifest+json application/rss+xml application/x-web-app-manifest+json application/xhtml+xml application/xml image/svg+xml image/x-icon text/css text/plain;

  location / {
      proxy_pass http://127.0.0.1:5000/;
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      client_max_body_size 0;
  }
}

将上述内容添加到现有的 NGINX 配置文件中,或将其保存为 /etc/nginx/site-enabled 目录下的 libretranslate 文件,并运行以下命令重新加载配置:

sudo nginx -s reload

我可以将 LibreTranslate 作为 systemd 服务运行吗(默认使用 pip/python 安装)?

可以,只需在 /etc/systemd/system 中创建一个服务文件,并启用服务开机自启。.env 文件是可选的,具体取决于您的设置需求。将以下内容保存为文件(根据您的实际值进行修改),命名为 libretranslate.service

[Unit]
Description=LibreTranslate
After=network.target
[Service]
User=root
Type=idle
Restart=always
Environment="PATH=/usr/local/lib/python3.11/dist-packages/libretranslate"
ExecStart=/usr/bin/python3 /usr/local/bin/libretranslate
EnvironmentFile=/usr/local/lib/python3.11/dist-packages/libretranslate/.env
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
TimeoutStopSec=1
[Install]
WantedBy=multi-user.target

保存后,重新加载 systemd 守护进程并启动服务:

systemctl daemon-reload
systemctl start libretranslate.service
systemctl enable libretranslate.service

我可以进行批量翻译吗?

可以,在 q 字段中传递字符串数组,而不是单个字符串:

const res = await fetch("https://libretranslate.com/translate", {
  method: "POST",
  body: JSON.stringify({
    q: ["Hello", "world"],
    source: "en",
    target: "es",
  }),
  headers: { "Content-Type": "application/json" },
});

console.log(await res.json());
// {
//     "translatedText": [
//         "Hola",
//         "mundo"
//     ]
// }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@程序员小袁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值