diff --git a/.all-contributorsrc b/.all-contributorsrc
index ca6ce1c4..4702d2cb 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -97,6 +97,60 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "DocRAID",
+ "name": "Limdongju",
+ "avatar_url": "https://avatars.githubusercontent.com/u/69478178?v=4",
+ "profile": "https://github.com/DocRAID",
+ "contributions": [
+ "translation"
+ ]
+ },
+ {
+ "login": "fuzunspm",
+ "name": "Hüseyin Fahri Uzun",
+ "avatar_url": "https://avatars.githubusercontent.com/u/12132746?v=4",
+ "profile": "https://github.com/fuzunspm",
+ "contributions": [
+ "translation"
+ ]
+ },
+ {
+ "login": "jauderho",
+ "name": "Jauder Ho",
+ "avatar_url": "https://avatars.githubusercontent.com/u/13562?v=4",
+ "profile": "https://github.com/jauderho",
+ "contributions": [
+ "infra"
+ ]
+ },
+ {
+ "login": "amarao",
+ "name": "George Shuklin",
+ "avatar_url": "https://avatars.githubusercontent.com/u/652496?v=4",
+ "profile": "https://github.com/amarao",
+ "contributions": [
+ "translation"
+ ]
+ },
+ {
+ "login": "franciscoBSalgueiro",
+ "name": "Francisco Salgueiro",
+ "avatar_url": "https://avatars.githubusercontent.com/u/92053465?v=4",
+ "profile": "https://github.com/franciscoBSalgueiro",
+ "contributions": [
+ "translation"
+ ]
+ },
+ {
+ "login": "philclifford",
+ "name": "Phil Clifford",
+ "avatar_url": "https://avatars.githubusercontent.com/u/8797027?v=4",
+ "profile": "https://hachyderm.io/@phil8o",
+ "contributions": [
+ "platform"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index e349c0f5..74d83c9d 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -5,6 +5,14 @@
version: 2
updates:
+
+# Maintain dependencies for GitHub Actions
+- package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "daily"
+
+# Maintain dependencies for cargo
- package-ecosystem: cargo
directory: "/"
schedule:
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
index dc9900ea..90a2fcbd 100644
--- a/.github/workflows/rust.yml
+++ b/.github/workflows/rust.yml
@@ -21,7 +21,7 @@ jobs:
name: Rustfmt
runs-on: macos-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
profile: minimal
@@ -37,7 +37,7 @@ jobs:
name: Clippy
runs-on: macos-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
profile: minimal
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 16945267..662170f2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,20 @@
# Change Log
All Sniffnet releases with the relative changes are documented in this file.
+
+## [1.1.4] - UNRELEASED
+
+- Added new translations of the GUI:
+ * Portuguese 🇵🇹 ([#134](https://github.com/GyulyVGC/sniffnet/pull/134))
+ * Russian 🇷🇺 ([#151](https://github.com/GyulyVGC/sniffnet/pull/151))
+ * Korean 🇰🇷 ([#128](https://github.com/GyulyVGC/sniffnet/pull/128))
+ * Turkish 🇹🇷 ([#139](https://github.com/GyulyVGC/sniffnet/pull/139))
+ * ...the total number of supported languages is now 13 🎉
+- Changed adapter buttons format and improved volume slider layout (see [#119](https://github.com/GyulyVGC/sniffnet/issues/119) for more details or to give me further suggestions)
+- Scrollbars are now highlighted when hovering on the respective scrollable area
+- Fixed problem causing a crash on macOS when starting Sniffnet's Homebrew package or building from source in release mode ([#109](https://github.com/GyulyVGC/sniffnet/issues/109) - [#137](https://github.com/GyulyVGC/sniffnet/issues/137))
+
+
## [1.1.3] - 2023-04-04
- Added Romanian translation 🇷🇴 ([#113](https://github.com/GyulyVGC/sniffnet/pull/113))
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index 9c84e169..b305e716 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -6,16 +6,26 @@ A big shout-out to all the contributors of Sniffnet ([emoji key](https://allcont
diff --git a/Cargo.lock b/Cargo.lock
index 239566fd..4ce11d6d 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -24,6 +24,15 @@ version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046"
+[[package]]
+name = "addr2line"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+dependencies = [
+ "gimli",
+]
+
[[package]]
name = "adler"
version = "1.0.2"
@@ -129,6 +138,21 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+[[package]]
+name = "backtrace"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
[[package]]
name = "base64"
version = "0.21.0"
@@ -269,12 +293,6 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-[[package]]
-name = "cfg_aliases"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
-
[[package]]
name = "chrono"
version = "0.4.24"
@@ -395,6 +413,12 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+[[package]]
+name = "com-rs"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf43edc576402991846b093a7ca18a3477e0ef9c588cde84964b5d3e43016642"
+
[[package]]
name = "combine"
version = "4.6.6"
@@ -661,9 +685,9 @@ dependencies = [
[[package]]
name = "d3d12"
-version = "0.5.0"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "827914e1f53b1e0e025ecd3d967a7836b7bcb54520f90e21ef8df7b4d88a2759"
+checksum = "d8f0de2f5a8e7bd4a9eec0e3c781992a4ce1724f68aec7d7a3715344de8b39da"
dependencies = [
"bitflags",
"libloading 0.7.4",
@@ -1166,6 +1190,12 @@ dependencies = [
"weezl",
]
+[[package]]
+name = "gimli"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+
[[package]]
name = "glam"
version = "0.21.3"
@@ -1190,6 +1220,18 @@ dependencies = [
"web-sys",
]
+[[package]]
+name = "glow"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e007a07a24de5ecae94160f141029e9a347282cfe25d1d58d85d845cf3130f1"
+dependencies = [
+ "js-sys",
+ "slotmap",
+ "wasm-bindgen",
+ "web-sys",
+]
+
[[package]]
name = "glow_glyph"
version = "0.5.1"
@@ -1197,7 +1239,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f4e62c64947b9a24fe20e2bba9ad819ecb506ef5c8df7ffc4737464c6df9510"
dependencies = [
"bytemuck",
- "glow",
+ "glow 0.11.2",
"glyph_brush",
"log",
]
@@ -1259,6 +1301,19 @@ dependencies = [
"bitflags",
]
+[[package]]
+name = "gpu-allocator"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce95f9e2e11c2c6fadfce42b5af60005db06576f231f5c92550fdded43c423e8"
+dependencies = [
+ "backtrace",
+ "log",
+ "thiserror",
+ "winapi",
+ "windows",
+]
+
[[package]]
name = "gpu-descriptor"
version = "0.2.3"
@@ -1291,9 +1346,9 @@ dependencies = [
[[package]]
name = "h2"
-version = "0.3.16"
+version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d"
+checksum = "66b91535aa35fea1523ad1b86cb6b53c28e0ae566ba4a460f4457e936cad7c6f"
dependencies = [
"bytes",
"fnv",
@@ -1326,6 +1381,21 @@ dependencies = [
"ahash",
]
+[[package]]
+name = "hassle-rs"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90601c6189668c7345fc53842cb3f3a3d872203d523be1b3cb44a36a3e62fb85"
+dependencies = [
+ "bitflags",
+ "com-rs",
+ "libc",
+ "libloading 0.7.4",
+ "thiserror",
+ "widestring",
+ "winapi",
+]
+
[[package]]
name = "hermit-abi"
version = "0.2.6"
@@ -1444,9 +1514,9 @@ dependencies = [
[[package]]
name = "iced"
-version = "0.8.0"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d11492d829f0035ed3fa9217faccf16e57a5612a74dc7c49822c6f6a5ab1b829"
+checksum = "efbddf356d01e9d41cd394a9d04d62bfd89650a30f12fda5839cabb8c4591c88"
dependencies = [
"iced_core",
"iced_futures",
@@ -1461,9 +1531,9 @@ dependencies = [
[[package]]
name = "iced_core"
-version = "0.8.0"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a571e43a4dea90e3a7a9f8bb40e4238d0847f9f9d862c87a6719e3e241dd6292"
+checksum = "11e1942e28dedee756cc27e67e7a838cdc1e59fb6bf9627ec9f709ab3b135782"
dependencies = [
"bitflags",
"instant",
@@ -1485,13 +1555,13 @@ dependencies = [
[[package]]
name = "iced_glow"
-version = "0.7.0"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d237909aab71ad4b0f005784f9530d3b352eb95b3514bed1a6eb9fc019e9fe04"
+checksum = "adc5b081015f5c75777c96ad75e2288916e7d444c97396d6d136517877ef9129"
dependencies = [
"bytemuck",
"euclid",
- "glow",
+ "glow 0.11.2",
"glow_glyph",
"glyph_brush",
"iced_graphics",
@@ -1501,9 +1571,9 @@ dependencies = [
[[package]]
name = "iced_graphics"
-version = "0.7.0"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d58ad90b769e97bd245946b03c4932f82841c8645a7cee47d99115c8b341e8aa"
+checksum = "338a6aff7db906537074ad0fe8b720cfdb9512cdfea43c628c76bd1cf50fdcc0"
dependencies = [
"bitflags",
"bytemuck",
@@ -1520,9 +1590,9 @@ dependencies = [
[[package]]
name = "iced_lazy"
-version = "0.5.0"
+version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "370ffb291ff5609ca488a2596df98a049b2a4d572c621aa0b2c586694ca327cf"
+checksum = "bdf1cb6b8cd90488d3a03fbf438ad42038cb83c81a0d61f3692c51875efdb818"
dependencies = [
"iced_native",
"ouroboros",
@@ -1530,23 +1600,24 @@ dependencies = [
[[package]]
name = "iced_native"
-version = "0.9.1"
+version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9942cdcd78591e816aae558721942aa366b03ed7f3f964b51de23c68ec78be7"
+checksum = "2b3dd42731b43f1ee0a028af35abefbb756956d093552d0f92f678628e6384fe"
dependencies = [
"iced_core",
"iced_futures",
"iced_style",
"num-traits",
+ "thiserror",
"twox-hash",
"unicode-segmentation",
]
[[package]]
name = "iced_style"
-version = "0.7.0"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad5eb9547d32b9ff9b019526657974112b86baab58b2b91b1624316b309700b6"
+checksum = "0e37333dc2991201140302cd0d4cea051bd37ca3671d5008ec85df86d232ff30"
dependencies = [
"iced_core",
"once_cell",
@@ -1555,9 +1626,9 @@ dependencies = [
[[package]]
name = "iced_wgpu"
-version = "0.9.0"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fbdcca29092b56f6715dfbc183796b627d3ead82883594e7d6babf5c76151c45"
+checksum = "478803c56061f567ce5ddf223b20d11d3c118cc46bb0d0552370dc65cdc4cb9c"
dependencies = [
"bitflags",
"bytemuck",
@@ -1576,9 +1647,9 @@ dependencies = [
[[package]]
name = "iced_winit"
-version = "0.8.0"
+version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ef7747251a0b4a417589c5a8139d1858edf88d05566018a1a0b772d0229ef68"
+checksum = "8a59ea3a85149a6a1f9e92b6c740ce90f04e5c7d848cfd05742336863fceb955"
dependencies = [
"iced_futures",
"iced_graphics",
@@ -2021,9 +2092,9 @@ checksum = "16cf681a23b4d0a43fc35024c176437f9dcd818db34e0f42ab456a0ee5ad497b"
[[package]]
name = "naga"
-version = "0.10.0"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "262d2840e72dbe250e8cf2f522d080988dfca624c4112c096238a4845f591707"
+checksum = "5eafe22a23b797c9bc227c6c896419b26b5bb88fa903417a3adaed08778850d5"
dependencies = [
"bit-set",
"bitflags",
@@ -2293,6 +2364,15 @@ dependencies = [
"objc",
]
+[[package]]
+name = "object"
+version = "0.30.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+dependencies = [
+ "memchr",
+]
+
[[package]]
name = "oboe"
version = "0.5.0"
@@ -2608,9 +2688,9 @@ checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142"
[[package]]
name = "plotters-iced"
-version = "0.7.0"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc932e1abce0251e908cf30bde8e66c30db30753a30b1b72f64846824783e0bf"
+checksum = "83affd565dbe7b16a6bb4935ab5d3a91abc88a8e75ca29a17306f298495c7c8e"
dependencies = [
"iced_graphics",
"iced_native",
@@ -2905,6 +2985,12 @@ dependencies = [
"unicode-ident",
]
+[[package]]
+name = "rustc-demangle"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b"
+
[[package]]
name = "rustc-hash"
version = "1.1.0"
@@ -3034,18 +3120,18 @@ checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a"
[[package]]
name = "serde"
-version = "1.0.159"
+version = "1.0.160"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065"
+checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.159"
+version = "1.0.160"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585"
+checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
dependencies = [
"proc-macro2",
"quote",
@@ -3810,15 +3896,17 @@ checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
[[package]]
name = "wgpu"
-version = "0.14.2"
+version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81f643110d228fd62a60c5ed2ab56c4d5b3704520bd50561174ec4ec74932937"
+checksum = "d745a1b6d91d85c33defbb29f0eee0450e1d2614d987e14bf6baf26009d132d7"
dependencies = [
"arrayvec 0.7.2",
+ "cfg-if",
"js-sys",
"log",
"naga",
"parking_lot 0.12.1",
+ "profiling",
"raw-window-handle 0.5.0",
"smallvec",
"static_assertions",
@@ -3832,14 +3920,13 @@ dependencies = [
[[package]]
name = "wgpu-core"
-version = "0.14.2"
+version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6000d1284ef8eec6076fd5544a73125fd7eb9b635f18dceeb829d826f41724ca"
+checksum = "7131408d940e335792645a98f03639573b0480e9e2e7cddbbab74f7c6d9f3fff"
dependencies = [
"arrayvec 0.7.2",
"bit-vec",
"bitflags",
- "cfg_aliases",
"codespan-reporting",
"fxhash",
"log",
@@ -3856,9 +3943,9 @@ dependencies = [
[[package]]
name = "wgpu-hal"
-version = "0.14.1"
+version = "0.15.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3cc320a61acb26be4f549c9b1b53405c10a223fbfea363ec39474c32c348d12f"
+checksum = "bdcf61a283adc744bb5453dd88ea91f3f86d5ca6b027661c6c73c7734ae0288b"
dependencies = [
"android_system_properties",
"arrayvec 0.7.2",
@@ -3870,11 +3957,14 @@ dependencies = [
"d3d12",
"foreign-types 0.3.2",
"fxhash",
- "glow",
+ "glow 0.12.1",
"gpu-alloc",
+ "gpu-allocator",
"gpu-descriptor",
+ "hassle-rs",
"js-sys",
"khronos-egl",
+ "libc",
"libloading 0.7.4",
"log",
"metal",
@@ -3895,18 +3985,20 @@ dependencies = [
[[package]]
name = "wgpu-types"
-version = "0.14.1"
+version = "0.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb6b28ef22cac17b9109b25b3bf8c9a103eeb293d7c5f78653979b09140375f6"
+checksum = "32444e121b0bd00cb02c0de32fde457a9491bd44e03e7a5db6df9b1da2f6f110"
dependencies = [
"bitflags",
+ "js-sys",
+ "web-sys",
]
[[package]]
name = "wgpu_glyph"
-version = "0.18.0"
+version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0cafb82773e0f124a33674dab5de4dff73175aeb921949047ab014efb58fb446"
+checksum = "e25440d5f32ec39de49c57c15c2d3f9133a7939b069b5ad07e5afd8b78fb8adc"
dependencies = [
"bytemuck",
"glyph_brush",
@@ -3914,6 +4006,12 @@ dependencies = [
"wgpu",
]
+[[package]]
+name = "widestring"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983"
+
[[package]]
name = "winapi"
version = "0.3.9"
diff --git a/Cargo.toml b/Cargo.toml
index 9f780948..f1005f01 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -31,13 +31,13 @@ chrono = { version = "0.4.24", default_features = false, features = ["clock"] }
thousands = "0.2.0"
indexmap = "1.9.3"
plotters = { version = "0.3.4", default_features = false, features = ["area_series"] }
-iced = { version = "0.8.0", features = ["tokio", "image"] }
-iced_native = "0.9.1"
-iced_lazy = "0.5.0"
-plotters-iced = "0.7.0"
+iced = { version = "0.9.0", features = ["tokio", "image"] }
+iced_native = "0.10.1"
+iced_lazy = "0.6.1"
+plotters-iced = "0.8.0"
maxminddb = "0.23.0"
confy = "0.5.1"
-serde = { version = "1.0.159", default_features = false, features = ["derive"] }
+serde = { version = "1.0.160", default_features = false, features = ["derive"] }
rodio = { version = "0.17.1", default_features = false, features = ["mp3"] }
reqwest = { version = "0.11.16", features = ["json", "blocking"] }
diff --git a/README.md b/README.md
index d254f1fb..4f0f4591 100644
--- a/README.md
+++ b/README.md
@@ -302,6 +302,13 @@ If you have problems after having installed Sniffnet through the provided instal
it could be due to your OS not being compatible with the pre-built binaries I generated for you.
Reach me out, and I'll try to generate an installer for your specific operating system.
+### Rendering problems
+
+In some cases, especially if you are running on an old architecture, the `wgpu` default renderer used by [iced](https://github.com/iced-rs/iced)
+may cause some problems that could prevent you from running Sniffnet.
+In this case, you can try building the application from the [`glow-renderer`](https://github.com/GyulyVGC/sniffnet/tree/glow-renderer)
+branch, which uses the `glow` renderer.
+
### ***In any case don't hesitate to [open an issue](https://github.com/GyulyVGC/sniffnet/issues), and I will do my best to help you!***
diff --git a/resources/fonts/full/subset_characters.txt b/resources/fonts/full/subset_characters.txt
index 07489096..04138b46 100644
--- a/resources/fonts/full/subset_characters.txt
+++ b/resources/fonts/full/subset_characters.txt
@@ -96,10 +96,12 @@ z
¿
Ê
Î
+Ö
Ü
à
á
â
+ã
ä
ç
è
@@ -111,6 +113,7 @@ z
ñ
ó
ô
+õ
ö
ù
ú
@@ -120,9 +123,14 @@ z
ą
ć
ę
+ğ
+İ
+ı
ł
ń
ś
+Ş
+ş
ź
ż
Ș
@@ -132,16 +140,20 @@ z
В
Г
Д
+Е
З
+И
К
Л
М
Н
О
П
+Р
С
Т
У
+Ф
Ч
Ш
Щ
@@ -172,13 +184,16 @@ z
ч
ш
щ
+ъ
+ы
ь
+э
ю
я
+ё
є
і
ї
-⌘
⏎
❤
一
@@ -370,4 +385,183 @@ z
页
题
黑
+가
+감
+값
+개
+검
+것
+게
+겠
+겨
+결
+계
+고
+과
+관
+교
+국
+그
+근
+기
+까
+네
+넷
+눌
+는
+능
+니
+다
+당
+대
+댑
+데
+뎁
+도
+되
+된
+될
+됩
+두
+둘
+드
+들
+따
+때
+라
+랑
+래
+러
+레
+려
+련
+로
+료
+류
+륨
+른
+를
+리
+림
+링
+마
+만
+말
+면
+모
+몽
+문
+바
+받
+발
+버
+별
+보
+본
+볼
+부
+분
+사
+삭
+새
+생
+서
+석
+선
+설
+성
+세
+션
+셨
+소
+속
+송
+수
+숨
+스
+습
+시
+신
+아
+않
+알
+았
+애
+어
+언
+없
+었
+에
+여
+연
+열
+였
+오
+올
+요
+용
+우
+운
+워
+위
+유
+으
+을
+음
+의
+이
+인
+일
+임
+있
+자
+장
+재
+적
+전
+정
+제
+종
+주
+줄
+중
+즐
+지
+직
+찰
+찾
+체
+초
+총
+최
+추
+케
+콜
+크
+킷
+타
+태
+택
+터
+테
+토
+트
+패
+페
+표
+프
+플
+픽
+필
+하
+한
+할
+합
+해
+현
+화
+확
+환
+활
+효
,
diff --git a/resources/fonts/subset/sarasa-mono-sc-bold.subset.ttf b/resources/fonts/subset/sarasa-mono-sc-bold.subset.ttf
index 73cbe7e9..226a73cb 100644
Binary files a/resources/fonts/subset/sarasa-mono-sc-bold.subset.ttf and b/resources/fonts/subset/sarasa-mono-sc-bold.subset.ttf differ
diff --git a/resources/fonts/subset/sarasa-mono-sc-regular.subset.ttf b/resources/fonts/subset/sarasa-mono-sc-regular.subset.ttf
index d77b6efa..f7aae9f6 100644
Binary files a/resources/fonts/subset/sarasa-mono-sc-regular.subset.ttf and b/resources/fonts/subset/sarasa-mono-sc-regular.subset.ttf differ
diff --git a/src/gui/components/radio.rs b/src/gui/components/radio.rs
index 9ee9eb8b..ae98d56e 100644
--- a/src/gui/components/radio.rs
+++ b/src/gui/components/radio.rs
@@ -31,8 +31,8 @@ pub fn ip_version_radios(
for option in IpVersion::ALL {
ret_val = ret_val.push(
Radio::new(
- option,
option.get_radio_label(language),
+ option,
Some(active),
Message::IpVersionSelection,
)
@@ -62,8 +62,8 @@ pub fn transport_protocol_radios(
for option in TransProtocol::ALL {
ret_val = ret_val.push(
Radio::new(
- option,
option.get_radio_label(language),
+ option,
Some(active),
Message::TransportProtocolSelection,
)
@@ -92,8 +92,8 @@ pub fn language_radios(
.align_items(Alignment::Center)
.push(
Radio::new(
- *option,
format!("{} ({:?})", option.get_radio_label(), option),
+ *option,
Some(active),
Message::LanguageSelection,
)
@@ -124,8 +124,8 @@ pub fn sound_packets_threshold_radios(
for option in Sound::ALL {
ret_val = ret_val.push(
Radio::new(
- option,
option.get_radio_label(language),
+ option,
Some(packets_notification.sound),
|value| {
Message::UpdateNotificationSettings(
@@ -161,8 +161,8 @@ pub fn sound_bytes_threshold_radios(
for option in Sound::ALL {
ret_val = ret_val.push(
Radio::new(
- option,
option.get_radio_label(language),
+ option,
Some(bytes_notification.sound),
|value| {
Message::UpdateNotificationSettings(
@@ -198,8 +198,8 @@ pub fn sound_favorite_radios(
for option in Sound::ALL {
ret_val = ret_val.push(
Radio::new(
- option,
option.get_radio_label(language),
+ option,
Some(favorite_notification.sound),
|value| {
Message::UpdateNotificationSettings(
@@ -241,8 +241,8 @@ pub fn chart_radios(
for option in ChartType::ALL {
ret_val = ret_val.push(
Radio::new(
- option,
option.get_radio_label(language),
+ option,
Some(active),
Message::ChartSelection,
)
@@ -276,8 +276,8 @@ pub fn report_radios(
for option in ReportType::ALL {
ret_val = ret_val.push(
Radio::new(
- option,
option.get_radio_label(language),
+ option,
Some(active),
Message::ReportSelection,
)
diff --git a/src/gui/pages/initial_page.rs b/src/gui/pages/initial_page.rs
index 3ae46c4f..51375e17 100644
--- a/src/gui/pages/initial_page.rs
+++ b/src/gui/pages/initial_page.rs
@@ -3,7 +3,7 @@
//! It contains elements to select network adapter and traffic filters.
use iced::widget::{
- button, horizontal_space, vertical_space, Column, Container, PickList, Radio, Row, Scrollable,
+ button, horizontal_space, vertical_space, Button, Column, Container, PickList, Row, Scrollable,
Text, Tooltip,
};
use iced::Length::FillPortion;
@@ -138,7 +138,7 @@ fn button_start(style: StyleType, language: Language) -> Tooltip<'static, Messag
fn get_col_adapter(sniffer: &Sniffer, font: Font) -> Column {
let mut dev_str_list = vec![];
for dev in Device::list().expect("Error retrieving device list\r\n") {
- let mut dev_str = "\n".to_string();
+ let mut dev_str = String::new();
let name = dev.name;
match dev.desc {
None => {
@@ -165,7 +165,6 @@ fn get_col_adapter(sniffer: &Sniffer, font: Font) -> Column {
let address_string = addr.addr.to_string();
dev_str.push_str(&format!("\n {address_string}"));
}
- dev_str.push_str("\n ");
dev_str_list.push((name, dev_str));
}
@@ -183,27 +182,24 @@ fn get_col_adapter(sniffer: &Sniffer, font: Font) -> Column {
Scrollable::new(dev_str_list.iter().fold(
Column::new().padding(13).spacing(5),
|scroll_adapters, adapter| {
- let name = &adapter.0;
+ let name = adapter.0.clone();
+ let description = adapter.1.clone();
scroll_adapters.push(
- Container::new(
- Radio::new(name, &adapter.1, Some(&sniffer.device.name), |name| {
- Message::AdapterSelection(name.to_string())
- })
- .font(font)
- .size(15)
+ Button::new(Text::new(description).font(font))
+ .padding([20, 30])
.width(Length::Fill)
- .style(>::into(
- StyleTuple(sniffer.style, ElementType::Standard),
- )),
- )
- .padding(10)
- .style(>::into(
- StyleTuple(sniffer.style, ElementType::BorderedRound),
- )),
+ .style(
+ StyleTuple(
+ sniffer.style,
+ if name == sniffer.device.name {
+ ElementType::BorderedRoundSelected
+ } else {
+ ElementType::BorderedRound
+ },
+ )
+ .into(),
+ )
+ .on_press(Message::AdapterSelection(name)),
)
},
))
diff --git a/src/gui/pages/settings_language_page.rs b/src/gui/pages/settings_language_page.rs
index e81ccdd3..3a299828 100644
--- a/src/gui/pages/settings_language_page.rs
+++ b/src/gui/pages/settings_language_page.rs
@@ -1,5 +1,4 @@
-use iced::alignment::Horizontal;
-use iced::widget::{Column, Container, Row, Text};
+use iced::widget::{Column, Container, Row};
use iced::Length::Fixed;
use iced::{Alignment, Length};
use iced_native::widget::vertical_space;
@@ -23,10 +22,13 @@ pub fn settings_language_page(sniffer: &Sniffer) -> Container {
language_radios(language_active, &Language::COL1, font, sniffer.style);
let col_language_radio_2 =
language_radios(language_active, &Language::COL2, font, sniffer.style);
+ let col_language_radio_3 =
+ language_radios(language_active, &Language::COL3, font, sniffer.style);
let row_language_radio = Row::new()
.spacing(50)
.push(col_language_radio_1)
- .push(col_language_radio_2);
+ .push(col_language_radio_2)
+ .push(col_language_radio_3);
let content = Column::new()
.align_items(Alignment::Center)
@@ -54,24 +56,8 @@ pub fn settings_language_page(sniffer: &Sniffer) -> Container {
.font(font)
.size(FONT_SIZE_SUBTITLE),
)
- .push(vertical_space(Fixed(20.0)))
- .push(row_language_radio)
.push(vertical_space(Fixed(30.0)))
- .push(
- Container::new(
- Text::new(
- "Would you like to add support for your native language?\n\n\
- Give a look at Sniffnet issues on GitHub.",
- )
- .horizontal_alignment(Horizontal::Center)
- .width(Length::Fixed(500.0))
- .font(font),
- )
- .padding(10)
- .style(>::into(
- StyleTuple(sniffer.style, ElementType::BorderedRound),
- )),
- );
+ .push(row_language_radio);
Container::new(content)
.height(Fixed(400.0))
diff --git a/src/gui/pages/settings_notifications_page.rs b/src/gui/pages/settings_notifications_page.rs
index 772f97a8..c26a182c 100644
--- a/src/gui/pages/settings_notifications_page.rs
+++ b/src/gui/pages/settings_notifications_page.rs
@@ -328,15 +328,15 @@ fn input_group_packets(
} else {
curr_threshold_str
},
- move |value| {
- let packets_notification =
- PacketsNotification::from(&value, Some(packets_notification));
- Message::UpdateNotificationSettings(
- Notification::Packets(packets_notification),
- false,
- )
- },
)
+ .on_input(move |value| {
+ let packets_notification =
+ PacketsNotification::from(&value, Some(packets_notification));
+ Message::UpdateNotificationSettings(
+ Notification::Packets(packets_notification),
+ false,
+ )
+ })
.padding([0, 0, 0, 10])
.font(font)
.width(Length::Fixed(100.0))
@@ -377,15 +377,11 @@ fn input_group_bytes(
} else {
&curr_threshold_str
},
- move |value| {
- let bytes_notification =
- BytesNotification::from(&value, Some(bytes_notification));
- Message::UpdateNotificationSettings(
- Notification::Bytes(bytes_notification),
- false,
- )
- },
)
+ .on_input(move |value| {
+ let bytes_notification = BytesNotification::from(&value, Some(bytes_notification));
+ Message::UpdateNotificationSettings(Notification::Bytes(bytes_notification), false)
+ })
.padding([0, 0, 0, 10])
.font(font)
.width(Length::Fixed(100.0))
@@ -429,9 +425,9 @@ fn volume_slider(language: Language, style: StyleType, volume: u8) -> Container<
ElementType::Standard,
))),
)
- .push(horizontal_space(Length::Fixed(10.0)))
+ .push(horizontal_space(Length::Fixed(15.0)))
.push(
- Text::new('Z'.to_string())
+ Text::new("Z")
.vertical_alignment(Vertical::Center)
.size(20)
.font(ICONS),
diff --git a/src/gui/pages/settings_style_page.rs b/src/gui/pages/settings_style_page.rs
index 34bf4e85..d11fd309 100644
--- a/src/gui/pages/settings_style_page.rs
+++ b/src/gui/pages/settings_style_page.rs
@@ -114,6 +114,16 @@ fn get_palette_container(
.height(Length::Fixed(130.0))
.width(Length::Fixed(360.0))
.padding(5)
- .style(StyleTuple(style, ElementType::BorderedRound).into())
+ .style(
+ StyleTuple(
+ style,
+ if on_press.eq(&style) {
+ ElementType::BorderedRoundSelected
+ } else {
+ ElementType::BorderedRound
+ },
+ )
+ .into(),
+ )
.on_press(Message::Style(on_press))
}
diff --git a/src/gui/pages/types/running_page.rs b/src/gui/pages/types/running_page.rs
index 39b51f10..a65167dc 100644
--- a/src/gui/pages/types/running_page.rs
+++ b/src/gui/pages/types/running_page.rs
@@ -46,12 +46,14 @@ mod tests {
#[test]
fn test_previous_running_page() {
assert_eq!(RunningPage::Overview.previous(), RunningPage::Notifications);
- assert_eq!(RunningPage::Notifications.previous(), RunningPage::Overview);
+ assert_eq!(RunningPage::Notifications.previous(), RunningPage::Inspect);
+ assert_eq!(RunningPage::Inspect.previous(), RunningPage::Overview);
}
#[test]
fn test_next_running_page() {
- assert_eq!(RunningPage::Overview.next(), RunningPage::Notifications);
+ assert_eq!(RunningPage::Overview.next(), RunningPage::Inspect);
+ assert_eq!(RunningPage::Inspect.next(), RunningPage::Notifications);
assert_eq!(RunningPage::Notifications.next(), RunningPage::Overview);
}
}
diff --git a/src/gui/styles/button.rs b/src/gui/styles/button.rs
index 64dadb30..7704314b 100644
--- a/src/gui/styles/button.rs
+++ b/src/gui/styles/button.rs
@@ -27,11 +27,16 @@ impl button::StyleSheet for StyleTuple {
StyleTuple(_, ElementType::Starred) => STARRED,
StyleTuple(_, ElementType::Badge) => colors.secondary,
StyleTuple(_, ElementType::BorderedRound) => colors.round_containers,
+ StyleTuple(_, ElementType::BorderedRoundSelected) => {
+ mix_colors(colors.primary, colors.buttons)
+ }
_ => colors.buttons,
})),
border_radius: match self {
StyleTuple(_, ElementType::TabActive | ElementType::TabInactive) => 0.0,
- StyleTuple(_, ElementType::BorderedRound) => 12.0,
+ StyleTuple(_, ElementType::BorderedRound | ElementType::BorderedRoundSelected) => {
+ 12.0
+ }
_ => BORDER_BUTTON_RADIUS,
},
border_width: match self {
@@ -71,7 +76,9 @@ impl button::StyleSheet for StyleTuple {
})),
border_radius: match self {
StyleTuple(_, ElementType::TabActive | ElementType::TabInactive) => 0.0,
- StyleTuple(_, ElementType::BorderedRound) => 12.0,
+ StyleTuple(_, ElementType::BorderedRound | ElementType::BorderedRoundSelected) => {
+ 12.0
+ }
_ => BORDER_BUTTON_RADIUS,
},
border_width: match self {
@@ -80,12 +87,14 @@ impl button::StyleSheet for StyleTuple {
ElementType::Starred
| ElementType::NotStarred
| ElementType::TabActive
- | ElementType::TabInactive,
+ | ElementType::TabInactive
+ | ElementType::BorderedRound,
) => 0.0,
_ => BORDER_WIDTH,
},
border_color: match self {
StyleTuple(_, ElementType::Alert) => Color::new(1.0, 0.0, 0.0, 1.0),
+ StyleTuple(_, ElementType::BorderedRound) => colors.round_borders,
_ => colors.secondary,
},
text_color: match self {
diff --git a/src/gui/styles/scrollbar.rs b/src/gui/styles/scrollbar.rs
index 9fd2ee33..58605df0 100644
--- a/src/gui/styles/scrollbar.rs
+++ b/src/gui/styles/scrollbar.rs
@@ -33,7 +33,7 @@ impl iced::widget::scrollable::StyleSheet for StyleTuple {
}
}
- fn hovered(&self, _: &Self::Style) -> Scrollbar {
+ fn hovered(&self, _: &Self::Style, is_mouse_over_scrollbar: bool) -> Scrollbar {
let colors = get_colors(self.0);
Scrollbar {
background: Some(Background::Color(colors.round_borders)),
@@ -43,7 +43,11 @@ impl iced::widget::scrollable::StyleSheet for StyleTuple {
scroller: Scroller {
color: colors.secondary,
border_radius: BORDER_ROUNDED_RADIUS,
- border_width: BORDER_WIDTH * 1.5,
+ border_width: if is_mouse_over_scrollbar {
+ BORDER_WIDTH * 1.25
+ } else {
+ BORDER_WIDTH * 1.75
+ },
border_color: Color::TRANSPARENT,
},
}
diff --git a/src/gui/styles/slider.rs b/src/gui/styles/slider.rs
index 28f1ecc0..5bffcf80 100644
--- a/src/gui/styles/slider.rs
+++ b/src/gui/styles/slider.rs
@@ -1,11 +1,12 @@
//! Slider style
use iced::widget::slider::Appearance;
-use iced_native::widget::slider::Handle;
+use iced_native::widget::slider::{Handle, Rail};
use iced_native::widget::vertical_slider::HandleShape;
use crate::get_colors;
use crate::gui::styles::style_constants::BORDER_WIDTH;
+use crate::gui::styles::types::palette::mix_colors;
use crate::gui::styles::types::style_tuple::StyleTuple;
impl From for iced::theme::Slider {
@@ -20,9 +21,12 @@ impl iced::widget::slider::StyleSheet for StyleTuple {
fn active(&self, _: &Self::Style) -> Appearance {
let colors = get_colors(self.0);
Appearance {
- rail_colors: (colors.secondary, colors.primary),
+ rail: Rail {
+ colors: (colors.secondary, colors.buttons),
+ width: 3.0,
+ },
handle: Handle {
- shape: HandleShape::Circle { radius: 7.0 },
+ shape: HandleShape::Circle { radius: 5.0 },
color: colors.primary,
border_width: BORDER_WIDTH,
border_color: colors.secondary,
@@ -33,10 +37,13 @@ impl iced::widget::slider::StyleSheet for StyleTuple {
fn hovered(&self, _: &Self::Style) -> Appearance {
let colors = get_colors(self.0);
Appearance {
- rail_colors: (colors.secondary, colors.secondary),
+ rail: Rail {
+ colors: (colors.secondary, colors.buttons),
+ width: 3.0,
+ },
handle: Handle {
- shape: HandleShape::Circle { radius: 7.0 },
- color: colors.secondary,
+ shape: HandleShape::Circle { radius: 8.0 },
+ color: mix_colors(colors.primary, colors.buttons),
border_width: BORDER_WIDTH,
border_color: colors.secondary,
},
@@ -46,10 +53,13 @@ impl iced::widget::slider::StyleSheet for StyleTuple {
fn dragging(&self, _: &Self::Style) -> Appearance {
let colors = get_colors(self.0);
Appearance {
- rail_colors: (colors.secondary, colors.secondary),
+ rail: Rail {
+ colors: (colors.secondary, colors.buttons),
+ width: 3.0,
+ },
handle: Handle {
- shape: HandleShape::Circle { radius: 7.0 },
- color: colors.secondary,
+ shape: HandleShape::Circle { radius: 8.0 },
+ color: mix_colors(colors.primary, colors.buttons),
border_width: BORDER_WIDTH,
border_color: colors.secondary,
},
diff --git a/src/gui/styles/text_input.rs b/src/gui/styles/text_input.rs
index 7bc4acaa..04e278b4 100644
--- a/src/gui/styles/text_input.rs
+++ b/src/gui/styles/text_input.rs
@@ -1,5 +1,6 @@
//! Text Input style
+use iced::widget::text_input;
use iced::widget::text_input::Appearance;
use iced::{Background, Color};
@@ -22,6 +23,7 @@ impl iced::widget::text_input::StyleSheet for StyleTuple {
border_radius: 0.0,
border_width: 1.0,
border_color: colors.round_borders,
+ icon_color: colors.text_body,
}
}
@@ -32,6 +34,7 @@ impl iced::widget::text_input::StyleSheet for StyleTuple {
border_radius: 0.0,
border_width: 1.0,
border_color: colors.secondary,
+ icon_color: colors.text_body,
}
}
@@ -62,6 +65,15 @@ impl iced::widget::text_input::StyleSheet for StyleTuple {
border_radius: 0.0,
border_width: 1.0,
border_color: colors.secondary,
+ icon_color: colors.text_body,
}
}
+
+ fn disabled(&self, style: &Self::Style) -> Appearance {
+ text_input::StyleSheet::active(self, style)
+ }
+
+ fn disabled_color(&self, _style: &Self::Style) -> Color {
+ Color::BLACK
+ }
}
diff --git a/src/gui/styles/types/element_type.rs b/src/gui/styles/types/element_type.rs
index bc30dfec..97098d1b 100644
--- a/src/gui/styles/types/element_type.rs
+++ b/src/gui/styles/types/element_type.rs
@@ -4,6 +4,7 @@ pub enum ElementType {
Standard,
Headers,
BorderedRound,
+ BorderedRoundSelected,
TabActive,
TabInactive,
Starred,
diff --git a/src/gui/types/sniffer.rs b/src/gui/types/sniffer.rs
index 828ac97b..27fd9723 100644
--- a/src/gui/types/sniffer.rs
+++ b/src/gui/types/sniffer.rs
@@ -1131,14 +1131,14 @@ mod tests {
assert_eq!(sniffer.running_page, RunningPage::Overview);
// switch with closed setting => change running page
sniffer.update(Message::SwitchPage(true));
- assert_eq!(sniffer.running_page, RunningPage::Notifications);
+ assert_eq!(sniffer.running_page, RunningPage::Inspect);
assert_eq!(sniffer.settings_page, None);
// switch with opened settings => change settings
sniffer.update(Message::OpenLastSettings);
- assert_eq!(sniffer.running_page, RunningPage::Notifications);
+ assert_eq!(sniffer.running_page, RunningPage::Inspect);
assert_eq!(sniffer.settings_page, Some(SettingsPage::Notifications));
sniffer.update(Message::SwitchPage(true));
- assert_eq!(sniffer.running_page, RunningPage::Notifications);
+ assert_eq!(sniffer.running_page, RunningPage::Inspect);
assert_eq!(sniffer.settings_page, Some(SettingsPage::Appearance));
}
}
diff --git a/src/main.rs b/src/main.rs
index 7c8ef5f8..ebd9b345 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -3,7 +3,7 @@
use std::sync::{Arc, Condvar, Mutex};
use std::{panic, process, thread};
-use iced::window::Position;
+use iced::window::{PlatformSpecific, Position};
use iced::{window, Application, Settings};
use chart::types::chart_type::ChartType;
@@ -106,6 +106,7 @@ pub fn main() -> iced::Result {
transparent: false,
always_on_top: false,
icon: None,
+ platform_specific: PlatformSpecific::default(),
},
flags: Sniffer::new(
current_capture_id1,
diff --git a/src/translations/translations.rs b/src/translations/translations.rs
index a231dee4..007c95dc 100644
--- a/src/translations/translations.rs
+++ b/src/translations/translations.rs
@@ -13,6 +13,10 @@ pub fn choose_adapters_translation(language: Language) -> Text<'static> {
Language::UK => "Вибрати мережевий адаптер для інспекції",
Language::ZH => "选择需要监控的网络适配器",
Language::RO => "Selectați adaptor de rețea pentru a inspecta",
+ Language::KO => "검사할 네트워크 어댑터 선택",
+ Language::TR => "İncelemek için bir ağ adaptörü seçiniz",
+ Language::RU => "Выберите сетевой адаптер для инспекции",
+ Language::PT => "Selecione o adaptador de rede a inspecionar",
})
}
@@ -27,6 +31,10 @@ pub fn application_protocol_translation(language: Language) -> &'static str {
Language::UK => "Протокол аплікації",
Language::ZH => "目标应用层协议",
Language::RO => "Protocol aplicație",
+ Language::KO => "어플리케이션 프로토콜",
+ Language::TR => "Uygulama protokolü",
+ Language::RU => "Прикладной протокол",
+ Language::PT => "Protocolo de aplicação",
}
}
@@ -41,18 +49,25 @@ pub fn select_filters_translation(language: Language) -> Text<'static> {
Language::UK => "Вибрати фільтри, які мають бути застосовані до мережевого трафіку",
Language::ZH => "选择需要监控的目标",
Language::RO => "Selectați filtre pentru traficul de rețea",
+ Language::KO => "네트워크 트레픽에 적용할 필터 선택",
+ Language::TR => "Ağ trafiğine uygulanacak filtreleri seçiniz",
+ Language::RU => "Выберите фильтры для применения к сетевому трафику",
+ Language::PT => "Selecione os filtros a serem aplicados no tráfego de rede",
})
}
pub fn start_translation(language: Language) -> &'static str {
match language {
- Language::EN | Language::DE | Language::RO => "Start!",
+ Language::EN | Language::DE | Language::RO | Language::KO => "Start!",
Language::IT => "Avvia!",
Language::FR => "Commencer!",
Language::ES => "¡Empieza!",
Language::PL => "Rozpocznij!",
Language::UK => "Почати!",
Language::ZH => "开始!",
+ Language::TR => "Başla!",
+ Language::RU => "Начать!",
+ Language::PT => "Começar!",
}
}
@@ -62,10 +77,13 @@ pub fn address_translation(language: Language) -> &'static str {
Language::IT => "\nIndirizzo:",
Language::FR | Language::DE => "\nAdresse:",
Language::ES => "\nDirección:",
- Language::PL => "\nAdres:",
+ Language::PL | Language::TR => "\nAdres:",
Language::UK => "\nАдреса:",
Language::ZH => "\n网络地址:",
Language::RO => "\nAdresă:",
+ Language::KO => "\n주소:",
+ Language::RU => "\nАдрес:",
+ Language::PT => "\nEndereço:",
}
}
@@ -80,6 +98,10 @@ pub fn addresses_translation(language: Language) -> &'static str {
Language::UK => "\nАдреси:",
Language::ZH => "\n网络地址:",
Language::RO => "\nAdrese:",
+ Language::KO => "\n주소:",
+ Language::TR => "\nAdresler:",
+ Language::RU => "\nАдреса:",
+ Language::PT => "\nEndereços:",
}
}
@@ -94,6 +116,10 @@ pub fn ip_version_translation(language: Language) -> Text<'static> {
Language::UK => "Версія IP",
Language::ZH => "目标IP协议版本",
Language::RO => "Versiune IP",
+ Language::KO => "IP 버전",
+ Language::TR => "IP versiyonu",
+ Language::RU => "Версия IP",
+ Language::PT => "Versão de IP",
})
}
@@ -102,12 +128,15 @@ pub fn transport_protocol_translation(language: Language) -> &'static str {
Language::EN => "Transport protocol",
Language::IT => "Protocollo di trasporto",
Language::FR => "Protocole de transport",
- Language::ES => "Protocolo de transporte",
+ Language::ES | Language::PT => "Protocolo de transporte",
Language::PL => "Protokół transportowy",
Language::DE => "Netzwerkprotokoll",
Language::UK => "Транспортний протокол",
Language::ZH => "目标传输协议",
Language::RO => "Protocol de transport",
+ Language::KO => "전송 프로토콜",
+ Language::TR => "İletişim protokolü",
+ Language::RU => "Транспортный протокол",
}
}
@@ -122,6 +151,10 @@ pub fn traffic_rate_translation(language: Language) -> Text<'static> {
Language::UK => "Швидкість руху:",
Language::ZH => "网络速率图:",
Language::RO => "Rata de trafic:",
+ Language::KO => "트레픽 속도:",
+ Language::TR => "Trafik oranı:",
+ Language::RU => "Cкорость трафика:",
+ Language::PT => "Taxa de tráfego:",
})
}
@@ -136,6 +169,10 @@ pub fn relevant_connections_translation(language: Language) -> Text<'static> {
Language::UK => "Важливі підключення:",
Language::ZH => "连接详情:",
Language::RO => "Conexiuni relevante:",
+ Language::KO => "관련 연결:",
+ Language::TR => "İlgili bağlantılar:",
+ Language::RU => "Важные подключения:",
+ Language::PT => "Conexões relevantes:",
})
}
@@ -150,6 +187,10 @@ pub fn settings_translation(language: Language) -> &'static str {
Language::UK => "Налаштування",
Language::ZH => "设置",
Language::RO => "Setări",
+ Language::KO => "설정",
+ Language::TR => "Ayarlar",
+ Language::RU => "Настройки",
+ Language::PT => "Configurações",
}
}
@@ -164,6 +205,10 @@ pub fn yes_translation(language: Language) -> Text<'static> {
Language::UK => "Так",
Language::ZH => "是",
Language::RO => "Da",
+ Language::KO => "네",
+ Language::TR => "Evet",
+ Language::RU => "Да",
+ Language::PT => "Sim",
})
}
@@ -178,6 +223,10 @@ pub fn ask_quit_translation(language: Language) -> Text<'static> {
Language::UK => "Чи справді хочеш закінчити аналіз?",
Language::ZH => "您确定退出当前监控吗?",
Language::RO => "Sunteți sigur că doriți să renunțați la această analiză?",
+ Language::KO => "정말로 분석을 종료하겠습니까?",
+ Language::TR => "Bu analizden çıkmak istediğine emin misin?",
+ Language::RU => "Вы уверены, что хотите выйти из текущего анализа?",
+ Language::PT => "Tem a certeza que deseja sair desta análise?",
})
}
@@ -192,6 +241,10 @@ pub fn quit_analysis_translation(language: Language) -> String {
Language::UK => "Закінчити аналіз".to_string(),
Language::ZH => "退出监控".to_string(),
Language::RO => "Renunță la analiză".to_string(),
+ Language::KO => "분석종료".to_string(),
+ Language::TR => "Analizden çık".to_string(),
+ Language::RU => "Закончить анализ".to_string(),
+ Language::PT => "Sair da análise".to_string(),
}
}
@@ -206,6 +259,10 @@ pub fn ask_clear_all_translation(language: Language) -> Text<'static> {
Language::UK => "Чи справді хочеш видалити всі повідомлення?",
Language::ZH => "确定清除所有通知?",
Language::RO => "Sigur doriți să ștergeți notificările?",
+ Language::KO => "알림을 삭제하시겠습니까?",
+ Language::TR => "Bildirimleri temizlemek istediğine emin misin?",
+ Language::RU => "Вы уверены, что хотите удлить все уведомления?",
+ Language::PT => "Tem a certeza que deseja eliminar as notificações?",
})
}
@@ -220,6 +277,10 @@ pub fn clear_all_translation(language: Language) -> String {
Language::UK => "Видалити все".to_string(),
Language::ZH => "清除所有".to_string(),
Language::RO => "Ștergeți tot".to_string(),
+ Language::KO => "모두 지우기".to_string(),
+ Language::TR => "Hepsini temizle".to_string(),
+ Language::RU => "Очистить всё".to_string(),
+ Language::PT => "Limpar tudo".to_string(),
}
}
@@ -234,6 +295,10 @@ pub fn hide_translation(language: Language) -> &'static str {
Language::UK => "Заховати",
Language::ZH => "隐藏",
Language::RO => "Ascundeți",
+ Language::KO => "숨기기",
+ Language::TR => "Gizle",
+ Language::RU => "Скрыть",
+ Language::PT => "Esconder",
}
}
@@ -266,6 +331,18 @@ pub fn no_addresses_translation(language: Language, adapter: &str) -> Text<'stat
Language::RO => format!("Niciun trafic nu poate fi observat deoarece adaptorul selectat nu are adrese active...\n\n\
Adaptor de rețea: {adapter}\n\n\
Dacă sunteți sigur că sunteți conectat la internet, încercați să alegeți un alt adaptor."),
+ Language::KO => format!("선택한 어댑터에 유효한 주소가 없기 때문에 트래픽을 확인할 수 없습니다...\n\n\
+ 네트워크 어뎁터: {adapter}\n\n\
+ 인터넷이 연결되어있다면 다른 어댑터로 시도해보세요."),
+ Language::TR => format!("Seçtiğiniz adaptör aktif bir adrese sahip olmadığı için hiç bir trafik izlenemez...\n\n\
+ Ağ adaptörü: {adapter}\n\n\
+ Eğer gerçekten internete bağlı olduğunuza eminseniz, başka bir adaptör seçmeyi deneyiniz."),
+ Language::RU => format!("Наблюдение за трафиком не возможно, потому что Вы выбрали интерфейс без активного адреса...\n\n\
+ Сетевой интерфейс: {adapter}\n\n\
+ Если Вы уверены, что подключены к Интернету, попробуйте выбрать другой интерфейс."),
+ Language::PT => format!("Não é possível observar tráfego porque o adaptador que selecionou não tem endereços ativos...\n\n\
+ Adaptador de rede: {adapter}\n\n\
+ Se tiver a certeza que está ligado à internet, tente escolher um adaptador diferente."),
})
}
@@ -297,7 +374,19 @@ pub fn waiting_translation(language: Language, adapter: &str) -> Text<'static> {
您确信您已成功连接到互联网, 并选择了当前正在使用的的网络适配器吗?"),
Language::RO => format!("Nu a fost observat încă trafic. Se așteaptă pachetele de rețea...\n\n\
Adaptor de rețea: {adapter}\n\n\
- Ești sigur că ești conectat la internet și ai selectat adaptorul corect?")
+ Ești sigur că ești conectat la internet și ai selectat adaptorul corect?"),
+ Language::KO => format!("아직 트래픽이 관찰되지 않았습니다. 네트워크 패킷 대기 중...\n\n\
+ 네트워크 어뎁터: {adapter}\n\n\
+ 인터넷에 연결되어 있고 올바른 어댑터를 선택하셨습니까?"),
+ Language::TR => format!("Henüz bir trafik algılanamadı. Ağ paketleri için bekleniyor...\n\n\
+ Ağ adaptörü: {adapter}\n\n\
+ İnternete bağlı olduğunuza ve doğru adaptörü seçtiğinize emin misiniz?"),
+ Language::RU => format!("Трафик не обнаружен. Ожидаем сетевые пакеты...\n\n\
+ Сетевой интерфейс: {adapter}\n\n\
+ Вы уверены, что подключены к Интернету и выбрали правильный интерфейс?"),
+ Language::PT => format!("Ainda não foi observado tráfego. Aguardando por pacotes...\n\n\
+ Adaptador de rede: {adapter}\n\n\
+ Tem a certeza de que está ligado à internet e selecionou o adaptador correto?"),
})
}
@@ -333,7 +422,19 @@ pub fn some_observed_translation(
当前已监测到一些数据包, 但其中并未包含您的目标数据包......\n\n{filters}"),
Language::RO => format!("Total pachete interceptate: {observed}\n\n\
Pachete filtrate: 0\n\n\
- Unele pachete au fost interceptate, dar încă niciunul nu a fost selectat conform filtrelor pe care le-ați specificat...\n\n{filters}")
+ Unele pachete au fost interceptate, dar încă niciunul nu a fost selectat conform filtrelor pe care le-ați specificat...\n\n{filters}"),
+ Language::KO => format!("감지한 총 패킷: {observed}\n\n\
+ 필터링된 패킷: 0\n\n\
+ 일부 패킷이 감지되었지만, 지정한 필터에 따라 선택되지 않았습니다...\n\n{filters}"),
+ Language::TR => format!("Toplam yakalanan paketler: {observed}\n\n\
+ Filterelenen paketler: 0\n\n\
+ Bazı paketler yakalandı, fakat belirttiğiniz filtrelere göre hiç biri seçilmedi...\n\n{filters}"),
+ Language::RU => format!("Всего пакетов перехвачено: {observed}\n\n\
+ Фильтровано пакетов: 0\n\n\
+ Сетевые пакеты были перехвачены, но ни один из них не соответствует заданным фильтрам...\n\n{filters}"),
+ Language::PT => format!("Total de pacotes interceptados: {observed}\n\n\
+ Pacotes filtrados: 0\n\n\
+ Alguns pacotes foram interceptados, mas nenhum deles foi selecionado de acordo com os filtros especificados...\n\n{filters}"),
})
}
@@ -358,6 +459,16 @@ pub fn filtered_packets_translation(
Language::RO => {
format!("Pachete filtrate:\n {filtered} ({percentage} din total)")
}
+ Language::KO => {
+ format!("필터링된 패킷:\n {filtered} ({percentage} 의 일부)")
+ }
+ Language::TR => format!("Filtrelenen paketler:\n {filtered} toplamın ({percentage})"),
+ Language::RU => {
+ format!("Отфильтровано пакетов:\n {filtered} ({percentage}% от общего числа)")
+ }
+ Language::PT => {
+ format!("Pacotes filtrados:\n {filtered} ({percentage} do total)")
+ }
})
}
@@ -380,7 +491,17 @@ pub fn filtered_bytes_translation(
format!("目标网络流量计数:\n {filtered} (占所有网络流量的 {percentage})")
}
Language::RO => {
- format!("Octeți filtrați::\n {filtered} ({percentage} din total)")
+ format!("Octeți filtrați:\n {filtered} ({percentage} din total)")
+ }
+ Language::KO => {
+ format!("필터링된 바이트:\n {filtered} ({percentage} 의 일부)")
+ }
+ Language::TR => format!("Filtrelenen bayt:\n {filtered} toplamın ({percentage})"),
+ Language::RU => {
+ format!("Отфильтровано байт:\n {filtered} ({percentage}% от общего числа)")
+ }
+ Language::PT => {
+ format!("Bytes filtrados:\n {filtered} ({percentage} do total)")
}
})
}
@@ -396,6 +517,10 @@ pub fn filtered_application_translation(language: Language) -> Text<'static> {
Language::UK => "Відфільтровані пакети протоколу аплікації/програми:",
Language::ZH => "按应用层协议分类的目标数据包计数:",
Language::RO => "Pachete filtrate pe protocol de aplicație:",
+ Language::KO => "애플리케이션 프로토콜당 필터링된 패킷 수:",
+ Language::TR => "Uygulama protokolü bazında filtrelenen paketler:",
+ Language::RU => "Отфильтровано пакетов прикладного протокола:",
+ Language::PT => "Pacotes filtrados por protocolo de aplicação:",
})
}
@@ -419,6 +544,14 @@ pub fn no_favorites_translation(language: Language) -> Text<'static> {
小贴士: 点击连接右侧的小星星即可收藏到这里哦.",
Language::RO => "Nimic de arătat în acest moment.\n\
Pentru a adăuga o conexiune la favorite, faceți clic pe simbolul stea din apropierea conexiunii.",
+ Language::KO => "현재는 보여줄게 없습니다.\n\
+ 즐겨찾기에 연결을 추가하려면 별을 눌러주세요.",
+ Language::TR => "Şu an gösterecek bir şey yok.\n\
+ Favorilere bağlantı eklemek için, bağlantı yanındaki yıldız sembolüne tıklayınız.",
+ Language::RU => "Нечего показать в настоящий момент.\n\
+ Для добавления соединения в избранные, нажмите на символ звезды возле соединения.",
+ Language::PT => "Nada para mostrar de momento.\n\
+ Para adicionar uma conexão aos seus favoritos, clique na estrela perto da conexão.",
})
}
@@ -460,6 +593,22 @@ pub fn error_translation(language: Language, error: &str) -> Text<'static> {
"A apărut o eroare! \n\n\
{error}"
),
+ Language::KO => format!(
+ "오류가 발생하였습니다! \n\n\
+ {error}"
+ ),
+ Language::TR => format!(
+ "Bir hata oluştu! \n\n\
+ {error}"
+ ),
+ Language::RU => format!(
+ "Произошла ошибка! \n\n\
+ {error}"
+ ),
+ Language::PT => format!(
+ "Ocorreu um erro! \n\n\
+ {error}"
+ ),
})
}
@@ -468,12 +617,15 @@ pub fn both_translation(language: Language) -> &'static str {
Language::EN => "both",
Language::IT => "entrambi",
Language::FR => "les deux",
- Language::ES => "ambos",
+ Language::ES | Language::PT => "ambos",
Language::PL => "oba",
Language::DE => "beide",
Language::UK => "обидва",
Language::ZH => "皆需",
Language::RO => "ambele",
+ Language::KO => "둘다",
+ Language::TR => "ikiside",
+ Language::RU => "оба",
}
}
@@ -485,6 +637,7 @@ pub fn both_translation(language: Language) -> &'static str {
// Language::ES => "Todos los protocolos",
// Language::PL => "Wszystkie protokoły",
// Language::DE => "Alle Protokolle",
+// Language::RU => "Все протоколы",
// }
// }
@@ -493,12 +646,15 @@ pub fn all_translation(language: Language) -> &'static str {
Language::EN => "All",
Language::IT => "Tutti",
Language::FR => "Tous",
- Language::ES => "Todos",
+ Language::ES | Language::PT => "Todos",
Language::PL => "Wszystkie",
Language::DE => "Alle",
Language::UK => "Усі",
Language::ZH => "所有",
Language::RO => "Toate",
+ Language::KO => "모두",
+ Language::TR => "Hepsi",
+ Language::RU => "Всё",
}
}
@@ -513,6 +669,10 @@ pub fn packets_chart_translation(language: Language) -> &'static str {
Language::UK => "пакети на секунду",
Language::ZH => "数据包",
Language::RO => "pachete pe secundă",
+ Language::KO => "초당 패킷",
+ Language::TR => "saniye başı paket",
+ Language::RU => "пакектов в секунду",
+ Language::PT => "pacotes por segundo",
}
}
@@ -521,12 +681,15 @@ pub fn bytes_chart_translation(language: Language) -> &'static str {
Language::EN => "bytes per second",
Language::IT => "byte al secondo",
Language::FR => "octets par seconde",
- Language::ES => "bytes por segundo",
+ Language::ES | Language::PT => "bytes por segundo",
Language::PL => "bajty na sekundę",
Language::DE => "bytes pro Sekunde",
Language::UK => "байти на секунду",
Language::ZH => "网络流量",
Language::RO => "octeți pe secundă",
+ Language::KO => "초당 바이트",
+ Language::TR => "saniye başı bayt",
+ Language::RU => "байтов в секунду",
}
}
@@ -541,6 +704,10 @@ pub fn recent_report_translation(language: Language) -> &'static str {
Language::UK => "найновіші",
Language::ZH => "按时间",
Language::RO => "cea mai recentă",
+ Language::KO => "가장 최근",
+ Language::TR => "en son",
+ Language::RU => "новейшие",
+ Language::PT => "mais recente",
}
}
@@ -555,6 +722,10 @@ pub fn packets_report_translation(language: Language) -> &'static str {
Language::UK => "найбільше пакетів",
Language::ZH => "按数据包",
Language::RO => "cele mai multe pachete",
+ Language::KO => "대부분의 패킷",
+ Language::TR => "en çok paket",
+ Language::RU => "больше всего пакетов",
+ Language::PT => "mais pacotes",
}
}
@@ -569,6 +740,10 @@ pub fn bytes_report_translation(language: Language) -> &'static str {
Language::UK => "найбільше байтів",
Language::ZH => "按流量",
Language::RO => "cei mai mulți octeți",
+ Language::KO => "대부분의 바이트",
+ Language::TR => "en çok bayt",
+ Language::RU => "больше всего байт",
+ Language::PT => "mais bytes",
}
}
@@ -577,12 +752,15 @@ pub fn favorite_report_translation(language: Language) -> &'static str {
Language::EN => "favorites",
Language::IT => "preferiti",
Language::FR => "favoris",
- Language::ES => "favoritos",
+ Language::ES | Language::PT => "favoritos",
Language::PL => "ulubione",
Language::DE => "Favoriten",
Language::UK => "улюблені",
Language::ZH => "收藏夹",
Language::RO => "favorite",
+ Language::KO => "즐겨찾기",
+ Language::TR => "favoriler",
+ Language::RU => "избранное",
}
}
@@ -597,6 +775,10 @@ pub fn notifications_title_translation(language: Language) -> Text<'static> {
Language::UK => "Достосуй повідомлення",
Language::ZH => "自定义通知",
Language::RO => "Personalizați-vă notificările",
+ Language::KO => "사용자 지정 알림",
+ Language::TR => "Bildirimlerinizi özelleştirin",
+ Language::RU => "Настройка уведомлений",
+ Language::PT => "Personalize as suas notificações",
})
}
@@ -611,6 +793,10 @@ pub fn appearance_title_translation(language: Language) -> Text<'static> {
Language::UK => "Вибери улюблену тему",
Language::ZH => "选择您喜欢的主题",
Language::RO => "Selectați tema preferată",
+ Language::KO => "태마를 선택하세요",
+ Language::TR => "Favori temanızı seçin",
+ Language::RU => "Выберите предпочительную тему",
+ Language::PT => "Escolha o seu tema favorito",
})
}
@@ -625,6 +811,10 @@ pub fn languages_title_translation(language: Language) -> Text<'static> {
Language::UK => "Вибери мову",
Language::ZH => "选择显示语言",
Language::RO => "Selectați limba",
+ Language::KO => "언어를 선택하세요",
+ Language::TR => "Dilinizi seçin",
+ Language::RU => "Выберите язык",
+ Language::PT => "Selecione o seu idioma",
})
}
@@ -639,6 +829,10 @@ pub fn active_filters_translation(language: Language) -> &'static str {
Language::UK => "Активні фільтри:",
Language::ZH => "活动的过滤器:",
Language::RO => "Filtre active:",
+ Language::KO => "활성화된 필터:",
+ Language::TR => "Aktif filtreler:",
+ Language::RU => "Выбранные фильтры:",
+ Language::PT => "Filtros ativos:",
}
}
@@ -653,6 +847,10 @@ pub fn none_translation(language: Language) -> &'static str {
Language::UK => "бракує",
Language::ZH => "无",
Language::RO => "niciunul",
+ Language::KO => "없음",
+ Language::TR => "hiç biri",
+ Language::RU => "не выбран",
+ Language::PT => "nenhum",
}
}
@@ -667,6 +865,10 @@ pub fn yeti_night_translation(language: Language) -> &'static str {
Language::UK => "Оригінальний, темний мотив Sniffnet",
Language::ZH => "Sniffnet暗黑",
Language::RO => "Tema întunecată originală Sniffnet",
+ Language::KO => "Sniffnet의 기본 다크테마",
+ Language::TR => "Sniffnet'in orjinal koyu teması",
+ Language::RU => "Оригинальная тёмная тема Sniffnet'а",
+ Language::PT => "Tema escuro original de Sniffnet",
}
}
@@ -675,12 +877,15 @@ pub fn yeti_day_translation(language: Language) -> &'static str {
Language::EN => "Sniffnet's original light theme",
Language::IT => "Il tema chiaro originale di Sniffnet",
Language::FR => "Thème original clair de Sniffnet",
- Language::ES => "Tema claro original de Sniffnet",
+ Language::ES | Language::PT => "Tema claro original de Sniffnet",
Language::PL => "Oryginalny, jasny motyw Sniffnet",
Language::DE => "Sniffnets urspüngliches, helles Design",
Language::UK => "Оригінальний, світлий мотив Sniffnet",
Language::ZH => "Sniffnet浅色",
Language::RO => "Tema deschisă originală Sniffnet",
+ Language::KO => "Sniffnet의 기본 라이트테마",
+ Language::TR => "Sniffnet'in orjinal açık teması",
+ Language::RU => "Оригинальная светая тема Sniffnet'а",
}
}
@@ -695,6 +900,10 @@ pub fn deep_sea_translation(language: Language) -> &'static str {
Language::UK => "Проаналізувати мережевий рух",
Language::ZH => "潜入网络活动的海洋",
Language::RO => "Pentru a vă scufunda în traficul de rețea",
+ Language::KO => "네트워크 트레픽으로 바로가기",
+ Language::TR => "Ağ trafiğine dalmak",
+ Language::RU => "Для погружения в сетевой трафик",
+ Language::PT => "Para mergulhar no tráfego de rede",
}
}
@@ -709,6 +918,10 @@ pub fn mon_amour_translation(language: Language) -> &'static str {
Language::UK => "Прекрасна тема для мрійників",
Language::ZH => "梦想家的主题",
Language::RO => "O temă minunată creată pentru visători",
+ Language::KO => "사랑스러운 몽환가들을 위한 테마",
+ Language::TR => "Hayal perestler için yapılmış güzel tema",
+ Language::RU => "Милая тема для мечтателей",
+ Language::PT => "Tema encantador feito para sonhadores",
}
}
@@ -723,6 +936,10 @@ pub fn incoming_translation(language: Language) -> &'static str {
Language::UK => "Вхідні",
Language::ZH => "入站",
Language::RO => "de intrare",
+ Language::KO => "수신중",
+ Language::TR => "Gelen",
+ Language::RU => "Входящий",
+ Language::PT => "Entrando",
}
}
@@ -737,6 +954,10 @@ pub fn outgoing_translation(language: Language) -> &'static str {
Language::UK => "Вихідні",
Language::ZH => "出站",
Language::RO => "de ieșire",
+ Language::KO => "발신중",
+ Language::TR => "Giden",
+ Language::RU => "Исходящий",
+ Language::PT => "Saindo",
}
}
@@ -750,6 +971,10 @@ pub fn notifications_translation(language: Language) -> &'static str {
Language::UK => "Повідомлення",
Language::ZH => "通知",
Language::RO => "Notificări",
+ Language::KO => "알림",
+ Language::TR => "Bildirimler",
+ Language::RU => "Уведомления",
+ Language::PT => "Notificações",
}
}
@@ -757,11 +982,12 @@ pub fn style_translation(language: Language) -> &'static str {
match language {
Language::EN | Language::FR => "Style",
Language::IT => "Stile",
- Language::ES => "Estilo",
+ Language::ES | Language::PT => "Estilo",
Language::PL => "Styl",
- Language::DE | Language::RO => "Stil",
- Language::UK => "Стиль",
+ Language::DE | Language::RO | Language::TR => "Stil",
+ Language::UK | Language::RU => "Стиль",
Language::ZH => "主题",
+ Language::KO => "스타일",
}
}
@@ -776,6 +1002,10 @@ pub fn language_translation(language: Language) -> &'static str {
Language::UK => "Мова",
Language::ZH => "语言",
Language::RO => "Limbă",
+ Language::KO => "언어",
+ Language::TR => "Dil",
+ Language::RU => "Язык",
+ Language::PT => "Língua",
}
}
@@ -790,6 +1020,10 @@ pub fn overview_translation(language: Language) -> &'static str {
Language::UK => "Огляд",
Language::ZH => "概览",
Language::RO => "Prezentare generală",
+ Language::KO => "개요",
+ Language::TR => "Ön izleme",
+ Language::RU => "Обзор",
+ Language::PT => "Visão geral",
}
}
@@ -804,6 +1038,10 @@ pub fn packets_threshold_translation(language: Language) -> &'static str {
Language::UK => "Повідом мене про переліміт пакетів",
Language::ZH => "超过设定的数据包数量阈值时通知我",
Language::RO => "Anunță-mă când este depășit un prag de pachete",
+ Language::KO => "패킷 임계값을 초과하면 알림",
+ Language::TR => "Paket eşiği aşıldığında beni bilgilendir",
+ Language::RU => "Уведомить, когда порог по частоте пакетов превышен",
+ Language::PT => "Notifique-me quando um limite de pacotes for excedido",
}
}
@@ -818,6 +1056,10 @@ pub fn bytes_threshold_translation(language: Language) -> &'static str {
Language::UK => "Повідом мене про переліміт байтів",
Language::ZH => "超过设定的网络流量阈值时通知我",
Language::RO => "Anunță-mă când este depășit un prag de octeți",
+ Language::KO => "바이트 임계값을 초과하면 알림",
+ Language::TR => "Bayt eşiği aşıldığında beni bilgilendir",
+ Language::RU => "Уведомить, когда порог по полосе в байтах превышен",
+ Language::PT => "Notifique-me quando um limite de bytes for excedido",
}
}
@@ -826,12 +1068,15 @@ pub fn per_second_translation(language: Language) -> &'static str {
Language::EN => "(per second)",
Language::IT => "(al secondo)",
Language::FR => "(par seconde)",
- Language::ES => "(por segundo)",
+ Language::ES | Language::PT => "(por segundo)",
Language::PL => "(na sekundę)",
Language::DE => "(pro Sekunde)",
Language::UK => "(на секунду)",
Language::ZH => "(每秒) ",
Language::RO => "(pe secundă)",
+ Language::KO => "(초당)",
+ Language::TR => "(her saniye)",
+ Language::RU => "(в секунду)",
}
}
@@ -846,6 +1091,10 @@ pub fn specify_multiples_translation(language: Language) -> &'static str {
Language::UK => "; можеш також вибрати 'K', 'M' i 'G'",
Language::ZH => "您可指定 'K', 'M', 'G'",
Language::RO => "; puteți specifica 'K', 'M', 'G'",
+ Language::KO => "; 지정가능합니다 'K', 'M', 'G'",
+ Language::TR => "; şunları da kullanabilirsin 'K', 'M' ve 'G'",
+ Language::RU => "; Так же можно указать 'K', 'M' или 'G'",
+ Language::PT => "; também pode especificar 'K', 'M' e 'G'",
}
}
@@ -862,6 +1111,10 @@ pub fn favorite_notification_translation(language: Language) -> &'static str {
Language::UK => "Повідом мене, коли буде обмін даними з моїх улюблених",
Language::ZH => "收藏夹内的连接有新活动时通知我",
Language::RO => "Anunță-mă când sunt transferate date noi de la favoritele mele",
+ Language::KO => "즐겨찾기에서 새 데이터가 교환될 때 알림",
+ Language::TR => "Favorilerimde veri akışı olduğunda beni uyar",
+ Language::RU => "Уведомить, если произошёл обмен данными в соединениях из избранного",
+ Language::PT => "Notificar-me quando novos dados forem trocados dos meus favoritos",
}
}
@@ -876,18 +1129,25 @@ pub fn threshold_translation(language: Language) -> String {
Language::UK => "Ліміт: ".to_string(),
Language::ZH => "阈值: ".to_string(),
Language::RO => "Prag: ".to_string(),
+ Language::KO => "임계값: ".to_string(),
+ Language::TR => "Eşik: ".to_string(),
+ Language::RU => "Порог: ".to_string(),
+ Language::PT => "Limite: ".to_string(),
}
}
pub fn volume_translation(language: Language, value: u8) -> String {
match language {
- Language::EN | Language::IT | Language::FR => format!("Volume: {value:^3}%"),
+ Language::EN | Language::IT | Language::FR | Language::PT => format!("Volume: {value:^3}%"),
Language::ES => format!("Volumen: {value:^3}%"),
Language::PL => format!("Głośność: {value:^3}%"),
Language::DE => format!("Lautstärke: {value:^3}%"),
Language::UK => format!("Гучність: {value:^3}%"),
Language::ZH => format!("通知音量: {value:^3}%"),
Language::RO => format!("Volum: {value:^3}%"),
+ Language::KO => format!("볼륨: {value:^3}%"),
+ Language::TR => format!("Ses: {value:^3}%"),
+ Language::RU => format!("Объём: {value:^3}%"),
}
}
@@ -899,9 +1159,12 @@ pub fn sound_translation(language: Language) -> &'static str {
Language::ES => "Sonido:",
Language::PL => "Dźwięk:",
Language::DE => "Ton:",
- Language::UK => "Звук:",
+ Language::UK | Language::RU => "Звук:",
Language::ZH => "通知音:",
Language::RO => "Sunet:",
+ Language::KO => "사운드:",
+ Language::TR => "Ses:",
+ Language::PT => "Som:",
}
}
@@ -916,6 +1179,10 @@ pub fn open_report_translation(language: Language) -> &'static str {
Language::UK => "Відкрий повний рапорт",
Language::ZH => "打开完整报告",
Language::RO => "Deschideți raport complet",
+ Language::KO => "전체 보고서 열기",
+ Language::TR => "Tam raporu aç",
+ Language::RU => "Открыть полный отчёт",
+ Language::PT => "Abrir relatório completo",
}
}
@@ -930,6 +1197,10 @@ pub fn bytes_exceeded_translation(language: Language) -> &'static str {
Language::UK => "Ліміт байтів перевищено!",
Language::ZH => "达到设定的网络流量阈值!",
Language::RO => "Prag de octeți depășit!",
+ Language::KO => "바이트 임계값 초과!",
+ Language::TR => "Bayt eşik değeri aşıldı!",
+ Language::RU => "Порог в байтах превышен!",
+ Language::PT => "Limite de bytes excedido!",
}
}
@@ -945,6 +1216,10 @@ pub fn bytes_exceeded_value_translation(language: Language, value: &str) -> Stri
Language::UK => format!("{trimmed_value} байтів було обміняно"),
Language::ZH => format!("已交换字节 {trimmed_value}"),
Language::RO => format!("au fost transferați {trimmed_value} octeți"),
+ Language::KO => format!("바이트 {trimmed_value} 가 교환되었습니다"),
+ Language::TR => format!("{trimmed_value} bayt aktarıldı"),
+ Language::RU => format!("{trimmed_value} байт обмена информацией"),
+ Language::PT => format!("Foram trocados {trimmed_value} bytes"),
}
}
@@ -959,13 +1234,23 @@ pub fn packets_exceeded_translation(language: Language) -> &'static str {
Language::UK => "Ліміт пакетів перевищено!",
Language::ZH => "达到设定的数据包数量阈值!",
Language::RO => "Prag de pachete depășit!",
+ Language::KO => "패킷 임계값 초과!",
+ Language::TR => "Paket eşik değeri aşıldı!",
+ Language::RU => "Порог по числу пакетов превышен!",
+ Language::PT => "Limite de pacotes excedido!",
}
}
pub fn packets_exceeded_value_translation(language: Language, value: u32) -> String {
match language {
- Language::EN => format!("{value} packets have been exchanged"),
- Language::IT => format!("{value} pacchetti sono stati scambiati"),
+ Language::EN => match value {
+ 1 => "1 packet has been exchanged".to_owned(),
+ npackets => format!("{npackets} packets have been exchanged"),
+ },
+ Language::IT => match value {
+ 1 => "1 pacchetto è stato scambiato".to_owned(),
+ npackets => format!("{npackets} pacchetti sono stati scambiati"),
+ },
Language::FR => match value {
1 => "1 paquet a été échangé".to_owned(),
npackets => format!("{npackets} paquets ont été échangés"),
@@ -976,6 +1261,13 @@ pub fn packets_exceeded_value_translation(language: Language, value: u32) -> Str
Language::UK => format!("Обміняно {value} пакетів"),
Language::ZH => format!("已交换数据包 {value}"),
Language::RO => format!("au fost transferate {value} pachete"),
+ Language::KO => format!("패킷 {value} 가 교환되었습니다"),
+ Language::TR => format!("{value} paket aktarıldı"),
+ Language::RU => format!("{value} пакет(ов) обмена информацией"),
+ Language::PT => match value {
+ 1 => "Foi trocado 1 pacote".to_owned(),
+ npackets => format!("Foram trocados {npackets} pacotes"),
+ },
}
}
@@ -990,6 +1282,10 @@ pub fn favorite_transmitted_translation(language: Language) -> &'static str {
Language::UK => "Нові дані обміняно з улюблених!",
Language::ZH => "收藏夹内的连接有新活动!",
Language::RO => "Date noi transferate de la favorite!",
+ Language::KO => "즐겨찾기에서 새 데이터 교환",
+ Language::TR => "Favorilerden yeni veri aktarıldı!",
+ Language::RU => "Новый обмен данными в избранных соедиениях!",
+ Language::PT => "Novos dados trocados dos favoritos!",
}
}
@@ -1022,6 +1318,18 @@ pub fn no_notifications_set_translation(language: Language) -> Text<'static> {
Language::RO => "Încă nu ați activat notificările!\n\n\
După ce le veți activa, această pagină va afișa un jurnal al notificărilor dvs\n\n\
Puteți activa notificările din setări:",
+ Language::KO => "아직 알림을 활성화하지 않았습니다!\n\n\
+ 활성화로 설정하면 이 페이지에 알림 로그가 표시됩니다\n\n\
+ 설정에서 알림을 활성화할 수 있습니다:",
+ Language::TR => "Henüz bildirimleri etkinleştirmedin!\n\n\
+ Etkinleştirdikten sonra bu sayfada bildirimlerine ait kütüğü görebilirsin\n\n\
+ Bildirimleri, ayarlardan etkinleştirebilirsin:",
+ Language::RU => "Уведомления пока не настроены!\n\n\
+ После настройки, эта страница будет показывать журнал уведомлений\n\n\
+ Вы можете включить уведомления в настройках:",
+ Language::PT => "Ainda não ativou as notificações!\n\n\
+ Depois de ativá-las, esta página irá mostrar um registo das suas notificações\n\n\
+ Pode ativar as notificações nas definições:",
})
}
@@ -1063,6 +1371,22 @@ pub fn no_notifications_received_translation(language: Language) -> Text<'static
"Nimic de văzut momentan...\n\n\
Când veți primi o notificare, aceasta va fi afișată aici"
}
+ Language::KO => {
+ "현재는 볼 것이 없습니다...\n\n\
+ 알림을 받으면 여기에 표시됩니다"
+ }
+ Language::TR => {
+ "Şu an görecek bir şey yok...\n\n\
+ Bildirim aldığınız zaman burada gözükecektir"
+ }
+ Language::RU => {
+ "Нечего показывать в текущий момент...\n\n\
+ Когда прийдут уведомления, они будут показаны тут"
+ }
+ Language::PT => {
+ "Nada para ver neste momento...\n\n\
+ Quando receber uma notificação, ela será mostrada aqui"
+ }
})
}
@@ -1077,5 +1401,9 @@ pub fn only_last_30_translation(language: Language) -> &'static str {
Language::UK => "Можеш побачити лише 30 останніх повідомлень",
Language::ZH => "仅显示最近 30 条通知",
Language::RO => "Sunt afișate doar ultimele 30 de notificări",
+ Language::KO => "최근 30개의 알림만 표시됩니다",
+ Language::TR => "Sadece son 30 bildirim gösterilmektedir",
+ Language::RU => "Тут показываются только последние 30 уведомлений",
+ Language::PT => "São mostradas apenas as últimas 30 notificações",
}
}
diff --git a/src/translations/translations_2.rs b/src/translations/translations_2.rs
index 1136a80f..6d18f08e 100644
--- a/src/translations/translations_2.rs
+++ b/src/translations/translations_2.rs
@@ -5,6 +5,7 @@ pub fn new_version_available_translation(language: Language) -> &'static str {
match language {
Language::EN => "A newer version is available on GitHub",
Language::IT => "Una versione più recente è disponibile su GitHub",
+ Language::RU => "Новая версия доступна на GitHub",
_ => "A newer version is available on GitHub",
}
}
@@ -17,6 +18,7 @@ pub fn inspect_translation(language: Language) -> &'static str {
Language::ES => "Inspeccionar",
Language::PL => "Sprawdź",
Language::DE => "Überprüfen",
+ Language::RU => "Инспектировать",
_ => "Inspect",
}
}
diff --git a/src/translations/types/language.rs b/src/translations/types/language.rs
index 931fd7d4..692fa63a 100644
--- a/src/translations/types/language.rs
+++ b/src/translations/types/language.rs
@@ -21,6 +21,14 @@ pub enum Language {
ZH,
/// Romanian
RO,
+ /// Korean
+ KO,
+ /// Portuguese
+ PT,
+ /// Turkish
+ TR,
+ /// Russian
+ RU,
}
impl Default for Language {
@@ -32,12 +40,14 @@ impl Default for Language {
impl Language {
pub(crate) const COL1: [Language; 5] = [
Language::EN,
- Language::ES,
- Language::IT,
- Language::RO,
+ Language::FR,
+ Language::PL,
+ Language::RU,
Language::ZH,
];
- pub(crate) const COL2: [Language; 4] = [Language::DE, Language::FR, Language::PL, Language::UK];
+ pub(crate) const COL2: [Language; 4] = [Language::DE, Language::IT, Language::PT, Language::TR];
+ pub(crate) const COL3: [Language; 4] = [Language::ES, Language::KO, Language::RO, Language::UK];
+
pub fn get_radio_label(&self) -> &str {
match self {
Language::EN => "English",
@@ -49,6 +59,10 @@ impl Language {
Language::UK => "Українська",
Language::ZH => "简体中文",
Language::RO => "Română",
+ Language::KO => "한국인",
+ Language::TR => "Türkçe",
+ Language::RU => "Русский",
+ Language::PT => "Português",
}
}
}
diff --git a/src/utils/countries.rs b/src/utils/countries.rs
index dcc207f2..0f4f395f 100644
--- a/src/utils/countries.rs
+++ b/src/utils/countries.rs
@@ -513,8 +513,12 @@ pub fn get_flag_from_language_code(language: &str) -> Image {
"FR" => FR,
"EN" => GB,
"IT" => IT,
+ "KO" => KR,
"PL" => PL,
+ "PT" => PT,
"RO" => RO,
+ "RU" => RU,
+ "TR" => TR,
"UK" => UA,
_ => UNKNOWN,
})))