优化翻译逻辑

This commit is contained in:
liuqianhonga
2025-05-10 22:19:40 +08:00
parent 12cd97223a
commit e653cab786
3 changed files with 61 additions and 51 deletions
+2 -2
View File
@@ -1,4 +1,4 @@
from ..translation_utils import TranslationUtils
from ..translation_utils import translate_texts
class ShowTranslateString:
@classmethod
@@ -32,6 +32,6 @@ class ShowTranslateString:
strings_to_translate = [str(input_strings)]
#逐个翻译每个字符串
translated_strings = TranslationUtils.translate_with_length_check(strings_to_translate, target_language)
translated_strings = translate_texts(strings_to_translate, target_language)
return {"ui": {"translated_strings": translated_strings}, "result": (translated_strings,)}
+3 -3
View File
@@ -2,7 +2,7 @@ import random
import os
import csv
import chardet
from ..translation_utils import TranslationUtils
from ..translation_utils import translate_texts
class BaseStringList:
"""Base class for string list operations"""
@@ -108,7 +108,7 @@ class BaseStringList:
def translate_strings(self, strings):
"""Translate a list of strings to English using Bing translator with auto language detection"""
try:
translated_strings = TranslationUtils.translate_with_length_check(strings, 'en')
translated_strings = translate_texts(strings, 'en')
return translated_strings
except Exception as e:
print(f"Translation error: {str(e)}")
@@ -453,7 +453,7 @@ class StringListToCSV(BaseStringList):
# Prepare rows for CSV
rows_to_write = []
for string_value in string_list:
zh_text = TranslationUtils.translate_with_length_check([string_value], 'zh')[0] if translate else ''
zh_text = translate_texts([string_value], 'zh')[0] if translate else ''
rows_to_write.append({
'string': string_value,
'zh': zh_text,
+56 -46
View File
@@ -1,49 +1,59 @@
import translators.server as tss
import translators as ts
import re
class TranslationUtils:
@staticmethod
def translate_with_length_check(strings, target_language):
translated_strings = []
for text in strings:
# Check if the string is too long and split if necessary
if len(text) > 500:
parts = text.split('\n') # Split by paragraphs
temp_translated_strings = []
for part in parts:
if len(part) > 500:
sub_parts = re.split(r'(?<=[.!?]) +', part) # Split long paragraphs by sentences
for sub_part in sub_parts:
if len(sub_part) > 500:
sub_sub_parts = [sub_part[i:i+500] for i in range(0, len(sub_part), 500)]
for sub_sub_part in sub_sub_parts:
try:
translated_string = tss.bing(sub_sub_part, from_language='auto', to_language=target_language)
temp_translated_strings.append(translated_string)
except Exception as e:
temp_translated_strings.append(f"Translation error: {str(e)}")
else:
try:
translated_string = tss.bing(sub_part, from_language='auto', to_language=target_language)
temp_translated_strings.append(translated_string)
except Exception as e:
temp_translated_strings.append(f"Translation error: {str(e)}")
else:
try:
translated_string = tss.bing(part, from_language='auto', to_language=target_language)
temp_translated_strings.append(translated_string)
except Exception as e:
temp_translated_strings.append(f"Translation error: {str(e)}")
# Merge translated strings if they were split
if len(temp_translated_strings) > 1:
translated_strings.append(' '.join(temp_translated_strings))
else:
translated_strings.append(temp_translated_strings[0] if temp_translated_strings else '')
else:
try:
translated_string = tss.bing(text, from_language='auto', to_language=target_language)
translated_strings.append(translated_string)
except Exception as e:
translated_strings.append(f"Translation error: {str(e)}")
def split_text_for_translation(text):
"""
按段落和完整句子拆分文本,返回句子列表(保持原有段落结构)。
"""
paragraphs = text.split('\n')
split_paragraphs = []
# 句子分隔符:句号、问号、感叹号(中英文)
sentence_pattern = re.compile(r'([^。!?!?\r\n]+[。!?!?])', re.M)
for para in paragraphs:
if not para.strip():
split_paragraphs.append([''])
continue
sentences = sentence_pattern.findall(para)
# 若正则未能分出句子,则整体作为一句
if not sentences:
sentences = [para]
split_paragraphs.append(sentences)
return split_paragraphs
return translated_strings
def translate_text(text, to_lang='zh'):
"""
自动处理长文本,按段落和句子拆分,逐句翻译,组合返回。
"""
if not text:
return ""
try:
# 拆分文本为段落和句子
split_paragraphs = split_text_for_translation(text)
translated_paragraphs = []
for sentences in split_paragraphs:
if sentences == ['']:
translated_paragraphs.append('')
continue
translated_sentences = []
for sent in sentences:
sent = sent.strip()
if not sent:
continue
# 逐句翻译
translated = ts.translate_text(sent, translator='bing', from_language='auto', to_language=to_lang)
translated_sentences.append(translated)
translated_paragraphs.append(''.join(translated_sentences))
return '\n'.join(translated_paragraphs)
except Exception as e:
return f"[翻译失败] {str(e)}"
def translate_texts(strings, target_language):
translated_strings = []
for text in strings:
try:
translated_string = translate_text(text, target_language)
translated_strings.append(translated_string)
except Exception as e:
translated_strings.append(f"Translation error: {str(e)}")
return translated_strings