最近有模型数据翻译的需求,找了一些翻译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 不同,它不依赖 Google 或 Azure 等专有服务提供翻译服务。相反,其翻译引擎由开源的 Argos Translate 库提供支持。
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 UI | LT_DISABLE_WEB_UI |
–update-models | 在启动时更新语言模型 | 仅在未找到模型时启用 | LT_UPDATE_MODELS |
–metrics | 启用 /metrics 端点以导出 Prometheus 使用指标 | 禁用 | LT_METRICS |
配置参数
参数 | 描述 | 默认值 | 环境变量名 |
---|---|---|---|
–host | 设置服务器绑定的主机 | 127.0.0.1 | LT_HOST |
–port | 设置服务器绑定的端口 | 5000 | LT_PORT |
–char-limit | 设置字符限制 | 无限制 | LT_CHAR_LIMIT |
–req-limit | 设置每个客户端每分钟最大请求次数(不包括由 API 密钥设置的限制) | 无限制 | LT_REQ_LIMIT |
–req-limit-storage | 为请求限制数据存储设置存储 URI。详见 Flask Limiter | memory:// | 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 | 设置前端默认语言 - 来源 | auto | LT_FRONTEND_LANGUAGE_SOURCE |
–frontend-language-target | 设置前端默认语言 - 目标 | locale (匹配站点的区域设置) | LT_FRONTEND_LANGUAGE_TARGET |
–frontend-timeout | 设置前端翻译超时时间 | 500 | LT_FRONTEND_TIMEOUT |
–api-keys-db-path | 为本地数据库设置路径(容器内)。可以是绝对路径或相对路径 | db/api_keys.db | LT_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 | 设置线程数 | 4 | LT_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
端点:
# 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:
- Rust: https://github.com/DefunctLizard/libretranslate-rs
- Node.js: https://github.com/franciscop/translate
- TypeScript: https://github.com/tderflinger/libretranslate-ts
- .Net: https://github.com/sigaloid/LibreTranslate.Net
- Go: https://github.com/SnakeSel/libretranslate
- Python: https://github.com/argosopentech/LibreTranslate-py
- PHP: https://github.com/jefs42/libretranslate
- C++: https://github.com/argosopentech/LibreTranslate-cpp
- Swift: https://github.com/wacumov/libretranslate
- Unix: https://github.com/argosopentech/LibreTranslate-sh
- Shell: https://github.com/Hayao0819/Hayao-Tools/tree/master/libretranslate-sh
- Java: https://github.com/suuft/libretranslate-java
- Ruby: https://github.com/noesya/libretranslate
- R: https://github.com/myanesp/libretranslateR
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” 作为翻译提供商,并设置相关的端点配置。
你可以在 此页面 上查看插件的实际效果。
移动应用
- LibreTranslator 是一款使用 LibreTranslate API 的 Android 应用程序,在 Play Store 和 F-Droid 商店 上均有提供。
- Translate You 是一款注重隐私的翻译应用,基于 MD3 构建,可在 F-Droid 商店 中获取,同时支持 LibreTranslate API 和其他提供商。
- LiTranslate 是一款 iOS 应用,在 App Store 上提供,使用 LibreTranslate API。
网络浏览器
- minbrowser 是一个支持 集成 LibreTranslate 功能 的网络浏览器。
- LibreTranslate Firefox 插件 正在开发中。
镜像站点
以下是公开的 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
模式显示所有语言。
要帮助改进或审查界面翻译:
- 访问 https://hosted.weblate.org/projects/libretranslate/app/#translations。所有更改都会自动推送到此存储库。
- 一旦所有字符串都经过审查/编辑,提交一个 pull request 并更改
libretranslate/locales/{code}/meta.json
:
{
"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
参数。
将 [YOUR_DOMAIN] 替换为您的完整域名,例如 translate.domain.tld
或 libretranslate.domain.tld
。
如果需要记录请求日志,请取消 ErrorLog
和 CustomLog
行的注释。
#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 相关的行。
将 [YOUR_DOMAIN] 替换为您的完整域名,例如 translate.domain.tld
或 libretranslate.domain.tld
。
#Libretranslate
[YOUR_DOMAIN] {
reverse_proxy localhost:5000
}
将此配置添加到现有的 Caddyfile 中,或保存为 Caddyfile
文件,运行以下命令以重新加载配置:
sudo caddy reload
NGINX 配置
将 [YOUR_DOMAIN] 替换为您的完整域名,例如 translate.domain.tld
或 libretranslate.domain.tld
。
删除 access_log
和 error_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"
// ]
// }