File size: 5,330 Bytes
39be0d8
be0e7b0
63a6090
2b4ddac
3f5fb93
 
 
 
 
d0a5601
 
 
 
 
 
 
3f5fb93
39be0d8
3f5fb93
3757896
bd28dcb
61bfe55
ca3b8be
 
8a542de
 
 
 
 
 
3757896
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ca3b8be
3620857
39be0d8
3620857
39be0d8
 
3620857
39be0d8
 
3620857
39be0d8
2b4ddac
39be0d8
 
2b4ddac
22f4250
2b4ddac
 
22f4250
2b4ddac
22f4250
 
2b4ddac
4688078
39be0d8
3620857
39be0d8
3620857
39be0d8
47ac2c1
 
52aa07f
3757896
 
22f4250
d0a5601
3757896
47ac2c1
 
 
 
 
 
 
 
 
 
 
 
3757896
47ac2c1
3757896
47ac2c1
 
 
 
3757896
47ac2c1
 
 
 
 
 
 
 
 
d0a5601
 
4688078
47ac2c1
 
 
 
 
955d5f0
47ac2c1
3757896
 
 
ba0e382
22f4250
4688078
00f6004
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# Standard libraries
import base64
import io
import json
import os
import re
import tempfile
import time
from os import getenv
from typing import Any
from typing import Dict
from typing import IO
from typing import List
from typing import Optional
from typing import Tuple
from typing import Union

# Third-party libraries
import streamlit as st


from var_app import __version__

# Au dรฉbut du fichier, aprรจs les imports
st.set_page_config(
    page_title=f"DEMORRHA - (v{__version__})",
    page_icon="๐Ÿ‘น",
    layout="wide",
    initial_sidebar_state="collapsed"
)


LANGUAGES_EMOJI = {
    "Afrikaans": "๐Ÿ‡ฟ๐Ÿ‡ฆ", "Arabic": "๐Ÿ‡ธ๐Ÿ‡ฆ", "Armenian": "๐Ÿ‡ฆ๐Ÿ‡ฒ", "Azerbaijani": "๐Ÿ‡ฆ๐Ÿ‡ฟ", "Belarusian": "๐Ÿ‡ง๐Ÿ‡พ", 
    "Bosnian": "๐Ÿ‡ง๐Ÿ‡ฆ", "Bulgarian": "๐Ÿ‡ง๐Ÿ‡ฌ", "Catalan": "๐Ÿ‡ช๐Ÿ‡ธ", "Chinese": "๐Ÿ‡จ๐Ÿ‡ณ", "Croatian": "๐Ÿ‡ญ๐Ÿ‡ท", 
    "Czech": "๐Ÿ‡จ๐Ÿ‡ฟ", "Danish": "๐Ÿ‡ฉ๐Ÿ‡ฐ", "Dutch": "๐Ÿ‡ณ๐Ÿ‡ฑ", "English": "๐Ÿ‡ฌ๐Ÿ‡ง", "Estonian": "๐Ÿ‡ช๐Ÿ‡ช", 
    "Finnish": "๐Ÿ‡ซ๐Ÿ‡ฎ", "French": "๐Ÿ‡ซ๐Ÿ‡ท", "Galician": "๐Ÿ‡ช๐Ÿ‡ธ", "German": "๐Ÿ‡ฉ๐Ÿ‡ช", "Greek": "๐Ÿ‡ฌ๐Ÿ‡ท", 
    "Hebrew": "๐Ÿ‡ฎ๐Ÿ‡ฑ", "Hindi": "๐Ÿ‡ฎ๐Ÿ‡ณ", "Hungarian": "๐Ÿ‡ญ๐Ÿ‡บ", "Icelandic": "๐Ÿ‡ฎ๐Ÿ‡ธ", "Indonesian": "๐Ÿ‡ฎ๐Ÿ‡ฉ", 
    "Italian": "๐Ÿ‡ฎ๐Ÿ‡น", "Japanese": "๐Ÿ‡ฏ๐Ÿ‡ต", "Kannada": "๐Ÿ‡ฎ๐Ÿ‡ณ", "Kazakh": "๐Ÿ‡ฐ๐Ÿ‡ฟ", "Korean": "๐Ÿ‡ฐ๐Ÿ‡ท", 
    "Latvian": "๐Ÿ‡ฑ๐Ÿ‡ป", "Lithuanian": "๐Ÿ‡ฑ๐Ÿ‡น", "Macedonian": "๐Ÿ‡ฒ๐Ÿ‡ฐ", "Malay": "๐Ÿ‡ฒ๐Ÿ‡พ", "Marathi": "๐Ÿ‡ฎ๐Ÿ‡ณ", 
    "Maori": "๐Ÿ‡ณ๐Ÿ‡ฟ", "Nepali": "๐Ÿ‡ณ๐Ÿ‡ต", "Norwegian": "๐Ÿ‡ณ๐Ÿ‡ด", "Persian": "๐Ÿ‡ฎ๐Ÿ‡ท", "Polish": "๐Ÿ‡ต๐Ÿ‡ฑ", 
    "Portuguese": "๐Ÿ‡ต๐Ÿ‡น", "Romanian": "๐Ÿ‡ท๐Ÿ‡ด", "Russian": "๐Ÿ‡ท๐Ÿ‡บ", "Serbian": "๐Ÿ‡ท๐Ÿ‡ธ", "Slovak": "๐Ÿ‡ธ๐Ÿ‡ฐ", 
    "Slovenian": "๐Ÿ‡ธ๐Ÿ‡ฎ", "Spanish": "๐Ÿ‡ช๐Ÿ‡ธ", "Swahili": "๐Ÿ‡ฐ๐Ÿ‡ช", "Swedish": "๐Ÿ‡ธ๐Ÿ‡ช", "Tagalog": "๐Ÿ‡ต๐Ÿ‡ญ", 
    "Tamil": "๐Ÿ‡ฎ๐Ÿ‡ณ", "Thai": "๐Ÿ‡น๐Ÿ‡ญ", "Turkish": "๐Ÿ‡น๐Ÿ‡ท", "Ukrainian": "๐Ÿ‡บ๐Ÿ‡ฆ", "Urdu": "๐Ÿ‡ต๐Ÿ‡ฐ", 
    "Vietnamese": "๐Ÿ‡ป๐Ÿ‡ณ", "Welsh": "๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ"
}


