From b985080826b347487eed1bcaf8293c040c7b4eeb Mon Sep 17 00:00:00 2001 From: Serhii Bilyk Date: Fri, 3 Mar 2023 11:26:09 +0200 Subject: [PATCH 1/5] add Ukrainian translation --- src/enums/language.rs | 3 ++ src/utility/translations.rs | 84 +++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) diff --git a/src/enums/language.rs b/src/enums/language.rs index d9eef238..23b5fc53 100644 --- a/src/enums/language.rs +++ b/src/enums/language.rs @@ -15,6 +15,8 @@ pub enum Language { PL, /// German, DE, + /// Ukrainian + UA, } impl Default for Language { @@ -34,6 +36,7 @@ impl Language { Language::ES => "Español", Language::PL => "Polski", Language::DE => "Deutsch", + Language::UA => "Українська" } } } diff --git a/src/utility/translations.rs b/src/utility/translations.rs index 5ff77b80..b02b8956 100644 --- a/src/utility/translations.rs +++ b/src/utility/translations.rs @@ -9,6 +9,7 @@ pub fn choose_adapters_translation(language: Language) -> Text<'static> { Language::ES => "Seleccione el adaptador de red que desea inspeccionar", Language::PL => "Wybierz adapter sieciowy do inspekcji", Language::DE => "Wähle einen Netzwerkadapter zum inspizieren aus", + Language::UA => "Вибрати мережевий адаптер для інспекції", }) } @@ -20,6 +21,7 @@ pub fn application_protocol_translation(language: Language) -> &'static str { Language::ES => "Protocolo de aplicación", Language::PL => "Protokół aplikacji", Language::DE => "Anwendungs-Protokoll", + Language::UA => "Протокол аплікації", } } @@ -31,6 +33,7 @@ pub fn select_filters_translation(language: Language) -> Text<'static> { Language::ES => "Seleccionar los filtros que se aplicarán al tráfico de red", Language::PL => "Wybierz filtry, które mają być zastosowane na ruchu sieciowym", Language::DE => "Wähle die Filter, die auf den Netzwerkverkehr angewendet werden sollen", + Language::UA => "Вибрати фільтри, які мають бути застосовані до мережевого трафіку", }) } @@ -41,6 +44,7 @@ pub fn start_translation(language: Language) -> &'static str { Language::FR => "Commencer!", Language::ES => "¡Empieza!", Language::PL => "Rozpocznij!", + Language::UA => "Почати!", } } @@ -51,6 +55,7 @@ pub fn address_translation(language: Language) -> &'static str { Language::FR | Language::DE => "\nAdresse:", Language::ES => "\nDirección:", Language::PL => "\nAdres:", + Language::UA => "\nАдреса", } } @@ -62,6 +67,7 @@ pub fn addresses_translation(language: Language) -> &'static str { Language::ES => "\nDirecciones:", Language::PL => "\nAdresy:", Language::DE => "\nAdressen:", + Language::UA => "\nАдреси!", } } @@ -73,6 +79,7 @@ pub fn ip_version_translation(language: Language) -> Text<'static> { Language::ES => "Versión IP", Language::PL => "Wersja IP", Language::DE => "IP Version", + Language::UA => "Версія IP", }) } @@ -84,6 +91,7 @@ pub fn transport_protocol_translation(language: Language) -> &'static str { Language::ES => "Protocolo de transporte", Language::PL => "Protokół transportowy", Language::DE => "Netzwerkprotokoll", + Language::UA => "Транспортний протокол", } } @@ -95,6 +103,7 @@ pub fn traffic_rate_translation(language: Language) -> Text<'static> { Language::ES => "Tasa de tráfico:", Language::PL => "Prędkość ruchu:", Language::DE => "Daten Frequenz:", + Language::UA => "Швидкість руху", }) } @@ -106,6 +115,7 @@ pub fn relevant_connections_translation(language: Language) -> Text<'static> { Language::ES => "Conexiones Relevantes:", Language::PL => "Istotne połączenia:", Language::DE => "Relevante Verbindungen:", + Language::UA => "Важливі підключення", }) } @@ -117,6 +127,7 @@ pub fn settings_translation(language: Language) -> &'static str { Language::ES => "Ajustes", Language::PL => "Ustawienia", Language::DE => "Einstellungen", + Language::UA => "Налаштування", } } @@ -128,6 +139,7 @@ pub fn yes_translation(language: Language) -> Text<'static> { Language::ES => "Sí", Language::PL => "Tak", Language::DE => "Ja", + Language::UA => "Так", }) } @@ -139,6 +151,7 @@ pub fn ask_quit_translation(language: Language) -> Text<'static> { Language::ES => "¿Estás seguro de que quieres dejar este análisis?", Language::PL => "Czy na pewno chcesz zakończyć analizę?", Language::DE => "Bist du sicher, dass du diese Analyse beenden willst?", + Language::UA => "Чи справді хочеш закінчити аналіз?", }) } @@ -150,6 +163,7 @@ pub fn quit_analysis_translation(language: Language) -> String { Language::ES => "Quitar el análisis".to_string(), Language::PL => "Zakończ analize".to_string(), Language::DE => "Analyse beenden".to_string(), + Language::UA => "Закінчити аналіз".to_string(), } } @@ -161,6 +175,7 @@ pub fn ask_clear_all_translation(language: Language) -> Text<'static> { Language::ES => "¿Seguro que quieres borrar las notificaciones?", Language::PL => "Czy na pewno chcesz wyczyścić powiadomienia?", Language::DE => "Bist du sicher, dass du alle Benachrichtigungen löschen willst?", + Language::UA => "Чи справді хочеш видалити всі повідомлення?", }) } @@ -172,6 +187,7 @@ pub fn clear_all_translation(language: Language) -> String { Language::ES => "Borrar todo".to_string(), Language::PL => "Wyczyść wszystko".to_string(), Language::DE => "Alle leeren".to_string(), + Language::UA => "Видалити все".to_string(), } } @@ -183,6 +199,7 @@ pub fn hide_translation(language: Language) -> &'static str { Language::ES => "Ocultar", Language::PL => "Ukryj", Language::DE => "Verstecken", + Language::UA => "Заховати", } } @@ -206,6 +223,9 @@ pub fn no_addresses_translation(language: Language, adapter: &str) -> Text<'stat Language::DE => format!("Es kann kein Netzwerkverkehr beobachtet werden, weil der Adapter keine aktiven Adressen hat...\n\n\ Netzwerkadapter: {adapter}\n\n\ Wenn du dir sicher bist, dass du mit dem Internet verbunden bist, probier einen anderen Adapter auszuwählen."), + Language::UA => format!("Не зафіксовано жодного мережевого трафіку тому що вибраний адаптер немає активних адрес ... \n\n\ + Мережквий адаптер: {adapter}\n\n\ + Якщо Ти впевнений, що підключений до інтернету, спробуй вибрати інший адаптер."), }) } @@ -229,6 +249,9 @@ pub fn waiting_translation(language: Language, adapter: &str) -> Text<'static> { Language::DE => format!("Noch kein Netzwerkverkehr beobachtet. Warte auf Pakete...\n\n\ Netzwerkadapter: {adapter}\n\n\ Bist du sicher, dass du mit dem Internet verbunden bist und den richtigen Adapter ausgewählt hast?"), + Language::UA => format!("Не зафіксовано жодного мережевого трафіку. Очікування на пакети...\n\n\ + Мережквий адаптер: {adapter}\n\n\ + Чи Ти дійсно підключений до інтернету і вибрав відповідний мережевий адаптер?"), }) } @@ -256,6 +279,9 @@ pub fn some_observed_translation( Language::DE => format!("Anzahl der empfangenen Pakete: {observed}\n\n\ gefilterte Pakete: 0\n\n\ Ein Paar Pakete wurden empfangen, aber es entsprechen noch keine den spezifizierten Filtern...\n\n{filters}"), + Language::UA => format!("Сума перехоплених пакетів: {observed}\n\n\ + Відфільтровані пакеті: 0\n\n\ + Деякі пакети були перехоплені, але жоден з них не був вибраний відповідно до вказаних фільтрів...\n\n{filters}"), }) } @@ -271,6 +297,9 @@ pub fn filtered_packets_translation( Language::ES => format!("Paquetes filtrados:\n {filtered} ({percentage} del total)"), Language::PL => format!("Przefiltrowane pakiety:\n {filtered} ({percentage} z całości)"), Language::DE => format!("Gefilterte Pakete:\n {filtered} ({percentage} der Gesamtzahl)"), + Language::UA => { + format!("Відфільтровані пакети:\n {filtered} ({percentage} від загальної суми)") + } }) } @@ -286,6 +315,9 @@ pub fn filtered_bytes_translation( Language::ES => format!("Bytes filtrados:\n {filtered} ({percentage} del total)"), Language::PL => format!("Przechwycone bajty:\n {filtered} ({percentage} całości)"), Language::DE => format!("Gefilterte Bytes:\n {filtered} ({percentage} der Gesamtzahl)"), + Language::UA => { + format!("Відфільтровані байти:\n {filtered} ({percentage} від загальної суми)") + } }) } @@ -297,6 +329,7 @@ pub fn filtered_application_translation(language: Language) -> Text<'static> { Language::ES => "Paquetes filtrados por protocolo de aplicación:", Language::PL => "Przefiltrowane pakiety według protokołu aplikacji:", Language::DE => "Gefilterte Pakete je Anwendungs-Protokoll:", + Language::UA => "Відфільтровані пакети протоколу аплікації/програми:", }) } @@ -314,6 +347,8 @@ pub fn no_favorites_translation(language: Language) -> Text<'static> { Aby dodać połączenie do ulubionych, kliknij na ikonę 'gwiazdki' obok połączenia.", Language::DE => "Im Moment nichts zu zeigen.\n\ Um eine Verbindung zu deinen Favoriten hinzuzufügen, klick das auf das Stern-Symbol neben der Verbindung.", + Language::UA => "Немає, що показати в цей момент.\n\ + Щоб додати підключення до улюблених, натисни на іконку 'зірочки' біля підключення.", }) } @@ -343,6 +378,10 @@ pub fn error_translation(language: Language, error: &str) -> Text<'static> { "Es ist ein Fehler aufgetreten! \n\n\ {error}" ), + Language::UA => format!( + "Виступила помилка! \n\n\ + {error}" + ), }) } @@ -354,6 +393,7 @@ pub fn both_translation(language: Language) -> &'static str { Language::ES => "ambos", Language::PL => "oba", Language::DE => "beide", + Language::UA => "обидва", } } @@ -376,6 +416,7 @@ pub fn all_translation(language: Language) -> &'static str { Language::ES => "Todos", Language::PL => "Wszystkie", Language::DE => "Alle", + Language::UA => "Усі", } } @@ -387,6 +428,7 @@ pub fn packets_chart_translation(language: Language) -> &'static str { Language::ES => "paquetes por segundo", Language::PL => "pakiety na sekundę", Language::DE => "Pakete pro Sekunde", + Language::UA => "пакети на секунду", } } @@ -398,6 +440,7 @@ pub fn bytes_chart_translation(language: Language) -> &'static str { Language::ES => "bytes por segundo", Language::PL => "bajty na sekundę", Language::DE => "Bytes pro Sekunde", + Language::UA => "байти на секунду", } } @@ -409,6 +452,7 @@ pub fn recent_report_translation(language: Language) -> &'static str { Language::ES => "más reciente", Language::PL => "najnowsze", Language::DE => "zuletzt", + Language::UA => "найновіші", } } @@ -420,6 +464,7 @@ pub fn packets_report_translation(language: Language) -> &'static str { Language::ES => "mayoría de los paquetes", Language::PL => "najwięcej pakietów", Language::DE => "meiste Pakete", + Language::UA => "найбільше пакетів", } } @@ -431,6 +476,7 @@ pub fn bytes_report_translation(language: Language) -> &'static str { Language::ES => "mayoría de los bytes", Language::PL => "najwięcej bajtów", Language::DE => "meiste Bytes", + Language::UA => "найбільше байтів", } } @@ -442,6 +488,7 @@ pub fn favorite_report_translation(language: Language) -> &'static str { Language::ES => "favoritos", Language::PL => "ulubione", Language::DE => "Favoriten", + Language::UA => "улюблені", } } @@ -453,6 +500,7 @@ pub fn notifications_title_translation(language: Language) -> Text<'static> { Language::ES => "Personaliza tus notificaciones", Language::PL => "Dostosuj powiadomienia", Language::DE => "Personalisier deine Benachrichtigungen", + Language::UA => "Достосуй повідомлення", }) } @@ -464,6 +512,7 @@ pub fn appearance_title_translation(language: Language) -> Text<'static> { Language::ES => "Elige tu tema favorito", Language::PL => "Wybierz swój ulubiony motyw", Language::DE => "Wähl dein Lieblingsdesign", + Language::UA => "Вибери улюблену тему", }) } @@ -475,6 +524,7 @@ pub fn languages_title_translation(language: Language) -> Text<'static> { Language::ES => "Selecciona tu idioma", Language::PL => "Wybierz język", Language::DE => "Stell deine Sprache ein", + Language::UA => "Вибери мову", }) } @@ -486,6 +536,7 @@ pub fn active_filters_translation(language: Language) -> &'static str { Language::ES => "Filtros activos:", Language::PL => "Aktywne filtry:", Language::DE => "Aktive Filter:", + Language::UA => "Активні фільтри", } } @@ -497,6 +548,7 @@ pub fn none_translation(language: Language) -> &'static str { Language::ES => "ninguno", Language::PL => "brak", Language::DE => "keine", + Language::UA => "бракує", } } @@ -508,6 +560,7 @@ pub fn yeti_night_translation(language: Language) -> &'static str { Language::ES => "Tema oscuro original de Sniffnet", Language::PL => "Oryginalny, ciemny motyw Sniffnet", Language::DE => "Sniffnets urspüngliches, dunkles Design", + Language::UA => "Оригінальний, темний мотив Sniffnet", } } @@ -519,6 +572,7 @@ pub fn yeti_day_translation(language: Language) -> &'static str { Language::ES => "Tema claro original de Sniffnet", Language::PL => "Oryginalny, jasny motyw Sniffnet", Language::DE => "Sniffnets urspüngliches, helles Design", + Language::UA => "Оригінальний, світлий мотив Sniffnet", } } @@ -530,6 +584,7 @@ pub fn deep_sea_translation(language: Language) -> &'static str { Language::ES => "Para sumergirse en el tráfico de la red", Language::PL => "Aby zanurzyć się w ruchu sieciowym", Language::DE => "Um in den Netzwerkverkehr einzutauchen", + Language::UA => "Оригінальний, темний мотив Sniffnet", } } @@ -541,6 +596,7 @@ pub fn mon_amour_translation(language: Language) -> &'static str { Language::ES => "Tema encantador hecho para soñadores", Language::PL => "Uroczy motyw stworzony dla marzycieli", Language::DE => "Liebevolles Design für Träumer", + Language::UA => "Прекрасна тема для мрійників", } } @@ -552,6 +608,7 @@ pub fn incoming_translation(language: Language) -> &'static str { Language::ES => "Entrante", Language::PL => "Przychodzące", Language::DE => "Ankommend", + Language::UA => "Вхідні", } } @@ -563,6 +620,7 @@ pub fn outgoing_translation(language: Language) -> &'static str { Language::ES => "Saliente", Language::PL => "Wychodzące", Language::DE => "Ausgehend", + Language::UA => "Вихідні", } } @@ -573,6 +631,7 @@ pub fn notifications_translation(language: Language) -> &'static str { Language::ES => "Notificaciones", Language::PL => "Powiadomienia", Language::DE => "Benachrichtigungen", + Language::UA => "Повідомлення", } } @@ -583,6 +642,7 @@ pub fn style_translation(language: Language) -> &'static str { Language::ES => "Estilo", Language::PL => "Styl", Language::DE => "Stil", + Language::UA => "Стиль", } } @@ -594,6 +654,7 @@ pub fn language_translation(language: Language) -> &'static str { Language::ES => "Idioma", Language::PL => "Język", Language::DE => "Sprache", + Language::UA => "Мова", } } @@ -605,6 +666,7 @@ pub fn overview_translation(language: Language) -> &'static str { Language::ES => "Resumen", Language::PL => "Przegląd", Language::DE => "Übersicht", + Language::UA => "Огляд", } } @@ -627,6 +689,7 @@ pub fn packets_threshold_translation(language: Language) -> &'static str { Language::ES => "Notificarme cuando se supere un límite de paquetes", Language::PL => "Powiadom mnie, gdy zostanie przekroczony próg pakietów", Language::DE => "Benachrichtige mich, wenn die Pakete eine Schwelle überschreiten", + Language::UA => "Повідом мене про переліміт пакетів", } } @@ -638,6 +701,7 @@ pub fn bytes_threshold_translation(language: Language) -> &'static str { Language::ES => "Notificarme cuando se exceda un límite de bytes", Language::PL => "Powiadom mnie, gdy zostanie przekroczony próg bajtów", Language::DE => "Benachrichtige mich, wenn die Bytes eine Schwelle überschreiten", + Language::UA => "Повідом мене про переліміт байтів", } } @@ -649,6 +713,7 @@ pub fn per_second_translation(language: Language) -> &'static str { Language::ES => "(por segundo)", Language::PL => "(na sekundę)", Language::DE => "(pro Sekunde)", + Language::UA => "(на секунду)", } } @@ -660,6 +725,7 @@ pub fn specify_multiples_translation(language: Language) -> &'static str { Language::ES => "; también puede especificar 'K', 'M' y 'G'", Language::PL => "; możesz również określić 'K', 'M' i 'G'", Language::DE => "; du kannst auch 'K', 'M' und 'G' festlegen", + Language::UA => "; можеш також вибрати 'K', 'M' i 'G'", } } @@ -673,6 +739,7 @@ pub fn favorite_notification_translation(language: Language) -> &'static str { Language::DE => { "Benachrichtige mich, wenn neue Daten mit meinen Favoriten ausgetauscht werden" } + Language::UA => "Повідом мене, коли нбуде обмін даними з моїх улюблених ", } } @@ -684,6 +751,7 @@ pub fn threshold_translation(language: Language) -> String { Language::ES => "Límite: ".to_string(), Language::PL => "Próg: ".to_string(), Language::DE => "Schwellenwert: ".to_string(), + Language::UA => "Ліміт: ".to_string(), } } @@ -693,6 +761,7 @@ pub fn volume_translation(language: Language, value: u8) -> String { Language::ES => format!("Volumen: {value:^3}%"), Language::PL => format!("Głośność: {value:^3}%"), Language::DE => format!("Lautstärke: {value:^3}%"), + Language::UA => format!("Гучність: {value:^3}%"), } } @@ -704,6 +773,7 @@ pub fn sound_translation(language: Language) -> &'static str { Language::ES => "Sonido:", Language::PL => "Dźwięk:", Language::DE => "Ton:", + Language::UA => "Звук:", } } @@ -715,6 +785,7 @@ pub fn open_report_translation(language: Language) -> &'static str { Language::ES => "Abrir el informe completo", Language::PL => "Otwórz pełny raport", Language::DE => "Kompletten Bericht öffnen", + Language::UA => "Відкрий повний рапорт", } } @@ -726,6 +797,7 @@ pub fn bytes_exceeded_translation(language: Language) -> &'static str { Language::ES => "¡Límite de bytes superado!", Language::PL => "Próg bajtów przekroczony!", Language::DE => "Byte-Schwellenwert überschritten!", + Language::UA => "Ліміт байтів перевищено!", } } @@ -738,6 +810,7 @@ pub fn bytes_exceeded_value_translation(language: Language, value: &str) -> Stri Language::ES => format!("{trimmed_value} byte/s han sido intercambiado/s"), Language::PL => format!("Wymieniono {trimmed_value} bajtów"), Language::DE => format!("{trimmed_value} Bytes wurden ausgetauscht"), + Language::UA => format!("{trimmed_value} байтів було обміняно"), } } @@ -749,6 +822,7 @@ pub fn packets_exceeded_translation(language: Language) -> &'static str { Language::ES => "¡Se ha superado el límite de paquetes!", Language::PL => "Próg pakietów przekroczony!", Language::DE => "Paket-Schwellenwert überschritten!", + Language::UA => "Ліміт пакетів перевищено!", } } @@ -763,6 +837,7 @@ pub fn packets_exceeded_value_translation(language: Language, value: u32) -> Str Language::ES => format!("{value} paquete/s han sido intercambiado/s"), Language::PL => format!("Wymieniono {value} pakietów"), Language::DE => format!("{value} Pakete wurden ausgetauscht"), + Language::UA => format!("Обміняно {value} пакетів"), } } @@ -774,6 +849,7 @@ pub fn favorite_transmitted_translation(language: Language) -> &'static str { Language::ES => "¡Nuevos datos intercambiados de favoritos!", Language::PL => "Nowe dane wymienione z ulubionych!", Language::DE => "Neue Daten mit den Favoriten ausgetauscht!", + Language::UA => "Нові дані обміняно з улюблених!", } } @@ -797,6 +873,9 @@ pub fn no_notifications_set_translation(language: Language) -> Text<'static> { Language::DE => "Benachrichtigungen wurden noch nicht aktiviert!\n\n\ Nachdem du sie aktiviert hast, wird diese Seite eine Liste deiner Benachrichtigungen anzeigen\n\n\ Du kannst die Benachrichtigungen in den Einstellungen aktivieren:", + Language::UA => "ПОвідомлення не активовані!\n\n\ + Після їх активації, на цій сторінці побачиш список своїх повідомлень\n\n\ + Можеш вимкнути повідомлення в налаштуваннях:", }) } @@ -826,6 +905,10 @@ pub fn no_notifications_received_translation(language: Language) -> Text<'static "Im Moment nichts zu sehen...\n\n\ Wenn du eine Benachrichtigung erhälst, wird sie hier angezeigt" } + Language::UA => { + "Немає що показати в даний момент...\n\n\ + КОли отримаєш повідомлення, побачиш його тут" + } }) } @@ -837,5 +920,6 @@ pub fn only_last_30_translation(language: Language) -> &'static str { Language::ES => "Sólo se muestran las últimas 30 notificaciones", Language::PL => "Wyświetlane jest tylko 30 ostatnich powiadomień", Language::DE => "Nur die letzten 30 Benachrichtigungen werden angezeigt", + Language::UA => "Можеш побачити лише 30 останніх повідомлень", } } From 69377deede1bd2aed364a8b31bdbb025eaa061b2 Mon Sep 17 00:00:00 2001 From: Serhii Bilyk Date: Fri, 3 Mar 2023 11:30:19 +0200 Subject: [PATCH 2/5] fix small typo --- src/utility/translations.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/utility/translations.rs b/src/utility/translations.rs index b02b8956..194ef8ee 100644 --- a/src/utility/translations.rs +++ b/src/utility/translations.rs @@ -739,7 +739,7 @@ pub fn favorite_notification_translation(language: Language) -> &'static str { Language::DE => { "Benachrichtige mich, wenn neue Daten mit meinen Favoriten ausgetauscht werden" } - Language::UA => "Повідом мене, коли нбуде обмін даними з моїх улюблених ", + Language::UA => "Повідом мене, коли буде обмін даними з моїх улюблених", } } @@ -873,7 +873,7 @@ pub fn no_notifications_set_translation(language: Language) -> Text<'static> { Language::DE => "Benachrichtigungen wurden noch nicht aktiviert!\n\n\ Nachdem du sie aktiviert hast, wird diese Seite eine Liste deiner Benachrichtigungen anzeigen\n\n\ Du kannst die Benachrichtigungen in den Einstellungen aktivieren:", - Language::UA => "ПОвідомлення не активовані!\n\n\ + Language::UA => "Повідомлення не активовані!\n\n\ Після їх активації, на цій сторінці побачиш список своїх повідомлень\n\n\ Можеш вимкнути повідомлення в налаштуваннях:", }) @@ -907,7 +907,7 @@ pub fn no_notifications_received_translation(language: Language) -> Text<'static } Language::UA => { "Немає що показати в даний момент...\n\n\ - КОли отримаєш повідомлення, побачиш його тут" + Коли отримаєш повідомлення, побачиш його тут" } }) } From 3605ae46530f26a4d3ce6b5b28a8aa468445c291 Mon Sep 17 00:00:00 2001 From: Giuliano Bellini s294739 Date: Fri, 3 Mar 2023 18:41:13 +0100 Subject: [PATCH 3/5] added support for ukrainian characters --- resources/fonts/full/subset_characters.txt | 50 ++++++++++++++++++ .../subset/sarasa-mono-sc-bold.subset.ttf | Bin 73524 -> 80280 bytes .../subset/sarasa-mono-sc-regular.subset.ttf | Bin 74140 -> 81020 bytes src/enums/language.rs | 4 +- src/utility/translations.rs | 13 +++-- 5 files changed, 60 insertions(+), 7 deletions(-) diff --git a/resources/fonts/full/subset_characters.txt b/resources/fonts/full/subset_characters.txt index d704ecdf..ec256584 100644 --- a/resources/fonts/full/subset_characters.txt +++ b/resources/fonts/full/subset_characters.txt @@ -121,6 +121,56 @@ z ś ź ż +А +В +Г +Д +З +К +Л +М +Н +О +П +С +Т +У +Ч +Ш +Щ +Я +а +б +в +г +д +е +ж +з +и +й +к +л +м +н +о +п +р +с +т +у +ф +х +ц +ч +ш +щ +ь +ю +я +є +і +ї 一 中 主 diff --git a/resources/fonts/subset/sarasa-mono-sc-bold.subset.ttf b/resources/fonts/subset/sarasa-mono-sc-bold.subset.ttf index 76c9467069ed7a31f1afde0277fdfc2b2e8644d1..8474882b4cb602f49dc48212ecfaef170de6d069 100644 GIT binary patch delta 13886 zcmb_CXJC|7w)foWz4w-6l1zG=gaDCHq=SNVtO=k5Aqgctkr7=x)*P0rY)@e?L0Zd5E|V8;wrwSE;IHBMUZhWJsI9;J+^gnQF))A282@f%H#W5$`~HJ}F{r??ylI~vO8uVe;UA2hJW(3ZpBW?=+_cyiS`@uhUw5W`kWTR~X#}z<i7;!{ffj7PW|8QOG`Zd= zuJnvOH#^;>S)gsyBrMjXXg`DZMf zO;2o`Wni1QDk!6!iABn)aYu`IK2%7XRwNf2Yr$2W^;ecg+!~ELQaa4R;tOI1XcI1hxQghjw1m9eNLjCSC`fWe~SFrjeeyJ_o}aKkKvPo~Y}cbPPDjXRgjm|<6`tQl5InoZNF zbA=1aJl<$g*r8F`)9r4t8`))*YK<$axZG#U_8Zk!k00$C)gfpt;>ed10MC8=3sWqxn7^*$snfj0`E9&l0snZBZE>gs^2=qx0I9U;n!0 zS|{)6KLn%u@9e(=#`Hf=OeVZNgFGQLc12mWvI38P!Ug@{@Pkod(m6~zwVVUgHeM^& z+JXhq8nxNxa5|kjTf`3A$VdC1K?S|#vGQn1zF$MT96`ZH#I6>lb{QwaUCvDf!bAKs z9GCnAe{%}|oWN&_aWTq!QSeg&1(p~yT>6@77!46w)CaMs>;|1(Yn^cZnhWQxc|CJV z=D9zBqyIYS>`N!6fHBzcKN3MI(mF}mR=vUJ21BbMUvT}Q_kFDg7DXD@*7(bQ=2 z2^HwFgFdjSf4yMIdHnG~TI$pIrTd4M7X}R&e?t8qLkyVC?nQqy z27ErdPAUbk)WE#OsieTk%kX^AVT>lj&L}9)Mg`QB4x`FZEu%aU01Q1CdHAS!jYk

KX+Om4%04tYKxdeErq6=z;f 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 delta 7796 zcmaJ_30#%cw%_YJMYLI%WKY+S(%!ed98fft$S&B*Spr|q1Siwg4!G87hUK@iHBTdASgyd?6sfs8#u(&bEtYmtf#PA0+u^w4O%!8>C|+jcCvd)m{1nb#WP^K}Z|%sJZaee|hukMT4u`iSPvoa^ zoRDNa_oMFIO;dl%Wmi4&cr}0bj ztM)tP_k;fs{}cX?0>%Zb4)`!o8Tee_rNG~UdIePm?F_oCidWUCeo?2ZPX()jjlpk* zM24&g`9Kq_F>0=b=7jDD{XHxfT#>Uyg~3sp;d@r?^jZtY>UloD}zR+^_Ky;%not z_Z{BX+_$M;Sif}%?g>}>kM95N0OP<;1B(YX4@w*K&fp<~KNwOl3VYi}Y0oOix}3cz`%%v9ocD4AbDQ(x@)qV@$uG)(@Z78d|ALBwZ^o*} zULBV_?%nay_yvW&g&PZhn@}?0^29L{w@!+mba(Q!$zM&$o^o>P=&5I?O_}!T^r{)& zGvuP6BBQnFZgE`k*^JZZ3bP{Cvf*ikB;1t!S#aSMj^nRU4>{)b`ho){fU!XyWo2)C*X?2x4>q6a9U4w3)?j7AJ-8tRox^Hw3 zb?thlchh_7{q-7sls;ZRT|ZlI)vwfV(;wEK)PJJ?RR6X9w*CkG-}QeO6o$?Qe?uR` zP(zMkvcX_jXn4i2)v(|2w&8-|n&FP&N5gMM$=KQGZ%iGBQCb2l5tgBr6w4S(fn~C##4^`XV`;OT;ro!6^ve3Q zzk1B*miQ~{rnrYoG`sQL$twK$OBQ%aY6WBeT8!`e_>RXn6W^owPQ!O++f)U(D&!k3 z5Y>jC)sh51$a;5(0VZ#8hctheMyB9yR7~lz4yRTF&M#NiApgT1qU8sjVL+SC0}RlH z%?7ZxtZXr~6t#?P@oVYQqHO-N`C9X5&F7j=G#_t1(7dL3RdZ?cgyzELKFuzN&mEp~ zsOO=fhhmzJH8nLYZ>nhWZ}L2N-yJlojP_(r4LxS?_3fg1;+-Etw>-MkSyM1r%-mJZf-Sc`vP~c(;1j`CZTNI=0KYVdr-{OLnI1_-eaF!J)GO;p)-~4ctNXL= zv$|7tZFN<3MO)gpJlt||%Y`lVTZ%XTbMqv5(Z(AaU)wlf!_3-0YR}ewT>D||iP{ad zuIqcf+On>2?ddf&t4*uRYSvn7*3^u8dFRXVtM;v&urh7M_7%y?FDGeHznYw}6ueFD@BP#}!?=JT$f1~)cG?*8N3f~sh4eCI?VPu2KVrLAMVTXKG5501{HHnP0t?3@=F&~>RC)#93|AE9nz%(rxSB2E!J1D zh?z!{fvuZeSzO9C8LRybm8@aztja33XKrOxKeh)=5*RAWU3{U`N{Bej5YvuJ6miGn zZq>xzW*@T4>>m(|Cyj~HX+@0UjG|o`uGA~9bkcTecUk3f)3x07zS|M^!S1>4MvoGY z%U#AjQ`2p|=V{Mdp6y=VUK71mcr|z(^}6V-@y_*L=lx6fs_u2&kNK4NYI}S*(J$X` zz28;;6#rHJKL_XoeFDP*;{#Iy#|0V#_XXY!N>yo8{Zy%{0#%W!Qnf<0S=Fd|Pjy|@ zu8vUWtLxOK)whD(g8K#QgU|CcfVtsWsR#zh7khy3lrgp*a^o}08%2pcH^!1NUx0j= zjIg$x#CPyyy+4dpOo3_gVSfnnqL9dv3P5kNe9a%!8B<^?OhX1mDls26 zm?^-{bH$P1f@_2)3uVI@Y4zvE-W_yo+H!IL6c0yd2%^B016edzr6os1iyk@09=)A* zNagDR5R{pO<`iHN1D`7VWo!iRL5X=Vf28ruf?pNBI2l+xr@CTaYmp)zjakx-l8XYt zFY-ms?rbj*LWt~#6Q3JNtTS6KFAju|Eb&WbN9D!{Qr~n=4!3-970T#m&SOF_- zQIamb4EqOg*h{P%3t}3WD&G%;P-`+WlL=Isj4dC0!|-ryeCBY?Tfha<61vah*wI(-ej*MDHo<13lmr0vu+@E++ax!osPzjVQTrNHV3(B?V4g$C}zzi!|?O zn9j>iOEh0Wx{gD>s3Rdj2f5_=P~q=hr|{>R-fX_SH3X76C1I{3(m1&3 z8t84~&ecF>Btg=OO3Bh90r)G{UUF`ij*#yn#2~)da4{)LsE~-i^oobNk5&+SS5ro) zBTo&5(7wXht}0AvOpAxiNZo0gC^v<|ux@2gjyW5^fL{}sVFM~1xCO3pZsCzlbCe$-ww&ICs2tiCLK~tP!X|%^j z^e{)fLVu`(7WzYw?wH|72QBndkfujOni`EwAs|*7XWJDrY?P3XmbdqWq)}tIwLM=d zM<#OU6^~FREo#w2>yN!fRHm#6hdwYy&JD+1I#bq%Ly&q*2PM=&1E*1@yek}rxxWDi zupbXXlYB261|<cI^ZCyAdLBd} zV*4}vZwG%F%Rw}H0oqVXyes_tkn)st2JYJAnN|(zd2hY~(I!Q&0(QbKM4;9T*bDod zYm60{jSM_~=H`s$I%D;?%6VJSd6CnAcpe|1)e3wW%X=#PB6RLg|E2K&^H4{G|F$iB zf4=Z%b16x@NJW8XGjTFQSF%15Lb{d0EO?tlPz1$rNG^$j;hm_kiSjONM$#RF4x4mJ zpoLWoE7202Pr$=uw_Y%O6kif~NE9-u@|6)=E;w2Vg8IxZ!R3>;og7+4SM>t5doE(; zqH3<(ge2t3XL~`2bv`VBWw4yXshJveLhzAbKFr6yTL25Ny$qINdpXwN=o<&+2n$bJICd2mYSU4wgvn;4Z;EF8J;5q!cWo=D+7?MC|>)gTx?fy?sI zXc#$&6e-UvWaIyR_!S*QL-0A9jQGxOqccT;d_5Y}30eP-A<3RJB)EKeQEzywQvt^q z5d%?5I0YZe+87AQBl%bifMUd4;3obuM!TZK)NqPRBo^i3&BI}+3n;}w0f)H-+1d3& z5cFycgn7U@IENbFz&En85A?E;8j6@VlozNi4zj4Ynxla8itIBHTK z#o*zmA4C8?%!T*d)&xv^@H}(Nl7#xS=Xz?X{Niu#>p(G`2O+!9P z<@6n=J8h@^8a!q{Wia!*(3$=%4$5+j3zngoVLTIEo%VhtD|*4GiJg z6DKB+RIZC9&quij(w6MnWGS>ciUil;I@15yGxq`4WtTVzn+V6?7<#x0S2>FFh%ub5 zB0`E-ZrFPfT!VbkBbG+d5(TD0+ht?r#c>d9MQrL3@*&xMkUxB!{9AAf>HlII-Pv!Eo20xgA^9XNZCGYe)rIXK)T z;O8O?LX8WJ!y0EZ-SV{jo@W4KDxQwaNLo+@jqrv@*E%&GXhWEWEr+QcOjWEiR3dK< zRPp=AJY2mN&@Dv184m#iI;zI7?s%kIFdZ*sGG6NH@M^XiHgnKT z9Cix=lcb)@mY~bUh`$1LHsQ5zC1NZ_G~%qoTLQ3HD^L6xyvqgQG!V%rv1uJ{!IYqza{~50oq+~BjY=XvlgeZO50#N!$Dvx zE~8oV8Z1HX8n2pBhUv$`0{0R6>~zjAQvQS3E_u!V&ljG(!vAM@O!> zd(7ac3_M-%lZHKMt2ah;6xwhW9)~yKEmU^FRVA13) z<{i~3*E8^m{2&2(Sm7-04(H(loJSk_FQg0E;7;R&r<5+jCAbWq;`dXOxCku_3^%S0 znlvLn!=>^He1Qwlm+&=QgRkHV)bKzH>V^>B5l4CVkR|`KkxCZJd~k!h4maQ?d<(bW zHhc$n;SSQ@!aexjMsYwi^Wkt}cvH^`Knwoj4Tan^*D;ir@@g{x>`^ypD*VMS;+R;PitY%<(g)y0Y)ylQ&F1^hVpXGI$Z$|ve z$);KcL*@|v<`ueitsgD_JuR>P)j|c2>L?l$2y*1{^ zrnfhL)MGb5)W=2Wd^c={)2BIl$>e9TV zI<*irdw95_j#rgcR)t-FWAg7TMTL3JY?Z<4^7;b)fYWI51P#WZ#~8_St5#|SuhHPqXJ#6G1_0n7 z6a;PA85ufTpg`~;n8Tvis#FMOFnaYF2xbz&EQLY4E+aO(a9*s_btYVlf_R-P8JhQ6 zQ`i)gl|V=b3R&^4xx1z<&eUe&|HWL{cM+}@3N4mGA+e|DP@w^aU(e@UdW4^60%Ics zCA=z}VmWNq@qc=*EU}E&+Pr$b*QOnBDY=r*$VO``sezwog zxA!e!jEkoJ3jdUa*wm!r4E<{23Xd#GstHz+swzw5MNlPb4V$Q0xnMAR=2{&^F15;z^ zD%FmHifSiJc2<`cI5cW|s5ET1R}=>|n%rnvt;<dXgtMGW>)pP{53m2Ayxo^okTerT$r=KccxUiA7tHyId0=_0G-m=Q_aGAM0Wec@%1=K?MWulc1 z4IT8hTZ=a(TeYj$YAJAMMKqRRQJKwNF^JS*%Soyu zudG_Bv;+rLH~_3Aew|QQ=``k~MQSb0GiCb<1w03MUTkHBK}%Grw&#^rq|{N4+Nh~O zB@u7vnczhf7MZ3YYzUjeGE*=l3mT?O%G)#Z*=J`OV|n~+q6a1=?oQm52cbj{uF~VG zr*V}ZSD{^HR#oPah{-%fN1)VeEqaYIgCh}hBGDrNvP_N9;md7M8w88ZYSUUvtnet= zaAG$eK2vU9Zf=g>Wm2H_%MiJw?UJ!UkAfL7Is2d7FQWn)`zCHte^V6XQ*c~w^U{7L; zxTNH%rv|KAa)CTUE^dU9i!u{KQLHtU$jE_T38W~Q$sito;v)Bc{}q8Og%BvIavqD! z*zwgG1G;XtT&^}c0|uy46ka(hh$pznt?lzeS>i2dhM-#T_yY!G!0!>%qy{Ob>QN0N zP|BRu;HjZQTFtB&mMEYM1vHb&I%SQZQwV4$v3+)TY`#|!1$mY;grcmjc33OImE}ba zmD=ggH90Fwa?tcGxh2(3L%=0y<#Mgr?Kc?xZm})60!odepuF0-#5>IAs;MpyIdn>O zmbyWsQ)cLW#gz_OrYzfOP-vY6N1|6Ng5%t58Iy%BhN0`gt=9oXi84QdV z-x`CVAbQB4B50C@t>LP$5UvSFWpHNd1aHJUVd|_|sm3|{2Xc_pJJCyMBnPQya|bv` z^oWv!#5^Jubg21n(g})FqGPm`6z9A35nE2apmRkXc9TkFayZ?(+S)9;&0;`7<{FJT zUUNj}$So+cSc(gBom!RPF_?248l5|TP#Gy9XOI=lK~ttop%a{0*)Bn+Kh=6D2!(&{e|Y$dr4eFicXm5#oWP9C08!JMfuVF0PBtgeyO zM-=>xh4kRcw+62n42SzJ(mOFe?UT-9iuIV7dfh@P86up5j~9}e2;xH#le-NHQzn&d zo7>$zcUu`(l2jAD=guK$H0f!TEFTF#Pn%I$H3WtN1{KNO3MgjG&D>ztW$HB+gI0k) zcTVI8$dr0Vu&6DS9>^yoV3FBPEc&@(r?lCjun?;X)3BFs+Fb}y0hN=UKa$|s?(B`(ZkN-d9nj$xZESh4Dq4?$;19?%3VlEz5a8a# zlPGrz0m?)jNfF(DzlsLLt)YNM{9oeMQKd?4%_|K%?z_+6r=X=$g1qk{VvMFuGu!UVGwEzPDoS)& zcAZ?Vvs3yX$TQ76hlhElDK8)u1UT}w)M?OJow~1ePOC26K;kgB#b~X>VC_S`Yx;vV zI%QKBja4^>qw;t#<_rgPBHP0Ik-2v-*s{eS@%~G>v$)1(Dau2(`!2rzI_RF(I0Hsw z0GUUHNM)p+jfo9*_~e)m3$eM5GTz-C+w3SG;~3>I1iUV@GTUElMF(LoFAiE%bdK<> zz+SPAZ4sSWsu2JFIMv>)=UB1o;iy!VV3x*)va8b3zm6xl3RhUHiV_*JL>y^TLYEF% zNGB7|-9MexCAk)*$`Z5~9QsV9(Gx1R44Ro2(z(4py*byWR+@Z1zu)U|U_!wMrU}tZ zYcN0GY;x%{Q3N|WM8p$#<$Ew{lw|brxD-GL6 zv!q&Y>pN9^@rA@ZF+4viReU7s{>ta}bS{gf2fDB=Qm!kN=-BT}&im13$SGoyiz=1^ zI%a%7jOcXmFx>p7fDX?k#->BMACquB8!IU<6!yqcRbzhvDaG<&9Zreg1X4l#yQr#t678NBA9B-&p$V8(Usk&Dl(YD{qk1jM_IBR;8<( zyfPbAH)s$>e_f#gi<*+K!zR_3$)d)IIXybQ*zUkQiW$;(6%500>%R!YXT=W!Nx6JK z44)N6L2)>(7K$V{iej$EUFfJvZt!0RKLbTS36S(N86(*c&$j%e2glTWbXBlQhi70w zHBl!P7U&=EEsb@$Z7OoX zv!J=W-FLB2W71`+&5mrH)2v1&rHV(%Y6plZByO7)*AEGlB1>s(y(bhU$z6u@ztNBi zK4R6P#Di3nmWG%aP;yFfLCR*y4}WJXD@G?2S#B#Gl<(AN9HBvFHlZkBP#A1chfB9S z+gG4e7`=t1Hdt~3O&ULV*h>pMMn!|#LD{WEuaeCb@UsZzJW^;n`-9MA_`ijw??tAG z|2;IJf&U+4Q_qQ$H)`RT*x2`L;Bf55_x-Rhw)_2qu&-yv2Ts7ws^59BbJy?Mu+yXd z{a;j=lL0byMNi@r3q*x%VTiC-ctvsISF>m$}* z*=lXmZ8zC&x7}^qZrf$sYddKBh3&6)l|9#fwSAHOq{HsWcT9H7cCV3icJD=XS*tgmDo`0@?i~pNIVPH|w>$2Z|B%^#^>CWb2fKe?jyMu@|yGB z2>CX-Yy+f zdZ6@tnYZkkvg75hX!(NjhbrnT?h6~kvGD22S(RHVzo;5p^_%Kob#wJ^Yl>@5)XuGa z?TUgcuDjyt!KT4u2j4pQyDOJn`PqCR-=pIA!FNb5oa0b5Gkjy?w@@8Mn-YnFnSCX5BaIFSEzb{&-H~obIdCSM8Wv zH1~ZR4%)nix3SD#<~_cc{(?pm{N z&DU!Oubs5^f7WHJo4Rh{x?Ssf*9+_Cu77m>v&}ipP0h{CvF10L&o+PAe5pm-Vs9DL zGPotua&^nfmRnkOwmi~utmXBV=vyuCw|v=hp{1`iqcy8lXw7RaX{~OpYi($aw9aas z-+Eo^&8=HoceU+#mpt!G-#w|?3Bx7OY^d7HM)+%}?ZeA}Y7Wo;YV?rq!K zcChXFw&QKTXnVWu{kC&$pSOL}mS{J$d)mv}>)NNb&u?GT9&O*+{!sg&_LtgEw7(f` zKhyqk`&aGXZLn-8*f3a;2qf=u8x9^>W+~e z(>msMtncXT*xV8Cc&y{aj*}f9b^NVU)9LN3?wsDaw6ml0=FYo2AMNb!e7f^U=PR8j zJI{4~-kIpqba}f%U8P+$UBkM@bY0!Gvg`h?r>U_-!%pSngj(+Z1xF zGfCbqCeQo~z2IT&DA?iH#=jO?K%R}-~oR8rAte(h)hauYA(Yv9yt+%DOxp!@EQ}6QLWxY#!uRCM)!YG>At z#E!3b?BB6{NBNF|9jYD5?Wecz*j{$uJ@IFMYPXEvU>LF>8tWq%2w`KK5yB^Wh0R z4PrN548}74>4L7Fz&}UIvbVCM44{iwGvKwnHny&>2!Eq%V2V)<6KAl6i`v#KXT?j_ zT)T`dT-w;QM0{S)7A|XSYGezSH?C`93)x^M8!={@k69*780BMm)2EHVr1^&|8Sh0K^t61E$as|8px;2f9*lzr-b~)=7pNE>( zuUNyLYrb~PI(D>q&AJLCpRsVPI2eSHGfAoLiU(^lzff+LHQ>cQ!>tHu2FEsT*V)hi&Z76L#o$RpQ+DiCTdUV zn63S$@G=kY_2e$5zbrdtiQBrZPRQ=?A*TG z{)yub$Ni3djw6m!j?bI{=K|+Z*A7>=>!|Cb>jT%9Zss<+^W1~obKGm(54(TqF?&XM z=6N=Hx;>wG$BHZfQ{p?5eS}Y752eRAD`AVwa3kCV8{x-rGu#53;8wT|ZimgV1-8OZ z;10MG?t;7F9*E&GGrN=B!yab4*lzYH+k;>H9%oOmz3fT0pZ$zI&7NV0*|Y39_I!E^ za4x`~t5;nTuD&lRSNiS@_{9U9Ly{66fvN_05T3xkQXE5aomk%?oR6tt8{7*&g*e;? z+hGUng!|zET)}bt0R(vho``*P$qgf7iAzoxajye@UOEC-j==SZH+ggH4IHKM^jKUA zFkH45o{Ucca2kjnTA8wd5%CTH_n5t~51zz9`ohLh6tzqSsWAl_4%wj|ezn+QT z?C@zE0F#7{e+1At6gNX8GUV663PnyyDiXCsDe<17KGjdp#=AH;qr*j$rO)bMUWed} z)r;ce_-l_1`_i{V7q;-M(&sFE>QKr4TBqafY$s1OdMi;WR&(9VX5` zM<&IwEIbfCx!e_WlhNypulp}g1`!sxj8xS$H z2LDuq_pej;6LA>^fZyUOCW=IcrE(sd8!wcDFn|c!mJs^zmP|=5q979Rd?8|yH$?O< zyf2aa;C1*#S_VE=C*seGM=~I*T-uEEC0UYW zC2}|pufiGlP~1q;r=-*R_|^<4m`Qs{OQ&Fq=p=)b=-_Z3KEa-x5Wwf~MVcQHGVz%b zG|fw}oZ#Z>ObCzbM?DHb3AH1=1mHZjIiXD>rHun=2$~}pfY0NbGNC3)OmL*-I2^~p zSK(EBo`EwW5}LuDhzbo&ggXf*aqKO4>w9o?rakCb5jCw!z9mkEC;QS&QVP--8Y;3Y zooP~-2YUk*#!1o$!{H>n6W)!l%7 zQP9vWs-5Bltp?o;9GCP+QicKZT>rJqrrII1iI7It8XuyBVHv}5cVKt(+5vK`|BvOZOx}}RmOdf>Z zbV*#+#d}rYFP9dlK&7R0W>TQTMDYHlb@7NAuFQT04kOPmzzg_%5nhbnr-q^;8sy?2 zr$O9M&eSr!Y_6;@O@wZ1VL!~ThyBnKc7Tho)uFV3cd*T2fgt=__ zg!rf|xKecy{(*A*4tnFaWkJm_>T>GhN>l`%{XG1gEJc{a9)7h?Vj{a4$mxW5A`41! z_Yxgg@ztP1OR1v@s4b;TPOD)bj=YF;2z{| zf4mzfqY?4E_ecL(C^;LWA8tuflW|+RfoC8|H1=CDqo6}OU>5c#GjsA9BzdFgfg-q) zZW(-yf69>|w)VpX_<(yE+qFV+Bp@-AQS{WRG zr=Ty+4KOr=G+q}Uh0V}lY)%!?lM3Zxi?l;6Nu9Lg(D)MwJaRY=)r+(e??lsZoUF%I zCYmu-A+#tplY;FZA@`bZ1h-0}kFzQ92zFsge7O<4(bwPvybZq=(P43bsJ(b`cnw}d zp`L&f*nS({#`dp8C}~?MWui^eSdowvDg9&p&=Oz$GZF@vco_;xX{3y*0pDU!QR0_w zY%vrVnk+YSyEvoA9tLnF1wK-ahugU?KFb8dYY1=(@-qpCr-=w90g-J^PtMVJzu2bX z=!|%m3G6ilFzG)mrn$=((~4;J42ua#2#>}V!XX%8~mcTvYIGt9?_i0QT z4~Vl)>CnX|TEG?HSjplF{5gW=#JYx<(iZ7jx+MM67`3E}Y~f#X8$|$#F>wnb zP>CapVHdViy$--gk?e8)9J-5xaA?5DV>r?SPxp_Yxp5GaCM3d*&L+JYPc)T)&xu9g z3vgrt#N66!r~R>cY>t$8hX8yet+cuc8M#K_yE3MmyN6 z27(qd6V^Px!qoT;vB-Q29o#$U-muujV(dMt?yxNT0#p4{cC4KD^%qED?Ly?znK_Bi zg{%aAhjslK_&wJ9AHrGq2+qNi(2dpF$5`=whIQNf@QH}@yomNwL`*ZEi*s+{mZuQ^ zX@ohCHQ{d%$0@`{BOhW30jwk{GM@L+Eed+w=%+^)dFu?+R(03lZvXaN#nj_e3alj{Q?i>d5?c-?JsMvOY*45{`38WFjszQ^0->_=Q>qm+&0bB8-B0U_YfGlzND1 zNQ&vGk!7N1$iP#Ge@nqt2%L#t#Y5QuqM?i>1sY&FjQeh`VP3A|TCV5WB2j4MJc}C; zQYVs$_A6!vm?wxaT*w7(;Z~7G;zYCnoT3CH1&+LO8@I>r zaDgSt9T**4+|8+kr4J=qT7!|MAD&q9a4+|9KR*39lPN(Vp%}OZK;nty0d$o)JQp2M zh!^lep3id;LX9g(3| zi3o9pSwtt9cRxZT2ALrOX!Byig0RvKNHl)gMSBALlMfn|t-|}W_-;3R7hM2L0dKYj zuNKzMwz3$DA;8^u-7Y?V*yw*S^XM+786Wj^OH3kZm)879aig9riwPKXMk44(N2PALZ^l<-RCQMW=G zn&yNkP@-KMUZbg5rj>QeOtZY2T^nxE>t1_neftdfd+$E>Z}0Q1wf<}TX8zSLfA&qe znE_+W13z-cveGj$<+tRA8TCa~~BRt47X{ZO*sQ;1#69s%dZ&&1e$hGB`WY4@<5?lSJVE;-LnfHJ2 z$(zKdGFwJPm-cRt@qp+5J{o#cCp&fYCVW%x233}q@5hH$vnC$MYV>qp_|8*cL5b8c zx7k#9QYiBjpw!~|V>guczVo93f=fBL6~R%02Z9wh2;7R`C<)vv{JaVfz2=vHxD3KE z4|jV_54^$bdD-)8&wqG<*Hh&IvEfj&>CuLgBpV_ z1*Zk~gvdk6LS71m(CE*^$}Trj_O- zN%aNw4fP$(V2!)RM-!wOuSwLT zYjQQkno^BcQ>R(0Y0_-gY}f2IYYu3RY0hgdYi?`qYx=cJ>#S91L$%S`@!ACK6m5>S zNIOsal=d0z5p9q5J?$6T``UgT(>d!rbiTSEU8F8fH&K_No1KYO+xn~e>-yVz^B;zx28AKfkZqV{ zs4y4|YYi=iU534eGlsVemkieo_l$Dm2xEjX!B}XlG_Eza8IK#^G@dtJHQqJ;Z2ZF{ zGYv6~Fh!c;Oc|y^Q>95~T5hU0Z7{W(_L)waZkm4OtNbwG>16+3au>QM{*$@OZsP*T zzPj~hEn|HFG8iVPJQ;g{^XD5$~Qv$03pQ`S?| zd3;w=ML{Z+;(`=!952p z2XhX}4y-&d{XoWni3e2sFYbS0|Ec}vZToKRTeL4@@8^4)_s-ty)bV^re23z>ANG8- zXaAn9ds25l*!}hH>${tGuic%sJG1>%ySaT$ySzQMt+VY=+rQebw7uQd*H+tBwyS^F z{aqjK`e0Z4uJWC~?VKytZ~tohbK56uTWtBma>4Shl*7;)K%9N)}_@Y)+N+Ex~zZMA!EDIXsj`o8B2__j1!EH8e@$CMt}W1-8sER z6ROTuKeqI5OHV9Kt(j1Lpn6#Kk@B+wZhX}1_}AAz4B9|EFang2(f7s(m?Cp;!qpZa z18(E@4%`tveIVLw03{ooo|#+B3My8aG%Tjdv_#Dcs>^j%{9D5c)aANzR-h@b)!~K{ z$z*9+g+a`FdQLiiiwe{5%hzQ&x&djVC(GX#tGeW1cj7AYl}-L8}%u$j1}b+I$-E%p)n6=Gqz zFh@8mi;uW%eoX+3IuEH_f-%_a{G% zzo&nQf1H1sf3d&L|B(N;igaa=a-1?inv@%qJC&Wv*Ok|l{i<+PfvQb)R&^u5 zIbd9XCg37Z1DG=dMHx(xC`GY@>(dI;tOaxC6Kyym&568%jHO`y00mHjv@_?CAv`0Y zfgt7znUDojAsePa4&=gg$b)>;5RjjbkP_5$<;Dg44Y!$Rc<$l>q~KS^Tv#G2#b4r~ zbLPu{IxD&0NH~B?d^=ApP(bRKc`zRVG7Q<@=`Z+80I5T%8!4%W zXz_IgsQl(ZDOaOh1?I^nG8u55_^Sc}-ECqUGfWBPYH~y)4;`^6)FY?lh|Du|L>yb> zHrgSjaY~g@l9uNN#G1GUW68)N-7@6Ya$8B_eI@vK;Y?z2Tr?CrW+_s@nna}v6oZqA zfVEdF&rfY)>m>T72nqJNhouL8eCB|U;rbmfd*Iy z8(^a~FzP6J86!`F(2F}$uplUvJc(B@B6A9gQplZ9f-O&cL-3_KpbBh*?I6M~XhUTg zI#`1VqZ7yA#9YLg74F=(_6oj0c zpb&6|pkbaN8hQ#g@erf{A~680wpGW0qXZ;fxlKpB9{{1;CG{Y%TzpZTzvR-E6XlhO zFO{BZ@o;$sT-m}WToQ26lx&RV6)ivR>>AhEcFU z{3IBnt&5d_gHXwJsOkeXwysmGJVZ$lt?5C@Ak+YZ%4acdYP zxK}|nCaeW5e)XUizX*fq3}OnLDG(F2%2H$=cKcG8iDK?Z z7~@g}Rg!)2$&nE3f+v5gqpp#7B%uOGkEG-nAr!i_(%C{LI>DZTgr8)mCH&(^4@^4M zPD}VSr0J1@PmjW;Bp_A>XWIZ-R!Wjj71xJD@|0;@+qRd{2*^ebz0xCr2}Lb>9OFgu znJvmAV056(kPRgL+Nf-?AOaLHP1Mj&w%8m22`)$AD3yYfuND-$AAuv>`Y{d~Dz=OSh09UyvI|}E-jaeQMahsO zZ>joOR*B6tEw@q~Bz%UQmhe-M9@txHc3Q%xB2AA}xr8WeN&;d{dMJyDR!WlRh_8@j#QJ@+%9gWfp(1)>5Z+$|?A^aZ?)zKkcC>BJ4mmlpe z^vduKv>#QdwGa-%A+bIRJ?1$)x?bfTpGC`MViyV_Up$K*$LFJx7(yJ_X=17XSl~QD2L->W;9G5L^V$oo2fYwoB86oXiyCz3kl-)$n_bx zh*5gBMJpu+yaotK;1FtJKoyaPM)HuEH(<4t;n{#5IwMHkk|&;sfk5+0SOtyHgm5RO z!UtF&J_4+Sm6*XQScUCIXvB6CM-k2+v!wnfzYb@_la@#a&w-XY*ddWD0R9uwVL~h! z4JsF^fdKEod9h(Mc+25Dd?dDwhEy{ND6brJRDgOmchvnetTN(DK~QjXY%4^ZGoGkv zLy&VBN$A*2IywK3J(3NuM~8Y+DG(RM!e0j!l5H_$3`EM|ZFpDA8v}v)BrigTRASti z;5z;?M%$FYRPZ*J2rSZRIC3eBB9s&(7vKcfkh(^~2cpq4V<5y8-iP-Q@g;mI-W~&^ z%%oI^>Xg|GG$Kt!`jrfljQCQ?ZEj}Z(UW+tcwUmaDh7`l8E=p2RJ2pbUZ2a2ho}gU?7N4S23QpV}l9FUCPoE~3yPM+-JIY2xGH--Me; zOVilfdLS6+pZkED;-s+<5&|dTBzpK5KIT?DY_@RXVVk64{aEsRl6xSuU_+B8KIB>A zUxRB%|7XwK2V4{HaL=dU6neM{SGg5w=cam1rlUQeRE)(lQw3io5Mt|1`jsB)Alp@D z11fspnJFAEdDKb#n1K!`IC3P|9FbFe9Q+$_Lp(ALZw=HtG#aEw>TlvvOM1xRf6k8Q z0XGm!Av)vXeKC+d8?^@LKq^s!Kp|DYVh6`xcmY{Upwhv@;UxebL&OE+@oH5AOZl}( z3pzZH7?3g|6d`!gqDznp4~&5nqU$>OZ6%!$#m8VJ#jw&1QZRTaWA4lel`}jSTN9Ep++8Tg$U}o(4AJf0^R};q}&j z&ER(e3XZ1E1^g~zv9KAhyRGmv;oAZ8bg%(IJMbd45sfsUIpS==vpMhqF@#Z;3ao}yrDQgLz$Md!)uCI>3aSfg z)>~7hBQK= z!jpDNV9khr9`@TgWL889Fm6Y0E<)4`aL~>nR0~H1FbKB|E*u0hI1K!(WaqgduTwfX zQLM-LA}OGC)U<;<*@>U# ze?_blPQn1%vQdN11vX>|8;ZNO3SMD>@H)H-Zuw6i`G#*ZMIpY0n746Pdl$~adptx+#HLNh0~?xV&^b7d99mi&shVlI7z7t^JGclR zz(oYmKNH-@2yQJ71C-;3a0xzw%lN&F5+@0Tf#Xg!0O^naxVVCA<0tSbE;gUR-{1@Q z96m*aD{4?(0(oUlQoYO%sm3x-+>x%qS8yG^h8u7bZo#+k4bor3ZTQYgaf4{ilbe$U zGL@Peq+l=^3V@tnBP;gcFlhYuBn~EAf~Yb~cJS+X0QYMA$B&7vV5^yhS!9O3MUUh3 L?sHGTThIRh3ctAW diff --git a/src/enums/language.rs b/src/enums/language.rs index 878d1dd4..02269277 100644 --- a/src/enums/language.rs +++ b/src/enums/language.rs @@ -29,7 +29,7 @@ impl Default for Language { impl Language { pub(crate) const COL1: [Language; 4] = [Language::EN, Language::FR, Language::ES, Language::ZH]; - pub(crate) const COL2: [Language; 3] = [Language::DE, Language::IT, Language::PL]; + pub(crate) const COL2: [Language; 4] = [Language::DE, Language::IT, Language::PL, Language::UA]; pub fn get_radio_label(&self) -> &str { match self { Language::EN => "English", @@ -38,7 +38,7 @@ impl Language { Language::ES => "Español", Language::PL => "Polski", Language::DE => "Deutsch", - Language::UA => "Українська" + Language::UA => "Українська", Language::ZH => "简体中文", } } diff --git a/src/utility/translations.rs b/src/utility/translations.rs index 6e91f577..00040ee9 100644 --- a/src/utility/translations.rs +++ b/src/utility/translations.rs @@ -323,8 +323,9 @@ pub fn filtered_packets_translation( Language::ES => format!("Paquetes filtrados:\n {filtered} ({percentage} del total)"), Language::PL => format!("Przefiltrowane pakiety:\n {filtered} ({percentage} z całości)"), Language::DE => format!("Gefilterte Pakete:\n {filtered} ({percentage} der Gesamtzahl)"), - Language::UA => - format!("Відфільтровані пакети:\n {filtered} ({percentage} від загальної суми)"), + Language::UA => { + format!("Відфільтровані пакети:\n {filtered} ({percentage} від загальної суми)") + } Language::ZH => { format!("目标数据包计数:\n {filtered} (占所有数据包的 {percentage})") } @@ -343,8 +344,9 @@ pub fn filtered_bytes_translation( Language::ES => format!("Bytes filtrados:\n {filtered} ({percentage} del total)"), Language::PL => format!("Przechwycone bajty:\n {filtered} ({percentage} całości)"), Language::DE => format!("Gefilterte Bytes:\n {filtered} ({percentage} der Gesamtzahl)"), - Language::UA => - format!("Відфільтровані байти:\n {filtered} ({percentage} від загальної суми)"), + Language::UA => { + format!("Відфільтровані байти:\n {filtered} ({percentage} від загальної суми)") + } Language::ZH => { format!("目标网络流量计数:\n {filtered} (占所有网络流量的 {percentage})") } @@ -413,7 +415,8 @@ pub fn error_translation(language: Language, error: &str) -> Text<'static> { ), Language::UA => format!( "Виступила помилка! \n\n\ - {error}"), + {error}" + ), Language::ZH => format!( "发生了一些错误! \n\n\ {error}" From c0bbb913e6e6d235a22ddaa07a3ca74fbbddabd3 Mon Sep 17 00:00:00 2001 From: Serhii Bilyk Date: Sat, 4 Mar 2023 12:25:31 +0200 Subject: [PATCH 4/5] fix translation --- src/utility/translations.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utility/translations.rs b/src/utility/translations.rs index 6e91f577..a82d4aa5 100644 --- a/src/utility/translations.rs +++ b/src/utility/translations.rs @@ -635,7 +635,7 @@ pub fn deep_sea_translation(language: Language) -> &'static str { Language::ES => "Para sumergirse en el tráfico de la red", Language::PL => "Aby zanurzyć się w ruchu sieciowym", Language::DE => "Um in den Netzwerkverkehr einzutauchen", - Language::UA => "Оригінальний, темний мотив Sniffnet", + Language::UA => "Проаналізувати мережевий рух", Language::ZH => "潜入网络活动的海洋", } } From d0e1663d4a3a33ab5d6e5d3786315e84b690300a Mon Sep 17 00:00:00 2001 From: Giuliano Bellini s294739 Date: Sat, 4 Mar 2023 15:51:04 +0100 Subject: [PATCH 5/5] renamed UA to UK and fixed small typos --- src/enums/language.rs | 6 +- src/gui/components/radio.rs | 4 +- src/gui/pages/notifications_page.rs | 6 +- src/gui/pages/overview_page.rs | 4 +- src/utility/countries.rs | 21 ++++- src/utility/translations.rs | 130 ++++++++++++++-------------- 6 files changed, 93 insertions(+), 78 deletions(-) diff --git a/src/enums/language.rs b/src/enums/language.rs index 02269277..90991533 100644 --- a/src/enums/language.rs +++ b/src/enums/language.rs @@ -16,7 +16,7 @@ pub enum Language { /// German, DE, /// Ukrainian - UA, + UK, /// Simplified Chinese ZH, } @@ -29,7 +29,7 @@ impl Default for Language { impl Language { pub(crate) const COL1: [Language; 4] = [Language::EN, Language::FR, Language::ES, Language::ZH]; - pub(crate) const COL2: [Language; 4] = [Language::DE, Language::IT, Language::PL, Language::UA]; + pub(crate) const COL2: [Language; 4] = [Language::DE, Language::IT, Language::PL, Language::UK]; pub fn get_radio_label(&self) -> &str { match self { Language::EN => "English", @@ -38,7 +38,7 @@ impl Language { Language::ES => "Español", Language::PL => "Polski", Language::DE => "Deutsch", - Language::UA => "Українська", + Language::UK => "Українська", Language::ZH => "简体中文", } } diff --git a/src/gui/components/radio.rs b/src/gui/components/radio.rs index d6ac1789..b46d7c9c 100644 --- a/src/gui/components/radio.rs +++ b/src/gui/components/radio.rs @@ -3,7 +3,7 @@ use crate::enums::message::Message; use crate::enums::sound::Sound; use crate::structs::notifications::{BytesNotification, FavoriteNotification, PacketsNotification}; use crate::structs::style_tuple::StyleTuple; -use crate::utility::countries::get_flag; +use crate::utility::countries::get_flag_from_language_code; use crate::utility::style_constants::FONT_SIZE_SUBTITLE; use crate::utility::translations::{ ip_version_translation, relevant_connections_translation, sound_translation, @@ -101,7 +101,7 @@ pub fn language_radios( ))), ) .push(horizontal_space(Length::Fixed(5.0))) - .push(get_flag(&format!("{option:?}"))), + .push(get_flag_from_language_code(&format!("{option:?}"))), ); } ret_val diff --git a/src/gui/pages/notifications_page.rs b/src/gui/pages/notifications_page.rs index 80640ac1..bd271ada 100644 --- a/src/gui/pages/notifications_page.rs +++ b/src/gui/pages/notifications_page.rs @@ -8,7 +8,7 @@ use crate::enums::traffic_type::TrafficType; use crate::gui::components::header::get_button_settings; use crate::gui::components::tab::get_pages_tabs; use crate::structs::style_tuple::StyleTuple; -use crate::utility::countries::get_flag; +use crate::utility::countries::get_flag_from_country_code; use crate::utility::get_formatted_strings::get_formatted_bytes_string; use crate::utility::style_constants::{get_font, FONT_SIZE_FOOTER, HEIGHT_BODY, ICONS}; use crate::utility::translations::{ @@ -349,9 +349,9 @@ fn favorite_notification_log( .push(Text::new(dst_str).font(font)); if !country.is_empty() { if traffic_type.eq(&TrafficType::Outgoing) { - row_dst_flag = row_dst_flag.push(get_flag(&country)); + row_dst_flag = row_dst_flag.push(get_flag_from_country_code(&country)); } else { - row_src_flag = row_src_flag.push(get_flag(&country)); + row_src_flag = row_src_flag.push(get_flag_from_country_code(&country)); } } let content = Row::new() diff --git a/src/gui/pages/overview_page.rs b/src/gui/pages/overview_page.rs index 22cd2ccd..44a0ef72 100644 --- a/src/gui/pages/overview_page.rs +++ b/src/gui/pages/overview_page.rs @@ -18,7 +18,7 @@ use crate::gui::components::radio::{chart_radios, report_radios}; use crate::gui::components::tab::get_pages_tabs; use crate::structs::sniffer::Sniffer; use crate::structs::style_tuple::StyleTuple; -use crate::utility::countries::{get_flag, FLAGS_WIDTH}; +use crate::utility::countries::{get_flag_from_country_code, FLAGS_WIDTH}; use crate::utility::get_formatted_strings::{ get_active_filters_string, get_active_filters_string_nobr, get_app_count_string, get_connection_color, get_formatted_bytes_string, get_percentage_string, get_report_path, @@ -238,7 +238,7 @@ pub fn overview_page(sniffer: &Sniffer) -> Container { .push(Text::new(" ")); } else { entry_row = entry_row - .push(get_flag(&key_val.1.country)) + .push(get_flag_from_country_code(&key_val.1.country)) .push(Text::new(" ")); } entry_row = entry_row diff --git a/src/utility/countries.rs b/src/utility/countries.rs index 214e2721..bac1f8dc 100644 --- a/src/utility/countries.rs +++ b/src/utility/countries.rs @@ -504,7 +504,22 @@ pub const ZW: &[u8] = include_bytes!("../../resources/countries_flags/png-16/zimbabwe-16x16-33150.png"); pub const UNKNOWN: &[u8] = include_bytes!("../../resources/countries_flags/png-16/question.png"); -pub fn get_flag(country: &str) -> Image { +pub fn get_flag_from_language_code(language: &str) -> Image { + Image::new(Handle::from_memory(Vec::from(match language { + "ZH" => CN, + "DE" => DE, + "ES" => ES, + "FR" => FR, + "EN" => GB, + "IT" => IT, + "PL" => PL, + "UK" => UA, + _ => UNKNOWN, + }))) + .width(Length::Fixed(FLAGS_WIDTH)) +} + +pub fn get_flag_from_country_code(country: &str) -> Image { Image::new(Handle::from_memory(Vec::from(match country { "AD" => AD, "AE" => AE, @@ -553,7 +568,7 @@ pub fn get_flag(country: &str) -> Image { "CK" => CK, "CL" => CL, "CM" => CM, - "CN" | "ZH" => CN, + "CN" => CN, "CO" => CO, "CR" => CR, "CU" => CU, @@ -582,7 +597,7 @@ pub fn get_flag(country: &str) -> Image { "FO" => FO, "FR" => FR, "GA" => GA, - "GB" | "EN" => GB, + "GB" => GB, "GD" => GD, "GE" => GE, "GF" => GF, diff --git a/src/utility/translations.rs b/src/utility/translations.rs index 00040ee9..dd2c3f5b 100644 --- a/src/utility/translations.rs +++ b/src/utility/translations.rs @@ -9,7 +9,7 @@ pub fn choose_adapters_translation(language: Language) -> Text<'static> { Language::ES => "Seleccione el adaptador de red que desea inspeccionar", Language::PL => "Wybierz adapter sieciowy do inspekcji", Language::DE => "Wähle einen Netzwerkadapter zum inspizieren aus", - Language::UA => "Вибрати мережевий адаптер для інспекції", + Language::UK => "Вибрати мережевий адаптер для інспекції", Language::ZH => "选择需要监控的网络适配器", }) } @@ -22,7 +22,7 @@ pub fn application_protocol_translation(language: Language) -> &'static str { Language::ES => "Protocolo de aplicación", Language::PL => "Protokół aplikacji", Language::DE => "Anwendungs-Protokoll", - Language::UA => "Протокол аплікації", + Language::UK => "Протокол аплікації", Language::ZH => "目标应用层协议", } } @@ -35,7 +35,7 @@ pub fn select_filters_translation(language: Language) -> Text<'static> { Language::ES => "Seleccionar los filtros que se aplicarán al tráfico de red", Language::PL => "Wybierz filtry, które mają być zastosowane na ruchu sieciowym", Language::DE => "Wähle die Filter, die auf den Netzwerkverkehr angewendet werden sollen", - Language::UA => "Вибрати фільтри, які мають бути застосовані до мережевого трафіку", + Language::UK => "Вибрати фільтри, які мають бути застосовані до мережевого трафіку", Language::ZH => "选择需要监控的目标", }) } @@ -47,7 +47,7 @@ pub fn start_translation(language: Language) -> &'static str { Language::FR => "Commencer!", Language::ES => "¡Empieza!", Language::PL => "Rozpocznij!", - Language::UA => "Почати!", + Language::UK => "Почати!", Language::ZH => "开始!", } } @@ -59,7 +59,7 @@ pub fn address_translation(language: Language) -> &'static str { Language::FR | Language::DE => "\nAdresse:", Language::ES => "\nDirección:", Language::PL => "\nAdres:", - Language::UA => "\nАдреса", + Language::UK => "\nАдреса", Language::ZH => "\n网络地址:", } } @@ -72,7 +72,7 @@ pub fn addresses_translation(language: Language) -> &'static str { Language::ES => "\nDirecciones:", Language::PL => "\nAdresy:", Language::DE => "\nAdressen:", - Language::UA => "\nАдреси!", + Language::UK => "\nАдреси:", Language::ZH => "\n网络地址:", } } @@ -85,7 +85,7 @@ pub fn ip_version_translation(language: Language) -> Text<'static> { Language::ES => "Versión IP", Language::PL => "Wersja IP", Language::DE => "IP Version", - Language::UA => "Версія IP", + Language::UK => "Версія IP", Language::ZH => "目标IP协议版本", }) } @@ -98,7 +98,7 @@ pub fn transport_protocol_translation(language: Language) -> &'static str { Language::ES => "Protocolo de transporte", Language::PL => "Protokół transportowy", Language::DE => "Netzwerkprotokoll", - Language::UA => "Транспортний протокол", + Language::UK => "Транспортний протокол", Language::ZH => "目标传输协议", } } @@ -111,7 +111,7 @@ pub fn traffic_rate_translation(language: Language) -> Text<'static> { Language::ES => "Tasa de tráfico:", Language::PL => "Prędkość ruchu:", Language::DE => "Daten Frequenz:", - Language::UA => "Швидкість руху", + Language::UK => "Швидкість руху:", Language::ZH => "网络速率图:", }) } @@ -124,7 +124,7 @@ pub fn relevant_connections_translation(language: Language) -> Text<'static> { Language::ES => "Conexiones Relevantes:", Language::PL => "Istotne połączenia:", Language::DE => "Relevante Verbindungen:", - Language::UA => "Важливі підключення", + Language::UK => "Важливі підключення:", Language::ZH => "连接详情:", }) } @@ -137,7 +137,7 @@ pub fn settings_translation(language: Language) -> &'static str { Language::ES => "Ajustes", Language::PL => "Ustawienia", Language::DE => "Einstellungen", - Language::UA => "Налаштування", + Language::UK => "Налаштування", Language::ZH => "设置", } } @@ -150,7 +150,7 @@ pub fn yes_translation(language: Language) -> Text<'static> { Language::ES => "Sí", Language::PL => "Tak", Language::DE => "Ja", - Language::UA => "Так", + Language::UK => "Так", Language::ZH => "是", }) } @@ -163,7 +163,7 @@ pub fn ask_quit_translation(language: Language) -> Text<'static> { Language::ES => "¿Estás seguro de que quieres dejar este análisis?", Language::PL => "Czy na pewno chcesz zakończyć analizę?", Language::DE => "Bist du sicher, dass du diese Analyse beenden willst?", - Language::UA => "Чи справді хочеш закінчити аналіз?", + Language::UK => "Чи справді хочеш закінчити аналіз?", Language::ZH => "您确定退出当前监控吗?", }) } @@ -176,7 +176,7 @@ pub fn quit_analysis_translation(language: Language) -> String { Language::ES => "Quitar el análisis".to_string(), Language::PL => "Zakończ analize".to_string(), Language::DE => "Analyse beenden".to_string(), - Language::UA => "Закінчити аналіз".to_string(), + Language::UK => "Закінчити аналіз".to_string(), Language::ZH => "退出监控".to_string(), } } @@ -189,7 +189,7 @@ pub fn ask_clear_all_translation(language: Language) -> Text<'static> { Language::ES => "¿Seguro que quieres borrar las notificaciones?", Language::PL => "Czy na pewno chcesz wyczyścić powiadomienia?", Language::DE => "Bist du sicher, dass du alle Benachrichtigungen löschen willst?", - Language::UA => "Чи справді хочеш видалити всі повідомлення?", + Language::UK => "Чи справді хочеш видалити всі повідомлення?", Language::ZH => "确定清除所有通知?", }) } @@ -202,7 +202,7 @@ pub fn clear_all_translation(language: Language) -> String { Language::ES => "Borrar todo".to_string(), Language::PL => "Wyczyść wszystko".to_string(), Language::DE => "Alle leeren".to_string(), - Language::UA => "Видалити все".to_string(), + Language::UK => "Видалити все".to_string(), Language::ZH => "清除所有".to_string(), } } @@ -215,7 +215,7 @@ pub fn hide_translation(language: Language) -> &'static str { Language::ES => "Ocultar", Language::PL => "Ukryj", Language::DE => "Verstecken", - Language::UA => "Заховати", + Language::UK => "Заховати", Language::ZH => "隐藏", } } @@ -240,7 +240,7 @@ pub fn no_addresses_translation(language: Language, adapter: &str) -> Text<'stat Language::DE => format!("Es kann kein Netzwerkverkehr beobachtet werden, weil der Adapter keine aktiven Adressen hat...\n\n\ Netzwerkadapter: {adapter}\n\n\ Wenn du dir sicher bist, dass du mit dem Internet verbunden bist, probier einen anderen Adapter auszuwählen."), - Language::UA => format!("Не зафіксовано жодного мережевого трафіку тому що вибраний адаптер немає активних адрес ... \n\n\ + Language::UK => format!("Не зафіксовано жодного мережевого трафіку тому що вибраний адаптер немає активних адрес... \n\n\ Мережквий адаптер: {adapter}\n\n\ Якщо Ти впевнений, що підключений до інтернету, спробуй вибрати інший адаптер."), Language::ZH => format!("您选择的网络适配器当前无活动网络......\n\n\ @@ -269,7 +269,7 @@ pub fn waiting_translation(language: Language, adapter: &str) -> Text<'static> { Language::DE => format!("Noch kein Netzwerkverkehr beobachtet. Warte auf Pakete...\n\n\ Netzwerkadapter: {adapter}\n\n\ Bist du sicher, dass du mit dem Internet verbunden bist und den richtigen Adapter ausgewählt hast?"), - Language::UA => format!("Не зафіксовано жодного мережевого трафіку. Очікування на пакети...\n\n\ + Language::UK => format!("Не зафіксовано жодного мережевого трафіку. Очікування на пакети...\n\n\ Мережквий адаптер: {adapter}\n\n\ Чи Ти дійсно підключений до інтернету і вибрав відповідний мережевий адаптер?"), Language::ZH => format!("暂无流量数据. 等待网络活动中......\n\n\ @@ -302,7 +302,7 @@ pub fn some_observed_translation( Language::DE => format!("Anzahl der empfangenen Pakete: {observed}\n\n\ gefilterte Pakete: 0\n\n\ Ein Paar Pakete wurden empfangen, aber es entsprechen noch keine den spezifizierten Filtern...\n\n{filters}"), - Language::UA => format!("Сума перехоплених пакетів: {observed}\n\n\ + Language::UK => format!("Сума перехоплених пакетів: {observed}\n\n\ Відфільтровані пакеті: 0\n\n\ Деякі пакети були перехоплені, але жоден з них не був вибраний відповідно до вказаних фільтрів...\n\n{filters}"), Language::ZH => format!("监测到的数据包总数: {observed}\n\n\ @@ -323,7 +323,7 @@ pub fn filtered_packets_translation( Language::ES => format!("Paquetes filtrados:\n {filtered} ({percentage} del total)"), Language::PL => format!("Przefiltrowane pakiety:\n {filtered} ({percentage} z całości)"), Language::DE => format!("Gefilterte Pakete:\n {filtered} ({percentage} der Gesamtzahl)"), - Language::UA => { + Language::UK => { format!("Відфільтровані пакети:\n {filtered} ({percentage} від загальної суми)") } Language::ZH => { @@ -344,7 +344,7 @@ pub fn filtered_bytes_translation( Language::ES => format!("Bytes filtrados:\n {filtered} ({percentage} del total)"), Language::PL => format!("Przechwycone bajty:\n {filtered} ({percentage} całości)"), Language::DE => format!("Gefilterte Bytes:\n {filtered} ({percentage} der Gesamtzahl)"), - Language::UA => { + Language::UK => { format!("Відфільтровані байти:\n {filtered} ({percentage} від загальної суми)") } Language::ZH => { @@ -361,7 +361,7 @@ pub fn filtered_application_translation(language: Language) -> Text<'static> { Language::ES => "Paquetes filtrados por protocolo de aplicación:", Language::PL => "Przefiltrowane pakiety według protokołu aplikacji:", Language::DE => "Gefilterte Pakete je Anwendungs-Protokoll:", - Language::UA => "Відфільтровані пакети протоколу аплікації/програми:", + Language::UK => "Відфільтровані пакети протоколу аплікації/програми:", Language::ZH => "按应用层协议分类的目标数据包计数:", }) } @@ -380,7 +380,7 @@ pub fn no_favorites_translation(language: Language) -> Text<'static> { Aby dodać połączenie do ulubionych, kliknij na ikonę 'gwiazdki' obok połączenia.", Language::DE => "Im Moment nichts zu zeigen.\n\ Um eine Verbindung zu deinen Favoriten hinzuzufügen, klick das auf das Stern-Symbol neben der Verbindung.", - Language::UA => "Немає, що показати в цей момент.\n\ + Language::UK => "Немає, що показати в цей момент.\n\ Щоб додати підключення до улюблених, натисни на іконку 'зірочки' біля підключення.", Language::ZH => "收藏夹还是空的.\n\ 小贴士: 点击连接右侧的小星星即可收藏到这里哦.", @@ -413,7 +413,7 @@ pub fn error_translation(language: Language, error: &str) -> Text<'static> { "Es ist ein Fehler aufgetreten! \n\n\ {error}" ), - Language::UA => format!( + Language::UK => format!( "Виступила помилка! \n\n\ {error}" ), @@ -432,7 +432,7 @@ pub fn both_translation(language: Language) -> &'static str { Language::ES => "ambos", Language::PL => "oba", Language::DE => "beide", - Language::UA => "обидва", + Language::UK => "обидва", Language::ZH => "皆需", } } @@ -456,7 +456,7 @@ pub fn all_translation(language: Language) -> &'static str { Language::ES => "Todos", Language::PL => "Wszystkie", Language::DE => "Alle", - Language::UA => "Усі", + Language::UK => "Усі", Language::ZH => "所有", } } @@ -469,7 +469,7 @@ pub fn packets_chart_translation(language: Language) -> &'static str { Language::ES => "paquetes por segundo", Language::PL => "pakiety na sekundę", Language::DE => "Pakete pro Sekunde", - Language::UA => "пакети на секунду", + Language::UK => "пакети на секунду", Language::ZH => "数据包", } } @@ -482,7 +482,7 @@ pub fn bytes_chart_translation(language: Language) -> &'static str { Language::ES => "bytes por segundo", Language::PL => "bajty na sekundę", Language::DE => "Bytes pro Sekunde", - Language::UA => "байти на секунду", + Language::UK => "байти на секунду", Language::ZH => "网络流量", } } @@ -495,7 +495,7 @@ pub fn recent_report_translation(language: Language) -> &'static str { Language::ES => "más reciente", Language::PL => "najnowsze", Language::DE => "zuletzt", - Language::UA => "найновіші", + Language::UK => "найновіші", Language::ZH => "按时间", } } @@ -508,7 +508,7 @@ pub fn packets_report_translation(language: Language) -> &'static str { Language::ES => "mayoría de los paquetes", Language::PL => "najwięcej pakietów", Language::DE => "meiste Pakete", - Language::UA => "найбільше пакетів", + Language::UK => "найбільше пакетів", Language::ZH => "按数据包", } } @@ -521,7 +521,7 @@ pub fn bytes_report_translation(language: Language) -> &'static str { Language::ES => "mayoría de los bytes", Language::PL => "najwięcej bajtów", Language::DE => "meiste Bytes", - Language::UA => "найбільше байтів", + Language::UK => "найбільше байтів", Language::ZH => "按流量", } } @@ -534,7 +534,7 @@ pub fn favorite_report_translation(language: Language) -> &'static str { Language::ES => "favoritos", Language::PL => "ulubione", Language::DE => "Favoriten", - Language::UA => "улюблені", + Language::UK => "улюблені", Language::ZH => "收藏夹", } } @@ -547,7 +547,7 @@ pub fn notifications_title_translation(language: Language) -> Text<'static> { Language::ES => "Personaliza tus notificaciones", Language::PL => "Dostosuj powiadomienia", Language::DE => "Personalisier deine Benachrichtigungen", - Language::UA => "Достосуй повідомлення", + Language::UK => "Достосуй повідомлення", Language::ZH => "自定义通知", }) } @@ -560,7 +560,7 @@ pub fn appearance_title_translation(language: Language) -> Text<'static> { Language::ES => "Elige tu tema favorito", Language::PL => "Wybierz swój ulubiony motyw", Language::DE => "Wähl dein Lieblingsdesign", - Language::UA => "Вибери улюблену тему", + Language::UK => "Вибери улюблену тему", Language::ZH => "选择您喜欢的主题", }) } @@ -573,7 +573,7 @@ pub fn languages_title_translation(language: Language) -> Text<'static> { Language::ES => "Selecciona tu idioma", Language::PL => "Wybierz język", Language::DE => "Stell deine Sprache ein", - Language::UA => "Вибери мову", + Language::UK => "Вибери мову", Language::ZH => "选择显示语言", }) } @@ -586,7 +586,7 @@ pub fn active_filters_translation(language: Language) -> &'static str { Language::ES => "Filtros activos:", Language::PL => "Aktywne filtry:", Language::DE => "Aktive Filter:", - Language::UA => "Активні фільтри", + Language::UK => "Активні фільтри:", Language::ZH => "活动的过滤器:", } } @@ -599,7 +599,7 @@ pub fn none_translation(language: Language) -> &'static str { Language::ES => "ninguno", Language::PL => "brak", Language::DE => "keine", - Language::UA => "бракує", + Language::UK => "бракує", Language::ZH => "无", } } @@ -612,7 +612,7 @@ pub fn yeti_night_translation(language: Language) -> &'static str { Language::ES => "Tema oscuro original de Sniffnet", Language::PL => "Oryginalny, ciemny motyw Sniffnet", Language::DE => "Sniffnets urspüngliches, dunkles Design", - Language::UA => "Оригінальний, темний мотив Sniffnet", + Language::UK => "Оригінальний, темний мотив Sniffnet", Language::ZH => "Sniffnet暗黑", } } @@ -625,7 +625,7 @@ pub fn yeti_day_translation(language: Language) -> &'static str { Language::ES => "Tema claro original de Sniffnet", Language::PL => "Oryginalny, jasny motyw Sniffnet", Language::DE => "Sniffnets urspüngliches, helles Design", - Language::UA => "Оригінальний, світлий мотив Sniffnet", + Language::UK => "Оригінальний, світлий мотив Sniffnet", Language::ZH => "Sniffnet浅色", } } @@ -638,7 +638,7 @@ pub fn deep_sea_translation(language: Language) -> &'static str { Language::ES => "Para sumergirse en el tráfico de la red", Language::PL => "Aby zanurzyć się w ruchu sieciowym", Language::DE => "Um in den Netzwerkverkehr einzutauchen", - Language::UA => "Оригінальний, темний мотив Sniffnet", + Language::UK => "Проаналізувати мережевий рух", Language::ZH => "潜入网络活动的海洋", } } @@ -651,7 +651,7 @@ pub fn mon_amour_translation(language: Language) -> &'static str { Language::ES => "Tema encantador hecho para soñadores", Language::PL => "Uroczy motyw stworzony dla marzycieli", Language::DE => "Liebevolles Design für Träumer", - Language::UA => "Прекрасна тема для мрійників", + Language::UK => "Прекрасна тема для мрійників", Language::ZH => "梦想家的主题", } } @@ -664,7 +664,7 @@ pub fn incoming_translation(language: Language) -> &'static str { Language::ES => "Entrante", Language::PL => "Przychodzące", Language::DE => "Ankommend", - Language::UA => "Вхідні", + Language::UK => "Вхідні", Language::ZH => "入站", } } @@ -677,7 +677,7 @@ pub fn outgoing_translation(language: Language) -> &'static str { Language::ES => "Saliente", Language::PL => "Wychodzące", Language::DE => "Ausgehend", - Language::UA => "Вихідні", + Language::UK => "Вихідні", Language::ZH => "出站", } } @@ -689,7 +689,7 @@ pub fn notifications_translation(language: Language) -> &'static str { Language::ES => "Notificaciones", Language::PL => "Powiadomienia", Language::DE => "Benachrichtigungen", - Language::UA => "Повідомлення", + Language::UK => "Повідомлення", Language::ZH => "通知", } } @@ -701,7 +701,7 @@ pub fn style_translation(language: Language) -> &'static str { Language::ES => "Estilo", Language::PL => "Styl", Language::DE => "Stil", - Language::UA => "Стиль", + Language::UK => "Стиль", Language::ZH => "主题", } } @@ -714,7 +714,7 @@ pub fn language_translation(language: Language) -> &'static str { Language::ES => "Idioma", Language::PL => "Język", Language::DE => "Sprache", - Language::UA => "Мова", + Language::UK => "Мова", Language::ZH => "语言", } } @@ -727,7 +727,7 @@ pub fn overview_translation(language: Language) -> &'static str { Language::ES => "Resumen", Language::PL => "Przegląd", Language::DE => "Übersicht", - Language::UA => "Огляд", + Language::UK => "Огляд", Language::ZH => "概览", } } @@ -751,7 +751,7 @@ pub fn packets_threshold_translation(language: Language) -> &'static str { Language::ES => "Notificarme cuando se supere un límite de paquetes", Language::PL => "Powiadom mnie, gdy zostanie przekroczony próg pakietów", Language::DE => "Benachrichtige mich, wenn die Pakete eine Schwelle überschreiten", - Language::UA => "Повідом мене про переліміт пакетів", + Language::UK => "Повідом мене про переліміт пакетів", Language::ZH => "超过设定的数据包数量阈值时通知我", } } @@ -764,7 +764,7 @@ pub fn bytes_threshold_translation(language: Language) -> &'static str { Language::ES => "Notificarme cuando se exceda un límite de bytes", Language::PL => "Powiadom mnie, gdy zostanie przekroczony próg bajtów", Language::DE => "Benachrichtige mich, wenn die Bytes eine Schwelle überschreiten", - Language::UA => "Повідом мене про переліміт байтів", + Language::UK => "Повідом мене про переліміт байтів", Language::ZH => "超过设定的网络流量阈值时通知我", } } @@ -777,7 +777,7 @@ pub fn per_second_translation(language: Language) -> &'static str { Language::ES => "(por segundo)", Language::PL => "(na sekundę)", Language::DE => "(pro Sekunde)", - Language::UA => "(на секунду)", + Language::UK => "(на секунду)", Language::ZH => "(每秒) ", } } @@ -790,7 +790,7 @@ pub fn specify_multiples_translation(language: Language) -> &'static str { Language::ES => "; también puede especificar 'K', 'M' y 'G'", Language::PL => "; możesz również określić 'K', 'M' i 'G'", Language::DE => "; du kannst auch 'K', 'M' und 'G' festlegen", - Language::UA => "; можеш також вибрати 'K', 'M' i 'G'", + Language::UK => "; можеш також вибрати 'K', 'M' i 'G'", Language::ZH => "您可指定 'K', 'M', 'G'", } } @@ -805,7 +805,7 @@ pub fn favorite_notification_translation(language: Language) -> &'static str { Language::DE => { "Benachrichtige mich, wenn neue Daten mit meinen Favoriten ausgetauscht werden" } - Language::UA => "Повідом мене, коли буде обмін даними з моїх улюблених", + Language::UK => "Повідом мене, коли буде обмін даними з моїх улюблених", Language::ZH => "收藏夹内的连接有新活动时通知我", } } @@ -818,7 +818,7 @@ pub fn threshold_translation(language: Language) -> String { Language::ES => "Límite: ".to_string(), Language::PL => "Próg: ".to_string(), Language::DE => "Schwellenwert: ".to_string(), - Language::UA => "Ліміт: ".to_string(), + Language::UK => "Ліміт: ".to_string(), Language::ZH => "阈值: ".to_string(), } } @@ -829,7 +829,7 @@ pub fn volume_translation(language: Language, value: u8) -> String { Language::ES => format!("Volumen: {value:^3}%"), Language::PL => format!("Głośność: {value:^3}%"), Language::DE => format!("Lautstärke: {value:^3}%"), - Language::UA => format!("Гучність: {value:^3}%"), + Language::UK => format!("Гучність: {value:^3}%"), Language::ZH => format!("通知音量: {value:^3}%"), } } @@ -842,7 +842,7 @@ pub fn sound_translation(language: Language) -> &'static str { Language::ES => "Sonido:", Language::PL => "Dźwięk:", Language::DE => "Ton:", - Language::UA => "Звук:", + Language::UK => "Звук:", Language::ZH => "通知音:", } } @@ -855,7 +855,7 @@ pub fn open_report_translation(language: Language) -> &'static str { Language::ES => "Abrir el informe completo", Language::PL => "Otwórz pełny raport", Language::DE => "Kompletten Bericht öffnen", - Language::UA => "Відкрий повний рапорт", + Language::UK => "Відкрий повний рапорт", Language::ZH => "打开完整报告", } } @@ -868,7 +868,7 @@ pub fn bytes_exceeded_translation(language: Language) -> &'static str { Language::ES => "¡Límite de bytes superado!", Language::PL => "Próg bajtów przekroczony!", Language::DE => "Byte-Schwellenwert überschritten!", - Language::UA => "Ліміт байтів перевищено!", + Language::UK => "Ліміт байтів перевищено!", Language::ZH => "达到设定的网络流量阈值!", } } @@ -882,7 +882,7 @@ pub fn bytes_exceeded_value_translation(language: Language, value: &str) -> Stri Language::ES => format!("{trimmed_value} byte/s han sido intercambiado/s"), Language::PL => format!("Wymieniono {trimmed_value} bajtów"), Language::DE => format!("{trimmed_value} Bytes wurden ausgetauscht"), - Language::UA => format!("{trimmed_value} байтів було обміняно"), + Language::UK => format!("{trimmed_value} байтів було обміняно"), Language::ZH => format!("已交换字节 {trimmed_value}"), } } @@ -895,7 +895,7 @@ pub fn packets_exceeded_translation(language: Language) -> &'static str { Language::ES => "¡Se ha superado el límite de paquetes!", Language::PL => "Próg pakietów przekroczony!", Language::DE => "Paket-Schwellenwert überschritten!", - Language::UA => "Ліміт пакетів перевищено!", + Language::UK => "Ліміт пакетів перевищено!", Language::ZH => "达到设定的数据包数量阈值!", } } @@ -911,7 +911,7 @@ pub fn packets_exceeded_value_translation(language: Language, value: u32) -> Str Language::ES => format!("{value} paquete/s han sido intercambiado/s"), Language::PL => format!("Wymieniono {value} pakietów"), Language::DE => format!("{value} Pakete wurden ausgetauscht"), - Language::UA => format!("Обміняно {value} пакетів"), + Language::UK => format!("Обміняно {value} пакетів"), Language::ZH => format!("已交换数据包 {value}"), } } @@ -924,7 +924,7 @@ pub fn favorite_transmitted_translation(language: Language) -> &'static str { Language::ES => "¡Nuevos datos intercambiados de favoritos!", Language::PL => "Nowe dane wymienione z ulubionych!", Language::DE => "Neue Daten mit den Favoriten ausgetauscht!", - Language::UA => "Нові дані обміняно з улюблених!", + Language::UK => "Нові дані обміняно з улюблених!", Language::ZH => "收藏夹内的连接有新活动!", } } @@ -949,7 +949,7 @@ pub fn no_notifications_set_translation(language: Language) -> Text<'static> { Language::DE => "Benachrichtigungen wurden noch nicht aktiviert!\n\n\ Nachdem du sie aktiviert hast, wird diese Seite eine Liste deiner Benachrichtigungen anzeigen\n\n\ Du kannst die Benachrichtigungen in den Einstellungen aktivieren:", - Language::UA => "Повідомлення не активовані!\n\n\ + Language::UK => "Повідомлення не активовані!\n\n\ Після їх активації, на цій сторінці побачиш список своїх повідомлень\n\n\ Можеш вимкнути повідомлення в налаштуваннях:", Language::ZH => "您还没有设定任何通知!\n\n\ @@ -984,7 +984,7 @@ pub fn no_notifications_received_translation(language: Language) -> Text<'static "Im Moment nichts zu sehen...\n\n\ Wenn du eine Benachrichtigung erhälst, wird sie hier angezeigt" } - Language::UA => { + Language::UK => { "Немає що показати в даний момент...\n\n\ Коли отримаєш повідомлення, побачиш його тут" } @@ -1003,7 +1003,7 @@ pub fn only_last_30_translation(language: Language) -> &'static str { Language::ES => "Sólo se muestran las últimas 30 notificaciones", Language::PL => "Wyświetlane jest tylko 30 ostatnich powiadomień", Language::DE => "Nur die letzten 30 Benachrichtigungen werden angezeigt", - Language::UA => "Можеш побачити лише 30 останніх повідомлень", + Language::UK => "Можеш побачити лише 30 останніх повідомлень", Language::ZH => "仅显示最近 30 条通知", } }