From 6da55cc52d471c6d6b4d357257a550899d905502 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Thuret?= Date: Sat, 11 Sep 2021 14:58:45 +0200 Subject: [PATCH 1/3] Add translatehtml as requirement --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 474456c..da91689 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,3 +11,4 @@ morfessor==2.0.6 polyglot==16.7.4 appdirs==1.4.4 APScheduler==3.7.0 +translatehtml==1.5.1 \ No newline at end of file From 0a7c8ebae975586ad9e500b0db9c9cc85bfc5984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Thuret?= Date: Sat, 11 Sep 2021 15:08:57 +0200 Subject: [PATCH 2/3] Add html translation --- app/app.py | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/app/app.py b/app/app.py index df00f76..19bb846 100644 --- a/app/app.py +++ b/app/app.py @@ -10,6 +10,7 @@ from app.language import detect_languages, transliterate from .api_keys import Database +from translatehtml import translate_html def get_json_dict(request): d = request.get_json() @@ -262,6 +263,13 @@ def create_app(args): example: es required: true description: Target language code + - in: formData + name: format + schema: + type: string + example: html or text + required: false + description: The format of the source text - in: formData name: api_key schema: @@ -323,10 +331,12 @@ def create_app(args): q = json.get("q") source_lang = json.get("source") target_lang = json.get("target") + text_format = json.get("format") else: q = request.values.get("q") source_lang = request.values.get("source") target_lang = request.values.get("target") + text_format = request.values.get("format") if not q: abort(400, description="Invalid request: missing q parameter") @@ -396,14 +406,25 @@ def create_app(args): if tgt_lang is None: abort(400, description="%s is not supported" % target_lang) + if not text_format: + text_format = "text" + + if text_format not in ["text", "html"]: + abort(400, description="%s format is not supported" % text_format) + + try: if batch: results = [] for idx, text in enumerate(q): translator = src_langs[idx].get_translation(tgt_lang) - results.append(translator.translate( - transliterate(text, target_lang=source_langs[idx]) - )) + + if text_format == "html": + translated_text = str(translate_html(translator, transliterate(text, target_lang=source_langs[idx]))) + else: + translated_text = translator.translate(transliterate(text, target_lang=source_langs[idx])) + + results.append(translated_text) return jsonify( { "translatedText": results @@ -411,11 +432,14 @@ def create_app(args): ) else: translator = src_langs[0].get_translation(tgt_lang) + + if text_format == "html": + translated_text = str(translate_html(translator, transliterate(q, target_lang=source_langs[0]))) + else: + translated_text = translator.translate(transliterate(q, target_lang=source_langs[0])) return jsonify( { - "translatedText": translator.translate( - transliterate(q, target_lang=source_langs[0]) - ) + "translatedText": translated_text } ) except Exception as e: From a41f5671b02a4a6a6f31f7192f53b0bb7ca2407b Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Sat, 11 Sep 2021 16:02:10 -0400 Subject: [PATCH 3/3] Add HTML note in README, tweak swagger def --- README.md | 31 ++++++++++++++++++++++++++++++- app/app.py | 9 +++++++-- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index daad3d7..2883ab4 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,9 @@ Free and Open Source Machine Translation API, entirely self-hosted. Unlike other ## API Examples + +### Plain Text + Request: ```javascript @@ -36,6 +39,33 @@ Response: } ``` +### HTML + +Request: + +```javascript +const res = await fetch("https://libretranslate.com/translate", { + method: "POST", + body: JSON.stringify({ + q: 'Hello!', + source: "en", + target: "es", + format: "html" + }), + headers: { "Content-Type": "application/json" } +}); + +console.log(await res.json()); +``` + +Response: + +```javascript +{ + "translatedText": "¡Hola!" +} +``` + ## Install and Run You can run your own API server in just a few lines of setup! @@ -136,7 +166,6 @@ You can pass application arguments directly to Gunicorn via: gunicorn --bind 0.0.0.0:5000 'wsgi:app(api_keys=True)' ``` - ## Manage API Keys LibreTranslate supports per-user limit quotas, e.g. you can issue API keys to users so that they can enjoy higher requests limits per minute (if you also set `--req-limit`). By default all users are rate-limited based on `--req-limit`, but passing an optional `api_key` parameter to the REST endpoints allows a user to enjoy higher request limits. diff --git a/app/app.py b/app/app.py index 19bb846..8576996 100644 --- a/app/app.py +++ b/app/app.py @@ -267,9 +267,14 @@ def create_app(args): name: format schema: type: string - example: html or text + enum: [text, html] + default: text + example: text required: false - description: The format of the source text + description: > + Format of source text: + * `text` - Plain text + * `html` - HTML markup - in: formData name: api_key schema: