feat(translation): 添加非实时翻译功能用户界面组件

This commit is contained in:
himeditator
2025-09-04 23:41:22 +08:00
parent 14987cbfc5
commit 2b7ce06f04
15 changed files with 193 additions and 77 deletions

View File

@@ -2,7 +2,7 @@ from ollama import chat
from ollama import ChatResponse
import asyncio
from googletrans import Translator
from .sysout import stdout, stdout_obj
from .sysout import stdout_cmd, stdout_obj
lang_map = {
'en': 'English',
@@ -13,38 +13,29 @@ lang_map = {
'ru': 'Russian',
'ja': 'Japanese',
'ko': 'Korean',
'zh': 'Chinese'
'zh-cn': 'Chinese'
}
def ollama_translate(model: str, target: str, text: str, chunk_size = 3):
stream = chat(
def ollama_translate(model: str, target: str, text: str, time_s: str):
response: ChatResponse = chat(
model=model,
messages=[
{"role": "system", "content": f"/no_think Translate the following content into {lang_map[target]}, and do not output any additional information."},
{"role": "user", "content": text}
],
stream=True
]
)
chunk_content = ""
in_thinking = False
count = 0
for chunk in stream:
if count == 0 and chunk['message']['content'].startswith("<think>"):
in_thinking = True
if in_thinking:
if "</think>" in chunk['message']['content']:
in_thinking = False
continue
chunk_content += ' '.join(chunk['message']['content'].split('\n'))
count += 1
if count % chunk_size == 0:
print(chunk_content, end='')
chunk_content = ""
count = 0
if chunk_content:
print(chunk_content)
content = response.message.content or ""
if content.startswith('<think>'):
index = content.find('</think>')
if index != -1:
content = content[index+8:]
stdout_obj({
"command": "translation",
"time_s": time_s,
"translation": content.strip()
})
def google_translate(text: str, target: str, time_s: str):
def google_translate(model: str, target: str, text: str, time_s: str):
translator = Translator()
try:
res = asyncio.run(translator.translate(text, dest=target))
@@ -54,4 +45,4 @@ def google_translate(text: str, target: str, time_s: str):
"translation": res.text
})
except Exception as e:
stdout(f"Google Translation Request failed: {str(e)}")
stdout_cmd("warn", f"Google translation request failed, please check your network connection...")