Skip to content

Commit 19b4bfb

Browse files
authored
Merge pull request #41 from Andrea-Filice/main
fix: fixing some bugs
2 parents bdec8bf + 93faac1 commit 19b4bfb

File tree

5 files changed

+113
-76
lines changed

5 files changed

+113
-76
lines changed

StosVPN/ContentView.swift

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,7 @@ class TunnelManager: ObservableObject {
118118
DispatchQueue.main.async {
119119
if let error = error {
120120
VPNLogger.shared.log("Error loading preferences: \(error.localizedDescription)")
121-
#if targetEnvironment(simulator)
122-
self.tunnelStatus = .disconnected
123-
#else
124121
self.tunnelStatus = .error
125-
#endif
126122
self.waitingOnSettings = true
127123
return
128124
}
@@ -203,7 +199,7 @@ class TunnelManager: ObservableObject {
203199
}
204200

205201
private func updateTunnelStatus(from connectionStatus: NEVPNStatus) {
206-
var newStatus: TunnelStatus
202+
let newStatus: TunnelStatus
207203
switch connectionStatus {
208204
case .invalid, .disconnected:
209205
newStatus = .disconnected
@@ -219,10 +215,6 @@ class TunnelManager: ObservableObject {
219215
newStatus = .error
220216
}
221217

222-
#if targetEnvironment(simulator)
223-
newStatus = .connected
224-
#endif
225-
226218
DispatchQueue.main.async { [weak self] in
227219
guard let self = self else { return }
228220
if self.tunnelStatus != newStatus {
@@ -830,14 +822,14 @@ struct ConnectionStatsView: View {
830822
)
831823
StatItemView(
832824
title: "status",
833-
value: "active",
825+
value: NSLocalizedString("active", comment: ""),
834826
icon: "checkmark.circle.fill"
835827
)
836828
}
837829
HStack(spacing: 30) {
838830
StatItemView(
839831
title: "network_interface",
840-
value: "local",
832+
value: NSLocalizedString("local", comment: ""),
841833
icon: "network"
842834
)
843835
StatItemView(
@@ -908,6 +900,7 @@ struct SettingsView: View {
908900
@AppStorage("hasNotCompletedSetup") private var hasNotCompletedSetup = true
909901

910902
@State private var showNetworkWarning = false
903+
@State private var showRestartPopUp = false
911904

912905
var body: some View {
913906
NBNavigationStack {
@@ -948,16 +941,26 @@ struct SettingsView: View {
948941
}
949942

950943
Section(header: Text("language")) {
951-
Picker("language", selection: $selectedLanguage) {
952-
Text("English").tag("en")
953-
Text("Spanish").tag("es")
954-
Text("Italian").tag("it")
955-
Text("Polish").tag("pl")
944+
Picker("dropdown_language", selection: $selectedLanguage) {
945+
Text("english").tag("en")
946+
Text("spanish").tag("es")
947+
Text("italian").tag("it")
948+
Text("polish").tag("pl")
956949
}
957950
.onChange(of: selectedLanguage) { newValue in
958951
let languageCode = newValue
959952
LanguageManager.shared.updateLanguage(to: languageCode)
953+
showRestartPopUp = true
960954
}
955+
.alert(isPresented: $showRestartPopUp){
956+
Alert(
957+
title: Text("restart_title"),
958+
message: Text("restart_message"),
959+
dismissButton: .cancel(Text("understand_button")) {
960+
showRestartPopUp = true
961+
}
962+
)
963+
}
961964
}
962965
}
963966
.alert(isPresented: $showNetworkWarning) {
@@ -1012,7 +1015,6 @@ struct SettingsView: View {
10121015
}
10131016
}
10141017

1015-
10161018
// MARK: - New Data Collection Info View
10171019
struct DataCollectionInfoView: View {
10181020
var body: some View {
@@ -1340,9 +1342,7 @@ struct SetupPageView: View {
13401342

13411343
class LanguageManager: ObservableObject {
13421344
static let shared = LanguageManager()
1343-
13441345
@Published var currentLanguage: String = Locale.current.languageCode ?? "en"
1345-
13461346
private let supportedLanguages = ["en", "es", "it", "pl"]
13471347

13481348
func updateLanguage(to languageCode: String) {

StosVPN/Localization/en.lproj/Localizable.strings

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@
2323
"local" = "Local";
2424
"assigned_ip" = "Assigned IP";
2525

26+
/* MARK: Locales */
27+
"english" = "English";
28+
"spanish" = "Spanish";
29+
"italian" = "Italian";
30+
"polish" = "Polish";
31+
2632
/* MARK: Settings */
2733

2834
"connection_settings" = "Connection Settings";
@@ -37,11 +43,8 @@
3743
"data_collection_policy" = "Data Collection Policy";
3844
"app_version" = "App Version";
3945
"help_and_support" = "Help and Support";
40-
"language" = "Language";
41-
"english" = "English";
42-
"spanish" = "Spanish";
43-
"italian" = "Italian";
44-
"polish" = "Polish";
46+
"language" = "Set Language";
47+
"dropdown_language" = "Language";
4548
"settings" = "Settings";
4649
"done" = "Done";
4750
"warning_alert" = "Warning";
@@ -55,7 +58,7 @@
5558
"local_processing_only_description" = "All network traffic and configurations are processed locally on your device. No information ever leaves the device or is transmitted over the Internet.";
5659
"no_third_party_sharing" = "No Third Party Sharing";
5760
"no_third_party_sharing_description" = "Since we do not collect data, there is no sharing with third parties. We do not have analytics, tracking, or data collection mechanisms in this app.";
58-
"why_use_network_permissions" = "Why Use Network Permissions";
61+
"why_use_network_permissions" = "Why Use Network Permissions?";
5962
"why_use_network_permissions_description" = "StosVPN requires network extension permissions to create a local network interface on your device. This is used exclusively for local development and testing.";
6063
"our_promise" = "Our Promise";
6164
"our_promise_description" = "We are committed to privacy and transparency. This app is designed for developers to test and connect to local servers with no privacy concerns.";
@@ -119,3 +122,9 @@
119122
"setup_get_started" = "Get Started";
120123
"setup_next" = "Next";
121124
"setup_skip" = "Skip";
125+
126+
/*MARK: Restart pop-up*/
127+
restart_title = "Restart";
128+
restart_message = "To apply the changes, you need to restart the application.";
129+
confirmYes = "Yes";
130+
confirmNo = "No";

StosVPN/Localization/es.lproj/Localizable.strings

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@
2323
"local" = "Local";
2424
"assigned_ip" = "IP Asignada";
2525

26+
/* MARK: Locales */
27+
"english" = "Inglés";
28+
"spanish" = "Español";
29+
"italian" = "Italiano";
30+
"polish" = "Polaco";
31+
2632
/* MARK: Configuración */
2733

2834
"connection_settings" = "Configuración de Conexión";
@@ -37,11 +43,8 @@
3743
"data_collection_policy" = "Política de Recopilación de Datos";
3844
"app_version" = "Versión de la App";
3945
"help_and_support" = "Ayuda y Soporte";
40-
"language" = "Idioma";
41-
"english" = "Inglés";
42-
"spanish" = "Español";
43-
"italian" = "Italiano";
44-
"polish" = "Polish";
46+
"language" = "Establecer idioma";
47+
"dropdown_language" = "Idioma";
4548
"settings" = "Configuración";
4649
"done" = "Hecho";
4750
"warning_alert" = "Advertencia";
@@ -119,3 +122,9 @@
119122
"setup_get_started" = "Comenzar";
120123
"setup_next" = "Siguiente";
121124
"setup_skip" = "Saltar";
125+
126+
/*MARK: Restart pop-up*/
127+
restart_title = "Reiniciar";
128+
restart_message = "Para aplicar los cambios, es necesario reiniciar la aplicación.";
129+
confirmYes = "Sí";
130+
confirmNo = "No";

StosVPN/Localization/it.lproj/Localizable.strings

Lines changed: 50 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -23,82 +23,85 @@
2323
"local" = "Locale";
2424
"assigned_ip" = "IP Assegnato";
2525

26-
/* MARK: Settins*/
26+
/* MARK: Locales */
27+
"english" = "Inglese";
28+
"spanish" = "Spagnolo";
29+
"italian" = "Italiano";
30+
"polish" = "Polacco";
31+
32+
/* MARK: Settings*/
2733

2834
"connection_settings" = "Impostazioni Connessione";
2935
"auto_connect_on_launch" = "Connessione automatica all’avvio";
3036
"connection_logs" = "Log di Connessione";
3137
"network_configuration" = "Configurazione Rete";
32-
"device_ip" = "IP Dispositivo";
33-
"tunnel_ip" = "IP Tunnel";
38+
"device_ip" = "Indirizzo IP Dispositivo";
39+
"tunnel_ip" = "Indirizzo IP Tunnel";
3440
"subnet_mask" = "Maschera di Sottorete";
3541
"app_information" = "Informazioni App";
3642
"privacy_policy" = "Privacy Policy";
3743
"data_collection_policy" = "Politica di Raccolta Dati";
3844
"app_version" = "Versione App";
3945
"help_and_support" = "Guida e Supporto";
40-
"language" = "Lingua";
41-
"english" = "Inglese";
42-
"spanish" = "Spagnolo";
43-
"italian" = "Italiano";
44-
"polish" = "Polish";
46+
"language" = "Imposta Lingua";
47+
"dropdown_language" = "Lingua";
4548
"settings" = "Impostazioni";
4649
"done" = "Fine";
4750
"warning_alert" = "Avviso";
4851
"warning_message" = "La modifica delle impostazioni IP del tunnel può interrompere la connessione di rete. Procedi solo se sei sicuro di quello che stai facendo.";
4952
"understand_button" = "Ho capito";
5053

5154
"data_collection_policy_title" = "Politica di Raccolta Dati";
52-
"no_data_collection" = "Nessuna Raccolta Dati";
55+
"no_data_collection" = "Nessuna raccolta di dati";
5356
"no_data_collection_description" = "StosVPN NON raccoglie dati utente, informazioni sul traffico o attività di navigazione. Questa app crea un tunnel di rete locale che rimane interamente sul tuo dispositivo.";
54-
"local_processing_only" = "Elaborazione Solo Locale";
57+
"local_processing_only" = "Elaborazione solo sul tuo smartphone";
5558
"local_processing_only_description" = "Tutto il traffico di rete e le configurazioni vengono elaborate localmente sul tuo dispositivo. Nessuna informazione lascia mai il dispositivo o viene trasmessa su Internet.";
56-
"no_third_party_sharing" = "Nessuna Condivisione con Terze Parti";
59+
"no_third_party_sharing" = "Nessuna condivisione con servizi di terze parti";
5760
"no_third_party_sharing_description" = "Poiché non raccogliamo dati, non c'è alcuna condivisione con terze parti. Non abbiamo analisi, tracciamento o meccanismi di raccolta dati in questa app.";
58-
"why_use_network_permissions" = "Perché Usare i Permessi di Rete";
59-
"why_use_network_permissions_description" = "StosVPN richiede permessi di estensione di rete per creare un'interfaccia di rete locale sul tuo dispositivo. Questo è utilizzato esclusivamente per sviluppo e test locali.";
60-
"our_promise" = "La Nostra Promessa";
61+
"why_use_network_permissions" = "Perché concedere i permessi di Rete?";
62+
"why_use_network_permissions_description" = "StosVPN richiede permessi di estensione di rete per creare un'interfaccia di rete locale sul tuo dispositivo. Questo è utilizzato esclusivamente per sviluppo e test locali sul tuo dispositivo.";
63+
"our_promise" = "La nostra promessa";
6164
"our_promise_description" = "Ci impegniamo per la privacy e la trasparenza. Questa app è progettata per sviluppatori per testare e connettersi a server locali senza preoccupazioni sulla privacy.";
6265
"data_collection_policy_nav" = "Raccolta Dati";
63-
"logs_nav" = "Log";
66+
"logs_nav" = "Log di connessione";
6467
"faq_header" = "Domande Frequenti";
6568
"faq_q1" = "Cosa fa questa app?";
66-
"faq_q1_a1" = "StosVPN crea un'interfaccia di rete locale utilizzabile per sviluppo e test. Non instrada il traffico attraverso server esterni: tutto rimane sul dispositivo.";
69+
"faq_q1_a1" = "StosVPN crea un'interfaccia di rete locale utilizzabile per sviluppo e test. Non instrada il traffico attraverso server esterni, tutto rimane sul dispositivo.";
6770
"faq_common_use_cases" = "I casi d'uso comuni includono:";
68-
"faq_case1" = "• Test di applicazioni web con server locali";
69-
"faq_case2" = "• Sviluppo e debug di funzionalità di rete";
70-
"faq_case3" = "• Accesso ad ambienti di sviluppo locali ospitati";
71-
"faq_case4" = "• Test di app che richiedono configurazioni di rete specifiche";
71+
"faq_case1" = "• Test di applicazioni web con server locali.";
72+
"faq_case2" = "• Sviluppo e Debug di funzionalità di rete.";
73+
"faq_case3" = "• Accesso ad ambienti di sviluppo locali ospitati.";
74+
"faq_case4" = "• Test di applicazioni che richiedono configurazioni di rete specifiche.";
7275
"faq_q2" = "È un VPN tradizionale?";
7376
"faq_q2_a1" = "No, StosVPN NON è un servizio VPN tradizionale. Non:";
74-
"faq_q2_point1" = "• Instrada il tuo traffico attraverso server esterni";
75-
"faq_q2_point2" = "• Fornisce privacy o anonimato per la navigazione";
76-
"faq_q2_point3" = "• Connette a server VPN remoti";
77-
"faq_q2_point4" = "• Cripta o instrada il tuo traffico internet";
78-
"faq_q2_a2" = "StosVPN crea solo un'interfaccia di rete locale per aiutare gli sviluppatori a connettersi a servizi locali per sviluppo e test.";
79-
"faq_q3" = "Perché la connessione fallisce?";
80-
"faq_q3_a1" = "I fallimenti di connessione possono essere dovuti a permessi di sistema, errori di configurazione o restrizioni iOS.";
81-
"faq_troubleshoot_header" = "Passaggi di risoluzione:";
82-
"faq_troubleshoot1" = "• Assicurati di aver approvato il permesso di estensione di rete";
83-
"faq_troubleshoot2" = "• Prova a riavviare l'app";
84-
"faq_troubleshoot3" = "• Verifica se la configurazione IP è valida";
85-
"faq_troubleshoot4" = "• Riavvia il dispositivo se i problemi persistono";
77+
"faq_q2_point1" = "• Instrada il tuo traffico attraverso server esterni.";
78+
"faq_q2_point2" = "• Garantisce privacy e la navigazione in incognito.";
79+
"faq_q2_point3" = "• Esegue connessioni a server VPN remoti.";
80+
"faq_q2_point4" = "• Cripta o instrada il tuo traffico internet.";
81+
"faq_q2_a2" = "StosVPN crea solo un'interfaccia di rete locale per aiutare gli sviluppatori a connettersi a servizi locali per lo sviluppo e test.";
82+
"faq_q3" = "Perché non si connette?";
83+
"faq_q3_a1" = "Un errore durante la connessione può essere dovuto a permessi di sistema, errori di configurazione o restrizioni di iOS.";
84+
"faq_troubleshoot_header" = "Passaggi per risolvere:";
85+
"faq_troubleshoot1" = "• Assicurati di aver accettato il permesso di estensione di rete.";
86+
"faq_troubleshoot2" = "• Prova a riavviare l'applicazione.";
87+
"faq_troubleshoot3" = "• Verifica se la configurazione IP è valida.";
88+
"faq_troubleshoot4" = "• Riavvia il dispositivo se i problemi persistono.";
8689
"faq_q4" = "Per chi è questa app?";
8790
"faq_q4_intro" = "StosVPN è progettato principalmente per:";
88-
"faq_q4_case1" = "• Sviluppatori che testano server web locali";
89-
"faq_q4_case2" = "• Sviluppatori app che testano funzionalità di rete";
90-
"faq_q4_case3" = "• Ingegneri QA che testano app in ambienti isolati";
91-
"faq_q4_case4" = "• Chiunque necessiti di accedere a servizi locali sull'iOS";
91+
"faq_q4_case1" = "• Sviluppatori che testano server web locali.";
92+
"faq_q4_case2" = "• Sviluppatori app che testano funzionalità di rete.";
93+
"faq_q4_case3" = "• Ingegneri QA che testano app in ambienti isolati.";
94+
"faq_q4_case4" = "• Chiunque necessiti di accedere a servizi locali sull'iOS.";
9295
"faq_q4_conclusion" = "Questa app è disponibile al pubblico ed è utile per sviluppatori che devono testare app con funzionalità di rete su iOS.";
9396
"business_model_header" = "Modello di Business";
9497
"biz_q1" = "Come funziona StosVPN?";
9598
"biz_q1_a1" = "StosVPN è un'app completamente gratuita disponibile al pubblico. Non ci sono funzionalità a pagamento, abbonamenti o acquisti in‑app.";
9699
"biz_key_points_header" = "Punti chiave del nostro modello:";
97-
"biz_point1" = "• L'app non è vincolata a nessuna azienda o gruppo";
98-
"biz_point2" = "• Chiunque può scaricare e usare l'app dall'App Store";
99-
"biz_point3" = "• Non è necessario creare un account";
100-
"biz_point4" = "• Tutte le funzionalità sono gratuite per tutti gli utenti";
101-
"biz_point5" = "• L'app è sviluppata e mantenuta come utility open per la comunità iOS";
100+
"biz_point1" = "• L'app non è vincolata a nessuna azienda o gruppo.";
101+
"biz_point2" = "• Chiunque può scaricare e usare l'app dall'App Store.";
102+
"biz_point3" = "• Non è necessario creare un account.";
103+
"biz_point4" = "• Tutte le funzionalità sono gratuite per tutti gli utenti.";
104+
"biz_point5" = "• L'app è sviluppata e mantenuta come utility open per la comunità iOS.";
102105
"app_info_header" = "Informazioni App";
103106
"requires_ios" = "Richiede iOS 14.0 o superiore";
104107
"uses_network_extension" = "Usa le Network Extension API di Apple";
@@ -119,3 +122,9 @@
119122
"setup_get_started" = "Inizia";
120123
"setup_next" = "Avanti";
121124
"setup_skip" = "Salta";
125+
126+
/*MARK: Restart pop-up*/
127+
restart_title = "Riavvia";
128+
restart_message = "Per applicare le modifiche, c'è bisogno di riavviare l'applicazione.";
129+
confirmYes = "Si";
130+
confirmNo = "No";

StosVPN/Localization/pl.lproj/Localizable.strings

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@
2323
"local" = "Lokalny";
2424
"assigned_ip" = "Przydzielony IP";
2525

26+
/* MARK: Locales */
27+
28+
"english" = "Angielski";
29+
"spanish" = "Hiszpański";
30+
"italian" = "Włoski";
31+
"polish" = "Polski";
32+
2633
/* MARK: Settings */
2734

2835
"connection_settings" = "Ustawienia połączenia";
@@ -37,11 +44,8 @@
3744
"data_collection_policy" = "Polityka zbierania danych";
3845
"app_version" = "Wersja aplikacji";
3946
"help_and_support" = "Pomoc i wsparcie";
40-
"language" = "Język";
41-
"english" = "Angielski";
42-
"spanish" = "Hiszpański";
43-
"italian" = "Włoski";
44-
"polish" = "Polski";
47+
"language" = "Ustaw język";
48+
"dropdown_language" = "Język";
4549
"settings" = "Ustawienia";
4650
"done" = "Gotowe";
4751

@@ -119,3 +123,9 @@
119123
"setup_get_started" = "Zaczynamy";
120124
"setup_next" = "Dalej";
121125
"setup_skip" = "Pomiń";
126+
127+
/*MARK: Restart pop-up*/
128+
restart_title = "Restartuj";
129+
restart_message = "Aby zastosować zmiany, należy ponownie uruchomić aplikację.";
130+
confirmYes = "Si";
131+
confirmNo = "No";

0 commit comments

Comments
 (0)