Spaces:
Running
Running
import streamlit as st | |
import json | |
from deep_translator import GoogleTranslator | |
# Fetch available translation languages | |
SUPPORTED_LANGUAGES = GoogleTranslator().get_supported_languages() | |
# Function to translate a single string | |
def translate_text(text, target_langs): | |
"""Translates a single text string into multiple languages.""" | |
translators = {lang: GoogleTranslator(source="auto", target=lang) for lang in target_langs} | |
return {lang: translators[lang].translate(text) for lang in target_langs} | |
# Function to translate JSON values while keeping keys unchanged | |
def translate_json(json_data, target_langs): | |
"""Translates JSON values into multiple languages while keeping keys unchanged.""" | |
translated_data = {lang: {} for lang in target_langs} | |
translators = {lang: GoogleTranslator(source="auto", target=lang) for lang in target_langs} | |
def translate_recursive(data): | |
if isinstance(data, dict): | |
return {key: translate_recursive(value) for key, value in data.items()} | |
elif isinstance(data, list): | |
return [translate_recursive(item) for item in data] | |
elif isinstance(data, str): | |
return {lang: translators[lang].translate(data) for lang in target_langs} | |
else: | |
return data # Keep numbers or boolean values unchanged | |
for lang in target_langs: | |
translated_data[lang] = translate_recursive(json_data) | |
return translated_data | |
# Streamlit UI | |
st.title("π Multi-Input Language Translator") | |
# Select translation languages | |
target_languages = st.multiselect("π― Select target languages", SUPPORTED_LANGUAGES, default=["fr", "es", "de", "hi"]) | |
# User input method selection | |
option = st.radio("Choose input method:", ["Paste Text", "Upload TXT File", "Upload JSON File"]) | |
if option == "Paste Text": | |
user_text = st.text_area("βοΈ Enter text to translate:") | |
if st.button("Translate"): | |
if user_text: | |
translated_text = translate_text(user_text, target_languages) | |
st.subheader("π Translated Text") | |
st.json(translated_text) | |
elif option == "Upload TXT File": | |
uploaded_txt = st.file_uploader("π Upload a TXT file", type=["txt"]) | |
if uploaded_txt: | |
file_contents = uploaded_txt.read().decode("utf-8") | |
translated_text = translate_text(file_contents, target_languages) | |
st.subheader("π Translated Text from File") | |
st.json(translated_text) | |
elif option == "Upload JSON File": | |
uploaded_json = st.file_uploader("π Upload a JSON file", type=["json"]) | |
if uploaded_json: | |
json_data = json.load(uploaded_json) | |
translated_json = translate_json(json_data, target_languages) | |
st.subheader("π Translated JSON") | |
st.json(translated_json) | |
# Save and provide download link | |
translated_filename = "translated_output.json" | |
with open(translated_filename, "w", encoding="utf-8") as f: | |
json.dump(translated_json, f, indent=4, ensure_ascii=False) | |
with open(translated_filename, "rb") as f: | |
st.download_button("π₯ Download Translated JSON", f, file_name="translated_output.json", mime="application/json") | |