# 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")) #st.rerun() ## 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.')) language_selection_page()