Compare commits

...

12 Commits

Author SHA1 Message Date
MystiPanda
8342f985e5
ci: fix release
Some checks failed
Alpha Build / alpha (macos-latest, aarch64-apple-darwin) (push) Has been cancelled
Alpha Build / alpha (macos-latest, x86_64-apple-darwin) (push) Has been cancelled
Alpha Build / alpha (windows-latest, aarch64-pc-windows-msvc) (push) Has been cancelled
Alpha Build / alpha (windows-latest, i686-pc-windows-msvc) (push) Has been cancelled
Alpha Build / alpha (windows-latest, x86_64-pc-windows-msvc) (push) Has been cancelled
Alpha Build / alpha-for-linux (ubuntu-latest, aarch64-unknown-linux-gnu) (push) Has been cancelled
Alpha Build / alpha-for-linux (ubuntu-latest, armv7-unknown-linux-gnueabihf) (push) Has been cancelled
Alpha Build / alpha-for-linux (ubuntu-latest, i686-unknown-linux-gnu) (push) Has been cancelled
Alpha Build / alpha-for-linux (ubuntu-latest, x86_64-unknown-linux-gnu) (push) Has been cancelled
Alpha Build / alpha-for-fixed-webview2 (arm64, windows-latest, aarch64-pc-windows-msvc) (push) Has been cancelled
Alpha Build / alpha-for-fixed-webview2 (x64, windows-latest, x86_64-pc-windows-msvc) (push) Has been cancelled
Alpha Build / alpha-for-fixed-webview2 (x86, windows-latest, i686-pc-windows-msvc) (push) Has been cancelled
Alpha Build / Update tag (push) Has been cancelled
2024-06-12 12:25:12 +08:00
MystiPanda
9d32e58915
chore: update publisher 2024-06-12 11:51:44 +08:00
MystiPanda
84027cbae1
Release 1.6.6 2024-06-12 10:33:20 +08:00
MystiPanda
5343040ef3
fix: start param error 2024-06-12 10:19:23 +08:00
MystiPanda
75cd7dd4b9
chore: update & fmt & clippy 2024-06-12 10:00:22 +08:00
dongchengjie
fb6ffd8e09 chore: missing locale 2024-06-11 16:19:25 +08:00
dongchengjie
aca9e61f39 chore: locale "Invalid Bypass Format" 2024-06-09 20:02:20 +08:00
MystiPanda
56078098a4
fix: start param error 2024-06-09 20:00:17 +08:00
MystiPanda
1f197965e0
feat: check bypass format 2024-06-09 13:37:47 +08:00
MystiPanda
183f0f6c42
feat: keep default bypass 2024-06-09 12:45:57 +08:00
dongchengjie
76624c7d83 chore: missing locale 2024-06-09 11:16:13 +08:00
dongchengjie
ab47c56ec5 chore: locale reorganization 2024-06-09 09:12:14 +08:00
39 changed files with 1874 additions and 1749 deletions

View File

@ -249,7 +249,7 @@ jobs:
- MacOS apple M芯片: aarch64.dmg
### Linux
- Linux 64位: amd64.AppImage/amd64.deb/amd64.rpm
- Linux 64位: amd64.deb/amd64.rpm
- Linux 32位: i386.deb/i386.rpm
- Linux arm64架构: arm64.deb/aarch64.rpm
- Linux armv7架构: armhf.deb/armhfp.rpm

View File

@ -40,6 +40,9 @@ jobs:
with:
workspaces: src-tauri
- name: Install Tauri CLI
run: cargo install --git https://github.com/tauri-apps/tauri --branch 1.x tauri-cli
- name: Install Node
uses: actions/setup-node@v4
with:
@ -72,7 +75,7 @@ jobs:
tagName: v__VERSION__
releaseName: "Clash Verge Rev v__VERSION__"
releaseBody: "More new features are now supported."
tauriScript: pnpm
tauriScript: cargo tauri
args: --target ${{ matrix.target }}
- name: Portable Bundle
@ -152,6 +155,9 @@ jobs:
with:
workspaces: src-tauri
- name: Install Tauri CLI
run: cargo install --git https://github.com/tauri-apps/tauri --branch 1.x tauri-cli
- name: Install Node
uses: actions/setup-node@v4
with:
@ -183,7 +189,7 @@ jobs:
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
with:
tauriScript: pnpm
tauriScript: cargo tauri
args: --target ${{ matrix.target }}
- name: Rename

View File

@ -1,3 +1,20 @@
## v1.6.6
### Features
- MacOS 应用签名
- 删除 AppImage
- 应用更新对话框添加下载按钮
- 设置系统代理绕过时保留默认值
- 系统代理绕过设置输入格式检查
### Bugs Fixes
- MacOS 代理组图标无法显示
- RPM 包依赖缺失
---
## v1.6.5
### Features

View File

