mirror of
https://github.com/clash-verge-rev/clash-verge-rev
synced 2025-05-04 23:33:44 +08:00
fix: add system language sup
This commit is contained in:
parent
ae5b2cfb79
commit
fc925ea032
12
src-tauri/Cargo.lock
generated
12
src-tauri/Cargo.lock
generated
@ -1,6 +1,6 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "addr2line"
|
||||
@ -1074,6 +1074,7 @@ dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serde_yaml",
|
||||
"sys-locale",
|
||||
"sysinfo",
|
||||
"sysproxy",
|
||||
"tauri",
|
||||
@ -6373,6 +6374,15 @@ dependencies = [
|
||||
"syn 2.0.87",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sys-locale"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sysinfo"
|
||||
version = "0.32.0"
|
||||
|
@ -59,6 +59,7 @@ reqwest_dav = "0.1.14"
|
||||
aes-gcm = { version = "0.10.3", features = ["std"] }
|
||||
base64 = "0.22.1"
|
||||
getrandom = "0.2"
|
||||
sys-locale = "0.3.1"
|
||||
|
||||
[target.'cfg(windows)'.dependencies]
|
||||
runas = "=1.2.0"
|
||||
|
@ -1,6 +1,7 @@
|
||||
use crate::config::DEFAULT_PAC;
|
||||
use crate::config::{deserialize_encrypted, serialize_encrypted};
|
||||
use crate::utils::{dirs, help};
|
||||
use crate::utils::i18n;
|
||||
use anyhow::Result;
|
||||
use log::LevelFilter;
|
||||
use serde::{Deserialize, Serialize};
|
||||
@ -202,6 +203,21 @@ pub struct IVergeTheme {
|
||||
}
|
||||
|
||||
impl IVerge {
|
||||
fn get_system_language() -> String {
|
||||
let sys_lang = sys_locale::get_locale()
|
||||
.unwrap_or_else(|| String::from("en"))
|
||||
.to_lowercase();
|
||||
|
||||
let lang_code = sys_lang.split(['_', '-']).next().unwrap_or("en");
|
||||
let supported_languages = i18n::get_supported_languages();
|
||||
|
||||
if supported_languages.contains(&lang_code.to_string()) {
|
||||
lang_code.to_string()
|
||||
} else {
|
||||
String::from("en")
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new() -> Self {
|
||||
match dirs::verge_path().and_then(|path| help::read_yaml::<IVerge>(&path)) {
|
||||
Ok(config) => config,
|
||||
@ -215,7 +231,7 @@ impl IVerge {
|
||||
pub fn template() -> Self {
|
||||
Self {
|
||||
clash_core: Some("verge-mihomo".into()),
|
||||
language: Some("zh".into()),
|
||||
language: Some(Self::get_system_language()),
|
||||
theme_mode: Some("system".into()),
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
env_type: Some("bash".into()),
|
||||
|
@ -1,12 +1,14 @@
|
||||
use crate::{
|
||||
cmds,
|
||||
config::Config,
|
||||
feat, t,
|
||||
feat,
|
||||
utils::{
|
||||
dirs,
|
||||
resolve::{self, VERSION},
|
||||
i18n::t,
|
||||
},
|
||||
};
|
||||
|
||||
use anyhow::Result;
|
||||
use tauri::AppHandle;
|
||||
use tauri::{
|
||||
@ -67,7 +69,6 @@ impl Tray {
|
||||
|
||||
pub fn update_part() -> Result<()> {
|
||||
let app_handle = handle::Handle::global().app_handle().unwrap();
|
||||
let use_zh = { Config::verge().latest().language == Some("zh".into()) };
|
||||
let version = VERSION.get().unwrap();
|
||||
let mode = {
|
||||
Config::clash()
|
||||
@ -190,11 +191,11 @@ impl Tray {
|
||||
|
||||
let _ = tray.set_tooltip(Some(&format!(
|
||||
"Clash Verge {version}\n{}: {}\n{}: {}\n{}: {}",
|
||||
t!("SysProxy", "系统代理", use_zh),
|
||||
t("SysProxy"),
|
||||
switch_map[system_proxy],
|
||||
t!("TUN", "Tun模式", use_zh),
|
||||
t("TUN"),
|
||||
switch_map[tun_mode],
|
||||
t!("Profile", "当前订阅", use_zh),
|
||||
t("Profile"),
|
||||
current_profile_name
|
||||
)));
|
||||
Ok(())
|
||||
@ -208,129 +209,116 @@ fn create_tray_menu(
|
||||
tun_mode_enabled: bool,
|
||||
) -> Result<tauri::menu::Menu<Wry>> {
|
||||
let mode = mode.unwrap_or("");
|
||||
let use_zh = { Config::verge().latest().language == Some("zh".into()) };
|
||||
let version = VERSION.get().unwrap();
|
||||
|
||||
let open_window = &MenuItem::with_id(
|
||||
app_handle,
|
||||
"open_window",
|
||||
t!("Dashboard", "打开面板", use_zh),
|
||||
t("Dashboard"),
|
||||
true,
|
||||
None::<&str>,
|
||||
)
|
||||
.unwrap();
|
||||
).unwrap();
|
||||
|
||||
let rule_mode = &CheckMenuItem::with_id(
|
||||
app_handle,
|
||||
"rule_mode",
|
||||
t!("Rule Mode", "规则模式", use_zh),
|
||||
t("Rule Mode"),
|
||||
true,
|
||||
mode == "rule",
|
||||
None::<&str>,
|
||||
)
|
||||
.unwrap();
|
||||
).unwrap();
|
||||
|
||||
let global_mode = &CheckMenuItem::with_id(
|
||||
app_handle,
|
||||
"global_mode",
|
||||
t!("Global Mode", "全局模式", use_zh),
|
||||
t("Global Mode"),
|
||||
true,
|
||||
mode == "global",
|
||||
None::<&str>,
|
||||
)
|
||||
.unwrap();
|
||||
).unwrap();
|
||||
|
||||
let direct_mode = &CheckMenuItem::with_id(
|
||||
app_handle,
|
||||
"direct_mode",
|
||||
t!("Direct Mode", "直连模式", use_zh),
|
||||
t("Direct Mode"),
|
||||
true,
|
||||
mode == "direct",
|
||||
None::<&str>,
|
||||
)
|
||||
.unwrap();
|
||||
).unwrap();
|
||||
|
||||
let system_proxy = &CheckMenuItem::with_id(
|
||||
app_handle,
|
||||
"system_proxy",
|
||||
t!("System Proxy", "系统代理", use_zh),
|
||||
t("System Proxy"),
|
||||
true,
|
||||
system_proxy_enabled,
|
||||
None::<&str>,
|
||||
)
|
||||
.unwrap();
|
||||
).unwrap();
|
||||
|
||||
let tun_mode = &CheckMenuItem::with_id(
|
||||
app_handle,
|
||||
"tun_mode",
|
||||
t!("TUN Mode", "Tun模式", use_zh),
|
||||
t("TUN Mode"),
|
||||
true,
|
||||
tun_mode_enabled,
|
||||
None::<&str>,
|
||||
)
|
||||
.unwrap();
|
||||
).unwrap();
|
||||
|
||||
let copy_env = &MenuItem::with_id(
|
||||
app_handle,
|
||||
"copy_env",
|
||||
t!("Copy Env", "复制环境变量", use_zh),
|
||||
t("Copy Env"),
|
||||
true,
|
||||
None::<&str>,
|
||||
)
|
||||
.unwrap();
|
||||
).unwrap();
|
||||
|
||||
let open_app_dir = &MenuItem::with_id(
|
||||
app_handle,
|
||||
"open_app_dir",
|
||||
t!("Conf Dir", "配置目录", use_zh),
|
||||
t("Conf Dir"),
|
||||
true,
|
||||
None::<&str>,
|
||||
)
|
||||
.unwrap();
|
||||
).unwrap();
|
||||
|
||||
let open_core_dir = &MenuItem::with_id(
|
||||
app_handle,
|
||||
"open_core_dir",
|
||||
t!("Core Dir", "内核目录", use_zh),
|
||||
t("Core Dir"),
|
||||
true,
|
||||
None::<&str>,
|
||||
)
|
||||
.unwrap();
|
||||
).unwrap();
|
||||
|
||||
let open_logs_dir = &MenuItem::with_id(
|
||||
app_handle,
|
||||
"open_logs_dir",
|
||||
t!("Logs Dir", "日志目录", use_zh),
|
||||
t("Logs Dir"),
|
||||
true,
|
||||
None::<&str>,
|
||||
)
|
||||
.unwrap();
|
||||
).unwrap();
|
||||
|
||||
let open_dir = &Submenu::with_id_and_items(
|
||||
app_handle,
|
||||
"open_dir",
|
||||
t!("Open Dir", "打开目录", use_zh),
|
||||
t("Open Dir"),
|
||||
true,
|
||||
&[open_app_dir, open_core_dir, open_logs_dir],
|
||||
)
|
||||
.unwrap();
|
||||
).unwrap();
|
||||
|
||||
let restart_clash = &MenuItem::with_id(
|
||||
app_handle,
|
||||
"restart_clash",
|
||||
t!("Restart Clash Core", "重启Clash内核", use_zh),
|
||||
t("Restart Clash Core"),
|
||||
true,
|
||||
None::<&str>,
|
||||
)
|
||||
.unwrap();
|
||||
).unwrap();
|
||||
|
||||
let restart_app = &MenuItem::with_id(
|
||||
app_handle,
|
||||
"restart_app",
|
||||
t!("Restart App", "重启App", use_zh),
|
||||
t("Restart App"),
|
||||
true,
|
||||
None::<&str>,
|
||||
)
|
||||
.unwrap();
|
||||
).unwrap();
|
||||
|
||||
let app_version = &MenuItem::with_id(
|
||||
app_handle,
|
||||
@ -338,26 +326,23 @@ fn create_tray_menu(
|
||||
format!("Version {version}"),
|
||||
true,
|
||||
None::<&str>,
|
||||
)
|
||||
.unwrap();
|
||||
).unwrap();
|
||||
|
||||
let more = &Submenu::with_id_and_items(
|
||||
app_handle,
|
||||
"more",
|
||||
t!("More", "更多", use_zh),
|
||||
t("More"),
|
||||
true,
|
||||
&[restart_clash, restart_app, app_version],
|
||||
)
|
||||
.unwrap();
|
||||
).unwrap();
|
||||
|
||||
let quit = &MenuItem::with_id(
|
||||
app_handle,
|
||||
"quit",
|
||||
t!("Quit", "退出", use_zh),
|
||||
t("Quit"),
|
||||
true,
|
||||
Some("CmdOrControl+Q"),
|
||||
)
|
||||
.unwrap();
|
||||
).unwrap();
|
||||
|
||||
let separator = &PredefinedMenuItem::separator(app_handle).unwrap();
|
||||
|
||||
|
59
src-tauri/src/utils/i18n.rs
Normal file
59
src-tauri/src/utils/i18n.rs
Normal file
@ -0,0 +1,59 @@
|
||||
use std::{fs, path::Path};
|
||||
use crate::config::Config;
|
||||
use sys_locale;
|
||||
|
||||
pub fn get_supported_languages() -> Vec<String> {
|
||||
let project_dir = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap();
|
||||
let i18n_path = project_dir.join("src/services/i18n.ts");
|
||||
|
||||
if let Ok(content) = fs::read_to_string(i18n_path) {
|
||||
let mut languages = Vec::new();
|
||||
for line in content.lines() {
|
||||
if line.contains("resources = {") {
|
||||
for line in content.lines() {
|
||||
if let Some(lang) = line.trim().strip_suffix(": { translation:") {
|
||||
let lang = lang.trim().trim_matches('"');
|
||||
if !lang.is_empty() {
|
||||
languages.push(lang.to_string());
|
||||
}
|
||||
}
|
||||
if line.contains("};") {
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if !languages.is_empty() {
|
||||
return languages;
|
||||
}
|
||||
}
|
||||
|
||||
vec!["en".to_string(), "ru".to_string(), "zh".to_string(), "fa".to_string()]
|
||||
}
|
||||
|
||||
pub fn t(text: &str) -> String {
|
||||
let config = Config::verge();
|
||||
let verge = config.latest();
|
||||
let current_lang = verge.language.as_ref().map_or_else(
|
||||
|| get_system_language(),
|
||||
|lang| lang.to_string()
|
||||
);
|
||||
|
||||
text.to_string()
|
||||
}
|
||||
|
||||
fn get_system_language() -> String {
|
||||
let sys_lang = sys_locale::get_locale()
|
||||
.unwrap_or_else(|| String::from("en"))
|
||||
.to_lowercase();
|
||||
|
||||
let lang_code = sys_lang.split(['_', '-']).next().unwrap_or("en");
|
||||
let supported_languages = get_supported_languages();
|
||||
|
||||
if supported_languages.contains(&lang_code.to_string()) {
|
||||
lang_code.to_string()
|
||||
} else {
|
||||
String::from("en")
|
||||
}
|
||||
}
|
@ -5,3 +5,4 @@ pub mod init;
|
||||
pub mod resolve;
|
||||
pub mod server;
|
||||
pub mod tmpl;
|
||||
pub mod i18n;
|
||||
|
@ -100,6 +100,7 @@ const SettingVerge = ({ onError }: Props) => {
|
||||
<MenuItem value="en">English</MenuItem>
|
||||
<MenuItem value="ru">Русский</MenuItem>
|
||||
<MenuItem value="fa">فارسی</MenuItem>
|
||||
<MenuItem value="tt">Татар</MenuItem>
|
||||
</Select>
|
||||
</GuardState>
|
||||
</SettingItem>
|
||||
|
424
src/locales/tt.json
Normal file
424
src/locales/tt.json
Normal file
@ -0,0 +1,424 @@
|
||||
{
|
||||
"millis": "Миллисекундлар",
|
||||
"seconds": "Секундлар",
|
||||
"mins": "Минутлар",
|
||||
"Back": "Кире",
|
||||
"Close": "Ябу",
|
||||
"Cancel": "Баш тарту",
|
||||
"Confirm": "Растау",
|
||||
"Maximize": "Зурайту",
|
||||
"Minimize": "Кечерәйтү",
|
||||
"Format document": "Документны форматлау",
|
||||
"Empty": "Буш",
|
||||
"New": "Яңа",
|
||||
"Edit": "Үзгәртү",
|
||||
"Save": "Саклау",
|
||||
"Delete": "Бетерү",
|
||||
"Enable": "Кушу",
|
||||
"Disable": "Сүндерү",
|
||||
"Label-Proxies": "Прокси",
|
||||
"Label-Profiles": "Профильләр",
|
||||
"Label-Connections": "Тоташулар",
|
||||
"Label-Rules": "Кагыйдәләр",
|
||||
"Label-Logs": "Логлар",
|
||||
"Label-Test": "Тест",
|
||||
"Label-Settings": "Көйләүләр",
|
||||
"Proxies": "Прокси",
|
||||
"Proxy Groups": "Прокси төркемнәре",
|
||||
"Proxy Provider": "Прокси провайдеры",
|
||||
"Update All": "Барысын да яңарту",
|
||||
"Update At": "Яңартылган вакыт",
|
||||
"rule": "кагыйдә",
|
||||
"global": "глобаль",
|
||||
"direct": "туры",
|
||||
"script": "скриптлы",
|
||||
"Location": "Урын",
|
||||
"Delay check": "Задержканы тикшерү",
|
||||
"Sort by default": "Башлангыч итеп сортлау",
|
||||
"Sort by delay": "Задержка буенча сортлау",
|
||||
"Sort by name": "Исем буенча сортлау",
|
||||
"Delay check URL": "Задержканы тикшерү URL-ы",
|
||||
"Delay check to cancel fixed": "Беркетелгәнне гамәлдән чыгару өчен задержканы тикшерү",
|
||||
"Proxy basic": "Прокси турында кыскача мәгълүмат",
|
||||
"Proxy detail": "Прокси турында тулы мәгълүмат",
|
||||
"Profiles": "Профильләр",
|
||||
"Update All Profiles": "Барлык профильләрне яңарту",
|
||||
"View Runtime Config": "Кулланылган конфигурацияне карау",
|
||||
"Reactivate Profiles": "Профильләрне янәдән активлаштыру",
|
||||
"Paste": "Кую",
|
||||
"Profile URL": "Профиль URL-ы",
|
||||
"Import": "Импорт",
|
||||
"From": "Каян",
|
||||
"Update Time": "Яңарту вакыты",
|
||||
"Used / Total": "Кулланылган / Барлыгы",
|
||||
"Expire Time": "Тамамлану вакыты",
|
||||
"Create Profile": "Профиль булдыру",
|
||||
"Edit Profile": "Профильне үзгәртү",
|
||||
"Edit Proxies": "Проксины үзгәртү",
|
||||
"Use newlines for multiple uri": "Берничә URI өчен яңа юл символын кулланыгыз (Base64 кодлавы ярдәм ителә)",
|
||||
"Edit Rules": "Кагыйдәләрне үзгәртү",
|
||||
"Rule Type": "Кагыйдә төре",
|
||||
"Rule Content": "Кагыйдә эчтәлеге",
|
||||
"Proxy Policy": "Прокси сәясәте",
|
||||
"No Resolve": "Резолвсыз",
|
||||
"Prepend Rule": "Кагыйдәне өскә өстәү",
|
||||
"Append Rule": "Кагыйдәне аска өстәү",
|
||||
"Prepend Group": "Төркемне өскә өстәү",
|
||||
"Append Group": "Төркемне аска өстәү",
|
||||
"Prepend Proxy": "Проксины өскә өстәү",
|
||||
"Append Proxy": "Проксины аска өстәү",
|
||||
"Rule Condition Required": "Кагыйдә шарты кирәк",
|
||||
"Invalid Rule": "Яраксыз кагыйдә",
|
||||
"Advanced": "Өстәмә",
|
||||
"Visualization": "Визуализация",
|
||||
"DOMAIN": "Домен исеменең тулы туры килүе",
|
||||
"DOMAIN-SUFFIX": "Домен суффиксына туры килү",
|
||||
"DOMAIN-KEYWORD": "Доменда төп сүзгә туры килү",
|
||||
"DOMAIN-REGEX": "Доменны регекс аша туры китерү",
|
||||
"GEOSITE": "Geosite исемлегендәге доменга туры килү",
|
||||
"GEOIP": "IP-адресның ил коды буенча туры килү",
|
||||
"SRC-GEOIP": "Чыганак IP-адресның ил коды буенча туры килү",
|
||||
"IP-ASN": "IP-адрес ASN'ы буенча туры килү",
|
||||
"SRC-IP-ASN": "Чыганак IP-адрес ASN'ы буенча туры килү",
|
||||
"IP-CIDR": "IP-адреслар диапазонына туры килү",
|
||||
"IP-CIDR6": "IPv6 адреслар диапазонына туры килү",
|
||||
"SRC-IP-CIDR": "Чыганак IP-адреслар диапазонына туры килү",
|
||||
"IP-SUFFIX": "IP-адрес суффиксына туры килү",
|
||||
"SRC-IP-SUFFIX": "Чыганак IP-адрес суффиксына туры килү",
|
||||
"SRC-PORT": "Чыганак портлар диапазонына туры килү",
|
||||
"DST-PORT": "Максат портлар диапазонына туры килү",
|
||||
"IN-PORT": "Керүче портка туры килү",
|
||||
"DSCP": "DSCP тамгалавы (tproxy UDP өчен)",
|
||||
"PROCESS-NAME": "Процесс исеменә туры килү (Android пакет исеме)",
|
||||
"PROCESS-PATH": "Процесс юлына туры килү",
|
||||
"PROCESS-NAME-REGEX": "Процесс исемен регекс белән туры китерү (Android пакет исеме)",
|
||||
"PROCESS-PATH-REGEX": "Процесс юлын регекс белән туры китерү",
|
||||
"NETWORK": "Транспорт протоколына (tcp/udp) туры килү",
|
||||
"UID": "Linux USER ID'га туры килү",
|
||||
"IN-TYPE": "Керүче тоташу төренә туры килү",
|
||||
"IN-USER": "Керүче тоташу кулланучысына туры килү",
|
||||
"IN-NAME": "Керүче тоташу исеменә туры килү",
|
||||
"SUB-RULE": "Кушымча кагыйдә",
|
||||
"RULE-SET": "Кагыйдәләр тупланмасына туры килү",
|
||||
"AND": "Логик ҺӘМ",
|
||||
"OR": "Логик ЯКИ",
|
||||
"NOT": "Логик ТҮГЕЛ",
|
||||
"MATCH": "Барлык сорауларга туры килә",
|
||||
"DIRECT": "Туры чыгу",
|
||||
"REJECT": "Сорауларны тоткарлау",
|
||||
"REJECT-DROP": "Сорауларны кире кагу",
|
||||
"PASS": "Туры килсә дә, бу кагыйдәне урап узу",
|
||||
"Edit Groups": "Прокси төркемнәрен үзгәртү",
|
||||
"Group Type": "Төркем төре",
|
||||
"select": "Проксины кулдан сайлау",
|
||||
"url-test": "URL-тест задержкасына карап прокси сайлау",
|
||||
"fallback": "Хата булган очракта башка проксига күчү",
|
||||
"load-balance": "Трафикны баланслау нигезендә прокси тарату",
|
||||
"relay": "Билгеле прокси чылбыры аша тапшыру",
|
||||
"Group Name": "Төркем исеме",
|
||||
"Use Proxies": "Прокси куллану",
|
||||
"Use Provider": "Провайдер куллану",
|
||||
"Health Check Url": "Сәламәтлекне тикшерү URL-ы",
|
||||
"Expected Status": "Көтелгән статус коды",
|
||||
"Interval": "Интервал",
|
||||
"Lazy": "Сак режим (lazy)",
|
||||
"Timeout": "Таймаут",
|
||||
"Max Failed Times": "Иң күп хаталы тикшерү саны",
|
||||
"Interface Name": "Интерфейс исеме",
|
||||
"Routing Mark": "Маршрут билгесе",
|
||||
"Include All": "Барлык прокси һәм провайдерларны кертү",
|
||||
"Include All Providers": "Барлык провайдерларны кертү",
|
||||
"Include All Proxies": "Барлык проксины кертү",
|
||||
"Exclude Filter": "Фильтр аша чыгару",
|
||||
"Exclude Type": "Чыгару төре",
|
||||
"Disable UDP": "UDP'ны сүндерү",
|
||||
"Hidden": "Яшерен",
|
||||
"Group Name Required": "Төркем исеме кирәк",
|
||||
"Group Name Already Exists": "Әлеге төркем исеме бар инде",
|
||||
"Extend Config": "Merge-ны үзгәртергә",
|
||||
"Extend Script": "Script-ны үзгәртергә",
|
||||
"Global Merge": "Гомумкеңәйтелгән көйләүләр",
|
||||
"Global Script": "Гомумкеңәйтелгән скрипт",
|
||||
"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": "Таблица күзаллау",
|
||||
"List View": "Исемлек күзаллау",
|
||||
"Close All": "Барысын да ябу",
|
||||
"Default": "Башлангыч",
|
||||
"Download Speed": "Йөкләү тизлеге",
|
||||
"Upload Speed": "Йөкләү (чыгару) тизлеге",
|
||||
"Host": "Хост",
|
||||
"Downloaded": "Йөкләнгән",
|
||||
"Uploaded": "Чыгарылган",
|
||||
"DL Speed": "Йөкләү тизл.",
|
||||
"UL Speed": "Чыгару тизл.",
|
||||
"Chains": "Чылбырлар",
|
||||
"Rule": "Кагыйдә",
|
||||
"Process": "Процесс",
|
||||
"Time": "Тоташу вакыты",
|
||||
"Source": "Чыганак адресы",
|
||||
"Destination IP": "Максат IP-адресы",
|
||||
"Close Connection": "Тоташуны ябу",
|
||||
"Rules": "Кагыйдәләр",
|
||||
"Rule Provider": "Кагыйдә провайдеры",
|
||||
"Logs": "Логлар",
|
||||
"Pause": "Туктау",
|
||||
"Clear": "Чистарту",
|
||||
"Test": "Тест",
|
||||
"Test All": "Барчасын тестлау",
|
||||
"Create Test": "Тест булдыру",
|
||||
"Edit Test": "Тестны үзгәртү",
|
||||
"Icon": "Иконка",
|
||||
"Test URL": "Тест URL-ы",
|
||||
"Settings": "Көйләүләр",
|
||||
"System Setting": "Система көйләүләре",
|
||||
"Tun Mode": "Tun режимы (виртуаль челтәр адаптеры)",
|
||||
"Reset to Default": "Башлангычка кайтару",
|
||||
"Tun Mode Info": "Tun режимы бөтен системаның трафигын тотып ала. Аны кабызган очракта системалы проксины аерым кабызу таләп ителми.",
|
||||
"Stack": "Стек",
|
||||
"System and Mixed Can Only be Used in Service Mode": "Система яки кушылган режимнар бары тик сервис режимында гына активлаштырыла ала",
|
||||
"Device": "Җайланма исеме",
|
||||
"Auto Route": "Авто-маршрутлау",
|
||||
"Strict Route": "Катгый маршрутлау",
|
||||
"Auto Detect Interface": "Интерфейсны автоматик ачыклау",
|
||||
"DNS Hijack": "DNS'ны үзгәртеп тоту (hijack)",
|
||||
"MTU": "MTU (макс. тапшыру берәмлеге)",
|
||||
"Service Mode": "Сервис режимы",
|
||||
"Service Mode Info": "Tun режимын кабызганчы сервис режимын урнаштыру сорала. Сервис буларак эшләтелгән Clash ядросына виртуаль челтәр адаптеры (TUN) куллану рөхсәт ителә.",
|
||||
"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": "Саклау вакыты",
|
||||
"Always use Default Bypass": "Һәрвакыт төп Bypass-ны куллану",
|
||||
"Proxy Bypass": "Проксины әйләнеп узу:",
|
||||
"Bypass": "Әйләнеп узу:",
|
||||
"Use PAC Mode": "PAC режимын куллану",
|
||||
"PAC Script Content": "PAC скрипты эчтәлеге",
|
||||
"PAC URL": "PAC адресы",
|
||||
"Auto Launch": "Автостарт",
|
||||
"Silent Start": "Фон режимында башлау",
|
||||
"Silent Start Info": "Программаны фоновый режимда, тәрәзәсез эшләтеп җибәрү",
|
||||
"TG Channel": "Telegram каналы",
|
||||
"Manual": "Документация",
|
||||
"Github Repo": "GitHub репозиториясе",
|
||||
"Clash Setting": "Clash көйләүләре",
|
||||
"Allow Lan": "Локаль челтәргә рөхсәт",
|
||||
"Network Interface": "Челтәр интерфейсы",
|
||||
"Ip Address": "IP адресы",
|
||||
"Mac Address": "MAC адресы",
|
||||
"IPv6": "IPv6",
|
||||
"Unified Delay": "Бердәм задержка",
|
||||
"Unified Delay Info": "Бердәм задержка актив булганда, төрле типтагы узеллар өчен икеләтә тест башкарыла, TCP установканы раслау аермаларын тигезләү максатында",
|
||||
"Log Level": "Лог дәрәҗәсе",
|
||||
"Log Level Info": "Бу фәкать сервис режимында эшләгән вакытта системалы журнал файлларына кагыла",
|
||||
"Port Config": "Порт көйләүләре",
|
||||
"Random Port": "Очраклы порт",
|
||||
"Mixed Port": "Катнаш прокси порты",
|
||||
"Socks Port": "Socks прокси порты",
|
||||
"Http Port": "HTTP(s) прокси порты",
|
||||
"Redir Port": "Redir — үтә күренмәле прокси порты",
|
||||
"Tproxy Port": "Tproxy — үтә күренмәле прокси порты",
|
||||
"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 ядросы",
|
||||
"Upgrade": "Яңарту",
|
||||
"Restart": "Перезапуск",
|
||||
"Release Version": "Рәсми версия",
|
||||
"Alpha Version": "Альфа-версия",
|
||||
"Please Enable Service Mode": "Башта сервис режимын кабызырга кирәк",
|
||||
"Please enter your root password": "root паролен языгыз",
|
||||
"Grant": "Рөхсәт бирү",
|
||||
"Open UWP tool": "UWP инструментын ачу",
|
||||
"Open UWP tool Info": "Windows 8'дән башлап UWP кушымталары (Microsoft Store кебек) локаль хосттагы челтәр хезмәтләренә турыдан-туры тоташа алмый. Бу инструмент әлеге чикләүне әйләнеп узарга ярдәм итә",
|
||||
"Update GeoData": "GeoData яңарту",
|
||||
"Verge Setting": "Verge көйләүләре",
|
||||
"Language": "Тел",
|
||||
"Theme Mode": "Теманың режимы",
|
||||
"theme.light": "Якты",
|
||||
"theme.dark": "Караңгы",
|
||||
"theme.system": "Система",
|
||||
"Tray Click Event": "Трейдагы басу вакыйгасы",
|
||||
"Show Main Window": "Төп тәрәзәне күрсәтү",
|
||||
"Copy Env Type": "Env төрен күчереп алу",
|
||||
"Copy Success": "Күчерелде",
|
||||
"Start Page": "Баш бит",
|
||||
"Startup Script": "Башлану скрипты",
|
||||
"Browse": "Карау",
|
||||
"Theme Setting": "Тема көйләүләре",
|
||||
"Primary Color": "Төп төс",
|
||||
"Secondary Color": "Икенче төс",
|
||||
"Primary Text Color": "Төп текст төсе",
|
||||
"Secondary Text Color": "Икенче текст төсе",
|
||||
"Info Color": "Мәгълүмат төсе",
|
||||
"Warning Color": "Кисәтү төсе",
|
||||
"Error Color": "Хата төсе",
|
||||
"Success Color": "Уңыш төсе",
|
||||
"Font Family": "Шрифтлар гаиләсе",
|
||||
"CSS Injection": "CSS кертү",
|
||||
"Layout Setting": "Расположение көйләүләре",
|
||||
"Traffic Graph": "Трафик графигы",
|
||||
"Memory Usage": "Хәтер куллану",
|
||||
"Memory Cleanup": "Хәтерне чистарту өчен басыгыз",
|
||||
"Proxy Group Icon": "Прокси төркеме иконкасы",
|
||||
"Nav Icon": "Навигация иконкасы",
|
||||
"Monochrome": "Монохром",
|
||||
"Colorful": "Төсле",
|
||||
"Tray Icon": "Трей иконкасы",
|
||||
"Common Tray Icon": "Гомуми трей иконкасы",
|
||||
"System Proxy Tray Icon": "Системалы прокси иконкасы",
|
||||
"Tun Tray Icon": "Tun (виртуаль адаптер) иконкасы",
|
||||
"Miscellaneous": "Өстәмә көйләүләр",
|
||||
"App Log Level": "Кушымта журналы дәрәҗәсе",
|
||||
"Auto Close Connections": "Тоташуларны автоматик ябу",
|
||||
"Auto Close Connections Info": "Прокси төркеме яисә режимын үзгәрткәндә актив тоташуларны өзү",
|
||||
"Auto Check Update": "Яңартуларны автоматик тикшерү",
|
||||
"Enable Builtin Enhanced": "Эчке камилләштерүне кабызу",
|
||||
"Enable Builtin Enhanced Info": "Конфигурация файлы белән туры килә торган өстәмә оптимизация",
|
||||
"Proxy Layout Columns": "Прокси күрсәтү баганалары саны",
|
||||
"Auto Columns": "Авто баганалар",
|
||||
"Auto Log Clean": "Логларны автоматик чистарту",
|
||||
"Never Clean": "Беркайчан чистартмаска",
|
||||
"Retain _n Days": "{{n}} көн саклау",
|
||||
"Default Latency Test": "Тоткарлануны тикшерү сылтамасы (defaults)",
|
||||
"Default Latency Test Info": "Бу фәкать клиентның HTTP сораулары тесты өчен кулланыла, конфигурация файлына йогынты ясамый",
|
||||
"Default Latency Timeout": "Тоткарлануның стандарт таймауты",
|
||||
"Hotkey Setting": "Клавиатура төймәләре (hotkey) көйләүләре",
|
||||
"open_or_close_dashboard": "Панельне ачу/ябу",
|
||||
"clash_mode_rule": "Кагыйдәләр режимы",
|
||||
"clash_mode_global": "Глобаль режим",
|
||||
"clash_mode_direct": "Туры режим",
|
||||
"toggle_system_proxy": "Системалы проксины кабызу/сүндерү",
|
||||
"toggle_tun_mode": "Tun режимын кабызу/сүндерү",
|
||||
"Backup Setting": "Резерв копия көйләүләре",
|
||||
"Backup Setting Info": "WebDAV аша конфигурация файлын саклауны хуплый",
|
||||
"Runtime Config": "Агымдагы конфигурация",
|
||||
"Open Conf Dir": "Кушымта папкасын ачу",
|
||||
"Open Conf Dir Info": "Әгәр программада хаталар чыкса, бу папкадагы файлларны саклап калыгыз да, аннары барысын да бетереп, программаны яңадан башлагыз",
|
||||
"Open Core Dir": "Ядро сакланган папканы ачу",
|
||||
"Open Logs Dir": "Логлар папкасын ачу",
|
||||
"Check for Updates": "Яңартуларны тикшерү",
|
||||
"Go to Release Page": "Релизлар битенә күчү",
|
||||
"Portable Updater Error": "Портатив версиядә кушымта эчендә яңарту хупланмый, кулдан төшереп алыгыз",
|
||||
"Break Change Update Error": "Бу зур яңарту, ул кушымта эчендә яңартылмый. Борып алып ташлап, яңадан урнаштыру сорала.",
|
||||
"Open Dev Tools": "Разработчик коралларын ачу",
|
||||
"Exit": "Чыгу",
|
||||
"Verge Version": "Verge версиясе",
|
||||
"ReadOnly": "Уку режимы гына",
|
||||
"ReadOnlyMessage": "Уку режимында үзгәртү мөмкин түгел",
|
||||
"Filter": "Фильтр",
|
||||
"Filter conditions": "Фильтр шартлары",
|
||||
"Match Case": "Регистрны исәпкә алу",
|
||||
"Match Whole Word": "Сүзнең тулы туры килүе",
|
||||
"Use Regular Expression": "Регуляр выражениеләр куллану",
|
||||
"Profile Imported Successfully": "Профиль уңышлы импортланды",
|
||||
"Profile Switched": "Профиль алмаштырылды",
|
||||
"Profile Reactivated": "Профиль яңадан активлаштырылды",
|
||||
"Only YAML Files Supported": "Фәкать YAML-файллар гына хуплана",
|
||||
"Settings Applied": "Көйләүләр кулланылды",
|
||||
"Service Installed Successfully": "Сервис уңышлы урнаштырылды",
|
||||
"Service Uninstalled Successfully": "Сервис уңышлы салдырылды",
|
||||
"Proxy Daemon Duration Cannot be Less than 1 Second": "Прокси-демон эш вакыты 1 секундтан ким була алмый",
|
||||
"Invalid Bypass Format": "Дөрес булмаган Bypass форматы",
|
||||
"Clash Port Modified": "Clash порты үзгәртелде",
|
||||
"Port Conflict": "Порт конфликтлары",
|
||||
"Restart Application to Apply Modifications": "Үзгәрешләрне куллану өчен кушымтаны яңадан ачарга кирәк",
|
||||
"External Controller Address Modified": "Тышкы контроллер адресы үзгәртелде",
|
||||
"Permissions Granted Successfully for _clash Core": "{{core}} ядросы өчен рөхсәтләр бирелде",
|
||||
"Core Version Updated": "Ядро версиясе яңартылды",
|
||||
"Clash Core Restarted": "Clash ядросы яңадан башланды",
|
||||
"Switched to _clash Core": "{{core}} ядросына күчү башкарылды",
|
||||
"GeoData Updated": "GeoData яңартылды",
|
||||
"Currently on the Latest Version": "Сездә иң соңгы версия урнаштырылган",
|
||||
"Import subscription successful": "Подписка уңышлы импортланды",
|
||||
"WebDAV Server URL": "WebDAV сервер URL-ы (http(s)://)",
|
||||
"Username": "Кулланучы исеме",
|
||||
"Password": "Пароль",
|
||||
"Backup": "Резерв копия",
|
||||
"Filename": "Файл исеме",
|
||||
"Actions": "Гамәлләр",
|
||||
"Restore": "Кайтару",
|
||||
"No Backups": "Резерв копияләр юк",
|
||||
"WebDAV URL Required": "WebDAV адресы буш булырга тиеш түгел",
|
||||
"Invalid WebDAV URL": "WebDAV адресы дөрес түгел",
|
||||
"Username Required": "Кулланучы исеме буш булмаска тиеш",
|
||||
"Password Required": "Пароль буш булмаска тиеш",
|
||||
"Failed to Fetch Backups": "Резерв копия файлларын алуда хата",
|
||||
"WebDAV Config Saved": "WebDAV көйләүләре сакланды",
|
||||
"WebDAV Config Save Failed": "WebDAV көйләүләрен саклап булмады: {{error}}",
|
||||
"Backup Created": "Резерв копия уңышлы ясалды",
|
||||
"Backup Failed": "Резерв копия хата белән төгәлләнде: {{error}}",
|
||||
"Delete Backup": "Резерв копияне бетерү",
|
||||
"Restore Backup": "Резерв копияне кайтару",
|
||||
"Backup Time": "Резерв копия вакыты",
|
||||
"Confirm to delete this backup file?": "Бу резерв копия файлын бетерергә телисезме?",
|
||||
"Confirm to restore this backup file?": "Бу резерв копия файлын кире кайтарырга телисезме?",
|
||||
"Restore Success, App will restart in 1s": "Уңышлы кайтарылды, кушымта 1 секундтан яңадан башланачак",
|
||||
"Failed to fetch backup files": "Резерв копия файлларын алуда хата",
|
||||
"Profile": "Профиль",
|
||||
"Help": "Ярдәм",
|
||||
"About": "Турында",
|
||||
"Theme": "Тема",
|
||||
"Main Window": "Төп тәрәзә",
|
||||
"Traffic Graph": "Трафик графигы",
|
||||
"Memory Usage": "Хәтер куллану",
|
||||
"Group Icon": "Төркем иконкасы",
|
||||
"Menu Icon": "Меню иконкасы",
|
||||
"Tray Icon": "Трей иконкасы",
|
||||
"PAC File": "PAC файлы",
|
||||
"Web UI": "Веб-интерфейс",
|
||||
"Hotkeys": "Кызу төймәләр",
|
||||
"Verge Mixed Port": "Verge катнаш порты",
|
||||
"Verge Socks Port": "Verge Socks порты",
|
||||
"Verge Redir Port": "Verge кире юнәлтү порты",
|
||||
"Verge Tproxy Port": "Verge Tproxy порты",
|
||||
"Verge Port": "Verge порты",
|
||||
"Verge HTTP Enabled": "Verge HTTP кушылган",
|
||||
"WebDAV URL": "WebDAV URL",
|
||||
"WebDAV Username": "WebDAV кулланучы исеме",
|
||||
"WebDAV Password": "WebDAV серсүзе",
|
||||
"Dashboard": "Панель"
|
||||
}
|
@ -4,12 +4,14 @@ import en from "@/locales/en.json";
|
||||
import ru from "@/locales/ru.json";
|
||||
import zh from "@/locales/zh.json";
|
||||
import fa from "@/locales/fa.json";
|
||||
import tt from "@/locales/tt.json";
|
||||
|
||||
const resources = {
|
||||
en: { translation: en },
|
||||
ru: { translation: ru },
|
||||
zh: { translation: zh },
|
||||
fa: { translation: fa },
|
||||
tt: { translation: tt },
|
||||
};
|
||||
|
||||
i18n.use(initReactI18next).init({
|
||||
|
Loading…
x
Reference in New Issue
Block a user