Spaces:
Running
Running
import streamlit as st | |
from deep_translator import GoogleTranslator | |
import json | |
# Fetch supported languages dynamically | |
SUPPORTED_LANGUAGES = GoogleTranslator().get_supported_languages() | |
# Default languages (including Greek 'el') | |
DEFAULT_LANGUAGES = ["fr", "es", "de", "hi", "el"] # French, Spanish, German, Hindi, Greek | |
DEFAULT_LANGUAGES = [lang for lang in DEFAULT_LANGUAGES if lang in SUPPORTED_LANGUAGES] | |
st.title("π Multi-Language Translator") | |
# Language selection | |
target_languages = st.multiselect("π― Select target languages", SUPPORTED_LANGUAGES, default=DEFAULT_LANGUAGES) | |
# Input type selection | |
input_type = st.radio("π Choose input method", ["Text", "TXT File", "JSON File"]) | |
def translate_text(text, languages): | |
"""Translate text into multiple languages""" | |
translations = {} | |
for lang in languages: | |
translations[lang] = GoogleTranslator(source='auto', target=lang).translate(text) | |
return translations | |
def translate_json(data, languages): | |
"""Translate JSON while keeping keys intact""" | |
translated_json = {} | |
for key, value in data.items(): | |
if isinstance(value, dict): | |
translated_json[key] = translate_json(value, languages) | |
else: | |
translated_json[key] = translate_text(value, languages) | |
return translated_json | |
if input_type == "Text": | |
user_text = st.text_area("βοΈ Enter text to translate:") | |
if st.button("Translate"): | |
if user_text.strip(): | |
result = translate_text(user_text, target_languages) | |
st.json(result) | |
else: | |
st.warning("Please enter text to translate.") | |
elif input_type == "TXT File": | |
uploaded_file = st.file_uploader("π Upload a TXT file", type=["txt"]) | |
if uploaded_file and st.button("Translate"): | |
content = uploaded_file.read().decode("utf-8") | |
result = translate_text(content, target_languages) | |
st.json(result) | |
elif input_type == "JSON File": | |
uploaded_json = st.file_uploader("π Upload a JSON file", type=["json"]) | |
if uploaded_json and st.button("Translate"): | |
content = json.load(uploaded_json) | |
result = translate_json(content, target_languages) | |
st.json(result) | |
st.download_button("β¬οΈ Download Translated JSON", json.dumps(result, indent=4), "translated.json", "application/json") | |
st.markdown("π **Supports over 100 languages!**") | |