# app.py import streamlit as st from streamlit_option_menu import option_menu from utils.functions import ( get_phone_info, simple_checks, analyze_message, init_stats_file, update_stats, add_to_history, init_fake_numbers_file, is_fake_number, add_fake_number, get_history ) import os # 1. Konfiguracja strony - musi być pierwszym poleceniem Streamlit st.set_page_config( page_title="📱 Detektor Fałszywych Wiadomości SMS", page_icon="📱", layout="wide", initial_sidebar_state="collapsed" # Ukrycie sidebar domyślnie ) # 2. Inicjalizacja plików init_stats_file() init_fake_numbers_file() # 3. Definiowanie tłumaczeń translations = { 'Polish': { 'menu_analysis_sms': 'Analiza SMS', 'menu_about': 'O Projekcie', 'menu_education': 'Edukacja', 'menu_statistics': 'Statystyki', 'menu_contact': 'Kontakt', 'language_select': 'Wybierz język', 'separator': '---', 'language_selected': 'Wybrany język: ' }, 'German': { 'menu_analysis_sms': 'SMS-Analyse', 'menu_about': 'Über das Projekt', 'menu_education': 'Bildung', 'menu_statistics': 'Statistiken', 'menu_contact': 'Kontakt', 'language_select': 'Sprache auswählen', 'separator': '---', 'language_selected': 'Ausgewählte Sprache: ' }, 'English': { 'menu_analysis_sms': 'SMS Analysis', 'menu_about': 'About the Project', 'menu_education': 'Education', 'menu_statistics': 'Statistics', 'menu_contact': 'Contact', 'language_select': 'Select Language', 'separator': '---', 'language_selected': 'Selected Language: ' } } # 4. Language selection with flags in an accordion if 'language' not in st.session_state: st.session_state.language = 'Polish' # Domyślny język def set_language(lang): st.session_state.language = lang # Wyświetlenie wyboru języka z flagami w akordeonie, domyślnie zwiniętym with st.expander(translations['Polish']['language_select'], expanded=False): col1, col2, col3 = st.columns(3) with col1: if st.button('🇵🇱'): set_language('Polish') with col2: if st.button('🇩🇪'): set_language('German') with col3: if st.button('🇬🇧'): set_language('English') selected_language = st.session_state.language # Wyświetlenie wybranego języka st.markdown(f"**{translations[selected_language]['language_selected']} {selected_language}**") # 5. Fetch translated menu options menu_keys = ['menu_analysis_sms', 'menu_about', 'menu_education', 'menu_statistics', 'menu_contact'] menu_options = [translations[selected_language][key] for key in menu_keys] # 6. Dodanie niestandardowego CSS do wzmocnienia stylów menu custom_css = """ """ st.markdown(custom_css, unsafe_allow_html=True) # 7. Tworzenie poziomego menu w kontenerze with st.container(): selected = option_menu( menu_title=None, # Brak tytułu menu options=menu_options, icons=["shield-check", "info-circle", "book", "bar-chart", "envelope"], menu_icon=None, # Usunięcie ikony menu default_index=0, orientation="horizontal", styles={ "container": {"padding": "0!important", "background-color": "transparent"}, "icon": {"color": "inherit", "font-size": "18px"}, "nav-link": { "font-size": "16px", "text-align": "center", "margin": "0px", "--hover-color": "transparent" # Hover kontrolowany przez niestandardowy CSS }, "nav-link-selected": { "background-color": "transparent", # Tło kontrolowane przez niestandardowy CSS "color": "inherit" }, } ) # 8. Dodanie separatora st.markdown("---") # Dodaje poziomą linię # 9. Importowanie i wywoływanie modułów dla każdej zakładki z przekazaniem języka try: if selected == translations[selected_language]['menu_analysis_sms']: from pages.Analysis import show_analysis show_analysis(selected_language) elif selected == translations[selected_language]['menu_about']: from pages.About import main as show_about show_about(selected_language) elif selected == translations[selected_language]['menu_education']: from pages.Education import main as show_education show_education(selected_language) elif selected == translations[selected_language]['menu_statistics']: from pages.Statistics import main as show_statistics show_statistics(selected_language) elif selected == translations[selected_language]['menu_contact']: from pages.Contact import main as show_contact show_contact(selected_language) except ImportError as e: st.error(f"Błąd importu: {e}") except TypeError as e: st.error(f"Błąd wywołania funkcji: {e}")