Spaces:
Running
Running
File size: 4,371 Bytes
fcd7b4d c3765b2 1ed98cd ab79a67 fcd7b4d 1ed98cd c3765b2 fcd7b4d 1ed98cd c3765b2 1ed98cd c3765b2 1ed98cd fcd7b4d 1ed98cd c3765b2 ab79a67 c3765b2 ab79a67 1ed98cd ab79a67 1ed98cd ab79a67 1ed98cd ab79a67 1ed98cd fcd7b4d 1ed98cd ab79a67 c3765b2 1ed98cd ab79a67 1ed98cd fcd7b4d 1ed98cd ab79a67 1ed98cd ab79a67 fcd7b4d 1ed98cd c3765b2 ab79a67 1ed98cd ab79a67 fcd7b4d ab79a67 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
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!*")
|