29 lines
825 B
Python
29 lines
825 B
Python
# -*- coding: utf-8 -*-
|
|
"""英译中,入库前统一翻译"""
|
|
import re
|
|
from typing import Optional
|
|
|
|
|
|
def _is_mostly_chinese(text: str) -> bool:
|
|
if not text or len(text.strip()) < 2:
|
|
return False
|
|
chinese = len(re.findall(r"[\u4e00-\u9fff]", text))
|
|
return chinese / max(len(text), 1) > 0.3
|
|
|
|
|
|
def translate_to_chinese(text: str) -> str:
|
|
"""将文本翻译成中文,失败或已是中文则返回原文。"""
|
|
if not text or not text.strip():
|
|
return text
|
|
s = str(text).strip()
|
|
if len(s) > 2000:
|
|
s = s[:2000]
|
|
if _is_mostly_chinese(s):
|
|
return text
|
|
try:
|
|
from deep_translator import GoogleTranslator
|
|
out = GoogleTranslator(source="auto", target="zh-CN").translate(s)
|
|
return out if out else text
|
|
except Exception:
|
|
return text
|