Spaces:
Sleeping
Sleeping
| 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!*") | |