YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
import streamlit as st from googletrans import Translator from gtts import gTTS import os import random import pyperclip
=========================
CONFIGURACIÓN DE PÁGINA
=========================
st.set_page_config( page_title="🌐 Traductor Nassi 8.0", page_icon="🌀", layout="wide", )
st.markdown("
🌐 Traductor Nassi 8.0
", unsafe_allow_html=True) st.markdown("Español ↔ Nassi ↔ Otros idiomas con audio y copia al portapapeles
", unsafe_allow_html=True)=========================
IDIOMAS
=========================
idiomas = { "Español": "es", "Inglés": "en", "Francés": "fr", "Italiano": "it", "Chino Tradicional": "zh-TW", "Alemán": "de", "Ruso": "ru", "Árabe": "ar", "Portugués": "pt", "Nassi": "ns" }
=========================
MOTOR NASSI
=========================
prefijos = ["ba","ge","kra","tru","vel","dra","fre","blen"] raices = ["mor","stein","grun","hald","flok","bern","trum","fald","norf","tharn","plotz"] sufijos = ["en","ar","um","ich","or","un","et","al"] diccionario_nassi = {"estrenocleidomastoideo": "Saramarambiba"}
def generar_palabra_nassi(): palabra = random.choice(prefijos) + random.choice(raices) + random.choice(sufijos) return palabra.capitalize()
def traducir_a_nassi(texto): palabras = texto.lower().split() traduccion = [] for palabra in palabras: if palabra not in diccionario_nassi: diccionario_nassi[palabra] = generar_palabra_nassi() traduccion.append(diccionario_nassi[palabra]) return " ".join(traduccion)
def traducir_de_nassi(texto): inverso = {v.lower(): k for k, v in diccionario_nassi.items()} palabras = texto.lower().split() traduccion = [inverso.get(p, f"[{p}]") for p in palabras] return " ".join(traduccion)
translator = Translator()
def traducir_a_idioma(texto, destino): code = idiomas.get(destino) if not code: return texto if code == "ns": return traducir_a_nassi(texto) return translator.translate(texto, src="es", dest=code).text
def reproducir_audio(texto, lang): if lang == "ns": lang = "de" tts = gTTS(texto, lang=lang) tts.save("voz.mp3") st.audio("voz.mp3", format="audio/mp3")
def copiar_texto(texto): try: pyperclip.copy(texto) st.success("✅ Copiado al portapapeles") except: st.warning("⚠ No se pudo copiar (depende del navegador)")
=========================
INTERFAZ VISUAL
=========================
st.markdown("---") col1, col2 = st.columns([3,2])
with col1: texto = st.text_area("✍ Escribe tu frase en Español o Nassi:", height=150) origen = st.selectbox("Desde:", list(idiomas.keys()), index=0) destino = st.selectbox("Hacia:", list(idiomas.keys()), index=8)
with col2: st.markdown("
Acciones
", unsafe_allow_html=True) if st.button("🌀 Traducir", key="traducir"): if texto.strip() == "": st.warning("Por favor escribe algo.") else: if origen == "Nassi" and destino == "Español": resultado = traducir_de_nassi(texto) elif origen == "Español" and destino == "Nassi": resultado = traducir_a_nassi(texto) elif origen == destino: resultado = texto else: if origen == "Nassi": texto_esp = traducir_de_nassi(texto) else: texto_esp = texto resultado = traducir_a_idioma(texto_esp, destino) st.session_state["resultado"] = resultado st.success("✅ Traducción lista")if "resultado" in st.session_state:
st.text_area("📄 Resultado:", value=st.session_state["resultado"], height=120)
if st.button("📋 Copiar Traducción", key="copiar"):
copiar_texto(st.session_state["resultado"])
if st.button("🔊 Reproducir Audio", key="audio"):
reproducir_audio(st.session_state["resultado"], idiomas[destino])
if "estrenocleidomastoideo" in texto.lower():
st.info("Nota: 'estrenocleidomastoideo' en Nassi siempre es *Saramarambiba*")