Spaces:
Sleeping
Sleeping
# app.py | |
import streamlit as st | |
from streamlit_option_menu import option_menu | |
from utils.functions import ( | |
get_phone_info, | |
simple_checks, | |
analyze_message, | |
update_stats, | |
add_to_history, | |
is_fake_number, | |
add_fake_number | |
) | |
import os | |
# 1. Konfiguracja strony - musi by膰 pierwszym poleceniem Streamlit | |
st.set_page_config( | |
page_title="馃摫 Scam Detector", | |
page_icon="馃摫", | |
layout="wide" | |
) | |
# 2. Ukrycie bocznego menu Streamlit za pomoc膮 CSS | |
hide_sidebar_style = """ | |
<style> | |
/* Ukryj boczne menu */ | |
[data-testid="stSidebar"] { | |
display: none; | |
} | |
</style> | |
""" | |
st.markdown(hide_sidebar_style, unsafe_allow_html=True) | |
# 3. Definiowanie t艂umacze艅 | |
translations = { | |
'Polish': { | |
'menu_analysis_sms': 'Analiza wiadomo艣ci', | |
'menu_about': 'O Projekcie', | |
'menu_education': 'Edukacja', | |
'menu_statistics': 'Statystyki', | |
'menu_contact': 'Kontakt', | |
'language_select': 'Wybierz j臋zyk / Sprache ausw盲hlen / Select language', | |
'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': 'Wybierz j臋zyk / Sprache ausw盲hlen / Select language', | |
'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': 'Wybierz j臋zyk / Sprache ausw盲hlen / Select language', | |
'separator': '---', | |
'language_selected': 'Selected Language: ' | |
} | |
} | |
# 4. Wyb贸r j臋zyka z flagami w jednym wierszu | |
if 'language' not in st.session_state: | |
st.session_state.language = 'Polish' # Ustawienie j臋zyka domy艣lnego na polski | |
# Nowy spos贸b na wyb贸r j臋zyka bez u偶ycia przycisk贸w "POST" | |
selected_language = st.selectbox( | |
translations[st.session_state.language]['language_select'], | |
options=['Polish', 'German', 'English'], | |
index=['Polish', 'German', 'English'].index(st.session_state.language) | |
) | |
# Zapis wybranego j臋zyka w sesji | |
st.session_state.language = selected_language | |
st.markdown(f"**{translations[selected_language]['language_selected']} {selected_language}**") | |
# Dodanie separatora pod wyborem j臋zyka | |
st.markdown("---") | |
# 5. Pobranie przet艂umaczonych opcji menu | |
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 = """ | |
<style> | |
/* Stylizacja kontenera menu */ | |
.streamlit-option-menu { | |
display: flex; | |
justify-content: center; | |
align-items: center; | |
padding: 10px 0; | |
margin-bottom: 10px; | |
} | |
/* Stylizacja przycisk贸w w jasnym motywie */ | |
html[data-theme="light"] .streamlit-option-menu { | |
background-color: #f0f0f0; | |
} | |
/* Stylizacja przycisk贸w w ciemnym motywie */ | |
html[data-theme="dark"] .streamlit-option-menu { | |
background-color: #333; | |
} | |
/* Stylizacja przycisk贸w */ | |
.streamlit-option-menu .nav-link { | |
font-size: 16px; | |
padding: 10px 20px; | |
margin: 0 5px; | |
background-color: transparent; | |
color: inherit; | |
border-radius: 5px; | |
transition: background-color 0.3s ease, color 0.3s ease; | |
cursor: pointer; | |
} | |
/* Efekt hover */ | |
.streamlit-option-menu .nav-link:hover { | |
background-color: #02ab21; | |
color: #ffffff !important; | |
} | |
/* Stylizacja wybranego elementu */ | |
.streamlit-option-menu .nav-link-selected { | |
background-color: #02ab21; | |
color: #ffffff !important; | |
border-radius: 5px; | |
} | |
/* Stylizacja ikonek */ | |
.streamlit-option-menu .icon { | |
font-size: 18px; | |
color: inherit !important; | |
} | |
/* Responsywno艣膰 */ | |
@media (max-width: 768px) { | |
.streamlit-option-menu { | |
flex-direction: column; | |
} | |
.streamlit-option-menu .nav-link { | |
margin: 5px 0; | |
width: 100%; | |
} | |
} | |
</style> | |
""" | |
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", | |
"padding": "10px 20px", | |
"border-radius": "5px", | |
"background-color": "transparent", | |
"color": "inherit", | |
"transition": "background-color 0.3s ease, color 0.3s ease" | |
}, | |
"nav-link-selected": { | |
"background-color": "#02ab21", | |
"color": "#ffffff", | |
"border-radius": "5px", | |
"padding": "10px 20px" | |
}, | |
} | |
) | |
# 8. Dodanie separatora | |
st.markdown("---") # Dodaje poziom膮 lini臋 | |
# 9. 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"Import error: {e}") | |
except TypeError as e: | |
st.error(f"Function call error: {e}") | |