# 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 ) 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 pliku statystyk init_stats_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': '---' # ... dodaj inne tłumaczenia }, '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': '---' # ... dodaj inne tłumaczenia }, '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': '---' # ... dodaj inne tłumaczenia } } # 4. Language selection if 'language' not in st.session_state: st.session_state.language = 'Polish' def set_language(): st.session_state.language = st.session_state.language_select # Wyświetlenie wyboru języka na górze aplikacji st.radio( translations['Polish']['language_select'], ('Polish', 'German', 'English'), key='language_select', index=['Polish', 'German', 'English'].index(st.session_state.language), on_change=set_language ) selected_language = st.session_state.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 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)