# 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,
is_fake_number,
init_fake_numbers_file,
init_history_file
)
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"
)
# 2. Inicjalizacja plików
init_stats_file()
init_fake_numbers_file()
init_history_file()
# 3. Ukryj boczne menu Streamlit za pomocą CSS
hide_sidebar_style = """
"""
st.markdown(hide_sidebar_style, unsafe_allow_html=True)
# 4. 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: '
}
}
# 5. Language selection with flags in an accordion
if 'language' not in st.session_state:
st.session_state.language = 'Polish'
def set_language(lang):
st.session_state.language = lang
with st.expander(translations[st.session_state.language]['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
st.markdown(f"**{translations[selected_language]['language_selected']} {selected_language}**")
# 6. 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]
# 7. Dodanie niestandardowego CSS do wzmocnienia stylów menu
custom_css = """
"""
st.markdown(custom_css, unsafe_allow_html=True)
# 8. 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"
},
}
)
# 9. Dodanie separatora
st.markdown("---") # Dodaje poziomą linię
# 10. Importowanie i wywoływanie modułów dla każdej zakładki
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}")