/
TetroReks
/
GnomeBot2.0
Обзор
Документация
Войти
/
TetroReks
/
GnomeBot2.0
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
utils.py
64 строки
3 KB
TetroReks
upload files
18 фев 2026, 02:23
Верифицирован
18 фев 2026, 02:23
f71ff9a
Код
Авторство
О чём код?
import hashlib import aiohttp from deep_translator import GoogleTranslator from config import DEEPL_API_KEY # Простой кэш в памяти TRANSLATION_CACHE = {} async def translate_text(text: str, dest: str = 'ru') -> str: """Перевод текста с кэшированием (Google Translate через deep-translator)""" if not text: return "" # Ключ кэша key = hashlib.md5(f"{text}:{dest}".encode()).hexdigest() if key in TRANSLATION_CACHE: return TRANSLATION_CACHE[key] try: # Пробуем DeepL если есть ключ if DEEPL_API_KEY: async with aiohttp.ClientSession() as session: async with session.post( "https://api-free.deepl.com/v2/translate", data={ "auth_key": DEEPL_API_KEY, "text": text, "target_lang": dest.upper() } ) as resp: if resp.status == 200: data = await resp.json() translated = data["translations"][0]["text"] TRANSLATION_CACHE[key] = translated return translated # Fallback на Google Translate через deep-translator translated = GoogleTranslator(source='auto', target=dest).translate(text) TRANSLATION_CACHE[key] = translated return translated except Exception: # Если перевод сломался, возвращаем оригинал return text async def translate_dict(data: dict, fields: list) -> dict: """Перевести указанные поля в словаре""" for field in fields: if field in data and data[field]: data[field + "_ru"] = await translate_text(data[field]) return data # Простая транслитерация для поиска (если нужно) def transliterate(text: str) -> str: """Грубая транслитерация кириллицы -> латиница""" mapping = { 'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'yo', 'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'y', 'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', 'ф': 'f', 'х': 'kh', 'ц': 'ts', 'ч': 'ch', 'ш': 'sh', 'щ': 'shch', 'ъ': '', 'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu', 'я': 'ya' } result = [] for ch in text.lower(): result.append(mapping.get(ch, ch)) return ''.join(result)