@ -1,6 +1,6 @@
{
"name": "clash-verge",
"version": "1.6.5",
"version": "1.6.6",
"license": "GPL-3.0-only",
"scripts": {
"dev": "tauri dev",
@ -27,7 +27,7 @@
"@mui/icons-material": "^5.15.19",
"@mui/lab": "5.0.0-alpha.149",
"@mui/material": "^5.15.19",
"@mui/x-data-grid": "^6.20.0",
"@mui/x-data-grid": "^6.20.1",
"@tauri-apps/api": "^1.5.6",
"@types/json-schema": "^7.0.15",
"ahooks": "^3.8.0",
@ -38,7 +38,7 @@
"lodash-es": "^4.17.21",
"meta-json-schema": "1.18.5-alpha4",
"monaco-editor": "^0.49.0",
"monaco-yaml": "^5.1.1",
"monaco-yaml": "^5.2.0",
"nanoid": "^5.0.7",
"react": "^18.3.1",
"react-dom": "^18.3.1",
@ -63,8 +63,8 @@
"@types/react-dom": "^18.3.0",
"@types/react-transition-group": "^4.4.10",
"@vitejs/plugin-legacy": "^5.4.1",
"@vitejs/plugin-react": "^4.3.0",
"adm-zip": "^0.5.13",
"@vitejs/plugin-react": "^4.3.1",
"adm-zip": "^0.5.14",
"cross-env": "^7.0.3",
"fs-extra": "^11.2.0",
"https-proxy-agent": "^5.0.1",
@ -72,10 +72,10 @@
"node-fetch": "^3.3.2",
"prettier": "^2.8.8",
"pretty-quick": "^3.3.1",
"sass": "^1.77.4",
"terser": "^5.31.0",
"sass": "^1.77.5",
"terser": "^5.31.1",
"typescript": "^5.4.5",
"vite": "^5.2.12",
"vite": "^5.2.13",
"vite-plugin-monaco-editor": "^1.1.0",
"vite-plugin-svgr": "^4.2.0"
},

File diff suppressed because it is too large Load Diff

116
src-tauri/Cargo.lock generated
View File

@ -312,9 +312,9 @@ dependencies = [
[[package]]
name = "async-signal"
version = "0.2.7"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "329972aa325176e89114919f2a80fdae4f4c040f66a370b1a1159c6c0f94e7aa"
checksum = "794f185324c2f00e771cd9f1ae8b5ac68be2ca7abb129a87afd6e86d228bc54d"
dependencies = [
"async-io 2.3.3",
"async-lock 3.4.0",
@ -783,7 +783,7 @@ dependencies = [
[[package]]
name = "clash-verge"
version = "1.6.5"
version = "1.6.6"
dependencies = [
"anyhow",
"auto-launch",
@ -1985,8 +1985,8 @@ dependencies = [
"aho-corasick 1.1.3",
"bstr",
"log 0.4.21",
"regex-automata 0.4.6",
"regex-syntax 0.8.3",
"regex-automata 0.4.7",
"regex-syntax 0.8.4",
]
[[package]]
@ -2249,12 +2249,12 @@ dependencies = [
[[package]]
name = "http-body-util"
version = "0.1.1"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d"
checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f"
dependencies = [
"bytes",
"futures-core",
"futures-util",
"http 1.1.0",
"http-body 1.0.0",
"pin-project-lite",
@ -2268,9 +2268,9 @@ checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
[[package]]
name = "httparse"
version = "1.8.0"
version = "1.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
checksum = "d0e7a4dd27b9476dc40cb050d3632d3bba3a70ddbff012285f7f8559a1e7e545"
[[package]]
name = "httpdate"
@ -2563,12 +2563,14 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
[[package]]
name = "idna"
version = "0.5.0"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
checksum = "4716a3a0933a1d01c2f72450e89596eb51dd34ef3c211ccd875acdf1f8fe47ed"
dependencies = [
"unicode-bidi",
"unicode-normalization",
"icu_normalizer",
"icu_properties",
"smallvec",
"utf8_iter",
]
[[package]]
@ -2581,7 +2583,7 @@ dependencies = [
"globset",
"log 0.4.21",
"memchr",
"regex-automata 0.4.6",
"regex-automata 0.4.7",
"same-file",
"walkdir",
"winapi-util",
@ -2711,7 +2713,7 @@ checksum = "c416c05ba2a10240e022887617af3128fccdbf69713214da0fc81a5690d00df7"
dependencies = [
"ahash",
"once_cell",
"regex 1.10.4",
"regex 1.10.5",
]
[[package]]
@ -4338,14 +4340,14 @@ dependencies = [
[[package]]
name = "regex"
version = "1.10.4"
version = "1.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c"
checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f"
dependencies = [
"aho-corasick 1.1.3",
"memchr",
"regex-automata 0.4.6",
"regex-syntax 0.8.3",
"regex-automata 0.4.7",
"regex-syntax 0.8.4",
]
[[package]]
@ -4359,13 +4361,13 @@ dependencies = [
[[package]]
name = "regex-automata"
version = "0.4.6"
version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea"
checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df"
dependencies = [
"aho-corasick 1.1.3",
"memchr",
"regex-syntax 0.8.3",
"regex-syntax 0.8.4",
]
[[package]]
@ -4385,9 +4387,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
[[package]]
name = "regex-syntax"
version = "0.8.3"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56"
checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b"
[[package]]
name = "regress"
@ -5381,7 +5383,7 @@ checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f"
[[package]]
name = "tauri"
version = "1.6.7"
source = "git+https://github.com/tauri-apps/tauri?branch=1.x#3752eb1e6be2a8c31ea5519b5f1886d5721e4435"
source = "git+https://github.com/tauri-apps/tauri?branch=1.x#d2786bf699ffca1d5e9c234a3b1b4d5ec173af87"
dependencies = [
"anyhow",
"base64 0.21.7",
@ -5414,7 +5416,7 @@ dependencies = [
"png",
"rand 0.8.5",
"raw-window-handle",
"regex 1.10.4",
"regex 1.10.5",
"reqwest 0.11.27",
"rfd",
"semver 1.0.23",
@ -5444,7 +5446,7 @@ dependencies = [
[[package]]
name = "tauri-build"
version = "1.5.2"
source = "git+https://github.com/tauri-apps/tauri?branch=1.x#3752eb1e6be2a8c31ea5519b5f1886d5721e4435"
source = "git+https://github.com/tauri-apps/tauri?branch=1.x#d2786bf699ffca1d5e9c234a3b1b4d5ec173af87"
dependencies = [
"anyhow",
"cargo_toml",
@ -5462,7 +5464,7 @@ dependencies = [
[[package]]
name = "tauri-codegen"
version = "1.4.3"
source = "git+https://github.com/tauri-apps/tauri?branch=1.x#3752eb1e6be2a8c31ea5519b5f1886d5721e4435"
source = "git+https://github.com/tauri-apps/tauri?branch=1.x#d2786bf699ffca1d5e9c234a3b1b4d5ec173af87"
dependencies = [
"base64 0.21.7",
"brotli",
@ -5472,7 +5474,7 @@ dependencies = [
"png",
"proc-macro2",
"quote",
"regex 1.10.4",
"regex 1.10.5",
"semver 1.0.23",
"serde",
"serde_json",
@ -5487,7 +5489,7 @@ dependencies = [
[[package]]
name = "tauri-macros"
version = "1.4.4"
source = "git+https://github.com/tauri-apps/tauri?branch=1.x#3752eb1e6be2a8c31ea5519b5f1886d5721e4435"
source = "git+https://github.com/tauri-apps/tauri?branch=1.x#d2786bf699ffca1d5e9c234a3b1b4d5ec173af87"
dependencies = [
"heck 0.5.0",
"proc-macro2",
@ -5500,7 +5502,7 @@ dependencies = [
[[package]]
name = "tauri-runtime"
version = "0.14.3"
source = "git+https://github.com/tauri-apps/tauri?branch=1.x#3752eb1e6be2a8c31ea5519b5f1886d5721e4435"
source = "git+https://github.com/tauri-apps/tauri?branch=1.x#d2786bf699ffca1d5e9c234a3b1b4d5ec173af87"
dependencies = [
"gtk",
"http 0.2.12",
@ -5520,7 +5522,7 @@ dependencies = [
[[package]]
name = "tauri-runtime-wry"
version = "0.14.8"
source = "git+https://github.com/tauri-apps/tauri?branch=1.x#3752eb1e6be2a8c31ea5519b5f1886d5721e4435"
source = "git+https://github.com/tauri-apps/tauri?branch=1.x#d2786bf699ffca1d5e9c234a3b1b4d5ec173af87"
dependencies = [
"arboard",
"cocoa 0.24.1",
@ -5540,7 +5542,7 @@ dependencies = [
[[package]]
name = "tauri-utils"
version = "1.5.4"
source = "git+https://github.com/tauri-apps/tauri?branch=1.x#3752eb1e6be2a8c31ea5519b5f1886d5721e4435"
source = "git+https://github.com/tauri-apps/tauri?branch=1.x#d2786bf699ffca1d5e9c234a3b1b4d5ec173af87"
dependencies = [
"brotli",
"ctor",
@ -5651,7 +5653,7 @@ dependencies = [
"num-derive",
"num-traits",
"ordered-float",
"regex 1.10.4",
"regex 1.10.5",
"semver 0.11.0",
"sha2 0.9.9",
"signal-hook",
@ -5780,21 +5782,6 @@ dependencies = [
"zerovec",
]
[[package]]
name = "tinyvec"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
dependencies = [
"tinyvec_macros",
]
[[package]]
name = "tinyvec_macros"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
version = "1.38.0"
@ -6030,7 +6017,7 @@ dependencies = [
"matchers",
"nu-ansi-term",
"once_cell",
"regex 1.10.4",
"regex 1.10.5",
"sharded-slab",
"smallvec",
"thread_local 1.1.8",
@ -6125,27 +6112,12 @@ dependencies = [
"version_check",
]
[[package]]
name = "unicode-bidi"
version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
[[package]]
name = "unicode-ident"
version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
[[package]]
name = "unicode-normalization"
version = "0.1.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5"
dependencies = [
"tinyvec",
]
[[package]]
name = "unicode-segmentation"
version = "1.11.0"
@ -6175,9 +6147,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
[[package]]
name = "url"
version = "2.5.0"
version = "2.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
checksum = "f7c25da092f0a868cdf09e8674cd3b7ef3a7d92a24253e663a2fb85e2496de56"
dependencies = [
"form_urlencoded",
"idna",
@ -6606,7 +6578,7 @@ version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7"
dependencies = [
"regex 1.10.4",
"regex 1.10.5",
"serde",
"serde_json",
"thiserror",
@ -7255,12 +7227,12 @@ checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546"
[[package]]
name = "xdg-home"
version = "1.1.0"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21e5a325c3cb8398ad6cf859c1135b25dd29e186679cf2da7581d9679f63b38e"
checksum = "ca91dcf8f93db085f3a0a29358cd0b9d670915468f4290e8b85d118a34211ab8"
dependencies = [
"libc",
"winapi",
"windows-sys 0.52.0",
]
[[package]]

View File

@ -1,6 +1,6 @@
[package]
name = "clash-verge"
version = "1.6.5"
version = "1.6.6"
description = "clash verge"
authors = ["zzzgydi", "wonfen", "MystiPanda"]
license = "GPL-3.0-only"

View File

@ -327,7 +327,7 @@ pub fn copy_icon_file(path: String, name: String) -> CmdResult<String> {
Err(err) => Err(err.to_string()),
}
} else {
return Err("file not found".to_string());
Err("file not found".to_string())
}
}

View File

@ -1,4 +1,5 @@
mod clash;
#[allow(clippy::module_inception)]
mod config;
mod draft;
mod prfitem;

View File

@ -103,7 +103,9 @@ impl PrfOption {
a.user_agent = b.user_agent.or(a.user_agent);
a.with_proxy = b.with_proxy.or(a.with_proxy);
a.self_proxy = b.self_proxy.or(a.self_proxy);
a.danger_accept_invalid_certs = b.danger_accept_invalid_certs.or(a.danger_accept_invalid_certs);
a.danger_accept_invalid_certs = b
.danger_accept_invalid_certs
.or(a.danger_accept_invalid_certs);
a.update_interval = b.update_interval.or(a.update_interval);
Some(a)
}
@ -182,7 +184,8 @@ impl PrfItem {
let opt_ref = option.as_ref();
let with_proxy = opt_ref.map_or(false, |o| o.with_proxy.unwrap_or(false));
let self_proxy = opt_ref.map_or(false, |o| o.self_proxy.unwrap_or(false));
let accept_invalid_certs = opt_ref.map_or(false, |o| o.danger_accept_invalid_certs.unwrap_or(false));
let accept_invalid_certs =
opt_ref.map_or(false, |o| o.danger_accept_invalid_certs.unwrap_or(false));
let user_agent = opt_ref.and_then(|o| o.user_agent.clone());
let update_interval = opt_ref.and_then(|o| o.update_interval);
@ -300,7 +303,7 @@ impl PrfItem {
Some(value) => {
let str_value = value.to_str().unwrap_or("");
Some(str_value.to_string())
},
}
None => None,
};

View File

@ -116,12 +116,12 @@ impl CoreManager {
// 服务模式启动失败就直接运行sidecar
log::debug!(target: "app", "try to run core in service mode");
match (|| async {
let res = async {
service::check_service().await?;
service::run_core_by_service(&config_path).await
})()
.await
{
}
.await;
match res {
Ok(_) => return Ok(()),
Err(err) => {
// 修改这个值免得stop出错

View File

@ -43,7 +43,7 @@ impl Hotkey {
}
}
}
*self.current.lock() = hotkeys.clone();
self.current.lock().clone_from(hotkeys);
}
Ok(())
@ -142,7 +142,7 @@ impl Hotkey {
});
new_map.iter().for_each(|(&key, &func)| {
if old_map.get(key).is_none() {
if !old_map.contains_key(key) {
add_list.push((key, func));
}
});

View File

@ -22,7 +22,8 @@ pub fn grant_permission(core: String) -> anyhow::Result<()> {
#[cfg(target_os = "linux")]
let output = {
let path = path.replace(' ', "\\ "); // 避免路径中有空格
let shell = format!("setcap cap_net_bind_service,cap_net_admin,cap_dac_override=+ep {path}");
let shell =
format!("setcap cap_net_bind_service,cap_net_admin,cap_dac_override=+ep {path}");
let sudo = match Command::new("which").arg("pkexec").output() {
Ok(output) => {

View File

@ -1,13 +1,14 @@
pub mod clash_api;
#[allow(clippy::module_inception)]
mod core;
pub mod handle;
pub mod hotkey;
pub mod logger;
pub mod manager;
pub mod service;
pub mod sysopt;
pub mod timer;
pub mod tray;
pub mod service;
pub mod win_uwp;
pub use self::core::*;

View File

@ -41,6 +41,34 @@ static DEFAULT_BYPASS: &str = "localhost,127.0.0.1,192.168.0.0/16,10.0.0.0/8,172
static DEFAULT_BYPASS: &str =
"127.0.0.1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,localhost,*.local,*.crashlytics.com,<local>";
fn get_bypass() -> String {
let bypass = DEFAULT_BYPASS.to_string();
let res = {
let verge = Config::verge();
let verge = verge.latest();
verge.system_proxy_bypass.clone()
};
let custom_bypass = match res {
Some(bypass) => bypass,
None => "".to_string(),
};
#[cfg(target_os = "windows")]
let bypass = if custom_bypass.is_empty() {
bypass
} else {
format!("{};{}", bypass, custom_bypass)
};
#[cfg(not(target_os = "windows"))]
let bypass = if custom_bypass.is_empty() {
bypass
} else {
format!("{},{}", bypass, custom_bypass)
};
bypass
}
impl Sysopt {
pub fn global() -> &'static Sysopt {
static SYSOPT: OnceCell<Sysopt> = OnceCell::new();
@ -63,12 +91,11 @@ impl Sysopt {
.unwrap_or(Config::clash().data().get_mixed_port());
let pac_port = IVerge::get_singleton_port();
let (enable, bypass, pac) = {
let (enable, pac) = {
let verge = Config::verge();
let verge = verge.latest();
(
verge.enable_system_proxy.unwrap_or(false),
verge.system_proxy_bypass.clone(),
verge.proxy_auto_config.unwrap_or(false),
)
};
@ -76,16 +103,7 @@ impl Sysopt {
enable,
host: String::from("127.0.0.1"),
port,
bypass: match bypass {
Some(bypass) => {
if bypass.is_empty() {
DEFAULT_BYPASS.into()
} else {
bypass
}
}
None => DEFAULT_BYPASS.into(),
},
bypass: get_bypass(),
};
let mut auto = Autoproxy {
enable,
@ -127,28 +145,26 @@ impl Sysopt {
let mut cur_autoproxy = self.cur_autoproxy.lock();
let old_autoproxy = self.old_autoproxy.lock();
let (enable, bypass, pac) = {
let (enable, pac) = {
let verge = Config::verge();
let verge = verge.latest();
(
verge.enable_system_proxy.unwrap_or(false),
verge.system_proxy_bypass.clone(),
verge.proxy_auto_config.unwrap_or(false),
)
};
if pac {
if cur_autoproxy.is_none() || old_autoproxy.is_none() {
drop(cur_autoproxy);
drop(old_autoproxy);
return self.init_sysproxy();
}
} else {
if cur_sysproxy.is_none() || old_sysproxy.is_none() {
drop(cur_sysproxy);
drop(old_sysproxy);
return self.init_sysproxy();
}
if pac && (cur_autoproxy.is_none() || old_autoproxy.is_none()) {
drop(cur_autoproxy);
drop(old_autoproxy);
return self.init_sysproxy();
}
if !pac && (cur_sysproxy.is_none() || old_sysproxy.is_none()) {
drop(cur_sysproxy);
drop(old_sysproxy);
return self.init_sysproxy();
}
let port = Config::verge()
.latest()
.verge_mixed_port
@ -156,16 +172,7 @@ impl Sysopt {
let pac_port = IVerge::get_singleton_port();
let mut sysproxy = cur_sysproxy.take().unwrap();
sysproxy.bypass = match bypass {
Some(bypass) => {
if bypass.is_empty() {
DEFAULT_BYPASS.into()
} else {
bypass
}
}
None => DEFAULT_BYPASS.into(),
};
sysproxy.bypass = get_bypass();
sysproxy.port = port;
let mut autoproxy = cur_autoproxy.take().unwrap();
@ -349,14 +356,13 @@ impl Sysopt {
loop {
sleep(Duration::from_secs(wait_secs)).await;
let (enable, guard, guard_duration, bypass, pac) = {
let (enable, guard, guard_duration, pac) = {
let verge = Config::verge();
let verge = verge.latest();
(
verge.enable_system_proxy.unwrap_or(false),
verge.enable_proxy_guard.unwrap_or(false),
verge.proxy_guard_duration.unwrap_or(10),
verge.system_proxy_bypass.clone(),
verge.proxy_auto_config.unwrap_or(false),
)
};
@ -389,16 +395,7 @@ impl Sysopt {
enable: true,
host: "127.0.0.1".into(),
port,
bypass: match bypass {
Some(bypass) => {
if bypass.is_empty() {
DEFAULT_BYPASS.into()
} else {
bypass
}
}
None => DEFAULT_BYPASS.into(),
},
bypass: get_bypass(),
};
log_err!(sysproxy.set_system_proxy());

View File

@ -88,13 +88,13 @@ impl ChainItem {
impl ChainSupport {
pub fn is_support(&self, core: Option<&String>) -> bool {
match core {
Some(core) => match (self, core.as_str()) {
(ChainSupport::All, _) => true,
(ChainSupport::Clash, "clash") => true,
(ChainSupport::ClashMeta, "clash-meta") => true,
(ChainSupport::ClashMetaAlpha, "clash-meta-alpha") => true,
_ => false,
},
Some(core) => matches!(
(self, core.as_str()),
(ChainSupport::All, _)
| (ChainSupport::Clash, "clash")
| (ChainSupport::ClashMeta, "clash-meta")
| (ChainSupport::ClashMetaAlpha, "clash-meta-alpha")
),
None => true,
}
}

View File

@ -60,11 +60,7 @@ pub fn use_sort(config: Mapping) -> Mapping {
let supported_keys: HashSet<&str> = HANDLE_FIELDS.into_iter().chain(DEFAULT_FIELDS).collect();
let config_keys: HashSet<&str> = config
.keys()
.filter_map(|e| e.as_str())
.into_iter()
.collect();
let config_keys: HashSet<&str> = config.keys().filter_map(|e| e.as_str()).collect();
config_keys.difference(&supported_keys).for_each(|&key| {
let key = Value::from(key);

View File

@ -12,7 +12,7 @@ const MERGE_FIELDS: [&str; 6] = [
fn deep_merge(a: &mut Value, b: &Value) {
match (a, b) {
(&mut Value::Mapping(ref mut a), &Value::Mapping(ref b)) => {
(&mut Value::Mapping(ref mut a), Value::Mapping(b)) => {
for (k, v) in b {
deep_merge(a.entry(k.clone()).or_insert(Value::Null), v);
}

View File

@ -136,17 +136,15 @@ pub fn enhance() -> (Mapping, Vec<String>, HashMap<String, ResultLog>) {
.map(|(_, c)| c)
.for_each(|item| {
log::debug!(target: "app", "run builtin script {}", item.uid);
match item.data {
ChainType::Script(script) => match use_script(script, config.to_owned()) {
if let ChainType::Script(script) = item.data {
match use_script(script, config.to_owned()) {
Ok((res_config, _)) => {
config = res_config;
}
Err(err) => {
log::error!(target: "app", "builtin script error `{err}`");
}
},
_ => {}
}
}
});
}
@ -155,7 +153,7 @@ pub fn enhance() -> (Mapping, Vec<String>, HashMap<String, ResultLog>) {
config = use_sort(config);
let mut exists_set = HashSet::new();
exists_set.extend(exists_keys.into_iter());
exists_set.extend(exists_keys);
exists_keys = exists_set.into_iter().collect();
(config, exists_keys, result_map)

View File

@ -16,7 +16,7 @@ pub fn use_script(script: String, config: Mapping) -> Result<(Mapping, Vec<(Stri
2,
NativeFunction::from_closure(
move |_: &JsValue, args: &[JsValue], context: &mut Context| {
let level = args.get(0).unwrap().to_string(context)?;
let level = args.first().unwrap().to_string(context)?;
let level = level.to_std_string().unwrap();
let data = args.get(1).unwrap().to_string(context)?;
let data = data.to_std_string().unwrap();

View File

@ -106,7 +106,7 @@ pub fn toggle_tun_mode() {
pub async fn patch_clash(patch: Mapping) -> Result<()> {
Config::clash().draft().patch_config(patch.clone());
match {
let res = {
let redir_port = patch.get("redir-port");
let tproxy_port = patch.get("tproxy-port");
let mixed_port = patch.get("mixed-port");
@ -156,7 +156,8 @@ pub async fn patch_clash(patch: Mapping) -> Result<()> {
Config::runtime().latest().patch_config(patch);
<Result<()>>::Ok(())
} {
};
match res {
Ok(()) => {
Config::clash().apply();
Config::clash().data().save_config()?;
@ -193,7 +194,7 @@ pub async fn patch_verge(patch: IVerge) -> Result<()> {
let tproxy_enabled = patch.verge_tproxy_enabled;
let socks_enabled = patch.verge_socks_enabled;
let http_enabled = patch.verge_http_enabled;
match {
let res = {
let service_mode = patch.enable_service_mode;
if service_mode.is_some() {
@ -255,7 +256,8 @@ pub async fn patch_verge(patch: IVerge) -> Result<()> {
}
<Result<()>>::Ok(())
} {
};
match res {
Ok(()) => {
Config::verge().apply();
Config::verge().data().save_file()?;

View File

@ -137,7 +137,7 @@ pub fn delete_log() -> Result<()> {
}
let service_log_dir = log_dir.join("service");
for file in fs::read_dir(&service_log_dir)?.flatten() {
for file in fs::read_dir(service_log_dir)?.flatten() {
let _ = process_file(file);
}
@ -318,11 +318,11 @@ pub fn startup_script() -> Result<()> {
Some(dir) => {
let _ = Command::new(shell)
.current_dir(dir.to_path_buf())
.args(&[path])
.args([path])
.output()?;
}
None => {
let _ = Command::new(shell).args(&[path]).output()?;
let _ = Command::new(shell).args([path]).output()?;
}
}
}

View File

@ -99,9 +99,12 @@ pub fn resolve_setup(app: &mut App) {
let argvs: Vec<String> = std::env::args().collect();
if argvs.len() > 1 {
tauri::async_runtime::block_on(async {
resolve_scheme(argvs[1].to_owned()).await;
});
let param = argvs[1].as_str();
if param.starts_with("clash:") {
tauri::async_runtime::block_on(async {
resolve_scheme(argvs[1].to_owned()).await;
});
}
}
}
@ -205,7 +208,6 @@ pub fn create_window(app_handle: &AppHandle) {
}
Err(_) => {
log::error!("failed to create window");
return;
}
}
}

View File

@ -28,12 +28,14 @@ pub fn check_singleton() -> Result<()> {
let argvs: Vec<String> = std::env::args().collect();
if argvs.len() > 1 {
let param = argvs[1].as_str();
reqwest::get(format!(
"http://127.0.0.1:{port}/commands/scheme?param={param}"
))
.await?
.text()
.await?;
if param.starts_with("clash:") {
reqwest::get(format!(
"http://127.0.0.1:{port}/commands/scheme?param={param}"
))
.await?
.text()
.await?;
}
} else {
reqwest::get(format!("http://127.0.0.1:{port}/commands/visible"))
.await?

View File

@ -2,7 +2,7 @@
"$schema": "../node_modules/@tauri-apps/cli/schema.json",
"package": {
"productName": "Clash Verge",
"version": "1.6.5"
"version": "1.6.6"
},
"build": {
"distDir": "../dist",
@ -22,8 +22,9 @@
"icons/icon.ico"
],
"resources": ["resources"],
"publisher": "Clash Verge Rev",
"externalBin": ["sidecar/clash-meta", "sidecar/clash-meta-alpha"],
"copyright": "© 2022 zzzgydi All Rights Reserved",
"copyright": "GNU General Public License v3.0",
"category": "DeveloperTool",
"shortDescription": "A Clash Meta GUI based on tauri.",
"longDescription": "A Clash Meta GUI based on tauri."

View File

@ -0,0 +1,38 @@
import React from "react";
import { Box, styled } from "@mui/material";
type Props = {
label: string;
fontSize?: string;
width?: string;
padding?: string;
children?: React.ReactNode;
};
export const BaseFieldset: React.FC<Props> = (props: Props) => {
const Fieldset = styled(Box)(() => ({
position: "relative",
border: "1px solid #bbb",
borderRadius: "5px",
width: props.width ?? "auto",
padding: props.padding ?? "15px",
}));
const Label = styled("legend")(({ theme }) => ({
position: "absolute",
top: "-10px",
left: props.padding ?? "15px",
backgroundColor: theme.palette.background.paper,
backgroundImage:
"linear-gradient(rgba(255, 255, 255, 0.16), rgba(255, 255, 255, 0.16))",
color: theme.palette.text.primary,
fontSize: props.fontSize ?? "1em",
}));
return (
<Fieldset component="fieldset">
<Label>{props.label}</Label>
{props.children}
</Fieldset>
);
};

View File

@ -278,6 +278,7 @@ export const ProfileItem = (props: Props) => {
{/* only if has url can it be updated */}
{hasUrl && (
<IconButton
title={t("Refresh")}
sx={{
position: "absolute",
p: "3px",

View File

@ -69,7 +69,7 @@ export const ProviderButton = () => {
sx={{ textTransform: "capitalize" }}
onClick={() => setOpen(true)}
>
{t("Provider")}
{t("Proxy Provider")}
</Button>
<BaseDialog
@ -171,7 +171,7 @@ export const ProviderButton = () => {
<IconButton
size="small"
color="inherit"
title="Update Provider"
title={`${t("Update")}${t("Proxy Provider")}`}
onClick={() => handleUpdate(key, index)}
sx={{
animation: updating[index]

View File

@ -67,7 +67,7 @@ export const ProviderButton = () => {
sx={{ textTransform: "capitalize" }}
onClick={() => setOpen(true)}
>
{t("Provider")}
{t("Rule Provider")}
</Button>
<BaseDialog
@ -145,7 +145,7 @@ export const ProviderButton = () => {
<IconButton
size="small"
color="inherit"
title="Update Provider"
title={`${t("Update")}${t("Rule Provider")}`}
onClick={() => handleUpdate(key, index)}
sx={{
animation: updating[index]

View File

@ -1,10 +1,9 @@
import { forwardRef, useImperativeHandle, useState } from "react";
import { useLockFn } from "ahooks";
import { useTranslation } from "react-i18next";
import { IconButton, Tooltip } from "@mui/material";
import { Box, IconButton, Tooltip } from "@mui/material";
import { InfoRounded } from "@mui/icons-material";
import {
Box,
InputAdornment,
List,
ListItem,
@ -19,12 +18,22 @@ import { getSystemProxy, getAutotemProxy } from "@/services/cmds";
import { BaseDialog, DialogRef, Notice, Switch } from "@/components/base";
import { Edit } from "@mui/icons-material";
import { EditorViewer } from "@/components/profile/editor-viewer";
import { BaseFieldset } from "@/components/base/base-fieldset";
import getSystem from "@/utils/get-system";
const DEFAULT_PAC = `function FindProxyForURL(url, host) {
return "PROXY 127.0.0.1:%mixed-port%; SOCKS5 127.0.0.1:%mixed-port%; DIRECT;";
}`;
export const SysproxyViewer = forwardRef<DialogRef>((props, ref) => {
const { t } = useTranslation();
let validReg;
if (getSystem() === "windows") {
validReg =
/^(\*?\w+(\.\w+)*|\d{1,3}(\.\d{1,3}){0,2}\.\*|\d{1,3}(\.\d{1,3}){3})(;(\*?\w+(\.\w+)*|\d{1,3}(\.\d{1,3}){0,2}\.\*|\d{1,3}(\.\d{1,3}){3}))*$/;
} else {
validReg =
/^((\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}|(\d{1,3}\.){3}\d{1,3}(\/\d{1,2})?|([a-fA-F0-9:]+:+)+[a-fA-F0-9]+(\/\d{1,3})?)(,((\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}|(\d{1,3}\.){3}\d{1,3}(\/\d{1,2})?|([a-fA-F0-9:]+:+)+[a-fA-F0-9]+(\/\d{1,3})?))*$/;
}
const [open, setOpen] = useState(false);
const [editorOpen, setEditorOpen] = useState(false);
@ -92,7 +101,10 @@ export const SysproxyViewer = forwardRef<DialogRef>((props, ref) => {
if (value.pac_content !== pac_file_content) {
patch.pac_file_content = value.pac_content;
}
if (value.bypass && !validReg.test(value.bypass)) {
Notice.error(t("Invalid Bypass Format"));
return;
}
try {
await patchVerge(patch);
setOpen(false);
@ -113,16 +125,7 @@ export const SysproxyViewer = forwardRef<DialogRef>((props, ref) => {
onOk={onSave}
>
<List>
<Box
sx={{
border: "1px solid #bbb",
borderRadius: "5px",
padding: "8px",
}}
>
<Typography variant="body1" sx={{ fontSize: "18px" }}>
{t("Current System Proxy")}
</Typography>
<BaseFieldset label={t("Current System Proxy")} padding="15px 10px">
<FlexBox>
<Typography className="label">{t("Enable status")}</Typography>
<Typography className="value">
@ -145,7 +148,13 @@ export const SysproxyViewer = forwardRef<DialogRef>((props, ref) => {
</FlexBox>
</>
)}
</Box>
{value.pac && (
<FlexBox>
<Typography className="label">{t("PAC URL")}</Typography>
<Typography className="value">{autoproxy?.url || "-"}</Typography>
</FlexBox>
)}
</BaseFieldset>
<ListItem sx={{ padding: "5px 2px" }}>
<ListItemText primary={t("Use PAC Mode")} />
<Switch
@ -192,30 +201,23 @@ export const SysproxyViewer = forwardRef<DialogRef>((props, ref) => {
}}
/>
</ListItem>
{!value.pac && (
<>
<FlexBox>
<Typography className="label">{t("Proxy Bypass")}</Typography>
</FlexBox>
<FlexBox>
<TextField
disabled={!enabled}
size="small"
autoComplete="off"
multiline
rows={4}
sx={{ width: "100%" }}
value={value.bypass}
placeholder={sysproxy?.bypass || `-`}
onChange={(e) =>
setValue((v) => ({ ...v, bypass: e.target.value }))
}
/>
</FlexBox>
<FlexBox>
<Typography className="label">{t("Bypass")}</Typography>
</FlexBox>
<ListItemText primary={t("Proxy Bypass")} />
<TextField
error={value.bypass ? !validReg.test(value.bypass) : false}
disabled={!enabled}
size="small"
autoComplete="off"
multiline
rows={4}
sx={{ width: "100%" }}
value={value.bypass}
onChange={(e) => {
setValue((v) => ({ ...v, bypass: e.target.value }));
}}
/>
<ListItemText primary={t("Bypass")} />
<FlexBox>
<TextField
disabled={true}
@ -229,7 +231,6 @@ export const SysproxyViewer = forwardRef<DialogRef>((props, ref) => {
</FlexBox>
</>
)}
{value.pac && (
<>
<ListItem sx={{ padding: "5px 2px", alignItems: "start" }}>
@ -266,13 +267,6 @@ export const SysproxyViewer = forwardRef<DialogRef>((props, ref) => {
</ListItem>
</>
)}
{value.pac && (
<FlexBox>
<Typography className="label">{t("PAC URL")}</Typography>
<Typography className="value">{autoproxy?.url || "-"}</Typography>
</FlexBox>
)}
</List>
</BaseDialog>
);

View File

@ -13,6 +13,7 @@ import {
EditRounded,
OpenInNewRounded,
} from "@mui/icons-material";
import { useTranslation } from "react-i18next";
interface Props {
value?: string;
@ -35,6 +36,7 @@ export const WebUIItem = (props: Props) => {
const [editing, setEditing] = useState(false);
const [editValue, setEditValue] = useState(value);
const { t } = useTranslation();
if (editing || onlyEdit) {
return (
@ -45,12 +47,12 @@ export const WebUIItem = (props: Props) => {
size="small"
value={editValue}
onChange={(e) => setEditValue(e.target.value)}
placeholder={`Support %host %port %secret`}
placeholder={t("Support %host, %port, %secret")}
autoComplete="off"
/>
<IconButton
size="small"
title="Save"
title={t("Save")}
color="inherit"
onClick={() => {
onChange(editValue);
@ -61,7 +63,7 @@ export const WebUIItem = (props: Props) => {
</IconButton>
<IconButton
size="small"
title="Cancel"
title={t("Cancel")}
color="inherit"
onClick={() => {
onCancel?.();
@ -100,7 +102,7 @@ export const WebUIItem = (props: Props) => {
/>
<IconButton
size="small"
title="Open URL"
title={t("Open URL")}
color="inherit"
onClick={() => onOpenUrl?.(value)}
>
@ -108,7 +110,7 @@ export const WebUIItem = (props: Props) => {
</IconButton>
<IconButton
size="small"
title="Edit"
title={t("Edit")}
color="inherit"
onClick={() => {
setEditing(true);
@ -119,7 +121,7 @@ export const WebUIItem = (props: Props) => {
</IconButton>
<IconButton
size="small"
title="Delete"
title={t("Delete")}
color="inherit"
onClick={onDelete}
>

View File

@ -105,10 +105,10 @@ export const WebUIViewer = forwardRef<DialogRef>((props, ref) => {
>
{!editing && webUIList.length === 0 && (
<BaseEmpty
text="Empty List"
text="Empty"
extra={
<Typography mt={2} sx={{ fontSize: "12px" }}>
Replace host, port, secret with "%host" "%port" "%secret"
{t("Replace host, port, secret with %host, %port, %secret")}
</Typography>
}
/>

View File

@ -175,7 +175,7 @@ export const TestItem = (props: Props) => {
":hover": { bgcolor: alpha(palette.primary.main, 0.15) },
})}
>
Check
{t("Test")}
</Widget>
)}

View File

@ -1,60 +1,33 @@
{
"Back": "Back",
"Close": "Close",
"Cancel": "Cancel",
"Confirm": "Confirm",
"New": "New",
"Edit": "Edit",
"Save": "Save",
"Delete": "Delete",
"Enable": "Enable",
"Disable": "Disable",
"Label-Proxies": "Proxies",
"Label-Test": "Test",
"Label-Profiles": "Profiles",
"Label-Connections": "Connections",
"Label-Logs": "Logs",
"Label-Rules": "Rules",
"Label-Logs": "Logs",
"Label-Test": "Test",
"Label-Settings": "Settings",
"Connections": "Connections",
"Logs": "Logs",
"Clear": "Clear",
"Proxies": "Proxies",
"Proxy Groups": "Proxy Groups",
"Test": "Test",
"Proxy Provider": "Proxy Provider",
"Update All": "Update All",
"Update At": "Update At",
"rule": "rule",
"global": "global",
"direct": "direct",
"script": "script",
"Create Test": "Create Test",
"Edit Test": "Edit Test",
"Edit": "Edit",
"Icon": "Icon",
"Test URL": "Test URL",
"Test All": "Test All",
"Paste": "Paste",
"Profiles": "Profiles",
"Profile URL": "Profile URL",
"Import": "Import",
"New": "New",
"Create Profile": "Create Profile",
"Edit Profile": "Edit Profile",
"Choose File": "Choose File",
"Close": "Close",
"Close All": "Close All",
"Home": "Home",
"Select": "Select",
"Edit Info": "Edit Info",
"Edit File": "Edit File",
"Open File": "Open File",
"Update": "Update",
"Update(Proxy)": "Update(Proxy)",
"Delete": "Delete",
"Enable": "Enable",
"Disable": "Disable",
"Refresh": "Refresh",
"To Top": "To Top",
"To End": "To End",
"Update All Profiles": "Update All Profiles",
"View Runtime Config": "View Runtime Config",
"Reactivate Profiles": "Reactivate Profiles",
"Confirm deletion": "Confirm deletion",
"This operation is not reversible": "This operation is not reversible",
"Script Console": "Script Console",
"Location": "Location",
"Delay check": "Delay check",
"Sort by default": "Sort by default",
@ -64,13 +37,46 @@
"Delay check to cancel fixed": "Delay check to cancel fixed",
"Proxy basic": "Proxy basic",
"Proxy detail": "Proxy detail",
"Filter": "Filter",
"Filter conditions": "Filter conditions",
"Refresh profiles": "Refresh profiles",
"Rules": "Rules",
"Update All": "Update All",
"Update At": "Update At",
"Profiles": "Profiles",
"Update All Profiles": "Update All Profiles",
"View Runtime Config": "View Runtime Config",
"Reactivate Profiles": "Reactivate Profiles",
"Paste": "Paste",
"Profile URL": "Profile URL",
"Import": "Import",
"Create Profile": "Create Profile",
"Edit Profile": "Edit Profile",
"Type": "Type",
"Name": "Name",
"Descriptions": "Descriptions",
"Subscription URL": "Subscription URL",
"Update Interval": "Update Interval",
"Choose File": "Choose File",
"Use System Proxy": "Use System Proxy",
"Use Clash Proxy": "Use Clash Proxy",
"Accept Invalid Certs (Danger)": "Allows Invalid Certificates (Danger)",
"Refresh": "Refresh",
"Home": "Home",
"Select": "Select",
"Edit Info": "Edit Info",
"Edit File": "Edit File",
"Open File": "Open File",
"Update": "Update",
"Update(Proxy)": "Update(Proxy)",
"Confirm deletion": "Confirm deletion",
"This operation is not reversible": "This operation is not reversible",
"Script Console": "Script Console",
"To Top": "To Top",
"To End": "To End",
"Connections": "Connections",
"Table View": "Table View",
"List View": "List View",
"Close All": "Close All",
"Default": "Default",
"Download Speed": "Download Speed",
"Upload Speed": "Upload Speed",
"Host": "Host",
"Downloaded": "Downloaded",
"Uploaded": "Uploaded",
@ -84,94 +90,98 @@
"Destination IP": "Destination IP",
"Close Connection": "Close Connection",
"Type": "Type",
"Name": "Name",
"Descriptions": "Descriptions",
"Subscription URL": "Subscription URL",
"Update Interval": "Update Interval",
"Use System Proxy": "Use System Proxy",
"Use Clash Proxy": "Use Clash Proxy",
"Accept Invalid Certs (Danger)": "Allows Invalid Certificates (Danger)",
"Rules": "Rules",
"Rule Provider": "Rule Provider",
"Logs": "Logs",
"Pause": "Pause",
"Clear": "Clear",
"Test": "Test",
"Test All": "Test All",
"Create Test": "Create Test",
"Edit Test": "Edit Test",
"Icon": "Icon",
"Test URL": "Test URL",
"Settings": "Settings",
"Clash Setting": "Clash Setting",
"System Setting": "System Setting",
"Verge Setting": "Verge Setting",
"Tun Mode": "Tun Mode",
"Reset to Default": "Reset to Default",
"Tun Mode Info": "The Tun mode requires granting core-related permissions. Please enable service mode before using it",
"Stack": "Tun Stack",
"System and Mixed Can Only be Used in Service Mode": "System and Mixed Can Only be Used in Service Mode",
"Device": "Device Name",
"Auto Route": "Auto Route",
"Strict Route": "Strict Route",
"Auto Detect Interface": "Auto Detect Interface",
"DNS Hijack": "DNS Hijack",
"MTU": "Max Transmission Unit",
"Service Mode": "Service Mode",
"Current State": "Current State",
"pending": "pending",
"installed": "installed",
"uninstall": "uninstalled",
"active": "active",
"unknown": "unknown",
"Information: Please make sure that the Clash Verge Service is installed and enabled": "Information: Please make sure that the Clash Verge Service is installed and enabled",
"Install": "Install",
"Uninstall": "Uninstall",
"Disable Service Mode": "Disable Service Mode",
"System Proxy": "System Proxy",
"System Proxy Info": "Enable to modify the operating system's proxy settings. If enabling fails, modify the operating system's proxy settings manually",
"System Proxy Setting": "System Proxy Setting",
"Current System Proxy": "Current System Proxy",
"Enable status": "Enable Status:",
"Enabled": "Enabled",
"Disabled": "Disabled",
"Server Addr": "Server Addr: ",
"Not available": "Not available",
"Proxy Guard": "Proxy Guard",
"Proxy Guard Info": "Enable to prevent other software from modifying the operating system's proxy settings",
"Guard Duration": "Guard Duration",
"Proxy Bypass": "Proxy Bypass Settings: ",
"Bypass": "Bypass: ",
"Use PAC Mode": "Use PAC Mode",
"PAC Script Content": "PAC Script Content",
"PAC URL": "PAC URL: ",
"Auto Launch": "Auto Launch",
"Silent Start": "Silent Start",
"Clash Setting": "Clash Setting",
"Allow Lan": "Allow Lan",
"IPv6": "IPv6",
"Log Level": "Log Level",
"Port Config": "Port Config",
"Random Port": "Random Port",
"Restart Application to Apply Modifications": "Restart Application to Apply Modifications",
"External": "External",
"External Controller": "External Controller",
"Core Secret": "Core Secret",
"Recommended": "Recommended",
"Open URL": "Open URL",
"Replace host, port, secret with %host, %port, %secret": "Replace host, port, secret with %host, %port, %secret",
"Support %host, %port, %secret": "Support %host, %port, %secret",
"Clash Core": "Clash Core",
"Grant": "Grant",
"Upgrade": "Upgrade",
"Restart": "Restart",
"Tun mode requires": "Tun mode requires",
"Tun Mode": "Tun Mode",
"Service Mode": "Service Mode",
"Auto Launch": "Auto Launch",
"Silent Start": "Silent Start",
"System Proxy": "System Proxy",
"System Proxy Info": "Enable to modify the operating system's proxy settings. If enabling fails, modify the operating system's proxy settings manually",
"System Proxy Setting": "System Proxy Setting",
"Grant": "Grant",
"Open UWP tool": "Open UWP tool",
"Update GeoData": "Update GeoData",
"Use PAC Mode": "Use PAC Mode",
"PAC URL": "PAC URL: ",
"PAC Script Content": "PAC Script Content",
"Proxy Guard": "Proxy Guard",
"Proxy Guard Info": "Enable to prevent other software from modifying the operating system's proxy settings",
"Guard Duration": "Guard Duration",
"Proxy Bypass": "Proxy Bypass Settings:",
"Current System Proxy": "Current System Proxy",
"Enable status": "Enable Status:",
"Enabled": "Enabled",
"Disabled": "Disabled",
"Server Addr": "Server Addr:",
"Not available": "Not available",
"Bypass": "Bypass:",
"Verge Setting": "Verge Setting",
"Language": "Language",
"Theme Mode": "Theme Mode",
"theme.light": "Light",
"theme.dark": "Dark",
"theme.system": "System",
"Tray Click Event": "Tray Click Event",
"Show Main Window": "Show Main Window",
"Copy Env Type": "Copy Env Type",
"Start Page": "Start Page",
"Startup Script": "Startup Script",
"Browse": "Browse",
"Show Main Window": "Show Main Window",
"Theme Setting": "Theme Setting",
"Layout Setting": "Layout Setting",
"Miscellaneous": "Miscellaneous",
"Hotkey Setting": "Hotkey Setting",
"Traffic Graph": "Traffic Graph",
"Memory Usage": "Memory Usage",
"Proxy Group Icon": "Proxy Group Icon",
"Tray Icon": "Tray Icon",
"Menu Icon": "Menu Icon",
"Monochrome": "Monochrome",
"Colorful": "Colorful",
"Common Tray Icon": "Common Tray Icon",
"System Proxy Tray Icon": "System Proxy Tray Icon",
"Tun Tray Icon": "Tun Tray Icon",
"Language": "Language",
"Open App Dir": "Open App Dir",
"Open Core Dir": "Open Core Dir",
"Open Logs Dir": "Open Logs Dir",
"Check for Updates": "Check for Updates",
"Open Dev Tools": "Open Dev Tools",
"Verge Version": "Verge Version",
"theme.light": "Light",
"theme.dark": "Dark",
"theme.system": "System",
"Clash Field": "Clash Field",
"Runtime Config": "Runtime Config",
"ReadOnly": "ReadOnly",
"ReadOnlyMessage": "Cannot edit in read-only editor",
"Go to Release Page": "Go to Release Page",
"Restart": "Restart",
"Upgrade": "Upgrade",
"Primary Color": "Primary Color",
"Secondary Color": "Secondary Color",
"Primary Text": "Primary Text",
@ -182,82 +192,74 @@
"Success Color": "Success Color",
"Font Family": "Font Family",
"CSS Injection": "CSS Injection",
"Back": "Back",
"Save": "Save",
"Cancel": "Cancel",
"Exit": "Exit",
"Confirm": "Confirm",
"Default": "Default",
"Download Speed": "Download Speed",
"Upload Speed": "Upload Speed",
"Layout Setting": "Layout Setting",
"Traffic Graph": "Traffic Graph",
"Memory Usage": "Memory Usage",
"Proxy Group Icon": "Proxy Group Icon",
"Menu Icon": "Menu Icon",
"Monochrome": "Monochrome",
"Colorful": "Colorful",
"Tray Icon": "Tray Icon",
"Common Tray Icon": "Common Tray Icon",
"System Proxy Tray Icon": "System Proxy Tray Icon",
"Tun Tray Icon": "Tun Tray Icon",
"Miscellaneous": "Miscellaneous",
"App Log Level": "App Log Level",
"Auto Close Connections": "Auto Close Connections",
"Auto Check Update": "Auto Check Update",
"Enable Builtin Enhanced": "Enable Builtin Enhanced",
"Proxy Layout Column": "Proxy Layout Column",
"Auto Log Clean": "Auto Log Clean",
"Never Clean": "Never Clean",
"Retain 7 Days": "Retain 7 Days",
"Retain 30 Days": "Retain 30 Days",
"Retain 90 Days": "Retain 90 Days",
"Default Latency Test": "Default Latency Test",
"Default Latency Timeout": "Default Latency Timeout",
"Hotkey Setting": "Hotkey Setting",
"open_or_close_dashboard": "Open/Close Dashboard",
"clash_mode_rule": "Rule Mode",
"clash_mode_global": "Global Mode",
"clash_mode_direct": "Direct Mode",
"toggle_system_proxy": "Enable/Disable System Proxy",
"toggle_tun_mode": "Enable/Disable Tun Mode",
"App Log Level": "App Log Level",
"Auto Close Connections": "Auto Close Connections",
"Auto Check Update": "Auto Check Update",
"Enable Builtin Enhanced": "Enable Builtin Enhanced",
"Proxy Layout Column": "Proxy Layout Column",
"Default Latency Test": "Default Latency Test",
"Default Latency Timeout": "Default Latency Timeout",
"Auto Log Clean": "Auto Log Clean",
"Never Clean": "Never Clean",
"Retain 7 Days": "Retain 7 Days",
"Retain 30 Days": "Retain 30 Days",
"Retain 90 Days": "Retain 90 Days",
"Stack": "Tun Stack",
"Device": "Device Name",
"Auto Route": "Auto Route",
"Strict Route": "Strict Route",
"Auto Detect Interface": "Auto Detect Interface",
"DNS Hijack": "DNS Hijack",
"MTU": "Max Transmission Unit",
"Reset to Default": "Reset to Default",
"Current State": "Current State",
"pending": "pending",
"installed": "installed",
"uninstall": "uninstalled",
"active": "active",
"unknown": "unknown",
"Disable Service Mode": "Disable Service Mode",
"Install": "Install",
"Uninstall": "Uninstall",
"Runtime Config": "Runtime Config",
"Open App Dir": "Open App Dir",
"Open Core Dir": "Open Core Dir",
"Open Logs Dir": "Open Logs Dir",
"Check for Updates": "Check for Updates",
"Go to Release Page": "Go to Release Page",
"Portable Updater Error": "The portable version does not support in-app updates. Please manually download and replace it",
"Tun Mode Info": "The Tun mode requires granting core-related permissions. Please enable service mode before using it",
"System and Mixed Can Only be Used in Service Mode": "System and Mixed Can Only be Used in Service Mode",
"Information: Please make sure that the Clash Verge Service is installed and enabled": "Information: Please make sure that the Clash Verge Service is installed and enabled",
"Open Dev Tools": "Open Dev Tools",
"Exit": "Exit",
"Verge Version": "Verge Version",
"ReadOnly": "ReadOnly",
"ReadOnlyMessage": "Cannot edit in read-only editor",
"Filter": "Filter",
"Filter conditions": "Filter conditions",
"Match Case": "Match Case",
"Match Whole Word": "Match Whole Word",
"Use Regular Expression": "Use Regular Expression",
"External Controller Address Modified": "External Controller Address Modified",
"Clash Port Modified": "Clash Port Modified",
"Currently on the Latest Version": "Currently on the Latest Version",
"Only YAML Files Supported": "Only YAML Files Supported",
"Port Conflict": "Port Conflict",
"Proxy Daemon Duration Cannot be Less than 1 Second": "Proxy Daemon Duration Cannot be Less than 1 Second",
"Profile Imported Successfully": "Profile Imported Successfully",
"Clash Config Updated": "Clash Config Updated",
"Profile Switched": "Profile Switched",
"Profile Reactivated": "Profile Reactivated",
"Clash Config Updated": "Clash Config Updated",
"Only YAML Files Supported": "Only YAML Files Supported",
"Settings Applied": "Settings Applied",
"Service Installed Successfully": "Service Installed Successfully",
"Service Uninstalled Successfully": "Service Uninstalled Successfully",
"GeoData Updated": "GeoData Updated",
"Proxy Daemon Duration Cannot be Less than 1 Second": "Proxy Daemon Duration Cannot be Less than 1 Second",
"Invalid Bypass Format": "Invalid Bypass Format",
"Clash Port Modified": "Clash Port Modified",
"Port Conflict": "Port Conflict",
"Restart Application to Apply Modifications": "Restart Application to Apply Modifications",
"External Controller Address Modified": "External Controller Address Modified",
"Permissions Granted Successfully for _clash Core": "Permissions Granted Successfully for {{core}} Core",
"Profile Imported Successfully": "Profile Imported Successfully",
"Core Version Updated": "Core Version Updated",
"Clash Core Restarted": "Clash Core Restarted",
"Switched to _clash Core": "Switched to {{core}} Core",
"Core Version Updated": "Core Version Updated"
"GeoData Updated": "GeoData Updated",
"Currently on the Latest Version": "Currently on the Latest Version"
}

View File

@ -1,60 +1,33 @@
{
"Back": "بازگشت",
"Close": "بستن",
"Cancel": "لغو",
"Confirm": "تأیید",
"New": "جدید",
"Edit": "ویرایش",
"Save": "ذخیره",
"Delete": "حذف",
"Enable": "فعال کردن",
"Disable": "غیرفعال کردن",
"Label-Proxies": "پراکسی‌ها",
"Label-Test": "آزمون",
"Label-Profiles": "پروفایل‌ها",
"Label-Connections": "اتصالات",
"Label-Logs": "لاگ‌ها",
"Label-Rules": "قوانین",
"Label-Logs": "لاگ‌ها",
"Label-Test": "آزمون",
"Label-Settings": "تنظیمات",
"Connections": "اتصالات",
"Logs": "لاگ‌ها",
"Clear": "پاک کردن",
"Proxies": "پراکسی‌ها",
"Proxy Groups": "گروه‌های پراکسی",
"Test": "آزمون",
"Proxy Provider": "تأمین‌کننده پروکسی",
"Update All": "به‌روزرسانی همه",
"Update At": "به‌روزرسانی در",
"rule": "قانون",
"global": "جهانی",
"direct": "مستقیم",
"script": "اسکریپت",
"Create Test": "ایجاد آزمون",
"Edit Test": "ویرایش آزمون",
"Edit": "ویرایش",
"Icon": "آیکون",
"Test URL": "آدرس آزمون",
"Test All": "آزمون همه",
"Paste": "چسباندن",
"Profiles": "پروفایل‌ها",
"Profile URL": "آدرس پروفایل",
"Import": "وارد کردن",
"New": "جدید",
"Create Profile": "ایجاد پروفایل",
"Edit Profile": "ویرایش پروفایل",
"Choose File": "انتخاب فایل",
"Close": "بستن",
"Close All": "بستن همه",
"Home": "خانه",
"Select": "انتخاب",
"Edit Info": "ویرایش اطلاعات",
"Edit File": "ویرایش فایل",
"Open File": "باز کردن فایل",
"Update": "به‌روزرسانی",
"Update(Proxy)": "به‌روزرسانی (پراکسی)",
"Delete": "حذف",
"Enable": "فعال کردن",
"Disable": "غیرفعال کردن",
"Refresh": "بازنشانی",
"To Top": "به بالا",
"To End": "به پایان",
"Update All Profiles": "به‌روزرسانی همه پروفایل‌ها",
"View Runtime Config": "مشاهده پیکربندی زمان اجرا",
"Reactivate Profiles": "فعال‌سازی مجدد پروفایل‌ها",
"Confirm deletion": "تأیید حذف",
"This operation is not reversible": "این عملیات قابل برگشت نیست",
"Script Console": "کنسول اسکریپت",
"Location": "موقعیت",
"Delay check": "بررسی تأخیر",
"Sort by default": "مرتب‌سازی بر اساس پیش‌فرض",
@ -64,13 +37,46 @@
"Delay check to cancel fixed": "بررسی تأخیر برای لغو ثابت",
"Proxy basic": "پراکسی پایه",
"Proxy detail": "جزئیات پراکسی",
"Filter": "فیلتر",
"Filter conditions": "شرایط فیلتر",
"Refresh profiles": "بازنشانی پروفایل‌ها",
"Rules": "قوانین",
"Update All": "به‌روزرسانی همه",
"Update At": "به‌روزرسانی در",
"Profiles": "پروفایل‌ها",
"Update All Profiles": "به‌روزرسانی همه پروفایل‌ها",
"View Runtime Config": "مشاهده پیکربندی زمان اجرا",
"Reactivate Profiles": "فعال‌سازی مجدد پروفایل‌ها",
"Paste": "چسباندن",
"Profile URL": "آدرس پروفایل",
"Import": "وارد کردن",
"Create Profile": "ایجاد پروفایل",
"Edit Profile": "ویرایش پروفایل",
"Type": "نوع",
"Name": "نام",
"Descriptions": "توضیحات",
"Subscription URL": "آدرس اشتراک",
"Update Interval": "فاصله زمانی به‌روزرسانی",
"Choose File": "انتخاب فایل",
"Use System Proxy": "استفاده از پراکسی سیستم",
"Use Clash Proxy": "استفاده از پراکسی Clash",
"Accept Invalid Certs (Danger)": "پذیرش گواهی‌نامه‌های نامعتبر (خطرناک)",
"Refresh": "بازنشانی",
"Home": "خانه",
"Select": "انتخاب",
"Edit Info": "ویرایش اطلاعات",
"Edit File": "ویرایش فایل",
"Open File": "باز کردن فایل",
"Update": "به‌روزرسانی",
"Update(Proxy)": "به‌روزرسانی (پراکسی)",
"Confirm deletion": "تأیید حذف",
"This operation is not reversible": "این عملیات قابل برگشت نیست",
"Script Console": "کنسول اسکریپت",
"To Top": "به بالا",
"To End": "به پایان",
"Connections": "اتصالات",
"Table View": "نمای جدولی",
"List View": "نمای لیستی",
"Close All": "بستن همه",
"Default": "پیش‌فرض",
"Download Speed": "سرعت دانلود",
"Upload Speed": "سرعت بارگذاری",
"Host": "میزبان",
"Downloaded": "دانلود شده",
"Uploaded": "بارگذاری شده",
@ -84,89 +90,98 @@
"Destination IP": "آدرس IP مقصد",
"Close Connection": "بستن اتصال",
"Type": "نوع",
"Name": "نام",
"Descriptions": "توضیحات",
"Subscription URL": "آدرس اشتراک",
"Update Interval": "فاصله زمانی به‌روزرسانی",
"Use System Proxy": "استفاده از پراکسی سیستم",
"Use Clash Proxy": "استفاده از پراکسی Clash",
"Accept Invalid Certs (Danger)": "پذیرش گواهی‌نامه‌های نامعتبر (خطرناک)",
"Rules": "قوانین",
"Rule Provider": "تأمین‌کننده قانون",
"Logs": "لاگ‌ها",
"Pause": "توقف",
"Clear": "پاک کردن",
"Test": "آزمون",
"Test All": "آزمون همه",
"Create Test": "ایجاد آزمون",
"Edit Test": "ویرایش آزمون",
"Icon": "آیکون",
"Test URL": "آدرس آزمون",
"Settings": "تنظیمات",
"Clash Setting": "تنظیمات Clash",
"System Setting": "تنظیمات سیستم",
"Verge Setting": "تنظیمات Verge",
"Tun Mode": "حالت Tun",
"Reset to Default": "بازنشانی به پیش‌فرض",
"Tun Mode Info": "حالت Tun نیاز به اعطای مجوزهای مربوط به هسته دارد. لطفاً قبل از استفاده، حالت سرویس را فعال کنید",
"Stack": "انباشته Tun",
"System and Mixed Can Only be Used in Service Mode": "سیستم و ترکیبی تنها می‌توانند در حالت سرویس استفاده شوند",
"Device": "نام دستگاه",
"Auto Route": "مسیر خودکار",
"Strict Route": "مسیر دقیق",
"Auto Detect Interface": "تشخیص خودکار رابط",
"DNS Hijack": "ربایش DNS",
"MTU": "واحد حداکثر انتقال",
"Service Mode": "حالت سرویس",
"Current State": "وضعیت فعلی",
"pending": "در انتظار",
"installed": "نصب شده",
"uninstall": "حذف شده",
"active": "فعال",
"unknown": "ناشناخته",
"Information: Please make sure that the Clash Verge Service is installed and enabled": "اطلاعات: لطفاً مطمئن شوید که سرویس Clash Verge نصب و فعال شده است",
"Install": "نصب",
"Uninstall": "حذف نصب",
"Disable Service Mode": "غیرفعال کردن حالت سرویس",
"System Proxy": "پراکسی سیستم",
"System Proxy Info": "به امکانات تنظیم پروکسی سیستم عامل دسترسی پیدا کنید. اگر فعال‌سازی ناموفق بود، پروکسی سیستم عامل را به‌صورت دستی تغییر دهید",
"System Proxy Setting": "تنظیمات پراکسی سیستم",
"Current System Proxy": "پراکسی سیستم فعلی",
"Enable status": "وضعیت فعال",
"Enabled": "توانایی فعال شد",
"Disabled": "غیرفعال شد",
"Server Addr": "آدرس سرور: ",
"Not available": "غیر فعال شد",
"Proxy Guard": "محافظ پراکسی",
"Proxy Guard Info": "امکان جلوگیری از نرم‌افزارهای دیگر از تغییر تنظیمات پروکسی سیستم عامل را فعال کنید",
"Guard Duration": "مدت محافظت",
"Proxy Bypass": "دور زدن پراکسی: ",
"Bypass": "دور زدن: ",
"Use PAC Mode": "استفاده از حالت PAC",
"PAC Script Content": "محتوای اسکریپت PAC",
"PAC URL": "PAC URL: ",
"Auto Launch": "راه‌اندازی خودکار",
"Silent Start": "شروع بی‌صدا",
"Clash Setting": "تنظیمات Clash",
"Allow Lan": "اجازه LAN",
"IPv6": "IPv6",
"Log Level": "سطح لاگ",
"Port Config": "پیکربندی پورت",
"Random Port": "پورت تصادفی",
"Restart Application to Apply Modifications": "راه‌اندازی مجدد برنامه برای اعمال تغییرات",
"External": "خارجی",
"External Controller": "کنترل‌کننده خارجی",
"Core Secret": "رمز اصلی",
"Recommended": "توصیه شده",
"Open URL": "باز کردن آدرس اینترنتی",
"Replace host, port, secret with %host, %port, %secret": "جایگزین کردن میزبان، پورت و رمز با %host، %port، %secret",
"Support %host, %port, %secret": "پشتیبانی از %host، %port و %secret",
"Clash Core": "هسته Clash",
"Grant": "اعطا",
"Upgrade": "ارتقاء",
"Restart": "راه‌اندازی مجدد",
"Tun mode requires": "Tun mode نیاز دارد",
"Tun Mode": "حالت Tun",
"Service Mode": "حالت سرویس",
"Auto Launch": "راه‌اندازی خودکار",
"Silent Start": "شروع بی‌صدا",
"System Proxy": "پراکسی سیستم",
"System Proxy Setting": "تنظیمات پراکسی سیستم",
"Grant": "اعطا",
"Open UWP tool": "باز کردن ابزار UWP",
"Update GeoData": "به‌روزرسانی GeoData",
"Use PAC Mode": "استفاده از حالت PAC",
"PAC URL": "PAC URL",
"PAC Script Content": "محتوای اسکریپت PAC",
"Proxy Guard": "محافظ پراکسی",
"Guard Duration": "مدت محافظت",
"Proxy Bypass": "دور زدن پراکسی",
"Current System Proxy": "پراکسی سیستم فعلی",
"Enable status": "وضعیت فعال",
"Server Addr": "آدرس سرور",
"Bypass": "دور زدن",
"Verge Setting": "تنظیمات Verge",
"Language": "زبان",
"Theme Mode": "حالت تم",
"theme.light": "روشن",
"theme.dark": "تاریک",
"theme.system": "سیستم",
"Tray Click Event": "رویداد کلیک در سینی سیستم",
"Show Main Window": "نمایش پنجره اصلی",
"Copy Env Type": "کپی نوع محیط",
"Start Page": "صفحه شروع",
"Startup Script": "اسکریپت راه‌اندازی",
"Browse": "مرور کردن",
"Show Main Window": "نمایش پنجره اصلی",
"Theme Setting": "تنظیمات تم",
"Layout Setting": "تنظیمات چیدمان",
"Miscellaneous": "متفرقه",
"Hotkey Setting": "تنظیمات کلیدهای میانبر",
"Traffic Graph": "نمودار ترافیک",
"Memory Usage": "استفاده از حافظه",
"Proxy Group Icon": "آیکون گروه پراکسی",
"Tray Icon": "آیکون سینی سیستم",
"Menu Icon": "آیکون منو",
"Monochrome": "تک رنگ",
"Colorful": "رنگارنگ",
"Common Tray Icon": "آیکون مشترک سینی سیستم",
"System Proxy Tray Icon": "آیکون سینی پراکسی سیستم",
"Tun Tray Icon": "آیکون سینی Tun",
"Language": "زبان",
"Open App Dir": "باز کردن پوشه برنامه",
"Open Core Dir": "باز کردن پوشه هسته",
"Open Logs Dir": "باز کردن پوشه لاگ‌ها",
"Check for Updates": "بررسی برای به‌روزرسانی‌ها",
"Open Dev Tools": "باز کردن ابزارهای توسعه‌دهنده",
"Verge Version": "نسخه Verge",
"theme.light": "روشن",
"theme.dark": "تاریک",
"theme.system": "سیستم",
"Clash Field": "زمینه Clash",
"Runtime Config": "پیکربندی زمان اجرا",
"ReadOnly": "فقط خواندنی",
"ReadOnlyMessage": "نمی‌توان در ویرایشگر فقط خواندنی ویرایش کرد",
"Go to Release Page": "رفتن به صفحه انتشار",
"Restart": "راه‌اندازی مجدد",
"Upgrade": "ارتقاء",
"Primary Color": "رنگ اصلی",
"Secondary Color": "رنگ ثانویه",
"Primary Text": "متن اصلی",
@ -177,82 +192,74 @@
"Success Color": "رنگ موفقیت",
"Font Family": "خانواده فونت",
"CSS Injection": "تزریق CSS",
"Back": "بازگشت",
"Save": "ذخیره",
"Cancel": "لغو",
"Exit": "خروج",
"Confirm": "تأیید",
"Default": "پیش‌فرض",
"Download Speed": "سرعت دانلود",
"Upload Speed": "سرعت بارگذاری",
"Layout Setting": "تنظیمات چیدمان",
"Traffic Graph": "نمودار ترافیک",
"Memory Usage": "استفاده از حافظه",
"Proxy Group Icon": "آیکون گروه پراکسی",
"Menu Icon": "آیکون منو",
"Monochrome": "تک رنگ",
"Colorful": "رنگارنگ",
"Tray Icon": "آیکون سینی سیستم",
"Common Tray Icon": "آیکون مشترک سینی سیستم",
"System Proxy Tray Icon": "آیکون سینی پراکسی سیستم",
"Tun Tray Icon": "آیکون سینی Tun",
"Miscellaneous": "متفرقه",
"App Log Level": "سطح لاگ برنامه",
"Auto Close Connections": "بستن خودکار اتصالات",
"Auto Check Update": "بررسی خودکار به‌روزرسانی",
"Enable Builtin Enhanced": "فعال کردن تقویت داخلی",
"Proxy Layout Column": "ستون چیدمان پراکسی",
"Auto Log Clean": "پاکسازی خودکار لاگ",
"Never Clean": "هرگز پاک نکن",
"Retain 7 Days": "نگهداری به مدت 7 روز",
"Retain 30 Days": "نگهداری به مدت 30 روز",
"Retain 90 Days": "نگهداری به مدت 90 روز",
"Default Latency Test": "آزمون تأخیر پیش‌فرض",
"Default Latency Timeout": "زمان انتظار تأخیر پیش‌فرض",
"Hotkey Setting": "تنظیمات کلیدهای میانبر",
"open_or_close_dashboard": "باز/بستن داشبورد",
"clash_mode_rule": "حالت قانون",
"clash_mode_global": "حالت جهانی",
"clash_mode_direct": "حالت مستقیم",
"toggle_system_proxy": "فعال/غیرفعال کردن پراکسی سیستم",
"toggle_tun_mode": "فعال/غیرفعال کردن حالت Tun",
"App Log Level": "سطح لاگ برنامه",
"Auto Close Connections": "بستن خودکار اتصالات",
"Auto Check Update": "بررسی خودکار به‌روزرسانی",
"Enable Builtin Enhanced": "فعال کردن تقویت داخلی",
"Proxy Layout Column": "ستون چیدمان پراکسی",
"Default Latency Test": "آزمون تأخیر پیش‌فرض",
"Default Latency Timeout": "زمان انتظار تأخیر پیش‌فرض",
"Auto Log Clean": "پاکسازی خودکار لاگ",
"Never Clean": "هرگز پاک نکن",
"Retain 7 Days": "نگهداری به مدت 7 روز",
"Retain 30 Days": "نگهداری به مدت 30 روز",
"Retain 90 Days": "نگهداری به مدت 90 روز",
"Stack": "انباشته Tun",
"Device": "نام دستگاه",
"Auto Route": "مسیر خودکار",
"Strict Route": "مسیر دقیق",
"Auto Detect Interface": "تشخیص خودکار رابط",
"DNS Hijack": "ربایش DNS",
"MTU": "واحد حداکثر انتقال",
"Reset to Default": "بازنشانی به پیش‌فرض",
"Current State": "وضعیت فعلی",
"pending": "در انتظار",
"installed": "نصب شده",
"uninstall": "حذف شده",
"active": "فعال",
"unknown": "ناشناخته",
"Disable Service Mode": "غیرفعال کردن حالت سرویس",
"Install": "نصب",
"Uninstall": "حذف نصب",
"Runtime Config": "پیکربندی زمان اجرا",
"Open App Dir": "باز کردن پوشه برنامه",
"Open Core Dir": "باز کردن پوشه هسته",
"Open Logs Dir": "باز کردن پوشه لاگ‌ها",
"Check for Updates": "بررسی برای به‌روزرسانی‌ها",
"Go to Release Page": "رفتن به صفحه انتشار",
"Portable Updater Error": "نسخه پرتابل از به‌روزرسانی درون برنامه‌ای پشتیبانی نمی‌کند. لطفاً به صورت دستی دانلود و جایگزین کنید",
"Tun Mode Info": "حالت Tun نیاز به اعطای مجوزهای مربوط به هسته دارد. لطفاً قبل از استفاده، حالت سرویس را فعال کنید",
"System and Mixed Can Only be Used in Service Mode": "سیستم و ترکیبی تنها می‌توانند در حالت سرویس استفاده شوند",
"Information: Please make sure that the Clash Verge Service is installed and enabled": "اطلاعات: لطفاً مطمئن شوید که سرویس Clash Verge نصب و فعال شده است",
"Open Dev Tools": "باز کردن ابزارهای توسعه‌دهنده",
"Exit": "خروج",
"Verge Version": "نسخه Verge",
"ReadOnly": "فقط خواندنی",
"ReadOnlyMessage": "نمی‌توان در ویرایشگر فقط خواندنی ویرایش کرد",
"Filter": "فیلتر",
"Filter conditions": "شرایط فیلتر",
"Match Case": "تطبیق حروف کوچک و بزرگ",
"Match Whole Word": "تطبیق کل کلمه",
"Use Regular Expression": "استفاده از عبارت منظم",
"External Controller Address Modified": "آدرس کنترل‌کننده خارجی تغییر یافت",
"Clash Port Modified": "پورت Clash تغییر یافت",
"Currently on the Latest Version": "در حال حاضر در آخرین نسخه",
"Only YAML Files Supported": "فقط فایل‌های YAML پشتیبانی می‌شوند",
"Port Conflict": "تعارض پورت",
"Proxy Daemon Duration Cannot be Less than 1 Second": "مدت زمان دیمن پراکسی نمی‌تواند کمتر از 1 ثانیه باشد",
"Profile Imported Successfully": "پروفایل با موفقیت وارد شد",
"Clash Config Updated": "پیکربندی Clash به‌روزرسانی شد",
"Profile Switched": "پروفایل تغییر یافت",
"Profile Reactivated": "پروفایل مجدداً فعال شد",
"Clash Config Updated": "پیکربندی Clash به‌روزرسانی شد",
"Only YAML Files Supported": "فقط فایل‌های YAML پشتیبانی می‌شوند",
"Settings Applied": "تنظیمات اعمال شد",
"Service Installed Successfully": "سرویس با موفقیت نصب شد",
"Service Uninstalled Successfully": "سرویس با موفقیت حذف نصب شد",
"GeoData Updated": "GeoData به‌روزرسانی شد",
"Proxy Daemon Duration Cannot be Less than 1 Second": "مدت زمان دیمن پراکسی نمی‌تواند کمتر از 1 ثانیه باشد",
"Invalid Bypass Format": "فرمت عبور نامعتبر است",
"Clash Port Modified": "پورت Clash تغییر یافت",
"Port Conflict": "تعارض پورت",
"Restart Application to Apply Modifications": "راه‌اندازی مجدد برنامه برای اعمال تغییرات",
"External Controller Address Modified": "آدرس کنترل‌کننده خارجی تغییر یافت",
"Permissions Granted Successfully for _clash Core": "مجوزها با موفقیت برای هسته {{core}} اعطا شد",
"Profile Imported Successfully": "پروفایل با موفقیت وارد شد",
"Core Version Updated": "نسخه هسته به‌روزرسانی شد",
"Clash Core Restarted": "هسته Clash مجدداً راه‌اندازی شد",
"Switched to _clash Core": "تغییر به هسته {{core}}",
"Core Version Updated": "نسخه هسته به‌روزرسانی شد"
"GeoData Updated": "GeoData به‌روزرسانی شد",
"Currently on the Latest Version": "در حال حاضر در آخرین نسخه"
}

View File

@ -1,60 +1,33 @@
{
"Back": "Назад",
"Close": "Закрыть",
"Cancel": "Отмена",
"Confirm": "Подтвердить",
"New": "Новый",
"Edit": "Редактировать",
"Save": "Сохранить",
"Delete": "Удалить",
"Enable": "Включить",
"Disable": "Отключить",
"Label-Proxies": "Прокси",
"Label-Test": "Тест",
"Label-Profiles": "Профили",
"Label-Connections": "Соединения",
"Label-Logs": "Логи",
"Label-Rules": "Правила",
"Label-Logs": "Логи",
"Label-Test": "Тест",
"Label-Settings": "Настройки",
"Connections": "Соединения",
"Logs": "Логи",
"Clear": "Очистить",
"Proxies": "Прокси",
"Proxy Groups": "Группы прокси",
"Test": "Тест",
"Proxy Provider": "Провайдер прокси",
"Update All": "Обновить все",
"Update At": "Обновлено в",
"rule": "правила",
"global": "глобальный",
"direct": "прямой",
"script": "скриптовый",
"Create Test": "Создать тест",
"Edit Test": "Редактировать тест",
"Edit": "Редактировать",
"Icon": "Икона",
"Test URL": "Тестовый URL",
"Test All": "Тест Все",
"Paste": "Вставить",
"Profiles": "Профили",
"Profile URL": "URL профиля",
"Import": "Импорт",
"New": "Новый",
"Create Profile": "Создать профиль",
"Edit Profile": "Изменить профиль",
"Choose File": "Выбрать файл",
"Close": "Закрыть",
"Close All": "Закрыть всё",
"Home": "Главная",
"Select": "Выбрать",
"Edit Info": "Изменить информацию",
"Edit File": "Изменить файл",
"Open File": "Открыть файл",
"Update": "Обновить",
"Update(Proxy)": "Обновить (прокси)",
"Delete": "Удалить",
"Enable": "Включить",
"Disable": "Отключить",
"Refresh": "Обновить",
"To Top": "Наверх",
"To End": "Вниз",
"Update All Profiles": "Обновить все профили",
"View Runtime Config": "Просмотреть используемый конфиг",
"Reactivate Profiles": "Реактивировать профили",
"Confirm deletion": "Подтвердите удаление",
"This operation is not reversible": "Эта операция необратима",
"Script Console": "Консоль скрипта",
"Location": "Местоположение",
"Delay check": "Проверка задержки",
"Sort by default": "Сортировать по умолчанию",
@ -64,13 +37,46 @@
"Delay check to cancel fixed": "Проверка задержки для отмены фиксированного",
"Proxy basic": "Резюме о прокси",
"Proxy detail": "Подробности о прокси",
"Filter": "Фильтр",
"Filter conditions": "Условия фильтрации",
"Refresh profiles": "Обновить профили",
"Rules": "Правила",
"Update All": "Обновить все",
"Update At": "Обновлено в",
"Profiles": "Профили",
"Update All Profiles": "Обновить все профили",
"View Runtime Config": "Просмотреть используемый конфиг",
"Reactivate Profiles": "Реактивировать профили",
"Paste": "Вставить",
"Profile URL": "URL профиля",
"Import": "Импорт",
"Create Profile": "Создать профиль",
"Edit Profile": "Изменить профиль",
"Type": "Тип",
"Name": "Название",
"Descriptions": "Описания",
"Subscription URL": "URL подписки",
"Update Interval": "Интервал обновления",
"Choose File": "Выбрать файл",
"Use System Proxy": "Использовать системный прокси для обновления",
"Use Clash Proxy": "Использовать прокси Clash для обновления",
"Accept Invalid Certs (Danger)": "Принимать недействительные сертификаты (Опасно)",
"Refresh": "Обновить",
"Home": "Главная",
"Select": "Выбрать",
"Edit Info": "Изменить информацию",
"Edit File": "Изменить файл",
"Open File": "Открыть файл",
"Update": "Обновить",
"Update(Proxy)": "Обновить (прокси)",
"Confirm deletion": "Подтвердите удаление",
"This operation is not reversible": "Эта операция необратима",
"Script Console": "Консоль скрипта",
"To Top": "Наверх",
"To End": "Вниз",
"Connections": "Соединения",
"Table View": "Tablichnyy vid",
"List View": "Spiskovyy vid",
"Close All": "Закрыть всё",
"Default": "По умолчанию",
"Download Speed": "Скорость загрузки",
"Upload Speed": "Скорость загрузки",
"Host": "Хост",
"Downloaded": "Скачано",
"Uploaded": "Загружено",
@ -84,89 +90,98 @@
"Destination IP": "IP-адрес назначения",
"Close Connection": "Закрыть соединение",
"Type": "Тип",
"Name": "Название",
"Descriptions": "Описания",
"Subscription URL": "URL подписки",
"Update Interval": "Интервал обновления",
"Use System Proxy": "Использовать системный прокси для обновления",
"Use Clash Proxy": "Использовать прокси Clash для обновления",
"Accept Invalid Certs (Danger)": "Принимать недействительные сертификаты (Опасно)",
"Rules": "Правила",
"Rule Provider": "Провайдер правило",
"Logs": "Логи",
"Pause": "Пауза",
"Clear": "Очистить",
"Test": "Тест",
"Test All": "Тест Все",
"Create Test": "Создать тест",
"Edit Test": "Редактировать тест",
"Icon": "Икона",
"Test URL": "Тестовый URL",
"Settings": "Настройки",
"Clash Setting": "Настройки Clash",
"System Setting": "Настройки системы",
"Verge Setting": "Настройки Verge",
"Tun Mode": "Режим туннеля",
"Reset to Default": "Сбросить настройки по умолчанию",
"Tun Mode Info": "Режим туннеля требует предоставления разрешений, связанных с ядрам. Пожалуйста, включите сервисный режим перед его использованием",
"Stack": "Стек",
"System and Mixed Can Only be Used in Service Mode": "Система и смешанные могут использоваться только в сервисном режиме",
"Device": "Имя устройства",
"Auto Route": "Автоматическая маршрутизация",
"Strict Route": "Строгий маршрут",
"Auto Detect Interface": "Автоопределение интерфейса",
"DNS Hijack": "DNS-перехват",
"MTU": "Максимальная единица передачи",
"Service Mode": "Режим сервиса",
"Current State": "Текущее состояние",
"pending": "Ожидающий",
"installed": "Установленный",
"uninstall": "Не установленный",
"active": "Активированный",
"unknown": "неизвестный",
"Information: Please make sure that the Clash Verge Service is installed and enabled": "Информация: Пожалуйста, убедитесь, что сервис Clash Verge Service установлен и включен",
"Install": "Установить",
"Uninstall": "Удалить",
"Disable Service Mode": "Отключить режим обслуживания",
"System Proxy": "Системный прокси",
"System Proxy Info": "Разрешить изменение настроек прокси-сервера операционной системы. Если разрешение не удастся, измените настройки прокси-сервера операционной системы вручную",
"System Proxy Setting": "Настройка системного прокси",
"Current System Proxy": "Текущий системный прокси",
"Enable status": "Статус включения",
"Enabled": "Включено",
"Disabled": "Отключено",
"Server Addr": "Адрес сервера: ",
"Not available": "Недоступно",
"Proxy Guard": "Защита прокси",
"Proxy Guard Info": "Включите эту функцию чтобы предотвратить изменение настроек прокси-сервера операционной системы другим программным обеспечением",
"Guard Duration": "Период защиты",
"Proxy Bypass": "Игнорирование прокси: ",
"Bypass": "Игнорирование: ",
"Use PAC Mode": "Используйте режим PAC",
"PAC Script Content": "Содержание сценария PAC",
"PAC URL": "Адрес PAC: ",
"Auto Launch": "Автозапуск",
"Silent Start": "Тихий запуск",
"Clash Setting": "Настройки Clash",
"Allow Lan": "Разрешить локальную сеть",
"IPv6": "IPv6",
"Log Level": "Уровень логов",
"Port Config": "Настройка порта",
"Random Port": "Случайный порт",
"Restart Application to Apply Modifications": "Чтобы изменения вступили в силу, необходимо перезапустить приложение",
"External": "Внешний",
"External Controller": "Адрес прослушивания внешнего контроллера",
"Core Secret": "Секрет",
"Recommended": "Рекомендуется",
"Open URL": "Открыть URL",
"Replace host, port, secret with %host, %port, %secret": "Замените хост, порт, секрет на %host, %port, %secret",
"Support %host, %port, %secret": "Поддержка %host, %port, %secret",
"Clash Core": "Ядра Clash",
"Grant": "Предоставить",
"Upgrade": "Обновлять",
"Restart": "Перезапуск",
"Tun mode requires": "Требуется Режим туннеля",
"Tun Mode": "Режим туннеля",
"Service Mode": "Режим сервиса",
"Auto Launch": "Автозапуск",
"Silent Start": "Тихий запуск",
"System Proxy": "Системный прокси",
"System Proxy Setting": "Настройка системного прокси",
"Grant": "Предоставить",
"Open UWP tool": "Открыть UWP инструмент",
"Update GeoData": "Обновление GeoData",
"Use PAC Mode": "Используйте режим PAC.",
"PAC URL": "Адрес PAC",
"PAC Script Content": "Содержание сценария PAC",
"Proxy Guard": "Защита прокси",
"Guard Duration": "Период защиты",
"Proxy Bypass": "Игнорирование прокси",
"Current System Proxy": "Текущий системный прокси",
"Enable status": "Статус включения",
"Server Addr": "Адрес сервера",
"Bypass": "Игнорирование",
"Verge Setting": "Настройки Verge",
"Language": "Язык",
"Theme Mode": "Режим темы",
"theme.light": "Светлая",
"theme.dark": "Тёмная",
"theme.system": "Системная",
"Tray Click Event": "Событие щелчка в лотке",
"Show Main Window": "Показать главное окно",
"Copy Env Type": "Скопировать тип Env",
"Start Page": "Главная страница",
"Startup Script": "Скрипт запуска",
"Browse": "Просмотреть",
"Show Main Window": "Показать главное окно",
"Theme Setting": "Настройки темы",
"Layout Setting": "Настройки раскладки",
"Miscellaneous": "Настройки Прочие",
"Hotkey Setting": "Настройки клавиатурных сокращений",
"Traffic Graph": "График трафика",
"Memory Usage": "Использование памяти",
"Proxy Group Icon": "Иконка Группы прокси",
"Tray Icon": "Иконка лотка",
"Menu Icon": "Иконка меню",
"Monochrome": "Монохромный",
"Colorful": "Полноцветный",
"Common Tray Icon": "Общий значок в лотке",
"System Proxy Tray Icon": "Значок системного прокси в лотке",
"Tun Tray Icon": "Значок туннеля в лотке",
"Language": "Язык",
"Open App Dir": "Открыть папку приложения",
"Open Core Dir": "Открыть папку ядра",
"Open Logs Dir": "Открыть папку логов",
"Check for Updates": "Проверить обновления",
"Open Dev Tools": "Открыть инструменты разработчика",
"Verge Version": "Версия Verge",
"theme.light": "Светлая",
"theme.dark": "Тёмная",
"theme.system": "Системная",
"Clash Field": "Используемые настройки Clash",
"Runtime Config": "Используемый конфиг",
"ReadOnly": "Только для чтения",
"ReadOnlyMessage": "Невозможно редактировать в режиме только для чтения",
"Go to Release Page": "Перейти на страницу релизов",
"Restart": "Перезапуск",
"Upgrade": "Обновлять",
"Primary Color": "Основной цвет",
"Secondary Color": "Вторичный цвет",
"Primary Text Color": "Основной текст",
@ -177,82 +192,74 @@
"Success Color": "Цвет успеха",
"Font Family": "Семейство шрифтов",
"CSS Injection": "Внедрение CSS",
"Back": "Назад",
"Save": "Сохранить",
"Cancel": "Отмена",
"Exit": "Выход",
"Confirm": "Подтвердить",
"Default": "По умолчанию",
"Download Speed": "Скорость загрузки",
"Upload Speed": "Скорость загрузки",
"Layout Setting": "Настройки раскладки",
"Traffic Graph": "График трафика",
"Memory Usage": "Использование памяти",
"Proxy Group Icon": "Иконка Группы прокси",
"Menu Icon": "Иконка меню",
"Monochrome": "Монохромный",
"Colorful": "Полноцветный",
"Tray Icon": "Иконка лотка",
"Common Tray Icon": "Общий значок в лотке",
"System Proxy Tray Icon": "Значок системного прокси в лотке",
"Tun Tray Icon": "Значок туннеля в лотке",
"Miscellaneous": "Настройки Прочие",
"App Log Level": "Уровень журнала приложения",
"Auto Close Connections": "Автоматическое закрытие соединений",
"Auto Check Update": "Автоматическая проверка обновлений",
"Enable Builtin Enhanced": "Включить встроенные улучшения",
"Proxy Layout Column": "Количество столбцов в макете прокси",
"Auto Log Clean": "Автоматическая очистка журналов",
"Never Clean": "Никогда не очищать",
"Retain 7 Days": "Сохранять 7 дней",
"Retain 30 Days": "Сохранять 30 дней",
"Retain 90 Days": "Сохранять 90 дней",
"Default Latency Test": "Ссылка на тестирование задержки по умолчанию",
"Default Latency Timeout": "Таймаут задержки по умолчанию",
"Hotkey Setting": "Настройки клавиатурных сокращений",
"open_or_close_dashboard": "Открыть/Закрыть панель управления",
"clash_mode_rule": "Режим правил",
"clash_mode_global": "Глобальный режим",
"clash_mode_direct": "Прямой режим",
"toggle_system_proxy": "Включить/Отключить системный прокси",
"toggle_tun_mode": "Включить/Отключить режим туннеля",
"App Log Level": "Уровень журнала приложения",
"Auto Close Connections": "Автоматическое закрытие соединений",
"Auto Check Update": "Автоматическая проверка обновлений",
"Enable Builtin Enhanced": "Включить встроенные улучшения",
"Proxy Layout Column": "Количество столбцов в макете прокси",
"Default Latency Test": "Ссылка на тестирование задержки по умолчанию",
"Default Latency Timeout": "Таймаут задержки по умолчанию",
"Auto Log Clean": "Автоматическая очистка журналов",
"Never Clean": "Никогда не очищать",
"Retain 7 Days": "Сохранять 7 дней",
"Retain 30 Days": "Сохранять 30 дней",
"Retain 90 Days": "Сохранять 90 дней",
"Stack": "Стек",
"Device": "Имя устройства",
"Auto Route": "Автоматическая маршрутизация",
"Strict Route": "Строгий маршрут",
"Auto Detect Interface": "Автоопределение интерфейса",
"DNS Hijack": "DNS-перехват",
"MTU": "Максимальная единица передачи",
"Reset to Default": "Сбросить настройки по умолчанию",
"Current State": "Текущее состояние",
"pending": "Ожидающий",
"installed": "Установленный",
"uninstall": "Не установленный",
"active": "Активированный",
"unknown": "неизвестный",
"Disable Service Mode": "Отключить режим обслуживания",
"Install": "Установить",
"Uninstall": "Удалить",
"Runtime Config": "Используемый конфиг",
"Open App Dir": "Открыть папку приложения",
"Open Core Dir": "Открыть папку ядра",
"Open Logs Dir": "Открыть папку логов",
"Check for Updates": "Проверить обновления",
"Go to Release Page": "Перейти на страницу релизов",
"Portable Updater Error": "Портативная версия не поддерживает обновление внутри приложения, пожалуйста, скачайте и замените вручную",
"Tun Mode Info": "Режим туннеля требует предоставления разрешений, связанных с ядрам. Пожалуйста, включите сервисный режим перед его использованием",
"System and Mixed Can Only be Used in Service Mode": "Система и смешанные могут использоваться только в сервисном режиме",
"Information: Please make sure that the Clash Verge Service is installed and enabled": "Информация: Пожалуйста, убедитесь, что сервис Clash Verge Service установлен и включен",
"Open Dev Tools": "Открыть инструменты разработчика",
"Exit": "Выход",
"Verge Version": "Версия Verge",
"ReadOnly": "Только для чтения",
"ReadOnlyMessage": "Невозможно редактировать в режиме только для чтения",
"Filter": "Фильтр",
"Filter conditions": "Условия фильтрации",
"Match Case": "Учитывать регистр",
"Match Whole Word": "Полное совпадение слова",
"Use Regular Expression": "Использовать регулярные выражения",
"External Controller Address Modified": "Изменен адрес внешнего контроллера",
"Clash Port Modified": "Clash порт изменен",
"Currently on the Latest Version": "В настоящее время используется последняя версия",
"Only YAML Files Supported": "Поддерживаются только файлы YAML",
"Port Conflict": "Конфликт портов",
"Proxy Daemon Duration Cannot be Less than 1 Second": "Продолжительность работы прокси-демона не может быть меньше 1 секунды",
"Profile Imported Successfully": "Профиль успешно импортирован",
"Clash Config Updated": "Clash конфигурация Обновлена",
"Profile Switched": "Профиль изменен",
"Profile Reactivated": "Профиль повторно активирован",
"Clash Config Updated": "Clash конфигурация Обновлена",
"Only YAML Files Supported": "Поддерживаются только файлы YAML",
"Settings Applied": "Применены настройки",
"Service Installed Successfully": "Служба успешно установлена",
"Service Uninstalled Successfully": "Служба успешно удалена",
"GeoData Updated": "GeoData Обновлена",
"Proxy Daemon Duration Cannot be Less than 1 Second": "Продолжительность работы прокси-демона не может быть меньше 1 секунды",
"Invalid Bypass Format": "Неверный формат обхода",
"Clash Port Modified": "Clash порт изменен",
"Port Conflict": "Конфликт портов",
"Restart Application to Apply Modifications": "Чтобы изменения вступили в силу, необходимо перезапустить приложение",
"External Controller Address Modified": "Изменен адрес внешнего контроллера",
"Permissions Granted Successfully for _clash Core": "Разрешения успешно предоставлены для ядра {{core}}",
"Profile Imported Successfully": "Профиль успешно импортирован",
"Core Version Updated": "Обновлена версия ядра",
"Clash Core Restarted": "Clash ядра перезапущено",
"Switched to _clash Core": "Переключено на ядра {{core}}",
"Core Version Updated": "Обновлена версия ядра"
"GeoData Updated": "GeoData Обновлена",
"Currently on the Latest Version": "В настоящее время используется последняя версия"
}

View File

@ -1,60 +1,33 @@
{
"Back": "返回",
"Close": "关闭",
"Cancel": "取消",
"Confirm": "确认",
"New": "新建",
"Edit": "编辑",
"Save": "保存",
"Delete": "删除",
"Enable": "启用",
"Disable": "禁用",
"Label-Proxies": "代 理",
"Label-Test": "测 试",
"Label-Profiles": "订 阅",
"Label-Connections": "连 接",
"Label-Logs": "日 志",
"Label-Rules": "规 则",
"Label-Logs": "日 志",
"Label-Test": "测 试",
"Label-Settings": "设 置",
"Connections": "连接",
"Logs": "日志",
"Clear": "清除",
"Proxies": "代理",
"Proxy Groups": "代理组",
"Test": "测试",
"Proxy Provider": "代理集合",
"Update All": "更新全部",
"Update At": "更新于",
"rule": "规则",
"global": "全局",
"direct": "直连",
"script": "脚本",
"Create Test": "新建测试",
"Edit Test": "编辑测试",
"Edit": "编辑",
"Icon": "图标",
"Test URL": "测试地址",
"Test All": "测试全部",
"Paste": "粘贴",
"Profiles": "订阅",
"Profile URL": "订阅文件链接",
"Import": "导入",
"New": "新建",
"Create Profile": "新建配置",
"Edit Profile": "编辑配置",
"Choose File": "选择文件",
"Close": "关闭",
"Close All": "关闭全部",
"Home": "首页",
"Select": "使用",
"Edit Info": "编辑信息",
"Edit File": "编辑文件",
"Open File": "打开文件",
"Update": "更新",
"Update(Proxy)": "更新(代理)",
"Delete": "删除",
"Enable": "启用",
"Disable": "禁用",
"Refresh": "刷新",
"To Top": "移到最前",
"To End": "移到末尾",
"Update All Profiles": "更新所有订阅",
"View Runtime Config": "查看运行时订阅",
"Reactivate Profiles": "重新激活订阅",
"Confirm deletion": "确认删除",
"This operation is not reversible": "此操作不可逆",
"Script Console": "脚本控制台输出",
"Location": "当前节点",
"Delay check": "延迟测试",
"Sort by default": "默认排序",
@ -64,13 +37,46 @@
"Delay check to cancel fixed": "进行延迟测试,以取消固定",
"Proxy basic": "隐藏节点细节",
"Proxy detail": "展示节点细节",
"Filter": "过滤节点",
"Filter conditions": "过滤条件",
"Refresh profiles": "刷新订阅",
"Rules": "规则",
"Update All": "更新全部",
"Update At": "更新于",
"Profiles": "订阅",
"Update All Profiles": "更新所有订阅",
"View Runtime Config": "查看运行时订阅",
"Reactivate Profiles": "重新激活订阅",
"Paste": "粘贴",
"Profile URL": "订阅文件链接",
"Import": "导入",
"Create Profile": "新建配置",
"Edit Profile": "编辑配置",
"Type": "类型",
"Name": "名称",
"Descriptions": "描述",
"Subscription URL": "订阅链接",
"Update Interval": "更新间隔",
"Choose File": "选择文件",
"Use System Proxy": "使用系统代理更新",
"Use Clash Proxy": "使用 Clash 代理更新",
"Accept Invalid Certs (Danger)": "允许无效证书 (危险)",
"Refresh": "刷新",
"Home": "首页",
"Select": "使用",
"Edit Info": "编辑信息",
"Edit File": "编辑文件",
"Open File": "打开文件",
"Update": "更新",
"Update(Proxy)": "更新(代理)",
"Confirm deletion": "确认删除",
"This operation is not reversible": "此操作不可逆",
"Script Console": "脚本控制台输出",
"To Top": "移到最前",
"To End": "移到末尾",
"Connections": "连接",
"Table View": "表格视图",
"List View": "列表视图",
"Close All": "关闭全部",
"Default": "默认",
"Download Speed": "下载速度",
"Upload Speed": "上传速度",
"Host": "主机",
"Downloaded": "下载量",
"Uploaded": "上传量",
@ -84,94 +90,98 @@
"Destination IP": "目标地址",
"Close Connection": "关闭连接",
"Type": "类型",
"Name": "名称",
"Descriptions": "描述",
"Subscription URL": "订阅链接",
"Update Interval": "更新间隔",
"Use System Proxy": "使用系统代理更新",
"Use Clash Proxy": "使用 Clash 代理更新",
"Accept Invalid Certs (Danger)": "允许无效证书 (危险)",
"Rules": "规则",
"Rule Provider": "规则集合",
"Logs": "日志",
"Pause": "暂停",
"Clear": "清除",
"Test": "测试",
"Test All": "测试全部",
"Create Test": "新建测试",
"Edit Test": "编辑测试",
"Icon": "图标",
"Test URL": "测试地址",
"Settings": "设置",
"Clash Setting": "Clash 设置",
"System Setting": "系统设置",
"Verge Setting": "Verge 设置",
"Tun Mode": "Tun 模式",
"Reset to Default": "重置为默认值",
"Tun Mode Info": "Tun模式需要授予内核相关权限使用前请先开启服务模式",
"Stack": "Tun 模式堆栈",
"System and Mixed Can Only be Used in Service Mode": "System 和 Mixed 只能在服务模式下使用",
"Device": "Tun 网卡名称",
"Auto Route": "自动设置全局路由",
"Strict Route": "严格路由",
"Auto Detect Interface": "自动选择流量出口接口",
"DNS Hijack": "DNS 劫持",
"MTU": "最大传输单元",
"Service Mode": "服务模式",
"Current State": "当前状态",
"pending": "等待中",
"installed": "已安装",
"uninstall": "未安装",
"active": "已激活",
"unknown": "未知",
"Information: Please make sure that the Clash Verge Service is installed and enabled": "提示信息: 请确保 Clash Verge Service 已安装并启用",
"Install": "安装",
"Uninstall": "卸载",
"Disable Service Mode": "禁用服务模式",
"System Proxy": "系统代理",
"System Proxy Info": "打开此开关修改操作系统的代理设置,如果开启失败,可手动修改操作系统的代理设置",
"System Proxy Setting": "系统代理设置",
"Current System Proxy": "当前系统代理",
"Enable status": "开启状态:",
"Enabled": "已启用",
"Disabled": "未启用",
"Server Addr": "服务地址:",
"Not available": "不可用",
"Proxy Guard": "系统代理守卫",
"Proxy Guard Info": "开启以防止其他软件修改操作系统的代理设置",
"Guard Duration": "代理守卫间隔",
"Proxy Bypass": "代理绕过设置:",
"Bypass": "当前绕过:",
"Use PAC Mode": "使用PAC模式",
"PAC Script Content": "PAC脚本内容",
"PAC URL": "PAC地址",
"Auto Launch": "开机自启",
"Silent Start": "静默启动",
"Clash Setting": "Clash 设置",
"Allow Lan": "局域网连接",
"IPv6": "IPv6",
"Log Level": "日志等级",
"Port Config": "端口设置",
"Random Port": "随机端口",
"Restart Application to Apply Modifications": "重启应用程序以应用修改",
"External": "外部控制",
"External Controller": "外部控制器监听地址",
"Core Secret": "API 访问密钥",
"Recommended": "建议设置",
"Open URL": "打开链接",
"Replace host, port, secret with %host, %port, %secret": "使用 %host, %port, %secret 表示 主机, 端口, 访问密钥",
"Support %host, %port, %secret": "支持 %host, %port, %secret",
"Clash Core": "Clash 内核",
"Grant": "授权",
"Upgrade": "升级内核",
"Restart": "重启内核",
"Tun mode requires": "如需启用 Tun 模式需要授权",
"Tun Mode": "Tun 模式",
"Service Mode": "服务模式",
"Auto Launch": "开机自启",
"Silent Start": "静默启动",
"System Proxy": "系统代理",
"System Proxy Info": "打开此开关修改操作系统的代理设置,如果开启失败,可手动修改操作系统的代理设置",
"System Proxy Setting": "系统代理设置",
"Grant": "授权",
"Open UWP tool": "UWP 工具",
"Update GeoData": "更新 GeoData",
"Use PAC Mode": "使用PAC模式",
"PAC URL": "PAC地址",
"PAC Script Content": "PAC脚本内容",
"Proxy Guard": "系统代理守卫",
"Proxy Guard Info": "开启以防止其他软件修改操作系统的代理设置",
"Guard Duration": "代理守卫间隔",
"Proxy Bypass": "代理绕过设置:",
"Current System Proxy": "当前系统代理",
"Enable status": "开启状态:",
"Enabled": "成功",
"Disabled": "失败",
"Server Addr": "服务地址:",
"Not available": "不可用",
"Bypass": "当前绕过:",
"Verge Setting": "Verge 设置",
"Language": "语言设置",
"Theme Mode": "主题模式",
"theme.light": "浅色",
"theme.dark": "深色",
"theme.system": "系统",
"Tray Click Event": "托盘点击事件",
"Show Main Window": "显示主窗口",
"Copy Env Type": "复制环境变量类型",
"Start Page": "启动页面",
"Startup Script": "启动脚本",
"Browse": "浏览",
"Show Main Window": "显示主窗口",
"Theme Setting": "主题设置",
"Layout Setting": "界面设置",
"Miscellaneous": "杂项设置",
"Hotkey Setting": "热键设置",
"Traffic Graph": "流量图显",
"Memory Usage": "内存使用",
"Proxy Group Icon": "代理组图标",
"Tray Icon": "托盘图标",
"Menu Icon": "菜单图标",
"Monochrome": "单色图标",
"Colorful": "彩色图标",
"Common Tray Icon": "常规托盘图标",
"System Proxy Tray Icon": "系统代理托盘图标",
"Tun Tray Icon": "Tun 模式托盘图标",
"Language": "语言设置",
"Open App Dir": "应用目录",
"Open Core Dir": "内核目录",
"Open Logs Dir": "日志目录",
"Check for Updates": "检查更新",
"Open Dev Tools": "打开开发者工具",
"Verge Version": "Verge 版本",
"theme.light": "浅色",
"theme.dark": "深色",
"theme.system": "系统",
"Clash Field": "Clash 字段",
"Runtime Config": "当前配置",
"ReadOnly": "只读",
"ReadOnlyMessage": "无法在只读模式下编辑",
"Go to Release Page": "前往发布页",
"Restart": "重启内核",
"Upgrade": "升级内核",
"Primary Color": "主要颜色",
"Secondary Color": "次要颜色",
"Primary Text": "文本主要颜色",
@ -182,82 +192,74 @@
"Success Color": "成功颜色",
"Font Family": "字体系列",
"CSS Injection": "CSS 注入",
"Back": "返回",
"Save": "保存",
"Cancel": "取消",
"Exit": "退出",
"Confirm": "确认",
"Default": "默认",
"Download Speed": "下载速度",
"Upload Speed": "上传速度",
"Layout Setting": "界面设置",
"Traffic Graph": "流量图显",
"Memory Usage": "内存使用",
"Proxy Group Icon": "代理组图标",
"Menu Icon": "菜单图标",
"Monochrome": "单色图标",
"Colorful": "彩色图标",
"Tray Icon": "托盘图标",
"Common Tray Icon": "常规托盘图标",
"System Proxy Tray Icon": "系统代理托盘图标",
"Tun Tray Icon": "Tun 模式托盘图标",
"Miscellaneous": "杂项设置",
"App Log Level": "App日志等级",
"Auto Close Connections": "自动关闭连接",
"Auto Check Update": "自动检查更新",
"Enable Builtin Enhanced": "内置增强功能",
"Proxy Layout Column": "代理页布局列数",
"Auto Log Clean": "自动清理日志",
"Never Clean": "不清理",
"Retain 7 Days": "保留7天",
"Retain 30 Days": "保留30天",
"Retain 90 Days": "保留90天",
"Default Latency Test": "默认测试链接",
"Default Latency Timeout": "测试超时时间",
"Hotkey Setting": "热键设置",
"open_or_close_dashboard": "打开/关闭面板",
"clash_mode_rule": "规则模式",
"clash_mode_global": "全局模式",
"clash_mode_direct": "直连模式",
"toggle_system_proxy": "打开/关闭系统代理",
"toggle_tun_mode": "打开/关闭 Tun 模式",
"App Log Level": "App日志等级",
"Auto Close Connections": "自动关闭连接",
"Auto Check Update": "自动检查更新",
"Enable Builtin Enhanced": "开启内建增强功能",
"Proxy Layout Column": "代理页布局列数",
"Default Latency Test": "默认测试链接",
"Default Latency Timeout": "测试超时时间",
"Auto Log Clean": "自动清理日志",
"Never Clean": "不清理",
"Retain 7 Days": "保留7天",
"Retain 30 Days": "保留30天",
"Retain 90 Days": "保留90天",
"Stack": "Tun 模式堆栈",
"Device": "Tun 网卡名称",
"Auto Route": "自动设置全局路由",
"Strict Route": "严格路由",
"Auto Detect Interface": "自动选择流量出口接口",
"DNS Hijack": "DNS 劫持",
"MTU": "最大传输单元",
"Reset to Default": "重置为默认值",
"Current State": "当前状态",
"pending": "等待中",
"installed": "已安装",
"uninstall": "未安装",
"active": "已激活",
"unknown": "未知",
"Disable Service Mode": "禁用服务模式",
"Install": "安装",
"Uninstall": "卸载",
"Runtime Config": "当前配置",
"Open App Dir": "应用目录",
"Open Core Dir": "内核目录",
"Open Logs Dir": "日志目录",
"Check for Updates": "检查更新",
"Go to Release Page": "前往发布页",
"Portable Updater Error": "便携版不支持应用内更新,请手动下载替换",
"Tun Mode Info": "Tun模式需要授予内核相关权限使用前请先开启服务模式",
"System and Mixed Can Only be Used in Service Mode": "System 和 Mixed 只能在服务模式下使用",
"Information: Please make sure that the Clash Verge Service is installed and enabled": "提示信息: 请确保 Clash Verge Service 已安装并启用",
"Open Dev Tools": "打开开发者工具",
"Exit": "退出",
"Verge Version": "Verge 版本",
"ReadOnly": "只读",
"ReadOnlyMessage": "无法在只读模式下编辑",
"Filter": "过滤节点",
"Filter conditions": "过滤条件",
"Match Case": "区分大小写",
"Match Whole Word": "全字匹配",
"Use Regular Expression": "使用正则表达式",
"External Controller Address Modified": "外部控制器监听地址已修改",
"Clash Port Modified": "Clash 端口已修改",
"Currently on the Latest Version": "当前已是最新版本",
"Only YAML Files Supported": "仅支持 YAML 文件",
"Port Conflict": "端口冲突",
"Proxy Daemon Duration Cannot be Less than 1 Second": "代理守护间隔时间不得低于1秒",
"Profile Imported Successfully": "导入订阅成功",
"Clash Config Updated": "Clash 配置已更新",
"Profile Switched": "订阅已切换",
"Profile Reactivated": "订阅已激活",
"Clash Config Updated": "Clash 配置已更新",
"Only YAML Files Supported": "仅支持 YAML 文件",
"Settings Applied": "设置已应用",
"Service Installed Successfully": "已成功安装服务",
"Service Uninstalled Successfully": "已成功卸载服务",
"GeoData Updated": "已更新 GeoData",
"Proxy Daemon Duration Cannot be Less than 1 Second": "代理守护间隔时间不得低于1秒",
"Invalid Bypass Format": "无效的代理绕过格式",
"Clash Port Modified": "Clash 端口已修改",
"Port Conflict": "端口冲突",
"Restart Application to Apply Modifications": "重启应用程序以应用修改",
"External Controller Address Modified": "外部控制器监听地址已修改",
"Permissions Granted Successfully for _clash Core": "{{core}} 内核授权成功",
"Profile Imported Successfully": "导入订阅成功",
"Core Version Updated": "内核版本已更新",
"Clash Core Restarted": "已重启 Clash 内核",
"Switched to _clash Core": "已切换至 {{core}} 内核",
"Core Version Updated": "内核版本已更新"
"GeoData Updated": "已更新 GeoData",
"Currently on the Latest Version": "当前已是最新版本"
}

View File

@ -143,9 +143,13 @@ const ConnectionsPage = () => {
}
>
{isTableLayout ? (
<TableChartRounded fontSize="inherit" />
<span title={t("List View")}>
<TableRowsRounded fontSize="inherit" />
</span>
) : (
<TableRowsRounded fontSize="inherit" />
<span title={t("Table View")}>
<TableChartRounded fontSize="inherit" />
</span>
)}
</IconButton>

View File

@ -39,6 +39,7 @@ const LogPage = () => {
header={
<Box sx={{ display: "flex", alignItems: "center", gap: 2 }}>
<IconButton
title={t("Pause")}
size="small"
color="inherit"
onClick={() => setEnableLog((e) => !e)}