From 998a96540ca4ef78da0e172c56094885c4de08e7 Mon Sep 17 00:00:00 2001 From: vcrn <79985743+vcrn@users.noreply.github.com> Date: Sun, 21 May 2023 21:36:30 +0200 Subject: [PATCH 1/3] Add Swedish translation --- resources/fonts/full/subset_characters.txt | 5 +- src/translations/translations.rs | 99 ++++++++++++++++++++-- src/translations/translations_2.rs | 26 +++++- src/translations/types/language.rs | 6 +- src/utils/countries.rs | 1 + 5 files changed, 128 insertions(+), 9 deletions(-) diff --git a/resources/fonts/full/subset_characters.txt b/resources/fonts/full/subset_characters.txt index 1e4b25df..74d636a8 100644 --- a/resources/fonts/full/subset_characters.txt +++ b/resources/fonts/full/subset_characters.txt @@ -1,4 +1,4 @@ - + ! " # @@ -96,12 +96,15 @@ z ¿ Ê Î +Å +Ä Ö Ü à á â ã +å ä ç è diff --git a/src/translations/translations.rs b/src/translations/translations.rs index 37020ed2..77616cdc 100644 --- a/src/translations/translations.rs +++ b/src/translations/translations.rs @@ -19,6 +19,7 @@ pub fn choose_adapters_translation(language: Language) -> Text<'static> { Language::PT => "Selecione o adaptador de rede a inspecionar", Language::EL => "Επίλεξε τον προσαρμογέα δικτύου για επιθεώρηση", Language::FA => "مبدل شبکه را برای بازرسی انتخاب کنید", + Language::SE => "Välj nätverksadapter att inspektera", }) } @@ -39,6 +40,7 @@ pub fn application_protocol_translation(language: Language) -> &'static str { Language::PT => "Protocolo de aplicação", Language::EL => "Πρωτόκολλο εφαρμογής", Language::FA => "پیوندنامهٔ درخواست", + Language::SE => "Applikationsprotokoll", } } @@ -59,6 +61,7 @@ pub fn select_filters_translation(language: Language) -> Text<'static> { Language::PT => "Selecione os filtros a serem aplicados no tráfego de rede", Language::EL => "Επίλεξε τα φίλτρα για εφαρμογή στην κίνηση του δικτύου", Language::FA => "صافی ها را جهت اعمال بر آمد و شد شبکه انتخاب کنید", + Language::SE => "Välj filtren som ska appliceras på nätverkstrafiken", }) } @@ -76,6 +79,7 @@ pub fn start_translation(language: Language) -> &'static str { Language::PT => "Começar!", Language::EL => "Ξεκίνα!", Language::FA => "شروع!", + Language::SE => "Starta!", } } @@ -94,6 +98,7 @@ pub fn address_translation(language: Language) -> &'static str { Language::PT => "Endereço", Language::EL => "Διεύθυνση", Language::FA => "نشانی", + Language::SE => "Adress", } } @@ -114,6 +119,7 @@ pub fn addresses_translation(language: Language) -> &'static str { Language::PT => "Endereços", Language::EL => "Διευθύνσεις", Language::FA => "نشانی ها", + Language::SE => "Adresser", } } @@ -134,6 +140,7 @@ pub fn ip_version_translation(language: Language) -> Text<'static> { Language::PT => "Versão de IP", Language::EL => "Έκδοση IP", Language::FA => "نسخهٔ IP", + Language::SE => "IP-version", }) } @@ -153,6 +160,7 @@ pub fn transport_protocol_translation(language: Language) -> &'static str { Language::RU => "Транспортный протокол", Language::EL => "Πρωτόκολλο μεταφοράς", Language::FA => "پیوندنامهٔ ترابرد", + Language::SE => "Transportprotokoll", } } @@ -173,6 +181,7 @@ pub fn traffic_rate_translation(language: Language) -> Text<'static> { Language::PT => "Taxa de tráfego", Language::EL => "Ρυθμός κίνησης", Language::FA => "نرخ آمد و شد", + Language::SE => "Datafrekvens", }) } @@ -193,6 +202,7 @@ pub fn traffic_rate_translation(language: Language) -> Text<'static> { // Language::PT => "Conexões relevantes:", // Language::EL => "Σχετικές συνδέσεις:", // Language::FA => "پیوند های خویشاوند:", +// Language::SE => "Relevanta anslutningar:", // }) // } @@ -213,6 +223,7 @@ pub fn settings_translation(language: Language) -> &'static str { Language::PT => "Configurações", Language::EL => "Ρυθμίσεις", Language::FA => "پیکربندی", + Language::SE => "Inställningar", } } @@ -223,7 +234,7 @@ pub fn yes_translation(language: Language) -> Text<'static> { Language::FR => "Oui", Language::ES => "Sí", Language::PL => "Tak", - Language::DE => "Ja", + Language::DE | Language::SE => "Ja", Language::UK => "Так", Language::ZH => "是", Language::RO => "Da", @@ -253,6 +264,7 @@ pub fn ask_quit_translation(language: Language) -> Text<'static> { Language::PT => "Tem a certeza que deseja sair desta análise?", Language::EL => "Είσαι σίγουρος ότι θες να κλείσεις την ανάλυση;", Language::FA => "آیا مطمئن هستید می خواهید از این تحلیل خارج شوید؟", + Language::SE => "Är du säker på att du vill avsluta analysen?", }) } @@ -273,6 +285,7 @@ pub fn quit_analysis_translation(language: Language) -> String { Language::PT => "Sair da análise".to_string(), Language::EL => "Έξοδος ανάλυσης".to_string(), Language::FA => "خروج از تحلیل".to_string(), + Language::SE => "Avsluta analys".to_string(), } } @@ -293,6 +306,7 @@ pub fn ask_clear_all_translation(language: Language) -> Text<'static> { Language::PT => "Tem a certeza que deseja eliminar as notificações?", Language::EL => "Είσαι σίγουρος ότι θες να κάνεις εκκαθάριση των ειδοποιήσεων;", Language::FA => "آیا مطمئن هستید می خواهید اعلان ها را پاک کنید؟", + Language::SE => "Är du säker på att du vill radera notifikationerna?", }) } @@ -313,6 +327,7 @@ pub fn clear_all_translation(language: Language) -> String { Language::PT => "Limpar tudo".to_string(), Language::EL => "Εκκαθάριση όλων".to_string(), Language::FA => "پاک کردن همه".to_string(), + Language::SE => "Radera alla".to_string(), } } @@ -333,6 +348,7 @@ pub fn hide_translation(language: Language) -> &'static str { Language::PT => "Esconder", Language::EL => "Κλείσιμο", Language::FA => "پنهان کردن", + Language::SE => "Göm", } } @@ -353,6 +369,7 @@ pub fn network_adapter_translation(language: Language) -> &'static str { Language::PT => "Adaptador de rede", Language::EL => "Προσαρμογέας δικτύου", Language::FA => "مبدل شبکه", + Language::SE => "Nätverksadapter", } } @@ -403,6 +420,9 @@ pub fn no_addresses_translation(language: Language, adapter: &str) -> Text<'stat Language::FA => format!("هیچ آمد و شدی قابل مشاهده نیست چون مبدلی که انتخاب کرده اید هیچ نشانی فعالی ندارد...\n\n\ مبدل شبکه: {adapter}\n\n\ اگر مطمئن هستید به اینترنت وصل هستید، سعی کنید مبدل متفاوتی را انتخاب کنید."), + Language::SE => format!("Det går inte att observa någon trafik eftersom den valda adaptern inte har några aktiva adresser ...\n\n\ + Nätverksadapter: {adapter}\n\n\ + Om du är säker att du är ansluten till internet, testa att välja en annan adapter."), }) } @@ -453,6 +473,9 @@ pub fn waiting_translation(language: Language, adapter: &str) -> Text<'static> { Language::FA => format!("هنوز هیچ آمد و شدی مشاهده نشده است. در حال انتظار برای بسته های شبکه...\n\n مبدل شبکه: {adapter}\n\n آیا مطمئن هستید به اینترنت وصل هستید و مبدل درست را انتخاب کرده اید؟"), + Language::SE => format!("Ingen trafik har observerats ännu. Väntar på paket ...\n\n\ + Nätverksadapter: {adapter}\n\n\ + Är du säker på att du är ansluten till internet och att du har valt rätt adapter?"), }) } @@ -478,7 +501,7 @@ pub fn some_observed_translation( Przefiltrowane pakiety: 0\n\n\ Niektóre pakiety zostały przechwycone, ale żaden nie został wybrany zgodnie z wskazanymi filtrami...\n\n{filters}"), Language::DE => format!("Anzahl der empfangenen Pakete: {observed}\n\n\ - gefilterte Pakete: 0\n\n\ + Gefilterte Pakete: 0\n\n\ Ein Paar Pakete wurden empfangen, aber es entsprechen noch keine den spezifizierten Filtern...\n\n{filters}"), Language::UK => format!("Сума перехоплених пакетів: {observed}\n\n\ Відфільтровані пакеті: 0\n\n\ @@ -507,6 +530,9 @@ pub fn some_observed_translation( Language::FA => format!("مجموع بسته های رهگیری شده: {observed}\n\n\ بسته های صاف شده: 0\n\n\ شماری از بسته ها رهگیری شده اند، ولی هنوز هیچ کدام بر اساس صافی تعیین شده شما انتخاب نشده اند...\n\n{filters}"), + Language::SE => format!("Antal fångade paket: {observed}\n\n\ + Filtrerade paket: 0\n\n\ + Några paket har fångats, men än har inget valts enligt de angivna filtren ...\n\n{filters}"), }) } @@ -527,6 +553,7 @@ pub fn filtered_packets_translation(language: Language) -> &'static str { Language::PT => "Pacotes filtrados", Language::EL => "Φιλτραρισμένα πακέτα", Language::FA => "بسته های صاف شده", + Language::SE => "Filtrerade paket", } } @@ -546,6 +573,7 @@ pub fn filtered_bytes_translation(language: Language) -> &'static str { Language::RU => "Отфильтровано байт", Language::EL => "Φιλτραρισμένα bytes", Language::FA => "بایت های صاف شده", + Language::SE => "Filtrerade bytes", } } @@ -580,6 +608,7 @@ pub fn of_total_translation(language: Language, percentage: &str) -> String { format!("({percentage} από τα συνολικά)") } Language::FA => format!("({percentage} از مجموع)"), + Language::SE => format!("({percentage} av totalen)"), } } @@ -600,6 +629,7 @@ pub fn of_total_translation(language: Language, percentage: &str) -> String { // Language::PT => "Pacotes filtrados por protocolo de aplicação:", // Language::EL => "Φιλτραρισμένα πακέτα ανά πρωτόκολλο εφαρμογής:", // Language::FA => "بسته های صاف شده برای هر پیوندنامهٔ درخواست:", +// Language::SE => "Filtrerade paket per applikationsprotokoll:", // }) // } @@ -635,6 +665,8 @@ pub fn of_total_translation(language: Language, percentage: &str) -> String { // Για να προσθέσεις μια σύνδεση στα αγαπημένα σου, κλίκαρε στο σύμβολο με το αστέρι δίπλα στη σύνδεση.", // Language::FA => "در حال حاضر هیچ چیزی برای نمایش نیست.\n\ // برای افزودن یک پیوند به پسندیده های خود، روی نشان ستاره کنار پیوند کلیک کنید.", +// Language::SE => "Inget att visa för tillfälet.\n\ +// För att lägga till anslutningar till dina favoriter, klicka på stjärnsymbolen nära anslutningen.", // }) // } @@ -700,6 +732,10 @@ pub fn error_translation(language: Language, error: &str) -> Text<'static> { "خطایی رخ داد! \n\n\ {error}" ), + Language::SE => format!( + "Ett fel inträffade! \n\n\ + {error}" + ), }) } @@ -719,6 +755,7 @@ pub fn both_translation(language: Language) -> &'static str { Language::RU => "оба", Language::EL => "αμφότερα", Language::FA => "هر دو", + Language::SE => "båda", } } @@ -732,6 +769,7 @@ pub fn both_translation(language: Language) -> &'static str { // Language::DE => "Alle Protokolle", // Language::RU => "Все протоколы", // Language::FA => "همهٔ پیوندنامه ها", +// Language::SE => "Alla protokoll", // } // } @@ -751,6 +789,7 @@ pub fn all_translation(language: Language) -> &'static str { Language::RU => "Всё", Language::EL => "Όλα", Language::FA => "همه", + Language::SE => "Alla", } } @@ -771,6 +810,7 @@ pub fn packets_translation(language: Language) -> &'static str { Language::PT => "pacotes", Language::EL => "πακέτα", Language::FA => "بسته ها", + Language::SE => "paket", } } @@ -791,12 +831,15 @@ pub fn packets_chart_translation(language: Language) -> &'static str { Language::PT => "pacotes por segundo", Language::EL => "πακέτα ανά δευτερόλεπτο", Language::FA => "بسته در ثانیه", + Language::SE => "paket per sekund", } } pub fn bytes_translation(language: Language) -> &'static str { match language { - Language::EN | Language::ES | Language::PT | Language::DE | Language::EL => "bytes", + Language::EN | Language::ES | Language::PT | Language::DE | Language::EL | Language::SE => { + "bytes" + } Language::IT => "byte", Language::FR => "octets", Language::PL => "bajty", @@ -826,6 +869,7 @@ pub fn bytes_chart_translation(language: Language) -> &'static str { Language::RU => "байтов в секунду", Language::EL => "bytes ανά δευτερόλεπτο", Language::FA => "بایت در ثانیه", + Language::SE => "bytes per sekund", } } @@ -846,6 +890,7 @@ pub fn recent_report_translation(language: Language) -> &'static str { Language::PT => "mais recente", Language::EL => "πιο πρόσφατα", Language::FA => "آخرین", + Language::SE => "senaste", } } @@ -866,6 +911,7 @@ pub fn packets_report_translation(language: Language) -> &'static str { Language::PT => "mais pacotes", Language::EL => "περισσότερα πακέτα", Language::FA => "بیشترین بسته ها", + Language::SE => "flest paket", } } @@ -886,6 +932,7 @@ pub fn bytes_report_translation(language: Language) -> &'static str { Language::PT => "mais bytes", Language::EL => "περισσότερα bytes", Language::FA => "بیشترین بایت ها", + Language::SE => "flest bytes", } } @@ -905,6 +952,7 @@ pub fn bytes_report_translation(language: Language) -> &'static str { // Language::RU => "избранное", // Language::EL => "αγαπημένα", // Language::FA => "پسندیده ها", +// Language::SE => "favoriter", // } // } @@ -925,6 +973,7 @@ pub fn notifications_title_translation(language: Language) -> Text<'static> { Language::PT => "Personalize as suas notificações", Language::EL => "Εξατομίκευση ειδοποιήσεων", Language::FA => "اعلان های خود را سفارشی کنید", + Language::SE => "Anpassa dina notifikationer", }) } @@ -945,6 +994,7 @@ pub fn appearance_title_translation(language: Language) -> Text<'static> { Language::PT => "Escolha o seu tema favorito", Language::EL => "Επίλεξε το αγαπημένο σου θέμα", Language::FA => "زمینه دلخواه خود را انتخاب کنید", + Language::SE => "Välj ditt favorittema", }) } @@ -965,6 +1015,7 @@ pub fn languages_title_translation(language: Language) -> Text<'static> { Language::PT => "Selecione o seu idioma", Language::EL => "Επίλεξε τη γλώσσα σου", Language::FA => "زبان خود را انتخاب کنید", + Language::SE => "Välj ditt språk", }) } @@ -985,6 +1036,7 @@ pub fn active_filters_translation(language: Language) -> &'static str { Language::PT => "Filtros ativos", Language::EL => "Ενεργά φίλτρα", Language::FA => "صافی های فعال", + Language::SE => "Aktiva filter", } } @@ -1005,6 +1057,7 @@ pub fn none_translation(language: Language) -> String { Language::PT => "nenhum", Language::EL => "κανένα", Language::FA => "هیچ کدام", + Language::SE => "inga", } .to_string() } @@ -1026,6 +1079,7 @@ pub fn yeti_night_translation(language: Language) -> &'static str { Language::PT => "Tema escuro original de Sniffnet", Language::EL => "Το αυθεντικό σκούρο θέμα του Sniffnet", Language::FA => "زمینه تاریک اصلی Sniffnet", + Language::SE => "Sniffnets ursprungliga mörka tema", } } @@ -1045,6 +1099,7 @@ pub fn yeti_day_translation(language: Language) -> &'static str { Language::RU => "Оригинальная светая тема Sniffnet'а", Language::EL => "Το αυθεντικό ανοιχτόχρωμο θέμα του Sniffnet", Language::FA => "زمینه روشن اصلی Sniffnet", + Language::SE => "Sniffnets ursprungliga ljusa tema", } } @@ -1065,6 +1120,7 @@ pub fn deep_sea_translation(language: Language) -> &'static str { Language::PT => "Para mergulhar no tráfego de rede", Language::EL => "Βουτιά μέσα στην κίνηση του δικτύου", Language::FA => "شیرجه رفتن در آمد و شد شبکه", + Language::SE => "För att dyka ned i nätverkstrafiken", } } @@ -1085,6 +1141,7 @@ pub fn mon_amour_translation(language: Language) -> &'static str { Language::PT => "Tema encantador feito para sonhadores", Language::EL => "Φτιαγμένο για ονειροπόλους", Language::FA => "زمینه دلپذیر ساخته شده برای رویا پردازان", + Language::SE => "Ljuvligt tema gjort för drömmare", } } @@ -1105,6 +1162,7 @@ pub fn incoming_translation(language: Language) -> &'static str { Language::PT => "Entrando", Language::EL => "Εισερχόμενα", Language::FA => "ورودی", + Language::SE => "Inkommande", } } @@ -1125,6 +1183,7 @@ pub fn outgoing_translation(language: Language) -> &'static str { Language::PT => "Saindo", Language::EL => "Εξερχόμενα", Language::FA => "خروجی", + Language::SE => "Utgående", } } @@ -1144,6 +1203,7 @@ pub fn notifications_translation(language: Language) -> &'static str { Language::PT => "Notificações", Language::EL => "Ειδοποιήσεις", Language::FA => "اعلان ها", + Language::SE => "Notifikationer", } } @@ -1153,7 +1213,7 @@ pub fn style_translation(language: Language) -> &'static str { Language::IT => "Stile", Language::ES | Language::PT => "Estilo", Language::PL => "Styl", - Language::DE | Language::RO | Language::TR => "Stil", + Language::DE | Language::RO | Language::TR | Language::SE => "Stil", Language::UK | Language::RU => "Стиль", Language::ZH => "主题", Language::KO => "스타일", @@ -1179,6 +1239,7 @@ pub fn language_translation(language: Language) -> &'static str { Language::PT => "Língua", Language::EL => "Γλώσσα", Language::FA => "زبان", + Language::SE => "Språk", } } @@ -1199,6 +1260,7 @@ pub fn overview_translation(language: Language) -> &'static str { Language::PT => "Visão geral", Language::EL => "επισκόπηση", Language::FA => "نمای کلی", + Language::SE => "Översikt", } } @@ -1219,6 +1281,7 @@ pub fn packets_threshold_translation(language: Language) -> &'static str { Language::PT => "Notifique-me quando um limite de pacotes for excedido", Language::EL => "Ειδοποίησέ με όταν το όριο τον πακέτων ξεπεραστεί", Language::FA => "به من اطلاع بده وقتی آستانه یک بسته فراتر رفت", + Language::SE => "Notifiera mig när en paketgräns har överstigits", } } @@ -1239,6 +1302,7 @@ pub fn bytes_threshold_translation(language: Language) -> &'static str { Language::PT => "Notifique-me quando um limite de bytes for excedido", Language::EL => "Ειδοποίησέ με όταν το όριο των bytes ξεπεραστεί", Language::FA => "به من اطلاع بده وقتی آستانه یک بایت فراتر رفت", + Language::SE => "Notifiera mig när en gräns för bytes har överstigits", } } @@ -1258,6 +1322,7 @@ pub fn per_second_translation(language: Language) -> &'static str { Language::RU => "(в секунду)", Language::EL => "(ανά δευτερόλεπτο)", Language::FA => "(در ثانیه)", + Language::SE => "(per sekund)", } } @@ -1278,6 +1343,7 @@ pub fn specify_multiples_translation(language: Language) -> &'static str { Language::PT => "; também pode especificar 'K', 'M' e 'G'", Language::EL => "• μπορείς επίσης να καθορίσεις τα 'K', 'M' και 'G'", Language::FA => "؛ شما همچنین می توانید 'M'، 'K' و 'G' را تعیین کنید", + Language::SE => "; du kan också ange 'K', 'M' och 'G'", } } @@ -1300,6 +1366,7 @@ pub fn favorite_notification_translation(language: Language) -> &'static str { Language::PT => "Notificar-me quando novos dados forem trocados dos meus favoritos", Language::EL => "Ειδοποίησέ με όταν νέα δεδομένα έχουν ανταλλαγεί από τα αγαπημένα μου", Language::FA => "به من اطلاع بده وقتی داده جدید از پسندیده های من مبادله شد", + Language::SE => "Notifiera mig när ny data utbyts av mina favoriter", } } @@ -1320,6 +1387,7 @@ pub fn threshold_translation(language: Language) -> String { Language::PT => "Limite".to_string(), Language::EL => "όριο".to_string(), Language::FA => "آستانه".to_string(), + Language::SE => "Gräns".to_string(), } } @@ -1337,6 +1405,7 @@ pub fn volume_translation(language: Language) -> &'static str { Language::RU => "Объём", Language::EL => "Ένταση", Language::FA => "حجم", + Language::SE => "Volym", } } @@ -1356,6 +1425,7 @@ pub fn sound_translation(language: Language) -> &'static str { Language::PT => "Som", Language::EL => "Ήχος", Language::FA => "صدا", + Language::SE => "Ljud", } } @@ -1376,6 +1446,7 @@ pub fn open_report_translation(language: Language) -> &'static str { Language::PT => "Abrir relatório completo", Language::EL => "Άνοιγμα της πλήρους αναφοράς", Language::FA => "گزارش کامل را باز کن", + Language::SE => "Öppna fullständig rapport", } } @@ -1396,6 +1467,7 @@ pub fn bytes_exceeded_translation(language: Language) -> &'static str { Language::PT => "Limite de bytes excedido!", Language::EL => "Το όριο των bytes ξεπεράστηκε!", Language::FA => "آستانه بایت فراتر رفت!", + Language::SE => "Gräns för bytes överskriden!", } } @@ -1417,6 +1489,7 @@ pub fn bytes_exceeded_value_translation(language: Language, value: &str) -> Stri Language::PT => format!("Foram trocados {trimmed_value} bytes"), Language::EL => format!("{trimmed_value} bytes έχουν ανταλλαγεί"), Language::FA => format!("{trimmed_value} بایت مبادله شده است"), + Language::SE => format!("{trimmed_value} bytes har utbytts"), } } @@ -1437,6 +1510,7 @@ pub fn packets_exceeded_translation(language: Language) -> &'static str { Language::PT => "Limite de pacotes excedido!", Language::EL => "Το όριο των πακέτων ξεπεράστηκε!", Language::FA => "آستانه بسته فراتر رفت!", + Language::SE => "Paketgräns överskriden!", } } @@ -1472,6 +1546,10 @@ pub fn packets_exceeded_value_translation(language: Language, value: u32) -> Str npackets => format!("{npackets} πακέτα έχουν ανταλλαγεί"), }, Language::FA => format!("{value} بسته مبادله شده است"), + Language::SE => match value { + 1 => "1 paket har utbytts".to_owned(), + npackets => format!("{npackets} paket har utbytts"), + }, } } @@ -1492,13 +1570,14 @@ pub fn favorite_transmitted_translation(language: Language) -> &'static str { Language::PT => "Novos dados trocados dos favoritos!", Language::EL => "Καινούρια δεδομένα έχουν ανταλλαγεί στα αγαπημένα!", Language::FA => "مبادله داده جدید از پسندیده ها!", + Language::SE => "Ny data utbytt av favoriter!", } } pub fn no_notifications_set_translation(language: Language) -> Text<'static> { Text::new(match language { Language::EN => "You haven't enabled notifications yet!\n\n\ - After you will enable them, this page will display a log of your notifications\n\n\ + After enabling them, this page will display a log of your notifications\n\n\ You can enable notifications from settings:", Language::IT => "Non hai ancora abilitato le notifiche!\n\n\ Dopo che le avrai abilitate, questa pagina mostrerà una collezione delle tue notifiche\n\n\ @@ -1542,6 +1621,9 @@ pub fn no_notifications_set_translation(language: Language) -> Text<'static> { Language::FA => "شما هنوز اعلان ها را فعال نکرده اید!\n\n\ پس از آنکه آن ها را فعال کنید، این صفحه یک کارنامه از اعلان های شما را نمایش خواهد داد\n\n شما می توانید اعلان ها را از پیکربندی فعال کنید:", + Language::SE => "Du har inte aktiverat notifikationer än!\n\n\ + Efter att du aktiverat dem så kommer denna sida att visa en logg av dina notifikationer\n\n\ + Du kan aktivera notifikationer i inställingarna", }) } @@ -1549,7 +1631,7 @@ pub fn no_notifications_received_translation(language: Language) -> Text<'static Text::new(match language { Language::EN => { "Nothing to see at the moment...\n\n\ - When you will receive a notification, it will be displayed here" + When you receive a notification, it will be displayed here" } Language::IT => { "Nulla da vedere al momento...\n\n\ @@ -1607,6 +1689,10 @@ pub fn no_notifications_received_translation(language: Language) -> Text<'static "در حال حاضر هیچ چیزی برای دیدن نیست...\n\n\ وقتی شما اعلانی دریافت می کنید، در اینجا نمایش داده خواهد شد" } + Language::SE => { + "Inget att se för tillfället ...\n\n\ + När du tar emot en notifikation så kommer den att visas här" + } }) } @@ -1627,5 +1713,6 @@ pub fn only_last_30_translation(language: Language) -> &'static str { Language::PT => "São mostradas apenas as últimas 30 notificações", Language::EL => "Μόνο οι τελευταίες 30 ειδοποιήσεις απεικονίζονται", Language::FA => "تنها ۳۰ اعلان آخر نمایش داده شده اند", + Language::SE => "Endast de senaste 30 notifikationerna visas", } } diff --git a/src/translations/translations_2.rs b/src/translations/translations_2.rs index 76cf89d8..50c4c336 100644 --- a/src/translations/translations_2.rs +++ b/src/translations/translations_2.rs @@ -9,6 +9,7 @@ pub fn new_version_available_translation(language: Language) -> &'static str { Language::RU => "Новая версия доступна на GitHub", Language::EL => "Μια νεότερη έκδοση είναι διαθέσιμη στο GitHub", Language::FA => "یک نسخه جدیدتر روی GitHub موجود است", + Language::SE => "En nyare version finns tillgänglig på GitHub", _ => "A newer version is available on GitHub", } } @@ -22,6 +23,7 @@ pub fn inspect_translation(language: Language) -> &'static str { Language::PL => "Sprawdź", Language::DE => "Überprüfen", Language::RU => "Инспектировать", + Language::SE => "Inspektera", _ => "Inspect", } } @@ -30,6 +32,7 @@ pub fn connection_details_translation(language: Language) -> &'static str { match language { Language::EN => "Connection details", Language::IT => "Dettagli della connessione", + Language::SE => "Anslutningsdetaljer", _ => "Connection details", } } @@ -38,6 +41,7 @@ pub fn dropped_packets_translation(language: Language) -> &'static str { match language { Language::EN => "Dropped packets", Language::IT => "Pacchetti mancati", + Language::SE => "Tappade paket", _ => "Dropped packets", } } @@ -46,6 +50,7 @@ pub fn data_representation_translation(language: Language) -> &'static str { match language { Language::EN => "Data representation", Language::IT => "Rappresentazione dei dati", + Language::SE => "Datarepresentation", _ => "Data representation", } } @@ -54,6 +59,7 @@ pub fn host_translation(language: Language) -> &'static str { match language { Language::EN => "Network host", Language::IT => "Host di rete", + Language::SE => "Nätverksvärd", _ => "Network host", } } @@ -62,6 +68,7 @@ pub fn only_top_30_hosts_translation(language: Language) -> &'static str { match language { Language::EN => "Only the top 30 hosts are displayed here", Language::IT => "Solo i maggiori 30 host sono mostrati qui", + Language::SE => "Endast de 30 främsta värdarna visas här", _ => "Only the top 30 hosts are displayed here", } } @@ -70,6 +77,7 @@ pub fn sort_by_translation(language: Language) -> &'static str { match language { Language::EN => "Sort by", Language::IT => "Ordina per", + Language::SE => "Sortera efter", _ => "Sort by", } } @@ -78,6 +86,7 @@ pub fn local_translation(language: Language) -> String { match language { Language::EN => "Local network", Language::IT => "Rete locale", + Language::SE => "Lokalt nätverk", _ => "Local network", } .to_string() @@ -87,6 +96,7 @@ pub fn unknown_translation(language: Language) -> String { match language { Language::EN => "Unknown location", Language::IT => "Localizzazione sconosciuta", + Language::SE => "Okänd plats", _ => "Unknown location", } .to_string() @@ -96,6 +106,7 @@ pub fn your_network_adapter_translation(language: Language) -> String { match language { Language::EN => "Your network adapter", Language::IT => "La tua scheda di rete", + Language::SE => "Din nätverksadapter", _ => "Your network adapter", } .to_string() @@ -105,6 +116,7 @@ pub fn socket_address_translation(language: Language) -> &'static str { match language { Language::EN => "Socket address", Language::IT => "Indirizzo del socket", + Language::SE => "Socketadress", _ => "Socket address", } } @@ -113,6 +125,7 @@ pub fn mac_address_translation(language: Language) -> &'static str { match language { Language::EN => "MAC address", Language::IT => "Indirizzo MAC", + Language::SE => "MAC-adress", _ => "MAC address", } } @@ -121,13 +134,14 @@ pub fn source_translation(language: Language) -> &'static str { match language { Language::EN => "Source", Language::IT => "Sorgente", + Language::SE => "Källa", _ => "Source", } } pub fn destination_translation(language: Language) -> &'static str { match language { - Language::EN => "Destination", + Language::EN | Language::SE => "Destination", Language::IT => "Destinazione", _ => "Destination", } @@ -137,6 +151,7 @@ pub fn fqdn_translation(language: Language) -> &'static str { match language { Language::EN => "Fully qualified domain name", Language::IT => "Nome di dominio completo", + Language::SE => "Fullständigt domännamn", _ => "Fully qualified domain name", } } @@ -145,6 +160,7 @@ pub fn administrative_entity_translation(language: Language) -> &'static str { match language { Language::EN => "Administrative entity", Language::IT => "Entità amministrativa", + Language::SE => "Administrativ enhet", _ => "Administrative entity", } } @@ -153,6 +169,7 @@ pub fn transmitted_data_translation(language: Language) -> &'static str { match language { Language::EN => "Transmitted data", Language::IT => "Dati trasmessi", + Language::SE => "Överförd data", _ => "Transmitted data", } } @@ -161,6 +178,7 @@ pub fn country_translation(language: Language) -> &'static str { match language { Language::EN => "Country", Language::IT => "Paese", + Language::SE => "Land", _ => "Country", } } @@ -169,6 +187,7 @@ pub fn domain_name_translation(language: Language) -> &'static str { match language { Language::EN => "Domain name", Language::IT => "Nome di dominio", + Language::SE => "Domännamn", _ => "Domain name", } } @@ -177,6 +196,7 @@ pub fn only_show_favorites_translation(language: Language) -> &'static str { match language { Language::EN => "Only show favorites", Language::IT => "Mostra solo i preferiti", + Language::SE => "Visa endast favoriter", _ => "Only show favorites", } } @@ -185,6 +205,7 @@ pub fn search_filters_translation(language: Language) -> &'static str { match language { Language::EN => "Search filters", Language::IT => "Filtri di ricerca", + Language::SE => "Sökfilter", _ => "Search filters", } } @@ -193,6 +214,7 @@ pub fn no_search_results_translation(language: Language) -> &'static str { match language { Language::EN => "No result available according to the specified search filters", Language::IT => "Nessun risultato disponibile secondo i filtri di ricerca specificati", + Language::SE => "Inga resultat tillgängliga utifrån de angivna sökfilterna", _ => "No result available according to the specified search filters", } } @@ -206,6 +228,7 @@ pub fn showing_results_translation( match language { Language::EN => format!("Showing {start}-{end} of {total} total results"), Language::IT => format!("Sono mostrati {start}-{end} di {total} risultati totali"), + Language::SE => format!("Visar {start}-{end} av {total} totala resultat"), _ => format!("Showing {start}-{end} of {total} total results"), } } @@ -215,6 +238,7 @@ pub fn color_gradients_translation(language: Language) -> &'static str { match language { Language::EN => "Apply color gradients", Language::IT => "Applica sfumature di colore", + Language::SE => "Applicera färggradient", _ => "Apply color gradients", } } diff --git a/src/translations/types/language.rs b/src/translations/types/language.rs index 44ed8ada..d628eb70 100644 --- a/src/translations/types/language.rs +++ b/src/translations/types/language.rs @@ -33,6 +33,8 @@ pub enum Language { EL, /// Persian FA, + /// Swedish + SE, } impl Default for Language { @@ -42,12 +44,13 @@ impl Default for Language { } impl Language { - pub(crate) const COL1: [Language; 5] = [ + pub(crate) const COL1: [Language; 6] = [ Language::EN, Language::ES, Language::IT, Language::PT, Language::TR, + Language::SE, ]; pub(crate) const COL2: [Language; 5] = [ Language::DE, @@ -81,6 +84,7 @@ impl Language { Language::PT => "Português", Language::EL => "Ελληνικά", Language::FA => "فارسی", + Language::SE => "Svenska", } } } diff --git a/src/utils/countries.rs b/src/utils/countries.rs index dd407f78..11bf4b7c 100644 --- a/src/utils/countries.rs +++ b/src/utils/countries.rs @@ -303,6 +303,7 @@ pub fn get_flag_from_language_code(language: &str) -> Svg { "UK" => UA, "EL" => GR, "FA" => IR, + "SE" => SE, _ => UNKNOWN, }))) .width(Length::Fixed(FLAGS_WIDTH_SMALL)) From 479196345f7e0430b583ec6c490ebacafc4b6d60 Mon Sep 17 00:00:00 2001 From: Giuliano Bellini s294739 Date: Wed, 24 May 2023 12:18:40 +0200 Subject: [PATCH 2/3] fix: missing chars, language page structure, Swedish code --- resources/fonts/full/subset_characters.txt | 7 +- .../subset/sarasa-mono-sc-bold.subset.ttf | Bin 117956 -> 118160 bytes .../subset/sarasa-mono-sc-regular.subset.ttf | Bin 119228 -> 119432 bytes src/gui/components/radio.rs | 46 +++--- src/gui/pages/settings_language_page.rs | 31 +++-- src/translations/translations.rs | 131 +++++++++--------- src/translations/translations_2.rs | 50 +++---- src/translations/types/language.rs | 30 +--- src/utils/countries.rs | 35 +++-- 9 files changed, 158 insertions(+), 172 deletions(-) diff --git a/resources/fonts/full/subset_characters.txt b/resources/fonts/full/subset_characters.txt index 74d636a8..4eb941ed 100644 --- a/resources/fonts/full/subset_characters.txt +++ b/resources/fonts/full/subset_characters.txt @@ -1,4 +1,4 @@ - + ! " # @@ -94,18 +94,17 @@ z } ¡ ¿ +Ä Ê Î -Å -Ä Ö Ü à á â ã -å ä +å ç è é diff --git a/resources/fonts/subset/sarasa-mono-sc-bold.subset.ttf b/resources/fonts/subset/sarasa-mono-sc-bold.subset.ttf index a9fd20950bfe9864eec4a0886071ccdddf821450..353a34a56f17b5633b154bc715ddc1144baac6e0 100644 GIT binary patch delta 7876 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%0AdC^t z7J3W$LM>r`p-SETI%(a;I*XbcHUHGyt65evuV!?Oe)Xm5Gu6@6hSh3S9aTkD$yI`? zg;lev0;~M1Y>#GE{#iMsVnanlMR3KK!{LYh%D8H{crPoR~l?v=imzDY- z$~&Za@YBK6gZzX24@eJ8DSlpjwfI2M)}pCJ;|tpg>k6|AvkLizBloxO|GaP6KF59b z1>%CXf;k0I1vLfR3z7$2BmCuI9)HD%t(T)0Oi{rfb}-KK)wLsNWGymx)v6}j`Tol!gbZ~wGCeB1kNTegL4 zjYw|W)RsJd(+`4~Km0BTU$2xDk)*aJAkih!Dp4;{Y4wNIuUEfX{bW_;s;GpJ1oH&_ z1dW7&2`ceV${22Kp z@^Pf#&&YL=Ns)1pvm&QNhDLfsnnd=Eq!A4fc@b(6s*_tM9}9aN_FEVVT^qV2)IZcF zR3~&uCng076r`rKk1+9zt&IYXD;wF94{W9G=9Q(zwy4~PL4a~lk2nI zXR(i!kEPErA6*{}?>6thy-$1Bc)NL9dDVCod9C$I^wjWF^Bm|&Jid4w_9*qp^I$wO zJXXWEZmh=w4<8SA{;&KKd?{bVFXAue2lE~I)_ilmuKQQ_FYce*-@3nYf8zeD`xW=K z?rYqqM!U~*`|P&aZM|FE=y#*fxJ0@HjQVxd#!)e&?41AQwA;zS(bS>U;hICE!+eK; zkss{u+Q-@>J5SqO+jQGGw$p9>Y<+FLZAaVM*%aA?*@W0kv_TYp{fm9_aRg<;^05+= zvmfi@O0jT1cA%j<;gqJJRJiVghjom~U|@6@RlxNq`WddjU`vFtHMT|++hJ$;?1Ek3 zIvS5gm{gKK;d+lQM3_d?XvXmXUW2WfiUZhMuoL-kzL#>omvg=oIp1qI-|N74e^iLo zu{vtSgCWjMh+vQ2Vn^(V-h=PoQ5(5QZek!I3T2u?0 zLzeJz1g>HDCLTtv$%jDk;s3l#INqdQ?2El5IYWMx2ayoD6x7Z8rWJJM(XIObUk{anbe#P6I7|L} z^w@WCW(m$A>QA{M!>Au3Xe82PJj$`TfSe#F$tloiqTkR>^b9>mFVH{e6?%={pttB9 zYC|8~a2PMg^bc~A zS$_mi(EWq7lA91~2Dl)IhejhxIE=Y_1RJR<)CzDw1)j$l$5mi~CiDSV3^ofjNb3pQ zp*t{rDzVA%c2+>DiWwjsj)ssIi*rrMv)xI)QcC+Uxs~ki zPexRUy(SN)LnsfH zX9c-}aG*;y4p-3t9${Hb25?k>0RRS3SdCrBg9+r)hrA(gU_x!A4OFUBm9t zca!CPAzy$eBeI@6#;yiOsX~4%2`Dlqy9STIx0vHKI2LYpwXkWo#38jfny5b_e}jkT z z>v3$LEDtl6F+G9J^qi;@IGRK!acp*0@&JR-Af^^v+p^~o1Bng5l8J)M8p_FCcodD2 z2jF~xa2*1ejH08!K9WXqY)^#^@`QmYXc?`OIC8`&E&xj=3NmZh6+n*9p>q&sM%G|m zrs^d27H}?EjN1dYvk!pX{1YX^VE04~1!9$MEru_kQ{56F64>bb7P;{r$bE!Qa8 zpuj$I?V{xr)*aQ8YJ)VOk+s9o>|i@2kwN{j)dw9Fnwm1(`Jlb&LR08}8tVyKd$dTl zL9qD|$oeu|ze9GkKluZi!~oI?ZAFc$(?Re!b_+Tt4;rdA^v-@%lXI%Uxzz&4tVV~` zK{xFKDSU>|npA_8=s?m*RXJoJG#iZUn3B_2ThQGL;rZ@O*94&#LTX>S=D=ppwq<3u zF>{@eZN3^1Op|TjYzqW;eMvKh(ZGfap^LIpP8&jGQT3 zyK)nZf+$-#3I{uYZcI(O5eP+jOxzi)8D&Q0PoHcg7FLEUMuy!~f{YQR7L;pY-43D5 z=m@rh0go-S-lYLWLv5%nbN>u1&TTr9I#5SyN9}1e(3O!P^eVP*LBHa9mmpqUv^cVt98DW7`LF=~Nm4jQ(K3u8R@7GO%LodiAulLp*4*QFJDqMQ6{ZbLd?99i30-0Wg~` zqzk$v&LOztaqhU;_HYQvz--tA*x*sDm+s^sY4|rJ)Cs9zuK$RC(p)5i->&d_V-aL! e2oDRE;K-P%IEUe_iLsdcgo~6gVu~+g^M3;toR47u delta 7852 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 KMoivyZ2oWcBWm;j delta 7526 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 Column<'static, Message> { - let mut ret_val = Column::new().spacing(10); +) -> Row<'static, Message> { + let mut ret_val = Row::new().spacing(10); for option in collection { ret_val = ret_val.push( - Row::new() - .align_items(Alignment::Center) - .push( - Radio::new( - format!("{} ({:?})", option.get_radio_label(), option), - *option, - Some(active), - Message::LanguageSelection, + Row::new().align_items(Alignment::Center).push( + Row::new() + .width(Length::Fixed(180.0)) + .push( + Radio::new( + format!("{} ({:?})", option.get_radio_label(), option), + *option, + Some(active), + Message::LanguageSelection, + ) + .spacing(7) + .font(font) + .size(15) + .style( + >::into(StyleTuple( + style, + ElementType::Standard, + )), + ), ) - .spacing(7) - .font(font) - .size(15) - .style(>::into(StyleTuple( - style, - ElementType::Standard, - ))), - ) - .push(horizontal_space(Length::Fixed(8.0))) - .push(get_flag_from_language_code(&format!("{option:?}"))), + .push(horizontal_space(Length::Fixed(8.0))) + .push(get_flag_from_language(*option)), + ), ); } ret_val diff --git a/src/gui/pages/settings_language_page.rs b/src/gui/pages/settings_language_page.rs index 07655194..62aa2d87 100644 --- a/src/gui/pages/settings_language_page.rs +++ b/src/gui/pages/settings_language_page.rs @@ -1,4 +1,4 @@ -use iced::widget::{Column, Container, Row, Text}; +use iced::widget::{Column, Container, Text}; use iced::Length::Fixed; use iced::{Alignment, Length}; use iced_native::widget::vertical_space; @@ -18,17 +18,20 @@ pub fn settings_language_page(sniffer: &Sniffer) -> Container { let font = get_font(sniffer.style); let language_active = sniffer.language; - let col_language_radio_1 = - language_radios(language_active, &Language::COL1, font, sniffer.style); - let col_language_radio_2 = - language_radios(language_active, &Language::COL2, font, sniffer.style); - let col_language_radio_3 = - language_radios(language_active, &Language::COL3, font, sniffer.style); - let row_language_radio = Row::new() - .spacing(50) - .push(col_language_radio_1) - .push(col_language_radio_2) - .push(col_language_radio_3); + let row_language_radio_1 = + language_radios(language_active, &Language::ROW1, font, sniffer.style); + let row_language_radio_2 = + language_radios(language_active, &Language::ROW2, font, sniffer.style); + let row_language_radio_3 = + language_radios(language_active, &Language::ROW3, font, sniffer.style); + let row_language_radio_4 = + language_radios(language_active, &Language::ROW4, font, sniffer.style); + let col_language_radio_all = Column::new() + .spacing(20) + .push(row_language_radio_1) + .push(row_language_radio_2) + .push(row_language_radio_3) + .push(row_language_radio_4); let mut content = Column::new() .align_items(Alignment::Center) @@ -58,7 +61,7 @@ pub fn settings_language_page(sniffer: &Sniffer) -> Container { ) .push(vertical_space(Fixed(20.0))); - if ![Language::EN, Language::IT].contains(&sniffer.language) { + if ![Language::EN, Language::IT, Language::SV].contains(&sniffer.language) { content = content .push( Container::new( @@ -73,7 +76,7 @@ pub fn settings_language_page(sniffer: &Sniffer) -> Container { .push(vertical_space(Fixed(20.0))); } - content = content.push(row_language_radio); + content = content.push(col_language_radio_all); Container::new(content) .height(Fixed(400.0)) diff --git a/src/translations/translations.rs b/src/translations/translations.rs index 77616cdc..da0ae641 100644 --- a/src/translations/translations.rs +++ b/src/translations/translations.rs @@ -19,7 +19,7 @@ pub fn choose_adapters_translation(language: Language) -> Text<'static> { Language::PT => "Selecione o adaptador de rede a inspecionar", Language::EL => "Επίλεξε τον προσαρμογέα δικτύου για επιθεώρηση", Language::FA => "مبدل شبکه را برای بازرسی انتخاب کنید", - Language::SE => "Välj nätverksadapter att inspektera", + Language::SV => "Välj nätverksadapter att inspektera", }) } @@ -40,7 +40,7 @@ pub fn application_protocol_translation(language: Language) -> &'static str { Language::PT => "Protocolo de aplicação", Language::EL => "Πρωτόκολλο εφαρμογής", Language::FA => "پیوندنامهٔ درخواست", - Language::SE => "Applikationsprotokoll", + Language::SV => "Applikationsprotokoll", } } @@ -61,7 +61,7 @@ pub fn select_filters_translation(language: Language) -> Text<'static> { Language::PT => "Selecione os filtros a serem aplicados no tráfego de rede", Language::EL => "Επίλεξε τα φίλτρα για εφαρμογή στην κίνηση του δικτύου", Language::FA => "صافی ها را جهت اعمال بر آمد و شد شبکه انتخاب کنید", - Language::SE => "Välj filtren som ska appliceras på nätverkstrafiken", + Language::SV => "Välj filtren som ska appliceras på nätverkstrafiken", }) } @@ -79,7 +79,7 @@ pub fn start_translation(language: Language) -> &'static str { Language::PT => "Começar!", Language::EL => "Ξεκίνα!", Language::FA => "شروع!", - Language::SE => "Starta!", + Language::SV => "Starta!", } } @@ -98,7 +98,7 @@ pub fn address_translation(language: Language) -> &'static str { Language::PT => "Endereço", Language::EL => "Διεύθυνση", Language::FA => "نشانی", - Language::SE => "Adress", + Language::SV => "Adress", } } @@ -119,7 +119,7 @@ pub fn addresses_translation(language: Language) -> &'static str { Language::PT => "Endereços", Language::EL => "Διευθύνσεις", Language::FA => "نشانی ها", - Language::SE => "Adresser", + Language::SV => "Adresser", } } @@ -140,7 +140,7 @@ pub fn ip_version_translation(language: Language) -> Text<'static> { Language::PT => "Versão de IP", Language::EL => "Έκδοση IP", Language::FA => "نسخهٔ IP", - Language::SE => "IP-version", + Language::SV => "IP-version", }) } @@ -160,7 +160,7 @@ pub fn transport_protocol_translation(language: Language) -> &'static str { Language::RU => "Транспортный протокол", Language::EL => "Πρωτόκολλο μεταφοράς", Language::FA => "پیوندنامهٔ ترابرد", - Language::SE => "Transportprotokoll", + Language::SV => "Transportprotokoll", } } @@ -181,7 +181,7 @@ pub fn traffic_rate_translation(language: Language) -> Text<'static> { Language::PT => "Taxa de tráfego", Language::EL => "Ρυθμός κίνησης", Language::FA => "نرخ آمد و شد", - Language::SE => "Datafrekvens", + Language::SV => "Datafrekvens", }) } @@ -223,7 +223,7 @@ pub fn settings_translation(language: Language) -> &'static str { Language::PT => "Configurações", Language::EL => "Ρυθμίσεις", Language::FA => "پیکربندی", - Language::SE => "Inställningar", + Language::SV => "Inställningar", } } @@ -234,7 +234,7 @@ pub fn yes_translation(language: Language) -> Text<'static> { Language::FR => "Oui", Language::ES => "Sí", Language::PL => "Tak", - Language::DE | Language::SE => "Ja", + Language::DE | Language::SV => "Ja", Language::UK => "Так", Language::ZH => "是", Language::RO => "Da", @@ -264,7 +264,7 @@ pub fn ask_quit_translation(language: Language) -> Text<'static> { Language::PT => "Tem a certeza que deseja sair desta análise?", Language::EL => "Είσαι σίγουρος ότι θες να κλείσεις την ανάλυση;", Language::FA => "آیا مطمئن هستید می خواهید از این تحلیل خارج شوید؟", - Language::SE => "Är du säker på att du vill avsluta analysen?", + Language::SV => "Är du säker på att du vill avsluta analysen?", }) } @@ -285,7 +285,7 @@ pub fn quit_analysis_translation(language: Language) -> String { Language::PT => "Sair da análise".to_string(), Language::EL => "Έξοδος ανάλυσης".to_string(), Language::FA => "خروج از تحلیل".to_string(), - Language::SE => "Avsluta analys".to_string(), + Language::SV => "Avsluta analys".to_string(), } } @@ -306,7 +306,7 @@ pub fn ask_clear_all_translation(language: Language) -> Text<'static> { Language::PT => "Tem a certeza que deseja eliminar as notificações?", Language::EL => "Είσαι σίγουρος ότι θες να κάνεις εκκαθάριση των ειδοποιήσεων;", Language::FA => "آیا مطمئن هستید می خواهید اعلان ها را پاک کنید؟", - Language::SE => "Är du säker på att du vill radera notifikationerna?", + Language::SV => "Är du säker på att du vill radera notifikationerna?", }) } @@ -327,7 +327,7 @@ pub fn clear_all_translation(language: Language) -> String { Language::PT => "Limpar tudo".to_string(), Language::EL => "Εκκαθάριση όλων".to_string(), Language::FA => "پاک کردن همه".to_string(), - Language::SE => "Radera alla".to_string(), + Language::SV => "Radera alla".to_string(), } } @@ -348,7 +348,7 @@ pub fn hide_translation(language: Language) -> &'static str { Language::PT => "Esconder", Language::EL => "Κλείσιμο", Language::FA => "پنهان کردن", - Language::SE => "Göm", + Language::SV => "Göm", } } @@ -369,7 +369,7 @@ pub fn network_adapter_translation(language: Language) -> &'static str { Language::PT => "Adaptador de rede", Language::EL => "Προσαρμογέας δικτύου", Language::FA => "مبدل شبکه", - Language::SE => "Nätverksadapter", + Language::SV => "Nätverksadapter", } } @@ -420,7 +420,7 @@ pub fn no_addresses_translation(language: Language, adapter: &str) -> Text<'stat Language::FA => format!("هیچ آمد و شدی قابل مشاهده نیست چون مبدلی که انتخاب کرده اید هیچ نشانی فعالی ندارد...\n\n\ مبدل شبکه: {adapter}\n\n\ اگر مطمئن هستید به اینترنت وصل هستید، سعی کنید مبدل متفاوتی را انتخاب کنید."), - Language::SE => format!("Det går inte att observa någon trafik eftersom den valda adaptern inte har några aktiva adresser ...\n\n\ + Language::SV => format!("Det går inte att observa någon trafik eftersom den valda adaptern inte har några aktiva adresser ...\n\n\ Nätverksadapter: {adapter}\n\n\ Om du är säker att du är ansluten till internet, testa att välja en annan adapter."), }) @@ -473,7 +473,7 @@ pub fn waiting_translation(language: Language, adapter: &str) -> Text<'static> { Language::FA => format!("هنوز هیچ آمد و شدی مشاهده نشده است. در حال انتظار برای بسته های شبکه...\n\n مبدل شبکه: {adapter}\n\n آیا مطمئن هستید به اینترنت وصل هستید و مبدل درست را انتخاب کرده اید؟"), - Language::SE => format!("Ingen trafik har observerats ännu. Väntar på paket ...\n\n\ + Language::SV => format!("Ingen trafik har observerats ännu. Väntar på paket ...\n\n\ Nätverksadapter: {adapter}\n\n\ Är du säker på att du är ansluten till internet och att du har valt rätt adapter?"), }) @@ -530,7 +530,7 @@ pub fn some_observed_translation( Language::FA => format!("مجموع بسته های رهگیری شده: {observed}\n\n\ بسته های صاف شده: 0\n\n\ شماری از بسته ها رهگیری شده اند، ولی هنوز هیچ کدام بر اساس صافی تعیین شده شما انتخاب نشده اند...\n\n{filters}"), - Language::SE => format!("Antal fångade paket: {observed}\n\n\ + Language::SV => format!("Antal fångade paket: {observed}\n\n\ Filtrerade paket: 0\n\n\ Några paket har fångats, men än har inget valts enligt de angivna filtren ...\n\n{filters}"), }) @@ -553,7 +553,7 @@ pub fn filtered_packets_translation(language: Language) -> &'static str { Language::PT => "Pacotes filtrados", Language::EL => "Φιλτραρισμένα πακέτα", Language::FA => "بسته های صاف شده", - Language::SE => "Filtrerade paket", + Language::SV => "Filtrerade paket", } } @@ -573,7 +573,7 @@ pub fn filtered_bytes_translation(language: Language) -> &'static str { Language::RU => "Отфильтровано байт", Language::EL => "Φιλτραρισμένα bytes", Language::FA => "بایت های صاف شده", - Language::SE => "Filtrerade bytes", + Language::SV => "Filtrerade bytes", } } @@ -608,7 +608,7 @@ pub fn of_total_translation(language: Language, percentage: &str) -> String { format!("({percentage} από τα συνολικά)") } Language::FA => format!("({percentage} از مجموع)"), - Language::SE => format!("({percentage} av totalen)"), + Language::SV => format!("({percentage} av totalen)"), } } @@ -732,7 +732,7 @@ pub fn error_translation(language: Language, error: &str) -> Text<'static> { "خطایی رخ داد! \n\n\ {error}" ), - Language::SE => format!( + Language::SV => format!( "Ett fel inträffade! \n\n\ {error}" ), @@ -755,7 +755,7 @@ pub fn both_translation(language: Language) -> &'static str { Language::RU => "оба", Language::EL => "αμφότερα", Language::FA => "هر دو", - Language::SE => "båda", + Language::SV => "båda", } } @@ -789,7 +789,7 @@ pub fn all_translation(language: Language) -> &'static str { Language::RU => "Всё", Language::EL => "Όλα", Language::FA => "همه", - Language::SE => "Alla", + Language::SV => "Alla", } } @@ -805,12 +805,11 @@ pub fn packets_translation(language: Language) -> &'static str { Language::ZH => "数据包", Language::RO => "pachete", Language::KO => "패킷", - Language::TR => "paket", + Language::TR | Language::SV => "paket", Language::RU => "пакектов", Language::PT => "pacotes", Language::EL => "πακέτα", Language::FA => "بسته ها", - Language::SE => "paket", } } @@ -831,13 +830,13 @@ pub fn packets_chart_translation(language: Language) -> &'static str { Language::PT => "pacotes por segundo", Language::EL => "πακέτα ανά δευτερόλεπτο", Language::FA => "بسته در ثانیه", - Language::SE => "paket per sekund", + Language::SV => "paket per sekund", } } pub fn bytes_translation(language: Language) -> &'static str { match language { - Language::EN | Language::ES | Language::PT | Language::DE | Language::EL | Language::SE => { + Language::EN | Language::ES | Language::PT | Language::DE | Language::EL | Language::SV => { "bytes" } Language::IT => "byte", @@ -869,7 +868,7 @@ pub fn bytes_chart_translation(language: Language) -> &'static str { Language::RU => "байтов в секунду", Language::EL => "bytes ανά δευτερόλεπτο", Language::FA => "بایت در ثانیه", - Language::SE => "bytes per sekund", + Language::SV => "bytes per sekund", } } @@ -890,7 +889,7 @@ pub fn recent_report_translation(language: Language) -> &'static str { Language::PT => "mais recente", Language::EL => "πιο πρόσφατα", Language::FA => "آخرین", - Language::SE => "senaste", + Language::SV => "senaste", } } @@ -911,7 +910,7 @@ pub fn packets_report_translation(language: Language) -> &'static str { Language::PT => "mais pacotes", Language::EL => "περισσότερα πακέτα", Language::FA => "بیشترین بسته ها", - Language::SE => "flest paket", + Language::SV => "flest paket", } } @@ -932,7 +931,7 @@ pub fn bytes_report_translation(language: Language) -> &'static str { Language::PT => "mais bytes", Language::EL => "περισσότερα bytes", Language::FA => "بیشترین بایت ها", - Language::SE => "flest bytes", + Language::SV => "flest bytes", } } @@ -973,7 +972,7 @@ pub fn notifications_title_translation(language: Language) -> Text<'static> { Language::PT => "Personalize as suas notificações", Language::EL => "Εξατομίκευση ειδοποιήσεων", Language::FA => "اعلان های خود را سفارشی کنید", - Language::SE => "Anpassa dina notifikationer", + Language::SV => "Anpassa dina notifikationer", }) } @@ -994,7 +993,7 @@ pub fn appearance_title_translation(language: Language) -> Text<'static> { Language::PT => "Escolha o seu tema favorito", Language::EL => "Επίλεξε το αγαπημένο σου θέμα", Language::FA => "زمینه دلخواه خود را انتخاب کنید", - Language::SE => "Välj ditt favorittema", + Language::SV => "Välj ditt favorittema", }) } @@ -1015,7 +1014,7 @@ pub fn languages_title_translation(language: Language) -> Text<'static> { Language::PT => "Selecione o seu idioma", Language::EL => "Επίλεξε τη γλώσσα σου", Language::FA => "زبان خود را انتخاب کنید", - Language::SE => "Välj ditt språk", + Language::SV => "Välj ditt språk", }) } @@ -1036,7 +1035,7 @@ pub fn active_filters_translation(language: Language) -> &'static str { Language::PT => "Filtros ativos", Language::EL => "Ενεργά φίλτρα", Language::FA => "صافی های فعال", - Language::SE => "Aktiva filter", + Language::SV => "Aktiva filter", } } @@ -1057,7 +1056,7 @@ pub fn none_translation(language: Language) -> String { Language::PT => "nenhum", Language::EL => "κανένα", Language::FA => "هیچ کدام", - Language::SE => "inga", + Language::SV => "inga", } .to_string() } @@ -1079,7 +1078,7 @@ pub fn yeti_night_translation(language: Language) -> &'static str { Language::PT => "Tema escuro original de Sniffnet", Language::EL => "Το αυθεντικό σκούρο θέμα του Sniffnet", Language::FA => "زمینه تاریک اصلی Sniffnet", - Language::SE => "Sniffnets ursprungliga mörka tema", + Language::SV => "Sniffnets ursprungliga mörka tema", } } @@ -1099,7 +1098,7 @@ pub fn yeti_day_translation(language: Language) -> &'static str { Language::RU => "Оригинальная светая тема Sniffnet'а", Language::EL => "Το αυθεντικό ανοιχτόχρωμο θέμα του Sniffnet", Language::FA => "زمینه روشن اصلی Sniffnet", - Language::SE => "Sniffnets ursprungliga ljusa tema", + Language::SV => "Sniffnets ursprungliga ljusa tema", } } @@ -1120,7 +1119,7 @@ pub fn deep_sea_translation(language: Language) -> &'static str { Language::PT => "Para mergulhar no tráfego de rede", Language::EL => "Βουτιά μέσα στην κίνηση του δικτύου", Language::FA => "شیرجه رفتن در آمد و شد شبکه", - Language::SE => "För att dyka ned i nätverkstrafiken", + Language::SV => "För att dyka ned i nätverkstrafiken", } } @@ -1141,7 +1140,7 @@ pub fn mon_amour_translation(language: Language) -> &'static str { Language::PT => "Tema encantador feito para sonhadores", Language::EL => "Φτιαγμένο για ονειροπόλους", Language::FA => "زمینه دلپذیر ساخته شده برای رویا پردازان", - Language::SE => "Ljuvligt tema gjort för drömmare", + Language::SV => "Ljuvligt tema gjort för drömmare", } } @@ -1162,7 +1161,7 @@ pub fn incoming_translation(language: Language) -> &'static str { Language::PT => "Entrando", Language::EL => "Εισερχόμενα", Language::FA => "ورودی", - Language::SE => "Inkommande", + Language::SV => "Inkommande", } } @@ -1183,7 +1182,7 @@ pub fn outgoing_translation(language: Language) -> &'static str { Language::PT => "Saindo", Language::EL => "Εξερχόμενα", Language::FA => "خروجی", - Language::SE => "Utgående", + Language::SV => "Utgående", } } @@ -1203,7 +1202,7 @@ pub fn notifications_translation(language: Language) -> &'static str { Language::PT => "Notificações", Language::EL => "Ειδοποιήσεις", Language::FA => "اعلان ها", - Language::SE => "Notifikationer", + Language::SV => "Notifikationer", } } @@ -1213,7 +1212,7 @@ pub fn style_translation(language: Language) -> &'static str { Language::IT => "Stile", Language::ES | Language::PT => "Estilo", Language::PL => "Styl", - Language::DE | Language::RO | Language::TR | Language::SE => "Stil", + Language::DE | Language::RO | Language::TR | Language::SV => "Stil", Language::UK | Language::RU => "Стиль", Language::ZH => "主题", Language::KO => "스타일", @@ -1239,7 +1238,7 @@ pub fn language_translation(language: Language) -> &'static str { Language::PT => "Língua", Language::EL => "Γλώσσα", Language::FA => "زبان", - Language::SE => "Språk", + Language::SV => "Språk", } } @@ -1260,7 +1259,7 @@ pub fn overview_translation(language: Language) -> &'static str { Language::PT => "Visão geral", Language::EL => "επισκόπηση", Language::FA => "نمای کلی", - Language::SE => "Översikt", + Language::SV => "Översikt", } } @@ -1281,7 +1280,7 @@ pub fn packets_threshold_translation(language: Language) -> &'static str { Language::PT => "Notifique-me quando um limite de pacotes for excedido", Language::EL => "Ειδοποίησέ με όταν το όριο τον πακέτων ξεπεραστεί", Language::FA => "به من اطلاع بده وقتی آستانه یک بسته فراتر رفت", - Language::SE => "Notifiera mig när en paketgräns har överstigits", + Language::SV => "Notifiera mig när en paketgräns har överstigits", } } @@ -1302,7 +1301,7 @@ pub fn bytes_threshold_translation(language: Language) -> &'static str { Language::PT => "Notifique-me quando um limite de bytes for excedido", Language::EL => "Ειδοποίησέ με όταν το όριο των bytes ξεπεραστεί", Language::FA => "به من اطلاع بده وقتی آستانه یک بایت فراتر رفت", - Language::SE => "Notifiera mig när en gräns för bytes har överstigits", + Language::SV => "Notifiera mig när en gräns för bytes har överstigits", } } @@ -1322,7 +1321,7 @@ pub fn per_second_translation(language: Language) -> &'static str { Language::RU => "(в секунду)", Language::EL => "(ανά δευτερόλεπτο)", Language::FA => "(در ثانیه)", - Language::SE => "(per sekund)", + Language::SV => "(per sekund)", } } @@ -1343,7 +1342,7 @@ pub fn specify_multiples_translation(language: Language) -> &'static str { Language::PT => "; também pode especificar 'K', 'M' e 'G'", Language::EL => "• μπορείς επίσης να καθορίσεις τα 'K', 'M' και 'G'", Language::FA => "؛ شما همچنین می توانید 'M'، 'K' و 'G' را تعیین کنید", - Language::SE => "; du kan också ange 'K', 'M' och 'G'", + Language::SV => "; du kan också ange 'K', 'M' och 'G'", } } @@ -1366,7 +1365,7 @@ pub fn favorite_notification_translation(language: Language) -> &'static str { Language::PT => "Notificar-me quando novos dados forem trocados dos meus favoritos", Language::EL => "Ειδοποίησέ με όταν νέα δεδομένα έχουν ανταλλαγεί από τα αγαπημένα μου", Language::FA => "به من اطلاع بده وقتی داده جدید از پسندیده های من مبادله شد", - Language::SE => "Notifiera mig när ny data utbyts av mina favoriter", + Language::SV => "Notifiera mig när ny data utbyts av mina favoriter", } } @@ -1387,7 +1386,7 @@ pub fn threshold_translation(language: Language) -> String { Language::PT => "Limite".to_string(), Language::EL => "όριο".to_string(), Language::FA => "آستانه".to_string(), - Language::SE => "Gräns".to_string(), + Language::SV => "Gräns".to_string(), } } @@ -1405,7 +1404,7 @@ pub fn volume_translation(language: Language) -> &'static str { Language::RU => "Объём", Language::EL => "Ένταση", Language::FA => "حجم", - Language::SE => "Volym", + Language::SV => "Volym", } } @@ -1425,7 +1424,7 @@ pub fn sound_translation(language: Language) -> &'static str { Language::PT => "Som", Language::EL => "Ήχος", Language::FA => "صدا", - Language::SE => "Ljud", + Language::SV => "Ljud", } } @@ -1446,7 +1445,7 @@ pub fn open_report_translation(language: Language) -> &'static str { Language::PT => "Abrir relatório completo", Language::EL => "Άνοιγμα της πλήρους αναφοράς", Language::FA => "گزارش کامل را باز کن", - Language::SE => "Öppna fullständig rapport", + Language::SV => "Öppna fullständig rapport", } } @@ -1467,7 +1466,7 @@ pub fn bytes_exceeded_translation(language: Language) -> &'static str { Language::PT => "Limite de bytes excedido!", Language::EL => "Το όριο των bytes ξεπεράστηκε!", Language::FA => "آستانه بایت فراتر رفت!", - Language::SE => "Gräns för bytes överskriden!", + Language::SV => "Gräns för bytes överskriden!", } } @@ -1489,7 +1488,7 @@ pub fn bytes_exceeded_value_translation(language: Language, value: &str) -> Stri Language::PT => format!("Foram trocados {trimmed_value} bytes"), Language::EL => format!("{trimmed_value} bytes έχουν ανταλλαγεί"), Language::FA => format!("{trimmed_value} بایت مبادله شده است"), - Language::SE => format!("{trimmed_value} bytes har utbytts"), + Language::SV => format!("{trimmed_value} bytes har utbytts"), } } @@ -1510,7 +1509,7 @@ pub fn packets_exceeded_translation(language: Language) -> &'static str { Language::PT => "Limite de pacotes excedido!", Language::EL => "Το όριο των πακέτων ξεπεράστηκε!", Language::FA => "آستانه بسته فراتر رفت!", - Language::SE => "Paketgräns överskriden!", + Language::SV => "Paketgräns överskriden!", } } @@ -1546,7 +1545,7 @@ pub fn packets_exceeded_value_translation(language: Language, value: u32) -> Str npackets => format!("{npackets} πακέτα έχουν ανταλλαγεί"), }, Language::FA => format!("{value} بسته مبادله شده است"), - Language::SE => match value { + Language::SV => match value { 1 => "1 paket har utbytts".to_owned(), npackets => format!("{npackets} paket har utbytts"), }, @@ -1570,7 +1569,7 @@ pub fn favorite_transmitted_translation(language: Language) -> &'static str { Language::PT => "Novos dados trocados dos favoritos!", Language::EL => "Καινούρια δεδομένα έχουν ανταλλαγεί στα αγαπημένα!", Language::FA => "مبادله داده جدید از پسندیده ها!", - Language::SE => "Ny data utbytt av favoriter!", + Language::SV => "Ny data utbytt av favoriter!", } } @@ -1621,7 +1620,7 @@ pub fn no_notifications_set_translation(language: Language) -> Text<'static> { Language::FA => "شما هنوز اعلان ها را فعال نکرده اید!\n\n\ پس از آنکه آن ها را فعال کنید، این صفحه یک کارنامه از اعلان های شما را نمایش خواهد داد\n\n شما می توانید اعلان ها را از پیکربندی فعال کنید:", - Language::SE => "Du har inte aktiverat notifikationer än!\n\n\ + Language::SV => "Du har inte aktiverat notifikationer än!\n\n\ Efter att du aktiverat dem så kommer denna sida att visa en logg av dina notifikationer\n\n\ Du kan aktivera notifikationer i inställingarna", }) @@ -1689,7 +1688,7 @@ pub fn no_notifications_received_translation(language: Language) -> Text<'static "در حال حاضر هیچ چیزی برای دیدن نیست...\n\n\ وقتی شما اعلانی دریافت می کنید، در اینجا نمایش داده خواهد شد" } - Language::SE => { + Language::SV => { "Inget att se för tillfället ...\n\n\ När du tar emot en notifikation så kommer den att visas här" } @@ -1713,6 +1712,6 @@ pub fn only_last_30_translation(language: Language) -> &'static str { Language::PT => "São mostradas apenas as últimas 30 notificações", Language::EL => "Μόνο οι τελευταίες 30 ειδοποιήσεις απεικονίζονται", Language::FA => "تنها ۳۰ اعلان آخر نمایش داده شده اند", - Language::SE => "Endast de senaste 30 notifikationerna visas", + Language::SV => "Endast de senaste 30 notifikationerna visas", } } diff --git a/src/translations/translations_2.rs b/src/translations/translations_2.rs index 50c4c336..a77f4617 100644 --- a/src/translations/translations_2.rs +++ b/src/translations/translations_2.rs @@ -9,7 +9,7 @@ pub fn new_version_available_translation(language: Language) -> &'static str { Language::RU => "Новая версия доступна на GitHub", Language::EL => "Μια νεότερη έκδοση είναι διαθέσιμη στο GitHub", Language::FA => "یک نسخه جدیدتر روی GitHub موجود است", - Language::SE => "En nyare version finns tillgänglig på GitHub", + Language::SV => "En nyare version finns tillgänglig på GitHub", _ => "A newer version is available on GitHub", } } @@ -23,7 +23,7 @@ pub fn inspect_translation(language: Language) -> &'static str { Language::PL => "Sprawdź", Language::DE => "Überprüfen", Language::RU => "Инспектировать", - Language::SE => "Inspektera", + Language::SV => "Inspektera", _ => "Inspect", } } @@ -32,7 +32,7 @@ pub fn connection_details_translation(language: Language) -> &'static str { match language { Language::EN => "Connection details", Language::IT => "Dettagli della connessione", - Language::SE => "Anslutningsdetaljer", + Language::SV => "Anslutningsdetaljer", _ => "Connection details", } } @@ -41,7 +41,7 @@ pub fn dropped_packets_translation(language: Language) -> &'static str { match language { Language::EN => "Dropped packets", Language::IT => "Pacchetti mancati", - Language::SE => "Tappade paket", + Language::SV => "Tappade paket", _ => "Dropped packets", } } @@ -50,7 +50,7 @@ pub fn data_representation_translation(language: Language) -> &'static str { match language { Language::EN => "Data representation", Language::IT => "Rappresentazione dei dati", - Language::SE => "Datarepresentation", + Language::SV => "Datarepresentation", _ => "Data representation", } } @@ -59,7 +59,7 @@ pub fn host_translation(language: Language) -> &'static str { match language { Language::EN => "Network host", Language::IT => "Host di rete", - Language::SE => "Nätverksvärd", + Language::SV => "Nätverksvärd", _ => "Network host", } } @@ -68,7 +68,7 @@ pub fn only_top_30_hosts_translation(language: Language) -> &'static str { match language { Language::EN => "Only the top 30 hosts are displayed here", Language::IT => "Solo i maggiori 30 host sono mostrati qui", - Language::SE => "Endast de 30 främsta värdarna visas här", + Language::SV => "Endast de 30 främsta värdarna visas här", _ => "Only the top 30 hosts are displayed here", } } @@ -77,7 +77,7 @@ pub fn sort_by_translation(language: Language) -> &'static str { match language { Language::EN => "Sort by", Language::IT => "Ordina per", - Language::SE => "Sortera efter", + Language::SV => "Sortera efter", _ => "Sort by", } } @@ -86,7 +86,7 @@ pub fn local_translation(language: Language) -> String { match language { Language::EN => "Local network", Language::IT => "Rete locale", - Language::SE => "Lokalt nätverk", + Language::SV => "Lokalt nätverk", _ => "Local network", } .to_string() @@ -96,7 +96,7 @@ pub fn unknown_translation(language: Language) -> String { match language { Language::EN => "Unknown location", Language::IT => "Localizzazione sconosciuta", - Language::SE => "Okänd plats", + Language::SV => "Okänd plats", _ => "Unknown location", } .to_string() @@ -106,7 +106,7 @@ pub fn your_network_adapter_translation(language: Language) -> String { match language { Language::EN => "Your network adapter", Language::IT => "La tua scheda di rete", - Language::SE => "Din nätverksadapter", + Language::SV => "Din nätverksadapter", _ => "Your network adapter", } .to_string() @@ -116,7 +116,7 @@ pub fn socket_address_translation(language: Language) -> &'static str { match language { Language::EN => "Socket address", Language::IT => "Indirizzo del socket", - Language::SE => "Socketadress", + Language::SV => "Socketadress", _ => "Socket address", } } @@ -125,7 +125,7 @@ pub fn mac_address_translation(language: Language) -> &'static str { match language { Language::EN => "MAC address", Language::IT => "Indirizzo MAC", - Language::SE => "MAC-adress", + Language::SV => "MAC-adress", _ => "MAC address", } } @@ -134,14 +134,14 @@ pub fn source_translation(language: Language) -> &'static str { match language { Language::EN => "Source", Language::IT => "Sorgente", - Language::SE => "Källa", + Language::SV => "Källa", _ => "Source", } } pub fn destination_translation(language: Language) -> &'static str { match language { - Language::EN | Language::SE => "Destination", + Language::EN | Language::SV => "Destination", Language::IT => "Destinazione", _ => "Destination", } @@ -151,7 +151,7 @@ pub fn fqdn_translation(language: Language) -> &'static str { match language { Language::EN => "Fully qualified domain name", Language::IT => "Nome di dominio completo", - Language::SE => "Fullständigt domännamn", + Language::SV => "Fullständigt domännamn", _ => "Fully qualified domain name", } } @@ -160,7 +160,7 @@ pub fn administrative_entity_translation(language: Language) -> &'static str { match language { Language::EN => "Administrative entity", Language::IT => "Entità amministrativa", - Language::SE => "Administrativ enhet", + Language::SV => "Administrativ enhet", _ => "Administrative entity", } } @@ -169,7 +169,7 @@ pub fn transmitted_data_translation(language: Language) -> &'static str { match language { Language::EN => "Transmitted data", Language::IT => "Dati trasmessi", - Language::SE => "Överförd data", + Language::SV => "Överförd data", _ => "Transmitted data", } } @@ -178,7 +178,7 @@ pub fn country_translation(language: Language) -> &'static str { match language { Language::EN => "Country", Language::IT => "Paese", - Language::SE => "Land", + Language::SV => "Land", _ => "Country", } } @@ -187,7 +187,7 @@ pub fn domain_name_translation(language: Language) -> &'static str { match language { Language::EN => "Domain name", Language::IT => "Nome di dominio", - Language::SE => "Domännamn", + Language::SV => "Domännamn", _ => "Domain name", } } @@ -196,7 +196,7 @@ pub fn only_show_favorites_translation(language: Language) -> &'static str { match language { Language::EN => "Only show favorites", Language::IT => "Mostra solo i preferiti", - Language::SE => "Visa endast favoriter", + Language::SV => "Visa endast favoriter", _ => "Only show favorites", } } @@ -205,7 +205,7 @@ pub fn search_filters_translation(language: Language) -> &'static str { match language { Language::EN => "Search filters", Language::IT => "Filtri di ricerca", - Language::SE => "Sökfilter", + Language::SV => "Sökfilter", _ => "Search filters", } } @@ -214,7 +214,7 @@ pub fn no_search_results_translation(language: Language) -> &'static str { match language { Language::EN => "No result available according to the specified search filters", Language::IT => "Nessun risultato disponibile secondo i filtri di ricerca specificati", - Language::SE => "Inga resultat tillgängliga utifrån de angivna sökfilterna", + Language::SV => "Inga resultat tillgängliga utifrån de angivna sökfilterna", _ => "No result available according to the specified search filters", } } @@ -228,7 +228,7 @@ pub fn showing_results_translation( match language { Language::EN => format!("Showing {start}-{end} of {total} total results"), Language::IT => format!("Sono mostrati {start}-{end} di {total} risultati totali"), - Language::SE => format!("Visar {start}-{end} av {total} totala resultat"), + Language::SV => format!("Visar {start}-{end} av {total} totala resultat"), _ => format!("Showing {start}-{end} of {total} total results"), } } @@ -238,7 +238,7 @@ pub fn color_gradients_translation(language: Language) -> &'static str { match language { Language::EN => "Apply color gradients", Language::IT => "Applica sfumature di colore", - Language::SE => "Applicera färggradient", + Language::SV => "Applicera färggradient", _ => "Apply color gradients", } } diff --git a/src/translations/types/language.rs b/src/translations/types/language.rs index d628eb70..4f38b8af 100644 --- a/src/translations/types/language.rs +++ b/src/translations/types/language.rs @@ -34,7 +34,7 @@ pub enum Language { /// Persian FA, /// Swedish - SE, + SV, } impl Default for Language { @@ -44,28 +44,10 @@ impl Default for Language { } impl Language { - pub(crate) const COL1: [Language; 6] = [ - Language::EN, - Language::ES, - Language::IT, - Language::PT, - Language::TR, - Language::SE, - ]; - pub(crate) const COL2: [Language; 5] = [ - Language::DE, - Language::FA, - Language::KO, - Language::RO, - Language::UK, - ]; - pub(crate) const COL3: [Language; 5] = [ - Language::EL, - Language::FR, - Language::PL, - Language::RU, - Language::ZH, - ]; + pub(crate) const ROW1: [Language; 4] = [Language::EN, Language::DE, Language::EL, Language::ES]; + pub(crate) const ROW2: [Language; 4] = [Language::FA, Language::FR, Language::IT, Language::KO]; + pub(crate) const ROW3: [Language; 4] = [Language::PL, Language::PT, Language::RO, Language::RU]; + pub(crate) const ROW4: [Language; 4] = [Language::SV, Language::TR, Language::UK, Language::ZH]; pub fn get_radio_label(&self) -> &str { match self { @@ -84,7 +66,7 @@ impl Language { Language::PT => "Português", Language::EL => "Ελληνικά", Language::FA => "فارسی", - Language::SE => "Svenska", + Language::SV => "Svenska", } } } diff --git a/src/utils/countries.rs b/src/utils/countries.rs index 11bf4b7c..edc621cd 100644 --- a/src/utils/countries.rs +++ b/src/utils/countries.rs @@ -286,25 +286,24 @@ pub const BROADCAST: &[u8] = include_bytes!("../../resources/countries_flags/4x3 pub const UNKNOWN: &[u8] = include_bytes!("../../resources/countries_flags/4x3/zz-unknown.svg"); pub const COMPUTER: &[u8] = include_bytes!("../../resources/countries_flags/4x3/zz-computer.svg"); -pub fn get_flag_from_language_code(language: &str) -> Svg { +pub fn get_flag_from_language(language: Language) -> Svg { Svg::new(Handle::from_memory(Vec::from(match language { - "ZH" => CN, - "DE" => DE, - "ES" => ES, - "FR" => FR, - "EN" => GB, - "IT" => IT, - "KO" => KR, - "PL" => PL, - "PT" => PT, - "RO" => RO, - "RU" => RU, - "TR" => TR, - "UK" => UA, - "EL" => GR, - "FA" => IR, - "SE" => SE, - _ => UNKNOWN, + Language::ZH => CN, + Language::DE => DE, + Language::ES => ES, + Language::FR => FR, + Language::EN => GB, + Language::IT => IT, + Language::KO => KR, + Language::PL => PL, + Language::PT => PT, + Language::RO => RO, + Language::RU => RU, + Language::TR => TR, + Language::UK => UA, + Language::EL => GR, + Language::FA => IR, + Language::SV => SE, }))) .width(Length::Fixed(FLAGS_WIDTH_SMALL)) } From 6e0f03effd3e80c5a467fad25379c73e3d32171d Mon Sep 17 00:00:00 2001 From: Giuliano Bellini s294739 Date: Thu, 25 May 2023 23:18:09 +0200 Subject: [PATCH 3/3] fix: filter columns relative widths --- src/gui/pages/initial_page.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/pages/initial_page.rs b/src/gui/pages/initial_page.rs index 1d0f2c36..f404a389 100644 --- a/src/gui/pages/initial_page.rs +++ b/src/gui/pages/initial_page.rs @@ -33,7 +33,7 @@ pub fn initial_page(sniffer: &Sniffer) -> Container { let col_ip_radio = ip_version_radios(ip_active, font, sniffer.style, sniffer.language); let col_ip = Column::new() .spacing(10) - .width(FillPortion(1)) + .width(FillPortion(5)) .push(col_ip_radio); let transport_active = sniffer.filters.transport; @@ -42,7 +42,7 @@ pub fn initial_page(sniffer: &Sniffer) -> Container { let col_transport = Column::new() .align_items(Alignment::Center) .spacing(10) - .width(FillPortion(2)) + .width(FillPortion(9)) .push(col_transport_radio) .push(vertical_space(FillPortion(2))) .push(button_start(sniffer.style, sniffer.language)) @@ -67,7 +67,7 @@ pub fn initial_page(sniffer: &Sniffer) -> Container { .font(font) .style(StyleTuple(sniffer.style, ElementType::Standard)); let col_app = Column::new() - .width(FillPortion(1)) + .width(FillPortion(8)) .spacing(10) .push( Text::new(application_protocol_translation(sniffer.language))