from fastapi import APIRouter, Query, HTTPException from googletrans import Translator, LANGUAGES import time # Cria um roteador para a API de tradução router = APIRouter() @router.get("/translate/") def translate_text( text: str = Query(..., description="Texto a ser traduzido"), target_lang: str = Query("en", description="Idioma alvo para tradução"), source_lang: str = Query(None, description="Idioma de origem (opcional, se não fornecido será detectado automaticamente)") ): """ Traduz o texto para o idioma alvo e retorna detalhes, incluindo a detecção de idioma e o tempo de tradução. """ # Verifica se o idioma de destino é válido if target_lang not in LANGUAGES: raise HTTPException( status_code=400, detail=f"Invalid target language: {target_lang}. Supported languages: {', '.join(LANGUAGES.keys())}" ) try: # Cria o tradutor translator = Translator() # Se o idioma de origem não for fornecido, será detectado automaticamente start_time = time.time() # Início do tempo de tradução if source_lang: # Traduz com idioma de origem especificado translated = translator.translate(text, src=source_lang, dest=target_lang) detected_lang = False # Indica que o idioma foi fornecido else: # Se não for fornecido, detecta automaticamente o idioma de origem translated = translator.translate(text, dest=target_lang) detected_lang = True # Indica que o idioma foi detectado end_time = time.time() # Fim do tempo de tradução translation_time = round(end_time - start_time, 4) # Tempo em segundos (com 4 casas decimais) # Retorna a resposta com dados adicionais return { "orig_text": text, "trans_text": translated.text, "detected_lang": detected_lang, "source_lang": translated.src if not source_lang else source_lang, "target_lang": target_lang, "trans_time_s": translation_time, "orig_lang_name": LANGUAGES.get(translated.src, "Unknown"), "target_lang_name": LANGUAGES.get(target_lang, "Unknown"), "orig_word_count": len(text.split()), "trans_word_count": len(translated.text.split()) } except Exception as e: # Em caso de erro, retorna uma mensagem de erro raise HTTPException( status_code=500, detail=f"An error occurred during translation: {str(e)}" )