Compare commits

...

20 commits
v1.5.7 ... main

Author SHA1 Message Date
Dương Nguyễn Võ Quốc d8ff2de3c3
Translated using Weblate (Vietnamese)
Translation: LibreTranslate/App
Translate-URL: https://hosted.weblate.org/projects/libretranslate/app/vi/
2024-06-14 18:34:08 +02:00
Piero Toffanin 0c86cc63a9
Merge pull request #634 from lotigara/main
Add a customized LibreTranslate instance to the README.md
2024-06-14 08:50:54 -04:00
lotigara 11ba0ffafc
Add a customized LibreTranslate instance to the README.md 2024-06-14 14:33:12 +03:00
Luna 4088b271ee
Translated using Weblate (Danish)
Translation: LibreTranslate/App
Translate-URL: https://hosted.weblate.org/projects/libretranslate/app/da/
2024-06-09 19:09:21 +02:00
Wahyu Hamdani e237d06349
Translated using Weblate (Indonesian)
Translation: LibreTranslate/App
Translate-URL: https://hosted.weblate.org/projects/libretranslate/app/id/
2024-06-08 12:27:05 +00:00
Piero Toffanin d530b628d0
Update issue-triage.yml 2024-06-07 11:17:45 -04:00
Piero Toffanin 8bbda1949d Filter empty strings 2024-06-03 13:20:48 -04:00
Piero Toffanin f0fb4218e7 Bump version 2024-06-03 13:11:59 -04:00
Piero Toffanin df3680c280 Fix alternatives unique comparison 2024-06-03 13:11:42 -04:00
Piero Toffanin cb6b324478
Update README.md 2024-06-03 13:08:16 -04:00
Piero Toffanin 76721891b4
Merge pull request #630 from pierotofy/alternatives
Support for alternative translations
2024-06-03 13:03:19 -04:00
Piero Toffanin 86d15118ca Fix indendation 2024-06-03 12:55:35 -04:00
Piero Toffanin ba8b8d97a1 Feat: support for alternative translations 2024-06-03 12:42:32 -04:00
Piero Toffanin f7a35db05b
Merge pull request #622 from savionlee/patch-1
Update cuda.Dockerfile to CUDA 12
2024-05-06 16:06:16 -04:00
Savion Lee 16ae59aa43
Update cuda.Dockerfile to CUDA 12 2024-05-06 14:06:40 -05:00
P.J. Finlay 67c5348c02
Merge pull request #618 from LibreTranslate/update-argos-1_9_6
Upgrade to Argos Translate v1.9.6
2024-05-01 16:42:36 -05:00
Piero Toffanin f167b94166
Merge pull request #619 from PeterDaveHello/UpdateDockerBaseImage
Update Dockerfile base image to Python v3.11.9
2024-05-01 09:13:59 -04:00
Peter Dave Hello 7722984df5 Update Dockerfile base image to Python v3.11.9 2024-05-01 17:57:27 +08:00
P.J. Finlay 9dde1e0142
Upgrade to Argos Translate v1.9.6
- Upgrade CTranslate2 to v4 for CUDA 12 support (https://github.com/argosopentech/argos-translate/pull/404)
- Fix deprecation error for CTranslate2 TranslationResult (https://github.com/argosopentech/argos-translate/pull/404)
2024-04-30 16:46:20 -05:00
P.J. Finlay c8360d0359 Update Argos Translate to v1.9.4
This fixes an issue in SentencePiece where the packaging is broken for newer versions of Python.

https://github.com/argosopentech/argos-translate/issues/405
2024-04-29 14:41:12 -05:00
14 changed files with 161 additions and 92 deletions

View file

@ -19,12 +19,13 @@ jobs:
- Q: "A question about using a software or seeking guidance on doing something?"
- B: "Reporting an issue, an exception, a stack trace, or a software bug?"
- T: "Reporting a problem with an inaccurate, awkward or erroneous translation?"
- E: "Contains a suggestion for an improvement or a feature request?"
- E: "Reporting about some missing feature or functionality?"
- SC: "Describes an issue related to compiling or building source code?"
logic: |
- "Q and (not B) and (not E) and (not SC)": [comment: "Could we move this conversation over to the forum at https://community.libretranslate.com? :pray: The forum is the right place to ask questions (we try to keep the GitHub issue tracker for feature requests and bugs only). Thank you! :+1:", close: true, stop: true]
- "B and (not T) and (not E) and (not SC)": [label: "possible bug", stop: true]
- "T or E": [label: "enhancement", stop: true]
- "T and (not E)": [label: "model improvement", stop: true]
- "E": [label: "enhancement", stop: true]
- "SC": [label: "possible bug"]
signature: "p.s. I'm just an automated script, not a human being."

View file

@ -70,7 +70,7 @@ Response:
}
```
### HTML (beta)
### HTML
Request:
@ -97,6 +97,38 @@ Response:
}
```
### Alternative Translations
Request:
```javascript
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());
```
Response:
```javascript
{
"alternatives": [
"Salve",
"Pronto"
],
"translatedText": "Ciao"
}
```
## Install and Run
You can run your own API server with just a few lines of setup!
@ -387,6 +419,7 @@ URL |API Key Required | Links
[translate.terraprint.co](https://translate.terraprint.co/)|-
[trans.zillyhuhn.com](https://trans.zillyhuhn.com/)|-
[libretranslate.eownerdead.dedyn.io](https://libretranslate.eownerdead.dedyn.io)|-
[translate.lotigara.ru](https://translate.lotigara.ru)|-
## TOR/i2p Mirrors

View file

@ -1 +1 @@
1.5.7
1.6.1

View file

@ -1,4 +1,4 @@
FROM python:3.10.10-slim-bullseye as builder
FROM python:3.11.9-slim-bullseye as builder
WORKDIR /app
@ -19,7 +19,7 @@ RUN ./venv/bin/pip install Babel==2.12.1 && ./venv/bin/python scripts/compile_lo
&& ./venv/bin/pip install . \
&& ./venv/bin/pip cache purge
FROM python:3.10.10-slim-bullseye
FROM python:3.11.9-slim-bullseye
ARG with_models=false
ARG models=""

View file

@ -1,4 +1,4 @@
FROM arm64v8/python:3.10.10-slim-bullseye as builder
FROM arm64v8/python:3.11.9-slim-bullseye as builder
WORKDIR /app
@ -19,7 +19,7 @@ RUN ./venv/bin/pip install Babel==2.12.1 && ./venv/bin/python scripts/compile_lo
&& ./venv/bin/pip install . \
&& ./venv/bin/pip cache purge
FROM arm64v8/python:3.10.10-slim-bullseye
FROM arm64v8/python:3.11.9-slim-bullseye
ARG with_models=false
ARG models=""

View file

@ -1,4 +1,4 @@
FROM nvidia/cuda:11.2.2-devel-ubuntu20.04
FROM nvidia/cuda:12.4.1-devel-ubuntu20.04
ENV ARGOS_DEVICE_TYPE cuda
ARG with_models=false

View file

@ -148,6 +148,10 @@ def get_routes_limits(args, api_keys_db):
return res
def filter_unique(seq, extra):
seen = set({extra, ""})
seen_add = seen.add
return [x for x in seq if not (x in seen or seen_add(x))]
def create_app(args):
from libretranslate.init import boot
@ -496,6 +500,14 @@ def create_app(args):
Format of source text:
* `text` - Plain text
* `html` - HTML markup
- in: formData
name: alternatives
schema:
type: integer
default: 0
example: 3
required: false
description: Preferred number of alternative translations
- in: formData
name: api_key
schema:
@ -558,11 +570,13 @@ def create_app(args):
source_lang = json.get("source")
target_lang = json.get("target")
text_format = json.get("format")
num_alternatives = int(json.get("alternatives", 0))
else:
q = request.values.get("q")
source_lang = request.values.get("source")
target_lang = request.values.get("target")
text_format = request.values.get("format")
num_alternatives = request.values.get("alternatives", 0)
if not q:
abort(400, description=_("Invalid request: missing %(name)s parameter", name='q'))
@ -571,6 +585,14 @@ def create_app(args):
if not target_lang:
abort(400, description=_("Invalid request: missing %(name)s parameter", name='target'))
try:
num_alternatives = max(0, int(num_alternatives))
except ValueError:
abort(400, description=_("Invalid request: %(name)s parameter is not a number", name='alternatives'))
if args.alternatives_limit != -1 and num_alternatives > args.alternatives_limit:
abort(400, description=_("Invalid request: %(name)s parameter must be <= %(value)s", name='alternatives', value=args.alternatives_limit))
if not request.is_json:
# Normalize line endings to UNIX style (LF) only so we can consistently
# enforce character limits.
@ -626,54 +648,53 @@ def create_app(args):
try:
if batch:
results = []
batch_results = []
batch_alternatives = []
for text in q:
translator = src_lang.get_translation(tgt_lang)
if translator is None:
abort(400, description=_("%(tname)s (%(tcode)s) is not available as a target language from %(sname)s (%(scode)s)", tname=_lazy(tgt_lang.name), tcode=tgt_lang.code, sname=_lazy(src_lang.name), scode=src_lang.code))
if text_format == "html":
translated_text = str(translate_html(translator, text))
translated_text = unescape(str(translate_html(translator, text)))
alternatives = [] # Not supported for html yet
else:
translated_text = improve_translation_formatting(text, translator.translate(text))
hypotheses = translator.hypotheses(text, num_alternatives + 1)
translated_text = unescape(improve_translation_formatting(text, hypotheses[0].value))
alternatives = filter_unique([unescape(improve_translation_formatting(text, hypotheses[i].value)) for i in range(1, len(hypotheses))], translated_text)
batch_results.append(translated_text)
batch_alternatives.append(alternatives)
result = {"translatedText": batch_results}
results.append(unescape(translated_text))
if source_lang == "auto":
return jsonify(
{
"translatedText": results,
"detectedLanguage": [detected_src_lang] * len(q)
}
)
else:
return jsonify(
{
"translatedText": results
}
)
result["detectedLanguage"] = [detected_src_lang] * len(q)
if num_alternatives > 0:
result["alternatives"] = batch_alternatives
return jsonify(result)
else:
translator = src_lang.get_translation(tgt_lang)
if translator is None:
abort(400, description=_("%(tname)s (%(tcode)s) is not available as a target language from %(sname)s (%(scode)s)", tname=_lazy(tgt_lang.name), tcode=tgt_lang.code, sname=_lazy(src_lang.name), scode=src_lang.code))
if text_format == "html":
translated_text = str(translate_html(translator, q))
translated_text = unescape(str(translate_html(translator, q)))
alternatives = [] # Not supported for html yet
else:
translated_text = improve_translation_formatting(q, translator.translate(q))
hypotheses = translator.hypotheses(q, num_alternatives + 1)
translated_text = unescape(improve_translation_formatting(q, hypotheses[0].value))
alternatives = filter_unique([unescape(improve_translation_formatting(q, hypotheses[i].value)) for i in range(1, len(hypotheses))], translated_text)
result = {"translatedText": translated_text}
if source_lang == "auto":
return jsonify(
{
"translatedText": unescape(translated_text),
"detectedLanguage": detected_src_lang
}
)
else:
return jsonify(
{
"translatedText": unescape(translated_text)
}
)
result["detectedLanguage"] = detected_src_lang
if num_alternatives > 0:
result["alternatives"] = alternatives
return jsonify(result)
except Exception as e:
raise e
abort(500, description=_("Cannot translate text: %(text)s", text=str(e)))

View file

@ -161,6 +161,11 @@ _default_options_objects = [
'default_value': None,
'value_type': 'str'
},
{
'name': 'ALTERNATIVES_LIMIT',
'default_value': -1,
'value_type': 'int'
},
{
'name': 'THREADS',
'default_value': 4,

View file

@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: LibreTranslate 1.3.9\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2023-10-09 15:17-0400\n"
"PO-Revision-Date: 2024-03-25 12:01+0000\n"
"Last-Translator: cat <158170307+cultcats@users.noreply.github.com>\n"
"PO-Revision-Date: 2024-06-09 17:09+0000\n"
"Last-Translator: Luna <social.pvxuu@slmail.me>\n"
"Language-Team: Danish <https://hosted.weblate.org/projects/libretranslate/"
"app/da/>\n"
"Language: da\n"
@ -18,16 +18,16 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.5-dev\n"
"X-Generator: Weblate 5.6-dev\n"
"Generated-By: Babel 2.12.1\n"
#: libretranslate/app.py:79
msgid "Invalid JSON format"
msgstr "Ugyldig JSON format"
msgstr "Ugyldigt JSON-format"
#: libretranslate/app.py:149 libretranslate/templates/app.js.template:459
msgid "Auto Detect"
msgstr "Auto detektor"
msgstr "Auto-registrer"
#: libretranslate/app.py:232
msgid "Unauthorized"
@ -52,7 +52,7 @@ msgstr "Besøg %(url)s for at få en API-nøgle"
#: libretranslate/app.py:318
msgid "Slowdown:"
msgstr "Nedbremsning:"
msgstr "Nedsættelse:"
#: libretranslate/app.py:525 libretranslate/app.py:527
#: libretranslate/app.py:529 libretranslate/app.py:741
@ -80,7 +80,7 @@ msgstr "%(lang)s understøttes ikke"
#: libretranslate/app.py:594
#, python-format
msgid "%(format)s format is not supported"
msgstr "%(format)s format understøttes ikke"
msgstr "%(format)s-format understøttes ikke"
#: libretranslate/app.py:602 libretranslate/app.py:626
#, python-format
@ -98,7 +98,7 @@ msgstr "Kan ikke oversætte tekst: %(text)s"
#: libretranslate/app.py:734 libretranslate/app.py:788
msgid "Files translation are disabled on this server."
msgstr "File oversættelse er deaktiveret på denne server."
msgstr "Oversættelse af filer er deaktiveret på denne server."
#: libretranslate/app.py:748
msgid "Invalid request: empty file"
@ -278,7 +278,7 @@ msgstr "Hej verden!"
#: libretranslate/locales/.swag.py:11
msgid "Text(s) to translate"
msgstr "Tekst(er) til oversættelse"
msgstr "Tekst(er) at oversætte"
#: libretranslate/locales/.swag.py:12
msgid "Source language code"
@ -303,8 +303,8 @@ msgid ""
" * `html` - HTML markup\n"
msgstr ""
"Format af kildetekst:\n"
"* 'tekst' - almindelig tekst\n"
"* `html' - HTML-markup\n"
" * `tekst` - Almindelig tekst\n"
" * `html` - HTML-markup\n"
#: libretranslate/locales/.swag.py:17
msgid "API key"
@ -336,7 +336,7 @@ msgstr "Registreringsfejl"
#: libretranslate/locales/.swag.py:24
msgid "Text to detect"
msgstr "Tekst at finde"
msgstr "Tekst at registrere"
#: libretranslate/locales/.swag.py:25
msgid "Retrieve frontend specific settings"
@ -344,11 +344,11 @@ msgstr "Hent frontend-specifikke indstillinger"
#: libretranslate/locales/.swag.py:26
msgid "frontend settings"
msgstr "frontend indstillinger"
msgstr "frontend-indstillinger"
#: libretranslate/locales/.swag.py:27
msgid "frontend"
msgstr "grænseflade"
msgstr "frontend"
#: libretranslate/locales/.swag.py:28
msgid "Submit a suggestion to improve a translation"
@ -408,7 +408,7 @@ msgstr "Årsag til nedbremsning"
#: libretranslate/locales/.swag.py:42
msgid "Translated file url"
msgstr "Oversat fil-url"
msgstr "Oversat fil-URL"
#: libretranslate/locales/.swag.py:43
msgid "Confidence value"
@ -446,7 +446,7 @@ msgstr "Om indsendelse var vellykket"
#: libretranslate/templates/app.js.template:286
#: libretranslate/templates/app.js.template:290
msgid "Copy text"
msgstr "Kopier tekst"
msgstr "Kopiér tekst"
#: libretranslate/templates/app.js.template:80
#: libretranslate/templates/app.js.template:86
@ -475,8 +475,7 @@ msgid ""
"Thanks for your correction. Note the suggestion will not take effect "
"right away."
msgstr ""
"Tak for din rettelse. Bemærk, at forslaget ikke vil træde i kraft med det "
"samme."
"Tak for din rettelse. Bemærk, at forslaget ikke træder i kraft med det samme."
#: libretranslate/templates/app.js.template:455
msgid "No languages available. Did you install the models correctly?"
@ -520,7 +519,7 @@ msgstr "api"
#: libretranslate/templates/index.html:65
msgid "API Docs"
msgstr "API Docs"
msgstr "API-dokumenter"
#: libretranslate/templates/index.html:67
msgid "Get API Key"
@ -588,7 +587,7 @@ msgstr "Foreslå oversættelse"
#: libretranslate/templates/index.html:230
msgid "Cancel"
msgstr "annullere"
msgstr "Annuller"
#: libretranslate/templates/index.html:233
msgid "Send"

View file

@ -9,24 +9,25 @@ msgstr ""
"Project-Id-Version: LibreTranslate 1.3.9\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2023-10-09 15:17-0400\n"
"PO-Revision-Date: 2023-09-06 11:02+0000\n"
"Last-Translator: Reza Almanda <rezaalmanda27@gmail.com>\n"
"PO-Revision-Date: 2024-06-08 12:27+0000\n"
"Last-Translator: Wahyu Hamdani <mrhamdani0101@gmail.com>\n"
"Language-Team: Indonesian <https://hosted.weblate.org/projects/"
"libretranslate/app/id/>\n"
"Language: id\n"
"Language-Team: Indonesian "
"<https://hosted.weblate.org/projects/libretranslate/app/id/>\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.6-dev\n"
"Generated-By: Babel 2.12.1\n"
#: libretranslate/app.py:79
msgid "Invalid JSON format"
msgstr "Format JSON tidak valid"
msgstr "Format JSON tidak sah"
#: libretranslate/app.py:149 libretranslate/templates/app.js.template:459
msgid "Auto Detect"
msgstr "Deteksi Otomatis"
msgstr "Mendeteksi Otomatis"
#: libretranslate/app.py:232
msgid "Unauthorized"
@ -669,4 +670,3 @@ msgstr "Kontributor %(libretranslate)s"
#~ msgid "multipart/form-data"
#~ msgstr "multipart/form-data"

View file

@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: LibreTranslate 1.3.9\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2023-10-09 15:17-0400\n"
"PO-Revision-Date: 2023-12-16 08:07+0000\n"
"Last-Translator: tuanta <tuanta@skiff.com>\n"
"PO-Revision-Date: 2024-06-14 16:33+0000\n"
"Last-Translator: Dương Nguyễn Võ Quốc <nguyenquocduong380@gmail.com>\n"
"Language-Team: Vietnamese <https://hosted.weblate.org/projects/"
"libretranslate/app/vi/>\n"
"Language: vi\n"
@ -18,12 +18,12 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.3\n"
"X-Generator: Weblate 5.6-dev\n"
"Generated-By: Babel 2.12.1\n"
#: libretranslate/app.py:79
msgid "Invalid JSON format"
msgstr "Định dạng JSON không hợp lệ"
msgstr "Không đúng định dạng dữ liệu JSON"
#: libretranslate/app.py:149 libretranslate/templates/app.js.template:459
msgid "Auto Detect"
@ -31,7 +31,7 @@ msgstr "Tự động phát hiện"
#: libretranslate/app.py:232
msgid "Unauthorized"
msgstr "Không được phép"
msgstr "Truy cập không hợp lệ."
#: libretranslate/app.py:250
msgid "Too many request limits violations"
@ -181,7 +181,7 @@ msgstr "Indonesia"
#: libretranslate/locales/.langs.py:17
msgid "Irish"
msgstr "Ireland"
msgstr "irish"
#: libretranslate/locales/.langs.py:18
msgid "Italian"
@ -225,7 +225,7 @@ msgstr "Thụy Điển"
#: libretranslate/locales/.langs.py:28
msgid "Turkish"
msgstr "Thổ"
msgstr "Thổ nhỉ kỳ"
#: libretranslate/locales/.langs.py:29
msgid "Ukranian"
@ -233,7 +233,7 @@ msgstr "Ukraina"
#: libretranslate/locales/.langs.py:30
msgid "Vietnamese"
msgstr "Việt Nam"
msgstr "Tiếng Việt"
#: libretranslate/locales/.swag.py:1
msgid "Retrieve list of supported languages"
@ -249,11 +249,11 @@ msgstr "dịch"
#: libretranslate/locales/.swag.py:4
msgid "Translate text from a language to another"
msgstr "Dịch ngôn ngữ sang ngôn ngữ khác"
msgstr "Dịch từ sang một ngôn ngữ khác"
#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:222
msgid "Translated text"
msgstr "Văn bản dịch"
msgstr "Văn bản đã dịch"
#: libretranslate/locales/.swag.py:6
msgid "Invalid request"
@ -277,7 +277,7 @@ msgstr "Xin chào thế giới!"
#: libretranslate/locales/.swag.py:11
msgid "Text(s) to translate"
msgstr "Chữ để dịch"
msgstr "(Các) văn bản cần dịch"
#: libretranslate/locales/.swag.py:12
msgid "Source language code"
@ -387,7 +387,7 @@ msgstr "Mã ngôn ngữ"
#: libretranslate/locales/.swag.py:37
msgid "Human-readable language name (in English)"
msgstr "Tên ngôn ngữ (để người đọc)"
msgstr "Tên ngôn ngữ con người có thể đọc được (bằng tiếng Anh)"
#: libretranslate/locales/.swag.py:38
msgid "Supported target language codes"
@ -395,7 +395,7 @@ msgstr "Các mã ngôn ngữ đích được hỗ trợ"
#: libretranslate/locales/.swag.py:39
msgid "Translated text(s)"
msgstr "Chữ đã dịch"
msgstr "(Các) văn bản đã dịch"
#: libretranslate/locales/.swag.py:40
msgid "Error message"
@ -445,7 +445,7 @@ msgstr "Đã gửi thành công hay chưa"
#: libretranslate/templates/app.js.template:286
#: libretranslate/templates/app.js.template:290
msgid "Copy text"
msgstr "Copy chữ"
msgstr "Sao chép chữ"
#: libretranslate/templates/app.js.template:80
#: libretranslate/templates/app.js.template:86
@ -467,7 +467,7 @@ msgstr "Lỗi không rõ"
#: libretranslate/templates/app.js.template:287
msgid "Copied"
msgstr "Đã copy"
msgstr "Đã sao chép"
#: libretranslate/templates/app.js.template:331
msgid ""
@ -477,7 +477,8 @@ msgstr "Cảm ơn đã sửa. Lưu ý đề xuất sẽ không có tác dụng n
#: libretranslate/templates/app.js.template:455
msgid "No languages available. Did you install the models correctly?"
msgstr "Không có ngôn ngữ nào. Bạn đã cài đặt các bản mẫu (model) đúng chưa?"
msgstr ""
"Không có ngôn ngữ có sẵn. Bạn đã cài đặt các mô hình một cách chính xác?"
#: libretranslate/templates/app.js.template:522
#, python-format
@ -486,7 +487,7 @@ msgstr "Nhập mã API của bạn. Nếu bạn cần lấy mã API, %(instructi
#: libretranslate/templates/app.js.template:522
msgid "press the \"Get API Key\" link."
msgstr "nhấn liên kết \"Lấy khóa\"."
msgstr "nhấn liên kết \"Lấy mã API\"."
#: libretranslate/templates/app.js.template:522
msgid "contact the server operator."
@ -504,8 +505,8 @@ msgid ""
"Free and Open Source Machine Translation API. Self-hosted, offline capable "
"and easy to setup. Run your own API server in just a few minutes."
msgstr ""
"API dịch thuật máy miễn phí và nguồn mở. Tự host, có thể sử dụng offline và "
"dễ cài đặt. Tự chạy máy chủ API của bạn chỉ trong vài phút."
"API dịch thuật máy miễn phí và nguồn mở. Tự lưu trữ, có thể sử dụng ngoại "
"tuyến và dễ cài đặt. Tự chạy máy chủ API của bạn chỉ trong vài phút."
#: libretranslate/templates/index.html:11
msgid "translation"
@ -553,7 +554,7 @@ msgstr "API dịch"
#: libretranslate/templates/index.html:175
msgid "Translate Text"
msgstr "Chữ được dịch"
msgstr "Dịch văn bản"
#: libretranslate/templates/index.html:179
msgid "Translate Files"
@ -565,7 +566,7 @@ msgstr "Dịch từ"
#: libretranslate/templates/index.html:195
msgid "Swap source and target languages"
msgstr "Đổi ngôn ngữ nguồn và đích"
msgstr "Hoán đổi ngôn ngữ nguồn và đích"
#: libretranslate/templates/index.html:198
msgid "Translate into"
@ -644,12 +645,12 @@ msgid ""
"%(get_api_key)s."
msgstr ""
"API công khai này chỉ nên dùng để thử nghiệm, sử dụng cá nhân hay không "
"thường xuyên. Nếu bạn muốn sử dụng cho mục đích khác, hãy %(host_server)s "
"hoặc %(get_api_key)s."
"thường xuyên. Nếu bạn muốn chạy ứng dụng cho quá trình sản xuất, hãy "
"%(host_server)s hoặc %(get_api_key)s."
#: libretranslate/templates/index.html:340
msgid "host your own server"
msgstr "tự lưu máy chủ của chính bạn"
msgstr "lưu trữ máy chủ của chính bạn"
#: libretranslate/templates/index.html:340
msgid "get an API key"

View file

@ -161,6 +161,13 @@ def get_args():
metavar="<comma-separated language codes>",
help="Set available languages (ar,de,en,es,fr,ga,hi,it,ja,ko,pt,ru,zh)",
)
parser.add_argument(
"--alternatives-limit",
default=DEFARGS['ALTERNATIVES_LIMIT'],
type=int,
metavar="<maximum number of alternatives translations>",
help="Set the maximum number of supported alternative translations (%(default)s)",
)
parser.add_argument(
"--threads",
default=DEFARGS['THREADS'],

View file

@ -134,6 +134,7 @@ document.addEventListener('DOMContentLoaded', function(){
' source: ' + this.$options.filters.escape(this.sourceLang) + ',',
' target: ' + this.$options.filters.escape(this.targetLang) + ',',
' format: "' + (this.isHtml ? "html" : "text") + '",',
' alternatives: 3,',
' api_key: "' + (localStorage.getItem("api_key") || "") + '"',
' }),',
' headers: { "Content-Type": "application/json" }',
@ -241,6 +242,7 @@ document.addEventListener('DOMContentLoaded', function(){
data.append("source", self.sourceLang);
data.append("target", self.targetLang);
data.append("format", self.isHtml ? "html" : "text");
data.append("alternatives", 3);
data.append("api_key", localStorage.getItem("api_key") || "");
if (self.apiSecret) data.append("secret", self.apiSecret);

View file

@ -33,7 +33,7 @@ classifiers = [
dynamic = ["version"]
dependencies = [
"argostranslate ==1.9.1",
"argostranslate ==1.9.6",
"Flask ==2.2.5",
"flask-swagger ==0.2.14",
"flask-swagger-ui ==4.11.1",