traducemes / app.py
tx3bas's picture
Update app.py
a3ff0af verified
raw
history blame
2.55 kB
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"))'>&nbsp;✂&nbsp;</button>
</div>
"""
st.markdown(html_output, unsafe_allow_html=True)
if __name__ == "__main__":
main()