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