def load_ui_language(file_path: Optional[str] = "ui_lang_support.json") -> Dict[str, Any]:
    """
    Charge les traductions de l'interface utilisateur ร  partir d'un fichier JSON.

    Args:
        file_path (Optional[str]): Chemin vers le fichier JSON contenant les traductions.

    Returns:
        Dict[str, Any]: Un dictionnaire contenant les traductions de l'interface utilisateur.
    """
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            return json.load(file)
    except FileNotFoundError:
        print(f"{get_translation('erreur_fichier_non_trouve')} {file_path}")
        return {}
    except json.JSONDecodeError:
        print(f"{get_translation('erreur_lecture_fichier')} JSON decoding error")
        return {}
    except IOError as e:
        print(f"{get_translation('erreur_lecture_fichier')} {e}")
        return {}


def get_translation(key: str) -> str:
    """
    Obtient la traduction pour une clรฉ donnรฉe basรฉe sur la langue d'interface sรฉlectionnรฉe.
    """
    lang = st.session_state.get('interface_language', 'English')
    return translations.get(lang, {}).get(key, key)

# Dictionary to store translations
translations = load_ui_language()


def language_selection_page():
    # Fonction de rappel pour mettre ร  jour la langue temporaire lorsque la sรฉlection change
    def update_temp_language():
        st.session_state['temp_interface_language'] = st.session_state['language_selector']
    
    # Initialiser la langue temporaire si elle n'existe pas
    if 'temp_interface_language' not in st.session_state:
        st.session_state['temp_interface_language'] = st.session_state.get('interface_language', 'English')
    
    # Titre basรฉ sur la langue temporaire
    st.title(translations[st.session_state['temp_interface_language']].get('selection_de_la_langue', 'Language Selection'))
    
    # Sรฉlecteur de langue avec un callback pour mettre ร  jour la langue temporaire
    selected_language = st.selectbox(
        translations[st.session_state['temp_interface_language']].get('choix_selection_langue', 'Choose the interface language'),
        options=list(translations.keys()),
        index=list(translations.keys()).index(st.session_state['temp_interface_language']),
        format_func=lambda lang: f"{LANGUAGES_EMOJI.get(lang, '')} {lang}",
        key='language_selector',
        on_change=update_temp_language
    )
    
    # Afficher les instructions basรฉes sur la langue temporaire
    st.write(translations[st.session_state['temp_interface_language']].get('instruction_selection_langue', 'Please select a language.'))
    
    # Bouton de confirmation avec traduction
    if st.button(translations[st.session_state['temp_interface_language']].get('confirmer', 'Confirm')):
        st.session_state.interface_language = selected_language
        st.session_state.init_launch_app = False
        st.rerun()


def main():
    if 'init_launch_app' not in st.session_state:
        st.session_state.init_launch_app = True
    
    if 'interface_language' not in st.session_state:
        st.session_state.interface_language = 'English'

    if st.session_state.init_launch_app:
        language_selection_page()
    else:
        st.switch_page("pages/main.py")

# Point d'entrรฉe de l'application
if __name__ == "__main__":
    main()