mirror of
https://github.com/LibreTranslate/LibreTranslate.git
synced 2025-04-20 05:49:16 +00:00
Merge pull request #780 from pierotofy/iso
Support for ISO 639-1 - 15924 codes
This commit is contained in:
commit
c6aee2bf97
4 changed files with 48 additions and 19 deletions
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
1.6.5
|
1.7.0
|
||||||
|
|
|
@ -22,7 +22,7 @@ from werkzeug.http import http_date
|
||||||
from werkzeug.utils import secure_filename
|
from werkzeug.utils import secure_filename
|
||||||
|
|
||||||
from libretranslate import flood, remove_translated_files, scheduler, secret, security, storage
|
from libretranslate import flood, remove_translated_files, scheduler, secret, security, storage
|
||||||
from libretranslate.language import detect_languages, improve_translation_formatting
|
from libretranslate.language import model2iso, iso2model, detect_languages, improve_translation_formatting
|
||||||
from libretranslate.locales import (
|
from libretranslate.locales import (
|
||||||
_,
|
_,
|
||||||
_lazy,
|
_lazy,
|
||||||
|
@ -499,7 +499,10 @@ def create_app(args):
|
||||||
type: string
|
type: string
|
||||||
description: Supported target language codes
|
description: Supported target language codes
|
||||||
"""
|
"""
|
||||||
return jsonify([{"code": l.code, "name": _lazy(l.name), "targets": language_pairs.get(l.code, [])} for l in languages])
|
return jsonify([{"code": model2iso(l.code),
|
||||||
|
"name": _lazy(l.name),
|
||||||
|
"targets": model2iso(language_pairs.get(l.code, []))
|
||||||
|
} for l in languages])
|
||||||
|
|
||||||
# Add cors
|
# Add cors
|
||||||
@bp.after_request
|
@bp.after_request
|
||||||
|
@ -626,14 +629,14 @@ def create_app(args):
|
||||||
if request.is_json:
|
if request.is_json:
|
||||||
json = get_json_dict(request)
|
json = get_json_dict(request)
|
||||||
q = json.get("q")
|
q = json.get("q")
|
||||||
source_lang = json.get("source")
|
source_lang = iso2model(json.get("source"))
|
||||||
target_lang = json.get("target")
|
target_lang = iso2model(json.get("target"))
|
||||||
text_format = json.get("format")
|
text_format = json.get("format")
|
||||||
num_alternatives = int(json.get("alternatives", 0))
|
num_alternatives = int(json.get("alternatives", 0))
|
||||||
else:
|
else:
|
||||||
q = request.values.get("q")
|
q = request.values.get("q")
|
||||||
source_lang = request.values.get("source")
|
source_lang = iso2model(request.values.get("source"))
|
||||||
target_lang = request.values.get("target")
|
target_lang = iso2model(request.values.get("target"))
|
||||||
text_format = request.values.get("format")
|
text_format = request.values.get("format")
|
||||||
num_alternatives = request.values.get("alternatives", 0)
|
num_alternatives = request.values.get("alternatives", 0)
|
||||||
|
|
||||||
|
@ -689,7 +692,7 @@ def create_app(args):
|
||||||
candidate_langs = detect_languages(src_texts)
|
candidate_langs = detect_languages(src_texts)
|
||||||
detected_src_lang = candidate_langs[0]
|
detected_src_lang = candidate_langs[0]
|
||||||
else:
|
else:
|
||||||
detected_src_lang = {"confidence": 100.0, "language": source_lang}
|
detected_src_lang = {"confidence": 100.0, "language": model2iso(source_lang)}
|
||||||
else:
|
else:
|
||||||
detected_src_lang = {"confidence": 0.0, "language": "en"}
|
detected_src_lang = {"confidence": 0.0, "language": "en"}
|
||||||
|
|
||||||
|
@ -736,7 +739,7 @@ def create_app(args):
|
||||||
result = {"translatedText": batch_results}
|
result = {"translatedText": batch_results}
|
||||||
|
|
||||||
if source_lang == "auto":
|
if source_lang == "auto":
|
||||||
result["detectedLanguage"] = [detected_src_lang] * len(q)
|
result["detectedLanguage"] = [model2iso(detected_src_lang)] * len(q)
|
||||||
if num_alternatives > 0:
|
if num_alternatives > 0:
|
||||||
result["alternatives"] = batch_alternatives
|
result["alternatives"] = batch_alternatives
|
||||||
|
|
||||||
|
@ -761,7 +764,7 @@ def create_app(args):
|
||||||
result = {"translatedText": translated_text}
|
result = {"translatedText": translated_text}
|
||||||
|
|
||||||
if source_lang == "auto":
|
if source_lang == "auto":
|
||||||
result["detectedLanguage"] = detected_src_lang
|
result["detectedLanguage"] = model2iso(detected_src_lang)
|
||||||
if num_alternatives > 0:
|
if num_alternatives > 0:
|
||||||
result["alternatives"] = alternatives
|
result["alternatives"] = alternatives
|
||||||
|
|
||||||
|
@ -857,8 +860,8 @@ def create_app(args):
|
||||||
if args.disable_files_translation:
|
if args.disable_files_translation:
|
||||||
abort(403, description=_("Files translation are disabled on this server."))
|
abort(403, description=_("Files translation are disabled on this server."))
|
||||||
|
|
||||||
source_lang = request.form.get("source")
|
source_lang = iso2model(request.form.get("source"))
|
||||||
target_lang = request.form.get("target")
|
target_lang = iso2model(request.form.get("target"))
|
||||||
file = request.files['file']
|
file = request.files['file']
|
||||||
char_limit = get_char_limit(args.char_limit, api_keys_db)
|
char_limit = get_char_limit(args.char_limit, api_keys_db)
|
||||||
|
|
||||||
|
@ -1034,7 +1037,7 @@ def create_app(args):
|
||||||
if not q:
|
if not q:
|
||||||
abort(400, description=_("Invalid request: missing %(name)s parameter", name='q'))
|
abort(400, description=_("Invalid request: missing %(name)s parameter", name='q'))
|
||||||
|
|
||||||
return jsonify(detect_languages(q))
|
return jsonify(model2iso(detect_languages(q)))
|
||||||
|
|
||||||
@bp.route("/frontend/settings")
|
@bp.route("/frontend/settings")
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
|
@ -1180,13 +1183,13 @@ def create_app(args):
|
||||||
json = get_json_dict(request)
|
json = get_json_dict(request)
|
||||||
q = json.get("q")
|
q = json.get("q")
|
||||||
s = json.get("s")
|
s = json.get("s")
|
||||||
source_lang = json.get("source")
|
source_lang = iso2model(json.get("source"))
|
||||||
target_lang = json.get("target")
|
target_lang = iso2model(json.get("target"))
|
||||||
else:
|
else:
|
||||||
q = request.values.get("q")
|
q = request.values.get("q")
|
||||||
s = request.values.get("s")
|
s = request.values.get("s")
|
||||||
source_lang = request.values.get("source")
|
source_lang = iso2model(request.values.get("source"))
|
||||||
target_lang = request.values.get("target")
|
target_lang = iso2model(request.values.get("target"))
|
||||||
|
|
||||||
if not q:
|
if not q:
|
||||||
abort(400, description=_("Invalid request: missing %(name)s parameter", name='q'))
|
abort(400, description=_("Invalid request: missing %(name)s parameter", name='q'))
|
||||||
|
|
|
@ -21,9 +21,11 @@ def check_lang(langcodes, lang):
|
||||||
|
|
||||||
def normalized_lang_code(lang):
|
def normalized_lang_code(lang):
|
||||||
code = lang.lang
|
code = lang.lang
|
||||||
# Handle zh-cn
|
# Handle Chinese
|
||||||
if code.startswith("zh"):
|
if code == "zh-cn":
|
||||||
code = "zh"
|
code = "zh"
|
||||||
|
elif code == "zh-tw":
|
||||||
|
code = "zt"
|
||||||
return code
|
return code
|
||||||
|
|
||||||
class Detector:
|
class Detector:
|
||||||
|
|
|
@ -6,6 +6,30 @@ from argostranslate import translate
|
||||||
from libretranslate.detect import Detector
|
from libretranslate.detect import Detector
|
||||||
|
|
||||||
__languages = None
|
__languages = None
|
||||||
|
aliases = {
|
||||||
|
'pb': 'pt-BR',
|
||||||
|
'zh': 'zh-Hans',
|
||||||
|
'zt': 'zh-Hant',
|
||||||
|
}
|
||||||
|
rev_aliases = {v.lower(): k for k, v in aliases.items()}
|
||||||
|
|
||||||
|
def iso2model(lang):
|
||||||
|
if not isinstance(lang, str):
|
||||||
|
return lang
|
||||||
|
|
||||||
|
lang = lang.lower()
|
||||||
|
return rev_aliases.get(lang, lang)
|
||||||
|
|
||||||
|
def model2iso(lang):
|
||||||
|
if isinstance(lang, dict) and 'language' in lang:
|
||||||
|
d = dict(lang)
|
||||||
|
d['language'] = model2iso(d['language'])
|
||||||
|
return d
|
||||||
|
elif isinstance(lang, list):
|
||||||
|
return [model2iso(l) for l in lang]
|
||||||
|
|
||||||
|
lang = lang.lower()
|
||||||
|
return aliases.get(lang, lang)
|
||||||
|
|
||||||
def load_languages():
|
def load_languages():
|
||||||
global __languages
|
global __languages
|
||||||
|
|
Loading…
Add table
Reference in a new issue