# 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__ 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(): st.set_page_config(initial_sidebar_state="collapsed") #st.set_page_config(page_icon="๐Ÿ‘น") #st.set_page_config(layout="wide") # 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') # Sรฉlecteur de langue avec un callback pour mettre ร  jour la langue temporaire with st.container( border=True, key='lang_choices_container', height=None ): TITRE_LANGSELMENU=translations[st.session_state['temp_interface_language']].get('selection_de_la_langue', 'Language Selection') # Titre basรฉ sur la langue temporaire st.header( f":blue[{TITRE_LANGSELMENU}]" ,divider=True) selecteur_du_choix, boutton_de_validation = st.columns(2, vertical_alignment='top', gap="small") selected_language = selecteur_du_choix.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, label_visibility="collapsed" ) # Bouton de confirmation avec traduction if boutton_de_validation.button( translations[st.session_state['temp_interface_language']].get( 'confirmer', 'Confirm'), key='confirm_button_ui_lang_choice', type="secondary", use_container_width=True, disabled = False ): st.session_state.interface_language = selected_language st.session_state.init_launch_app = False st.switch_page(st.Page("pages/main.py", title="Main page")) language_selection_page()