Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from mtranslate import translate | |
| import re | |
| # Diccionario de idiomas y sus códigos | |
| lang_dict = { | |
| 'Español': 'es', | |
| 'English': 'en', | |
| 'Mandarín': 'zh', | |
| 'Hindi': 'hi', | |
| 'Árabe': 'ar', | |
| 'Portugués': 'pt', | |
| 'Bengalí': 'bn', | |
| 'Ruso': 'ru', | |
| 'Japonés': 'ja', | |
| 'Panyabí': 'pa', | |
| 'Alemán': 'de', | |
| 'Javanés': 'jw', | |
| 'Coreano': 'ko', | |
| 'Francés': 'fr', | |
| 'Vietnamita': 'vi', | |
| 'Turco': 'tr', | |
| 'Italiano': 'it', | |
| 'Ucraniano': 'uk', | |
| 'Tailandés': 'th', | |
| 'Guyaratí': 'gu', | |
| 'Polaco': 'pl', | |
| 'Griego': 'el', | |
| 'Neerlandés': 'nl', | |
| 'Sueco': 'sv', | |
| 'Rumano': 'ro', | |
| 'Checo': 'cs', | |
| 'Húngaro': 'hu', | |
| 'Hebreo': 'he', | |
| 'Indonesio': 'id', | |
| 'Nepalí': 'ne', | |
| 'Gallego': 'gl', | |
| 'Catalán': 'ca', | |
| 'Vasco': 'eu' | |
| } | |
| lang_list = list(lang_dict.keys()) | |
| 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 = '' | |
| chunk += sentence | |
| if chunk: | |
| chunks.append(chunk) | |
| return chunks | |
| def translate_text(lang, text): | |
| # Obtener el código del idioma | |
| lang_code = lang_dict[lang] | |
| # Dividir el texto en fragmentos que no superen el límite de 4000 caracteres | |
| chunks = split_text(text) | |
| translated_chunks = [translate(chunk, lang_code) for chunk in chunks] | |
| translated_text = ''.join(translated_chunks) | |
| return translated_text | |
| def main(): | |
| st.title("Traducción sin límites") | |
| text = st.text_area("Texto a traducir", height=200) | |
| lang = st.selectbox("Idioma", lang_list) | |
| if st.button("Traducir"): | |
| # Realizar la traducción | |
| translated_text = translate_text(lang, text) | |
| # Mostrar el resultado con el botón de copia | |
| html_output = f""" | |
| <div> | |
| <span id='translated_text'>{translated_text}</span> | |
| <button class="lg secondary svelte-cmf5ev" style="font-size: small; padding: 2px; color: #808080ba; border: none; margin-left: 5px;" onclick='navigator.clipboard.writeText(document.getElementById("translated_text").innerText).then(() => alert("Texto copiado al portapapeles"))'> ✂ </button> | |
| </div> | |
| """ | |
| st.markdown(html_output, unsafe_allow_html=True) | |
| if __name__ == "__main__": | |
| main() | |