from deep_translator import MyMemoryTranslator import gradio as gr # Lista de idiomas suportados pelo Deep Translator (MyMemory) IDIOMAS = { "English": "en-GB", 'portuguese brazil': 'pt-BR', "Portuguese (Portugal)": "pt-PT", "Spanish": "es-ES", "French": "fr-FR", "German": "de-DE", "Italian": "it-IT" } def traduzir_arquivo(file, dest_language): """ Traduz um arquivo de texto grande usando Deep Translator (MyMemory API). Args: file: arquivo .txt enviado pelo usuário dest_language: código do idioma de destino (MyMemory) Returns: bytes: arquivo traduzido para download str: mensagem de status ou erro """ try: # Detectar tipo de objeto if hasattr(file, "read"): # file-like object text = file.read().decode("utf-8") else: # NamedString do Hugging Face text = str(file) # Dividir em blocos de até 5000 caracteres chunk_size = 5000 chunks = [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)] # Traduzir cada bloco translator = MyMemoryTranslator(target=dest_language) translated_chunks = [translator.translate(chunk) for chunk in chunks] translated_text = "\n".join(translated_chunks) return translated_text.encode("utf-8"), "✅ Tradução concluída com sucesso!" except Exception as e: return None, f"❌ Erro ao traduzir: {str(e)}" # Interface Gradio interface = gr.Interface( fn=traduzir_arquivo, inputs=[ gr.File(label="Upload do arquivo .txt", file_types=[".txt"]), gr.Dropdown( choices=list(IDIOMAS.keys()), value="Portuguese (Brazil)", label="Idioma de destino" ) ], outputs=[ gr.File(label="Arquivo traduzido"), gr.Textbox(label="Status") ], title="Tradutor de Arquivos Grandes", description="Traduza arquivos de texto grandes em blocos de até 5000 caracteres usando Deep Translator (MyMemory API)." ) if __name__ == "__main__": interface.launch()