У меня есть бот, который должен отвечать на вопросы юзеров по категориям вопросов, но он почему-то выдает кривой перевод (использовал библиотеку google trans)? Забивал чату гпт, он мне только комментарии расставил и сказал все корректно и я хз почему тогда это так работает, но вот пример куска сообщения, где тупой и кривой перевод.
Откуда он пишет Вопрос Otwet???
Сама ошибка:
# -----------------------------------------------------------------------------------------
# 3) Определение языка и перевод
# -----------------------------------------------------------------------------------------
translator = Translator()
def is_cyrillic(text: str) -> bool:
cyr_count = sum(1 for ch in text if 'а' <= ch.lower() <= 'я' or ch.lower() == 'ё')
lat_count = sum(1 for ch in text if 'a' <= ch.lower() <= 'z')
return cyr_count > lat_count
def detect_user_language_robust(text: str) -> str:
"""
По умолчанию считаем язык 'en', если не ru/zh.
"""
t = text.strip()
if len(t) <= 2:
if is_cyrillic(t):
return "ru"
else:
return "en"
try:
detection = translator.detect(t)
lang = detection.lang
logging.debug(f"[detect_user_language_robust] googletrans => {lang}")
if lang == 'ru':
return 'ru'
elif lang.startswith('zh'):
return 'zh'
else:
return "en"
except Exception as e:
logging.error(f"Language detect error: {e}")
return "en"
def custom_pre_translate(original_text: str, target_lang: str) -> str:
"""
Заменяет "Question", "Answer" и другие фразы на локализованные эквиваленты для предотвращения некорректного перевода.
"""
text = original_text
if target_lang == 'ru':
text = text.replace("❓Question:", "❓Вопрос:")
text = text.replace("✅Answer:", "✅Ответ:")
text = text.replace(
"If you haven't found the answer, manager @solomon_bog will contact you soon!",
"Если вы не нашли ответ, менеджер @solomon_bog свяжется с вами в ближайшее время!"
)
elif target_lang == 'zh':
text = text.replace("❓Question:", "❓问题:")
text = text.replace("✅Answer:", "✅回答:")
text = text.replace(
"If you haven't found the answer, manager @solomon_bog will contact you soon!",
"如果您没有找到答案,manager @solomon_bog 很快会与您联系!"
)
else:
# target_lang == 'en'
text = text.replace("❓Вопрос:", "❓Question:")
text = text.replace("✅Ответ:", "✅Answer:")
text = text.replace(
"Если вы не нашли ответ, менеджер @solomon_bog свяжется с вами в ближайшее время!",
"If you haven't found the answer, manager @solomon_bog will contact you soon!"
)
return text
def google_translate_response(original_text, target_lang):
"""
Переводит текст на target_lang.
Если target_lang не 'ru', 'zh' или 'en', по умолчанию переводит на 'en'.
Применяет custom_pre_translate перед переводом для корректной локализации ключевых терминов.
"""
if not original_text.strip():
return original_text
try:
if target_lang not in ['ru', 'zh', 'en']:
target_lang = 'en'
if target_lang == 'zh':
target_lang = 'zh-cn'
# Предварительная локализация ключевых терминов
pre_translated_text = custom_pre_translate(original_text, target_lang)
translated = translator.translate(pre_translated_text, dest=target_lang)
return translated.text
except Exception as e:
logging.error(f"Ошибка при переводе: {e}")
return original_text
def build_faq_full_list(category_name, faq_list, lang):
"""
Формирует полный список FAQ с локализованными метками "Question" и "Answer".
"""
if lang == 'ru':
q_label = "❓Вопрос:"
a_label = "✅Ответ:"
intro = f"Вот список наиболее часто задаваемых вопросов в категории {category_name}:\n\n"
elif lang == 'zh':
q_label = "❓问题:"
a_label = "✅回答:"
intro = f"这是类别 {category_name} 中最常见的问题列表:\n\n"
else:
# en
q_label = "❓Question:"
a_label = "✅Answer:"
intro = f"Here is the list of the most frequently asked questions in the {category_name} category:\n\n"
lines = [intro]
for item in faq_list:
question = item.get("question", "").strip()
answer_body = item.get("answer", "").strip()