mirror of
https://github.com/LibreTranslate/LibreTranslate.git
synced 2026-04-10 03:01:53 -04:00
Merge pull request #935 from LibreTranslate/copilot/fix-auto-detect-portuguese
Add language variant fallback for Portuguese Auto Detect
This commit is contained in:
commit
e7a6804360
@ -23,7 +23,7 @@ from werkzeug.http import http_date
|
||||
from werkzeug.utils import secure_filename
|
||||
|
||||
from libretranslate import flood, remove_translated_files, scheduler, secret, security, storage, cache
|
||||
from libretranslate.language import model2iso, iso2model, detect_languages, improve_translation_formatting
|
||||
from libretranslate.language import model2iso, iso2model, detect_languages, improve_translation_formatting, get_language_with_fallback
|
||||
from libretranslate.locales import (
|
||||
_,
|
||||
_lazy,
|
||||
@ -789,17 +789,18 @@ def create_app(args):
|
||||
if source_lang == "auto":
|
||||
candidate_langs = detect_languages(src_texts)
|
||||
detected_src_lang = candidate_langs[0]
|
||||
src_lang = get_language_with_fallback(detected_src_lang["language"], languages)
|
||||
else:
|
||||
detected_src_lang = {"confidence": 100.0, "language": source_lang}
|
||||
src_lang = next((l for l in languages if l.code == source_lang), None)
|
||||
else:
|
||||
detected_src_lang = {"confidence": 0.0, "language": "en"}
|
||||
|
||||
src_lang = next(iter([l for l in languages if l.code == detected_src_lang["language"]]), None)
|
||||
src_lang = next((l for l in languages if l.code == "en"), None)
|
||||
|
||||
if src_lang is None:
|
||||
abort(400, description=_("%(lang)s is not supported", lang=source_lang))
|
||||
|
||||
tgt_lang = next(iter([l for l in languages if l.code == target_lang]), None)
|
||||
tgt_lang = next((l for l in languages if l.code == target_lang), None)
|
||||
|
||||
if tgt_lang is None:
|
||||
abort(400, description=_("%(lang)s is not supported",lang=target_lang))
|
||||
@ -977,12 +978,12 @@ def create_app(args):
|
||||
if os.path.splitext(file.filename)[1] not in frontend_argos_supported_files_format:
|
||||
abort(400, description=_("Invalid request: file format not supported"))
|
||||
|
||||
src_lang = next(iter([l for l in languages if l.code == source_lang]), None)
|
||||
src_lang = next((l for l in languages if l.code == source_lang), None)
|
||||
|
||||
if src_lang is None and source_lang != "auto":
|
||||
abort(400, description=_("%(lang)s is not supported", lang=source_lang))
|
||||
|
||||
tgt_lang = next(iter([l for l in languages if l.code == target_lang]), None)
|
||||
tgt_lang = next((l for l in languages if l.code == target_lang), None)
|
||||
|
||||
if tgt_lang is None:
|
||||
abort(400, description=_("%(lang)s is not supported", lang=target_lang))
|
||||
@ -1005,7 +1006,7 @@ def create_app(args):
|
||||
src_texts = argostranslatefiles.get_texts(filepath)
|
||||
candidate_langs = detect_languages(src_texts)
|
||||
detected_src_lang = candidate_langs[0]
|
||||
src_lang = next(iter([l for l in languages if l.code == detected_src_lang["language"]]), None)
|
||||
src_lang = get_language_with_fallback(detected_src_lang["language"], languages)
|
||||
if src_lang is None:
|
||||
abort(400, description=_("%(lang)s is not supported", lang=detected_src_lang["language"]))
|
||||
|
||||
|
||||
@ -47,6 +47,26 @@ def load_lang_codes():
|
||||
languages = load_languages()
|
||||
return tuple(l.code for l in languages)
|
||||
|
||||
def get_language_with_fallback(lang_code, languages):
|
||||
lang = next((l for l in languages if l.code == lang_code), None)
|
||||
if lang is not None:
|
||||
return lang
|
||||
|
||||
language_variants = {
|
||||
'pt': ['pb'],
|
||||
'pb': ['pt'],
|
||||
'zh': ['zt'],
|
||||
'zt': ['zh']
|
||||
}
|
||||
|
||||
fallbacks = language_variants.get(lang_code, [])
|
||||
for fallback_code in fallbacks:
|
||||
fallback_lang = next((l for l in languages if l.code == fallback_code), None)
|
||||
if fallback_lang is not None:
|
||||
return fallback_lang
|
||||
|
||||
return None
|
||||
|
||||
def detect_languages(text):
|
||||
# detect batch processing
|
||||
if isinstance(text, list):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user