diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 446f4693..af16c8ae 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1041,6 +1041,7 @@ dependencies = [ "serde", "serde_json", "serde_yaml", + "sys-locale", "sysinfo", "sysproxy", "tauri", @@ -6364,6 +6365,15 @@ dependencies = [ "syn 2.0.90", ] +[[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.33.0" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 4d7441c0..ba8442e1 100755 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -66,6 +66,7 @@ base64 = "0.22.1" getrandom = "0.2" tokio-tungstenite = "0.26.1" futures = "0.3" +sys-locale = "0.3.1" [target.'cfg(windows)'.dependencies] runas = "=1.2.0" diff --git a/src-tauri/src/config/verge.rs b/src-tauri/src/config/verge.rs index 596f8c2a..73f045a8 100644 --- a/src-tauri/src/config/verge.rs +++ b/src-tauri/src/config/verge.rs @@ -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::(&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()), diff --git a/src-tauri/src/core/tray/mod.rs b/src-tauri/src/core/tray/mod.rs index 794e893b..123546f5 100644 --- a/src-tauri/src/core/tray/mod.rs +++ b/src-tauri/src/core/tray/mod.rs @@ -2,13 +2,14 @@ use once_cell::sync::OnceCell; #[cfg(target_os = "macos")] pub mod speed_rate; use crate::core::clash_api::Rate; -use crate::utils::dirs; use crate::{ cmds, config::Config, - feat, t, - utils::resolve::{self, VERSION}, + feat, resolve, + utils::resolve::VERSION, + utils::{dirs, i18n::t}, }; + use anyhow::Result; #[cfg(target_os = "macos")] use futures::StreamExt; @@ -114,7 +115,6 @@ impl Tray { let verge = Config::verge().latest().clone(); let system_proxy = verge.enable_system_proxy.as_ref().unwrap_or(&false); let tun_mode = verge.enable_tun_mode.as_ref().unwrap_or(&false); - let mode = { Config::clash() .latest() @@ -239,7 +239,6 @@ impl Tray { /// 更新托盘提示 pub fn update_tooltip(&self) -> 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 verge = Config::verge().latest().clone(); @@ -267,11 +266,11 @@ impl Tray { let tray = app_handle.tray_by_id("main").unwrap(); 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(()) @@ -356,7 +355,6 @@ fn create_tray_menu( tun_mode_enabled: bool, ) -> Result> { let mode = mode.unwrap_or(""); - let use_zh = { Config::verge().latest().language == Some("zh".into()) }; let version = VERSION.get().unwrap(); let hotkeys = Config::verge() .latest() @@ -378,7 +376,7 @@ fn create_tray_menu( let open_window = &MenuItem::with_id( app_handle, "open_window", - t!("Dashboard", "打开面板", use_zh), + t("Dashboard"), true, hotkeys.get("open_or_close_dashboard").map(|s| s.as_str()), ) @@ -387,7 +385,7 @@ fn create_tray_menu( let rule_mode = &CheckMenuItem::with_id( app_handle, "rule_mode", - t!("Rule Mode", "规则模式", use_zh), + t("Rule Mode"), true, mode == "rule", hotkeys.get("clash_mode_rule").map(|s| s.as_str()), @@ -397,7 +395,7 @@ fn create_tray_menu( let global_mode = &CheckMenuItem::with_id( app_handle, "global_mode", - t!("Global Mode", "全局模式", use_zh), + t("Global Mode"), true, mode == "global", hotkeys.get("clash_mode_global").map(|s| s.as_str()), @@ -407,7 +405,7 @@ fn create_tray_menu( let direct_mode = &CheckMenuItem::with_id( app_handle, "direct_mode", - t!("Direct Mode", "直连模式", use_zh), + t("Direct Mode"), true, mode == "direct", hotkeys.get("clash_mode_direct").map(|s| s.as_str()), @@ -417,7 +415,7 @@ fn create_tray_menu( let system_proxy = &CheckMenuItem::with_id( app_handle, "system_proxy", - t!("System Proxy", "系统代理", use_zh), + t("System Proxy"), true, system_proxy_enabled, hotkeys.get("toggle_system_proxy").map(|s| s.as_str()), @@ -427,26 +425,20 @@ fn create_tray_menu( let tun_mode = &CheckMenuItem::with_id( app_handle, "tun_mode", - t!("TUN Mode", "Tun模式", use_zh), + t("TUN Mode"), true, tun_mode_enabled, hotkeys.get("toggle_tun_mode").map(|s| s.as_str()), ) .unwrap(); - let copy_env = &MenuItem::with_id( - app_handle, - "copy_env", - t!("Copy Env", "复制环境变量", use_zh), - true, - None::<&str>, - ) - .unwrap(); + let copy_env = + &MenuItem::with_id(app_handle, "copy_env", t("Copy Env"), true, None::<&str>).unwrap(); let open_app_dir = &MenuItem::with_id( app_handle, "open_app_dir", - t!("Conf Dir", "配置目录", use_zh), + t("Conf Dir"), true, None::<&str>, ) @@ -455,7 +447,7 @@ fn create_tray_menu( let open_core_dir = &MenuItem::with_id( app_handle, "open_core_dir", - t!("Core Dir", "内核目录", use_zh), + t("Core Dir"), true, None::<&str>, ) @@ -464,15 +456,16 @@ fn create_tray_menu( let open_logs_dir = &MenuItem::with_id( app_handle, "open_logs_dir", - t!("Logs Dir", "日志目录", use_zh), + t("Logs Dir"), true, None::<&str>, ) .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], ) @@ -481,7 +474,7 @@ fn create_tray_menu( let restart_clash = &MenuItem::with_id( app_handle, "restart_clash", - t!("Restart Clash Core", "重启Clash内核", use_zh), + t("Restart Clash Core"), true, None::<&str>, ) @@ -490,7 +483,7 @@ fn create_tray_menu( let restart_app = &MenuItem::with_id( app_handle, "restart_app", - t!("Restart App", "重启App", use_zh), + t("Restart App"), true, None::<&str>, ) @@ -499,7 +492,7 @@ fn create_tray_menu( let app_version = &MenuItem::with_id( app_handle, "app_version", - format!("Version {version}"), + format!("{} {version}", t("Verge Version")), true, None::<&str>, ) @@ -508,20 +501,14 @@ fn create_tray_menu( let more = &Submenu::with_id_and_items( app_handle, "more", - t!("More", "更多", use_zh), + t("More"), true, &[restart_clash, restart_app, app_version], ) .unwrap(); - let quit = &MenuItem::with_id( - app_handle, - "quit", - t!("Quit", "退出", use_zh), - true, - Some("CmdOrControl+Q"), - ) - .unwrap(); + let quit = + &MenuItem::with_id(app_handle, "quit", t("Exit"), true, Some("CmdOrControl+Q")).unwrap(); let separator = &PredefinedMenuItem::separator(app_handle).unwrap(); diff --git a/src-tauri/src/utils/i18n.rs b/src-tauri/src/utils/i18n.rs new file mode 100644 index 00000000..d3ab9c00 --- /dev/null +++ b/src-tauri/src/utils/i18n.rs @@ -0,0 +1,99 @@ +use crate::config::Config; +use once_cell::sync::Lazy; +use serde_json::Value; +use std::{collections::HashMap, fs, path::Path}; +use sys_locale; + +pub fn get_supported_languages() -> Vec { + 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(), + ] +} + +static TRANSLATIONS: Lazy> = Lazy::new(|| { + let project_dir = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap(); + let locales_dir = project_dir.join("src/locales"); + let mut translations = HashMap::new(); + + for lang in ["en", "ru", "zh", "fa", "tt"] { + let file_path = locales_dir.join(format!("{}.json", lang)); + if let Ok(content) = fs::read_to_string(file_path) { + if let Ok(json) = serde_json::from_str(&content) { + translations.insert(lang.to_string(), json); + } + } + } + translations +}); + +pub fn t(key: &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()); + + if let Some(translations) = TRANSLATIONS.get(¤t_lang) { + if let Some(text) = translations.get(key) { + if let Some(text) = text.as_str() { + return text.to_string(); + } + } + } + + // Fallback to English + if let Some(translations) = TRANSLATIONS.get("en") { + if let Some(text) = translations.get(key) { + if let Some(text) = text.as_str() { + return text.to_string(); + } + } + } + + key.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") + } +} diff --git a/src-tauri/src/utils/mod.rs b/src-tauri/src/utils/mod.rs index b5ee04e7..4b5ce6fb 100644 --- a/src-tauri/src/utils/mod.rs +++ b/src-tauri/src/utils/mod.rs @@ -5,3 +5,4 @@ pub mod init; pub mod resolve; pub mod server; pub mod tmpl; +pub mod i18n; diff --git a/src/components/setting/setting-verge.tsx b/src/components/setting/setting-verge.tsx index 357322e2..f4f922b0 100644 --- a/src/components/setting/setting-verge.tsx +++ b/src/components/setting/setting-verge.tsx @@ -28,6 +28,7 @@ import getSystem from "@/utils/get-system"; import { routers } from "@/pages/_routers"; import { TooltipIcon } from "@/components/base/base-tooltip-icon"; import { ContentCopyRounded } from "@mui/icons-material"; +import { languages } from "@/services/i18n"; interface Props { onError?: (err: Error) => void; @@ -35,6 +36,19 @@ interface Props { const OS = getSystem(); +const languageOptions = Object.entries(languages).map(([code, _]) => { + const labels: { [key: string]: string } = { + en: "English", + ru: "Русский", + zh: "中文", + fa: "فارسی", + tt: "Татар", + id: "Bahasa Indonesia", + ar: "العربية", + }; + return { code, label: labels[code] }; +}); + const SettingVerge = ({ onError }: Props) => { const { t } = useTranslation(); @@ -96,10 +110,11 @@ const SettingVerge = ({ onError }: Props) => { onGuard={(e) => patchVerge({ language: e })} > diff --git a/src/locales/ar.json b/src/locales/ar.json new file mode 100644 index 00000000..07913544 --- /dev/null +++ b/src/locales/ar.json @@ -0,0 +1,437 @@ +{ + "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": "رابط فحص التأخير", + "Delay check to cancel fixed": "فحص التأخير لإلغاء الثابت", + "Proxy basic": "إعدادات الوكيل الأساسية", + "Proxy detail": "تفاصيل الوكيل", + "Profiles": "الملفات الشخصية", + "Update All Profiles": "تحديث جميع الملفات الشخصية", + "View Runtime Config": "عرض تكوين وقت التشغيل", + "Reactivate Profiles": "إعادة تنشيط الملفات الشخصية", + "Paste": "لصق", + "Profile 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": "مطابقة ASN لعنوان IP", + "SRC-IP-ASN": "مطابقة ASN لعنوان IP المصدر", + "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", + "IN-TYPE": "مطابقة نوع الإدخال", + "IN-USER": "مطابقة اسم المستخدم للإدخال", + "IN-NAME": "مطابقة اسم الإدخال", + "SUB-RULE": "قاعدة فرعية", + "RULE-SET": "مطابقة مجموعة القواعد", + "AND": "منطقي AND", + "OR": "منطقي OR", + "NOT": "منطقي NOT", + "MATCH": "مطابقة جميع الطلبات", + "DIRECT": "البيانات تخرج مباشرة", + "REJECT": "رفض الطلبات", + "REJECT-DROP": "تجاهل الطلبات", + "PASS": "تخطي هذه القاعدة عند المطابقة", + "Edit Groups": "تعديل مجموعات الوكلاء", + "Group Type": "نوع المجموعة", + "select": "اختيار الوكيل يدويًا", + "url-test": "اختيار الوكيل بناءً على تأخير اختبار الرابط", + "fallback": "التبديل إلى وكيل آخر عند حدوث خطأ", + "load-balance": "توزيع التحميل بين الوكلاء", + "relay": "التمرير عبر سلسلة الوكلاء المحددة", + "Group Name": "اسم المجموعة", + "Use Proxies": "استخدام الوكلاء", + "Use Provider": "استخدام المزود", + "Health Check Url": "رابط فحص الصحة", + "Expected Status": "الحالة المتوقعة", + "Interval": "الفاصل الزمني", + "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": "توسيع الإعدادات", + "Extend Script": "توسيع السكربت", + "Global Merge": "دمج عالمي للإعدادات", + "Global Script": "سكريبت عالمي", + "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": "تم الرفع", + "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": "رابط الاختبار", + "Settings": "الإعدادات", + "System Setting": "إعدادات النظام", + "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": "وضع الخدمة", + "Service Mode Info": "يرجى تثبيت وضع الخدمة قبل تمكين وضع TUN. يمكن للعمليات الأساسية التي يبدأها وضع الخدمة الحصول على إذن لتثبيت بطاقة الشبكة الافتراضية (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": "استخدام التخطي الافتراضي دائمًا", + "Proxy Bypass": "إعدادات تخطي الوكيل:", + "Bypass": "تخطي:", + "Use PAC Mode": "استخدام وضع PAC", + "PAC Script Content": "محتوى سكريبت PAC", + "PAC URL": "رابط PAC:", + "Auto Launch": "إطلاق تلقائي", + "Silent Start": "بدء صامت", + "Silent Start Info": "بدء البرنامج في الخلفية دون عرض الواجهة", + "TG Channel": "قناة تيليجرام", + "Manual": "دليل", + "Github Repo": "مستودع Github", + "Clash Setting": "إعدادات Clash", + "Allow Lan": "السماح بالشبكة المحلية", + "Network Interface": "واجهة الشبكة", + "Ip Address": "عنوان IP", + "Mac Address": "عنوان MAC", + "IPv6": "IPv6", + "Unified Delay": "تأخير موحد", + "Unified Delay Info": "عند تفعيل التأخير الموحد، سيتم إجراء اختبارين للتأخير لتقليل الفروقات الناتجة عن مفاوضات الاتصال", + "Log Level": "مستوى السجلات", + "Port Config": "تكوين المنافذ", + "Random Port": "منفذ عشوائي", + "Mixed Port": "منفذ مختلط", + "Socks Port": "منفذ SOCKS", + "Http Port": "منفذ HTTP(S)", + "Redir Port": "منفذ إعادة التوجيه", + "Tproxy Port": "منفذ Tproxy", + "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", + "Upgrade": "ترقية", + "Restart": "إعادة التشغيل", + "Release Version": "إصدار مستقر", + "Alpha Version": "إصدار ألفا", + "Please Enable Service Mode": "يرجى تثبيت وتفعيل وضع الخدمة أولاً", + "Please enter your root password": "يرجى إدخال كلمة مرور الرووت", + "Grant": "منح الصلاحيات", + "Open UWP tool": "فتح أداة UWP", + "Open UWP tool Info": "منذ نظام ويندوز 8، يتم تقييد تطبيقات UWP من الوصول المباشر إلى المضيف المحلي. هذه الأداة تتيح تجاوز هذا التقييد", + "Update GeoData": "تحديث البيانات الجغرافية", + "Verge Setting": "إعدادات Verge", + "Language": "اللغة", + "Theme Mode": "وضع السمة", + "theme.light": "سمة فاتحة", + "theme.dark": "سمة داكنة", + "theme.system": "سمة النظام", + "Tray Click Event": "حدث النقر على الأيقونة في شريط المهام", + "Show Main Window": "إظهار النافذة الرئيسية", + "Copy Env Type": "نسخ نوع البيئة", + "Copy Success": "تم النسخ بنجاح", + "Start Page": "صفحة البدء", + "Startup Script": "سكريبت بدء التشغيل", + "Browse": "استعراض", + "Theme Setting": "إعدادات السمة", + "Primary Color": "اللون الأساسي", + "Secondary Color": "اللون الثانوي", + "Primary Text": "النص الأساسي", + "Secondary Text": "النص الثانوي", + "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": "اختبار التأخير الافتراضي", + "Default Latency Test Info": "يُستخدم فقط لاختبار طلب HTTP العميل. لن يؤثر على ملف التكوين", + "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", + "Backup Setting": "إعداد النسخ الاحتياطي", + "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": "لا يمكن أن تقل مدة خادم الوكيل عن ثانية واحدة", + "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}} Core", + "Core Version Updated": "تم تحديث إصدار النواة", + "Clash Core Restarted": "تم إعادة تشغيل نواة Clash", + "Switched to _clash Core": "تم التبديل إلى {{core}} Core", + "GeoData Updated": "تم تحديث البيانات الجغرافية", + "Currently on the Latest Version": "أنت على أحدث إصدار حاليًا", + "Import Subscription Successful": "تم استيراد الاشتراك بنجاح", + "WebDAV Server URL": "عنوان خادم WebDAV", + "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": "تمت الاستعادة بنجاح، سيعاد تشغيل التطبيق خلال ثانية واحدة", + "Failed to fetch backup files": "فشل في جلب ملفات النسخ الاحتياطي", + "Profile": "الملف الشخصي", + "Help": "مساعدة", + "About": "حول", + "Theme": "السمة", + "TUN Mode": "وضع TUN", + "Main Window": "النافذة الرئيسية", + "Group Icon": "أيقونة المجموعة", + "Menu Icon": "أيقونة القائمة", + "System Proxy Bypass": "تخطي وكيل النظام", + "PAC File": "ملف PAC", + "Web UI": "واجهة الويب", + "Hotkeys": "اختصارات لوحة المفاتيح", + "Auto Close Connection": "إغلاق الاتصال تلقائيًا", + "Enable Built-in Enhanced": "تفعيل التحسين المدمج", + "Proxy Layout Column": "عمود عرض الوكيل", + "Test List": "قائمة الاختبارات", + "Enable Random Port": "تفعيل المنفذ العشوائي", + "Verge Mixed Port": "منفذ Verge المختلط", + "Verge Socks Port": "منفذ Verge SOCKS", + "Verge Redir Port": "منفذ إعادة التوجيه لـ Verge", + "Verge Tproxy Port": "منفذ Tproxy لـ Verge", + "Verge Port": "منفذ Verge", + "Verge HTTP Enabled": "تمكين Verge HTTP", + "WebDAV URL": "رابط WebDAV", + "WebDAV Username": "اسم المستخدم لـ WebDAV", + "WebDAV Password": "كلمة مرور WebDAV", + "Copy Env": "نسخ البيئة", + "Conf Dir": "مجلد الإعدادات", + "Core Dir": "مجلد النواة", + "Logs Dir": "مجلد السجلات", + "Open Dir": "فتح المجلد", + "Restart Clash Core": "إعادة تشغيل نواة Clash", + "Restart App": "إعادة تشغيل التطبيق", + "More": "المزيد", + "Dashboard": "لوحة التحكم", + "Rule Mode": "وضع القواعد", + "Global Mode": "الوضع العالمي", + "Direct Mode": "الوضع المباشر" +} diff --git a/src/locales/en.json b/src/locales/en.json index 8e10af3f..c9f96ec8 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -398,5 +398,43 @@ "Confirm to delete this backup file?": "Confirm to delete this backup file?", "Confirm to restore this backup file?": "Confirm to restore this backup file?", "Restore Success, App will restart in 1s": "Restore Success, App will restart in 1s", - "Failed to fetch backup files": "Failed to fetch backup files" + "Failed to fetch backup files": "Failed to fetch backup files", + "Profile": "Profile", + "Help": "Help", + "About": "About", + "Theme": "Theme", + "TUN Mode": "TUN Mode", + "Main Window": "Main Window", + "Group Icon": "Group Icon", + "Menu Icon": "Menu Icon", + "System Proxy Bypass": "System Proxy Bypass", + "PAC File": "PAC File", + "Web UI": "Web UI", + "Hotkeys": "Hotkeys", + "Auto Close Connection": "Auto Close Connection", + "Enable Built-in Enhanced": "Enable Built-in Enhanced", + "Proxy Layout Column": "Proxy Layout Column", + "Test List": "Test List", + "Enable Random Port": "Enable Random Port", + "Verge Mixed Port": "Verge Mixed Port", + "Verge Socks Port": "Verge Socks Port", + "Verge Redir Port": "Verge Redir Port", + "Verge Tproxy Port": "Verge Tproxy Port", + "Verge Port": "Verge Port", + "Verge HTTP Enabled": "Verge HTTP Enabled", + "WebDAV URL": "WebDAV URL", + "WebDAV Username": "WebDAV Username", + "WebDAV Password": "WebDAV Password", + "Copy Env": "Copy Env", + "Conf Dir": "Conf Dir", + "Core Dir": "Core Dir", + "Logs Dir": "Logs Dir", + "Open Dir": "Open Dir", + "Restart Clash Core": "Restart Clash Core", + "Restart App": "Restart App", + "More": "More", + "Dashboard": "Dashboard", + "Rule Mode": "Rule Mode", + "Global Mode": "Global Mode", + "Direct Mode": "Direct Mode" } diff --git a/src/locales/fa.json b/src/locales/fa.json index 10421ff1..4333c0d6 100644 --- a/src/locales/fa.json +++ b/src/locales/fa.json @@ -113,7 +113,7 @@ "select": "انتخاب پروکسی به صورت دستی", "url-test": "انتخاب پروکسی بر اساس تأخیر آزمایش URL", "fallback": "تعویض به پروکسی دیگر در صورت بروز خطا", - "load-balance": "توزیع ��روکسی بر اساس توازن بار", + "load-balance": "توزیع پراکسی بر اساس توازن بار", "relay": "عبور از زنجیره پروکسی تعریف شده", "Group Name": "نام گروه", "Use Proxies": "استفاده از پروکسی‌ها", @@ -398,5 +398,37 @@ "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": "دریافت فایل‌های پشتیبان ناموفق بود" + "Failed to fetch backup files": "دریافت فایل‌های پشتیبان ناموفق بود", + "Profile": "پروفایل", + "Help": "راهنما", + "About": "درباره", + "Theme": "پوسته", + "Main Window": "پنجره اصلی", + "Group Icon": "آیکون گروه", + "Menu Icon": "آیکون منو", + "PAC File": "فایل PAC", + "Web UI": "رابط وب", + "Hotkeys": "کلیدهای میانبر", + "Verge Mixed Port": "پورت ترکیبی Verge", + "Verge Socks Port": "پورت Socks Verge", + "Verge Redir Port": "پورت تغییر مسیر Verge", + "Verge Tproxy Port": "پورت Tproxy Verge", + "Verge Port": "پورت Verge", + "Verge HTTP Enabled": "HTTP Verge فعال", + "WebDAV URL": "آدرس WebDAV", + "WebDAV Username": "نام کاربری WebDAV", + "WebDAV Password": "رمز عبور WebDAV", + "Dashboard": "داشبورد", + "Restart App": "راه‌اندازی مجدد برنامه", + "Restart Clash Core": "راه‌اندازی مجدد هسته Clash", + "TUN Mode": "حالت TUN", + "Copy Env": "کپی متغیرهای محیطی", + "Conf Dir": "پوشه پیکربندی", + "Core Dir": "پوشه هسته", + "Logs Dir": "پوشه لاگ‌ها", + "Open Dir": "باز کردن پوشه", + "More": "بیشتر", + "Rule Mode": "حالت قوانین", + "Global Mode": "حالت جهانی", + "Direct Mode": "حالت مستقیم" } diff --git a/src/locales/id.json b/src/locales/id.json new file mode 100644 index 00000000..67cf34e8 --- /dev/null +++ b/src/locales/id.json @@ -0,0 +1,433 @@ +{ + "millis": "milidetik", + "seconds": "detik", + "mins": "menit", + "Back": "Kembali", + "Close": "Tutup", + "Cancel": "Batal", + "Confirm": "Konfirmasi", + "Maximize": "Maksimalkan", + "Minimize": "Minimalkan", + "Format document": "Format dokumen", + "Empty": "Kosong", + "New": "Baru", + "Edit": "Ubah", + "Save": "Simpan", + "Delete": "Hapus", + "Enable": "Aktifkan", + "Disable": "Nonaktifkan", + "Label-Proxies": "Proksi", + "Label-Profiles": "Profil", + "Label-Connections": "Koneksi", + "Label-Rules": "Aturan", + "Label-Logs": "Log", + "Label-Test": "Tes", + "Label-Settings": "Pengaturan", + "Dashboard": "Dasbor", + "Profile": "Profil", + "Help": "Bantuan", + "About": "Tentang", + "Theme": "Tema", + "Main Window": "Jendela Utama", + "Group Icon": "Ikon Grup", + "Menu Icon": "Ikon Menu", + "PAC File": "Berkas PAC", + "Web UI": "Antarmuka Web", + "Hotkeys": "Pintasan", + "Verge Mixed Port": "Port Campuran Verge", + "Verge Socks Port": "Port Socks Verge", + "Verge Redir Port": "Port Pengalihan Verge", + "Verge Tproxy Port": "Port Tproxy Verge", + "Verge Port": "Port Verge", + "Verge HTTP Enabled": "HTTP Verge Diaktifkan", + "WebDAV URL": "URL WebDAV", + "WebDAV Username": "Nama Pengguna WebDAV", + "WebDAV Password": "Kata Sandi WebDAV", + "Restart App": "Mulai Ulang Aplikasi", + "Restart Clash Core": "Mulai Ulang Core Clash", + "TUN Mode": "Mode TUN", + "Copy Env": "Salin Env", + "Conf Dir": "Direktori Konfigurasi", + "Core Dir": "Direktori Core", + "Logs Dir": "Direktori Log", + "Open Dir": "Buka Direktori", + "More": "Lainnya", + "Rule Mode": "Mode Aturan", + "Global Mode": "Mode Global", + "Direct Mode": "Mode Langsung", + "Proxies": "Proksi", + "Proxy Groups": "Grup Proksi", + "Proxy Provider": "Penyedia Proksi", + "Update All": "Perbarui Semua", + "Update At": "Diperbarui Pada", + "rule": "aturan", + "global": "global", + "direct": "langsung", + "script": "skrip", + "Location": "Lokasi", + "Delay check": "Periksa Keterlambatan", + "Sort by default": "Urutkan secara default", + "Sort by delay": "Urutkan berdasarkan keterlambatan", + "Sort by name": "Urutkan berdasarkan nama", + "Delay check URL": "URL Periksa Keterlambatan", + "Delay check to cancel fixed": "Periksa keterlambatan untuk membatalkan tetap", + "Proxy basic": "Dasar Proksi", + "Proxy detail": "Detail Proksi", + "Profiles": "Profil", + "Update All Profiles": "Perbarui Semua Profil", + "View Runtime Config": "Lihat Konfigurasi Runtime", + "Reactivate Profiles": "Reaktivasi Profil", + "Paste": "Tempel", + "Profile URL": "URL Profil", + "Import": "Impor", + "From": "Dari", + "Update Time": "Waktu Pembaruan", + "Used / Total": "Digunakan / Total", + "Expire Time": "Waktu Kedaluwarsa", + "Create Profile": "Buat Profil", + "Edit Profile": "Ubah Profil", + "Edit Proxies": "Ubah Proksi", + "Use newlines for multiple uri": "Gunakan baris baru untuk beberapa URI (mendukung pengkodean Base64)", + "Edit Rules": "Ubah Aturan", + "Rule Type": "Jenis Aturan", + "Rule Content": "Konten Aturan", + "Proxy Policy": "Kebijakan Proksi", + "No Resolve": "Tidak Menyelesaikan", + "Prepend Rule": "Tambahkan Aturan di Awal", + "Append Rule": "Tambahkan Aturan di Akhir", + "Prepend Group": "Tambahkan Grup di Awal", + "Append Group": "Tambahkan Grup di Akhir", + "Prepend Proxy": "Tambahkan Proksi di Awal", + "Append Proxy": "Tambahkan Proksi di Akhir", + "Rule Condition Required": "Kondisi Aturan Diperlukan", + "Invalid Rule": "Aturan Tidak Valid", + "Advanced": "Lanjutan", + "Visualization": "Visualisasi", + "DOMAIN": "Cocok dengan nama domain lengkap", + "DOMAIN-SUFFIX": "Cocok dengan sufiks domain", + "DOMAIN-KEYWORD": "Cocok dengan kata kunci domain", + "DOMAIN-REGEX": "Cocok dengan domain menggunakan ekspresi reguler", + "GEOSITE": "Cocok dengan domain dalam Geosite", + "GEOIP": "Cocok dengan kode negara alamat IP", + "SRC-GEOIP": "Cocok dengan kode negara alamat IP sumber", + "IP-ASN": "Cocok dengan ASN alamat IP", + "SRC-IP-ASN": "Cocok dengan ASN alamat IP sumber", + "IP-CIDR": "Cocok dengan rentang alamat IP", + "IP-CIDR6": "Cocok dengan rentang alamat IPv6", + "SRC-IP-CIDR": "Cocok dengan rentang alamat IP sumber", + "IP-SUFFIX": "Cocok dengan rentang sufiks alamat IP", + "SRC-IP-SUFFIX": "Cocok dengan rentang sufiks alamat IP sumber", + "SRC-PORT": "Cocok dengan rentang port sumber", + "DST-PORT": "Cocok dengan rentang port tujuan", + "IN-PORT": "Cocok dengan port masuk", + "DSCP": "Penandaan DSCP (hanya untuk tproxy UDP masuk)", + "PROCESS-NAME": "Cocok dengan nama proses (nama paket Android)", + "PROCESS-PATH": "Cocok dengan jalur proses lengkap", + "PROCESS-NAME-REGEX": "Cocok dengan nama proses lengkap menggunakan ekspresi reguler (nama paket Android)", + "PROCESS-PATH-REGEX": "Cocok dengan jalur proses lengkap menggunakan ekspresi reguler", + "NETWORK": "Cocok dengan protokol transportasi (tcp/udp)", + "UID": "Cocok dengan ID PENGGUNA Linux", + "IN-TYPE": "Cocok dengan jenis masuk", + "IN-USER": "Cocok dengan nama pengguna masuk", + "IN-NAME": "Cocok dengan nama masuk", + "SUB-RULE": "Sub-aturan", + "RULE-SET": "Cocok dengan set aturan", + "AND": "Logika DAN", + "OR": "Logika ATAU", + "NOT": "Logika TIDAK", + "MATCH": "Cocok dengan semua permintaan", + "DIRECT": "Data langsung keluar", + "REJECT": "Mencegat permintaan", + "REJECT-DROP": "Membuang permintaan", + "PASS": "Lewati aturan ini saat cocok", + "Edit Groups": "Ubah Grup Proksi", + "Group Type": "Jenis Grup", + "select": "Pilih proksi secara manual", + "url-test": "Pilih proksi berdasarkan keterlambatan tes URL", + "fallback": "Beralih ke proksi lain saat terjadi kesalahan", + "load-balance": "Distribusikan proksi berdasarkan penyeimbangan beban", + "relay": "Lewatkan melalui rantai proksi yang ditentukan", + "Group Name": "Nama Grup", + "Use Proxies": "Gunakan Proksi", + "Use Provider": "Gunakan Penyedia", + "Health Check Url": "URL Pemeriksaan Kesehatan", + "Expected Status": "Status yang Diharapkan", + "Interval": "Interval", + "Lazy": "Malas", + "Timeout": "Waktu Habis", + "Max Failed Times": "Jumlah Gagal Maksimal", + "Interface Name": "Nama Antarmuka", + "Routing Mark": "Tanda Routing", + "Include All": "Sertakan Semua Proksi dan Penyedia", + "Include All Providers": "Sertakan Semua Penyedia", + "Include All Proxies": "Sertakan Semua Proksi", + "Exclude Filter": "Kecualikan Filter", + "Exclude Type": "Kecualikan Jenis", + "Disable UDP": "Nonaktifkan UDP", + "Hidden": "Tersembunyi", + "Group Name Required": "Nama Grup Diperlukan", + "Group Name Already Exists": "Nama Grup Sudah Ada", + "Extend Config": "Perluas Konfigurasi", + "Extend Script": "Perluas Skrip", + "Global Merge": "Perluas Konfigurasi Global", + "Global Script": "Perluas Skrip Global", + "Type": "Jenis", + "Name": "Nama", + "Descriptions": "Deskripsi", + "Subscription URL": "URL Langganan", + "Update Interval": "Interval Pembaruan", + "Choose File": "Pilih Berkas", + "Use System Proxy": "Gunakan Proksi Sistem", + "Use Clash Proxy": "Gunakan Proksi Clash", + "Accept Invalid Certs (Danger)": "Terima Sertifikat Tidak Valid (Bahaya)", + "Refresh": "Segarkan", + "Home": "Beranda", + "Select": "Pilih", + "Edit Info": "Ubah Info", + "Edit File": "Ubah Berkas", + "Open File": "Buka Berkas", + "Update": "Perbarui", + "Update(Proxy)": "Perbarui (Proksi)", + "Confirm deletion": "Konfirmasi penghapusan", + "This operation is not reversible": "Operasi ini tidak dapat dibatalkan", + "Script Console": "Konsol Skrip", + "To Top": "Ke Atas", + "To End": "Ke Bawah", + "Connections": "Koneksi", + "Table View": "Tampilan Tabel", + "List View": "Tampilan Daftar", + "Close All": "Tutup Semua", + "Default": "Default", + "Download Speed": "Kecepatan Unduh", + "Upload Speed": "Kecepatan Unggah", + "Host": "Host", + "Downloaded": "Diunduh", + "Uploaded": "Diunggah", + "DL Speed": "Kecepatan Unduh", + "UL Speed": "Kecepatan Unggah", + "Chains": "Rantai", + "Rule": "Aturan", + "Process": "Proses", + "Time": "Waktu", + "Source": "Sumber", + "Destination IP": "IP Tujuan", + "Close Connection": "Tutup Koneksi", + "Rules": "Aturan", + "Rule Provider": "Penyedia Aturan", + "Logs": "Log", + "Pause": "Jeda", + "Clear": "Bersihkan", + "Test": "Tes", + "Test All": "Tes Semua", + "Create Test": "Buat Tes", + "Edit Test": "Ubah Tes", + "Icon": "Ikon", + "Test URL": "URL Tes", + "Settings": "Pengaturan", + "System Setting": "Pengaturan Sistem", + "Tun Mode": "Mode Tun (NIC Virtual)", + "Reset to Default": "Setel Ulang ke Default", + "Tun Mode Info": "Mode Tun (NIC Virtual): Menangkap semua lalu lintas sistem, saat diaktifkan, tidak perlu mengaktifkan proksi sistem.", + "Stack": "Tumpukan Tun", + "System and Mixed Can Only be Used in Service Mode": "Sistem dan Campuran Hanya Dapat Digunakan dalam Mode Layanan", + "Device": "Nama Perangkat", + "Auto Route": "Rute Otomatis", + "Strict Route": "Rute Ketat", + "Auto Detect Interface": "Deteksi Antarmuka Otomatis", + "DNS Hijack": "Pembajakan DNS", + "MTU": "Unit Transmisi Maksimum", + "Service Mode": "Mode Layanan", + "Service Mode Info": "Harap instal mode layanan sebelum mengaktifkan mode TUN. Proses kernel yang dimulai oleh layanan dapat memperoleh izin untuk menginstal kartu jaringan virtual (mode TUN)", + "Current State": "Status Saat Ini", + "pending": "tertunda", + "installed": "terinstal", + "uninstall": "dicopot", + "active": "aktif", + "unknown": "tidak diketahui", + "Information: Please make sure that the Clash Verge Service is installed and enabled": "Informasi: Harap pastikan bahwa Layanan Clash Verge terinstal dan diaktifkan", + "Install": "Instal", + "Uninstall": "Copot", + "Disable Service Mode": "Nonaktifkan Mode Layanan", + "System Proxy": "Proksi Sistem", + "System Proxy Info": "Aktifkan untuk mengubah pengaturan proksi sistem operasi. Jika pengaktifan gagal, ubah pengaturan proksi sistem operasi secara manual", + "System Proxy Setting": "Pengaturan Proksi Sistem", + "Current System Proxy": "Proksi Sistem Saat Ini", + "Enable status": "Status Pengaktifan:", + "Enabled": "Diaktifkan", + "Disabled": "Dinonaktifkan", + "Server Addr": "Alamat Server: ", + "Not available": "Tidak tersedia", + "Proxy Guard": "Penjaga Proksi", + "Proxy Guard Info": "Aktifkan untuk mencegah perangkat lunak lain mengubah pengaturan proksi sistem operasi", + "Guard Duration": "Durasi Penjagaan", + "Always use Default Bypass": "Selalu gunakan Bypass Default", + "Proxy Bypass": "Pengaturan Bypass Proksi: ", + "Bypass": "Bypass: ", + "Use PAC Mode": "Gunakan Mode PAC", + "PAC Script Content": "Konten Skrip PAC", + "PAC URL": "URL PAC: ", + "Auto Launch": "Peluncuran Otomatis", + "Silent Start": "Mulai Senyap", + "Silent Start Info": "Mulai program dalam mode latar belakang tanpa menampilkan panel", + "TG Channel": "Saluran Telegram", + "Manual": "Manual", + "Github Repo": "Repositori Github", + "Clash Setting": "Pengaturan Clash", + "Allow Lan": "Izinkan LAN", + "Network Interface": "Antarmuka Jaringan", + "Ip Address": "Alamat IP", + "Mac Address": "Alamat MAC", + "IPv6": "IPv6", + "Unified Delay": "Keterlambatan Terpadu", + "Unified Delay Info": "Saat keterlambatan terpadu diaktifkan, dua tes keterlambatan akan dilakukan untuk menghilangkan perbedaan keterlambatan antara berbagai jenis node yang disebabkan oleh jabat tangan koneksi, dll.", + "Log Level": "Tingkat Log", + "Log Level Info": "Ini hanya berlaku untuk file log kernel di folder layanan di direktori log.", + "Port Config": "Konfigurasi Port", + "Random Port": "Port Acak", + "Mixed Port": "Port Campuran", + "Socks Port": "Port Socks", + "Http Port": "Port Http(s)", + "Redir Port": "Port Redir", + "Tproxy Port": "Port Tproxy", + "External": "Eksternal", + "External Controller": "Alamat Pengendali Eksternal", + "Core Secret": "Rahasia Inti", + "Recommended": "Direkomendasikan", + "Open URL": "Buka URL", + "Replace host, port, secret with %host, %port, %secret": "Ganti host, port, rahasia dengan %host, %port, %secret", + "Support %host, %port, %secret": "Dukung %host, %port, %secret", + "Clash Core": "Inti Clash", + "Upgrade": "Tingkatkan", + "Restart": "Mulai Ulang", + "Release Version": "Versi Rilis", + "Alpha Version": "Versi Alpha", + "Please Enable Service Mode": "Harap Instal dan Aktifkan Mode Layanan Terlebih Dahulu", + "Please enter your root password": "Harap masukkan kata sandi root Anda", + "Grant": "Izinkan", + "Open UWP tool": "Buka alat UWP", + "Open UWP tool Info": "Sejak Windows 8, aplikasi UWP (seperti Microsoft Store) dibatasi dari mengakses layanan jaringan host lokal secara langsung, dan alat ini dapat digunakan untuk melewati pembatasan ini", + "Update GeoData": "Perbarui GeoData", + "Verge Setting": "Pengaturan Verge", + "Language": "Bahasa", + "Theme Mode": "Mode Tema", + "theme.light": "Terang", + "theme.dark": "Gelap", + "theme.system": "Sistem", + "Tray Click Event": "Acara Klik Tray", + "Show Main Window": "Tampilkan Jendela Utama", + "Copy Env Type": "Salin Jenis Env", + "Copy Success": "Salin Berhasil", + "Start Page": "Halaman Mulai", + "Startup Script": "Skrip Startup", + "Browse": "Jelajahi", + "Theme Setting": "Pengaturan Tema", + "Primary Color": "Warna Utama", + "Secondary Color": "Warna Sekunder", + "Primary Text": "Teks Utama", + "Secondary Text": "Teks Sekunder", + "Info Color": "Warna Info", + "Warning Color": "Warna Peringatan", + "Error Color": "Warna Kesalahan", + "Success Color": "Warna Keberhasilan", + "Font Family": "Keluarga Font", + "CSS Injection": "Injeksi CSS", + "Layout Setting": "Pengaturan Tata Letak", + "Traffic Graph": "Grafik Lalu Lintas", + "Memory Usage": "Penggunaan Memori", + "Memory Cleanup": "Ketuk untuk membersihkan memori", + "Proxy Group Icon": "Ikon Grup Proksi", + "Nav Icon": "Ikon Navigasi", + "Monochrome": "Monokrom", + "Colorful": "Berwarna", + "Tray Icon": "Ikon Tray", + "Common Tray Icon": "Ikon Tray Umum", + "System Proxy Tray Icon": "Ikon Tray Proksi Sistem", + "Tun Tray Icon": "Ikon Tray Tun", + "Miscellaneous": "Lain-lain", + "App Log Level": "Tingkat Log Aplikasi", + "Auto Close Connections": "Tutup Koneksi Otomatis", + "Auto Close Connections Info": "Hentikan koneksi yang sudah ada saat pemilihan grup proksi atau mode proksi berubah", + "Auto Check Update": "Periksa Pembaruan Otomatis", + "Enable Builtin Enhanced": "Aktifkan Peningkatan Bawaan", + "Enable Builtin Enhanced Info": "Penanganan kompatibilitas untuk file konfigurasi", + "Proxy Layout Columns": "Kolom Tata Letak Proksi", + "Auto Columns": "Kolom Otomatis", + "Auto Log Clean": "Pembersihan Log Otomatis", + "Never Clean": "Jangan Pernah Bersihkan", + "Retain _n Days": "Simpan {{n}} Hari", + "Default Latency Test": "Tes Latensi Default", + "Default Latency Test Info": "Digunakan hanya untuk pengujian permintaan klien HTTP dan tidak akan mempengaruhi file konfigurasi", + "Default Latency Timeout": "Waktu Habis Latensi Default", + "Hotkey Setting": "Pengaturan Pintasan", + "open_or_close_dashboard": "Buka/Tutup Dasbor", + "clash_mode_rule": "Mode Aturan", + "clash_mode_global": "Mode Global", + "clash_mode_direct": "Mode Langsung", + "toggle_system_proxy": "Aktifkan/Nonaktifkan Proksi Sistem", + "toggle_tun_mode": "Aktifkan/Nonaktifkan Mode Tun", + "Backup Setting": "Pengaturan Cadangan", + "Backup Setting Info": "Mendukung file konfigurasi cadangan WebDAV", + "Runtime Config": "Konfigurasi Runtime", + "Open Conf Dir": "Buka Direktori Konfigurasi", + "Open Conf Dir Info": "Jika perangkat lunak berjalan tidak normal, CADANGKAN dan hapus semua file di folder ini lalu mulai ulang perangkat lunak", + "Open Core Dir": "Buka Direktori Core", + "Open Logs Dir": "Buka Direktori Log", + "Check for Updates": "Periksa Pembaruan", + "Go to Release Page": "Pergi ke Halaman Rilis", + "Portable Updater Error": "Versi portabel tidak mendukung pembaruan dalam aplikasi. Harap unduh dan ganti secara manual", + "Break Change Update Error": "Versi ini adalah pembaruan besar dan tidak mendukung pembaruan dalam aplikasi. Harap hapus instalasi dan unduh serta instal versi baru secara manual", + "Open Dev Tools": "Buka Alat Pengembang", + "Exit": "Keluar", + "Verge Version": "Versi Verge", + "ReadOnly": "Hanya Baca", + "ReadOnlyMessage": "Tidak dapat mengedit di editor hanya baca", + "Filter": "Filter", + "Filter conditions": "Kondisi Filter", + "Match Case": "Cocokkan Kasus", + "Match Whole Word": "Cocokkan Kata Utuh", + "Use Regular Expression": "Gunakan Ekspresi Reguler", + "Profile Imported Successfully": "Profil Berhasil Diimpor", + "Profile Switched": "Profil Beralih", + "Profile Reactivated": "Profil Diaktifkan Kembali", + "Only YAML Files Supported": "Hanya File YAML yang Didukung", + "Settings Applied": "Pengaturan Diterapkan", + "Service Installed Successfully": "Layanan Berhasil Diinstal", + "Service Uninstalled Successfully": "Layanan Berhasil Dicopot", + "Proxy Daemon Duration Cannot be Less than 1 Second": "Durasi Daemon Proksi Tidak Boleh Kurang dari 1 Detik", + "Invalid Bypass Format": "Format Bypass Tidak Valid", + "Clash Port Modified": "Port Clash Diubah", + "Port Conflict": "Konflik Port", + "Restart Application to Apply Modifications": "Mulai Ulang Aplikasi untuk Menerapkan Modifikasi", + "External Controller Address Modified": "Alamat Pengendali Eksternal Diubah", + "Permissions Granted Successfully for _clash Core": "Izin Berhasil Diberikan untuk Core {{core}}", + "Core Version Updated": "Versi Core Diperbarui", + "Clash Core Restarted": "Core Clash Dimulai Ulang", + "Switched to _clash Core": "Beralih ke Core {{core}}", + "GeoData Updated": "GeoData Diperbarui", + "Currently on the Latest Version": "Saat ini pada Versi Terbaru", + "Import Subscription Successful": "Berlangganan Berhasil Diimpor", + "WebDAV Server URL": "URL Server WebDAV", + "Username": "Nama Pengguna", + "Password": "Kata Sandi", + "Backup": "Cadangan", + "Filename": "Nama Berkas", + "Actions": "Tindakan", + "Restore": "Pulihkan", + "No Backups": "Tidak ada cadangan yang tersedia", + "WebDAV URL Required": "URL WebDAV tidak boleh kosong", + "Invalid WebDAV URL": "Format URL WebDAV tidak valid", + "Username Required": "Nama pengguna tidak boleh kosong", + "Password Required": "Kata sandi tidak boleh kosong", + "Failed to Fetch Backups": "Gagal mengambil file cadangan", + "WebDAV Config Saved": "Konfigurasi WebDAV berhasil disimpan", + "WebDAV Config Save Failed": "Gagal menyimpan konfigurasi WebDAV: {{error}}", + "Backup Created": "Cadangan berhasil dibuat", + "Backup Failed": "Cadangan gagal: {{error}}", + "Delete Backup": "Hapus Cadangan", + "Restore Backup": "Pulihkan Cadangan", + "Backup Time": "Waktu Cadangan", + "Confirm to delete this backup file?": "Konfirmasi untuk menghapus file cadangan ini?", + "Confirm to restore this backup file?": "Konfirmasi untuk memulihkan file cadangan ini?", + "Restore Success, App will restart in 1s": "Pemulihan Berhasil, Aplikasi akan dimulai ulang dalam 1 detik", + "Failed to fetch backup files": "Gagal mengambil file cadangan" +} diff --git a/src/locales/ru.json b/src/locales/ru.json index 2e13e879..6ba19eb5 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -398,5 +398,37 @@ "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": "Не удалось получить файлы резервных копий" + "Failed to fetch backup files": "Не удалось получить файлы резервных копий", + "Profile": "Профиль", + "Help": "Помощь", + "About": "О программе", + "Theme": "Тема", + "Main Window": "Главное окно", + "Group Icon": "Иконка группы", + "Menu 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": "HTTP Verge включен", + "WebDAV URL": "URL WebDAV", + "WebDAV Username": "Имя пользователя WebDAV", + "WebDAV Password": "Пароль WebDAV", + "Dashboard": "Панель управления", + "Restart App": "Перезапустить приложение", + "Restart Clash Core": "Перезапустить ядро Clash", + "TUN Mode": "Режим TUN", + "Copy Env": "Копировать переменные окружения", + "Conf Dir": "Директория конфигурации", + "Core Dir": "Директория ядра", + "Logs Dir": "Директория логов", + "Open Dir": "Открыть директорию", + "More": "Ещё", + "Rule Mode": "Режим правил", + "Global Mode": "Глобальный режим", + "Direct Mode": "Прямой режим" } diff --git a/src/locales/tt.json b/src/locales/tt.json new file mode 100644 index 00000000..2d5c6dc0 --- /dev/null +++ b/src/locales/tt.json @@ -0,0 +1,433 @@ +{ + "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": "Төп тәрәзә", + "Group Icon": "Төркем иконкасы", + "Menu 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": "Панель", + "Restart App": "Кушымтаны яңадан ачу", + "Restart Clash Core": "Clash ядрони яңадан башлап ачу", + "TUN Mode": "TUN режимы", + "Copy Env": "Env күчереп алу", + "Conf Dir": "Кушымта папкасы", + "Core Dir": "Ядро папкасы", + "Logs Dir": "Логлар папкасы", + "Open Dir": "Папканы ачу", + "More": "Башҡа", + "Rule Mode": "Кагыйдә режимы", + "Global Mode": "Глобаль режим", + "Direct Mode": "Туры режим" +} diff --git a/src/locales/zh.json b/src/locales/zh.json index 00886675..cd0c500f 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -398,5 +398,37 @@ "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": "获取备份文件失败" + "Failed to fetch backup files": "获取备份文件失败", + "Profile": "配置", + "Help": "帮助", + "About": "关于", + "Theme": "主题", + "Main Window": "主窗口", + "Group Icon": "分组图标", + "Menu Icon": "菜单图标", + "PAC File": "PAC文件", + "Web UI": "网页界面", + "Hotkeys": "快捷键", + "Verge Mixed Port": "Verge混合端口", + "Verge Socks Port": "Verge Socks端口", + "Verge Redir Port": "Verge重定向端口", + "Verge Tproxy Port": "Verge透明代理端口", + "Verge Port": "Verge端口", + "Verge HTTP Enabled": "Verge HTTP已启用", + "WebDAV URL": "WebDAV地址", + "WebDAV Username": "WebDAV用户名", + "WebDAV Password": "WebDAV密码", + "Dashboard": "仪表板", + "Restart App": "重启应用", + "Restart Clash Core": "重启Clash核心", + "TUN Mode": "TUN模式", + "Copy Env": "复制环境变量", + "Conf Dir": "配置目录", + "Core Dir": "核心目录", + "Logs Dir": "日志目录", + "Open Dir": "打开目录", + "More": "更多", + "Rule Mode": "规则模式", + "Global Mode": "全局模式", + "Direct Mode": "直连模式" } diff --git a/src/services/i18n.ts b/src/services/i18n.ts index a051d738..2be67191 100644 --- a/src/services/i18n.ts +++ b/src/services/i18n.ts @@ -4,13 +4,18 @@ 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"; +import id from "@/locales/id.json"; +import ar from "@/locales/ar.json"; -const resources = { - en: { translation: en }, - ru: { translation: ru }, - zh: { translation: zh }, - fa: { translation: fa }, -}; +export const languages = { en, ru, zh, fa, tt, id, ar }; + +const resources = Object.fromEntries( + Object.entries(languages).map(([key, value]) => [ + key, + { translation: value }, + ]), +); i18n.use(initReactI18next).init({ resources,