Translation / app.py
JaganathC's picture
Update app.py
ab79a67 verified
import streamlit as st
from deep_translator import GoogleTranslator
import json
import re
# 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, lang):
"""Translate text while preserving placeholders inside {{ }}"""
placeholders = re.findall(r"(\{\{.*?\}\})", text) # Extract placeholders
translated_text = GoogleTranslator(source="auto", target=lang).translate(text)
# Restore placeholders to keep them unchanged
for placeholder in placeholders:
translated_text = translated_text.replace(GoogleTranslator(source="auto", target=lang).translate(placeholder), placeholder)
return translated_text
def translate_json_values(json_data, lang):
"""
Translate JSON values while preserving the original keys in quotes.
"""
translated_json = {}
for key, value in json_data.items():
if isinstance(value, dict):
# Recursive translation for nested dictionaries
translated_json[key] = translate_json_values(value, lang)
elif isinstance(value, list):
# Translate list elements
translated_json[key] = [translate_text(item, lang) if isinstance(item, str) else item for item in value]
elif isinstance(value, str):
# Translate string values only
translated_json[key] = translate_text(value, lang)
else:
# Keep numbers/booleans unchanged
translated_json[key] = value
return translated_json
if input_type == "Text":
user_text = st.text_area("✏ Enter text to translate:")
if st.button("Translate"):
if user_text.strip():
results = {lang: translate_text(user_text, lang) for lang in target_languages}
st.json(results)
# Provide download button for TXT file
for lang, translated_text in results.items():
file_name = f"translated_{lang}.txt"
st.download_button(
label=f"⬇ Download Translated TXT ({lang})",
data=translated_text,
file_name=file_name,
mime="text/plain"
)
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:
content = uploaded_file.read().decode("utf-8")
if st.button("Translate"):
results = {lang: translate_text(content, lang) for lang in target_languages}
st.json(results)
# Provide download button for translated TXT files
for lang, translated_text in results.items():
file_name = f"translated_{lang}.txt"
st.download_button(
label=f"⬇ Download Translated TXT ({lang})",
data=translated_text,
file_name=file_name,
mime="text/plain"
)
elif input_type == "JSON File":
uploaded_json = st.file_uploader("πŸ“‚ Upload a JSON file", type=["json"])
if uploaded_json:
content = json.load(uploaded_json)
translated_results = {lang: translate_json_values(content, lang) for lang in target_languages}
st.json(translated_results)
# Provide download button for translated JSON files
for lang, data in translated_results.items():
file_name = f"translated_{lang}.json"
st.download_button(
label=f"⬇ Download Translated JSON ({lang})",
data=json.dumps(data, indent=4, ensure_ascii=False),
file_name=file_name,
mime="application/json"
)
st.markdown("πŸš€ *Supports over 100 languages!*")