From 40e5b062852daae357c50519b90b62f9a2ffa9f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=E1=BB=8Bnh=20Duy=20H=C6=B0ng?= <57101685+HUNG-rushb@users.noreply.github.com> Date: Fri, 2 Aug 2024 18:15:17 +0700 Subject: [PATCH 1/6] [I18N: VN] Add Vietnamese for all 3 versions --- src/translations/translations.rs | 73 +++++++++++++++++++++++++++++- src/translations/translations_2.rs | 23 ++++++++++ src/translations/translations_3.rs | 21 +++++++++ src/translations/types/language.rs | 6 +++ 4 files changed, 122 insertions(+), 1 deletion(-) diff --git a/src/translations/translations.rs b/src/translations/translations.rs index 756a6a23..23e46b38 100644 --- a/src/translations/translations.rs +++ b/src/translations/translations.rs @@ -26,6 +26,7 @@ pub fn choose_adapters_translation(language: Language) -> Text<'static, StyleTyp Language::FI => "Valitse tarkasteltava verkkosovitin", Language::JA => "使用するネットワーク アダプターを選択してください", Language::UZ => "Tekshirish uchun tarmoq adapterini tanlang", + Language::VN => "Hãy chọn network adapter để quan sát", }) } @@ -74,6 +75,7 @@ pub fn select_filters_translation(language: Language) -> Text<'static, StyleType Language::FI => "Valitse suodattimet verkkoliikenteelle", Language::JA => "トラフィックに適用するフィルターを選択してください", Language::UZ => "Tarmoq trafigiga qo'llaniladigan filtrlarni tanlang", + Language::VN => "Hãy chọn bộ lọc cho lưu lượng mạng", }) } @@ -95,6 +97,7 @@ pub fn start_translation(language: Language) -> &'static str { Language::FI => "Aloita!", Language::JA => "開始!", Language::UZ => "Boshlash!", + Language::VN => "Bắt đầu!", } } @@ -117,6 +120,7 @@ pub fn address_translation(language: Language) -> &'static str { Language::FI => "Osoite", Language::JA => "アドレス", Language::UZ => "Manzil", + Language::VN => "Địa chỉ", } } @@ -141,6 +145,7 @@ pub fn addresses_translation(language: Language) -> &'static str { Language::FI => "Osoitteet", Language::JA => "アドレス", Language::UZ => "Manzillar", + Language::VN => "Danh sách địa chỉ", } } @@ -165,6 +170,7 @@ pub fn ip_version_translation(language: Language) -> &'static str { Language::FI => "IP-versio", Language::JA => "IP バージョン", Language::UZ => "IP versiyasi", + Language::VN => "Phiên bản IP", } } @@ -208,6 +214,7 @@ pub fn protocol_translation(language: Language) -> &'static str { Language::FI => "Protokolla", Language::JA => "プロトコル", Language::UZ => "Protokoli", + Language::VN => "Phương thức", } } @@ -232,6 +239,7 @@ pub fn traffic_rate_translation(language: Language) -> Text<'static, StyleType> Language::FI => "Liikennemäärä", Language::JA => "トラフィック レート", Language::UZ => "Trafik tezligi", + Language::VN => "Lưu lượng truy cập", }) } @@ -278,6 +286,7 @@ pub fn settings_translation(language: Language) -> &'static str { Language::FI => "Asetukset", Language::JA => "設定", Language::UZ => "Sozlamalar", + Language::VN => "Cài đặt", } } @@ -301,6 +310,7 @@ pub fn yes_translation(language: Language) -> Text<'static, StyleType> { Language::FI => "Kyllä", Language::JA => "はい", Language::UZ => "Ha", + Language::VN => "Chấp nhận", }) } @@ -325,6 +335,7 @@ pub fn ask_quit_translation(language: Language) -> Text<'static, StyleType> { Language::FI => "Haluatko varmasti lopettaa analyysin?", Language::JA => "分析を終了しますか?", Language::UZ => "Tahlildan chiqishga ishonchingiz komilmi?", + Language::VN => "Bạn có chắc là muốn thoát phiên phân tích này?", }) } @@ -349,6 +360,7 @@ pub fn quit_analysis_translation(language: Language) -> &'static str { Language::FI => "Lopeta analyysi", Language::JA => "分析の終了", Language::UZ => "Tahlildan chiqish", + Language::VN => "Thoát phiên phân tích", } } @@ -373,6 +385,7 @@ pub fn ask_clear_all_translation(language: Language) -> Text<'static, StyleType> Language::FI => "Haluatko varmasti tyhjentää ilmoitukset?", Language::JA => "すべての通知を削除します。よろしいですか?", Language::UZ => "Haqiqatan ham bildirishnomalarni tozalamoqchimisiz?", + Language::VN => "Bạn có chắc là muốn xóa các thông báo?", }) } @@ -397,6 +410,7 @@ pub fn clear_all_translation(language: Language) -> &'static str { Language::FI => "Tyhjennä kaikki", Language::JA => "すべて削除", Language::UZ => "Barchasini tozalash", + Language::VN => "Xóa tất cả", } } @@ -421,6 +435,7 @@ pub fn hide_translation(language: Language) -> &'static str { Language::FI => "Piilota", Language::JA => "隠す", Language::UZ => "Yashirish", + Language::VN => "Ẩn", } } @@ -445,6 +460,7 @@ pub fn network_adapter_translation(language: Language) -> &'static str { Language::FI => "Verkkosovitin", Language::JA => "ネットワーク アダプター", Language::UZ => "Tarmoq adapteri", + Language::VN => "Network adapter", } } @@ -508,6 +524,9 @@ pub fn no_addresses_translation(language: Language, adapter: &str) -> Text<'stat Language::UZ => format!("Trafik kuzatilmaydi, chunki siz tanlagan adapterda faol manzillar yo'q...\n\n\ {network_adapter_translation}: {adapter}\n\n\ Internetga ulanganingizga ishonchingiz komil bo'lsa, boshqa adapterni tanlashga harakat qiling"), + Language::VN => format!("Không thể quan sát lưu lượng nào vì adapter mà bạn chọn không địa chỉ hoạt động...\n\n\ + {network_adapter_translation}: {adapter}\n\n\ + Nếu bạn đã chắc chắn kết nối với internet, hãy thử chọn network adapter khác."), }) } @@ -572,6 +591,9 @@ pub fn waiting_translation(language: Language, adapter: &str) -> Text<'static, S "Hali hech qanday trafik aniqlanmadi. Tarmoq paketlari kutilmoqda...\n\n\ {network_adapter_translation}: {adapter}\n\n\ Internetga ulanganingizga va to'g'ri adapterni tanlaganingizga ishonchingiz komilmi?"), + Language::VN => format!("Chưa có lưu lượng để quan sát. Đang đợi các gói tin...\n\n\ + {network_adapter_translation}: {adapter}\n\n\ + Bạn có chắc là đã kết nối với internet và đã chọn đúng network adapter?"), }) } @@ -635,6 +657,9 @@ pub fn some_observed_translation(language: Language, observed: u128) -> Text<'st "Jami ushlangan paketlar: {observed}\n\n\ Filtrlangan paketlar: 0\n\n\ Tarmoq paketlari ushlandi, lekin ularning hech biri belgilangan filtrlarga mos kelmadi..."), + Language::VN => format!("Tổng số gói tin bị chặn: {observed}\n\n\ + Các gói tin đã lọc: 0\n\n\ + Một số gói đã bị chặn, nhưng vẫn chưa có gói tin nào được bắt theo bộ lọc bạn đã chọn..."), }) } @@ -659,6 +684,7 @@ pub fn filtered_packets_translation(language: Language) -> &'static str { Language::FI => "Suodatettuja paketteja", Language::JA => "フィルタリングされたパケット", Language::UZ => "Filtrlangan paketlar", + Language::VN => "Các gói tin đã được lọc", } } @@ -682,6 +708,7 @@ pub fn filtered_bytes_translation(language: Language) -> &'static str { Language::FI => "Suodatettuja tavuja", Language::JA => "フィルタリングされたバイト", Language::UZ => "Filtrlangan baytlar", + Language::VN => "Các bytes đã được lọc", } } @@ -720,6 +747,7 @@ pub fn of_total_translation(language: Language, percentage: &str) -> String { Language::FI => format!("({percentage} kokonaismäärästä)"), Language::JA => format!("(トータル: {percentage} )"), Language::UZ => format!("(Jami: {percentage} )"), + Language::VN => format!("({percentage} trên tổng cộng)"), } } @@ -862,6 +890,10 @@ pub fn error_translation(language: Language, error: &str) -> Text<'static, Style "Xatolik yuz berdi!\n\n\ {error}" ), + Language::VN => format!( + "Đã có lỗi xảy ra! \n\n\ + {error}" + ), }) } @@ -946,6 +978,7 @@ pub fn packets_translation(language: Language) -> &'static str { Language::FI => "paketit", Language::JA => "パケット", Language::UZ => "paketlar", + Language::VN => "các gói tin", } } @@ -970,12 +1003,13 @@ pub fn packets_chart_translation(language: Language) -> &'static str { Language::FI => "pakettia sekunnissa", Language::JA => "1 秒あたりのパケット数", Language::UZ => "paket soniyasiga", + Language::VN => "gói tin trên giây", } } pub fn bytes_translation(language: Language) -> &'static str { match language { - Language::EN | Language::ES | Language::PT | Language::EL | Language::SV => "bytes", + Language::EN | Language::ES | Language::PT | Language::EL | Language::SV | Language::VN => "bytes", Language::DE => "Bytes", Language::IT => "byte", Language::FR => "octets", @@ -1012,6 +1046,7 @@ pub fn bytes_chart_translation(language: Language) -> &'static str { Language::FI => "tavua sekunnissa", Language::JA => "1 秒あたりのバイト量", Language::UZ => "bayt soniyasiga", + Language::VN => "byte trên giây", } } @@ -1129,6 +1164,7 @@ pub fn notifications_title_translation(language: Language) -> Text<'static, Styl Language::FI => "Muokkaa ilmoituksiasi", Language::JA => "通知のカスタマイズ", Language::UZ => "Bildirishnomalaringizni sozlang", + Language::VN => "Tùy chỉnh thông báo của bạn", }) } @@ -1153,6 +1189,7 @@ pub fn appearance_title_translation(language: Language) -> Text<'static, StyleTy Language::FI => "Valitse suosikkiteemasi", Language::JA => "テーマを選択してください", Language::UZ => "Sevimli mavzuingizni tanlang", + Language::VN => "Chọn chủ đề bạn muốn", }) } @@ -1177,6 +1214,7 @@ pub fn active_filters_translation(language: Language) -> &'static str { Language::FI => "Aktiiviset suodattimet", Language::JA => "適用されているフィルター", Language::UZ => "Faol filtrlar", + Language::VN => "Bộ lọc đang hoạt động", } } @@ -1201,6 +1239,7 @@ pub fn none_translation(language: Language) -> &'static str { Language::FI => "ei mitään", Language::JA => "なし", Language::UZ => "hech biri", + Language::VN => "không có", } } @@ -1225,6 +1264,7 @@ pub fn yeti_night_translation(language: Language) -> &'static str { Language::FI => "Sniffnetin alkuperäinen tumma teema", Language::JA => "Sniffnet のオリジナル テーマ", Language::UZ => "Sniffnet-ning asl qora mavzusi", + Language::VN => "Chủ đề tối của Sniffnet", } } @@ -1248,6 +1288,7 @@ pub fn yeti_day_translation(language: Language) -> &'static str { Language::FI => "Sniffnetin alkuperäinen vaalea teema", Language::JA => "Sniffnet のオリジナル ライト テーマ", Language::UZ => "Sniffnet-ning asl oq mavzusi", + Language::VN => "Chủ đề sáng của Sniffnet", } } @@ -1272,6 +1313,7 @@ pub fn deep_sea_translation(language: Language) -> &'static str { Language::FI => "Sukeltaaksesi verkkoliikenteeseen", Language::JA => "ネットワーク トラフィックにダイブ", Language::UZ => "Tarmoq trafigiga qo'shilish uchun", + Language::VN => "Đắm chìm vào lưu lượng mạng", } } @@ -1296,6 +1338,7 @@ pub fn mon_amour_translation(language: Language) -> &'static str { Language::FI => "Ihana teema unelmoijille", Language::JA => "ドリーマーのためのテーマ", Language::UZ => "Xayolparastlar uchun chiroyli mavzu", + Language::VN => "Chủ đề mộng mơ cho những kẻ mơ mộng", } } @@ -1320,6 +1363,7 @@ pub fn incoming_translation(language: Language) -> &'static str { Language::FI => "Saapuva", Language::JA => "受信", Language::UZ => "Kiruvchi", + Language::VN => "Đang tới", } } @@ -1344,6 +1388,7 @@ pub fn outgoing_translation(language: Language) -> &'static str { Language::FI => "Lähtevä", Language::JA => "送信", Language::UZ => "Chiquvchi", + Language::VN => "Đang hướng ra ngoài", } } @@ -1366,6 +1411,7 @@ pub fn notifications_translation(language: Language) -> &'static str { Language::SV => "Notifikationer", Language::FI => "Ilmoitukset", Language::UZ => "Bildirishnomalar", + Language::VN => "Thông báo", } } @@ -1385,6 +1431,7 @@ pub fn style_translation(language: Language) -> &'static str { Language::FI => "Tyyli", Language::JA => "スタイル", Language::UZ => "Uslub", + Language::VN => "Chủ đề", } } @@ -1409,6 +1456,7 @@ pub fn language_translation(language: Language) -> &'static str { Language::FI => "Kieli", Language::JA => "表示言語", Language::UZ => "Til", + Language::VN => "Ngôn ngữ", } } @@ -1433,6 +1481,7 @@ pub fn overview_translation(language: Language) -> &'static str { Language::FI => "Yleiskatsaus", Language::JA => "概要", Language::UZ => "Ko'rib chiqish", + Language::VN => "Tổng quan", } } @@ -1457,6 +1506,7 @@ pub fn packets_threshold_translation(language: Language) -> &'static str { Language::FI => "Ilmoita minulle, kun pakettiraja on ylittynyt", Language::JA => "パケット数の閾値を超過した場合に通知する", Language::UZ => "Paket chegarasi oshib ketganda xabar bering", + Language::VN => "Báo cho tôi biết khi vượt quá ngưỡng gói tin", } } @@ -1481,6 +1531,7 @@ pub fn bytes_threshold_translation(language: Language) -> &'static str { Language::FI => "Ilmoita minulle, kun tavuraja on ylittynyt", Language::JA => "バイト量の閾値を超過した場合に通知する", Language::UZ => "Bayt chegarasi oshib ketganda menga xabar bering", + Language::VN => "Báo cho tôi biết khi vượt quá ngưỡng bytes", } } @@ -1503,6 +1554,7 @@ pub fn per_second_translation(language: Language) -> &'static str { Language::SV => "(per sekund)", Language::FI => "(sekunnissa)", Language::UZ => "(soniyasiga)", + Language::VN => "(trên giây)", } } @@ -1527,6 +1579,7 @@ pub fn specify_multiples_translation(language: Language) -> &'static str { Language::FI => "voit myös määrittää 'K', 'M' tai 'G'", Language::JA => "'K', 'M', 'G' が選択可能です", Language::UZ => "'K', 'M' va 'G' ni ham belgilashingiz mumkin", + Language::VN => "bạn cũng có thể chọn 'K', 'M' and 'G'", } } @@ -1553,6 +1606,7 @@ pub fn favorite_notification_translation(language: Language) -> &'static str { Language::FI => "Ilmoita minulle, kun suosikkini vaihtavat uusia tietoja", Language::JA => "お気に入りに指定したホストに関してデータ送受信があった場合に通知する", Language::UZ => "Sevimlilar ro'yhatidan yangi ma'lumotlar almashganda xabar bering", + Language::VN => "Báo cho tôi biết khi dữ liệu mới được trao đổi từ mục yêu thích của tôi", } } @@ -1577,6 +1631,7 @@ pub fn threshold_translation(language: Language) -> &'static str { Language::FI => "Raja", Language::JA => "閾値", Language::UZ => "Eshik", + Language::VN => "Ngưỡng", } } @@ -1597,6 +1652,7 @@ pub fn volume_translation(language: Language) -> &'static str { Language::SV => "Volym", Language::FI => "Äänenvoimakkuus", Language::UZ => "Ovoz balandligi", + Language::VN => "Âm lượng", } } @@ -1619,6 +1675,7 @@ pub fn sound_translation(language: Language) -> &'static str { Language::SV => "Ljud", Language::FI => "Ääni", Language::UZ => "Ovoz", + Language::VN => "Âm thanh", } } @@ -1643,6 +1700,7 @@ pub fn bytes_exceeded_translation(language: Language) -> &'static str { Language::FI => "Tavuraja ylitetty!", Language::JA => "バイト量の閾値を調査しました!", Language::UZ => "Bayt chegarasidan oshib ketdi!", + Language::VN => "Bytes đã vượt ngưỡng!", } } @@ -1667,6 +1725,7 @@ pub fn bytes_exceeded_value_translation(language: Language, value: &str) -> Stri Language::FI => format!("{value} on vaihdettu"), Language::JA => format!("{value} の送受信が発生しました"), Language::UZ => format!("{value} ma'lumot almashinuvi"), + Language::VN => format!("{value} đã được trao đổi"), } } @@ -1691,6 +1750,7 @@ pub fn packets_exceeded_translation(language: Language) -> &'static str { Language::FI => "Pakettiraja ylitetty!", Language::JA => "パケット数のしきい値を超過しました!", Language::UZ => "Paket chegarasidan oshib ketdi!", + Language::VN => "Gói tin đã vượt ngưỡng!", } } @@ -1739,6 +1799,8 @@ pub fn packets_exceeded_value_translation(language: Language, value: u32) -> Str }, Language::JA => format!("{value} パケットの送受信が発生しました"), Language::UZ => format!("{value} paket uzatildi"), + Language::VN => format!("{value} gói tin đã được trao đổi"), + } } @@ -1763,6 +1825,7 @@ pub fn favorite_transmitted_translation(language: Language) -> &'static str { Language::FI => "Uusia tietoja vaihdettu suosikeista!", Language::JA => "お気に入りのホストで新しいデータ送受信が発生しました!", Language::UZ => "Sevimli ulanishlar ro'yhatida yangi ma'lumotlar almashinuvi!", + Language::VN => "Mục ưa thích vừa có trao đổi!", } } @@ -1825,6 +1888,9 @@ pub fn no_notifications_set_translation(language: Language) -> Text<'static, Sty Language::UZ => "Siz hali bildirishnomalarni yoqmagansiz!\n\n\ Ularni faollashtirgandan so'ng, bu sahifada bildirishnomalaringiz jurnali ko'rsatiladi\n\n\ Sozlamalardan bildirishnomalarni yoqishingiz mumkin:", + Language::VN => "Bạn chưa bật tính năng thông báo!\n\n\ + au khi bật, trang này sẽ hiển thị thông báo\n\n\ + Hãy bật thông báo trong phần cài đặt:", }) } @@ -1906,6 +1972,10 @@ pub fn no_notifications_received_translation(language: Language) -> Text<'static "Ayni paytda ko'rsatiladigan hech narsa yo'q...\n\n\ Bildirishnomalar kelganda, ular shu yerda ko'rsatiladi" } + Language::VN => { + "Hiện tại không có gì để quan sát...\n\n\ + Khi có thông báo, chúng sẽ hiển thị ở đây" + } }) } @@ -1930,5 +2000,6 @@ pub fn only_last_30_translation(language: Language) -> &'static str { Language::FI => "Vain viimeiset 30 ilmoitusta näytetään", Language::JA => "最新の通知 30 件のみ表示されます", Language::UZ => "Faqat oxirgi 30 ta bildirishnoma ko'rsatiladi", + Language::VN => "Chỉ có 30 thông báo gần nhất được hiển thị", } } diff --git a/src/translations/translations_2.rs b/src/translations/translations_2.rs index 2f40a478..f2cefbaa 100644 --- a/src/translations/translations_2.rs +++ b/src/translations/translations_2.rs @@ -23,6 +23,7 @@ pub fn new_version_available_translation(language: Language) -> &'static str { Language::JA => "新しいバージョンが利用可能になりました!", Language::UZ => "Yangi versiya mavjud!", Language::PT => "Uma nova versão está disponível!", + Language::VN => "Phiên bản mới đã sẵn sàng!", } } @@ -46,6 +47,7 @@ pub fn inspect_translation(language: Language) -> &'static str { Language::JA => "検査", Language::UZ => "Tekshirish", Language::PT => "Inspecionar", + Language::VN => "Quan sát", _ => "Inspect", } } @@ -70,6 +72,7 @@ pub fn connection_details_translation(language: Language) -> &'static str { Language::JA => "接続の詳細", Language::UZ => "Ulanish tafsilotlari", Language::PT => "Detalhes da conexão", + Language::VN => "Thông tin kết nối", _ => "Connection details", } } @@ -94,6 +97,7 @@ pub fn dropped_packets_translation(language: Language) -> &'static str { Language::JA => "ドロップしたパケット", Language::UZ => "Yig'ilgan paketlar", Language::PT => "Pacotes perdidos", + Language::VN => "Gói tin đã bị mất", _ => "Dropped packets", } } @@ -118,6 +122,7 @@ pub fn data_representation_translation(language: Language) -> &'static str { Language::JA => "データ表示", Language::UZ => "Ma'lumotlarni taqdim etish", Language::PT => "Representação dos dados", + Language::VN => "Miêu tả dữ liệu", _ => "Data representation", } } @@ -142,6 +147,7 @@ pub fn host_translation(language: Language) -> &'static str { Language::JA => "ネットワーク ホスト", Language::UZ => "Tarmoq serveri", Language::PT => "Host da rede", + Language::VN => "Máy chủ", _ => "Network host", } } @@ -166,6 +172,7 @@ pub fn only_top_30_items_translation(language: Language) -> &'static str { Language::JA => "上位 30 件のアイテムのみが表示されます", Language::UZ => "Bu erda faqat dastlabki 30 ta buyumlar ko'rsatiladi", Language::PT => "Apenas os 30 melhores unid são expostos aqui", + Language::VN => "Chỉ có 30 mục gần nhất được hiển thị ở đây", _ => "Only the top 30 items are displayed here", } } @@ -213,6 +220,7 @@ pub fn local_translation(language: Language) -> &'static str { Language::JA => "ローカル ネットワーク", Language::UZ => "Mahalliy tarmoq", Language::PT => "Rede local", + Language::VN => "Mạng nội bộ", _ => "Local network", } } @@ -237,6 +245,7 @@ pub fn unknown_translation(language: Language) -> &'static str { Language::JA => "不明なロケーション", Language::UZ => "Noma'lum joylashuv", Language::PT => "Localização desconhecida", + Language::VN => "Không rõ địa điểm", _ => "Unknown location", } } @@ -261,6 +270,7 @@ pub fn your_network_adapter_translation(language: Language) -> &'static str { Language::JA => "自身のネットワーク アダプター", Language::UZ => "Sizning tarmoq adapteringiz", Language::PT => "Seu adaptador de rede", + Language::VN => "Network adapter của bạn", _ => "Your network adapter", } } @@ -285,6 +295,7 @@ pub fn socket_address_translation(language: Language) -> &'static str { Language::JA => "ソケット アドレス", Language::UZ => "Soket manzili", Language::PT => "Endereço da socket", + Language::VN => "Địa chỉ socket", _ => "Socket address", } } @@ -309,6 +320,7 @@ pub fn mac_address_translation(language: Language) -> &'static str { Language::JA => "MAC アドレス", Language::UZ => "MAC manzili", Language::PT => "Endereço MAC", + Language::VN => "Địa chỉ MAC", _ => "MAC address", } } @@ -333,6 +345,7 @@ pub fn source_translation(language: Language) -> &'static str { Language::JA => "送信元", Language::UZ => "Manba", Language::PT => "Fonte", + Language::VN => "Nguồn", _ => "Source", } } @@ -355,6 +368,7 @@ pub fn destination_translation(language: Language) -> &'static str { Language::FR => "Destination", Language::JA => "送信先", Language::UZ => "Qabul qiluvchi", + Language::VN => "Đích", _ => "Destination", } } @@ -378,6 +392,7 @@ pub fn fqdn_translation(language: Language) -> &'static str { Language::FR => "Nom de domaine complètement qualifié", Language::UZ => "To'liq domen nomi", Language::PT => "Nome de domínio completo", + Language::VN => "Tên miền đầy đủ", _ => "Fully qualified domain name", } } @@ -402,6 +417,7 @@ pub fn administrative_entity_translation(language: Language) -> &'static str { Language::JA => "AS 名", Language::UZ => "Avtonom tizim nomi", Language::PT => "Entidade administrativa", + Language::VN => "Tên Autonomous System", _ => "Autonomous System name", } } @@ -426,6 +442,7 @@ pub fn transmitted_data_translation(language: Language) -> &'static str { Language::JA => "転送データ", Language::UZ => "Uzatilgan ma'lumotlar", Language::PT => "Dados transmitidos", + Language::VN => "Dữ liệu được truyền", _ => "Transmitted data", } } @@ -449,6 +466,7 @@ pub fn country_translation(language: Language) -> &'static str { Language::FR => "Pays", Language::JA => "国", Language::UZ => "Davlat", + Language::VN => "Quốc gia", _ => "Country", } } @@ -473,6 +491,7 @@ pub fn domain_name_translation(language: Language) -> &'static str { Language::JA => "ドメイン名", Language::UZ => "Domen nomi", Language::PT => "Nome do domínio", + Language::VN => "Tên miền", _ => "Domain name", } } @@ -497,6 +516,7 @@ pub fn only_show_favorites_translation(language: Language) -> &'static str { Language::JA => "お気に入りのみを表示する", Language::UZ => "Faqat sevimlilarni ko'rsatish", Language::PT => "Apenas mostrar os favoritos", + Language::VN => "Chỉ hiển thị mục ưa thích", _ => "Only show favorites", } } @@ -545,6 +565,7 @@ pub fn no_search_results_translation(language: Language) -> &'static str { Language::JA => "指定されたフィルター条件で表示できる結果はありません", Language::UZ => "Belgilangan qidiruv filtrlari bo'yicha hech qanday natija mavjud emas", Language::PT => "Nenhum resultado disponível de acordo com os filtros selecionados", + Language::VN => "Không có kết quả nào theo các bộ lọc được chỉ định", _ => "No result available according to the specified search filters", } } @@ -574,6 +595,7 @@ pub fn showing_results_translation( Language::JA => format!("{total} 件中の {start}-{end} 件を表示"), Language::UZ => format!("Jami {total} natijadan {start}-{end} ko'rsatilyapti"), Language::PT => format!("Mostrando {start}-{end} de {total} resultados totais"), + Language::VN => format!("Đang hiển thị {start}-{end} của {total} tổng số kết quả"), _ => format!("Showing {start}-{end} of {total} total results"), } } @@ -599,6 +621,7 @@ pub fn color_gradients_translation(language: Language) -> &'static str { Language::JA => "グラデーションを適用する", Language::UZ => "Rang gradientlarini qo'llang", Language::PT => "Aplicar gradientes de cor", + Language::VN => "Áp dụng color gradients", _ => "Apply color gradients", } } diff --git a/src/translations/translations_3.rs b/src/translations/translations_3.rs index 3bc0c080..2ff05a33 100644 --- a/src/translations/translations_3.rs +++ b/src/translations/translations_3.rs @@ -19,6 +19,7 @@ pub fn general_translation(language: Language) -> &'static str { Language::JA => "一般", Language::UZ => "Asosiy", Language::SV => "Allmänt", + Language::VN => "Tổng quan", _ => "General", } } @@ -37,6 +38,7 @@ pub fn zoom_translation(language: Language) -> &'static str { Language::RU => "Масштаб интерфейса", Language::JA => "ズーム", Language::UZ => "Kattalashtirish", + Language::VN => "Phóng to", _ => "Zoom", } } @@ -55,6 +57,7 @@ pub fn mmdb_files_translation(language: Language) -> &'static str { Language::JA => "データベース ファイル", Language::UZ => "Ma'lumotlar bazasi fayllari", Language::SV => "Databasfiler", + Language::VN => "Tập tin cơ sở dữ liệu", _ => "Database files", } } @@ -73,6 +76,7 @@ pub fn params_not_editable_translation(language: Language) -> &'static str { Language::JA => "以下のパラメーターは分析中は変更できません", Language::UZ => "Tahlil vaqtida quydagi parametrlarni o'zgartirib bo'lmaydi", Language::SV => "Följande parametrar kan inte ändras under analysen", + Language::VN => "Các tham số sau không thể bị thay đổi khi đang phân tích", _ => "The following parameters can't be modified during the analysis", } } @@ -91,6 +95,7 @@ pub fn custom_style_translation(language: Language) -> &'static str { Language::JA => "カスタム スタイル", Language::UZ => "Moslashtirilgan uslub", Language::SV => "Anpassad stil", + Language::VN => "Tùy chỉnh chủ đề", _ => "Custom style", } } @@ -107,6 +112,7 @@ pub fn copy_translation(language: Language) -> &'static str { Language::JA => "コピー", Language::UZ => "Nusxalash", Language::SV => "Kopia", + Language::VN => "Sao chép", _ => "Copy", } } @@ -125,6 +131,7 @@ pub fn port_translation(language: Language) -> &'static str { Language::IT => "Porta", Language::RU => "Порт", Language::JA => "ポート", + Language::VN => "Cổng", _ => "Port", } } @@ -143,6 +150,7 @@ pub fn invalid_filters_translation(language: Language) -> &'static str { Language::JA => "無効なフィルター", Language::UZ => "Noto'g'ri filterlar", Language::SV => "Ogiltiga filter", + Language::VN => "Bộ lọc không khả dụng", _ => "Invalid filters", } } @@ -160,6 +168,7 @@ pub fn messages_translation(language: Language) -> &'static str { Language::JA => "メッセージ", Language::UZ => "Xabarlar", Language::SV => "Meddelanden", + Language::VN => "Tin nhắn", _ => "Messages", } } @@ -178,6 +187,7 @@ pub fn link_type_translation(language: Language) -> &'static str { Language::JA => "リンク タイプ", Language::UZ => "Havola turi", Language::SV => "Länktyp", + Language::VN => "Loại liên kết", _ => "Link type", } } @@ -199,6 +209,7 @@ pub fn unsupported_link_type_translation( Language::JA => "このアダプターのリンク タイプは Sniffnet ではまだサポートされていません...", Language::UZ => "Ushbu adapter bilan bog'langan havola turi hozircha Sniffnet tomonidan qo'llab quvvatlanmaydi...", Language::SV => "Länktypen associerad med denna adapter stöds inte av Sniffnet än...", + Language::VN => "Loại liên kết được gắn với adapter này chưa được Sniffnet hỗ trợ...", _ => "The link type associated with this adapter is not supported by Sniffnet yet...", }; @@ -222,6 +233,7 @@ pub fn style_from_file_translation(language: Language) -> &'static str { Language::JA => "ファイルからスタイルを選択してください", Language::UZ => "Fayldan uslubni tanlang", Language::SV => "Välj stil från en fil", + Language::VN => "Chọn chủ đề từ file của bạn", _ => "Select style from a file", } } @@ -240,6 +252,7 @@ pub fn database_from_file_translation(language: Language) -> &'static str { Language::JA => "データベース ファイルを選択してください", Language::UZ => "Ma'lumotlar bazasi faylini tanlang", Language::SV => "Välj databasfil", + Language::VN => "Chọn tập tin cơ sở dữ liệu", _ => "Select database file", } } @@ -258,6 +271,7 @@ pub fn filter_by_host_translation(language: Language) -> &'static str { Language::JA => "ネットワーク ホストでフィルター", Language::UZ => "Tarmoq host bo'yicha filterlash", Language::SV => "Filtrera efter nätverksvärd", + Language::VN => "Lọc bởi máy chủ mạng", _ => "Filter by network host", } } @@ -273,6 +287,7 @@ pub fn service_translation(language: Language) -> &'static str { Language::RO => "Serviciu", Language::JA => "サービス", Language::UZ => "Xizmat", + Language::VN => "Dịch vụ", _ => "Service", } } @@ -290,6 +305,7 @@ pub fn export_capture_translation(language: Language) -> &'static str { Language::JA => "キャプチャ ファイルをエクスポート", Language::UZ => "Cap faylni export qilish", Language::SV => "Exportera inspelningsfil", + Language::VN => "Xuất tập tin đã bắt", _ => "Export capture file", } } @@ -306,6 +322,7 @@ pub fn directory_translation(language: Language) -> &'static str { Language::RU => "Директория", Language::RO => "Director", Language::JA => "ディレクトリー", + Language::VN => "Thư mục", _ => "Directory", } } @@ -323,6 +340,7 @@ pub fn select_directory_translation(language: Language) -> &'static str { Language::JA => "宛先のディレクトリーを選択する", Language::UZ => "Manzil katalogni tanlang", Language::SV => "Välj målkatalog", + Language::VN => "Chọn thư mục đích đến", _ => "Select destination directory", } } @@ -340,6 +358,7 @@ pub fn file_name_translation(language: Language) -> &'static str { Language::JA => "ファイル ネーム", Language::UZ => "Fayl nomi", Language::SV => "Filnamn", + Language::VN => "Tên file", _ => "File name", } } @@ -357,6 +376,7 @@ pub fn thumbnail_mode_translation(language: Language) -> &'static str { Language::JA => "サムネイル モード", Language::UZ => "Eskiz rejim", Language::SV => "Miniatyrläge", + Language::VN => "Chế độ thu nhỏ", _ => "Thumbnail mode", } } @@ -374,6 +394,7 @@ pub fn learn_more_translation(language: Language) -> &'static str { Language::JA => "もっと知りたいですか?", Language::UZ => "Ko'proq bilishni hohlaysizmi?", Language::SV => "Vill du veta mer?", + Language::VN => "Bạn có muốn tìm hiểu thêm?", _ => "Do you want to learn more?", } } diff --git a/src/translations/types/language.rs b/src/translations/types/language.rs index 0b7b165d..d3a048cf 100644 --- a/src/translations/types/language.rs +++ b/src/translations/types/language.rs @@ -50,6 +50,8 @@ pub enum Language { JA, /// Uzbek UZ, + /// Vietnam + VN, } impl Default for Language { @@ -78,6 +80,7 @@ impl Language { Language::UK, Language::UZ, Language::ZH, + Language::VN, ]; pub fn get_flag(self) -> Svg { @@ -101,6 +104,7 @@ impl Language { Language::FI => FI, Language::JA => JP, Language::UZ => UZ, + Language::VN => VN, }))) .width(FLAGS_WIDTH_BIG) } @@ -118,6 +122,7 @@ impl Language { | Language::JA | Language::UZ | Language::SV + | Language::VN ) } } @@ -144,6 +149,7 @@ impl fmt::Display for Language { Language::FI => "Suomi", Language::JA => "日本語", Language::UZ => "O'zbekcha", + Language::VN => "Tiếng Việt", }; write!(f, "{self:?} - {lang_str}") } From 9bd0f6b1ab08918d61f06937f1a2386cc374ba99 Mon Sep 17 00:00:00 2001 From: Giuliano Bellini s294739 Date: Tue, 13 Aug 2024 11:00:08 +0200 Subject: [PATCH 2/6] fixed build errors and added missing vietnamese characters --- resources/fonts/full/subset_characters.txt | 42 ++++++++++++++++++ .../subset/sarasa-mono-sc-bold.subset.ttf | Bin 188524 -> 191228 bytes .../subset/sarasa-mono-sc-regular.subset.ttf | Bin 190608 -> 193336 bytes src/translations/translations.rs | 5 ++- src/translations/types/language.rs | 6 +-- 5 files changed, 48 insertions(+), 5 deletions(-) diff --git a/resources/fonts/full/subset_characters.txt b/resources/fonts/full/subset_characters.txt index 48876802..18e59cf7 100644 --- a/resources/fonts/full/subset_characters.txt +++ b/resources/fonts/full/subset_characters.txt @@ -94,6 +94,8 @@ z } ¡ ¿ +Á +Â Ä Ê Î @@ -125,6 +127,8 @@ z ă ą ć +Đ +đ ę ğ İ @@ -134,9 +138,12 @@ z ś Ş ş +ũ Ź ź ż +ơ +ư Ș ș Ț @@ -291,6 +298,41 @@ z ی ۰ ۳ +ạ +ả +ấ +ầ +Ẩ +ẫ +ậ +ắ +ẵ +ặ +ẻ +ẽ +ế +ề +ể +ệ +ỉ +ị +ọ +ỏ +ố +ồ +ổ +ỗ +ộ +ớ +ở +ỡ +ợ +ụ +ủ +ứ +ừ +ử +ữ • … ⏎ diff --git a/resources/fonts/subset/sarasa-mono-sc-bold.subset.ttf b/resources/fonts/subset/sarasa-mono-sc-bold.subset.ttf index 0df2b834020ff98c002aa59b82194b463477a155..d43cbdc88e1ed6f206e41ded8881d08156baf15a 100644 GIT binary patch delta 15176 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 SDD=dCH4I9bz3&Pa`~L^bYV%kC delta 12676 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
Sw8gQ){L=Z0oS?&9=gA`P(jUJF(Sm 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 delta 12727 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 TzeV}%yhoxUXFER@R;B(6sl8Jy diff --git a/src/translations/translations.rs b/src/translations/translations.rs index 23e46b38..124b7eb3 100644 --- a/src/translations/translations.rs +++ b/src/translations/translations.rs @@ -1009,7 +1009,9 @@ pub fn packets_chart_translation(language: Language) -> &'static str { pub fn bytes_translation(language: Language) -> &'static str { match language { - Language::EN | Language::ES | Language::PT | Language::EL | Language::SV | Language::VN => "bytes", + Language::EN | Language::ES | Language::PT | Language::EL | Language::SV | Language::VN => { + "bytes" + } Language::DE => "Bytes", Language::IT => "byte", Language::FR => "octets", @@ -1800,7 +1802,6 @@ pub fn packets_exceeded_value_translation(language: Language, value: u32) -> Str Language::JA => format!("{value} パケットの送受信が発生しました"), Language::UZ => format!("{value} paket uzatildi"), Language::VN => format!("{value} gói tin đã được trao đổi"), - } } diff --git a/src/translations/types/language.rs b/src/translations/types/language.rs index eab1c5bb..f0e1d9d8 100644 --- a/src/translations/types/language.rs +++ b/src/translations/types/language.rs @@ -5,7 +5,7 @@ use iced::widget::Svg; use serde::{Deserialize, Serialize}; use crate::countries::flags_pictures::{ - CN, DE, ES, FI, FLAGS_WIDTH_BIG, FR, GB, GR, IT, JP, KR, PL, PT, RO, RU, SE, TR, UA, UZ, + CN, DE, ES, FI, FLAGS_WIDTH_BIG, FR, GB, GR, IT, JP, KR, PL, PT, RO, RU, SE, TR, UA, UZ, VN, }; use crate::StyleType; @@ -61,7 +61,7 @@ impl Default for Language { } impl Language { - pub const ALL: [Language; 18] = [ + pub const ALL: [Language; 19] = [ Language::EN, Language::DE, Language::EL, @@ -79,8 +79,8 @@ impl Language { Language::TR, Language::UK, Language::UZ, - Language::ZH, Language::VN, + Language::ZH, ]; pub fn get_flag(self) -> Svg { From fcdac9c7c958e2b5817084d84dbaa1b4a704e33f Mon Sep 17 00:00:00 2001 From: Giuliano Bellini s294739 Date: Tue, 13 Aug 2024 11:08:29 +0200 Subject: [PATCH 3/6] renamed Vietnamese language code from VN to VI --- src/translations/translations.rs | 114 ++++++++++++++--------------- src/translations/translations_2.rs | 46 ++++++------ src/translations/translations_3.rs | 42 +++++------ src/translations/types/language.rs | 12 +-- 4 files changed, 107 insertions(+), 107 deletions(-) diff --git a/src/translations/translations.rs b/src/translations/translations.rs index 124b7eb3..e9218042 100644 --- a/src/translations/translations.rs +++ b/src/translations/translations.rs @@ -26,7 +26,7 @@ pub fn choose_adapters_translation(language: Language) -> Text<'static, StyleTyp Language::FI => "Valitse tarkasteltava verkkosovitin", Language::JA => "使用するネットワーク アダプターを選択してください", Language::UZ => "Tekshirish uchun tarmoq adapterini tanlang", - Language::VN => "Hãy chọn network adapter để quan sát", + Language::VI => "Hãy chọn network adapter để quan sát", }) } @@ -75,7 +75,7 @@ pub fn select_filters_translation(language: Language) -> Text<'static, StyleType Language::FI => "Valitse suodattimet verkkoliikenteelle", Language::JA => "トラフィックに適用するフィルターを選択してください", Language::UZ => "Tarmoq trafigiga qo'llaniladigan filtrlarni tanlang", - Language::VN => "Hãy chọn bộ lọc cho lưu lượng mạng", + Language::VI => "Hãy chọn bộ lọc cho lưu lượng mạng", }) } @@ -97,7 +97,7 @@ pub fn start_translation(language: Language) -> &'static str { Language::FI => "Aloita!", Language::JA => "開始!", Language::UZ => "Boshlash!", - Language::VN => "Bắt đầu!", + Language::VI => "Bắt đầu!", } } @@ -120,7 +120,7 @@ pub fn address_translation(language: Language) -> &'static str { Language::FI => "Osoite", Language::JA => "アドレス", Language::UZ => "Manzil", - Language::VN => "Địa chỉ", + Language::VI => "Địa chỉ", } } @@ -145,7 +145,7 @@ pub fn addresses_translation(language: Language) -> &'static str { Language::FI => "Osoitteet", Language::JA => "アドレス", Language::UZ => "Manzillar", - Language::VN => "Danh sách địa chỉ", + Language::VI => "Danh sách địa chỉ", } } @@ -170,7 +170,7 @@ pub fn ip_version_translation(language: Language) -> &'static str { Language::FI => "IP-versio", Language::JA => "IP バージョン", Language::UZ => "IP versiyasi", - Language::VN => "Phiên bản IP", + Language::VI => "Phiên bản IP", } } @@ -214,7 +214,7 @@ pub fn protocol_translation(language: Language) -> &'static str { Language::FI => "Protokolla", Language::JA => "プロトコル", Language::UZ => "Protokoli", - Language::VN => "Phương thức", + Language::VI => "Phương thức", } } @@ -239,7 +239,7 @@ pub fn traffic_rate_translation(language: Language) -> Text<'static, StyleType> Language::FI => "Liikennemäärä", Language::JA => "トラフィック レート", Language::UZ => "Trafik tezligi", - Language::VN => "Lưu lượng truy cập", + Language::VI => "Lưu lượng truy cập", }) } @@ -286,7 +286,7 @@ pub fn settings_translation(language: Language) -> &'static str { Language::FI => "Asetukset", Language::JA => "設定", Language::UZ => "Sozlamalar", - Language::VN => "Cài đặt", + Language::VI => "Cài đặt", } } @@ -310,7 +310,7 @@ pub fn yes_translation(language: Language) -> Text<'static, StyleType> { Language::FI => "Kyllä", Language::JA => "はい", Language::UZ => "Ha", - Language::VN => "Chấp nhận", + Language::VI => "Chấp nhận", }) } @@ -335,7 +335,7 @@ pub fn ask_quit_translation(language: Language) -> Text<'static, StyleType> { Language::FI => "Haluatko varmasti lopettaa analyysin?", Language::JA => "分析を終了しますか?", Language::UZ => "Tahlildan chiqishga ishonchingiz komilmi?", - Language::VN => "Bạn có chắc là muốn thoát phiên phân tích này?", + Language::VI => "Bạn có chắc là muốn thoát phiên phân tích này?", }) } @@ -360,7 +360,7 @@ pub fn quit_analysis_translation(language: Language) -> &'static str { Language::FI => "Lopeta analyysi", Language::JA => "分析の終了", Language::UZ => "Tahlildan chiqish", - Language::VN => "Thoát phiên phân tích", + Language::VI => "Thoát phiên phân tích", } } @@ -385,7 +385,7 @@ pub fn ask_clear_all_translation(language: Language) -> Text<'static, StyleType> Language::FI => "Haluatko varmasti tyhjentää ilmoitukset?", Language::JA => "すべての通知を削除します。よろしいですか?", Language::UZ => "Haqiqatan ham bildirishnomalarni tozalamoqchimisiz?", - Language::VN => "Bạn có chắc là muốn xóa các thông báo?", + Language::VI => "Bạn có chắc là muốn xóa các thông báo?", }) } @@ -410,7 +410,7 @@ pub fn clear_all_translation(language: Language) -> &'static str { Language::FI => "Tyhjennä kaikki", Language::JA => "すべて削除", Language::UZ => "Barchasini tozalash", - Language::VN => "Xóa tất cả", + Language::VI => "Xóa tất cả", } } @@ -435,7 +435,7 @@ pub fn hide_translation(language: Language) -> &'static str { Language::FI => "Piilota", Language::JA => "隠す", Language::UZ => "Yashirish", - Language::VN => "Ẩn", + Language::VI => "Ẩn", } } @@ -460,7 +460,7 @@ pub fn network_adapter_translation(language: Language) -> &'static str { Language::FI => "Verkkosovitin", Language::JA => "ネットワーク アダプター", Language::UZ => "Tarmoq adapteri", - Language::VN => "Network adapter", + Language::VI => "Network adapter", } } @@ -524,7 +524,7 @@ pub fn no_addresses_translation(language: Language, adapter: &str) -> Text<'stat Language::UZ => format!("Trafik kuzatilmaydi, chunki siz tanlagan adapterda faol manzillar yo'q...\n\n\ {network_adapter_translation}: {adapter}\n\n\ Internetga ulanganingizga ishonchingiz komil bo'lsa, boshqa adapterni tanlashga harakat qiling"), - Language::VN => format!("Không thể quan sát lưu lượng nào vì adapter mà bạn chọn không địa chỉ hoạt động...\n\n\ + Language::VI => format!("Không thể quan sát lưu lượng nào vì adapter mà bạn chọn không địa chỉ hoạt động...\n\n\ {network_adapter_translation}: {adapter}\n\n\ Nếu bạn đã chắc chắn kết nối với internet, hãy thử chọn network adapter khác."), }) @@ -591,7 +591,7 @@ pub fn waiting_translation(language: Language, adapter: &str) -> Text<'static, S "Hali hech qanday trafik aniqlanmadi. Tarmoq paketlari kutilmoqda...\n\n\ {network_adapter_translation}: {adapter}\n\n\ Internetga ulanganingizga va to'g'ri adapterni tanlaganingizga ishonchingiz komilmi?"), - Language::VN => format!("Chưa có lưu lượng để quan sát. Đang đợi các gói tin...\n\n\ + Language::VI => format!("Chưa có lưu lượng để quan sát. Đang đợi các gói tin...\n\n\ {network_adapter_translation}: {adapter}\n\n\ Bạn có chắc là đã kết nối với internet và đã chọn đúng network adapter?"), }) @@ -657,7 +657,7 @@ pub fn some_observed_translation(language: Language, observed: u128) -> Text<'st "Jami ushlangan paketlar: {observed}\n\n\ Filtrlangan paketlar: 0\n\n\ Tarmoq paketlari ushlandi, lekin ularning hech biri belgilangan filtrlarga mos kelmadi..."), - Language::VN => format!("Tổng số gói tin bị chặn: {observed}\n\n\ + Language::VI => format!("Tổng số gói tin bị chặn: {observed}\n\n\ Các gói tin đã lọc: 0\n\n\ Một số gói đã bị chặn, nhưng vẫn chưa có gói tin nào được bắt theo bộ lọc bạn đã chọn..."), }) @@ -684,7 +684,7 @@ pub fn filtered_packets_translation(language: Language) -> &'static str { Language::FI => "Suodatettuja paketteja", Language::JA => "フィルタリングされたパケット", Language::UZ => "Filtrlangan paketlar", - Language::VN => "Các gói tin đã được lọc", + Language::VI => "Các gói tin đã được lọc", } } @@ -708,7 +708,7 @@ pub fn filtered_bytes_translation(language: Language) -> &'static str { Language::FI => "Suodatettuja tavuja", Language::JA => "フィルタリングされたバイト", Language::UZ => "Filtrlangan baytlar", - Language::VN => "Các bytes đã được lọc", + Language::VI => "Các bytes đã được lọc", } } @@ -747,7 +747,7 @@ pub fn of_total_translation(language: Language, percentage: &str) -> String { Language::FI => format!("({percentage} kokonaismäärästä)"), Language::JA => format!("(トータル: {percentage} )"), Language::UZ => format!("(Jami: {percentage} )"), - Language::VN => format!("({percentage} trên tổng cộng)"), + Language::VI => format!("({percentage} trên tổng cộng)"), } } @@ -890,7 +890,7 @@ pub fn error_translation(language: Language, error: &str) -> Text<'static, Style "Xatolik yuz berdi!\n\n\ {error}" ), - Language::VN => format!( + Language::VI => format!( "Đã có lỗi xảy ra! \n\n\ {error}" ), @@ -978,7 +978,7 @@ pub fn packets_translation(language: Language) -> &'static str { Language::FI => "paketit", Language::JA => "パケット", Language::UZ => "paketlar", - Language::VN => "các gói tin", + Language::VI => "các gói tin", } } @@ -1003,13 +1003,13 @@ pub fn packets_chart_translation(language: Language) -> &'static str { Language::FI => "pakettia sekunnissa", Language::JA => "1 秒あたりのパケット数", Language::UZ => "paket soniyasiga", - Language::VN => "gói tin trên giây", + Language::VI => "gói tin trên giây", } } pub fn bytes_translation(language: Language) -> &'static str { match language { - Language::EN | Language::ES | Language::PT | Language::EL | Language::SV | Language::VN => { + Language::EN | Language::ES | Language::PT | Language::EL | Language::SV | Language::VI => { "bytes" } Language::DE => "Bytes", @@ -1048,7 +1048,7 @@ pub fn bytes_chart_translation(language: Language) -> &'static str { Language::FI => "tavua sekunnissa", Language::JA => "1 秒あたりのバイト量", Language::UZ => "bayt soniyasiga", - Language::VN => "byte trên giây", + Language::VI => "byte trên giây", } } @@ -1166,7 +1166,7 @@ pub fn notifications_title_translation(language: Language) -> Text<'static, Styl Language::FI => "Muokkaa ilmoituksiasi", Language::JA => "通知のカスタマイズ", Language::UZ => "Bildirishnomalaringizni sozlang", - Language::VN => "Tùy chỉnh thông báo của bạn", + Language::VI => "Tùy chỉnh thông báo của bạn", }) } @@ -1191,7 +1191,7 @@ pub fn appearance_title_translation(language: Language) -> Text<'static, StyleTy Language::FI => "Valitse suosikkiteemasi", Language::JA => "テーマを選択してください", Language::UZ => "Sevimli mavzuingizni tanlang", - Language::VN => "Chọn chủ đề bạn muốn", + Language::VI => "Chọn chủ đề bạn muốn", }) } @@ -1216,7 +1216,7 @@ pub fn active_filters_translation(language: Language) -> &'static str { Language::FI => "Aktiiviset suodattimet", Language::JA => "適用されているフィルター", Language::UZ => "Faol filtrlar", - Language::VN => "Bộ lọc đang hoạt động", + Language::VI => "Bộ lọc đang hoạt động", } } @@ -1241,7 +1241,7 @@ pub fn none_translation(language: Language) -> &'static str { Language::FI => "ei mitään", Language::JA => "なし", Language::UZ => "hech biri", - Language::VN => "không có", + Language::VI => "không có", } } @@ -1266,7 +1266,7 @@ pub fn yeti_night_translation(language: Language) -> &'static str { Language::FI => "Sniffnetin alkuperäinen tumma teema", Language::JA => "Sniffnet のオリジナル テーマ", Language::UZ => "Sniffnet-ning asl qora mavzusi", - Language::VN => "Chủ đề tối của Sniffnet", + Language::VI => "Chủ đề tối của Sniffnet", } } @@ -1290,7 +1290,7 @@ pub fn yeti_day_translation(language: Language) -> &'static str { Language::FI => "Sniffnetin alkuperäinen vaalea teema", Language::JA => "Sniffnet のオリジナル ライト テーマ", Language::UZ => "Sniffnet-ning asl oq mavzusi", - Language::VN => "Chủ đề sáng của Sniffnet", + Language::VI => "Chủ đề sáng của Sniffnet", } } @@ -1315,7 +1315,7 @@ pub fn deep_sea_translation(language: Language) -> &'static str { Language::FI => "Sukeltaaksesi verkkoliikenteeseen", Language::JA => "ネットワーク トラフィックにダイブ", Language::UZ => "Tarmoq trafigiga qo'shilish uchun", - Language::VN => "Đắm chìm vào lưu lượng mạng", + Language::VI => "Đắm chìm vào lưu lượng mạng", } } @@ -1340,7 +1340,7 @@ pub fn mon_amour_translation(language: Language) -> &'static str { Language::FI => "Ihana teema unelmoijille", Language::JA => "ドリーマーのためのテーマ", Language::UZ => "Xayolparastlar uchun chiroyli mavzu", - Language::VN => "Chủ đề mộng mơ cho những kẻ mơ mộng", + Language::VI => "Chủ đề mộng mơ cho những kẻ mơ mộng", } } @@ -1365,7 +1365,7 @@ pub fn incoming_translation(language: Language) -> &'static str { Language::FI => "Saapuva", Language::JA => "受信", Language::UZ => "Kiruvchi", - Language::VN => "Đang tới", + Language::VI => "Đang tới", } } @@ -1390,7 +1390,7 @@ pub fn outgoing_translation(language: Language) -> &'static str { Language::FI => "Lähtevä", Language::JA => "送信", Language::UZ => "Chiquvchi", - Language::VN => "Đang hướng ra ngoài", + Language::VI => "Đang hướng ra ngoài", } } @@ -1413,7 +1413,7 @@ pub fn notifications_translation(language: Language) -> &'static str { Language::SV => "Notifikationer", Language::FI => "Ilmoitukset", Language::UZ => "Bildirishnomalar", - Language::VN => "Thông báo", + Language::VI => "Thông báo", } } @@ -1433,7 +1433,7 @@ pub fn style_translation(language: Language) -> &'static str { Language::FI => "Tyyli", Language::JA => "スタイル", Language::UZ => "Uslub", - Language::VN => "Chủ đề", + Language::VI => "Chủ đề", } } @@ -1458,7 +1458,7 @@ pub fn language_translation(language: Language) -> &'static str { Language::FI => "Kieli", Language::JA => "表示言語", Language::UZ => "Til", - Language::VN => "Ngôn ngữ", + Language::VI => "Ngôn ngữ", } } @@ -1483,7 +1483,7 @@ pub fn overview_translation(language: Language) -> &'static str { Language::FI => "Yleiskatsaus", Language::JA => "概要", Language::UZ => "Ko'rib chiqish", - Language::VN => "Tổng quan", + Language::VI => "Tổng quan", } } @@ -1508,7 +1508,7 @@ pub fn packets_threshold_translation(language: Language) -> &'static str { Language::FI => "Ilmoita minulle, kun pakettiraja on ylittynyt", Language::JA => "パケット数の閾値を超過した場合に通知する", Language::UZ => "Paket chegarasi oshib ketganda xabar bering", - Language::VN => "Báo cho tôi biết khi vượt quá ngưỡng gói tin", + Language::VI => "Báo cho tôi biết khi vượt quá ngưỡng gói tin", } } @@ -1533,7 +1533,7 @@ pub fn bytes_threshold_translation(language: Language) -> &'static str { Language::FI => "Ilmoita minulle, kun tavuraja on ylittynyt", Language::JA => "バイト量の閾値を超過した場合に通知する", Language::UZ => "Bayt chegarasi oshib ketganda menga xabar bering", - Language::VN => "Báo cho tôi biết khi vượt quá ngưỡng bytes", + Language::VI => "Báo cho tôi biết khi vượt quá ngưỡng bytes", } } @@ -1556,7 +1556,7 @@ pub fn per_second_translation(language: Language) -> &'static str { Language::SV => "(per sekund)", Language::FI => "(sekunnissa)", Language::UZ => "(soniyasiga)", - Language::VN => "(trên giây)", + Language::VI => "(trên giây)", } } @@ -1581,7 +1581,7 @@ pub fn specify_multiples_translation(language: Language) -> &'static str { Language::FI => "voit myös määrittää 'K', 'M' tai 'G'", Language::JA => "'K', 'M', 'G' が選択可能です", Language::UZ => "'K', 'M' va 'G' ni ham belgilashingiz mumkin", - Language::VN => "bạn cũng có thể chọn 'K', 'M' and 'G'", + Language::VI => "bạn cũng có thể chọn 'K', 'M' and 'G'", } } @@ -1608,7 +1608,7 @@ pub fn favorite_notification_translation(language: Language) -> &'static str { Language::FI => "Ilmoita minulle, kun suosikkini vaihtavat uusia tietoja", Language::JA => "お気に入りに指定したホストに関してデータ送受信があった場合に通知する", Language::UZ => "Sevimlilar ro'yhatidan yangi ma'lumotlar almashganda xabar bering", - Language::VN => "Báo cho tôi biết khi dữ liệu mới được trao đổi từ mục yêu thích của tôi", + Language::VI => "Báo cho tôi biết khi dữ liệu mới được trao đổi từ mục yêu thích của tôi", } } @@ -1633,7 +1633,7 @@ pub fn threshold_translation(language: Language) -> &'static str { Language::FI => "Raja", Language::JA => "閾値", Language::UZ => "Eshik", - Language::VN => "Ngưỡng", + Language::VI => "Ngưỡng", } } @@ -1654,7 +1654,7 @@ pub fn volume_translation(language: Language) -> &'static str { Language::SV => "Volym", Language::FI => "Äänenvoimakkuus", Language::UZ => "Ovoz balandligi", - Language::VN => "Âm lượng", + Language::VI => "Âm lượng", } } @@ -1677,7 +1677,7 @@ pub fn sound_translation(language: Language) -> &'static str { Language::SV => "Ljud", Language::FI => "Ääni", Language::UZ => "Ovoz", - Language::VN => "Âm thanh", + Language::VI => "Âm thanh", } } @@ -1702,7 +1702,7 @@ pub fn bytes_exceeded_translation(language: Language) -> &'static str { Language::FI => "Tavuraja ylitetty!", Language::JA => "バイト量の閾値を調査しました!", Language::UZ => "Bayt chegarasidan oshib ketdi!", - Language::VN => "Bytes đã vượt ngưỡng!", + Language::VI => "Bytes đã vượt ngưỡng!", } } @@ -1727,7 +1727,7 @@ pub fn bytes_exceeded_value_translation(language: Language, value: &str) -> Stri Language::FI => format!("{value} on vaihdettu"), Language::JA => format!("{value} の送受信が発生しました"), Language::UZ => format!("{value} ma'lumot almashinuvi"), - Language::VN => format!("{value} đã được trao đổi"), + Language::VI => format!("{value} đã được trao đổi"), } } @@ -1752,7 +1752,7 @@ pub fn packets_exceeded_translation(language: Language) -> &'static str { Language::FI => "Pakettiraja ylitetty!", Language::JA => "パケット数のしきい値を超過しました!", Language::UZ => "Paket chegarasidan oshib ketdi!", - Language::VN => "Gói tin đã vượt ngưỡng!", + Language::VI => "Gói tin đã vượt ngưỡng!", } } @@ -1801,7 +1801,7 @@ pub fn packets_exceeded_value_translation(language: Language, value: u32) -> Str }, Language::JA => format!("{value} パケットの送受信が発生しました"), Language::UZ => format!("{value} paket uzatildi"), - Language::VN => format!("{value} gói tin đã được trao đổi"), + Language::VI => format!("{value} gói tin đã được trao đổi"), } } @@ -1826,7 +1826,7 @@ pub fn favorite_transmitted_translation(language: Language) -> &'static str { Language::FI => "Uusia tietoja vaihdettu suosikeista!", Language::JA => "お気に入りのホストで新しいデータ送受信が発生しました!", Language::UZ => "Sevimli ulanishlar ro'yhatida yangi ma'lumotlar almashinuvi!", - Language::VN => "Mục ưa thích vừa có trao đổi!", + Language::VI => "Mục ưa thích vừa có trao đổi!", } } @@ -1889,7 +1889,7 @@ pub fn no_notifications_set_translation(language: Language) -> Text<'static, Sty Language::UZ => "Siz hali bildirishnomalarni yoqmagansiz!\n\n\ Ularni faollashtirgandan so'ng, bu sahifada bildirishnomalaringiz jurnali ko'rsatiladi\n\n\ Sozlamalardan bildirishnomalarni yoqishingiz mumkin:", - Language::VN => "Bạn chưa bật tính năng thông báo!\n\n\ + Language::VI => "Bạn chưa bật tính năng thông báo!\n\n\ au khi bật, trang này sẽ hiển thị thông báo\n\n\ Hãy bật thông báo trong phần cài đặt:", }) @@ -1973,7 +1973,7 @@ pub fn no_notifications_received_translation(language: Language) -> Text<'static "Ayni paytda ko'rsatiladigan hech narsa yo'q...\n\n\ Bildirishnomalar kelganda, ular shu yerda ko'rsatiladi" } - Language::VN => { + Language::VI => { "Hiện tại không có gì để quan sát...\n\n\ Khi có thông báo, chúng sẽ hiển thị ở đây" } @@ -2001,6 +2001,6 @@ pub fn only_last_30_translation(language: Language) -> &'static str { Language::FI => "Vain viimeiset 30 ilmoitusta näytetään", Language::JA => "最新の通知 30 件のみ表示されます", Language::UZ => "Faqat oxirgi 30 ta bildirishnoma ko'rsatiladi", - Language::VN => "Chỉ có 30 thông báo gần nhất được hiển thị", + Language::VI => "Chỉ có 30 thông báo gần nhất được hiển thị", } } diff --git a/src/translations/translations_2.rs b/src/translations/translations_2.rs index f2cefbaa..535b017d 100644 --- a/src/translations/translations_2.rs +++ b/src/translations/translations_2.rs @@ -23,7 +23,7 @@ pub fn new_version_available_translation(language: Language) -> &'static str { Language::JA => "新しいバージョンが利用可能になりました!", Language::UZ => "Yangi versiya mavjud!", Language::PT => "Uma nova versão está disponível!", - Language::VN => "Phiên bản mới đã sẵn sàng!", + Language::VI => "Phiên bản mới đã sẵn sàng!", } } @@ -47,7 +47,7 @@ pub fn inspect_translation(language: Language) -> &'static str { Language::JA => "検査", Language::UZ => "Tekshirish", Language::PT => "Inspecionar", - Language::VN => "Quan sát", + Language::VI => "Quan sát", _ => "Inspect", } } @@ -72,7 +72,7 @@ pub fn connection_details_translation(language: Language) -> &'static str { Language::JA => "接続の詳細", Language::UZ => "Ulanish tafsilotlari", Language::PT => "Detalhes da conexão", - Language::VN => "Thông tin kết nối", + Language::VI => "Thông tin kết nối", _ => "Connection details", } } @@ -97,7 +97,7 @@ pub fn dropped_packets_translation(language: Language) -> &'static str { Language::JA => "ドロップしたパケット", Language::UZ => "Yig'ilgan paketlar", Language::PT => "Pacotes perdidos", - Language::VN => "Gói tin đã bị mất", + Language::VI => "Gói tin đã bị mất", _ => "Dropped packets", } } @@ -122,7 +122,7 @@ pub fn data_representation_translation(language: Language) -> &'static str { Language::JA => "データ表示", Language::UZ => "Ma'lumotlarni taqdim etish", Language::PT => "Representação dos dados", - Language::VN => "Miêu tả dữ liệu", + Language::VI => "Miêu tả dữ liệu", _ => "Data representation", } } @@ -147,7 +147,7 @@ pub fn host_translation(language: Language) -> &'static str { Language::JA => "ネットワーク ホスト", Language::UZ => "Tarmoq serveri", Language::PT => "Host da rede", - Language::VN => "Máy chủ", + Language::VI => "Máy chủ", _ => "Network host", } } @@ -172,7 +172,7 @@ pub fn only_top_30_items_translation(language: Language) -> &'static str { Language::JA => "上位 30 件のアイテムのみが表示されます", Language::UZ => "Bu erda faqat dastlabki 30 ta buyumlar ko'rsatiladi", Language::PT => "Apenas os 30 melhores unid são expostos aqui", - Language::VN => "Chỉ có 30 mục gần nhất được hiển thị ở đây", + Language::VI => "Chỉ có 30 mục gần nhất được hiển thị ở đây", _ => "Only the top 30 items are displayed here", } } @@ -220,7 +220,7 @@ pub fn local_translation(language: Language) -> &'static str { Language::JA => "ローカル ネットワーク", Language::UZ => "Mahalliy tarmoq", Language::PT => "Rede local", - Language::VN => "Mạng nội bộ", + Language::VI => "Mạng nội bộ", _ => "Local network", } } @@ -245,7 +245,7 @@ pub fn unknown_translation(language: Language) -> &'static str { Language::JA => "不明なロケーション", Language::UZ => "Noma'lum joylashuv", Language::PT => "Localização desconhecida", - Language::VN => "Không rõ địa điểm", + Language::VI => "Không rõ địa điểm", _ => "Unknown location", } } @@ -270,7 +270,7 @@ pub fn your_network_adapter_translation(language: Language) -> &'static str { Language::JA => "自身のネットワーク アダプター", Language::UZ => "Sizning tarmoq adapteringiz", Language::PT => "Seu adaptador de rede", - Language::VN => "Network adapter của bạn", + Language::VI => "Network adapter của bạn", _ => "Your network adapter", } } @@ -295,7 +295,7 @@ pub fn socket_address_translation(language: Language) -> &'static str { Language::JA => "ソケット アドレス", Language::UZ => "Soket manzili", Language::PT => "Endereço da socket", - Language::VN => "Địa chỉ socket", + Language::VI => "Địa chỉ socket", _ => "Socket address", } } @@ -320,7 +320,7 @@ pub fn mac_address_translation(language: Language) -> &'static str { Language::JA => "MAC アドレス", Language::UZ => "MAC manzili", Language::PT => "Endereço MAC", - Language::VN => "Địa chỉ MAC", + Language::VI => "Địa chỉ MAC", _ => "MAC address", } } @@ -345,7 +345,7 @@ pub fn source_translation(language: Language) -> &'static str { Language::JA => "送信元", Language::UZ => "Manba", Language::PT => "Fonte", - Language::VN => "Nguồn", + Language::VI => "Nguồn", _ => "Source", } } @@ -368,7 +368,7 @@ pub fn destination_translation(language: Language) -> &'static str { Language::FR => "Destination", Language::JA => "送信先", Language::UZ => "Qabul qiluvchi", - Language::VN => "Đích", + Language::VI => "Đích", _ => "Destination", } } @@ -392,7 +392,7 @@ pub fn fqdn_translation(language: Language) -> &'static str { Language::FR => "Nom de domaine complètement qualifié", Language::UZ => "To'liq domen nomi", Language::PT => "Nome de domínio completo", - Language::VN => "Tên miền đầy đủ", + Language::VI => "Tên miền đầy đủ", _ => "Fully qualified domain name", } } @@ -417,7 +417,7 @@ pub fn administrative_entity_translation(language: Language) -> &'static str { Language::JA => "AS 名", Language::UZ => "Avtonom tizim nomi", Language::PT => "Entidade administrativa", - Language::VN => "Tên Autonomous System", + Language::VI => "Tên Autonomous System", _ => "Autonomous System name", } } @@ -442,7 +442,7 @@ pub fn transmitted_data_translation(language: Language) -> &'static str { Language::JA => "転送データ", Language::UZ => "Uzatilgan ma'lumotlar", Language::PT => "Dados transmitidos", - Language::VN => "Dữ liệu được truyền", + Language::VI => "Dữ liệu được truyền", _ => "Transmitted data", } } @@ -466,7 +466,7 @@ pub fn country_translation(language: Language) -> &'static str { Language::FR => "Pays", Language::JA => "国", Language::UZ => "Davlat", - Language::VN => "Quốc gia", + Language::VI => "Quốc gia", _ => "Country", } } @@ -491,7 +491,7 @@ pub fn domain_name_translation(language: Language) -> &'static str { Language::JA => "ドメイン名", Language::UZ => "Domen nomi", Language::PT => "Nome do domínio", - Language::VN => "Tên miền", + Language::VI => "Tên miền", _ => "Domain name", } } @@ -516,7 +516,7 @@ pub fn only_show_favorites_translation(language: Language) -> &'static str { Language::JA => "お気に入りのみを表示する", Language::UZ => "Faqat sevimlilarni ko'rsatish", Language::PT => "Apenas mostrar os favoritos", - Language::VN => "Chỉ hiển thị mục ưa thích", + Language::VI => "Chỉ hiển thị mục ưa thích", _ => "Only show favorites", } } @@ -565,7 +565,7 @@ pub fn no_search_results_translation(language: Language) -> &'static str { Language::JA => "指定されたフィルター条件で表示できる結果はありません", Language::UZ => "Belgilangan qidiruv filtrlari bo'yicha hech qanday natija mavjud emas", Language::PT => "Nenhum resultado disponível de acordo com os filtros selecionados", - Language::VN => "Không có kết quả nào theo các bộ lọc được chỉ định", + Language::VI => "Không có kết quả nào theo các bộ lọc được chỉ định", _ => "No result available according to the specified search filters", } } @@ -595,7 +595,7 @@ pub fn showing_results_translation( Language::JA => format!("{total} 件中の {start}-{end} 件を表示"), Language::UZ => format!("Jami {total} natijadan {start}-{end} ko'rsatilyapti"), Language::PT => format!("Mostrando {start}-{end} de {total} resultados totais"), - Language::VN => format!("Đang hiển thị {start}-{end} của {total} tổng số kết quả"), + Language::VI => format!("Đang hiển thị {start}-{end} của {total} tổng số kết quả"), _ => format!("Showing {start}-{end} of {total} total results"), } } @@ -621,7 +621,7 @@ pub fn color_gradients_translation(language: Language) -> &'static str { Language::JA => "グラデーションを適用する", Language::UZ => "Rang gradientlarini qo'llang", Language::PT => "Aplicar gradientes de cor", - Language::VN => "Áp dụng color gradients", + Language::VI => "Áp dụng color gradients", _ => "Apply color gradients", } } diff --git a/src/translations/translations_3.rs b/src/translations/translations_3.rs index 4b41a278..d04c3f1e 100644 --- a/src/translations/translations_3.rs +++ b/src/translations/translations_3.rs @@ -19,7 +19,7 @@ pub fn general_translation(language: Language) -> &'static str { Language::JA => "一般", Language::UZ => "Asosiy", Language::SV => "Allmänt", - Language::VN => "Tổng quan", + Language::VI => "Tổng quan", Language::ZH => "通用", _ => "General", } @@ -39,7 +39,7 @@ pub fn zoom_translation(language: Language) -> &'static str { Language::RU => "Масштаб интерфейса", Language::JA => "ズーム", Language::UZ => "Kattalashtirish", - Language::VN => "Phóng to", + Language::VI => "Phóng to", Language::ZH => "缩放", _ => "Zoom", } @@ -59,7 +59,7 @@ pub fn mmdb_files_translation(language: Language) -> &'static str { Language::JA => "データベース ファイル", Language::UZ => "Ma'lumotlar bazasi fayllari", Language::SV => "Databasfiler", - Language::VN => "Tập tin cơ sở dữ liệu", + Language::VI => "Tập tin cơ sở dữ liệu", Language::ZH => "数据库文件", _ => "Database files", } @@ -79,7 +79,7 @@ pub fn params_not_editable_translation(language: Language) -> &'static str { Language::JA => "以下のパラメーターは分析中は変更できません", Language::UZ => "Tahlil vaqtida quydagi parametrlarni o'zgartirib bo'lmaydi", Language::SV => "Följande parametrar kan inte ändras under analysen", - Language::VN => "Các tham số sau không thể bị thay đổi khi đang phân tích", + Language::VI => "Các tham số sau không thể bị thay đổi khi đang phân tích", Language::ZH => "以下参数在分析过程中不能修改", _ => "The following parameters can't be modified during the analysis", } @@ -99,7 +99,7 @@ pub fn custom_style_translation(language: Language) -> &'static str { Language::JA => "カスタム スタイル", Language::UZ => "Moslashtirilgan uslub", Language::SV => "Anpassad stil", - Language::VN => "Tùy chỉnh chủ đề", + Language::VI => "Tùy chỉnh chủ đề", Language::ZH => "自定义样式", _ => "Custom style", } @@ -117,7 +117,7 @@ pub fn copy_translation(language: Language) -> &'static str { Language::JA => "コピー", Language::UZ => "Nusxalash", Language::SV => "Kopia", - Language::VN => "Sao chép", + Language::VI => "Sao chép", Language::ZH => "复制", _ => "Copy", } @@ -137,7 +137,7 @@ pub fn port_translation(language: Language) -> &'static str { Language::IT => "Porta", Language::RU => "Порт", Language::JA => "ポート", - Language::VN => "Cổng", + Language::VI => "Cổng", Language::ZH => "端口", _ => "Port", } @@ -157,7 +157,7 @@ pub fn invalid_filters_translation(language: Language) -> &'static str { Language::JA => "無効なフィルター", Language::UZ => "Noto'g'ri filterlar", Language::SV => "Ogiltiga filter", - Language::VN => "Bộ lọc không khả dụng", + Language::VI => "Bộ lọc không khả dụng", Language::ZH => "无效的过滤器", _ => "Invalid filters", } @@ -176,7 +176,7 @@ pub fn messages_translation(language: Language) -> &'static str { Language::JA => "メッセージ", Language::UZ => "Xabarlar", Language::SV => "Meddelanden", - Language::VN => "Tin nhắn", + Language::VI => "Tin nhắn", Language::ZH => "信息", _ => "Messages", } @@ -196,7 +196,7 @@ pub fn link_type_translation(language: Language) -> &'static str { Language::JA => "リンク タイプ", Language::UZ => "Havola turi", Language::SV => "Länktyp", - Language::VN => "Loại liên kết", + Language::VI => "Loại liên kết", Language::ZH => "链接类型", _ => "Link type", } @@ -219,7 +219,7 @@ pub fn unsupported_link_type_translation( Language::JA => "このアダプターのリンク タイプは Sniffnet ではまだサポートされていません...", Language::UZ => "Ushbu adapter bilan bog'langan havola turi hozircha Sniffnet tomonidan qo'llab quvvatlanmaydi...", Language::SV => "Länktypen associerad med denna adapter stöds inte av Sniffnet än...", - Language::VN => "Loại liên kết được gắn với adapter này chưa được Sniffnet hỗ trợ...", + Language::VI => "Loại liên kết được gắn với adapter này chưa được Sniffnet hỗ trợ...", Language::ZH => "Sniffnet 尚不支持与此适配器关联的链接类型...", _ => "The link type associated with this adapter is not supported by Sniffnet yet...", }; @@ -244,7 +244,7 @@ pub fn style_from_file_translation(language: Language) -> &'static str { Language::JA => "ファイルからスタイルを選択してください", Language::UZ => "Fayldan uslubni tanlang", Language::SV => "Välj stil från en fil", - Language::VN => "Chọn chủ đề từ file của bạn", + Language::VI => "Chọn chủ đề từ file của bạn", Language::ZH => "从文件中选择样式", _ => "Select style from a file", } @@ -264,7 +264,7 @@ pub fn database_from_file_translation(language: Language) -> &'static str { Language::JA => "データベース ファイルを選択してください", Language::UZ => "Ma'lumotlar bazasi faylini tanlang", Language::SV => "Välj databasfil", - Language::VN => "Chọn tập tin cơ sở dữ liệu", + Language::VI => "Chọn tập tin cơ sở dữ liệu", Language::ZH => "选择数据库文件", _ => "Select database file", } @@ -284,7 +284,7 @@ pub fn filter_by_host_translation(language: Language) -> &'static str { Language::JA => "ネットワーク ホストでフィルター", Language::UZ => "Tarmoq host bo'yicha filterlash", Language::SV => "Filtrera efter nätverksvärd", - Language::VN => "Lọc bởi máy chủ mạng", + Language::VI => "Lọc bởi máy chủ mạng", Language::ZH => "按网络主机筛选", _ => "Filter by network host", } @@ -301,7 +301,7 @@ pub fn service_translation(language: Language) -> &'static str { Language::RO => "Serviciu", Language::JA => "サービス", Language::UZ => "Xizmat", - Language::VN => "Dịch vụ", + Language::VI => "Dịch vụ", Language::ZH => "服务", _ => "Service", } @@ -320,7 +320,7 @@ pub fn export_capture_translation(language: Language) -> &'static str { Language::JA => "キャプチャ ファイルをエクスポート", Language::UZ => "Cap faylni export qilish", Language::SV => "Exportera inspelningsfil", - Language::VN => "Xuất tập tin đã bắt", + Language::VI => "Xuất tập tin đã bắt", Language::ZH => "导出捕获文件", _ => "Export capture file", } @@ -338,7 +338,7 @@ pub fn directory_translation(language: Language) -> &'static str { Language::RU => "Директория", Language::RO => "Director", Language::JA => "ディレクトリー", - Language::VN => "Thư mục", + Language::VI => "Thư mục", Language::ZH => "目录", _ => "Directory", } @@ -357,7 +357,7 @@ pub fn select_directory_translation(language: Language) -> &'static str { Language::JA => "宛先のディレクトリーを選択する", Language::UZ => "Manzil katalogni tanlang", Language::SV => "Välj målkatalog", - Language::VN => "Chọn thư mục đích đến", + Language::VI => "Chọn thư mục đích đến", Language::ZH => "选择目标目录", _ => "Select destination directory", } @@ -376,7 +376,7 @@ pub fn file_name_translation(language: Language) -> &'static str { Language::JA => "ファイル ネーム", Language::UZ => "Fayl nomi", Language::SV => "Filnamn", - Language::VN => "Tên file", + Language::VI => "Tên file", Language::ZH => "文件名", _ => "File name", } @@ -395,7 +395,7 @@ pub fn thumbnail_mode_translation(language: Language) -> &'static str { Language::JA => "サムネイル モード", Language::UZ => "Eskiz rejim", Language::SV => "Miniatyrläge", - Language::VN => "Chế độ thu nhỏ", + Language::VI => "Chế độ thu nhỏ", Language::ZH => "缩略图模式", _ => "Thumbnail mode", } @@ -414,7 +414,7 @@ pub fn learn_more_translation(language: Language) -> &'static str { Language::JA => "もっと知りたいですか?", Language::UZ => "Ko'proq bilishni hohlaysizmi?", Language::SV => "Vill du veta mer?", - Language::VN => "Bạn có muốn tìm hiểu thêm?", + Language::VI => "Bạn có muốn tìm hiểu thêm?", Language::ZH => "想知道更多吗?", _ => "Do you want to learn more?", } diff --git a/src/translations/types/language.rs b/src/translations/types/language.rs index f0e1d9d8..1ee00a55 100644 --- a/src/translations/types/language.rs +++ b/src/translations/types/language.rs @@ -50,8 +50,8 @@ pub enum Language { JA, /// Uzbek UZ, - /// Vietnam - VN, + /// Vietnamese + VI, } impl Default for Language { @@ -79,7 +79,7 @@ impl Language { Language::TR, Language::UK, Language::UZ, - Language::VN, + Language::VI, Language::ZH, ]; @@ -104,7 +104,7 @@ impl Language { Language::FI => FI, Language::JA => JP, Language::UZ => UZ, - Language::VN => VN, + Language::VI => VN, }))) .width(FLAGS_WIDTH_BIG) } @@ -122,7 +122,7 @@ impl Language { | Language::JA | Language::UZ | Language::SV - | Language::VN + | Language::VI | Language::ZH ) } @@ -150,7 +150,7 @@ impl fmt::Display for Language { Language::FI => "Suomi", Language::JA => "日本語", Language::UZ => "O'zbekcha", - Language::VN => "Tiếng Việt", + Language::VI => "Tiếng Việt", }; write!(f, "{self:?} - {lang_str}") } From 00151a1b84c69efebb393eaa89a406081a31f025 Mon Sep 17 00:00:00 2001 From: Giuliano Bellini s294739 Date: Tue, 13 Aug 2024 11:09:08 +0200 Subject: [PATCH 4/6] update CHANGELOG --- CHANGELOG.md | 1 + README.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3d7f58f..c85a429f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ All Sniffnet releases with the relative changes are documented in this file. ## [UNRELEASED] +- Added Vietnamese translation 🇻🇳 ([#577](https://github.com/GyulyVGC/sniffnet/pull/577)) - Updated Chinese translation to v1.3 ([#575](https://github.com/GyulyVGC/sniffnet/pull/575)) ## [1.3.1] - 2024-07-22 diff --git a/README.md b/README.md index 58715dd0..58308df2 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Application to comfortably monitor your Internet traffic
Cross-platform, Intuitive, Reliable Translated in:
-🇨🇳 🇩🇪 🇫🇷 🇷🇺 🇵🇹 🇪🇦 🇮🇹 🇵🇱 [+ 11 more languages](https://github.com/GyulyVGC/sniffnet/issues/60) +🇨🇳 🇩🇪 🇫🇷 🇷🇺 🇵🇹 🇪🇦 🇮🇹 🇵🇱 [+ 12 more languages](https://github.com/GyulyVGC/sniffnet/issues/60)

From 0a683d83f897ec484207cc1401894d9e9312eee8 Mon Sep 17 00:00:00 2001 From: Giuliano Bellini s294739 Date: Tue, 13 Aug 2024 11:30:33 +0200 Subject: [PATCH 5/6] fix test --- src/gui/pages/inspect_page.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/pages/inspect_page.rs b/src/gui/pages/inspect_page.rs index 7de1399a..d45d7ce5 100644 --- a/src/gui/pages/inspect_page.rs +++ b/src/gui/pages/inspect_page.rs @@ -530,7 +530,7 @@ mod tests { #[test] fn test_table_titles_display_and_tooltip_values_for_each_language() { // check glyph len when adding new language... - assert_eq!(Language::ALL.len(), 18); + assert_eq!(Language::ALL.len(), 19); for report_col in ReportCol::ALL { for language in Language::ALL { let (title, title_small, tooltip_val) = From 75b6fdd052ae165aab3126ca794b9b2f145fc299 Mon Sep 17 00:00:00 2001 From: Giuliano Bellini s294739 Date: Tue, 13 Aug 2024 12:24:59 +0200 Subject: [PATCH 6/6] merge same match arms --- src/translations/translations.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/translations/translations.rs b/src/translations/translations.rs index e9218042..a61f3e84 100644 --- a/src/translations/translations.rs +++ b/src/translations/translations.rs @@ -441,7 +441,7 @@ pub fn hide_translation(language: Language) -> &'static str { pub fn network_adapter_translation(language: Language) -> &'static str { match language { - Language::EN => "Network adapter", + Language::EN | Language::VI => "Network adapter", Language::IT => "Adattatore di rete", Language::FR => "Carte réseau", Language::ES => "Adaptador de red", @@ -460,7 +460,6 @@ pub fn network_adapter_translation(language: Language) -> &'static str { Language::FI => "Verkkosovitin", Language::JA => "ネットワーク アダプター", Language::UZ => "Tarmoq adapteri", - Language::VI => "Network adapter", } }