import gradio as gr from mtranslate import translate from bs4 import BeautifulSoup, NavigableString import re import uuid import time # Simulación de carga # Diccionario de idiomas lang_dict = { 'Auto': 'auto', 'Español': 'es', 'English': 'en', } lang_list = [k for k in lang_dict.keys() if k != 'Auto'] source_lang_list = ['Auto'] + lang_list def split_text(text, limit=4000): sentences = re.split(r'([;.])', text) chunks = [] chunk = '' for i in range(0, len(sentences), 2): sentence = sentences[i] + (sentences[i+1] if i+1 < len(sentences) else '') if len(chunk) + len(sentence) > limit: chunks.append(chunk) chunk = sentence else: chunk += sentence if chunk: chunks.append(chunk) return chunks def translate_html_content(text, source_lang, target_lang): soup = BeautifulSoup(text, 'html.parser') # Traducir nodos de texto for node in soup.find_all(string=True): # Cambiado de text=True a string=True if isinstance(node, NavigableString) and node.strip(): original_text = node.strip() chunks = split_text(original_text) translated_chunks = [translate(chunk, target_lang, source_lang) for chunk in chunks] translated_text = ''.join(translated_chunks) # Verificar espacios antes y después del nodo if node.previous_sibling and isinstance(node.previous_sibling, NavigableString): translated_text = ' ' + translated_text if node.next_sibling and isinstance(node.next_sibling, NavigableString): if not node.next_sibling.startswith(' '): # Verificación adicional translated_text += ' ' node.replace_with(translated_text) return str(soup) def main(Texto, source_lang, target_lang): source_code = lang_dict[source_lang] target_code = lang_dict[target_lang] # Simulación de tiempo de procesamiento para UX mejorada time.sleep(2) translated_text = translate_html_content(Texto, source_code, target_code) element_id = f"text-{uuid.uuid4()}" html_output = f"""