Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import json | |
| from pathlib import Path | |
| import os | |
| # Set path to locales directory. | |
| LOCALE_DIR = Path(__file__).parent.parent / "locales" | |
| def load_language(lang_code): | |
| # Load all JSON language files for a given language. | |
| lang_dir = LOCALE_DIR / lang_code | |
| translations = {} | |
| if lang_dir.is_dir(): | |
| for file_path in lang_dir.glob("*.json"): | |
| with open(file_path, "r", encoding="utf-8") as f: | |
| translations.update(json.load(f)) | |
| # Fallback to English if no translations are found. | |
| if not translations: | |
| en_dir = LOCALE_DIR / "en" | |
| if en_dir.is_dir(): | |
| for file_path in en_dir.glob("*.json"): | |
| with open(file_path, "r", encoding="utf-8") as f: | |
| translations.update(json.load(f)) | |
| return translations | |
| def initialize_localization(): | |
| # Set up the session state for localization. | |
| if 'lang' not in st.session_state: | |
| st.session_state.lang = "en" | |
| if 'translations' not in st.session_state or st.session_state.get('lang_changed', False): | |
| st.session_state.translations = load_language(st.session_state.lang) | |
| st.session_state.lang_changed = False | |
| def tr(key): | |
| # Translate a key using the loaded language file. | |
| return st.session_state.translations.get(key, key) | |
| def language_selector(): | |
| # Show a dropdown to select the language. | |
| languages = {"English": "en", "Deutsch": "de"} | |
| display_to_code = {name: code for name, code in languages.items()} | |
| code_to_display = {code: name for name, code in languages.items()} | |
| def on_change(): | |
| selected_display_name = st.session_state.language_selector_key | |
| st.session_state.lang = display_to_code[selected_display_name] | |
| st.session_state.lang_changed = True | |
| current_lang_code = st.session_state.get('lang', 'en') | |
| try: | |
| current_index = list(languages.keys()).index(code_to_display[current_lang_code]) | |
| except (KeyError, ValueError): | |
| current_index = 0 | |
| st.selectbox( | |
| label="Language", | |
| options=list(languages.keys()), | |
| key="language_selector_key", | |
| on_change=on_change, | |
| format_func=lambda lang_name: f"π {lang_name}", | |
| label_visibility="visible", | |
| index=current_index | |
| ) |