Files
wordloop/backend/services/translation_service.py
john e76fa586f1 Add word-book practice, iOS app shell, and fix embedded WebView blank screen.
Ship dual-track learning (daily accumulation vs textbook),沪教/商务词书 APIs and UI, native iOS wrapper with bundled H5, and production book import on deploy.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-06 21:09:27 +08:00

88 lines
2.4 KiB
Python

import re
from typing import Optional
from sqlalchemy.orm import Session
from services.dictionary_service import dictionary_service
def contains_chinese(text: str) -> bool:
return bool(re.search(r"[\u4e00-\u9fff]", text))
class TranslationService:
"""翻译服务:优先查离线词典表,未命中时返回占位结果(暂不接入外部 API)。"""
def translate(self, db: Session, text: str) -> dict:
text = text.strip()
if not text:
raise ValueError("输入不能为空")
if contains_chinese(text):
return self._zh_to_en(db, text)
return self._en_to_zh(db, text)
def _en_to_zh(self, db: Session, text: str) -> dict:
entry = dictionary_service.lookup_en(db, text)
if entry:
return self._build_response(
text,
entry.zh,
"en",
"zh",
entry.phonetic,
entry.example_en,
entry.example_cn,
)
return self._placeholder(text, "en", "zh")
def _zh_to_en(self, db: Session, text: str) -> dict:
entry = dictionary_service.lookup_zh(db, text)
if entry:
return self._build_response(
text,
entry.lemma_en,
"zh",
"en",
entry.phonetic,
entry.example_en,
entry.example_cn,
)
return self._placeholder(text, "zh", "en")
def _build_response(
self,
source: str,
target: str,
source_lang: str,
target_lang: str,
phonetic: Optional[str],
example_en: Optional[str],
example_cn: Optional[str],
) -> dict:
return {
"source_text": source,
"target_text": target,
"source_lang": source_lang,
"target_lang": target_lang,
"phonetic": phonetic,
"example_en": example_en,
"example_cn": example_cn,
"found": True,
}
def _placeholder(self, source: str, source_lang: str, target_lang: str) -> dict:
return {
"source_text": source,
"target_text": "",
"source_lang": source_lang,
"target_lang": target_lang,
"phonetic": None,
"example_en": None,
"example_cn": None,
"found": False,
}
translation_service = TranslationService()