diff --git a/crowdin.yml b/crowdin.yml index 6063f529..9182f251 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,4 +1,9 @@ files: - - source: /src/locales/en.json - translation: /src/locales - multilingual: 1 + - source: /src/locales/en/*.json + translation: /src/locales/%locale_with_underscore%/%original_file_name% + preserve_hierarchy: true + languages_mapping: + locale_with_underscore: + zh-CN: zh + zh-TW: zhtw + ja: jp diff --git a/scripts/cleanup-unused-i18n.mjs b/scripts/cleanup-unused-i18n.mjs index 338d11b5..1a4dc134 100644 --- a/scripts/cleanup-unused-i18n.mjs +++ b/scripts/cleanup-unused-i18n.mjs @@ -873,18 +873,79 @@ function loadLocales() { throw new Error(`Locales directory not found: ${LOCALES_DIR}`); } - return fs - .readdirSync(LOCALES_DIR) - .filter( - (file) => - /^[a-z0-9\-_]+\.json$/i.test(file) && - !file.endsWith(".bak") && - !file.endsWith(".old"), - ) - .map((file) => ({ - name: path.basename(file, ".json"), - path: path.join(LOCALES_DIR, file), - })); + const entries = fs.readdirSync(LOCALES_DIR, { withFileTypes: true }); + const locales = []; + + for (const entry of entries) { + if (entry.isFile()) { + if ( + /^[a-z0-9\-_]+\.json$/i.test(entry.name) && + !entry.name.endsWith(".bak") && + !entry.name.endsWith(".old") + ) { + const localePath = path.join(LOCALES_DIR, entry.name); + const name = path.basename(entry.name, ".json"); + const raw = fs.readFileSync(localePath, "utf8"); + locales.push({ + name, + dir: LOCALES_DIR, + format: "single-file", + files: [ + { + namespace: "translation", + path: localePath, + }, + ], + data: JSON.parse(raw), + }); + } + continue; + } + + if (!entry.isDirectory()) continue; + if (entry.name.startsWith(".")) continue; + + const localeDir = path.join(LOCALES_DIR, entry.name); + const namespaceEntries = fs + .readdirSync(localeDir, { withFileTypes: true }) + .filter( + (item) => + item.isFile() && + item.name.endsWith(".json") && + !item.name.endsWith(".bak") && + !item.name.endsWith(".old"), + ) + .map((item) => ({ + namespace: path.basename(item.name, ".json"), + path: path.join(localeDir, item.name), + })); + + namespaceEntries.sort((a, b) => a.path.localeCompare(b.path)); + + const data = {}; + for (const file of namespaceEntries) { + const raw = fs.readFileSync(file.path, "utf8"); + try { + data[file.namespace] = JSON.parse(raw); + } catch (error) { + console.warn( + `Warning: failed to parse ${file.path}: ${error.message}`, + ); + data[file.namespace] = {}; + } + } + + locales.push({ + name: entry.name, + dir: localeDir, + format: "multi-file", + files: namespaceEntries, + data, + }); + } + + locales.sort((a, b) => a.name.localeCompare(b.name)); + return locales; } function ensureBackup(localePath) { @@ -899,6 +960,111 @@ function ensureBackup(localePath) { return backupPath; } +function backupIfNeeded(filePath, backups, options) { + if (!options.backup) return; + if (!fs.existsSync(filePath)) return; + if (backups.has(filePath)) return; + const backupPath = ensureBackup(filePath); + backups.add(filePath); + return backupPath; +} + +function toModuleIdentifier(namespace, seen) { + const RESERVED = new Set([ + "default", + "function", + "var", + "let", + "const", + "import", + "export", + "class", + "enum", + ]); + + const base = + namespace + .replace(/[^a-zA-Z0-9_$]/g, "_") + .replace(/^[^a-zA-Z_$]+/, "") || "ns"; + + let candidate = base; + let counter = 1; + while (RESERVED.has(candidate) || seen.has(candidate)) { + candidate = `${base}_${counter}`; + counter += 1; + } + seen.add(candidate); + return candidate; +} + +function regenerateLocaleIndex(localeDir, namespaces) { + const seen = new Set(); + const imports = []; + const mappings = []; + + for (const namespace of namespaces) { + const filePath = path.join(localeDir, `${namespace}.json`); + if (!fs.existsSync(filePath)) continue; + const identifier = toModuleIdentifier(namespace, seen); + imports.push(`import ${identifier} from "./${namespace}.json";`); + mappings.push(` "${namespace}": ${identifier},`); + } + + const content = `${imports.join("\n")} + +const resources = { +${mappings.join("\n")} +}; + +export default resources; +`; + + fs.writeFileSync(path.join(localeDir, "index.ts"), content, "utf8"); +} + +function writeLocale(locale, data, options) { + const backups = new Set(); + + if (locale.format === "single-file") { + const target = locale.files[0].path; + backupIfNeeded(target, backups, options); + const serialized = JSON.stringify(data, null, 2); + fs.writeFileSync(target, `${serialized}\n`, "utf8"); + return; + } + + const entries = Object.entries(data); + const orderedNamespaces = entries.map(([namespace]) => namespace); + const existingFiles = new Map( + locale.files.map((file) => [file.namespace, file.path]), + ); + const visited = new Set(); + + for (const [namespace, value] of entries) { + const target = + existingFiles.get(namespace) ?? + path.join(locale.dir, `${namespace}.json`); + backupIfNeeded(target, backups, options); + const serialized = JSON.stringify(value ?? {}, null, 2); + fs.mkdirSync(path.dirname(target), { recursive: true }); + fs.writeFileSync(target, `${serialized}\n`, "utf8"); + visited.add(namespace); + } + + for (const [namespace, filePath] of existingFiles.entries()) { + if (!visited.has(namespace) && fs.existsSync(filePath)) { + backupIfNeeded(filePath, backups, options); + fs.rmSync(filePath); + } + } + + regenerateLocaleIndex(locale.dir, orderedNamespaces); + locale.files = orderedNamespaces.map((namespace) => ({ + namespace, + path: path.join(locale.dir, `${namespace}.json`), + })); +} + function processLocale( locale, baselineData, @@ -908,8 +1074,7 @@ function processLocale( missingFromSource, options, ) { - const raw = fs.readFileSync(locale.path, "utf8"); - const data = JSON.parse(raw); + const data = JSON.parse(JSON.stringify(locale.data)); const flattened = flattenLocale(data); const expectedTotal = baselineEntries.size; @@ -966,17 +1131,10 @@ function processLocale( } cleanupEmptyBranches(updated); - if (options.backup) { - const backupPath = ensureBackup(locale.path); - console.log( - `[${locale.name}] Backup written to ${path.basename(backupPath)}`, - ); - } - - const serialized = JSON.stringify(updated, null, 2); - fs.writeFileSync(locale.path, `${serialized}\n`, "utf8"); + writeLocale(locale, updated, options); + locale.data = JSON.parse(JSON.stringify(updated)); console.log( - `[${locale.name}] Updated locale file saved (${removed.length} unused removed${ + `[${locale.name}] Locale resources updated (${removed.length} unused removed${ aligned ? ", structure aligned" : "" })`, ); @@ -984,7 +1142,10 @@ function processLocale( return { locale: locale.name, - file: locale.path, + file: + locale.format === "single-file" + ? locale.files[0].path + : locale.dir, totalKeys: flattened.size, expectedKeys: expectedTotal, unusedKeys: unused, @@ -1037,7 +1198,7 @@ function main() { ); } - const baselineData = JSON.parse(fs.readFileSync(baselineLocale.path, "utf8")); + const baselineData = JSON.parse(JSON.stringify(baselineLocale.data)); const baselineEntries = flattenLocale(baselineData); const baselineNamespaces = new Set(Object.keys(baselineData)); const usage = collectUsedI18nKeys(sourceFiles, baselineNamespaces); diff --git a/scripts/prebuild.mjs b/scripts/prebuild.mjs index d127a0ca..3b660121 100644 --- a/scripts/prebuild.mjs +++ b/scripts/prebuild.mjs @@ -580,15 +580,25 @@ async function resolveLocales() { try { await fsp.mkdir(targetLocalesDir, { recursive: true }); - const files = await fsp.readdir(srcLocalesDir); - for (const file of files) { - const srcPath = path.join(srcLocalesDir, file); - const targetPath = path.join(targetLocalesDir, file); - if (!(await hasFileChanged(srcPath, targetPath))) continue; - await fsp.copyFile(srcPath, targetPath); - await updateHashCache(targetPath); - log_success(`Copied locale file: ${file}`); - } + const copyLocaleTree = async (sourceDir, destDir) => { + const entries = await fsp.readdir(sourceDir, { withFileTypes: true }); + for (const entry of entries) { + const srcPath = path.join(sourceDir, entry.name); + const targetPath = path.join(destDir, entry.name); + if (entry.isDirectory()) { + await fsp.mkdir(targetPath, { recursive: true }); + await copyLocaleTree(srcPath, targetPath); + } else if (entry.isFile()) { + if (!(await hasFileChanged(srcPath, targetPath))) continue; + await fsp.mkdir(path.dirname(targetPath), { recursive: true }); + await fsp.copyFile(srcPath, targetPath); + await updateHashCache(targetPath); + const relativePath = path.relative(srcLocalesDir, srcPath); + log_success(`Copied locale file: ${relativePath}`); + } + } + }; + await copyLocaleTree(srcLocalesDir, targetLocalesDir); log_success("All locale files processed successfully"); } catch (err) { log_error("Error copying locale files:", err.message); diff --git a/scripts/split-locales.mjs b/scripts/split-locales.mjs new file mode 100644 index 00000000..d1c46f3e --- /dev/null +++ b/scripts/split-locales.mjs @@ -0,0 +1,128 @@ +#!/usr/bin/env node + +/** + * One-time helper to split flat locale JSON files (e.g. en.json) + * into per-namespace files (e.g. en/shared.json, en/settings.json). + */ + +import fs from "fs/promises"; +import path from "path"; +import process from "process"; + +const ROOT = process.cwd(); +const LOCALES_DIR = path.join(ROOT, "src/locales"); + +async function ensureDir(dirPath) { + await fs.mkdir(dirPath, { recursive: true }); +} + +const RESERVED = new Set(["default", "function", "var", "let", "const", "import"]); + +function toIdentifier(namespace, taken) { + let base = namespace + .replace(/[^a-zA-Z0-9_$]/g, "_") + .replace(/^[^a-zA-Z_$]+/, ""); + if (!base) { + base = "ns"; + } + let candidate = base; + let counter = 1; + while (RESERVED.has(candidate) || taken.has(candidate)) { + candidate = `${base}_${counter}`; + counter += 1; + } + taken.add(candidate); + return candidate; +} + +async function splitLocaleFile(filePath, lang) { + const raw = await fs.readFile(filePath, "utf-8"); + let data; + try { + data = JSON.parse(raw); + } catch (err) { + throw new Error(`Failed to parse ${filePath}: ${err.message}`); + } + + if (typeof data !== "object" || data === null || Array.isArray(data)) { + throw new Error(`Locale file ${filePath} must contain a JSON object`); + } + + const langDir = path.join(LOCALES_DIR, lang); + await ensureDir(langDir); + + const namespaces = Object.entries(data); + if (namespaces.length === 0) { + console.warn(`Locale ${lang} has no keys, skipping.`); + return; + } + + const identifiers = new Map(); + const taken = new Set(); + + for (const [namespace, value] of namespaces) { + if ( + typeof value !== "object" || + value === null || + Array.isArray(value) + ) { + throw new Error( + `Locale ${lang} namespace "${namespace}" must be an object`, + ); + } + + const targetPath = path.join(langDir, `${namespace}.json`); + const payload = `${JSON.stringify(value, null, 2)}\n`; + await fs.writeFile(targetPath, payload, "utf-8"); + + identifiers.set(namespace, toIdentifier(namespace, taken)); + } + + const importLines = namespaces + .map(([namespace]) => { + const ident = identifiers.get(namespace); + return `import ${ident} from "./${namespace}.json";`; + }) + .join("\n"); + const exportBody = namespaces + .map(([namespace]) => { + const ident = identifiers.get(namespace); + return ` "${namespace}": ${ident},`; + }) + .join("\n"); + const indexContent = `${importLines} + +const resources = { +${exportBody} +}; + +export default resources; +`; + await fs.writeFile(path.join(langDir, "index.ts"), indexContent, "utf-8"); + + await fs.rm(filePath); + console.log(`Split ${lang}.json into ${namespaces.length} namespaces.`); +} + +async function main() { + const entries = await fs.readdir(LOCALES_DIR, { withFileTypes: true }); + const localeFiles = entries.filter( + (entry) => entry.isFile() && entry.name.endsWith(".json"), + ); + + if (localeFiles.length === 0) { + console.log("No flat locale JSON files found. Nothing to do."); + return; + } + + for (const entry of localeFiles) { + const lang = entry.name.replace(/\.json$/, ""); + const filePath = path.join(LOCALES_DIR, entry.name); + await splitLocaleFile(filePath, lang); + } +} + +main().catch((err) => { + console.error(err); + process.exitCode = 1; +}); diff --git a/src/locales/ar.json b/src/locales/ar.json deleted file mode 100644 index 90f15b73..00000000 --- a/src/locales/ar.json +++ /dev/null @@ -1,1299 +0,0 @@ -{ - "shared": { - "actions": { - "cancel": "إلغاء", - "close": "إغلاق", - "confirm": "تأكيد", - "save": "حفظ", - "delete": "حذف", - "edit": "تعديل", - "new": "جديد", - "enable": "تمكين", - "upgrade": "ترقية", - "restart": "إعادة التشغيل", - "resetToDefault": "إعادة تعيين إلى الافتراضي", - "refresh": "تحديث", - "retry": "Retry", - "refreshPage": "Refresh Page", - "showDetails": "Show Details", - "hideDetails": "Hide Details", - "listView": "عرض القائمة", - "tableView": "عرض الجدول", - "pause": "إيقاف مؤقت", - "resume": "استأنف", - "closeAll": "إغلاق الكل", - "clear": "مسح" - }, - "labels": { - "updateAt": "التحديث عند", - "timeout": "Timeout", - "icon": "أيقونة", - "name": "الاسم", - "readOnly": "للقراءة فقط", - "expireTime": "وقت الانتهاء", - "updateTime": "وقت التحديث", - "usedTotal": "المستخدم / الإجمالي", - "from": "من", - "password": "كلمة المرور", - "retryAttempts": "Retry attempts", - "downloaded": "تم التنزيل", - "uploaded": "تم الرفع" - }, - "statuses": { - "enabled": "ممكّن", - "disabled": "معطّل", - "saving": "Saving...", - "empty": "فارغ" - }, - "units": { - "milliseconds": "ميلي ثانية", - "seconds": "ثواني", - "minutes": "دقائق", - "kilobytes": "KB", - "files": "Files" - }, - "placeholders": { - "filter": "شروط التصفية", - "matchCase": "مطابقة الحالة", - "matchWholeWord": "مطابقة الكلمة بأكملها", - "useRegex": "استخدام التعبيرات العادية" - }, - "validation": { - "invalidRegex": "Invalid regular expression" - }, - "window": { - "maximize": "تكبير", - "minimize": "تصغير" - }, - "editorModes": { - "visualization": "تصور", - "advanced": "متقدم" - }, - "feedback": { - "errors": { - "trafficStats": "Traffic Statistics Error", - "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." - }, - "notices": { - "raw": "{{message}}", - "prefixedRaw": "{{prefix}} {{message}}" - }, - "notifications": { - "importSuccess": "تم استيراد الملف الشخصي بنجاح", - "importSubscriptionSuccess": "تم استيراد الاشتراك بنجاح", - "importWithClashProxy": "Profile Imported with Clash proxy", - "saved": "Saved successfully", - "common": { - "copySuccess": "تم النسخ بنجاح", - "saveSuccess": "Configuration saved successfully", - "saveFailed": "Failed to save configuration" - } - }, - "validation": { - "config": { - "failed": "فشل التحقق من تكوين الاشتراك، يرجى فحص ملف التكوين، تم التراجع عن التغييرات، تفاصيل الخطأ:", - "bootFailed": "فشل التحقق من التكوين عند الإقلاع، تم استخدام التكوين الافتراضي، يرجى فحص ملف التكوين، تفاصيل الخطأ:", - "coreChangeFailed": "فشل التحقق من التكوين عند تغيير النواة، تم استخدام التكوين الافتراضي، يرجى فحص ملف التكوين، تفاصيل الخطأ:", - "processTerminated": "تم إنهاء عملية التحقق" - }, - "script": { - "syntaxError": "خطأ في بناء جملة السكريبت، تم التراجع عن التغييرات", - "missingMain": "خطأ في السكريبت، تم التراجع عن التغييرات", - "fileNotFound": "الملف غير موجود، تم التراجع عن التغييرات", - "fileError": "خطأ في ملف السكريبت، تم التراجع عن التغييرات" - }, - "yaml": { - "syntaxError": "YAML syntax error, changes reverted", - "readError": "YAML read error, changes reverted", - "mappingError": "YAML mapping error, changes reverted", - "keyError": "YAML key error, changes reverted", - "generalError": "YAML error, changes reverted" - }, - "merge": { - "syntaxError": "Merge file syntax error, changes reverted", - "mappingError": "Merge file mapping error, changes reverted", - "keyError": "Merge file key error, changes reverted", - "generalError": "Merge file error, changes reverted" - } - } - }, - "filters": { - "logLevels": { - "all": "ALL", - "debug": "DEBUG", - "info": "INFO", - "warn": "WARN", - "error": "ERROR" - } - } - }, - "profiles": { - "page": { - "actions": { - "updateAll": "تحديث جميع الملفات الشخصية", - "viewRuntimeConfig": "عرض تكوين وقت التشغيل", - "reactivate": "إعادة تنشيط الملفات الشخصية", - "import": "استيراد" - }, - "batch": { - "actions": { - "delete": "Delete Selected Profiles", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "done": "Done" - }, - "summary": { - "selected": "Selected", - "items": "items" - }, - "title": "Batch Operations" - }, - "importForm": { - "placeholder": "رابط الملف الشخصي", - "actions": { - "paste": "لصق" - } - }, - "feedback": { - "errors": { - "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", - "onlyYaml": "لا يتم دعم سوى ملفات YAML" - }, - "notifications": { - "importRetry": "Import failed, retrying with Clash proxy...", - "importFail": "Import failed even with Clash proxy", - "importNeedsRefresh": "Profile imported but may need manual refresh", - "importSuccess": "Profile imported successfully, please restart if not visible", - "profileSwitched": "تم التبديل إلى الملف الشخصي", - "profileReactivated": "تم إعادة تنشيط الملف الشخصي", - "switchInterrupted": "Profile switch interrupted by new selection", - "batchDeleted": "Selected profiles deleted successfully" - }, - "notices": { - "forceRefreshCompleted": "Force refresh completed", - "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" - } - }, - "title": "الملفات الشخصية" - }, - "components": { - "card": { - "labels": { - "clickToImport": "Click to import subscription" - } - }, - "fileInput": { - "chooseFile": "اختر ملف" - }, - "menu": { - "home": "Home", - "select": "اختيار", - "editInfo": "تعديل المعلومات", - "editFile": "تعديل الملف", - "editRules": "تعديل القواعد", - "editProxies": "تعديل الوكلاء", - "editGroups": "تعديل مجموعات الوكلاء", - "extendConfig": "توسيع الإعدادات", - "extendScript": "توسيع السكربت", - "openFile": "فتح الملف", - "update": "تحديث", - "updateViaProxy": "Update via proxy" - }, - "more": { - "global": { - "merge": "Global Merge", - "script": "Global Script" - }, - "chips": { - "merge": "Merge", - "script": "Script" - } - }, - "profileItem": { - "tooltips": { - "showLast": "Click to show last update time", - "showNext": "Click to show next update" - }, - "status": { - "lastUpdateFailed": "Last Update failed", - "nextUp": "Next Up", - "noSchedule": "No schedule", - "unknown": "Unknown", - "autoUpdateDisabled": "Auto update disabled" - } - } - }, - "modals": { - "profileForm": { - "title": { - "create": "إنشاء ملف شخصي", - "edit": "تعديل الملف الشخصي" - }, - "fields": { - "type": "النوع", - "description": "الوصف", - "subscriptionUrl": "رابط الاشتراك", - "httpTimeout": "HTTP Request Timeout", - "updateInterval": "فاصل التحديث", - "useSystemProxy": "استخدام وكيل النظام", - "useClashProxy": "استخدام وكيل Clash", - "acceptInvalidCerts": "قبول الشهادات غير الصالحة (خطر)", - "allowAutoUpdate": "Allow Auto Update" - }, - "feedback": { - "notifications": { - "creationRetry": "Profile creation failed, retrying with Clash proxy...", - "creationSuccess": "Profile creation succeeded with Clash proxy" - } - } - }, - "proxiesEditor": { - "title": "تعديل الوكلاء", - "placeholders": { - "multiUri": "استخدم أسطرًا جديدة لعدّة عناوين URI (يدعم التشفير Base64)" - }, - "actions": { - "prepend": "إضافة وكيل في البداية", - "append": "إضافة وكيل في النهاية" - } - }, - "groupsEditor": { - "title": "تعديل مجموعات الوكلاء", - "errors": { - "nameRequired": "اسم المجموعة مطلوب", - "nameExists": "اسم المجموعة موجود بالفعل" - }, - "fields": { - "type": "نوع المجموعة", - "name": "اسم المجموعة", - "icon": "أيقونة مجموعة الوكلاء", - "proxies": "استخدام الوكلاء", - "provider": "استخدام المزود", - "healthCheckUrl": "رابط فحص الصحة", - "expectedStatus": "الحالة المتوقعة", - "interval": "الفاصل الزمني", - "maxFailedTimes": "الحد الأقصى لمحاولات الفشل", - "interfaceName": "اسم الواجهة", - "routingMark": "علامة التوجيه", - "filter": "تصفية", - "excludeFilter": "استبعاد المرشح", - "excludeType": "استبعاد النوع", - "includeAll": "تضمين جميع الوكلاء والمزودين", - "includeAllProxies": "تضمين جميع الوكلاء", - "includeAllProviders": "تضمين جميع المزودين" - }, - "toggles": { - "lazy": "كسول", - "disableUdp": "تعطيل UDP", - "hidden": "مخفي" - }, - "actions": { - "prepend": "إضافة مجموعة في البداية", - "append": "إضافة مجموعة في النهاية" - } - }, - "editor": { - "actions": { - "format": "تنسيق المستند" - }, - "messages": { - "readOnly": "لا يمكن التعديل في محرر القراءة فقط" - } - }, - "confirmDelete": { - "title": "تأكيد الحذف", - "message": "لا يمكن التراجع عن هذه العملية" - }, - "logViewer": { - "title": "وحدة التحكم للسكريبت" - } - } - }, - "proxies": { - "page": { - "modes": { - "rule": "Rule", - "global": "Global", - "direct": "Direct" - }, - "actions": { - "toggleChain": "🔗 بروكسي السلسلة", - "connect": "Connect", - "disconnect": "Disconnect", - "connecting": "Connecting...", - "clearChainConfig": "Delete Chain Config" - }, - "provider": { - "title": "مزود الوكيل", - "actions": { - "updateAll": "تحديث الكل", - "update": "تحديث" - } - }, - "rules": { - "title": "Proxy Rules", - "select": "Select Rules" - }, - "labels": { - "proxyCount": "Proxy Count", - "delayCheckReset": "فحص التأخير لإلغاء الثابت" - }, - "tooltips": { - "locate": "الموقع", - "delayCheck": "فحص التأخير", - "sortDefault": "الترتيب الافتراضي", - "sortDelay": "الترتيب حسب التأخير", - "sortName": "الترتيب حسب الاسم", - "delayCheckUrl": "رابط فحص التأخير", - "showBasic": "إعدادات الوكيل الأساسية", - "showDetail": "تفاصيل الوكيل", - "filter": "تصفية" - }, - "placeholders": { - "delayCheckUrl": "رابط فحص التأخير" - }, - "chain": { - "header": "Chain Proxy Config", - "empty": "No proxy chain configured", - "instruction": "Click nodes in order to add to proxy chain", - "minimumNodes": "Chain proxy requires at least 2 nodes", - "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", - "connectFailed": "Failed to connect to proxy chain", - "disconnectFailed": "Failed to disconnect from proxy chain", - "duplicateNode": "Proxy node already exists in chain" - }, - "messages": { - "directMode": "الوضع المباشر" - }, - "title": { - "default": "مجموعات الوكلاء", - "chainMode": "Proxy Chain Mode" - } - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "components": { - "enums": { - "strategies": { - "select": "اختيار الوكيل يدويًا", - "url-test": "اختيار الوكيل بناءً على تأخير اختبار الرابط", - "fallback": "التبديل إلى وكيل آخر عند حدوث خطأ", - "load-balance": "توزيع التحميل بين الوكلاء", - "relay": "التمرير عبر سلسلة الوكلاء المحددة" - }, - "policies": { - "DIRECT": "البيانات تخرج مباشرة", - "REJECT": "رفض الطلبات", - "REJECT-DROP": "تجاهل الطلبات", - "PASS": "تخطي هذه القاعدة عند المطابقة" - } - } - } - }, - "connections": { - "page": { - "title": "الاتصالات" - }, - "components": { - "fields": { - "host": "المضيف", - "dlSpeed": "سرعة التنزيل", - "ulSpeed": "سرعة الرفع", - "chains": "السلاسل", - "rule": "قاعدة", - "process": "عملية", - "time": "الوقت", - "source": "المصدر", - "destination": "عنوان IP الوجهة", - "destinationPort": "ميناء الوجهة", - "type": "النوع" - }, - "order": { - "default": "Default", - "uploadSpeed": "سرعة الرفع", - "downloadSpeed": "سرعة التنزيل" - }, - "actions": { - "closeConnection": "إغلاق الاتصال" - } - } - }, - "tests": { - "page": { - "actions": { - "testAll": "اختبار الكل" - }, - "title": "اختبار" - }, - "components": { - "item": { - "actions": { - "test": "اختبار" - } - } - }, - "modals": { - "test": { - "title": { - "create": "إنشاء اختبار", - "edit": "تعديل الاختبار" - }, - "fields": { - "url": "رابط الاختبار" - } - } - }, - "statuses": { - "test": { - "pending": "Pending", - "yes": "Yes", - "no": "No", - "failed": "Failed", - "completed": "Completed", - "disallowedIsp": "Disallowed ISP", - "originalsOnly": "Originals Only", - "noDisney": "No (IP Banned By Disney+)", - "unsupportedRegion": "Unsupported Country/Region", - "failedNetwork": "Failed (Network Connection)" - } - } - }, - "logs": { - "page": { - "title": "السجلات" - } - }, - "rules": { - "page": { - "provider": { - "trigger": "مزود القواعد", - "dialogTitle": "مزود القواعد", - "actions": { - "updateAll": "تحديث الكل", - "update": "تحديث" - } - }, - "title": "القواعد" - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "modals": { - "editor": { - "form": { - "labels": { - "type": "نوع القاعدة", - "content": "محتوى القاعدة", - "proxyPolicy": "سياسة الوكيل" - }, - "toggles": { - "noResolve": "لا يوجد حل" - }, - "actions": { - "prependRule": "إضافة قاعدة في البداية", - "appendRule": "إضافة قاعدة في النهاية" - }, - "validation": { - "conditionRequired": "شرط القاعدة مطلوب", - "invalidRule": "قاعدة غير صالحة" - } - }, - "ruleTypes": { - "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": "مطابقة جميع الطلبات" - }, - "title": "تعديل القواعد" - } - } - }, - "home": { - "page": { - "tooltips": { - "lightweightMode": "وضع الأداء الخفيف", - "manual": "دليل", - "settings": "Home Settings" - }, - "cards": { - "trafficStats": "Traffic Stats", - "networkSettings": "Network Settings", - "proxyMode": "Proxy Mode" - }, - "settings": { - "cards": { - "profile": "Profile Card", - "currentProxy": "Current Proxy Card", - "network": "Network Settings Card", - "proxyMode": "Proxy Mode Card", - "traffic": "Traffic Stats Card", - "tests": "Website Tests Card", - "ip": "IP Information Card", - "clashInfo": "Clash Info Cards", - "systemInfo": "System Info Cards" - }, - "title": "Home Settings" - }, - "title": "Home" - }, - "components": { - "proxyTun": { - "status": { - "systemProxyEnabled": "System proxy is enabled, your applications will access the network through the proxy", - "systemProxyDisabled": "System proxy is disabled, it is recommended for most users to turn on this option", - "tunModeServiceRequired": "TUN mode requires service mode, please install the service first", - "tunModeEnabled": "TUN mode is enabled, applications will access the network through the virtual network card", - "tunModeDisabled": "TUN mode is disabled, suitable for special applications" - }, - "tooltips": { - "systemProxy": "عند التمكين، سيتم تعديل إعدادات الوكيل في نظام التشغيل. إذا فشل التمكين، فقم بتعديل إعدادات الوكيل في النظام يدويًا.", - "tunMode": "TUN mode can take over all application traffic, suitable for special applications that do not follow the system proxy settings" - } - }, - "clashInfo": { - "title": "Clash Info", - "fields": { - "coreVersion": "Core Version", - "systemProxyAddress": "System Proxy Address", - "mixedPort": "Mixed Port", - "uptime": "Uptime", - "rulesCount": "Rules Count" - } - }, - "systemInfo": { - "title": "System Info", - "fields": { - "osInfo": "OS Info", - "autoLaunch": "إطلاق تلقائي", - "runningMode": "Running Mode", - "lastCheckUpdate": "Last Check Update", - "vergeVersion": "إصدار Verge" - }, - "actions": { - "settings": "الإعدادات" - }, - "tooltips": { - "autoLaunchAdmin": "Administrator mode may not support auto launch" - }, - "badges": { - "adminMode": "Administrator Mode", - "serviceMode": "وضع الخدمة", - "sidecarMode": "User Mode", - "adminServiceMode": "Admin + Service Mode" - } - }, - "ipInfo": { - "title": "IP Information", - "labels": { - "ip": "IP", - "asn": "ASN", - "isp": "ISP", - "org": "ORG", - "location": "Location", - "timezone": "Timezone", - "autoRefresh": "Auto refresh", - "unknown": "Unknown" - }, - "errors": { - "load": "فشل الحصول على معلومات الـ IP" - } - }, - "currentProxy": { - "title": "Current Node", - "actions": { - "refreshDelay": "فحص التأخير" - }, - "labels": { - "globalMode": "الوضع العالمي", - "directMode": "الوضع المباشر", - "group": "Group", - "proxy": "Proxy", - "noActiveNode": "No active proxy node" - } - }, - "tests": { - "title": "Website Tests" - }, - "traffic": { - "metrics": { - "uploadSpeed": "سرعة الرفع", - "downloadSpeed": "سرعة التنزيل", - "activeConnections": "Active Connections", - "memoryUsage": "استهلاك الذاكرة" - }, - "legends": { - "upload": "Upload", - "download": "Download" - }, - "patterns": { - "minutes": "{{time}} Minutes" - } - }, - "clashMode": { - "errors": { - "communication": "Core communication error" - }, - "labels": { - "rule": "وضع القواعد", - "global": "الوضع العالمي", - "direct": "الوضع المباشر" - }, - "descriptions": { - "rule": "Automatically choose proxies according to the rule set.", - "global": "Forward all network requests through the selected proxy.", - "direct": "Bypass the proxy and connect to the internet directly." - } - } - } - }, - "unlock": { - "page": { - "actions": { - "testing": "Testing..." - }, - "empty": "No unlock test items", - "messages": { - "detectionTimeout": "Detection timeout or failed" - }, - "title": "Unlock Test" - } - }, - "settings": { - "page": { - "actions": { - "manual": "دليل", - "telegram": "قناة تيليجرام", - "github": "مستودع Github" - }, - "title": "الإعدادات" - }, - "sections": { - "system": { - "title": "إعدادات النظام", - "toggles": { - "tunMode": "وضع TUN", - "systemProxy": "وكيل النظام" - }, - "tooltips": { - "autoLaunchAdmin": "Administrator mode may not support auto launch", - "silentStart": "بدء البرنامج في الخلفية دون عرض الواجهة" - }, - "fields": { - "autoLaunch": "تشغيل تلقائي", - "silentStart": "تشغيل صامت" - }, - "notifications": { - "tunMode": { - "autoDisabled": "TUN Mode automatically disabled due to service unavailable", - "autoDisableFailed": "Failed to disable TUN Mode automatically" - } - } - }, - "proxyControl": { - "tooltips": { - "systemProxy": "عند التمكين، سيتم تعديل إعدادات الوكيل في نظام التشغيل. إذا فشل التمكين، فقم بتعديل إعدادات الوكيل في النظام يدويًا.", - "tunMode": "وضع TUN (بطاقة شبكة افتراضية): يلتقط كل حركة المرور في النظام. عند تمكينه، لا حاجة لتفعيل وكيل النظام.", - "tunUnavailable": "TUN requires Service Mode or Admin Mode" - }, - "actions": { - "installService": "تثبيت الخدمة ", - "uninstallService": "Uninstall Service" - }, - "fields": { - "systemProxy": "وكيل النظام", - "tunMode": "وضع TUN" - } - }, - "externalController": { - "title": "وحدة التحكم الخارجية", - "fields": { - "enable": "Enable External Controller", - "address": "وحدة التحكم الخارجية", - "secret": "المفتاح السري للنواة" - }, - "placeholders": { - "address": "Required", - "secret": "موصى به" - }, - "tooltips": { - "copy": "Copy to clipboard" - }, - "messages": { - "addressRequired": "Controller address cannot be empty", - "secretRequired": "Secret cannot be empty", - "copyFailed": "Failed to copy", - "controllerCopied": "Controller address copied to clipboard", - "secretCopied": "Secret copied to clipboard" - } - }, - "externalCors": { - "title": "External Cors Configuration", - "fields": { - "allowPrivateNetwork": "Allow private network access", - "allowedOrigins": "Allowed Origins" - }, - "placeholders": { - "origin": "Please enter a valid url" - }, - "actions": { - "add": "Add" - }, - "messages": { - "alwaysIncluded": "Always included origins: {{urls}}" - }, - "tooltips": { - "open": "External Cors Settings" - } - }, - "appearance": { - "light": "Light", - "dark": "Dark", - "system": "System" - }, - "clash": { - "title": "إعدادات Clash", - "form": { - "fields": { - "allowLan": "السماح بالشبكة المحلية", - "dnsOverwrite": "DNS Overwrite", - "ipv6": "IPv6", - "unifiedDelay": "تأخير موحد", - "logLevel": "مستوى السجلات", - "portConfig": "تكوين المنافذ", - "external": "خارجي", - "webUI": "واجهة الويب", - "clashCore": "نواة Clash", - "openUwpTool": "فتح أداة UWP", - "updateGeoData": "تحديث البيانات الجغرافية" - }, - "tooltips": { - "networkInterface": "واجهة الشبكة", - "unifiedDelay": "عند تفعيل التأخير الموحد، سيتم إجراء اختبارين للتأخير لتقليل الفروقات الناتجة عن مفاوضات الاتصال", - "logLevel": "This parameter is valid only for kernel log files in the log directory Service folder", - "openUwpTool": "منذ نظام ويندوز 8، يتم تقييد تطبيقات UWP من الوصول المباشر إلى المضيف المحلي. هذه الأداة تتيح تجاوز هذا التقييد" - }, - "options": { - "logLevel": { - "debug": "Debug", - "info": "Info", - "warning": "Warn", - "error": "Error", - "silent": "Silent" - } - } - } - } - }, - "components": { - "verge": { - "basic": { - "title": "الإعدادات الأساسية Verge", - "actions": { - "browse": "استعراض" - }, - "trayOptions": { - "showMainWindow": "إظهار النافذة الرئيسية", - "showTrayMenu": "Show Tray Menu", - "disable": "تعطيل" - }, - "fields": { - "language": "اللغة", - "themeMode": "وضع السمة", - "trayClickEvent": "حدث النقر على الأيقونة في شريط المهام", - "copyEnvType": "نسخ نوع البيئة", - "startPage": "صفحة البدء", - "startupScript": "سكريبت بدء التشغيل", - "themeSetting": "إعدادات السمة", - "layoutSetting": "إعدادات التخطيط", - "misc": "متفرقات", - "hotkeySetting": "إعدادات الاختصارات" - } - }, - "advanced": { - "title": "الإعدادات الأساسية Verge", - "tooltips": { - "backupInfo": "Support local or WebDAV backup of configuration files", - "openConfDir": "إذا عمل البرنامج بشكل غير طبيعي، قم بالنسخ الاحتياطي ثم حذف جميع الملفات في هذا المجلد ثم أعد تشغيل البرنامج", - "liteMode": "إيقاف الواجهة الرسومية والإبقاء على تشغيل النواة" - }, - "actions": { - "copyVersion": "Copy Version" - }, - "notifications": { - "latestVersion": "أنت على أحدث إصدار حاليًا", - "versionCopied": "Version copied to clipboard" - }, - "fields": { - "backupSetting": "إعداد النسخ الاحتياطي", - "runtimeConfig": "تكوين وقت التشغيل", - "openConfDir": "فتح مجلد التكوين", - "openCoreDir": "فتح مجلد النواة", - "openLogsDir": "فتح مجلد السجلات", - "checkUpdates": "التحقق من وجود تحديثات", - "openDevTools": "أدوات المطور", - "liteModeSettings": "LightWeight Mode Settings", - "exit": "خروج", - "exportDiagnostics": "Export Diagnostic Info", - "vergeVersion": "إصدار Verge" - } - }, - "theme": { - "title": "إعدادات السمة", - "fields": { - "primaryColor": "اللون الأساسي", - "secondaryColor": "اللون الثانوي", - "primaryText": "النص الأساسي", - "secondaryText": "النص الثانوي", - "infoColor": "لون المعلومات", - "warningColor": "لون التحذير", - "errorColor": "لون الخطأ", - "successColor": "لون النجاح", - "fontFamily": "عائلة الخط", - "cssInjection": "حقن CSS" - }, - "actions": { - "editCss": "Edit CSS" - }, - "dialogs": { - "editCssTitle": "Edit CSS" - } - }, - "layout": { - "title": "إعدادات التخطيط", - "fields": { - "preferSystemTitlebar": "Prefer System Titlebar", - "trafficGraph": "مخطط حركة المرور", - "memoryUsage": "استهلاك الذاكرة", - "proxyGroupIcon": "أيقونة مجموعة الوكلاء", - "hoverNavigator": "Hover Jump Navigator", - "hoverNavigatorDelay": "Hover Jump Navigator Delay", - "navIcon": "أيقونة التنقل", - "trayIcon": "أيقونة شريط المهام", - "showProxyGroupsInline": "Show Proxy Groups Inline", - "commonTrayIcon": "أيقونة شريط مهام عامة", - "systemProxyTrayIcon": "أيقونة شريط المهام لوكيل النظام", - "tunTrayIcon": "أيقونة شريط المهام لـ TUN", - "enableTrayIcon": "Enable Tray Icon", - "enableTraySpeed": "تفعيل سرعة التراي" - }, - "tooltips": { - "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", - "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" - }, - "options": { - "icon": { - "monochrome": "أحادي اللون", - "colorful": "ملون", - "disable": "تعطيل" - } - } - } - } - }, - "modals": { - "clashPort": { - "title": "تكوين المنافذ", - "fields": { - "mixed": "منفذ مختلط", - "socks": "منفذ SOCKS", - "http": "منفذ HTTP(S)", - "redir": "منفذ إعادة التوجيه", - "tproxy": "منفذ Tproxy" - }, - "actions": { - "random": "منفذ عشوائي" - }, - "messages": { - "saved": "Port settings saved", - "saveFailed": "Failed to save port settings" - } - }, - "clashCore": { - "variants": { - "release": "الإصدار المستقر", - "alpha": "الإصدار التجريبي" - } - }, - "liteMode": { - "title": "LightWeight Mode Settings", - "actions": { - "enterNow": "Enter LightWeight Mode Now" - }, - "toggles": { - "autoEnter": "Auto Enter LightWeight Mode" - }, - "tooltips": { - "autoEnter": "Enable to automatically activate LightWeight Mode after the window is closed for a period of time" - }, - "fields": { - "delay": "Auto Enter LightWeight Mode Delay" - }, - "messages": { - "autoEnterHint": "When closing the window, LightWeight Mode will be automatically activated after {{n}} minutes" - } - }, - "backup": { - "title": "إعداد النسخ الاحتياطي", - "tabs": { - "local": "Local backup", - "webdav": "WebDAV backup" - }, - "actions": { - "selectTarget": "Select backup target", - "backup": "نسخ احتياطي", - "export": "Export", - "exportBackup": "Export Backup", - "deleteBackup": "حذف النسخة الاحتياطية", - "restore": "استعادة", - "restoreBackup": "استعادة النسخة الاحتياطية" - }, - "fields": { - "webdavUrl": "عنوان خادم WebDAV", - "username": "اسم المستخدم", - "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." - }, - "messages": { - "webdavUrlRequired": "لا يمكن ترك رابط WebDAV فارغًا", - "invalidWebdavUrl": "تنسيق رابط WebDAV غير صالح", - "usernameRequired": "لا يمكن ترك اسم المستخدم فارغًا", - "passwordRequired": "لا يمكن ترك كلمة المرور فارغة", - "webdavConfigSaved": "تم حفظ إعدادات WebDAV بنجاح", - "webdavConfigSaveFailed": "فشل حفظ إعدادات WebDAV: {{error}}", - "backupCreated": "تم إنشاء النسخة الاحتياطية بنجاح", - "backupFailed": "فشل في النسخ الاحتياطي: {{error}}", - "localBackupCreated": "Local backup created successfully", - "localBackupFailed": "Local backup failed", - "restoreSuccess": "تمت الاستعادة بنجاح، سيعاد تشغيل التطبيق خلال ثانية واحدة", - "localBackupExported": "Local backup exported successfully", - "localBackupExportFailed": "Failed to export local backup", - "confirmDelete": "هل تريد بالتأكيد حذف ملف النسخة الاحتياطية هذا؟", - "confirmRestore": "هل تريد بالتأكيد استعادة ملف النسخة الاحتياطية هذا؟" - }, - "table": { - "filename": "اسم الملف", - "backupTime": "وقت النسخ الاحتياطي", - "actions": "الإجراءات", - "noBackups": "لا توجد نسخ احتياطية متاحة", - "rowsPerPage": "Rows per page" - } - }, - "misc": { - "title": "متفرقات", - "fields": { - "appLogLevel": "مستوى سجلات التطبيق", - "appLogMaxSize": "App Log Max Size", - "appLogMaxCount": "App Log Max Count", - "autoCloseConnections": "إغلاق الاتصالات تلقائيًا", - "autoCheckUpdate": "فحص التحديث تلقائيًا", - "enableBuiltinEnhanced": "تفعيل التحسين المدمج", - "proxyLayoutColumns": "أعمدة عرض الوكيل", - "autoLogClean": "تنظيف السجلات تلقائيًا", - "autoDelayDetection": "اكتشاف التأخير التلقائي", - "defaultLatencyTest": "اختبار التأخير الافتراضي", - "defaultLatencyTimeout": "مهلة التأخير الافتراضية" - }, - "tooltips": { - "autoCloseConnections": "إنهاء الاتصالات القائمة عند تغيير اختيار مجموعة الوكيل أو وضع الوكيل", - "enableBuiltinEnhanced": "معالجة توافق ملف التكوين", - "autoDelayDetection": "يختبر زمن استجابة العقدة الحالية على نحو دوري في الخلفية", - "defaultLatencyTest": "يُستخدم فقط لاختبار طلب HTTP العميل. لن يؤثر على ملف التكوين" - }, - "options": { - "proxyLayoutColumns": { - "auto": "أعمدة تلقائية" - }, - "autoLogClean": { - "never": "عدم التنظيف أبدًا", - "retainDays": "الاحتفاظ لمدة {{n}} يومًا" - } - } - }, - "update": { - "title": "New Version v{{version}}", - "actions": { - "goToRelease": "الانتقال إلى صفحة الإصدارات", - "update": "تحديث" - }, - "messages": { - "portableError": "الإصدار المحمول لا يدعم التحديث داخل التطبيق. يرجى التنزيل والاستبدال يدويًا", - "breakChangeError": "هذا الإصدار هو تحديث رئيسي ولا يدعم التحديث داخل التطبيق. يرجى إلغاء التثبيت وتنزيل الإصدار الجديد وتثبيته يدويًا" - } - }, - "sysproxy": { - "title": "إعداد وكيل النظام", - "fieldsets": { - "currentStatus": "الوكيل الحالي للنظام" - }, - "fields": { - "enableStatus": "حالة التمكين:", - "serverAddr": "عنوان الخادم:", - "pacUrl": "رابط PAC:", - "proxyHost": "مضيف الوكيل", - "usePacMode": "استخدام وضع PAC", - "proxyGuard": "حماية الوكيل", - "guardDuration": "مدة الحماية", - "alwaysUseDefaultBypass": "استخدام التخطي الافتراضي دائمًا", - "proxyBypass": "إعدادات تخطي الوكيل:", - "bypass": "تخطي:", - "pacScriptContent": "محتوى سكريبت PAC" - }, - "tooltips": { - "proxyGuard": "عند التمكين، يمنع برامج أخرى من تعديل إعدادات وكيل النظام" - }, - "messages": { - "durationTooShort": "لا يمكن أن تقل مدة خادم الوكيل عن ثانية واحدة", - "invalidBypass": "تنسيق التخطي غير صالح", - "invalidProxyHost": "تنسيق مضيف الوكيل غير صالح" - }, - "actions": { - "editPac": "تعديل PAC" - } - }, - "tun": { - "title": "وضع TUN", - "fields": { - "stack": "مكدس TUN", - "device": "Device Name", - "autoRoute": "توجيه تلقائي", - "strictRoute": "توجيه صارم", - "autoDetectInterface": "الكشف التلقائي عن الواجهة", - "dnsHijack": "اختطاف DNS", - "mtu": "وحدة الإرسال القصوى" - }, - "tooltips": { - "dnsHijack": "Please use , to separate multiple DNS servers" - }, - "messages": { - "applied": "تم تطبيق الإعدادات" - } - }, - "dns": { - "dialog": { - "title": "DNS Overwrite", - "warning": "If you are not familiar with these settings, please do not modify them and keep DNS Overwrite enabled" - }, - "sections": { - "general": "DNS Settings", - "fallbackFilter": "Fallback Filter Settings", - "hosts": "Hosts Settings" - }, - "fields": { - "enable": "Enable DNS", - "listen": "DNS Listen", - "enhancedMode": "Enhanced Mode", - "fakeIpRange": "Fake IP Range", - "fakeIpFilterMode": "Fake IP Filter Mode", - "ipv6": { - "label": "IPv6", - "description": "Enable IPv6 DNS resolution" - }, - "preferH3": { - "label": "Prefer H3", - "description": "DNS DOH uses HTTP/3" - }, - "respectRules": { - "label": "Respect Rules", - "description": "DNS connections follow routing rules" - }, - "useHosts": { - "label": "Use Hosts", - "description": "Enable to resolve hosts through hosts file" - }, - "useSystemHosts": { - "label": "Use System Hosts", - "description": "Enable to resolve hosts through system hosts file" - }, - "directPolicy": { - "label": "Direct Nameserver Follow Policy", - "description": "Whether to follow nameserver policy" - }, - "defaultNameserver": { - "label": "Default Nameserver", - "description": "Default DNS servers used to resolve DNS servers" - }, - "nameserver": { - "label": "Nameserver", - "description": "List of DNS servers, comma separated" - }, - "fallback": { - "label": "Fallback", - "description": "List of fallback DNS servers, comma separated" - }, - "proxy": { - "label": "Proxy Server Nameserver", - "description": "DNS servers for proxy node domain resolution" - }, - "directNameserver": { - "label": "Direct Nameserver", - "description": "DNS servers for direct exit domain resolution, supports 'system' keyword, comma separated" - }, - "fakeIpFilter": { - "label": "Fake IP Filter", - "description": "Domains that skip fake IP resolution, comma separated" - }, - "nameserverPolicy": { - "label": "Nameserver Policy", - "description": "Domain-specific DNS server, multiple servers separated by semicolons, format: domain=server1;server2" - }, - "geoipFiltering": { - "label": "GeoIP Filtering", - "description": "Enable GeoIP filtering for fallback" - }, - "geoipCode": "GeoIP Code", - "fallbackIpCidr": { - "label": "Fallback IP CIDR", - "description": "IP CIDRs not using fallback servers, comma separated" - }, - "fallbackDomain": { - "label": "Fallback Domain", - "description": "Domains using fallback servers, comma separated" - }, - "hosts": { - "label": "Hosts", - "description": "Custom domain to IP or domain mapping" - } - }, - "messages": { - "saved": "DNS settings saved", - "configError": "DNS configuration error:" - }, - "errors": { - "invalid": "Invalid configuration" - } - }, - "webUI": { - "actions": { - "openUrl": "فتح الرابط" - }, - "title": "واجهة الويب", - "messages": { - "supportedPlaceholders": "يدعم %host و%port و%secret", - "placeholderInstruction": "استبدل المضيف والمنفذ والمفتاح بـ %host و%port و%secret" - } - }, - "hotkey": { - "toggles": { - "enableGlobal": "تمكين مفتاح التشغيل السريع العالمي" - }, - "title": "إعدادات الاختصارات", - "functions": { - "rule": "وضع القواعد", - "global": "الوضع العالمي", - "openOrCloseDashboard": "فتح/إغلاق لوحة التحكم", - "toggleSystemProxy": "تفعيل/تعطيل وكيل النظام", - "toggleTunMode": "تفعيل/تعطيل وضع TUN", - "entryLightweightMode": "Entry Lightweight Mode", - "direct": "الوضع المباشر" - } - }, - "password": { - "prompts": { - "enterRoot": "يرجى إدخال كلمة مرور الرووت" - } - }, - "networkInterface": { - "title": "واجهة الشبكة", - "fields": { - "ipAddress": "عنوان IP", - "macAddress": "عنوان MAC" - } - } - }, - "feedback": { - "notifications": { - "clash": { - "restartSuccess": "تم إعادة تشغيل نواة Clash", - "versionUpdated": "تم تحديث إصدار النواة", - "changeSuccess": "تم تغيير النواة بنجاح", - "changeFailed": "فشل تغيير النواة", - "geoDataUpdated": "تم تحديث البيانات الجغرافية" - }, - "clashService": { - "installSuccess": "تم تثبيت الخدمة بنجاح", - "uninstallSuccess": "تم إلغاء تثبيت الخدمة بنجاح" - }, - "updater": { - "withClashProxySuccess": "Update with Clash proxy successfully", - "withClashProxyFailed": "Update failed even with Clash proxy" - } - } - }, - "statuses": { - "clash": { - "stopping": "Stopping Core...", - "restarting": "Restarting Core..." - }, - "clashService": { - "installing": "جاري تثبيت الخدمة...", - "uninstalling": "Uninstalling Service..." - } - } - }, - "layout": { - "components": { - "navigation": { - "tabs": { - "home": "Home", - "proxies": "الوكلاء", - "profiles": "الملفات الشخصية", - "connections": "الاتصالات", - "rules": "القواعد", - "logs": "السجلات", - "unlock": "Test", - "settings": "الإعدادات" - }, - "menu": { - "reorderMode": "Menu reorder mode", - "unlock": "Unlock menu order", - "lock": "Lock menu order" - } - } - } - } -} diff --git a/src/locales/ar/connections.json b/src/locales/ar/connections.json new file mode 100644 index 00000000..ad88bf12 --- /dev/null +++ b/src/locales/ar/connections.json @@ -0,0 +1,28 @@ +{ + "page": { + "title": "الاتصالات" + }, + "components": { + "fields": { + "host": "المضيف", + "dlSpeed": "سرعة التنزيل", + "ulSpeed": "سرعة الرفع", + "chains": "السلاسل", + "rule": "قاعدة", + "process": "عملية", + "time": "الوقت", + "source": "المصدر", + "destination": "عنوان IP الوجهة", + "destinationPort": "ميناء الوجهة", + "type": "النوع" + }, + "order": { + "default": "Default", + "uploadSpeed": "سرعة الرفع", + "downloadSpeed": "سرعة التنزيل" + }, + "actions": { + "closeConnection": "إغلاق الاتصال" + } + } +} diff --git a/src/locales/ar/home.json b/src/locales/ar/home.json new file mode 100644 index 00000000..823a2f07 --- /dev/null +++ b/src/locales/ar/home.json @@ -0,0 +1,138 @@ +{ + "page": { + "tooltips": { + "lightweightMode": "وضع الأداء الخفيف", + "manual": "دليل", + "settings": "Home Settings" + }, + "cards": { + "trafficStats": "Traffic Stats", + "networkSettings": "Network Settings", + "proxyMode": "Proxy Mode" + }, + "settings": { + "cards": { + "profile": "Profile Card", + "currentProxy": "Current Proxy Card", + "network": "Network Settings Card", + "proxyMode": "Proxy Mode Card", + "traffic": "Traffic Stats Card", + "tests": "Website Tests Card", + "ip": "IP Information Card", + "clashInfo": "Clash Info Cards", + "systemInfo": "System Info Cards" + }, + "title": "Home Settings" + }, + "title": "Home" + }, + "components": { + "proxyTun": { + "status": { + "systemProxyEnabled": "System proxy is enabled, your applications will access the network through the proxy", + "systemProxyDisabled": "System proxy is disabled, it is recommended for most users to turn on this option", + "tunModeServiceRequired": "TUN mode requires service mode, please install the service first", + "tunModeEnabled": "TUN mode is enabled, applications will access the network through the virtual network card", + "tunModeDisabled": "TUN mode is disabled, suitable for special applications" + }, + "tooltips": { + "systemProxy": "عند التمكين، سيتم تعديل إعدادات الوكيل في نظام التشغيل. إذا فشل التمكين، فقم بتعديل إعدادات الوكيل في النظام يدويًا.", + "tunMode": "TUN mode can take over all application traffic, suitable for special applications that do not follow the system proxy settings" + } + }, + "clashInfo": { + "title": "Clash Info", + "fields": { + "coreVersion": "Core Version", + "systemProxyAddress": "System Proxy Address", + "mixedPort": "Mixed Port", + "uptime": "Uptime", + "rulesCount": "Rules Count" + } + }, + "systemInfo": { + "title": "System Info", + "fields": { + "osInfo": "OS Info", + "autoLaunch": "إطلاق تلقائي", + "runningMode": "Running Mode", + "lastCheckUpdate": "Last Check Update", + "vergeVersion": "إصدار Verge" + }, + "actions": { + "settings": "الإعدادات" + }, + "tooltips": { + "autoLaunchAdmin": "Administrator mode may not support auto launch" + }, + "badges": { + "adminMode": "Administrator Mode", + "serviceMode": "وضع الخدمة", + "sidecarMode": "User Mode", + "adminServiceMode": "Admin + Service Mode" + } + }, + "ipInfo": { + "title": "IP Information", + "labels": { + "ip": "IP", + "asn": "ASN", + "isp": "ISP", + "org": "ORG", + "location": "Location", + "timezone": "Timezone", + "autoRefresh": "Auto refresh", + "unknown": "Unknown" + }, + "errors": { + "load": "فشل الحصول على معلومات الـ IP" + } + }, + "currentProxy": { + "title": "Current Node", + "actions": { + "refreshDelay": "فحص التأخير" + }, + "labels": { + "globalMode": "الوضع العالمي", + "directMode": "الوضع المباشر", + "group": "Group", + "proxy": "Proxy", + "noActiveNode": "No active proxy node" + } + }, + "tests": { + "title": "Website Tests" + }, + "traffic": { + "metrics": { + "uploadSpeed": "سرعة الرفع", + "downloadSpeed": "سرعة التنزيل", + "activeConnections": "Active Connections", + "memoryUsage": "استهلاك الذاكرة" + }, + "legends": { + "upload": "Upload", + "download": "Download" + }, + "patterns": { + "minutes": "{{time}} Minutes" + } + }, + "clashMode": { + "errors": { + "communication": "Core communication error" + }, + "labels": { + "rule": "وضع القواعد", + "global": "الوضع العالمي", + "direct": "الوضع المباشر" + }, + "descriptions": { + "rule": "Automatically choose proxies according to the rule set.", + "global": "Forward all network requests through the selected proxy.", + "direct": "Bypass the proxy and connect to the internet directly." + } + } + } +} diff --git a/src/locales/ar/index.ts b/src/locales/ar/index.ts new file mode 100644 index 00000000..2977171d --- /dev/null +++ b/src/locales/ar/index.ts @@ -0,0 +1,27 @@ +import shared from "./shared.json"; +import profiles from "./profiles.json"; +import proxies from "./proxies.json"; +import connections from "./connections.json"; +import tests from "./tests.json"; +import logs from "./logs.json"; +import rules from "./rules.json"; +import home from "./home.json"; +import unlock from "./unlock.json"; +import settings from "./settings.json"; +import layout from "./layout.json"; + +const resources = { + "shared": shared, + "profiles": profiles, + "proxies": proxies, + "connections": connections, + "tests": tests, + "logs": logs, + "rules": rules, + "home": home, + "unlock": unlock, + "settings": settings, + "layout": layout, +}; + +export default resources; diff --git a/src/locales/ar/layout.json b/src/locales/ar/layout.json new file mode 100644 index 00000000..fba5415b --- /dev/null +++ b/src/locales/ar/layout.json @@ -0,0 +1,21 @@ +{ + "components": { + "navigation": { + "tabs": { + "home": "Home", + "proxies": "الوكلاء", + "profiles": "الملفات الشخصية", + "connections": "الاتصالات", + "rules": "القواعد", + "logs": "السجلات", + "unlock": "Test", + "settings": "الإعدادات" + }, + "menu": { + "reorderMode": "Menu reorder mode", + "unlock": "Unlock menu order", + "lock": "Lock menu order" + } + } + } +} diff --git a/src/locales/ar/logs.json b/src/locales/ar/logs.json new file mode 100644 index 00000000..06f3c65e --- /dev/null +++ b/src/locales/ar/logs.json @@ -0,0 +1,5 @@ +{ + "page": { + "title": "السجلات" + } +} diff --git a/src/locales/ar/profiles.json b/src/locales/ar/profiles.json new file mode 100644 index 00000000..28264c07 --- /dev/null +++ b/src/locales/ar/profiles.json @@ -0,0 +1,182 @@ +{ + "page": { + "actions": { + "updateAll": "تحديث جميع الملفات الشخصية", + "viewRuntimeConfig": "عرض تكوين وقت التشغيل", + "reactivate": "إعادة تنشيط الملفات الشخصية", + "import": "استيراد" + }, + "batch": { + "actions": { + "delete": "Delete Selected Profiles", + "selectAll": "Select All", + "deselectAll": "Deselect All", + "done": "Done" + }, + "summary": { + "selected": "Selected", + "items": "items" + }, + "title": "Batch Operations" + }, + "importForm": { + "placeholder": "رابط الملف الشخصي", + "actions": { + "paste": "لصق" + } + }, + "feedback": { + "errors": { + "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", + "onlyYaml": "لا يتم دعم سوى ملفات YAML" + }, + "notifications": { + "importRetry": "Import failed, retrying with Clash proxy...", + "importFail": "Import failed even with Clash proxy", + "importNeedsRefresh": "Profile imported but may need manual refresh", + "importSuccess": "Profile imported successfully, please restart if not visible", + "profileSwitched": "تم التبديل إلى الملف الشخصي", + "profileReactivated": "تم إعادة تنشيط الملف الشخصي", + "switchInterrupted": "Profile switch interrupted by new selection", + "batchDeleted": "Selected profiles deleted successfully" + }, + "notices": { + "forceRefreshCompleted": "Force refresh completed", + "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" + } + }, + "title": "الملفات الشخصية" + }, + "components": { + "card": { + "labels": { + "clickToImport": "Click to import subscription" + } + }, + "fileInput": { + "chooseFile": "اختر ملف" + }, + "menu": { + "home": "Home", + "select": "اختيار", + "editInfo": "تعديل المعلومات", + "editFile": "تعديل الملف", + "editRules": "تعديل القواعد", + "editProxies": "تعديل الوكلاء", + "editGroups": "تعديل مجموعات الوكلاء", + "extendConfig": "توسيع الإعدادات", + "extendScript": "توسيع السكربت", + "openFile": "فتح الملف", + "update": "تحديث", + "updateViaProxy": "Update via proxy" + }, + "more": { + "global": { + "merge": "Global Merge", + "script": "Global Script" + }, + "chips": { + "merge": "Merge", + "script": "Script" + } + }, + "profileItem": { + "tooltips": { + "showLast": "Click to show last update time", + "showNext": "Click to show next update" + }, + "status": { + "lastUpdateFailed": "Last Update failed", + "nextUp": "Next Up", + "noSchedule": "No schedule", + "unknown": "Unknown", + "autoUpdateDisabled": "Auto update disabled" + } + } + }, + "modals": { + "profileForm": { + "title": { + "create": "إنشاء ملف شخصي", + "edit": "تعديل الملف الشخصي" + }, + "fields": { + "type": "النوع", + "description": "الوصف", + "subscriptionUrl": "رابط الاشتراك", + "httpTimeout": "HTTP Request Timeout", + "updateInterval": "فاصل التحديث", + "useSystemProxy": "استخدام وكيل النظام", + "useClashProxy": "استخدام وكيل Clash", + "acceptInvalidCerts": "قبول الشهادات غير الصالحة (خطر)", + "allowAutoUpdate": "Allow Auto Update" + }, + "feedback": { + "notifications": { + "creationRetry": "Profile creation failed, retrying with Clash proxy...", + "creationSuccess": "Profile creation succeeded with Clash proxy" + } + } + }, + "proxiesEditor": { + "title": "تعديل الوكلاء", + "placeholders": { + "multiUri": "استخدم أسطرًا جديدة لعدّة عناوين URI (يدعم التشفير Base64)" + }, + "actions": { + "prepend": "إضافة وكيل في البداية", + "append": "إضافة وكيل في النهاية" + } + }, + "groupsEditor": { + "title": "تعديل مجموعات الوكلاء", + "errors": { + "nameRequired": "اسم المجموعة مطلوب", + "nameExists": "اسم المجموعة موجود بالفعل" + }, + "fields": { + "type": "نوع المجموعة", + "name": "اسم المجموعة", + "icon": "أيقونة مجموعة الوكلاء", + "proxies": "استخدام الوكلاء", + "provider": "استخدام المزود", + "healthCheckUrl": "رابط فحص الصحة", + "expectedStatus": "الحالة المتوقعة", + "interval": "الفاصل الزمني", + "maxFailedTimes": "الحد الأقصى لمحاولات الفشل", + "interfaceName": "اسم الواجهة", + "routingMark": "علامة التوجيه", + "filter": "تصفية", + "excludeFilter": "استبعاد المرشح", + "excludeType": "استبعاد النوع", + "includeAll": "تضمين جميع الوكلاء والمزودين", + "includeAllProxies": "تضمين جميع الوكلاء", + "includeAllProviders": "تضمين جميع المزودين" + }, + "toggles": { + "lazy": "كسول", + "disableUdp": "تعطيل UDP", + "hidden": "مخفي" + }, + "actions": { + "prepend": "إضافة مجموعة في البداية", + "append": "إضافة مجموعة في النهاية" + } + }, + "editor": { + "actions": { + "format": "تنسيق المستند" + }, + "messages": { + "readOnly": "لا يمكن التعديل في محرر القراءة فقط" + } + }, + "confirmDelete": { + "title": "تأكيد الحذف", + "message": "لا يمكن التراجع عن هذه العملية" + }, + "logViewer": { + "title": "وحدة التحكم للسكريبت" + } + } +} diff --git a/src/locales/ar/proxies.json b/src/locales/ar/proxies.json new file mode 100644 index 00000000..995a4d39 --- /dev/null +++ b/src/locales/ar/proxies.json @@ -0,0 +1,90 @@ +{ + "page": { + "modes": { + "rule": "Rule", + "global": "Global", + "direct": "Direct" + }, + "actions": { + "toggleChain": "🔗 بروكسي السلسلة", + "connect": "Connect", + "disconnect": "Disconnect", + "connecting": "Connecting...", + "clearChainConfig": "Delete Chain Config" + }, + "provider": { + "title": "مزود الوكيل", + "actions": { + "updateAll": "تحديث الكل", + "update": "تحديث" + } + }, + "rules": { + "title": "Proxy Rules", + "select": "Select Rules" + }, + "labels": { + "proxyCount": "Proxy Count", + "delayCheckReset": "فحص التأخير لإلغاء الثابت" + }, + "tooltips": { + "locate": "الموقع", + "delayCheck": "فحص التأخير", + "sortDefault": "الترتيب الافتراضي", + "sortDelay": "الترتيب حسب التأخير", + "sortName": "الترتيب حسب الاسم", + "delayCheckUrl": "رابط فحص التأخير", + "showBasic": "إعدادات الوكيل الأساسية", + "showDetail": "تفاصيل الوكيل", + "filter": "تصفية" + }, + "placeholders": { + "delayCheckUrl": "رابط فحص التأخير" + }, + "chain": { + "header": "Chain Proxy Config", + "empty": "No proxy chain configured", + "instruction": "Click nodes in order to add to proxy chain", + "minimumNodes": "Chain proxy requires at least 2 nodes", + "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", + "connectFailed": "Failed to connect to proxy chain", + "disconnectFailed": "Failed to disconnect from proxy chain", + "duplicateNode": "Proxy node already exists in chain" + }, + "messages": { + "directMode": "الوضع المباشر" + }, + "title": { + "default": "مجموعات الوكلاء", + "chainMode": "Proxy Chain Mode" + } + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "components": { + "enums": { + "strategies": { + "select": "اختيار الوكيل يدويًا", + "url-test": "اختيار الوكيل بناءً على تأخير اختبار الرابط", + "fallback": "التبديل إلى وكيل آخر عند حدوث خطأ", + "load-balance": "توزيع التحميل بين الوكلاء", + "relay": "التمرير عبر سلسلة الوكلاء المحددة" + }, + "policies": { + "DIRECT": "البيانات تخرج مباشرة", + "REJECT": "رفض الطلبات", + "REJECT-DROP": "تجاهل الطلبات", + "PASS": "تخطي هذه القاعدة عند المطابقة" + } + } + } +} diff --git a/src/locales/ar/rules.json b/src/locales/ar/rules.json new file mode 100644 index 00000000..b813c0fb --- /dev/null +++ b/src/locales/ar/rules.json @@ -0,0 +1,82 @@ +{ + "page": { + "provider": { + "trigger": "مزود القواعد", + "dialogTitle": "مزود القواعد", + "actions": { + "updateAll": "تحديث الكل", + "update": "تحديث" + } + }, + "title": "القواعد" + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "modals": { + "editor": { + "form": { + "labels": { + "type": "نوع القاعدة", + "content": "محتوى القاعدة", + "proxyPolicy": "سياسة الوكيل" + }, + "toggles": { + "noResolve": "لا يوجد حل" + }, + "actions": { + "prependRule": "إضافة قاعدة في البداية", + "appendRule": "إضافة قاعدة في النهاية" + }, + "validation": { + "conditionRequired": "شرط القاعدة مطلوب", + "invalidRule": "قاعدة غير صالحة" + } + }, + "ruleTypes": { + "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": "مطابقة جميع الطلبات" + }, + "title": "تعديل القواعد" + } + } +} diff --git a/src/locales/ar/settings.json b/src/locales/ar/settings.json new file mode 100644 index 00000000..8ae5cd50 --- /dev/null +++ b/src/locales/ar/settings.json @@ -0,0 +1,571 @@ +{ + "page": { + "actions": { + "manual": "دليل", + "telegram": "قناة تيليجرام", + "github": "مستودع Github" + }, + "title": "الإعدادات" + }, + "sections": { + "system": { + "title": "إعدادات النظام", + "toggles": { + "tunMode": "وضع TUN", + "systemProxy": "وكيل النظام" + }, + "tooltips": { + "autoLaunchAdmin": "Administrator mode may not support auto launch", + "silentStart": "بدء البرنامج في الخلفية دون عرض الواجهة" + }, + "fields": { + "autoLaunch": "تشغيل تلقائي", + "silentStart": "تشغيل صامت" + }, + "notifications": { + "tunMode": { + "autoDisabled": "TUN Mode automatically disabled due to service unavailable", + "autoDisableFailed": "Failed to disable TUN Mode automatically" + } + } + }, + "proxyControl": { + "tooltips": { + "systemProxy": "عند التمكين، سيتم تعديل إعدادات الوكيل في نظام التشغيل. إذا فشل التمكين، فقم بتعديل إعدادات الوكيل في النظام يدويًا.", + "tunMode": "وضع TUN (بطاقة شبكة افتراضية): يلتقط كل حركة المرور في النظام. عند تمكينه، لا حاجة لتفعيل وكيل النظام.", + "tunUnavailable": "TUN requires Service Mode or Admin Mode" + }, + "actions": { + "installService": "تثبيت الخدمة ", + "uninstallService": "Uninstall Service" + }, + "fields": { + "systemProxy": "وكيل النظام", + "tunMode": "وضع TUN" + } + }, + "externalController": { + "title": "وحدة التحكم الخارجية", + "fields": { + "enable": "Enable External Controller", + "address": "وحدة التحكم الخارجية", + "secret": "المفتاح السري للنواة" + }, + "placeholders": { + "address": "Required", + "secret": "موصى به" + }, + "tooltips": { + "copy": "Copy to clipboard" + }, + "messages": { + "addressRequired": "Controller address cannot be empty", + "secretRequired": "Secret cannot be empty", + "copyFailed": "Failed to copy", + "controllerCopied": "Controller address copied to clipboard", + "secretCopied": "Secret copied to clipboard" + } + }, + "externalCors": { + "title": "External Cors Configuration", + "fields": { + "allowPrivateNetwork": "Allow private network access", + "allowedOrigins": "Allowed Origins" + }, + "placeholders": { + "origin": "Please enter a valid url" + }, + "actions": { + "add": "Add" + }, + "messages": { + "alwaysIncluded": "Always included origins: {{urls}}" + }, + "tooltips": { + "open": "External Cors Settings" + } + }, + "appearance": { + "light": "Light", + "dark": "Dark", + "system": "System" + }, + "clash": { + "title": "إعدادات Clash", + "form": { + "fields": { + "allowLan": "السماح بالشبكة المحلية", + "dnsOverwrite": "DNS Overwrite", + "ipv6": "IPv6", + "unifiedDelay": "تأخير موحد", + "logLevel": "مستوى السجلات", + "portConfig": "تكوين المنافذ", + "external": "خارجي", + "webUI": "واجهة الويب", + "clashCore": "نواة Clash", + "openUwpTool": "فتح أداة UWP", + "updateGeoData": "تحديث البيانات الجغرافية" + }, + "tooltips": { + "networkInterface": "واجهة الشبكة", + "unifiedDelay": "عند تفعيل التأخير الموحد، سيتم إجراء اختبارين للتأخير لتقليل الفروقات الناتجة عن مفاوضات الاتصال", + "logLevel": "This parameter is valid only for kernel log files in the log directory Service folder", + "openUwpTool": "منذ نظام ويندوز 8، يتم تقييد تطبيقات UWP من الوصول المباشر إلى المضيف المحلي. هذه الأداة تتيح تجاوز هذا التقييد" + }, + "options": { + "logLevel": { + "debug": "Debug", + "info": "Info", + "warning": "Warn", + "error": "Error", + "silent": "Silent" + } + } + } + } + }, + "components": { + "verge": { + "basic": { + "title": "الإعدادات الأساسية Verge", + "actions": { + "browse": "استعراض" + }, + "trayOptions": { + "showMainWindow": "إظهار النافذة الرئيسية", + "showTrayMenu": "Show Tray Menu", + "disable": "تعطيل" + }, + "fields": { + "language": "اللغة", + "themeMode": "وضع السمة", + "trayClickEvent": "حدث النقر على الأيقونة في شريط المهام", + "copyEnvType": "نسخ نوع البيئة", + "startPage": "صفحة البدء", + "startupScript": "سكريبت بدء التشغيل", + "themeSetting": "إعدادات السمة", + "layoutSetting": "إعدادات التخطيط", + "misc": "متفرقات", + "hotkeySetting": "إعدادات الاختصارات" + } + }, + "advanced": { + "title": "الإعدادات الأساسية Verge", + "tooltips": { + "backupInfo": "Support local or WebDAV backup of configuration files", + "openConfDir": "إذا عمل البرنامج بشكل غير طبيعي، قم بالنسخ الاحتياطي ثم حذف جميع الملفات في هذا المجلد ثم أعد تشغيل البرنامج", + "liteMode": "إيقاف الواجهة الرسومية والإبقاء على تشغيل النواة" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "أنت على أحدث إصدار حاليًا", + "versionCopied": "Version copied to clipboard" + }, + "fields": { + "backupSetting": "إعداد النسخ الاحتياطي", + "runtimeConfig": "تكوين وقت التشغيل", + "openConfDir": "فتح مجلد التكوين", + "openCoreDir": "فتح مجلد النواة", + "openLogsDir": "فتح مجلد السجلات", + "checkUpdates": "التحقق من وجود تحديثات", + "openDevTools": "أدوات المطور", + "liteModeSettings": "LightWeight Mode Settings", + "exit": "خروج", + "exportDiagnostics": "Export Diagnostic Info", + "vergeVersion": "إصدار Verge" + } + }, + "theme": { + "title": "إعدادات السمة", + "fields": { + "primaryColor": "اللون الأساسي", + "secondaryColor": "اللون الثانوي", + "primaryText": "النص الأساسي", + "secondaryText": "النص الثانوي", + "infoColor": "لون المعلومات", + "warningColor": "لون التحذير", + "errorColor": "لون الخطأ", + "successColor": "لون النجاح", + "fontFamily": "عائلة الخط", + "cssInjection": "حقن CSS" + }, + "actions": { + "editCss": "Edit CSS" + }, + "dialogs": { + "editCssTitle": "Edit CSS" + } + }, + "layout": { + "title": "إعدادات التخطيط", + "fields": { + "preferSystemTitlebar": "Prefer System Titlebar", + "trafficGraph": "مخطط حركة المرور", + "memoryUsage": "استهلاك الذاكرة", + "proxyGroupIcon": "أيقونة مجموعة الوكلاء", + "hoverNavigator": "Hover Jump Navigator", + "hoverNavigatorDelay": "Hover Jump Navigator Delay", + "navIcon": "أيقونة التنقل", + "trayIcon": "أيقونة شريط المهام", + "showProxyGroupsInline": "Show Proxy Groups Inline", + "commonTrayIcon": "أيقونة شريط مهام عامة", + "systemProxyTrayIcon": "أيقونة شريط المهام لوكيل النظام", + "tunTrayIcon": "أيقونة شريط المهام لـ TUN", + "enableTrayIcon": "Enable Tray Icon", + "enableTraySpeed": "تفعيل سرعة التراي" + }, + "tooltips": { + "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", + "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" + }, + "options": { + "icon": { + "monochrome": "أحادي اللون", + "colorful": "ملون", + "disable": "تعطيل" + } + } + } + } + }, + "modals": { + "clashPort": { + "title": "تكوين المنافذ", + "fields": { + "mixed": "منفذ مختلط", + "socks": "منفذ SOCKS", + "http": "منفذ HTTP(S)", + "redir": "منفذ إعادة التوجيه", + "tproxy": "منفذ Tproxy" + }, + "actions": { + "random": "منفذ عشوائي" + }, + "messages": { + "saved": "Port settings saved", + "saveFailed": "Failed to save port settings" + } + }, + "clashCore": { + "variants": { + "release": "الإصدار المستقر", + "alpha": "الإصدار التجريبي" + } + }, + "liteMode": { + "title": "LightWeight Mode Settings", + "actions": { + "enterNow": "Enter LightWeight Mode Now" + }, + "toggles": { + "autoEnter": "Auto Enter LightWeight Mode" + }, + "tooltips": { + "autoEnter": "Enable to automatically activate LightWeight Mode after the window is closed for a period of time" + }, + "fields": { + "delay": "Auto Enter LightWeight Mode Delay" + }, + "messages": { + "autoEnterHint": "When closing the window, LightWeight Mode will be automatically activated after {{n}} minutes" + } + }, + "backup": { + "title": "إعداد النسخ الاحتياطي", + "tabs": { + "local": "Local backup", + "webdav": "WebDAV backup" + }, + "actions": { + "selectTarget": "Select backup target", + "backup": "نسخ احتياطي", + "export": "Export", + "exportBackup": "Export Backup", + "deleteBackup": "حذف النسخة الاحتياطية", + "restore": "استعادة", + "restoreBackup": "استعادة النسخة الاحتياطية" + }, + "fields": { + "webdavUrl": "عنوان خادم WebDAV", + "username": "اسم المستخدم", + "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." + }, + "messages": { + "webdavUrlRequired": "لا يمكن ترك رابط WebDAV فارغًا", + "invalidWebdavUrl": "تنسيق رابط WebDAV غير صالح", + "usernameRequired": "لا يمكن ترك اسم المستخدم فارغًا", + "passwordRequired": "لا يمكن ترك كلمة المرور فارغة", + "webdavConfigSaved": "تم حفظ إعدادات WebDAV بنجاح", + "webdavConfigSaveFailed": "فشل حفظ إعدادات WebDAV: {{error}}", + "backupCreated": "تم إنشاء النسخة الاحتياطية بنجاح", + "backupFailed": "فشل في النسخ الاحتياطي: {{error}}", + "localBackupCreated": "Local backup created successfully", + "localBackupFailed": "Local backup failed", + "restoreSuccess": "تمت الاستعادة بنجاح، سيعاد تشغيل التطبيق خلال ثانية واحدة", + "localBackupExported": "Local backup exported successfully", + "localBackupExportFailed": "Failed to export local backup", + "confirmDelete": "هل تريد بالتأكيد حذف ملف النسخة الاحتياطية هذا؟", + "confirmRestore": "هل تريد بالتأكيد استعادة ملف النسخة الاحتياطية هذا؟" + }, + "table": { + "filename": "اسم الملف", + "backupTime": "وقت النسخ الاحتياطي", + "actions": "الإجراءات", + "noBackups": "لا توجد نسخ احتياطية متاحة", + "rowsPerPage": "Rows per page" + } + }, + "misc": { + "title": "متفرقات", + "fields": { + "appLogLevel": "مستوى سجلات التطبيق", + "appLogMaxSize": "App Log Max Size", + "appLogMaxCount": "App Log Max Count", + "autoCloseConnections": "إغلاق الاتصالات تلقائيًا", + "autoCheckUpdate": "فحص التحديث تلقائيًا", + "enableBuiltinEnhanced": "تفعيل التحسين المدمج", + "proxyLayoutColumns": "أعمدة عرض الوكيل", + "autoLogClean": "تنظيف السجلات تلقائيًا", + "autoDelayDetection": "اكتشاف التأخير التلقائي", + "defaultLatencyTest": "اختبار التأخير الافتراضي", + "defaultLatencyTimeout": "مهلة التأخير الافتراضية" + }, + "tooltips": { + "autoCloseConnections": "إنهاء الاتصالات القائمة عند تغيير اختيار مجموعة الوكيل أو وضع الوكيل", + "enableBuiltinEnhanced": "معالجة توافق ملف التكوين", + "autoDelayDetection": "يختبر زمن استجابة العقدة الحالية على نحو دوري في الخلفية", + "defaultLatencyTest": "يُستخدم فقط لاختبار طلب HTTP العميل. لن يؤثر على ملف التكوين" + }, + "options": { + "proxyLayoutColumns": { + "auto": "أعمدة تلقائية" + }, + "autoLogClean": { + "never": "عدم التنظيف أبدًا", + "retainDays": "الاحتفاظ لمدة {{n}} يومًا" + } + } + }, + "update": { + "title": "New Version v{{version}}", + "actions": { + "goToRelease": "الانتقال إلى صفحة الإصدارات", + "update": "تحديث" + }, + "messages": { + "portableError": "الإصدار المحمول لا يدعم التحديث داخل التطبيق. يرجى التنزيل والاستبدال يدويًا", + "breakChangeError": "هذا الإصدار هو تحديث رئيسي ولا يدعم التحديث داخل التطبيق. يرجى إلغاء التثبيت وتنزيل الإصدار الجديد وتثبيته يدويًا" + } + }, + "sysproxy": { + "title": "إعداد وكيل النظام", + "fieldsets": { + "currentStatus": "الوكيل الحالي للنظام" + }, + "fields": { + "enableStatus": "حالة التمكين:", + "serverAddr": "عنوان الخادم:", + "pacUrl": "رابط PAC:", + "proxyHost": "مضيف الوكيل", + "usePacMode": "استخدام وضع PAC", + "proxyGuard": "حماية الوكيل", + "guardDuration": "مدة الحماية", + "alwaysUseDefaultBypass": "استخدام التخطي الافتراضي دائمًا", + "proxyBypass": "إعدادات تخطي الوكيل:", + "bypass": "تخطي:", + "pacScriptContent": "محتوى سكريبت PAC" + }, + "tooltips": { + "proxyGuard": "عند التمكين، يمنع برامج أخرى من تعديل إعدادات وكيل النظام" + }, + "messages": { + "durationTooShort": "لا يمكن أن تقل مدة خادم الوكيل عن ثانية واحدة", + "invalidBypass": "تنسيق التخطي غير صالح", + "invalidProxyHost": "تنسيق مضيف الوكيل غير صالح" + }, + "actions": { + "editPac": "تعديل PAC" + } + }, + "tun": { + "title": "وضع TUN", + "fields": { + "stack": "مكدس TUN", + "device": "Device Name", + "autoRoute": "توجيه تلقائي", + "strictRoute": "توجيه صارم", + "autoDetectInterface": "الكشف التلقائي عن الواجهة", + "dnsHijack": "اختطاف DNS", + "mtu": "وحدة الإرسال القصوى" + }, + "tooltips": { + "dnsHijack": "Please use , to separate multiple DNS servers" + }, + "messages": { + "applied": "تم تطبيق الإعدادات" + } + }, + "dns": { + "dialog": { + "title": "DNS Overwrite", + "warning": "If you are not familiar with these settings, please do not modify them and keep DNS Overwrite enabled" + }, + "sections": { + "general": "DNS Settings", + "fallbackFilter": "Fallback Filter Settings", + "hosts": "Hosts Settings" + }, + "fields": { + "enable": "Enable DNS", + "listen": "DNS Listen", + "enhancedMode": "Enhanced Mode", + "fakeIpRange": "Fake IP Range", + "fakeIpFilterMode": "Fake IP Filter Mode", + "ipv6": { + "label": "IPv6", + "description": "Enable IPv6 DNS resolution" + }, + "preferH3": { + "label": "Prefer H3", + "description": "DNS DOH uses HTTP/3" + }, + "respectRules": { + "label": "Respect Rules", + "description": "DNS connections follow routing rules" + }, + "useHosts": { + "label": "Use Hosts", + "description": "Enable to resolve hosts through hosts file" + }, + "useSystemHosts": { + "label": "Use System Hosts", + "description": "Enable to resolve hosts through system hosts file" + }, + "directPolicy": { + "label": "Direct Nameserver Follow Policy", + "description": "Whether to follow nameserver policy" + }, + "defaultNameserver": { + "label": "Default Nameserver", + "description": "Default DNS servers used to resolve DNS servers" + }, + "nameserver": { + "label": "Nameserver", + "description": "List of DNS servers, comma separated" + }, + "fallback": { + "label": "Fallback", + "description": "List of fallback DNS servers, comma separated" + }, + "proxy": { + "label": "Proxy Server Nameserver", + "description": "DNS servers for proxy node domain resolution" + }, + "directNameserver": { + "label": "Direct Nameserver", + "description": "DNS servers for direct exit domain resolution, supports 'system' keyword, comma separated" + }, + "fakeIpFilter": { + "label": "Fake IP Filter", + "description": "Domains that skip fake IP resolution, comma separated" + }, + "nameserverPolicy": { + "label": "Nameserver Policy", + "description": "Domain-specific DNS server, multiple servers separated by semicolons, format: domain=server1;server2" + }, + "geoipFiltering": { + "label": "GeoIP Filtering", + "description": "Enable GeoIP filtering for fallback" + }, + "geoipCode": "GeoIP Code", + "fallbackIpCidr": { + "label": "Fallback IP CIDR", + "description": "IP CIDRs not using fallback servers, comma separated" + }, + "fallbackDomain": { + "label": "Fallback Domain", + "description": "Domains using fallback servers, comma separated" + }, + "hosts": { + "label": "Hosts", + "description": "Custom domain to IP or domain mapping" + } + }, + "messages": { + "saved": "DNS settings saved", + "configError": "DNS configuration error:" + }, + "errors": { + "invalid": "Invalid configuration" + } + }, + "webUI": { + "actions": { + "openUrl": "فتح الرابط" + }, + "title": "واجهة الويب", + "messages": { + "supportedPlaceholders": "يدعم %host و%port و%secret", + "placeholderInstruction": "استبدل المضيف والمنفذ والمفتاح بـ %host و%port و%secret" + } + }, + "hotkey": { + "toggles": { + "enableGlobal": "تمكين مفتاح التشغيل السريع العالمي" + }, + "title": "إعدادات الاختصارات", + "functions": { + "rule": "وضع القواعد", + "global": "الوضع العالمي", + "openOrCloseDashboard": "فتح/إغلاق لوحة التحكم", + "toggleSystemProxy": "تفعيل/تعطيل وكيل النظام", + "toggleTunMode": "تفعيل/تعطيل وضع TUN", + "entryLightweightMode": "Entry Lightweight Mode", + "direct": "الوضع المباشر" + } + }, + "password": { + "prompts": { + "enterRoot": "يرجى إدخال كلمة مرور الرووت" + } + }, + "networkInterface": { + "title": "واجهة الشبكة", + "fields": { + "ipAddress": "عنوان IP", + "macAddress": "عنوان MAC" + } + } + }, + "feedback": { + "notifications": { + "clash": { + "restartSuccess": "تم إعادة تشغيل نواة Clash", + "versionUpdated": "تم تحديث إصدار النواة", + "changeSuccess": "تم تغيير النواة بنجاح", + "changeFailed": "فشل تغيير النواة", + "geoDataUpdated": "تم تحديث البيانات الجغرافية" + }, + "clashService": { + "installSuccess": "تم تثبيت الخدمة بنجاح", + "uninstallSuccess": "تم إلغاء تثبيت الخدمة بنجاح" + }, + "updater": { + "withClashProxySuccess": "Update with Clash proxy successfully", + "withClashProxyFailed": "Update failed even with Clash proxy" + } + } + }, + "statuses": { + "clash": { + "stopping": "Stopping Core...", + "restarting": "Restarting Core..." + }, + "clashService": { + "installing": "جاري تثبيت الخدمة...", + "uninstalling": "Uninstalling Service..." + } + } +} diff --git a/src/locales/ar/shared.json b/src/locales/ar/shared.json new file mode 100644 index 00000000..c644a07f --- /dev/null +++ b/src/locales/ar/shared.json @@ -0,0 +1,128 @@ +{ + "actions": { + "cancel": "إلغاء", + "close": "إغلاق", + "confirm": "تأكيد", + "save": "حفظ", + "delete": "حذف", + "edit": "تعديل", + "new": "جديد", + "enable": "تمكين", + "upgrade": "ترقية", + "restart": "إعادة التشغيل", + "resetToDefault": "إعادة تعيين إلى الافتراضي", + "refresh": "تحديث", + "retry": "Retry", + "refreshPage": "Refresh Page", + "showDetails": "Show Details", + "hideDetails": "Hide Details", + "listView": "عرض القائمة", + "tableView": "عرض الجدول", + "pause": "إيقاف مؤقت", + "resume": "استأنف", + "closeAll": "إغلاق الكل", + "clear": "مسح" + }, + "labels": { + "updateAt": "التحديث عند", + "timeout": "Timeout", + "icon": "أيقونة", + "name": "الاسم", + "readOnly": "للقراءة فقط", + "expireTime": "وقت الانتهاء", + "updateTime": "وقت التحديث", + "usedTotal": "المستخدم / الإجمالي", + "from": "من", + "password": "كلمة المرور", + "retryAttempts": "Retry attempts", + "downloaded": "تم التنزيل", + "uploaded": "تم الرفع" + }, + "statuses": { + "enabled": "ممكّن", + "disabled": "معطّل", + "saving": "Saving...", + "empty": "فارغ" + }, + "units": { + "milliseconds": "ميلي ثانية", + "seconds": "ثواني", + "minutes": "دقائق", + "kilobytes": "KB", + "files": "Files" + }, + "placeholders": { + "filter": "شروط التصفية", + "matchCase": "مطابقة الحالة", + "matchWholeWord": "مطابقة الكلمة بأكملها", + "useRegex": "استخدام التعبيرات العادية" + }, + "validation": { + "invalidRegex": "Invalid regular expression" + }, + "window": { + "maximize": "تكبير", + "minimize": "تصغير" + }, + "editorModes": { + "visualization": "تصور", + "advanced": "متقدم" + }, + "feedback": { + "errors": { + "trafficStats": "Traffic Statistics Error", + "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." + }, + "notices": { + "raw": "{{message}}", + "prefixedRaw": "{{prefix}} {{message}}" + }, + "notifications": { + "importSuccess": "تم استيراد الملف الشخصي بنجاح", + "importSubscriptionSuccess": "تم استيراد الاشتراك بنجاح", + "importWithClashProxy": "Profile Imported with Clash proxy", + "saved": "Saved successfully", + "common": { + "copySuccess": "تم النسخ بنجاح", + "saveSuccess": "Configuration saved successfully", + "saveFailed": "Failed to save configuration" + } + }, + "validation": { + "config": { + "failed": "فشل التحقق من تكوين الاشتراك، يرجى فحص ملف التكوين، تم التراجع عن التغييرات، تفاصيل الخطأ:", + "bootFailed": "فشل التحقق من التكوين عند الإقلاع، تم استخدام التكوين الافتراضي، يرجى فحص ملف التكوين، تفاصيل الخطأ:", + "coreChangeFailed": "فشل التحقق من التكوين عند تغيير النواة، تم استخدام التكوين الافتراضي، يرجى فحص ملف التكوين، تفاصيل الخطأ:", + "processTerminated": "تم إنهاء عملية التحقق" + }, + "script": { + "syntaxError": "خطأ في بناء جملة السكريبت، تم التراجع عن التغييرات", + "missingMain": "خطأ في السكريبت، تم التراجع عن التغييرات", + "fileNotFound": "الملف غير موجود، تم التراجع عن التغييرات", + "fileError": "خطأ في ملف السكريبت، تم التراجع عن التغييرات" + }, + "yaml": { + "syntaxError": "YAML syntax error, changes reverted", + "readError": "YAML read error, changes reverted", + "mappingError": "YAML mapping error, changes reverted", + "keyError": "YAML key error, changes reverted", + "generalError": "YAML error, changes reverted" + }, + "merge": { + "syntaxError": "Merge file syntax error, changes reverted", + "mappingError": "Merge file mapping error, changes reverted", + "keyError": "Merge file key error, changes reverted", + "generalError": "Merge file error, changes reverted" + } + } + }, + "filters": { + "logLevels": { + "all": "ALL", + "debug": "DEBUG", + "info": "INFO", + "warn": "WARN", + "error": "ERROR" + } + } +} diff --git a/src/locales/ar/tests.json b/src/locales/ar/tests.json new file mode 100644 index 00000000..acbc099a --- /dev/null +++ b/src/locales/ar/tests.json @@ -0,0 +1,40 @@ +{ + "page": { + "actions": { + "testAll": "اختبار الكل" + }, + "title": "اختبار" + }, + "components": { + "item": { + "actions": { + "test": "اختبار" + } + } + }, + "modals": { + "test": { + "title": { + "create": "إنشاء اختبار", + "edit": "تعديل الاختبار" + }, + "fields": { + "url": "رابط الاختبار" + } + } + }, + "statuses": { + "test": { + "pending": "Pending", + "yes": "Yes", + "no": "No", + "failed": "Failed", + "completed": "Completed", + "disallowedIsp": "Disallowed ISP", + "originalsOnly": "Originals Only", + "noDisney": "No (IP Banned By Disney+)", + "unsupportedRegion": "Unsupported Country/Region", + "failedNetwork": "Failed (Network Connection)" + } + } +} diff --git a/src/locales/ar/unlock.json b/src/locales/ar/unlock.json new file mode 100644 index 00000000..e97daa76 --- /dev/null +++ b/src/locales/ar/unlock.json @@ -0,0 +1,12 @@ +{ + "page": { + "actions": { + "testing": "Testing..." + }, + "empty": "No unlock test items", + "messages": { + "detectionTimeout": "Detection timeout or failed" + }, + "title": "Unlock Test" + } +} diff --git a/src/locales/de.json b/src/locales/de.json deleted file mode 100644 index d524d49a..00000000 --- a/src/locales/de.json +++ /dev/null @@ -1,1299 +0,0 @@ -{ - "shared": { - "actions": { - "cancel": "Abbrechen", - "close": "Schließen", - "confirm": "Bestätigen", - "save": "Speichern", - "delete": "Löschen", - "edit": "Bearbeiten", - "new": "Neu", - "enable": "Aktivieren", - "upgrade": "Kern aktualisieren", - "restart": "Kern neustarten", - "resetToDefault": "Auf Standardwerte zurücksetzen", - "refresh": "Aktualisieren", - "retry": "Retry", - "refreshPage": "Refresh Page", - "showDetails": "Show Details", - "hideDetails": "Hide Details", - "listView": "Listenansicht", - "tableView": "Tabellenansicht", - "pause": "Pausieren", - "resume": "Fortsetzen", - "closeAll": "Alle schließen", - "clear": "Löschen" - }, - "labels": { - "updateAt": "Aktualisiert am", - "timeout": "Timeout", - "icon": "Symbol", - "name": "Name", - "readOnly": "Schreibgeschützt", - "expireTime": "Ablaufzeit", - "updateTime": "Aktualisierungszeit", - "usedTotal": "Verwendet / Gesamt", - "from": "Von", - "password": "Passwort", - "retryAttempts": "Retry attempts", - "downloaded": "Heruntergeladen", - "uploaded": "Hochgeladen" - }, - "statuses": { - "enabled": "Aktiviert", - "disabled": "Deaktiviert", - "saving": "Saving...", - "empty": "Leer" - }, - "units": { - "milliseconds": "Millisekunden", - "seconds": "Sekunden", - "minutes": "Minuten", - "kilobytes": "KB", - "files": "Files" - }, - "placeholders": { - "filter": "Filterbedingungen", - "matchCase": "Groß-/Kleinschreibung beachten", - "matchWholeWord": "Ganzes Wort übereinstimmen", - "useRegex": "Regulären Ausdruck verwenden" - }, - "validation": { - "invalidRegex": "Invalid regular expression" - }, - "window": { - "maximize": "Maximieren", - "minimize": "Minimieren" - }, - "editorModes": { - "visualization": "Visualisierung", - "advanced": "Erweitert" - }, - "feedback": { - "errors": { - "trafficStats": "Traffic Statistics Error", - "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." - }, - "notices": { - "raw": "{{message}}", - "prefixedRaw": "{{prefix}} {{message}}" - }, - "notifications": { - "importSuccess": "Abonnement erfolgreich importiert", - "importSubscriptionSuccess": "Abonnement erfolgreich importiert", - "importWithClashProxy": "Abonnement mit Clash-Proxy importiert", - "saved": "Saved successfully", - "common": { - "copySuccess": "Kopieren erfolgreich", - "saveSuccess": "Zufalls-Konfiguration erfolgreich gespeichert", - "saveFailed": "Failed to save configuration" - } - }, - "validation": { - "config": { - "failed": "Abonnement-Konfigurationsüberprüfung fehlgeschlagen. Bitte überprüfen Sie die Abonnement-Konfigurationsdatei. Die Änderungen wurden rückgängig gemacht. Fehlerdetails: ", - "bootFailed": "Start-Abonnement-Konfigurationsüberprüfung fehlgeschlagen. Die Standardkonfiguration wurde verwendet, um die App zu starten. Bitte überprüfen Sie die Abonnement-Konfigurationsdatei. Fehlerdetails: ", - "coreChangeFailed": "Konfigurationsüberprüfung beim Wechsel des Kerns fehlgeschlagen. Die Standardkonfiguration wurde verwendet, um die App zu starten. Bitte überprüfen Sie die Abonnement-Konfigurationsdatei. Fehlerdetails: ", - "processTerminated": "Validierungsprozess abgebrochen" - }, - "script": { - "syntaxError": "Skript-Syntaxfehler. Die Änderungen wurden rückgängig gemacht.", - "missingMain": "Skriptfehler. Die Änderungen wurden rückgängig gemacht.", - "fileNotFound": "Datei nicht gefunden. Die Änderungen wurden rückgängig gemacht.", - "fileError": "Skript-Dateifehler. Die Änderungen wurden rückgängig gemacht." - }, - "yaml": { - "syntaxError": "YAML-Syntaxfehler. Die Änderungen wurden rückgängig gemacht.", - "readError": "YAML-Lesefehler. Die Änderungen wurden rückgängig gemacht.", - "mappingError": "YAML-Mappingfehler. Die Änderungen wurden rückgängig gemacht.", - "keyError": "YAML-Schlüsselfehler. Die Änderungen wurden rückgängig gemacht.", - "generalError": "YAML-Fehler. Die Änderungen wurden rückgängig gemacht." - }, - "merge": { - "syntaxError": "Syntaxfehler in der Überdeckungsdatei. Die Änderungen wurden rückgängig gemacht.", - "mappingError": "Mappingfehler in der Überdeckungsdatei. Die Änderungen wurden rückgängig gemacht.", - "keyError": "Schlüsselfehler in der Überdeckungsdatei. Die Änderungen wurden rückgängig gemacht.", - "generalError": "Fehler in der Überdeckungsdatei. Die Änderungen wurden rückgängig gemacht." - } - } - }, - "filters": { - "logLevels": { - "all": "ALL", - "debug": "DEBUG", - "info": "INFO", - "warn": "WARN", - "error": "ERROR" - } - } - }, - "profiles": { - "page": { - "actions": { - "updateAll": "Alle Abonnements aktualisieren", - "viewRuntimeConfig": "Laufzeit-Abonnement anzeigen", - "reactivate": "Abonnement erneut aktivieren", - "import": "Importieren" - }, - "batch": { - "actions": { - "delete": "Delete Selected Profiles", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "done": "Done" - }, - "summary": { - "selected": "Selected", - "items": "items" - }, - "title": "Batch Operations" - }, - "importForm": { - "placeholder": "Abonnement-Datei-Link", - "actions": { - "paste": "Einfügen" - } - }, - "feedback": { - "errors": { - "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", - "onlyYaml": "Nur YAML-Dateien werden unterstützt" - }, - "notifications": { - "importRetry": "Import des Abonnements fehlgeschlagen. Versuche es mit dem Clash-Proxy erneut...", - "importFail": "Import des Abonnements auch mit Clash-Proxy fehlgeschlagen", - "importNeedsRefresh": "Profile imported but may need manual refresh", - "importSuccess": "Profile imported successfully, please restart if not visible", - "profileSwitched": "Abonnement gewechselt", - "profileReactivated": "Abonnement erneut aktiviert", - "switchInterrupted": "Profile switch interrupted by new selection", - "batchDeleted": "Selected profiles deleted successfully" - }, - "notices": { - "forceRefreshCompleted": "Force refresh completed", - "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" - } - }, - "title": "Abonnement" - }, - "components": { - "card": { - "labels": { - "clickToImport": "Klicken Sie hier, um ein Abonnement zu importieren." - } - }, - "fileInput": { - "chooseFile": "Datei auswählen" - }, - "menu": { - "home": "Startseite", - "select": "Verwenden", - "editInfo": "Informationen bearbeiten", - "editFile": "Datei bearbeiten", - "editRules": "Regeln bearbeiten", - "editProxies": "Knoten bearbeiten", - "editGroups": "Proxy-Gruppen bearbeiten", - "extendConfig": "Erweiterte Überdeckungskonfiguration", - "extendScript": "Erweitertes Skript", - "openFile": "Datei öffnen", - "update": "Aktualisieren", - "updateViaProxy": "Update via proxy" - }, - "more": { - "global": { - "merge": "Global Merge", - "script": "Global Script" - }, - "chips": { - "merge": "Merge", - "script": "Script" - } - }, - "profileItem": { - "tooltips": { - "showLast": "Click to show last update time", - "showNext": "Click to show next update" - }, - "status": { - "lastUpdateFailed": "Letzte Aktualisierung fehlgeschlagen", - "nextUp": "Nächste Aktualisierung", - "noSchedule": "Kein Zeitplan", - "unknown": "Unbekannt", - "autoUpdateDisabled": "Automatische Aktualisierung deaktiviert" - } - } - }, - "modals": { - "profileForm": { - "title": { - "create": "Neue Konfiguration erstellen", - "edit": "Konfiguration bearbeiten" - }, - "fields": { - "type": "Typ", - "description": "Beschreibung", - "subscriptionUrl": "Abonnement-Link", - "httpTimeout": "HTTP Request Timeout", - "updateInterval": "Aktualisierungsintervall", - "useSystemProxy": "Systemproxy zur Aktualisierung verwenden", - "useClashProxy": "Kernel-Proxy zur Aktualisierung verwenden", - "acceptInvalidCerts": "Allows Invalid Certificates (Danger)", - "allowAutoUpdate": "Allow Auto Update" - }, - "feedback": { - "notifications": { - "creationRetry": "Erstellung des Abonnements fehlgeschlagen. Versuche es mit dem Clash-Proxy erneut...", - "creationSuccess": "Erstellung des Abonnements mit Clash-Proxy erfolgreich" - } - } - }, - "proxiesEditor": { - "title": "Knoten bearbeiten", - "placeholders": { - "multiUri": "Für mehrere URI verwenden Sie Zeilenumbrüche (Base64-Codierung wird unterstützt)" - }, - "actions": { - "prepend": "Vorherigen Proxy-Knoten hinzufügen", - "append": "Nachfolgenden Proxy-Knoten hinzufügen" - } - }, - "groupsEditor": { - "title": "Proxy-Gruppen bearbeiten", - "errors": { - "nameRequired": "Der Proxy-Gruppenname darf nicht leer sein", - "nameExists": "Der Proxy-Gruppenname existiert bereits" - }, - "fields": { - "type": "Proxy-Gruppentyp", - "name": "Proxy-Gruppenname", - "icon": "Proxy-Gruppen-Symbol", - "proxies": "Proxy einführen", - "provider": "Proxy-Sammlung einführen", - "healthCheckUrl": "URL für Gesundheitstest", - "expectedStatus": "Erwarteter Statuscode", - "interval": "Prüfintervall", - "maxFailedTimes": "Maximale Anzahl fehlgeschlagener Versuche", - "interfaceName": "Ausgangsschnittstelle", - "routingMark": "Routierungsmarkierung", - "filter": "Knoten filtern", - "excludeFilter": "Knoten ausschließen", - "excludeType": "Typ der auszuschließenden Knoten", - "includeAll": "Alle Ausgangsproxy und Proxy-Sammlungen einführen", - "includeAllProxies": "Alle Ausgangsproxy einführen", - "includeAllProviders": "Alle Proxy-Sammlungen einführen" - }, - "toggles": { - "lazy": "Lazy-Status", - "disableUdp": "UDP deaktivieren", - "hidden": "Proxy-Gruppe ausblenden" - }, - "actions": { - "prepend": "Vorherige Proxy-Gruppe hinzufügen", - "append": "Nachfolgende Proxy-Gruppe hinzufügen" - } - }, - "editor": { - "actions": { - "format": "Dokument formatieren" - }, - "messages": { - "readOnly": "Bearbeitung im schreibgeschützten Modus nicht möglich" - } - }, - "confirmDelete": { - "title": "Löschung bestätigen", - "message": "Diese Operation kann nicht rückgängig gemacht werden" - }, - "logViewer": { - "title": "Skript-Konsole-Ausgabe" - } - } - }, - "proxies": { - "page": { - "modes": { - "rule": "Rule", - "global": "Global", - "direct": "Direct" - }, - "actions": { - "toggleChain": "🔗 Ketten-Proxy", - "connect": "Connect", - "disconnect": "Disconnect", - "connecting": "Connecting...", - "clearChainConfig": "Delete Chain Config" - }, - "provider": { - "title": "Proxy-Sammlung", - "actions": { - "updateAll": "Alle aktualisieren", - "update": "Aktualisieren" - } - }, - "rules": { - "title": "Proxy Rules", - "select": "Select Rules" - }, - "labels": { - "proxyCount": "Anzahl der Knoten", - "delayCheckReset": "Latenztest durchführen, um Fixierung aufzuheben" - }, - "tooltips": { - "locate": "Aktueller Knoten", - "delayCheck": "Latenztest", - "sortDefault": "Standard Sortierung", - "sortDelay": "Nach Latenz sortieren", - "sortName": "Nach Name sortieren", - "delayCheckUrl": "Latenztest-URL", - "showBasic": "Knotendetails ausblenden", - "showDetail": "Knotendetails anzeigen", - "filter": "Knoten filtern" - }, - "placeholders": { - "delayCheckUrl": "Latenztest-URL" - }, - "chain": { - "header": "Chain Proxy Config", - "empty": "No proxy chain configured", - "instruction": "Click nodes in order to add to proxy chain", - "minimumNodes": "Chain proxy requires at least 2 nodes", - "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", - "connectFailed": "Failed to connect to proxy chain", - "disconnectFailed": "Failed to disconnect from proxy chain", - "duplicateNode": "Proxy node already exists in chain" - }, - "messages": { - "directMode": "Direktverbindungs-Modus" - }, - "title": { - "default": "Proxy-Gruppen", - "chainMode": "Proxy Chain Mode" - } - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "components": { - "enums": { - "strategies": { - "select": "Proxy manuell auswählen", - "url-test": "Proxy basierend auf URL-Latenztest auswählen", - "fallback": "Bei Nichtverfügbarkeit zu einem anderen Proxy wechseln", - "load-balance": "Proxy basierend auf Lastverteilung zuweisen", - "relay": "Basierend auf definiertem Proxy-Kette weiterleiten" - }, - "policies": { - "DIRECT": "Direktverbindung", - "REJECT": "Anfrage ablehnen", - "REJECT-DROP": "Anfrage verwerfen", - "PASS": "Diese Regel überspringen" - } - } - } - }, - "connections": { - "page": { - "title": "Verbindungen" - }, - "components": { - "fields": { - "host": "Host", - "dlSpeed": "Download-Geschwindigkeit", - "ulSpeed": "Upload-Geschwindigkeit", - "chains": "Ketten", - "rule": "Regel", - "process": "Prozess", - "time": "Verbindungszeit", - "source": "Quelladresse", - "destination": "Zieladresse", - "destinationPort": "Zielport", - "type": "Typ" - }, - "order": { - "default": "Default", - "uploadSpeed": "Upload-Geschwindigkeit", - "downloadSpeed": "Download-Geschwindigkeit" - }, - "actions": { - "closeConnection": "Verbindung schließen" - } - } - }, - "tests": { - "page": { - "actions": { - "testAll": "Alle testen" - }, - "title": "Testen" - }, - "components": { - "item": { - "actions": { - "test": "Testen" - } - } - }, - "modals": { - "test": { - "title": { - "create": "Neuen Test erstellen", - "edit": "Test bearbeiten" - }, - "fields": { - "url": "Test-URL" - } - } - }, - "statuses": { - "test": { - "pending": "Wartend auf Prüfung", - "yes": "Unterstützt", - "no": "Nicht unterstützt", - "failed": "Test fehlgeschlagen", - "completed": "Prüfung abgeschlossen", - "disallowedIsp": "Nicht zugelassener Internetdienstanbieter", - "originalsOnly": "Nur Original", - "noDisney": "No (IP Banned By Disney+)", - "unsupportedRegion": "Nicht unterstütztes Land/Region", - "failedNetwork": "Failed (Network Connection)" - } - } - }, - "logs": { - "page": { - "title": "Protokolle" - } - }, - "rules": { - "page": { - "provider": { - "trigger": "Regelsammlung", - "dialogTitle": "Regelsammlung", - "actions": { - "updateAll": "Alle aktualisieren", - "update": "Aktualisieren" - } - }, - "title": "Regeln" - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "modals": { - "editor": { - "form": { - "labels": { - "type": "Regeltyp", - "content": "Regelinhalt", - "proxyPolicy": "Proxy-Strategie" - }, - "toggles": { - "noResolve": "DNS-Auflösung überspringen" - }, - "actions": { - "prependRule": "Vorherige Regel hinzufügen", - "appendRule": "Nachfolgende Regel hinzufügen" - }, - "validation": { - "conditionRequired": "Regelbedingung fehlt", - "invalidRule": "Ungültige Regel" - } - }, - "ruleTypes": { - "DOMAIN": "Vollständigen Domainnamen übereinstimmen", - "DOMAIN-SUFFIX": "Domain-Suffix übereinstimmen", - "DOMAIN-KEYWORD": "Domain-Schlüsselwort übereinstimmen", - "DOMAIN-REGEX": "Domain-Regulärer Ausdruck übereinstimmen", - "GEOSITE": "Domainnamen in Geosite übereinstimmen", - "GEOIP": "IP-Ländercode übereinstimmen", - "SRC-GEOIP": "Quell-IP-Ländercode übereinstimmen", - "IP-ASN": "IP-ASN übereinstimmen", - "SRC-IP-ASN": "Quell-IP-ASN übereinstimmen", - "IP-CIDR": "IP-Adressbereich übereinstimmen", - "IP-CIDR6": "IP-Adressbereich übereinstimmen", - "SRC-IP-CIDR": "Quell-IP-Adressbereich übereinstimmen", - "IP-SUFFIX": "IP-Suffix-Bereich übereinstimmen", - "SRC-IP-SUFFIX": "Quell-IP-Suffix-Bereich übereinstimmen", - "SRC-PORT": "Quellportbereich der Anfrage übereinstimmen", - "DST-PORT": "Zielportbereich der Anfrage übereinstimmen", - "IN-PORT": "Eingangsport übereinstimmen", - "DSCP": "DSCP-Markierung (nur für TPROXY UDP-Eingang)", - "PROCESS-NAME": "Prozessnamen übereinstimmen (Android-Paketname)", - "PROCESS-PATH": "Vollständigen Prozesspfad übereinstimmen", - "PROCESS-NAME-REGEX": "Regulärer Ausdruck für vollständigen Prozessnamen übereinstimmen (Android-Paketname)", - "PROCESS-PATH-REGEX": "Regulärer Ausdruck für vollständigen Prozesspfad übereinstimmen", - "NETWORK": "Übertragungsprotokoll übereinstimmen (TCP/UDP)", - "UID": "Linux-USER-ID übereinstimmen", - "IN-TYPE": "Eingangstyp übereinstimmen", - "IN-USER": "Eingangsbenutzername übereinstimmen", - "IN-NAME": "Eingangsname übereinstimmen", - "SUB-RULE": "Unterregel", - "RULE-SET": "Regelsatz übereinstimmen", - "AND": "Logisches UND", - "OR": "Logisches ODER", - "NOT": "Logisches NICHT", - "MATCH": "Alle Anfragen übereinstimmen" - }, - "title": "Regeln bearbeiten" - } - } - }, - "home": { - "page": { - "tooltips": { - "lightweightMode": "Leichtgewichtiger Modus", - "manual": "Bedienungsanleitung", - "settings": "Startseite-Einstellungen" - }, - "cards": { - "trafficStats": "Verkehrsstatistik", - "networkSettings": "Netzwerkeinstellungen", - "proxyMode": "Proxy-Modus" - }, - "settings": { - "cards": { - "profile": "Abonnement-Karte", - "currentProxy": "Aktueller Proxy-Karte", - "network": "Netzwerkeinstellungen-Karte", - "proxyMode": "Proxy-Modus-Karte", - "traffic": "Verkehrsstatistik-Karte", - "tests": "Website-Tests-Karte", - "ip": "IP-Informationen-Karte", - "clashInfo": "Clash-Informationen-Karten", - "systemInfo": "Systeminformationen-Karten" - }, - "title": "Startseite-Einstellungen" - }, - "title": "Startseite" - }, - "components": { - "proxyTun": { - "status": { - "systemProxyEnabled": "Der Systemproxy ist aktiviert. Ihre Anwendungen werden über den Proxy auf das Netzwerk zugreifen.", - "systemProxyDisabled": "Der Systemproxy ist deaktiviert. Es wird empfohlen, diesen Eintrag für die meisten Benutzer zu aktivieren.", - "tunModeServiceRequired": "Der TUN-Modus erfordert den Service-Modus. Bitte installieren Sie zuerst den Service.", - "tunModeEnabled": "Der TUN-Modus ist aktiviert. Die Anwendungen werden über die virtuelle Netzwerkschnittstelle auf das Netzwerk zugreifen.", - "tunModeDisabled": "Der TUN-Modus ist deaktiviert. Dies ist für spezielle Anwendungen geeignet." - }, - "tooltips": { - "systemProxy": "Ändern Sie die Proxy-Einstellungen des Betriebssystems. Wenn die Aktivierung fehlschlägt, können Sie die Proxy-Einstellungen des Betriebssystems manuell ändern.", - "tunMode": "Der TUN-Modus kann den gesamten Anwendungsverkehr übernehmen und eignet sich für spezielle Anwendungen, die die Systemproxy-Einstellungen nicht befolgen." - } - }, - "clashInfo": { - "title": "Clash-Informationen", - "fields": { - "coreVersion": "Kernversion", - "systemProxyAddress": "Systemproxy-Adresse", - "mixedPort": "Mixed Port", - "uptime": "Laufzeit", - "rulesCount": "Anzahl der Regeln" - } - }, - "systemInfo": { - "title": "Systeminformationen", - "fields": { - "osInfo": "Betriebssysteminformationen", - "autoLaunch": "Beim Start automatisch starten", - "runningMode": "Betriebsmodus", - "lastCheckUpdate": "Letzte Aktualitätsprüfung", - "vergeVersion": "Verge-Version" - }, - "actions": { - "settings": "Einstellungen" - }, - "tooltips": { - "autoLaunchAdmin": "Der Administrator-Modus unterstützt möglicherweise keine automatische Startfunktion." - }, - "badges": { - "adminMode": "Administrator-Modus", - "serviceMode": "Service-Modus", - "sidecarMode": "Benutzermodus", - "adminServiceMode": "Admin + Service Mode" - } - }, - "ipInfo": { - "title": "IP-Informationen", - "labels": { - "ip": "IP", - "asn": "Autonomes Systemnummer", - "isp": "Internetdienstanbieter", - "org": "Organisation", - "location": "Standort", - "timezone": "Zeitzone", - "autoRefresh": "Automatische Aktualisierung", - "unknown": "Unbekannt" - }, - "errors": { - "load": "IP-Informationen konnten nicht abgerufen werden" - } - }, - "currentProxy": { - "title": "Aktueller Knoten", - "actions": { - "refreshDelay": "Latenztest" - }, - "labels": { - "globalMode": "Global Mode", - "directMode": "Direct Mode", - "group": "Proxy-Gruppe", - "proxy": "Knoten", - "noActiveNode": "Kein aktiver Proxy-Knoten" - } - }, - "tests": { - "title": "Website-Tests" - }, - "traffic": { - "metrics": { - "uploadSpeed": "Upload-Geschwindigkeit", - "downloadSpeed": "Download-Geschwindigkeit", - "activeConnections": "Aktive Verbindungen", - "memoryUsage": "Kern-Speichernutzung" - }, - "legends": { - "upload": "Hochladen", - "download": "Herunterladen" - }, - "patterns": { - "minutes": "{{time}} Minutes" - } - }, - "clashMode": { - "errors": { - "communication": "Core communication error" - }, - "labels": { - "rule": "Regel-Modus", - "global": "Globaler Modus", - "direct": "Direktverbindungs-Modus" - }, - "descriptions": { - "rule": "Automatically choose proxies according to the rule set.", - "global": "Forward all network requests through the selected proxy.", - "direct": "Bypass the proxy and connect to the internet directly." - } - } - } - }, - "unlock": { - "page": { - "actions": { - "testing": "Wird getestet..." - }, - "empty": "No unlock test items", - "messages": { - "detectionTimeout": "Detection timeout or failed" - }, - "title": "Entsperrungstest" - } - }, - "settings": { - "page": { - "actions": { - "manual": "Bedienungsanleitung", - "telegram": "Telegram-Kanal", - "github": "GitHub-Projektadresse" - }, - "title": "Einstellungen" - }, - "sections": { - "system": { - "title": "Systemeinstellungen", - "toggles": { - "tunMode": "Virtual Network Interface-Modus", - "systemProxy": "Systemproxy" - }, - "tooltips": { - "autoLaunchAdmin": "Der Administrator-Modus unterstützt möglicherweise keine automatische Startfunktion.", - "silentStart": "Die Anwendung wird im Hintergrund gestartet, ohne dass das Programmfenster angezeigt wird." - }, - "fields": { - "autoLaunch": "Automatischer Start", - "silentStart": "Leiser Start" - }, - "notifications": { - "tunMode": { - "autoDisabled": "TUN Mode automatically disabled due to service unavailable", - "autoDisableFailed": "Failed to disable TUN Mode automatically" - } - } - }, - "proxyControl": { - "tooltips": { - "systemProxy": "Ändern Sie die Proxy-Einstellungen des Betriebssystems. Wenn die Aktivierung fehlschlägt, können Sie die Proxy-Einstellungen des Betriebssystems manuell ändern.", - "tunMode": "Der TUN-Modus (Virtual Network Interface) übernimmt den gesamten Systemverkehr. Wenn dieser Modus aktiviert ist, muss der Systemproxy nicht geöffnet werden.", - "tunUnavailable": "TUN-Modus erfordert Service-Modus oder Administrator-Modus" - }, - "actions": { - "installService": "Service installieren", - "uninstallService": "Dienst deinstallieren" - }, - "fields": { - "systemProxy": "Systemproxy", - "tunMode": "Virtual Network Interface-Modus" - } - }, - "externalController": { - "title": "Adresse des externen Controllers", - "fields": { - "enable": "Enable External Controller", - "address": "Adresse des externen Controllers", - "secret": "API-Zugangsschlüssel" - }, - "placeholders": { - "address": "Erforderlich", - "secret": "Empfohlene Einstellung" - }, - "tooltips": { - "copy": "In die Zwischenablage kopieren" - }, - "messages": { - "addressRequired": "Controller address cannot be empty", - "secretRequired": "Secret cannot be empty", - "copyFailed": "Kopieren fehlgeschlagen", - "controllerCopied": "API-Port in die Zwischenablage kopiert", - "secretCopied": "API-Schlüssel in die Zwischenablage kopiert" - } - }, - "externalCors": { - "title": "Externe CORS-Konfiguration", - "fields": { - "allowPrivateNetwork": "Zugriff auf privates Netzwerk erlauben", - "allowedOrigins": "Erlaubte Ursprünge" - }, - "placeholders": { - "origin": "Bitte eine gültige URL eingeben" - }, - "actions": { - "add": "Hinzufügen" - }, - "messages": { - "alwaysIncluded": "Immer enthaltene Ursprünge: {{urls}}" - }, - "tooltips": { - "open": "Einstellungen für externe CORS" - } - }, - "appearance": { - "light": "Light", - "dark": "Dark", - "system": "System" - }, - "clash": { - "title": "Clash-Einstellungen", - "form": { - "fields": { - "allowLan": "Netzwerkverbindung im lokalen Netzwerk zulassen", - "dnsOverwrite": "DNS-Überschreibung", - "ipv6": "IPv6", - "unifiedDelay": "Einheitliche Latenz", - "logLevel": "Protokolliergrad", - "portConfig": "Port-Konfiguration", - "external": "Externe Steuerung", - "webUI": "Web-Oberfläche", - "clashCore": "Clash-Kern", - "openUwpTool": "UWP-Tool öffnen", - "updateGeoData": "Geo-Daten aktualisieren" - }, - "tooltips": { - "networkInterface": "Netzwerkschnittstelle", - "unifiedDelay": "Wenn die einheitliche Latenz aktiviert ist, werden zwei Latenztests durchgeführt, um die Latenzunterschiede zwischen verschiedenen Knotentypen aufgrund von Verbindungsaufbau und anderen Faktoren zu eliminieren.", - "logLevel": "Dies wirkt sich nur auf die Kernprotokolldateien im Verzeichnis Service im Protokollverzeichnis aus.", - "openUwpTool": "Ab Windows 8 wird die direkte Netzwerkverbindung von UWP-Anwendungen (z. B. Microsoft Store) zu lokalen Hosts eingeschränkt. Mit diesem Tool können Sie diese Einschränkung umgehen." - }, - "options": { - "logLevel": { - "debug": "Debug", - "info": "Info", - "warning": "Warn", - "error": "Error", - "silent": "Silent" - } - } - } - } - }, - "components": { - "verge": { - "basic": { - "title": "Verge-Grundeinstellungen", - "actions": { - "browse": "Durchsuchen" - }, - "trayOptions": { - "showMainWindow": "Hauptfenster anzeigen", - "showTrayMenu": "Tray-Menü anzeigen", - "disable": "Deaktivieren" - }, - "fields": { - "language": "Spracheinstellungen", - "themeMode": "Thema", - "trayClickEvent": "Tray-Klickereignis", - "copyEnvType": "Umgebungsvariablentyp kopieren", - "startPage": "Startseite", - "startupScript": "Startskript", - "themeSetting": "Thema-Einstellungen", - "layoutSetting": "Layout-Einstellungen", - "misc": "Sonstige Einstellungen", - "hotkeySetting": "Tastenkombinationseinstellungen" - } - }, - "advanced": { - "title": "Verge-Erweiterte Einstellungen", - "tooltips": { - "backupInfo": "Unterstützt die Sicherung von Konfigurationsdateien über WebDAV", - "openConfDir": "Wenn die Software fehlerhaft funktioniert, !sichern Sie! alle Dateien in diesem Verzeichnis, löschen Sie sie und starten Sie die Software neu.", - "liteMode": "GUI-Oberfläche schließen, nur den Kern laufen lassen" - }, - "actions": { - "copyVersion": "Copy Version" - }, - "notifications": { - "latestVersion": "Sie verwenden bereits die neueste Version", - "versionCopied": "Version copied to clipboard" - }, - "fields": { - "backupSetting": "Sicherungseinstellungen", - "runtimeConfig": "Aktuelle Konfiguration", - "openConfDir": "Konfigurationsverzeichnis", - "openCoreDir": "Kernverzeichnis", - "openLogsDir": "Protokollverzeichnis", - "checkUpdates": "Auf Updates prüfen", - "openDevTools": "Entwicklertools öffnen", - "liteModeSettings": "Einstellungen für den Leichtgewichtigen Modus", - "exit": "Beenden", - "exportDiagnostics": "Diagnoseinformationen exportieren", - "vergeVersion": "Verge-Version" - } - }, - "theme": { - "title": "Thema-Einstellungen", - "fields": { - "primaryColor": "Hauptfarbe", - "secondaryColor": "Sekundärfarbe", - "primaryText": "Haupttextfarbe", - "secondaryText": "Sekundärtextfarbe", - "infoColor": "Informationsfarbe", - "warningColor": "Warnfarbe", - "errorColor": "Fehlerfarbe", - "successColor": "Erfolgsfarbe", - "fontFamily": "Schriftfamilie", - "cssInjection": "CSS-Einbindung" - }, - "actions": { - "editCss": "Edit CSS" - }, - "dialogs": { - "editCssTitle": "Edit CSS" - } - }, - "layout": { - "title": "Layout-Einstellungen", - "fields": { - "preferSystemTitlebar": "Prefer System Titlebar", - "trafficGraph": "Verkehrsdiagramm", - "memoryUsage": "Kern-Speichernutzung", - "proxyGroupIcon": "Proxy-Gruppen-Symbol", - "hoverNavigator": "Hover Jump Navigator", - "hoverNavigatorDelay": "Hover Jump Navigator Delay", - "navIcon": "Navigationsleiste-Symbol", - "trayIcon": "Tray-Symbol", - "showProxyGroupsInline": "Show Proxy Groups Inline", - "commonTrayIcon": "Standard-Tray-Symbol", - "systemProxyTrayIcon": "Systemproxy-Tray-Symbol", - "tunTrayIcon": "TUN-Modus-Tray-Symbol", - "enableTrayIcon": "Tray-Symbol aktivieren", - "enableTraySpeed": "Tray-Geschwindigkeit aktivieren" - }, - "tooltips": { - "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", - "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" - }, - "options": { - "icon": { - "monochrome": "Monochromes Symbol", - "colorful": "Farbiges Symbol", - "disable": "Deaktivieren" - } - } - } - } - }, - "modals": { - "clashPort": { - "title": "Port-Konfiguration", - "fields": { - "mixed": "Mischter Proxy-Port", - "socks": "SOCKS-Proxy-Port", - "http": "HTTP(S)-Proxy-Port", - "redir": "Redir-Transparenter Proxy-Port", - "tproxy": "TPROXY-Transparenter Proxy-Port" - }, - "actions": { - "random": "Zufälliger Port" - }, - "messages": { - "saved": "Port settings saved", - "saveFailed": "Failed to save port settings" - } - }, - "clashCore": { - "variants": { - "release": "Stabile Version", - "alpha": "Alpha-Version" - } - }, - "liteMode": { - "title": "Einstellungen für den Leichtgewichtigen Modus", - "actions": { - "enterNow": "Sofort in den Leichtgewichtigen Modus wechseln" - }, - "toggles": { - "autoEnter": "Automatisch in den Leichtgewichtigen Modus wechseln" - }, - "tooltips": { - "autoEnter": "Wenn diese Option aktiviert ist, wird der Leichtgewichtige Modus automatisch aktiviert, nachdem das Fenster für eine bestimmte Zeit geschlossen wurde." - }, - "fields": { - "delay": "Verzögerung beim automatischen Wechsel in den Leichtgewichtigen Modus" - }, - "messages": { - "autoEnterHint": "Nach dem Schließen des Fensters wird der Leichtgewichtige Modus automatisch nach {{n}} Minuten aktiviert." - } - }, - "backup": { - "title": "Sicherungseinstellungen", - "tabs": { - "local": "Local backup", - "webdav": "WebDAV backup" - }, - "actions": { - "selectTarget": "Select backup target", - "backup": "Sichern", - "export": "Export", - "exportBackup": "Export Backup", - "deleteBackup": "Sicherung löschen", - "restore": "Wiederherstellen", - "restoreBackup": "Sicherung wiederherstellen" - }, - "fields": { - "webdavUrl": "WebDAV-Serveradresse http(s)://", - "username": "Benutzername", - "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." - }, - "messages": { - "webdavUrlRequired": "Die WebDAV-Serveradresse darf nicht leer sein", - "invalidWebdavUrl": "Ungültiges Format für die WebDAV-Serveradresse", - "usernameRequired": "Der Benutzername darf nicht leer sein", - "passwordRequired": "Das Passwort darf nicht leer sein", - "webdavConfigSaved": "WebDAV-Konfiguration erfolgreich gespeichert", - "webdavConfigSaveFailed": "Speichern der WebDAV-Konfiguration fehlgeschlagen: {{error}}", - "backupCreated": "Sicherung erfolgreich erstellt", - "backupFailed": "Sicherung fehlgeschlagen: {{error}}", - "localBackupCreated": "Local backup created successfully", - "localBackupFailed": "Local backup failed", - "restoreSuccess": "Wiederherstellung erfolgreich. Die App wird in 1 Sekunde neu starten.", - "localBackupExported": "Local backup exported successfully", - "localBackupExportFailed": "Failed to export local backup", - "confirmDelete": "Confirm to delete this backup file?", - "confirmRestore": "Confirm to restore this backup file?" - }, - "table": { - "filename": "Dateiname", - "backupTime": "Sicherungszeit", - "actions": "Aktionen", - "noBackups": "Keine Sicherungen vorhanden", - "rowsPerPage": "Rows per page" - } - }, - "misc": { - "title": "Sonstige Einstellungen", - "fields": { - "appLogLevel": "Anwendungs-Protokolliergrad", - "appLogMaxSize": "App Log Max Size", - "appLogMaxCount": "App Log Max Count", - "autoCloseConnections": "Verbindungen automatisch schließen", - "autoCheckUpdate": "Automatisch auf Updates prüfen", - "enableBuiltinEnhanced": "Eingebaute Verbesserungen aktivieren", - "proxyLayoutColumns": "Anzahl der Spalten im Proxy-Layout", - "autoLogClean": "Protokolle automatisch bereinigen", - "autoDelayDetection": "Automatische Latenzprüfung", - "defaultLatencyTest": "Standard-Testlink", - "defaultLatencyTimeout": "Test-Timeout" - }, - "tooltips": { - "autoCloseConnections": "Wenn der ausgewählte Knoten in der Proxy-Gruppe oder der Proxy-Modus geändert wird, werden die bestehenden Verbindungen geschlossen.", - "enableBuiltinEnhanced": "Kompatibilitätsbehandlung der Konfigurationsdatei", - "autoDelayDetection": "Überprüft regelmäßig im Hintergrund die Latenz des aktuellen Knotens", - "defaultLatencyTest": "Dies wird nur für HTTP-Client-Anfragentests verwendet und hat keine Auswirkungen auf die Konfigurationsdatei." - }, - "options": { - "proxyLayoutColumns": { - "auto": "Automatische Anzahl der Spalten" - }, - "autoLogClean": { - "never": "Nie bereinigen", - "retainDays": "{{n}} Tage behalten" - } - } - }, - "update": { - "title": "New Version v{{version}}", - "actions": { - "goToRelease": "Zur Veröffentlichungsseite gehen", - "update": "Aktualisieren" - }, - "messages": { - "portableError": "Die portable Version unterstützt keine In-App-Aktualisierung. Bitte laden Sie die Dateien manuell herunter und ersetzen Sie sie.", - "breakChangeError": "Dies ist eine wichtige Aktualisierung. Die In-App-Aktualisierung wird nicht unterstützt. Bitte deinstallieren Sie die Software und laden Sie die neue Version manuell herunter und installieren Sie sie." - } - }, - "sysproxy": { - "title": "Systemproxy-Einstellungen", - "fieldsets": { - "currentStatus": "Aktueller Systemproxy" - }, - "fields": { - "enableStatus": "Aktivierungsstatus: ", - "serverAddr": "Serveradresse: ", - "pacUrl": "PAC-Adresse: ", - "proxyHost": "Proxy-Host", - "usePacMode": "PAC-Modus verwenden", - "proxyGuard": "Systemproxy-Schutz", - "guardDuration": "Proxy-Schutz-Intervall", - "alwaysUseDefaultBypass": "Immer die Standard-Umgehung verwenden", - "proxyBypass": "Proxy-Umgehungseinstellungen: ", - "bypass": "Aktuelle Umgehung: ", - "pacScriptContent": "PAC-Skriptinhalt" - }, - "tooltips": { - "proxyGuard": "Aktivieren Sie diese Option, um zu verhindern, dass andere Software die Proxy-Einstellungen des Betriebssystems ändert." - }, - "messages": { - "durationTooShort": "Das Intervall des Proxy-Daemons darf nicht weniger als 1 Sekunde betragen.", - "invalidBypass": "Ungültiges Format für die Proxy-Umgehung", - "invalidProxyHost": "Ungültiges Format für den Proxy-Host" - }, - "actions": { - "editPac": "Bearbeiten PAC" - } - }, - "tun": { - "title": "Virtual Network Interface-Modus", - "fields": { - "stack": "TUN-Modus-Stack", - "device": "Device Name", - "autoRoute": "Globale Routing automatisch einstellen", - "strictRoute": "Strenges Routing", - "autoDetectInterface": "Netzwerkschnittstelle automatisch auswählen", - "dnsHijack": "DNS-Hijacking", - "mtu": "Maximale Übertragungseinheit" - }, - "tooltips": { - "dnsHijack": "Please use , to separate multiple DNS servers" - }, - "messages": { - "applied": "Einstellungen angewendet" - } - }, - "dns": { - "dialog": { - "title": "DNS-Überschreibung", - "warning": "Wenn Sie sich nicht mit diesen Einstellungen auskennen, ändern Sie sie nicht und lassen Sie die DNS-Überschreibung aktiviert." - }, - "sections": { - "general": "DNS-Einstellungen", - "fallbackFilter": "Rückfallfilter-Einstellungen", - "hosts": "Hosts-Einstellungen" - }, - "fields": { - "enable": "DNS aktivieren", - "listen": "DNS-Lauschangabe", - "enhancedMode": "Erweiterter Modus", - "fakeIpRange": "Fake-IP-Bereich", - "fakeIpFilterMode": "Fake-IP-Filtermodus", - "ipv6": { - "label": "IPv6", - "description": "IPv6-DNS-Auflösung aktivieren" - }, - "preferH3": { - "label": "HTTP/3 bevorzugen", - "description": "DNS DOH verwendet HTTP/3-Protokoll" - }, - "respectRules": { - "label": "Routierungsregeln beachten", - "description": "DNS-Verbindungen folgen den Routierungsregeln" - }, - "useHosts": { - "label": "Hosts verwenden", - "description": "Aktivieren Sie die Auflösung von Hosts über die hosts-Datei" - }, - "useSystemHosts": { - "label": "System-Hosts verwenden", - "description": "Aktivieren Sie die Auflösung von Hosts über die System-hosts-Datei" - }, - "directPolicy": { - "label": "Direkte Namenserver folgen der Strategie", - "description": "Ob die Namenserver-Strategie befolgt werden soll" - }, - "defaultNameserver": { - "label": "Standard-Namenserver", - "description": "Standard-DNS-Server, die zum Auflösen von DNS-Servern verwendet werden" - }, - "nameserver": { - "label": "Namenserver", - "description": "Liste der DNS-Server, getrennt durch Kommas" - }, - "fallback": { - "label": "Rückfallserver", - "description": "Liste der Rückfall-DNS-Server, getrennt durch Kommas" - }, - "proxy": { - "label": "Proxy-Server-Namenserver", - "description": "Proxy-Knoten-Namenserver, nur für die Auflösung der Domains von Proxy-Knoten verwendet, getrennt durch Kommas" - }, - "directNameserver": { - "label": "Direkter Namenserver", - "description": "Direkter Ausgangs-Namenserver, unterstützt das Schlüsselwort system, getrennt durch Kommas" - }, - "fakeIpFilter": { - "label": "Fake-IP-Filter", - "description": "Domains, die die Fake-IP-Auflösung überspringen, getrennt durch Kommas" - }, - "nameserverPolicy": { - "label": "Namenserver-Strategie", - "description": "Domain-spezifischer DNS-Server, mehrere Server getrennt durch Semikolons, Format: domain=server1;server2" - }, - "geoipFiltering": { - "label": "GeoIP-Filterung", - "description": "GeoIP-Rückfallfilterung aktivieren" - }, - "geoipCode": "GeoIP-Ländercode", - "fallbackIpCidr": { - "label": "Rückfall-IP-CIDR", - "description": "IP-CIDRs, die keine Rückfallserver verwenden, getrennt durch Kommas" - }, - "fallbackDomain": { - "label": "Rückfall-Domäne", - "description": "Domains, die Rückfallserver verwenden, getrennt durch Kommas" - }, - "hosts": { - "label": "Hosts", - "description": "Benutzerdefinierte Zuordnung von Domains zu IPs oder Domains, getrennt durch Kommas" - } - }, - "messages": { - "saved": "DNS-Einstellungen wurden gespeichert", - "configError": "DNS configuration error:" - }, - "errors": { - "invalid": "Invalid configuration" - } - }, - "webUI": { - "actions": { - "openUrl": "Link öffnen" - }, - "title": "Web-Oberfläche", - "messages": { - "supportedPlaceholders": "Unterstützt %host, %port, %secret", - "placeholderInstruction": "Verwenden Sie %host, %port, %secret für Host, Port und Zugangsschlüssel" - } - }, - "hotkey": { - "toggles": { - "enableGlobal": "Globale Tastenkombinationen aktivieren" - }, - "title": "Tastenkombinationseinstellungen", - "functions": { - "rule": "Regel-Modus", - "global": "Globaler Modus", - "openOrCloseDashboard": "Dashboard öffnen/schließen", - "toggleSystemProxy": "Systemproxy ein/ausschalten", - "toggleTunMode": "TUN-Modus ein/ausschalten", - "entryLightweightMode": "Leichtgewichtigen Modus betreten", - "direct": "Direktverbindungs-Modus" - } - }, - "password": { - "prompts": { - "enterRoot": "Bitte geben Sie Ihr Root-Passwort ein." - } - }, - "networkInterface": { - "title": "Netzwerkschnittstelle", - "fields": { - "ipAddress": "IP-Adresse", - "macAddress": "MAC-Adresse" - } - } - }, - "feedback": { - "notifications": { - "clash": { - "restartSuccess": "Clash-Kern wurde neu gestartet", - "versionUpdated": "Kernversion wurde aktualisiert", - "changeSuccess": "Kern erfolgreich gewechselt", - "changeFailed": "Kernwechsel fehlgeschlagen", - "geoDataUpdated": "Geo-Daten wurden aktualisiert" - }, - "clashService": { - "installSuccess": "Service erfolgreich installiert", - "uninstallSuccess": "Service erfolgreich deinstalliert" - }, - "updater": { - "withClashProxySuccess": "Aktualisierung mit Clash-Proxy erfolgreich", - "withClashProxyFailed": "Aktualisierung auch mit Clash-Proxy fehlgeschlagen" - } - } - }, - "statuses": { - "clash": { - "stopping": "Kern wird gestoppt...", - "restarting": "Kern wird neu gestartet..." - }, - "clashService": { - "installing": "Service wird installiert...", - "uninstalling": "Service wird deinstalliert..." - } - } - }, - "layout": { - "components": { - "navigation": { - "tabs": { - "home": "Startseite", - "proxies": "Proxy", - "profiles": "Abonnement", - "connections": "Verbindungen", - "rules": "Regeln", - "logs": "Protokolle", - "unlock": "Testen", - "settings": "Einstellungen" - }, - "menu": { - "reorderMode": "Menu reorder mode", - "unlock": "Unlock menu order", - "lock": "Lock menu order" - } - } - } - } -} diff --git a/src/locales/de/connections.json b/src/locales/de/connections.json new file mode 100644 index 00000000..97af29ee --- /dev/null +++ b/src/locales/de/connections.json @@ -0,0 +1,28 @@ +{ + "page": { + "title": "Verbindungen" + }, + "components": { + "fields": { + "host": "Host", + "dlSpeed": "Download-Geschwindigkeit", + "ulSpeed": "Upload-Geschwindigkeit", + "chains": "Ketten", + "rule": "Regel", + "process": "Prozess", + "time": "Verbindungszeit", + "source": "Quelladresse", + "destination": "Zieladresse", + "destinationPort": "Zielport", + "type": "Typ" + }, + "order": { + "default": "Default", + "uploadSpeed": "Upload-Geschwindigkeit", + "downloadSpeed": "Download-Geschwindigkeit" + }, + "actions": { + "closeConnection": "Verbindung schließen" + } + } +} diff --git a/src/locales/de/home.json b/src/locales/de/home.json new file mode 100644 index 00000000..f657ae90 --- /dev/null +++ b/src/locales/de/home.json @@ -0,0 +1,138 @@ +{ + "page": { + "tooltips": { + "lightweightMode": "Leichtgewichtiger Modus", + "manual": "Bedienungsanleitung", + "settings": "Startseite-Einstellungen" + }, + "cards": { + "trafficStats": "Verkehrsstatistik", + "networkSettings": "Netzwerkeinstellungen", + "proxyMode": "Proxy-Modus" + }, + "settings": { + "cards": { + "profile": "Abonnement-Karte", + "currentProxy": "Aktueller Proxy-Karte", + "network": "Netzwerkeinstellungen-Karte", + "proxyMode": "Proxy-Modus-Karte", + "traffic": "Verkehrsstatistik-Karte", + "tests": "Website-Tests-Karte", + "ip": "IP-Informationen-Karte", + "clashInfo": "Clash-Informationen-Karten", + "systemInfo": "Systeminformationen-Karten" + }, + "title": "Startseite-Einstellungen" + }, + "title": "Startseite" + }, + "components": { + "proxyTun": { + "status": { + "systemProxyEnabled": "Der Systemproxy ist aktiviert. Ihre Anwendungen werden über den Proxy auf das Netzwerk zugreifen.", + "systemProxyDisabled": "Der Systemproxy ist deaktiviert. Es wird empfohlen, diesen Eintrag für die meisten Benutzer zu aktivieren.", + "tunModeServiceRequired": "Der TUN-Modus erfordert den Service-Modus. Bitte installieren Sie zuerst den Service.", + "tunModeEnabled": "Der TUN-Modus ist aktiviert. Die Anwendungen werden über die virtuelle Netzwerkschnittstelle auf das Netzwerk zugreifen.", + "tunModeDisabled": "Der TUN-Modus ist deaktiviert. Dies ist für spezielle Anwendungen geeignet." + }, + "tooltips": { + "systemProxy": "Ändern Sie die Proxy-Einstellungen des Betriebssystems. Wenn die Aktivierung fehlschlägt, können Sie die Proxy-Einstellungen des Betriebssystems manuell ändern.", + "tunMode": "Der TUN-Modus kann den gesamten Anwendungsverkehr übernehmen und eignet sich für spezielle Anwendungen, die die Systemproxy-Einstellungen nicht befolgen." + } + }, + "clashInfo": { + "title": "Clash-Informationen", + "fields": { + "coreVersion": "Kernversion", + "systemProxyAddress": "Systemproxy-Adresse", + "mixedPort": "Mixed Port", + "uptime": "Laufzeit", + "rulesCount": "Anzahl der Regeln" + } + }, + "systemInfo": { + "title": "Systeminformationen", + "fields": { + "osInfo": "Betriebssysteminformationen", + "autoLaunch": "Beim Start automatisch starten", + "runningMode": "Betriebsmodus", + "lastCheckUpdate": "Letzte Aktualitätsprüfung", + "vergeVersion": "Verge-Version" + }, + "actions": { + "settings": "Einstellungen" + }, + "tooltips": { + "autoLaunchAdmin": "Der Administrator-Modus unterstützt möglicherweise keine automatische Startfunktion." + }, + "badges": { + "adminMode": "Administrator-Modus", + "serviceMode": "Service-Modus", + "sidecarMode": "Benutzermodus", + "adminServiceMode": "Admin + Service Mode" + } + }, + "ipInfo": { + "title": "IP-Informationen", + "labels": { + "ip": "IP", + "asn": "Autonomes Systemnummer", + "isp": "Internetdienstanbieter", + "org": "Organisation", + "location": "Standort", + "timezone": "Zeitzone", + "autoRefresh": "Automatische Aktualisierung", + "unknown": "Unbekannt" + }, + "errors": { + "load": "IP-Informationen konnten nicht abgerufen werden" + } + }, + "currentProxy": { + "title": "Aktueller Knoten", + "actions": { + "refreshDelay": "Latenztest" + }, + "labels": { + "globalMode": "Global Mode", + "directMode": "Direct Mode", + "group": "Proxy-Gruppe", + "proxy": "Knoten", + "noActiveNode": "Kein aktiver Proxy-Knoten" + } + }, + "tests": { + "title": "Website-Tests" + }, + "traffic": { + "metrics": { + "uploadSpeed": "Upload-Geschwindigkeit", + "downloadSpeed": "Download-Geschwindigkeit", + "activeConnections": "Aktive Verbindungen", + "memoryUsage": "Kern-Speichernutzung" + }, + "legends": { + "upload": "Hochladen", + "download": "Herunterladen" + }, + "patterns": { + "minutes": "{{time}} Minutes" + } + }, + "clashMode": { + "errors": { + "communication": "Core communication error" + }, + "labels": { + "rule": "Regel-Modus", + "global": "Globaler Modus", + "direct": "Direktverbindungs-Modus" + }, + "descriptions": { + "rule": "Automatically choose proxies according to the rule set.", + "global": "Forward all network requests through the selected proxy.", + "direct": "Bypass the proxy and connect to the internet directly." + } + } + } +} diff --git a/src/locales/de/index.ts b/src/locales/de/index.ts new file mode 100644 index 00000000..2977171d --- /dev/null +++ b/src/locales/de/index.ts @@ -0,0 +1,27 @@ +import shared from "./shared.json"; +import profiles from "./profiles.json"; +import proxies from "./proxies.json"; +import connections from "./connections.json"; +import tests from "./tests.json"; +import logs from "./logs.json"; +import rules from "./rules.json"; +import home from "./home.json"; +import unlock from "./unlock.json"; +import settings from "./settings.json"; +import layout from "./layout.json"; + +const resources = { + "shared": shared, + "profiles": profiles, + "proxies": proxies, + "connections": connections, + "tests": tests, + "logs": logs, + "rules": rules, + "home": home, + "unlock": unlock, + "settings": settings, + "layout": layout, +}; + +export default resources; diff --git a/src/locales/de/layout.json b/src/locales/de/layout.json new file mode 100644 index 00000000..b3026730 --- /dev/null +++ b/src/locales/de/layout.json @@ -0,0 +1,21 @@ +{ + "components": { + "navigation": { + "tabs": { + "home": "Startseite", + "proxies": "Proxy", + "profiles": "Abonnement", + "connections": "Verbindungen", + "rules": "Regeln", + "logs": "Protokolle", + "unlock": "Testen", + "settings": "Einstellungen" + }, + "menu": { + "reorderMode": "Menu reorder mode", + "unlock": "Unlock menu order", + "lock": "Lock menu order" + } + } + } +} diff --git a/src/locales/de/logs.json b/src/locales/de/logs.json new file mode 100644 index 00000000..aec2ccf0 --- /dev/null +++ b/src/locales/de/logs.json @@ -0,0 +1,5 @@ +{ + "page": { + "title": "Protokolle" + } +} diff --git a/src/locales/de/profiles.json b/src/locales/de/profiles.json new file mode 100644 index 00000000..1628bb11 --- /dev/null +++ b/src/locales/de/profiles.json @@ -0,0 +1,182 @@ +{ + "page": { + "actions": { + "updateAll": "Alle Abonnements aktualisieren", + "viewRuntimeConfig": "Laufzeit-Abonnement anzeigen", + "reactivate": "Abonnement erneut aktivieren", + "import": "Importieren" + }, + "batch": { + "actions": { + "delete": "Delete Selected Profiles", + "selectAll": "Select All", + "deselectAll": "Deselect All", + "done": "Done" + }, + "summary": { + "selected": "Selected", + "items": "items" + }, + "title": "Batch Operations" + }, + "importForm": { + "placeholder": "Abonnement-Datei-Link", + "actions": { + "paste": "Einfügen" + } + }, + "feedback": { + "errors": { + "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", + "onlyYaml": "Nur YAML-Dateien werden unterstützt" + }, + "notifications": { + "importRetry": "Import des Abonnements fehlgeschlagen. Versuche es mit dem Clash-Proxy erneut...", + "importFail": "Import des Abonnements auch mit Clash-Proxy fehlgeschlagen", + "importNeedsRefresh": "Profile imported but may need manual refresh", + "importSuccess": "Profile imported successfully, please restart if not visible", + "profileSwitched": "Abonnement gewechselt", + "profileReactivated": "Abonnement erneut aktiviert", + "switchInterrupted": "Profile switch interrupted by new selection", + "batchDeleted": "Selected profiles deleted successfully" + }, + "notices": { + "forceRefreshCompleted": "Force refresh completed", + "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" + } + }, + "title": "Abonnement" + }, + "components": { + "card": { + "labels": { + "clickToImport": "Klicken Sie hier, um ein Abonnement zu importieren." + } + }, + "fileInput": { + "chooseFile": "Datei auswählen" + }, + "menu": { + "home": "Startseite", + "select": "Verwenden", + "editInfo": "Informationen bearbeiten", + "editFile": "Datei bearbeiten", + "editRules": "Regeln bearbeiten", + "editProxies": "Knoten bearbeiten", + "editGroups": "Proxy-Gruppen bearbeiten", + "extendConfig": "Erweiterte Überdeckungskonfiguration", + "extendScript": "Erweitertes Skript", + "openFile": "Datei öffnen", + "update": "Aktualisieren", + "updateViaProxy": "Update via proxy" + }, + "more": { + "global": { + "merge": "Global Merge", + "script": "Global Script" + }, + "chips": { + "merge": "Merge", + "script": "Script" + } + }, + "profileItem": { + "tooltips": { + "showLast": "Click to show last update time", + "showNext": "Click to show next update" + }, + "status": { + "lastUpdateFailed": "Letzte Aktualisierung fehlgeschlagen", + "nextUp": "Nächste Aktualisierung", + "noSchedule": "Kein Zeitplan", + "unknown": "Unbekannt", + "autoUpdateDisabled": "Automatische Aktualisierung deaktiviert" + } + } + }, + "modals": { + "profileForm": { + "title": { + "create": "Neue Konfiguration erstellen", + "edit": "Konfiguration bearbeiten" + }, + "fields": { + "type": "Typ", + "description": "Beschreibung", + "subscriptionUrl": "Abonnement-Link", + "httpTimeout": "HTTP Request Timeout", + "updateInterval": "Aktualisierungsintervall", + "useSystemProxy": "Systemproxy zur Aktualisierung verwenden", + "useClashProxy": "Kernel-Proxy zur Aktualisierung verwenden", + "acceptInvalidCerts": "Allows Invalid Certificates (Danger)", + "allowAutoUpdate": "Allow Auto Update" + }, + "feedback": { + "notifications": { + "creationRetry": "Erstellung des Abonnements fehlgeschlagen. Versuche es mit dem Clash-Proxy erneut...", + "creationSuccess": "Erstellung des Abonnements mit Clash-Proxy erfolgreich" + } + } + }, + "proxiesEditor": { + "title": "Knoten bearbeiten", + "placeholders": { + "multiUri": "Für mehrere URI verwenden Sie Zeilenumbrüche (Base64-Codierung wird unterstützt)" + }, + "actions": { + "prepend": "Vorherigen Proxy-Knoten hinzufügen", + "append": "Nachfolgenden Proxy-Knoten hinzufügen" + } + }, + "groupsEditor": { + "title": "Proxy-Gruppen bearbeiten", + "errors": { + "nameRequired": "Der Proxy-Gruppenname darf nicht leer sein", + "nameExists": "Der Proxy-Gruppenname existiert bereits" + }, + "fields": { + "type": "Proxy-Gruppentyp", + "name": "Proxy-Gruppenname", + "icon": "Proxy-Gruppen-Symbol", + "proxies": "Proxy einführen", + "provider": "Proxy-Sammlung einführen", + "healthCheckUrl": "URL für Gesundheitstest", + "expectedStatus": "Erwarteter Statuscode", + "interval": "Prüfintervall", + "maxFailedTimes": "Maximale Anzahl fehlgeschlagener Versuche", + "interfaceName": "Ausgangsschnittstelle", + "routingMark": "Routierungsmarkierung", + "filter": "Knoten filtern", + "excludeFilter": "Knoten ausschließen", + "excludeType": "Typ der auszuschließenden Knoten", + "includeAll": "Alle Ausgangsproxy und Proxy-Sammlungen einführen", + "includeAllProxies": "Alle Ausgangsproxy einführen", + "includeAllProviders": "Alle Proxy-Sammlungen einführen" + }, + "toggles": { + "lazy": "Lazy-Status", + "disableUdp": "UDP deaktivieren", + "hidden": "Proxy-Gruppe ausblenden" + }, + "actions": { + "prepend": "Vorherige Proxy-Gruppe hinzufügen", + "append": "Nachfolgende Proxy-Gruppe hinzufügen" + } + }, + "editor": { + "actions": { + "format": "Dokument formatieren" + }, + "messages": { + "readOnly": "Bearbeitung im schreibgeschützten Modus nicht möglich" + } + }, + "confirmDelete": { + "title": "Löschung bestätigen", + "message": "Diese Operation kann nicht rückgängig gemacht werden" + }, + "logViewer": { + "title": "Skript-Konsole-Ausgabe" + } + } +} diff --git a/src/locales/de/proxies.json b/src/locales/de/proxies.json new file mode 100644 index 00000000..022f6030 --- /dev/null +++ b/src/locales/de/proxies.json @@ -0,0 +1,90 @@ +{ + "page": { + "modes": { + "rule": "Rule", + "global": "Global", + "direct": "Direct" + }, + "actions": { + "toggleChain": "🔗 Ketten-Proxy", + "connect": "Connect", + "disconnect": "Disconnect", + "connecting": "Connecting...", + "clearChainConfig": "Delete Chain Config" + }, + "provider": { + "title": "Proxy-Sammlung", + "actions": { + "updateAll": "Alle aktualisieren", + "update": "Aktualisieren" + } + }, + "rules": { + "title": "Proxy Rules", + "select": "Select Rules" + }, + "labels": { + "proxyCount": "Anzahl der Knoten", + "delayCheckReset": "Latenztest durchführen, um Fixierung aufzuheben" + }, + "tooltips": { + "locate": "Aktueller Knoten", + "delayCheck": "Latenztest", + "sortDefault": "Standard Sortierung", + "sortDelay": "Nach Latenz sortieren", + "sortName": "Nach Name sortieren", + "delayCheckUrl": "Latenztest-URL", + "showBasic": "Knotendetails ausblenden", + "showDetail": "Knotendetails anzeigen", + "filter": "Knoten filtern" + }, + "placeholders": { + "delayCheckUrl": "Latenztest-URL" + }, + "chain": { + "header": "Chain Proxy Config", + "empty": "No proxy chain configured", + "instruction": "Click nodes in order to add to proxy chain", + "minimumNodes": "Chain proxy requires at least 2 nodes", + "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", + "connectFailed": "Failed to connect to proxy chain", + "disconnectFailed": "Failed to disconnect from proxy chain", + "duplicateNode": "Proxy node already exists in chain" + }, + "messages": { + "directMode": "Direktverbindungs-Modus" + }, + "title": { + "default": "Proxy-Gruppen", + "chainMode": "Proxy Chain Mode" + } + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "components": { + "enums": { + "strategies": { + "select": "Proxy manuell auswählen", + "url-test": "Proxy basierend auf URL-Latenztest auswählen", + "fallback": "Bei Nichtverfügbarkeit zu einem anderen Proxy wechseln", + "load-balance": "Proxy basierend auf Lastverteilung zuweisen", + "relay": "Basierend auf definiertem Proxy-Kette weiterleiten" + }, + "policies": { + "DIRECT": "Direktverbindung", + "REJECT": "Anfrage ablehnen", + "REJECT-DROP": "Anfrage verwerfen", + "PASS": "Diese Regel überspringen" + } + } + } +} diff --git a/src/locales/de/rules.json b/src/locales/de/rules.json new file mode 100644 index 00000000..71b4d262 --- /dev/null +++ b/src/locales/de/rules.json @@ -0,0 +1,82 @@ +{ + "page": { + "provider": { + "trigger": "Regelsammlung", + "dialogTitle": "Regelsammlung", + "actions": { + "updateAll": "Alle aktualisieren", + "update": "Aktualisieren" + } + }, + "title": "Regeln" + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "modals": { + "editor": { + "form": { + "labels": { + "type": "Regeltyp", + "content": "Regelinhalt", + "proxyPolicy": "Proxy-Strategie" + }, + "toggles": { + "noResolve": "DNS-Auflösung überspringen" + }, + "actions": { + "prependRule": "Vorherige Regel hinzufügen", + "appendRule": "Nachfolgende Regel hinzufügen" + }, + "validation": { + "conditionRequired": "Regelbedingung fehlt", + "invalidRule": "Ungültige Regel" + } + }, + "ruleTypes": { + "DOMAIN": "Vollständigen Domainnamen übereinstimmen", + "DOMAIN-SUFFIX": "Domain-Suffix übereinstimmen", + "DOMAIN-KEYWORD": "Domain-Schlüsselwort übereinstimmen", + "DOMAIN-REGEX": "Domain-Regulärer Ausdruck übereinstimmen", + "GEOSITE": "Domainnamen in Geosite übereinstimmen", + "GEOIP": "IP-Ländercode übereinstimmen", + "SRC-GEOIP": "Quell-IP-Ländercode übereinstimmen", + "IP-ASN": "IP-ASN übereinstimmen", + "SRC-IP-ASN": "Quell-IP-ASN übereinstimmen", + "IP-CIDR": "IP-Adressbereich übereinstimmen", + "IP-CIDR6": "IP-Adressbereich übereinstimmen", + "SRC-IP-CIDR": "Quell-IP-Adressbereich übereinstimmen", + "IP-SUFFIX": "IP-Suffix-Bereich übereinstimmen", + "SRC-IP-SUFFIX": "Quell-IP-Suffix-Bereich übereinstimmen", + "SRC-PORT": "Quellportbereich der Anfrage übereinstimmen", + "DST-PORT": "Zielportbereich der Anfrage übereinstimmen", + "IN-PORT": "Eingangsport übereinstimmen", + "DSCP": "DSCP-Markierung (nur für TPROXY UDP-Eingang)", + "PROCESS-NAME": "Prozessnamen übereinstimmen (Android-Paketname)", + "PROCESS-PATH": "Vollständigen Prozesspfad übereinstimmen", + "PROCESS-NAME-REGEX": "Regulärer Ausdruck für vollständigen Prozessnamen übereinstimmen (Android-Paketname)", + "PROCESS-PATH-REGEX": "Regulärer Ausdruck für vollständigen Prozesspfad übereinstimmen", + "NETWORK": "Übertragungsprotokoll übereinstimmen (TCP/UDP)", + "UID": "Linux-USER-ID übereinstimmen", + "IN-TYPE": "Eingangstyp übereinstimmen", + "IN-USER": "Eingangsbenutzername übereinstimmen", + "IN-NAME": "Eingangsname übereinstimmen", + "SUB-RULE": "Unterregel", + "RULE-SET": "Regelsatz übereinstimmen", + "AND": "Logisches UND", + "OR": "Logisches ODER", + "NOT": "Logisches NICHT", + "MATCH": "Alle Anfragen übereinstimmen" + }, + "title": "Regeln bearbeiten" + } + } +} diff --git a/src/locales/de/settings.json b/src/locales/de/settings.json new file mode 100644 index 00000000..9412473b --- /dev/null +++ b/src/locales/de/settings.json @@ -0,0 +1,571 @@ +{ + "page": { + "actions": { + "manual": "Bedienungsanleitung", + "telegram": "Telegram-Kanal", + "github": "GitHub-Projektadresse" + }, + "title": "Einstellungen" + }, + "sections": { + "system": { + "title": "Systemeinstellungen", + "toggles": { + "tunMode": "Virtual Network Interface-Modus", + "systemProxy": "Systemproxy" + }, + "tooltips": { + "autoLaunchAdmin": "Der Administrator-Modus unterstützt möglicherweise keine automatische Startfunktion.", + "silentStart": "Die Anwendung wird im Hintergrund gestartet, ohne dass das Programmfenster angezeigt wird." + }, + "fields": { + "autoLaunch": "Automatischer Start", + "silentStart": "Leiser Start" + }, + "notifications": { + "tunMode": { + "autoDisabled": "TUN Mode automatically disabled due to service unavailable", + "autoDisableFailed": "Failed to disable TUN Mode automatically" + } + } + }, + "proxyControl": { + "tooltips": { + "systemProxy": "Ändern Sie die Proxy-Einstellungen des Betriebssystems. Wenn die Aktivierung fehlschlägt, können Sie die Proxy-Einstellungen des Betriebssystems manuell ändern.", + "tunMode": "Der TUN-Modus (Virtual Network Interface) übernimmt den gesamten Systemverkehr. Wenn dieser Modus aktiviert ist, muss der Systemproxy nicht geöffnet werden.", + "tunUnavailable": "TUN-Modus erfordert Service-Modus oder Administrator-Modus" + }, + "actions": { + "installService": "Service installieren", + "uninstallService": "Dienst deinstallieren" + }, + "fields": { + "systemProxy": "Systemproxy", + "tunMode": "Virtual Network Interface-Modus" + } + }, + "externalController": { + "title": "Adresse des externen Controllers", + "fields": { + "enable": "Enable External Controller", + "address": "Adresse des externen Controllers", + "secret": "API-Zugangsschlüssel" + }, + "placeholders": { + "address": "Erforderlich", + "secret": "Empfohlene Einstellung" + }, + "tooltips": { + "copy": "In die Zwischenablage kopieren" + }, + "messages": { + "addressRequired": "Controller address cannot be empty", + "secretRequired": "Secret cannot be empty", + "copyFailed": "Kopieren fehlgeschlagen", + "controllerCopied": "API-Port in die Zwischenablage kopiert", + "secretCopied": "API-Schlüssel in die Zwischenablage kopiert" + } + }, + "externalCors": { + "title": "Externe CORS-Konfiguration", + "fields": { + "allowPrivateNetwork": "Zugriff auf privates Netzwerk erlauben", + "allowedOrigins": "Erlaubte Ursprünge" + }, + "placeholders": { + "origin": "Bitte eine gültige URL eingeben" + }, + "actions": { + "add": "Hinzufügen" + }, + "messages": { + "alwaysIncluded": "Immer enthaltene Ursprünge: {{urls}}" + }, + "tooltips": { + "open": "Einstellungen für externe CORS" + } + }, + "appearance": { + "light": "Light", + "dark": "Dark", + "system": "System" + }, + "clash": { + "title": "Clash-Einstellungen", + "form": { + "fields": { + "allowLan": "Netzwerkverbindung im lokalen Netzwerk zulassen", + "dnsOverwrite": "DNS-Überschreibung", + "ipv6": "IPv6", + "unifiedDelay": "Einheitliche Latenz", + "logLevel": "Protokolliergrad", + "portConfig": "Port-Konfiguration", + "external": "Externe Steuerung", + "webUI": "Web-Oberfläche", + "clashCore": "Clash-Kern", + "openUwpTool": "UWP-Tool öffnen", + "updateGeoData": "Geo-Daten aktualisieren" + }, + "tooltips": { + "networkInterface": "Netzwerkschnittstelle", + "unifiedDelay": "Wenn die einheitliche Latenz aktiviert ist, werden zwei Latenztests durchgeführt, um die Latenzunterschiede zwischen verschiedenen Knotentypen aufgrund von Verbindungsaufbau und anderen Faktoren zu eliminieren.", + "logLevel": "Dies wirkt sich nur auf die Kernprotokolldateien im Verzeichnis Service im Protokollverzeichnis aus.", + "openUwpTool": "Ab Windows 8 wird die direkte Netzwerkverbindung von UWP-Anwendungen (z. B. Microsoft Store) zu lokalen Hosts eingeschränkt. Mit diesem Tool können Sie diese Einschränkung umgehen." + }, + "options": { + "logLevel": { + "debug": "Debug", + "info": "Info", + "warning": "Warn", + "error": "Error", + "silent": "Silent" + } + } + } + } + }, + "components": { + "verge": { + "basic": { + "title": "Verge-Grundeinstellungen", + "actions": { + "browse": "Durchsuchen" + }, + "trayOptions": { + "showMainWindow": "Hauptfenster anzeigen", + "showTrayMenu": "Tray-Menü anzeigen", + "disable": "Deaktivieren" + }, + "fields": { + "language": "Spracheinstellungen", + "themeMode": "Thema", + "trayClickEvent": "Tray-Klickereignis", + "copyEnvType": "Umgebungsvariablentyp kopieren", + "startPage": "Startseite", + "startupScript": "Startskript", + "themeSetting": "Thema-Einstellungen", + "layoutSetting": "Layout-Einstellungen", + "misc": "Sonstige Einstellungen", + "hotkeySetting": "Tastenkombinationseinstellungen" + } + }, + "advanced": { + "title": "Verge-Erweiterte Einstellungen", + "tooltips": { + "backupInfo": "Unterstützt die Sicherung von Konfigurationsdateien über WebDAV", + "openConfDir": "Wenn die Software fehlerhaft funktioniert, !sichern Sie! alle Dateien in diesem Verzeichnis, löschen Sie sie und starten Sie die Software neu.", + "liteMode": "GUI-Oberfläche schließen, nur den Kern laufen lassen" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "Sie verwenden bereits die neueste Version", + "versionCopied": "Version copied to clipboard" + }, + "fields": { + "backupSetting": "Sicherungseinstellungen", + "runtimeConfig": "Aktuelle Konfiguration", + "openConfDir": "Konfigurationsverzeichnis", + "openCoreDir": "Kernverzeichnis", + "openLogsDir": "Protokollverzeichnis", + "checkUpdates": "Auf Updates prüfen", + "openDevTools": "Entwicklertools öffnen", + "liteModeSettings": "Einstellungen für den Leichtgewichtigen Modus", + "exit": "Beenden", + "exportDiagnostics": "Diagnoseinformationen exportieren", + "vergeVersion": "Verge-Version" + } + }, + "theme": { + "title": "Thema-Einstellungen", + "fields": { + "primaryColor": "Hauptfarbe", + "secondaryColor": "Sekundärfarbe", + "primaryText": "Haupttextfarbe", + "secondaryText": "Sekundärtextfarbe", + "infoColor": "Informationsfarbe", + "warningColor": "Warnfarbe", + "errorColor": "Fehlerfarbe", + "successColor": "Erfolgsfarbe", + "fontFamily": "Schriftfamilie", + "cssInjection": "CSS-Einbindung" + }, + "actions": { + "editCss": "Edit CSS" + }, + "dialogs": { + "editCssTitle": "Edit CSS" + } + }, + "layout": { + "title": "Layout-Einstellungen", + "fields": { + "preferSystemTitlebar": "Prefer System Titlebar", + "trafficGraph": "Verkehrsdiagramm", + "memoryUsage": "Kern-Speichernutzung", + "proxyGroupIcon": "Proxy-Gruppen-Symbol", + "hoverNavigator": "Hover Jump Navigator", + "hoverNavigatorDelay": "Hover Jump Navigator Delay", + "navIcon": "Navigationsleiste-Symbol", + "trayIcon": "Tray-Symbol", + "showProxyGroupsInline": "Show Proxy Groups Inline", + "commonTrayIcon": "Standard-Tray-Symbol", + "systemProxyTrayIcon": "Systemproxy-Tray-Symbol", + "tunTrayIcon": "TUN-Modus-Tray-Symbol", + "enableTrayIcon": "Tray-Symbol aktivieren", + "enableTraySpeed": "Tray-Geschwindigkeit aktivieren" + }, + "tooltips": { + "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", + "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" + }, + "options": { + "icon": { + "monochrome": "Monochromes Symbol", + "colorful": "Farbiges Symbol", + "disable": "Deaktivieren" + } + } + } + } + }, + "modals": { + "clashPort": { + "title": "Port-Konfiguration", + "fields": { + "mixed": "Mischter Proxy-Port", + "socks": "SOCKS-Proxy-Port", + "http": "HTTP(S)-Proxy-Port", + "redir": "Redir-Transparenter Proxy-Port", + "tproxy": "TPROXY-Transparenter Proxy-Port" + }, + "actions": { + "random": "Zufälliger Port" + }, + "messages": { + "saved": "Port settings saved", + "saveFailed": "Failed to save port settings" + } + }, + "clashCore": { + "variants": { + "release": "Stabile Version", + "alpha": "Alpha-Version" + } + }, + "liteMode": { + "title": "Einstellungen für den Leichtgewichtigen Modus", + "actions": { + "enterNow": "Sofort in den Leichtgewichtigen Modus wechseln" + }, + "toggles": { + "autoEnter": "Automatisch in den Leichtgewichtigen Modus wechseln" + }, + "tooltips": { + "autoEnter": "Wenn diese Option aktiviert ist, wird der Leichtgewichtige Modus automatisch aktiviert, nachdem das Fenster für eine bestimmte Zeit geschlossen wurde." + }, + "fields": { + "delay": "Verzögerung beim automatischen Wechsel in den Leichtgewichtigen Modus" + }, + "messages": { + "autoEnterHint": "Nach dem Schließen des Fensters wird der Leichtgewichtige Modus automatisch nach {{n}} Minuten aktiviert." + } + }, + "backup": { + "title": "Sicherungseinstellungen", + "tabs": { + "local": "Local backup", + "webdav": "WebDAV backup" + }, + "actions": { + "selectTarget": "Select backup target", + "backup": "Sichern", + "export": "Export", + "exportBackup": "Export Backup", + "deleteBackup": "Sicherung löschen", + "restore": "Wiederherstellen", + "restoreBackup": "Sicherung wiederherstellen" + }, + "fields": { + "webdavUrl": "WebDAV-Serveradresse http(s)://", + "username": "Benutzername", + "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." + }, + "messages": { + "webdavUrlRequired": "Die WebDAV-Serveradresse darf nicht leer sein", + "invalidWebdavUrl": "Ungültiges Format für die WebDAV-Serveradresse", + "usernameRequired": "Der Benutzername darf nicht leer sein", + "passwordRequired": "Das Passwort darf nicht leer sein", + "webdavConfigSaved": "WebDAV-Konfiguration erfolgreich gespeichert", + "webdavConfigSaveFailed": "Speichern der WebDAV-Konfiguration fehlgeschlagen: {{error}}", + "backupCreated": "Sicherung erfolgreich erstellt", + "backupFailed": "Sicherung fehlgeschlagen: {{error}}", + "localBackupCreated": "Local backup created successfully", + "localBackupFailed": "Local backup failed", + "restoreSuccess": "Wiederherstellung erfolgreich. Die App wird in 1 Sekunde neu starten.", + "localBackupExported": "Local backup exported successfully", + "localBackupExportFailed": "Failed to export local backup", + "confirmDelete": "Confirm to delete this backup file?", + "confirmRestore": "Confirm to restore this backup file?" + }, + "table": { + "filename": "Dateiname", + "backupTime": "Sicherungszeit", + "actions": "Aktionen", + "noBackups": "Keine Sicherungen vorhanden", + "rowsPerPage": "Rows per page" + } + }, + "misc": { + "title": "Sonstige Einstellungen", + "fields": { + "appLogLevel": "Anwendungs-Protokolliergrad", + "appLogMaxSize": "App Log Max Size", + "appLogMaxCount": "App Log Max Count", + "autoCloseConnections": "Verbindungen automatisch schließen", + "autoCheckUpdate": "Automatisch auf Updates prüfen", + "enableBuiltinEnhanced": "Eingebaute Verbesserungen aktivieren", + "proxyLayoutColumns": "Anzahl der Spalten im Proxy-Layout", + "autoLogClean": "Protokolle automatisch bereinigen", + "autoDelayDetection": "Automatische Latenzprüfung", + "defaultLatencyTest": "Standard-Testlink", + "defaultLatencyTimeout": "Test-Timeout" + }, + "tooltips": { + "autoCloseConnections": "Wenn der ausgewählte Knoten in der Proxy-Gruppe oder der Proxy-Modus geändert wird, werden die bestehenden Verbindungen geschlossen.", + "enableBuiltinEnhanced": "Kompatibilitätsbehandlung der Konfigurationsdatei", + "autoDelayDetection": "Überprüft regelmäßig im Hintergrund die Latenz des aktuellen Knotens", + "defaultLatencyTest": "Dies wird nur für HTTP-Client-Anfragentests verwendet und hat keine Auswirkungen auf die Konfigurationsdatei." + }, + "options": { + "proxyLayoutColumns": { + "auto": "Automatische Anzahl der Spalten" + }, + "autoLogClean": { + "never": "Nie bereinigen", + "retainDays": "{{n}} Tage behalten" + } + } + }, + "update": { + "title": "New Version v{{version}}", + "actions": { + "goToRelease": "Zur Veröffentlichungsseite gehen", + "update": "Aktualisieren" + }, + "messages": { + "portableError": "Die portable Version unterstützt keine In-App-Aktualisierung. Bitte laden Sie die Dateien manuell herunter und ersetzen Sie sie.", + "breakChangeError": "Dies ist eine wichtige Aktualisierung. Die In-App-Aktualisierung wird nicht unterstützt. Bitte deinstallieren Sie die Software und laden Sie die neue Version manuell herunter und installieren Sie sie." + } + }, + "sysproxy": { + "title": "Systemproxy-Einstellungen", + "fieldsets": { + "currentStatus": "Aktueller Systemproxy" + }, + "fields": { + "enableStatus": "Aktivierungsstatus: ", + "serverAddr": "Serveradresse: ", + "pacUrl": "PAC-Adresse: ", + "proxyHost": "Proxy-Host", + "usePacMode": "PAC-Modus verwenden", + "proxyGuard": "Systemproxy-Schutz", + "guardDuration": "Proxy-Schutz-Intervall", + "alwaysUseDefaultBypass": "Immer die Standard-Umgehung verwenden", + "proxyBypass": "Proxy-Umgehungseinstellungen: ", + "bypass": "Aktuelle Umgehung: ", + "pacScriptContent": "PAC-Skriptinhalt" + }, + "tooltips": { + "proxyGuard": "Aktivieren Sie diese Option, um zu verhindern, dass andere Software die Proxy-Einstellungen des Betriebssystems ändert." + }, + "messages": { + "durationTooShort": "Das Intervall des Proxy-Daemons darf nicht weniger als 1 Sekunde betragen.", + "invalidBypass": "Ungültiges Format für die Proxy-Umgehung", + "invalidProxyHost": "Ungültiges Format für den Proxy-Host" + }, + "actions": { + "editPac": "Bearbeiten PAC" + } + }, + "tun": { + "title": "Virtual Network Interface-Modus", + "fields": { + "stack": "TUN-Modus-Stack", + "device": "Device Name", + "autoRoute": "Globale Routing automatisch einstellen", + "strictRoute": "Strenges Routing", + "autoDetectInterface": "Netzwerkschnittstelle automatisch auswählen", + "dnsHijack": "DNS-Hijacking", + "mtu": "Maximale Übertragungseinheit" + }, + "tooltips": { + "dnsHijack": "Please use , to separate multiple DNS servers" + }, + "messages": { + "applied": "Einstellungen angewendet" + } + }, + "dns": { + "dialog": { + "title": "DNS-Überschreibung", + "warning": "Wenn Sie sich nicht mit diesen Einstellungen auskennen, ändern Sie sie nicht und lassen Sie die DNS-Überschreibung aktiviert." + }, + "sections": { + "general": "DNS-Einstellungen", + "fallbackFilter": "Rückfallfilter-Einstellungen", + "hosts": "Hosts-Einstellungen" + }, + "fields": { + "enable": "DNS aktivieren", + "listen": "DNS-Lauschangabe", + "enhancedMode": "Erweiterter Modus", + "fakeIpRange": "Fake-IP-Bereich", + "fakeIpFilterMode": "Fake-IP-Filtermodus", + "ipv6": { + "label": "IPv6", + "description": "IPv6-DNS-Auflösung aktivieren" + }, + "preferH3": { + "label": "HTTP/3 bevorzugen", + "description": "DNS DOH verwendet HTTP/3-Protokoll" + }, + "respectRules": { + "label": "Routierungsregeln beachten", + "description": "DNS-Verbindungen folgen den Routierungsregeln" + }, + "useHosts": { + "label": "Hosts verwenden", + "description": "Aktivieren Sie die Auflösung von Hosts über die hosts-Datei" + }, + "useSystemHosts": { + "label": "System-Hosts verwenden", + "description": "Aktivieren Sie die Auflösung von Hosts über die System-hosts-Datei" + }, + "directPolicy": { + "label": "Direkte Namenserver folgen der Strategie", + "description": "Ob die Namenserver-Strategie befolgt werden soll" + }, + "defaultNameserver": { + "label": "Standard-Namenserver", + "description": "Standard-DNS-Server, die zum Auflösen von DNS-Servern verwendet werden" + }, + "nameserver": { + "label": "Namenserver", + "description": "Liste der DNS-Server, getrennt durch Kommas" + }, + "fallback": { + "label": "Rückfallserver", + "description": "Liste der Rückfall-DNS-Server, getrennt durch Kommas" + }, + "proxy": { + "label": "Proxy-Server-Namenserver", + "description": "Proxy-Knoten-Namenserver, nur für die Auflösung der Domains von Proxy-Knoten verwendet, getrennt durch Kommas" + }, + "directNameserver": { + "label": "Direkter Namenserver", + "description": "Direkter Ausgangs-Namenserver, unterstützt das Schlüsselwort system, getrennt durch Kommas" + }, + "fakeIpFilter": { + "label": "Fake-IP-Filter", + "description": "Domains, die die Fake-IP-Auflösung überspringen, getrennt durch Kommas" + }, + "nameserverPolicy": { + "label": "Namenserver-Strategie", + "description": "Domain-spezifischer DNS-Server, mehrere Server getrennt durch Semikolons, Format: domain=server1;server2" + }, + "geoipFiltering": { + "label": "GeoIP-Filterung", + "description": "GeoIP-Rückfallfilterung aktivieren" + }, + "geoipCode": "GeoIP-Ländercode", + "fallbackIpCidr": { + "label": "Rückfall-IP-CIDR", + "description": "IP-CIDRs, die keine Rückfallserver verwenden, getrennt durch Kommas" + }, + "fallbackDomain": { + "label": "Rückfall-Domäne", + "description": "Domains, die Rückfallserver verwenden, getrennt durch Kommas" + }, + "hosts": { + "label": "Hosts", + "description": "Benutzerdefinierte Zuordnung von Domains zu IPs oder Domains, getrennt durch Kommas" + } + }, + "messages": { + "saved": "DNS-Einstellungen wurden gespeichert", + "configError": "DNS configuration error:" + }, + "errors": { + "invalid": "Invalid configuration" + } + }, + "webUI": { + "actions": { + "openUrl": "Link öffnen" + }, + "title": "Web-Oberfläche", + "messages": { + "supportedPlaceholders": "Unterstützt %host, %port, %secret", + "placeholderInstruction": "Verwenden Sie %host, %port, %secret für Host, Port und Zugangsschlüssel" + } + }, + "hotkey": { + "toggles": { + "enableGlobal": "Globale Tastenkombinationen aktivieren" + }, + "title": "Tastenkombinationseinstellungen", + "functions": { + "rule": "Regel-Modus", + "global": "Globaler Modus", + "openOrCloseDashboard": "Dashboard öffnen/schließen", + "toggleSystemProxy": "Systemproxy ein/ausschalten", + "toggleTunMode": "TUN-Modus ein/ausschalten", + "entryLightweightMode": "Leichtgewichtigen Modus betreten", + "direct": "Direktverbindungs-Modus" + } + }, + "password": { + "prompts": { + "enterRoot": "Bitte geben Sie Ihr Root-Passwort ein." + } + }, + "networkInterface": { + "title": "Netzwerkschnittstelle", + "fields": { + "ipAddress": "IP-Adresse", + "macAddress": "MAC-Adresse" + } + } + }, + "feedback": { + "notifications": { + "clash": { + "restartSuccess": "Clash-Kern wurde neu gestartet", + "versionUpdated": "Kernversion wurde aktualisiert", + "changeSuccess": "Kern erfolgreich gewechselt", + "changeFailed": "Kernwechsel fehlgeschlagen", + "geoDataUpdated": "Geo-Daten wurden aktualisiert" + }, + "clashService": { + "installSuccess": "Service erfolgreich installiert", + "uninstallSuccess": "Service erfolgreich deinstalliert" + }, + "updater": { + "withClashProxySuccess": "Aktualisierung mit Clash-Proxy erfolgreich", + "withClashProxyFailed": "Aktualisierung auch mit Clash-Proxy fehlgeschlagen" + } + } + }, + "statuses": { + "clash": { + "stopping": "Kern wird gestoppt...", + "restarting": "Kern wird neu gestartet..." + }, + "clashService": { + "installing": "Service wird installiert...", + "uninstalling": "Service wird deinstalliert..." + } + } +} diff --git a/src/locales/de/shared.json b/src/locales/de/shared.json new file mode 100644 index 00000000..056434dd --- /dev/null +++ b/src/locales/de/shared.json @@ -0,0 +1,128 @@ +{ + "actions": { + "cancel": "Abbrechen", + "close": "Schließen", + "confirm": "Bestätigen", + "save": "Speichern", + "delete": "Löschen", + "edit": "Bearbeiten", + "new": "Neu", + "enable": "Aktivieren", + "upgrade": "Kern aktualisieren", + "restart": "Kern neustarten", + "resetToDefault": "Auf Standardwerte zurücksetzen", + "refresh": "Aktualisieren", + "retry": "Retry", + "refreshPage": "Refresh Page", + "showDetails": "Show Details", + "hideDetails": "Hide Details", + "listView": "Listenansicht", + "tableView": "Tabellenansicht", + "pause": "Pausieren", + "resume": "Fortsetzen", + "closeAll": "Alle schließen", + "clear": "Löschen" + }, + "labels": { + "updateAt": "Aktualisiert am", + "timeout": "Timeout", + "icon": "Symbol", + "name": "Name", + "readOnly": "Schreibgeschützt", + "expireTime": "Ablaufzeit", + "updateTime": "Aktualisierungszeit", + "usedTotal": "Verwendet / Gesamt", + "from": "Von", + "password": "Passwort", + "retryAttempts": "Retry attempts", + "downloaded": "Heruntergeladen", + "uploaded": "Hochgeladen" + }, + "statuses": { + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "saving": "Saving...", + "empty": "Leer" + }, + "units": { + "milliseconds": "Millisekunden", + "seconds": "Sekunden", + "minutes": "Minuten", + "kilobytes": "KB", + "files": "Files" + }, + "placeholders": { + "filter": "Filterbedingungen", + "matchCase": "Groß-/Kleinschreibung beachten", + "matchWholeWord": "Ganzes Wort übereinstimmen", + "useRegex": "Regulären Ausdruck verwenden" + }, + "validation": { + "invalidRegex": "Invalid regular expression" + }, + "window": { + "maximize": "Maximieren", + "minimize": "Minimieren" + }, + "editorModes": { + "visualization": "Visualisierung", + "advanced": "Erweitert" + }, + "feedback": { + "errors": { + "trafficStats": "Traffic Statistics Error", + "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." + }, + "notices": { + "raw": "{{message}}", + "prefixedRaw": "{{prefix}} {{message}}" + }, + "notifications": { + "importSuccess": "Abonnement erfolgreich importiert", + "importSubscriptionSuccess": "Abonnement erfolgreich importiert", + "importWithClashProxy": "Abonnement mit Clash-Proxy importiert", + "saved": "Saved successfully", + "common": { + "copySuccess": "Kopieren erfolgreich", + "saveSuccess": "Zufalls-Konfiguration erfolgreich gespeichert", + "saveFailed": "Failed to save configuration" + } + }, + "validation": { + "config": { + "failed": "Abonnement-Konfigurationsüberprüfung fehlgeschlagen. Bitte überprüfen Sie die Abonnement-Konfigurationsdatei. Die Änderungen wurden rückgängig gemacht. Fehlerdetails: ", + "bootFailed": "Start-Abonnement-Konfigurationsüberprüfung fehlgeschlagen. Die Standardkonfiguration wurde verwendet, um die App zu starten. Bitte überprüfen Sie die Abonnement-Konfigurationsdatei. Fehlerdetails: ", + "coreChangeFailed": "Konfigurationsüberprüfung beim Wechsel des Kerns fehlgeschlagen. Die Standardkonfiguration wurde verwendet, um die App zu starten. Bitte überprüfen Sie die Abonnement-Konfigurationsdatei. Fehlerdetails: ", + "processTerminated": "Validierungsprozess abgebrochen" + }, + "script": { + "syntaxError": "Skript-Syntaxfehler. Die Änderungen wurden rückgängig gemacht.", + "missingMain": "Skriptfehler. Die Änderungen wurden rückgängig gemacht.", + "fileNotFound": "Datei nicht gefunden. Die Änderungen wurden rückgängig gemacht.", + "fileError": "Skript-Dateifehler. Die Änderungen wurden rückgängig gemacht." + }, + "yaml": { + "syntaxError": "YAML-Syntaxfehler. Die Änderungen wurden rückgängig gemacht.", + "readError": "YAML-Lesefehler. Die Änderungen wurden rückgängig gemacht.", + "mappingError": "YAML-Mappingfehler. Die Änderungen wurden rückgängig gemacht.", + "keyError": "YAML-Schlüsselfehler. Die Änderungen wurden rückgängig gemacht.", + "generalError": "YAML-Fehler. Die Änderungen wurden rückgängig gemacht." + }, + "merge": { + "syntaxError": "Syntaxfehler in der Überdeckungsdatei. Die Änderungen wurden rückgängig gemacht.", + "mappingError": "Mappingfehler in der Überdeckungsdatei. Die Änderungen wurden rückgängig gemacht.", + "keyError": "Schlüsselfehler in der Überdeckungsdatei. Die Änderungen wurden rückgängig gemacht.", + "generalError": "Fehler in der Überdeckungsdatei. Die Änderungen wurden rückgängig gemacht." + } + } + }, + "filters": { + "logLevels": { + "all": "ALL", + "debug": "DEBUG", + "info": "INFO", + "warn": "WARN", + "error": "ERROR" + } + } +} diff --git a/src/locales/de/tests.json b/src/locales/de/tests.json new file mode 100644 index 00000000..5b159e6e --- /dev/null +++ b/src/locales/de/tests.json @@ -0,0 +1,40 @@ +{ + "page": { + "actions": { + "testAll": "Alle testen" + }, + "title": "Testen" + }, + "components": { + "item": { + "actions": { + "test": "Testen" + } + } + }, + "modals": { + "test": { + "title": { + "create": "Neuen Test erstellen", + "edit": "Test bearbeiten" + }, + "fields": { + "url": "Test-URL" + } + } + }, + "statuses": { + "test": { + "pending": "Wartend auf Prüfung", + "yes": "Unterstützt", + "no": "Nicht unterstützt", + "failed": "Test fehlgeschlagen", + "completed": "Prüfung abgeschlossen", + "disallowedIsp": "Nicht zugelassener Internetdienstanbieter", + "originalsOnly": "Nur Original", + "noDisney": "No (IP Banned By Disney+)", + "unsupportedRegion": "Nicht unterstütztes Land/Region", + "failedNetwork": "Failed (Network Connection)" + } + } +} diff --git a/src/locales/de/unlock.json b/src/locales/de/unlock.json new file mode 100644 index 00000000..444b722c --- /dev/null +++ b/src/locales/de/unlock.json @@ -0,0 +1,12 @@ +{ + "page": { + "actions": { + "testing": "Wird getestet..." + }, + "empty": "No unlock test items", + "messages": { + "detectionTimeout": "Detection timeout or failed" + }, + "title": "Entsperrungstest" + } +} diff --git a/src/locales/en.json b/src/locales/en.json deleted file mode 100644 index 47af3df7..00000000 --- a/src/locales/en.json +++ /dev/null @@ -1,1299 +0,0 @@ -{ - "shared": { - "actions": { - "cancel": "Cancel", - "close": "Close", - "confirm": "Confirm", - "save": "Save", - "delete": "Delete", - "edit": "Edit", - "new": "New", - "enable": "Enable", - "upgrade": "Upgrade", - "restart": "Restart", - "resetToDefault": "Reset to Default", - "refresh": "Refresh", - "retry": "Retry", - "refreshPage": "Refresh Page", - "showDetails": "Show Details", - "hideDetails": "Hide Details", - "listView": "List View", - "tableView": "Table View", - "pause": "Pause", - "resume": "Resume", - "closeAll": "Close All", - "clear": "Clear" - }, - "labels": { - "updateAt": "Update At", - "timeout": "Timeout", - "icon": "Icon", - "name": "Name", - "readOnly": "ReadOnly", - "expireTime": "Expire Time", - "updateTime": "Update Time", - "usedTotal": "Used / Total", - "from": "From", - "password": "Password", - "retryAttempts": "Retry attempts", - "downloaded": "Downloaded", - "uploaded": "Uploaded" - }, - "statuses": { - "enabled": "Enabled", - "disabled": "Disabled", - "saving": "Saving...", - "empty": "Empty" - }, - "units": { - "milliseconds": "ms", - "seconds": "seconds", - "minutes": "mins", - "kilobytes": "KB", - "files": "Files" - }, - "placeholders": { - "filter": "Filter conditions", - "matchCase": "Match Case", - "matchWholeWord": "Match Whole Word", - "useRegex": "Use Regular Expression" - }, - "validation": { - "invalidRegex": "Invalid regular expression" - }, - "window": { - "maximize": "Maximize", - "minimize": "Minimize" - }, - "editorModes": { - "visualization": "Visualization", - "advanced": "Advanced" - }, - "feedback": { - "errors": { - "trafficStats": "Traffic Statistics Error", - "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." - }, - "notices": { - "raw": "{{message}}", - "prefixedRaw": "{{prefix}} {{message}}" - }, - "notifications": { - "importSuccess": "Profile Imported Successfully", - "importSubscriptionSuccess": "Import subscription successful", - "importWithClashProxy": "Profile Imported with Clash proxy", - "saved": "Saved successfully", - "common": { - "copySuccess": "Copy Success", - "saveSuccess": "Configuration saved successfully", - "saveFailed": "Failed to save configuration" - } - }, - "validation": { - "config": { - "failed": "Subscription configuration validation failed. Please check the subscription configuration file; modifications have been rolled back.", - "bootFailed": "Boot subscription configuration validation failed. Started with the default configuration; please check the subscription configuration file.", - "coreChangeFailed": "Configuration validation failed when switching the kernel. Started with the default configuration; please check the subscription configuration file.", - "processTerminated": "The validation process has been terminated." - }, - "script": { - "syntaxError": "Script syntax error, changes reverted", - "missingMain": "Script error, changes reverted", - "fileNotFound": "File missing, changes reverted", - "fileError": "Script file error, changes reverted" - }, - "yaml": { - "syntaxError": "YAML syntax error, changes reverted", - "readError": "YAML read error, changes reverted", - "mappingError": "YAML mapping error, changes reverted", - "keyError": "YAML key error, changes reverted", - "generalError": "YAML error, changes reverted" - }, - "merge": { - "syntaxError": "Merge file syntax error, changes reverted", - "mappingError": "Merge file mapping error, changes reverted", - "keyError": "Merge file key error, changes reverted", - "generalError": "Merge file error, changes reverted" - } - } - }, - "filters": { - "logLevels": { - "all": "ALL", - "debug": "DEBUG", - "info": "INFO", - "warn": "WARN", - "error": "ERROR" - } - } - }, - "profiles": { - "page": { - "actions": { - "updateAll": "Update All Profiles", - "viewRuntimeConfig": "View Runtime Config", - "reactivate": "Reactivate Profiles", - "import": "Import" - }, - "batch": { - "actions": { - "delete": "Delete Selected Profiles", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "done": "Done" - }, - "summary": { - "selected": "Selected", - "items": "items" - }, - "title": "Batch Operations" - }, - "importForm": { - "placeholder": "Profile URL", - "actions": { - "paste": "Paste" - } - }, - "feedback": { - "errors": { - "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", - "onlyYaml": "Only YAML Files Supported" - }, - "notifications": { - "importRetry": "Import failed, retrying with Clash proxy...", - "importFail": "Import failed even with Clash proxy", - "importNeedsRefresh": "Profile imported but may need manual refresh", - "importSuccess": "Profile imported successfully, please restart if not visible", - "profileSwitched": "Profile Switched", - "profileReactivated": "Profile Reactivated", - "switchInterrupted": "Profile switch interrupted by new selection", - "batchDeleted": "Selected profiles deleted successfully" - }, - "notices": { - "forceRefreshCompleted": "Force refresh completed", - "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" - } - }, - "title": "Profiles" - }, - "components": { - "card": { - "labels": { - "clickToImport": "Click to import subscription" - } - }, - "fileInput": { - "chooseFile": "Choose File" - }, - "menu": { - "home": "Home", - "select": "Select", - "editInfo": "Edit Info", - "editFile": "Edit File", - "editRules": "Edit Rules", - "editProxies": "Edit Proxies", - "editGroups": "Edit Proxy Groups", - "extendConfig": "Extend Config", - "extendScript": "Extend Script", - "openFile": "Open File", - "update": "Update", - "updateViaProxy": "Update via proxy" - }, - "more": { - "global": { - "merge": "Global Merge", - "script": "Global Script" - }, - "chips": { - "merge": "Merge", - "script": "Script" - } - }, - "profileItem": { - "tooltips": { - "showLast": "Click to show last update time", - "showNext": "Click to show next update" - }, - "status": { - "lastUpdateFailed": "Last Update failed", - "nextUp": "Next Up", - "noSchedule": "No schedule", - "unknown": "Unknown", - "autoUpdateDisabled": "Auto update disabled" - } - } - }, - "modals": { - "profileForm": { - "title": { - "create": "Create Profile", - "edit": "Edit Profile" - }, - "fields": { - "type": "Type", - "description": "Descriptions", - "subscriptionUrl": "Subscription URL", - "httpTimeout": "HTTP Request Timeout", - "updateInterval": "Update Interval", - "useSystemProxy": "Use System Proxy", - "useClashProxy": "Use Clash Proxy", - "acceptInvalidCerts": "Allows Invalid Certificates (Danger)", - "allowAutoUpdate": "Allow Auto Update" - }, - "feedback": { - "notifications": { - "creationRetry": "Profile creation failed, retrying with Clash proxy...", - "creationSuccess": "Profile creation succeeded with Clash proxy" - } - } - }, - "proxiesEditor": { - "title": "Edit Proxies", - "placeholders": { - "multiUri": "Use newlines for multiple uri(Base64 encoding supported)" - }, - "actions": { - "prepend": "Prepend Proxy", - "append": "Append Proxy" - } - }, - "groupsEditor": { - "title": "Edit Proxy Groups", - "errors": { - "nameRequired": "Group Name Required", - "nameExists": "Group Name Already Exists" - }, - "fields": { - "type": "Group Type", - "name": "Group Name", - "icon": "Proxy Group Icon", - "proxies": "Use Proxies", - "provider": "Use Provider", - "healthCheckUrl": "Health Check Url", - "expectedStatus": "Expected Status", - "interval": "Interval", - "maxFailedTimes": "Max Failed Times", - "interfaceName": "Interface Name", - "routingMark": "Routing Mark", - "filter": "Filter", - "excludeFilter": "Exclude Filter", - "excludeType": "Exclude Type", - "includeAll": "Include All Proxies and Providers", - "includeAllProxies": "Include All Proxies", - "includeAllProviders": "Include All Providers" - }, - "toggles": { - "lazy": "Lazy", - "disableUdp": "Disable UDP", - "hidden": "Hidden" - }, - "actions": { - "prepend": "Prepend Group", - "append": "Append Group" - } - }, - "editor": { - "actions": { - "format": "Format document" - }, - "messages": { - "readOnly": "Cannot edit in read-only editor" - } - }, - "confirmDelete": { - "title": "Confirm deletion", - "message": "This operation is not reversible" - }, - "logViewer": { - "title": "Script Console" - } - } - }, - "proxies": { - "page": { - "modes": { - "rule": "Rule", - "global": "Global", - "direct": "Direct" - }, - "actions": { - "toggleChain": "🔗 Chain Proxy", - "connect": "Connect", - "disconnect": "Disconnect", - "connecting": "Connecting...", - "clearChainConfig": "Delete Chain Config" - }, - "provider": { - "title": "Proxy Provider", - "actions": { - "updateAll": "Update All", - "update": "Update" - } - }, - "rules": { - "title": "Proxy Rules", - "select": "Select Rules" - }, - "labels": { - "proxyCount": "Proxy Count", - "delayCheckReset": "Delay check to cancel fixed" - }, - "tooltips": { - "locate": "locate", - "delayCheck": "Delay check", - "sortDefault": "Sort by default", - "sortDelay": "Sort by delay", - "sortName": "Sort by name", - "delayCheckUrl": "Delay check URL", - "showBasic": "Proxy basic", - "showDetail": "Proxy detail", - "filter": "Filter" - }, - "placeholders": { - "delayCheckUrl": "Delay check URL" - }, - "chain": { - "header": "Chain Proxy Config", - "empty": "No proxy chain configured", - "instruction": "Click nodes in order to add to proxy chain", - "minimumNodes": "Chain proxy requires at least 2 nodes", - "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", - "connectFailed": "Failed to connect to proxy chain", - "disconnectFailed": "Failed to disconnect from proxy chain", - "duplicateNode": "Proxy node already exists in chain" - }, - "messages": { - "directMode": "Direct Mode" - }, - "title": { - "default": "Proxy Groups", - "chainMode": "Proxy Chain Mode" - } - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "components": { - "enums": { - "strategies": { - "select": "Select proxy manually", - "url-test": "Select proxy based on URL test delay", - "fallback": "Switch to another proxy on error", - "load-balance": "Distribute proxy based on load balancing", - "relay": "Pass through the defined proxy chain" - }, - "policies": { - "DIRECT": "Data goes directly outbound (DIRECT)", - "REJECT": "Intercepts requests (REJECT)", - "REJECT-DROP": "Discards requests (REJECT-DROP)", - "PASS": "Skips this rule when matched (PASS)" - } - } - } - }, - "connections": { - "page": { - "title": "Connections" - }, - "components": { - "fields": { - "host": "Host", - "dlSpeed": "DL Speed", - "ulSpeed": "UL Speed", - "chains": "Chains", - "rule": "Rule", - "process": "Process", - "time": "Time", - "source": "Source", - "destination": "Destination", - "destinationPort": "Destination Port", - "type": "Type" - }, - "order": { - "default": "Default", - "uploadSpeed": "Upload Speed", - "downloadSpeed": "Download Speed" - }, - "actions": { - "closeConnection": "Close Connection" - } - } - }, - "tests": { - "page": { - "actions": { - "testAll": "Test All" - }, - "title": "Test" - }, - "components": { - "item": { - "actions": { - "test": "Test" - } - } - }, - "modals": { - "test": { - "title": { - "create": "Create Test", - "edit": "Edit Test" - }, - "fields": { - "url": "Test URL" - } - } - }, - "statuses": { - "test": { - "pending": "Pending", - "yes": "Yes", - "no": "No", - "failed": "Failed", - "completed": "Completed", - "disallowedIsp": "Disallowed ISP", - "originalsOnly": "Originals Only", - "noDisney": "No (IP Banned By Disney+)", - "unsupportedRegion": "Unsupported Country/Region", - "failedNetwork": "Failed (Network Connection)" - } - } - }, - "logs": { - "page": { - "title": "Logs" - } - }, - "rules": { - "page": { - "provider": { - "trigger": "Rule Provider", - "dialogTitle": "Rule Providers", - "actions": { - "updateAll": "Update All", - "update": "Update" - } - }, - "title": "Rules" - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "modals": { - "editor": { - "form": { - "labels": { - "type": "Rule Type", - "content": "Rule Content", - "proxyPolicy": "Proxy Policy" - }, - "toggles": { - "noResolve": "No Resolve" - }, - "actions": { - "prependRule": "Prepend Rule", - "appendRule": "Append Rule" - }, - "validation": { - "conditionRequired": "Rule Condition Required", - "invalidRule": "Invalid Rule" - } - }, - "ruleTypes": { - "DOMAIN": "Match full domain (DOMAIN)", - "DOMAIN-SUFFIX": "Match domain suffix (DOMAIN-SUFFIX)", - "DOMAIN-KEYWORD": "Match domain keyword (DOMAIN-KEYWORD)", - "DOMAIN-REGEX": "Match domain using regex (DOMAIN-REGEX)", - "GEOSITE": "Match domains in Geosite (GEOSITE)", - "GEOIP": "Match IP country code (GEOIP)", - "SRC-GEOIP": "Match source IP country code (SRC-GEOIP)", - "IP-ASN": "Match IP ASN (IP-ASN)", - "SRC-IP-ASN": "Match source IP ASN (SRC-IP-ASN)", - "IP-CIDR": "Match IP address range (IP-CIDR)", - "IP-CIDR6": "Match IPv6 address range (IP-CIDR6)", - "SRC-IP-CIDR": "Match source IP address range (SRC-IP-CIDR)", - "IP-SUFFIX": "Match IP suffix range (IP-SUFFIX)", - "SRC-IP-SUFFIX": "Match source IP suffix range (SRC-IP-SUFFIX)", - "SRC-PORT": "Match source port range (SRC-PORT)", - "DST-PORT": "Match destination port range (DST-PORT)", - "IN-PORT": "Match inbound port (IN-PORT)", - "DSCP": "DSCP tag (TPROXY UDP inbound only) (DSCP)", - "PROCESS-NAME": "Match process name (PROCESS-NAME)", - "PROCESS-PATH": "Match full process path (PROCESS-PATH)", - "PROCESS-NAME-REGEX": "Match process name using regex (PROCESS-NAME-REGEX)", - "PROCESS-PATH-REGEX": "Match full process path using regex (PROCESS-PATH-REGEX)", - "NETWORK": "Match network protocol (TCP/UDP) (NETWORK)", - "UID": "Match Linux user ID (UID)", - "IN-TYPE": "Match inbound type (IN-TYPE)", - "IN-USER": "Match inbound username (IN-USER)", - "IN-NAME": "Match inbound name (IN-NAME)", - "SUB-RULE": "Sub-rule (SUB-RULE)", - "RULE-SET": "Match rule set (RULE-SET)", - "AND": "Logical AND (AND)", - "OR": "Logical OR (OR)", - "NOT": "Logical NOT (NOT)", - "MATCH": "Match all requests (MATCH)" - }, - "title": "Edit Rules" - } - } - }, - "home": { - "page": { - "tooltips": { - "lightweightMode": "Lightweight Mode", - "manual": "Manual", - "settings": "Home Settings" - }, - "cards": { - "trafficStats": "Traffic Stats", - "networkSettings": "Network Settings", - "proxyMode": "Proxy Mode" - }, - "settings": { - "cards": { - "profile": "Profile Card", - "currentProxy": "Current Proxy Card", - "network": "Network Settings Card", - "proxyMode": "Proxy Mode Card", - "traffic": "Traffic Stats Card", - "tests": "Website Tests Card", - "ip": "IP Information Card", - "clashInfo": "Clash Info Cards", - "systemInfo": "System Info Cards" - }, - "title": "Home Settings" - }, - "title": "Home" - }, - "components": { - "proxyTun": { - "status": { - "systemProxyEnabled": "System Proxy Enabled", - "systemProxyDisabled": "System Proxy Disabled", - "tunModeServiceRequired": "TUN Mode Service Required", - "tunModeEnabled": "TUN Mode Enabled", - "tunModeDisabled": "TUN Mode Disabled" - }, - "tooltips": { - "systemProxy": "System Proxy Info", - "tunMode": "TUN Mode Intercept Info" - } - }, - "clashInfo": { - "title": "Clash Info", - "fields": { - "coreVersion": "Core Version", - "systemProxyAddress": "System Proxy Address", - "mixedPort": "Mixed Port", - "uptime": "Uptime", - "rulesCount": "Rules Count" - } - }, - "systemInfo": { - "title": "System Info", - "fields": { - "osInfo": "OS Info", - "autoLaunch": "Auto Launch", - "runningMode": "Running Mode", - "lastCheckUpdate": "Last Check Update", - "vergeVersion": "Verge Version" - }, - "actions": { - "settings": "Settings" - }, - "tooltips": { - "autoLaunchAdmin": "Administrator mode may not support auto launch" - }, - "badges": { - "adminMode": "Administrator Mode", - "serviceMode": "Service Mode", - "sidecarMode": "User Mode", - "adminServiceMode": "Admin + Service Mode" - } - }, - "ipInfo": { - "title": "IP Information", - "labels": { - "ip": "IP", - "asn": "ASN", - "isp": "ISP", - "org": "ORG", - "location": "Location", - "timezone": "Timezone", - "autoRefresh": "Auto refresh", - "unknown": "Unknown" - }, - "errors": { - "load": "Failed to get IP info" - } - }, - "currentProxy": { - "title": "Current Node", - "actions": { - "refreshDelay": "Delay check" - }, - "labels": { - "globalMode": "Global Mode", - "directMode": "Direct Mode", - "group": "Group", - "proxy": "Proxy", - "noActiveNode": "No active proxy node" - } - }, - "tests": { - "title": "Website Tests" - }, - "traffic": { - "metrics": { - "uploadSpeed": "Upload Speed", - "downloadSpeed": "Download Speed", - "activeConnections": "Active Connections", - "memoryUsage": "Core Usage" - }, - "legends": { - "upload": "Upload", - "download": "Download" - }, - "patterns": { - "minutes": "{{time}} Minutes" - } - }, - "clashMode": { - "errors": { - "communication": "Core communication error" - }, - "labels": { - "rule": "Rule Mode", - "global": "Global Mode", - "direct": "Direct Mode" - }, - "descriptions": { - "rule": "Automatically choose proxies according to the rule set.", - "global": "Forward all network requests through the selected proxy.", - "direct": "Bypass the proxy and connect to the internet directly." - } - } - } - }, - "unlock": { - "page": { - "actions": { - "testing": "Testing..." - }, - "empty": "No unlock test items", - "messages": { - "detectionTimeout": "Detection timeout or failed" - }, - "title": "Unlock Test" - } - }, - "settings": { - "page": { - "actions": { - "manual": "Manual", - "telegram": "Telegram Channel", - "github": "Github Repo" - }, - "title": "Settings" - }, - "sections": { - "system": { - "title": "System Setting", - "toggles": { - "tunMode": "Tun Mode", - "systemProxy": "System Proxy" - }, - "tooltips": { - "autoLaunchAdmin": "Administrator mode may not support auto launch", - "silentStart": "Start the program in background mode without displaying the panel" - }, - "fields": { - "autoLaunch": "Auto Launch", - "silentStart": "Silent Start" - }, - "notifications": { - "tunMode": { - "autoDisabled": "TUN Mode automatically disabled due to service unavailable", - "autoDisableFailed": "Failed to disable TUN Mode automatically" - } - } - }, - "proxyControl": { - "tooltips": { - "systemProxy": "Enable to modify the operating system's proxy settings. If enabling fails, modify the operating system's proxy settings manually", - "tunMode": "Tun (Virtual NIC) mode: Captures all system traffic, when enabled, there is no need to enable system proxy.", - "tunUnavailable": "TUN requires Service Mode or Admin Mode" - }, - "actions": { - "installService": "Install Service", - "uninstallService": "Uninstall Service" - }, - "fields": { - "systemProxy": "System Proxy", - "tunMode": "Tun Mode" - } - }, - "externalController": { - "title": "External Controller", - "fields": { - "enable": "Enable External Controller", - "address": "External Controller", - "secret": "Core Secret" - }, - "placeholders": { - "address": "Required", - "secret": "Recommended" - }, - "tooltips": { - "copy": "Copy to clipboard" - }, - "messages": { - "addressRequired": "Controller address cannot be empty", - "secretRequired": "Secret cannot be empty", - "copyFailed": "Failed to copy", - "controllerCopied": "Controller address copied to clipboard", - "secretCopied": "Secret copied to clipboard" - } - }, - "externalCors": { - "title": "External Cors Configuration", - "fields": { - "allowPrivateNetwork": "Allow private network access", - "allowedOrigins": "Allowed Origins" - }, - "placeholders": { - "origin": "Please enter a valid url" - }, - "actions": { - "add": "Add" - }, - "messages": { - "alwaysIncluded": "Always included origins: {{urls}}" - }, - "tooltips": { - "open": "External Cors Settings" - } - }, - "appearance": { - "light": "Light", - "dark": "Dark", - "system": "System" - }, - "clash": { - "title": "Clash Setting", - "form": { - "fields": { - "allowLan": "Allow LAN", - "dnsOverwrite": "DNS Overwrite", - "ipv6": "IPv6", - "unifiedDelay": "Unified Delay", - "logLevel": "Log Level", - "portConfig": "Port Config", - "external": "External", - "webUI": "Web UI", - "clashCore": "Clash Core", - "openUwpTool": "Open UWP tool", - "updateGeoData": "Update GeoData" - }, - "tooltips": { - "networkInterface": "Network Interface", - "unifiedDelay": "When unified delay is turned on, two delay tests will be performed to eliminate the delay differences between different types of nodes caused by connection handshakes, etc", - "logLevel": "This parameter is valid only for kernel log files in the log directory Service folder", - "openUwpTool": "Since Windows 8, UWP apps (such as Microsoft Store) are restricted from directly accessing local host network services, and this tool can be used to bypass this restriction" - }, - "options": { - "logLevel": { - "debug": "Debug", - "info": "Info", - "warning": "Warn", - "error": "Error", - "silent": "Silent" - } - } - } - } - }, - "components": { - "verge": { - "basic": { - "title": "Verge Basic Setting", - "actions": { - "browse": "Browse" - }, - "trayOptions": { - "showMainWindow": "Show Main Window", - "showTrayMenu": "Show Tray Menu", - "disable": "Disable" - }, - "fields": { - "language": "Language", - "themeMode": "Theme Mode", - "trayClickEvent": "Tray Click Event", - "copyEnvType": "Copy Env Type", - "startPage": "Start Page", - "startupScript": "Startup Script", - "themeSetting": "Theme Setting", - "layoutSetting": "Layout Setting", - "misc": "Miscellaneous", - "hotkeySetting": "Hotkey Setting" - } - }, - "advanced": { - "title": "Verge Advanced Setting", - "tooltips": { - "backupInfo": "Support local or WebDAV backup of configuration files", - "openConfDir": "If the software runs abnormally, BACKUP and delete all files in this folder then restart the software", - "liteMode": "Close the GUI and keep only the kernel running" - }, - "actions": { - "copyVersion": "Copy Version" - }, - "notifications": { - "latestVersion": "Currently on the Latest Version", - "versionCopied": "Version copied to clipboard" - }, - "fields": { - "backupSetting": "Backup Setting", - "runtimeConfig": "Runtime Config", - "openConfDir": "Open Conf Dir", - "openCoreDir": "Open Core Dir", - "openLogsDir": "Open Logs Dir", - "checkUpdates": "Check for Updates", - "openDevTools": "Dev Tools", - "liteModeSettings": "LightWeight Mode Settings", - "exit": "Exit", - "exportDiagnostics": "Export Diagnostic Info", - "vergeVersion": "Verge Version" - } - }, - "theme": { - "title": "Theme Setting", - "fields": { - "primaryColor": "Primary Color", - "secondaryColor": "Secondary Color", - "primaryText": "Primary Text", - "secondaryText": "Secondary Text", - "infoColor": "Info Color", - "warningColor": "Warning Color", - "errorColor": "Error Color", - "successColor": "Success Color", - "fontFamily": "Font Family", - "cssInjection": "CSS Injection" - }, - "actions": { - "editCss": "Edit CSS" - }, - "dialogs": { - "editCssTitle": "Edit CSS" - } - }, - "layout": { - "title": "Layout Setting", - "fields": { - "preferSystemTitlebar": "Prefer System Titlebar", - "trafficGraph": "Traffic Graph", - "memoryUsage": "Core Usage", - "proxyGroupIcon": "Proxy Group Icon", - "hoverNavigator": "Hover Jump Navigator", - "hoverNavigatorDelay": "Hover Jump Navigator Delay", - "navIcon": "Nav Icon", - "trayIcon": "Tray Icon", - "showProxyGroupsInline": "Show Proxy Groups Inline", - "commonTrayIcon": "Common Tray Icon", - "systemProxyTrayIcon": "System Proxy Tray Icon", - "tunTrayIcon": "Tun Tray Icon", - "enableTrayIcon": "Enable Tray Icon", - "enableTraySpeed": "Enable Tray Speed" - }, - "tooltips": { - "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", - "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" - }, - "options": { - "icon": { - "monochrome": "Monochrome", - "colorful": "Colorful", - "disable": "Disable" - } - } - } - } - }, - "modals": { - "clashPort": { - "title": "Port Config", - "fields": { - "mixed": "Mixed Port", - "socks": "Socks Port", - "http": "Http(s) Port", - "redir": "Redir Port", - "tproxy": "Tproxy Port" - }, - "actions": { - "random": "Random Port" - }, - "messages": { - "saved": "Port settings saved", - "saveFailed": "Failed to save port settings" - } - }, - "clashCore": { - "variants": { - "release": "Release Version", - "alpha": "Alpha Version" - } - }, - "liteMode": { - "title": "LightWeight Mode Settings", - "actions": { - "enterNow": "Enter LightWeight Mode Now" - }, - "toggles": { - "autoEnter": "Auto Enter LightWeight Mode" - }, - "tooltips": { - "autoEnter": "Enable to automatically activate LightWeight Mode after the window is closed for a period of time" - }, - "fields": { - "delay": "Auto Enter LightWeight Mode Delay" - }, - "messages": { - "autoEnterHint": "When closing the window, LightWeight Mode will be automatically activated after {{n}} minutes" - } - }, - "backup": { - "title": "Backup Setting", - "tabs": { - "local": "Local backup", - "webdav": "WebDAV backup" - }, - "actions": { - "selectTarget": "Select backup target", - "backup": "Backup", - "export": "Export", - "exportBackup": "Export Backup", - "deleteBackup": "Delete Backup", - "restore": "Restore", - "restoreBackup": "Restore Backup" - }, - "fields": { - "webdavUrl": "WebDAV Server URL", - "username": "Username", - "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." - }, - "messages": { - "webdavUrlRequired": "WebDAV URL cannot be empty", - "invalidWebdavUrl": "Invalid WebDAV URL format", - "usernameRequired": "Username cannot be empty", - "passwordRequired": "Password cannot be empty", - "webdavConfigSaved": "WebDAV configuration saved successfully", - "webdavConfigSaveFailed": "Failed to save WebDAV configuration: {{error}}", - "backupCreated": "Backup created successfully", - "backupFailed": "Backup failed: {{error}}", - "localBackupCreated": "Local backup created successfully", - "localBackupFailed": "Local backup failed", - "restoreSuccess": "Restore Success, App will restart in 1s", - "localBackupExported": "Local backup exported successfully", - "localBackupExportFailed": "Failed to export local backup", - "confirmDelete": "Confirm to delete this backup file?", - "confirmRestore": "Confirm to restore this backup file?" - }, - "table": { - "filename": "Filename", - "backupTime": "Backup Time", - "actions": "Actions", - "noBackups": "No backups available", - "rowsPerPage": "Rows per page" - } - }, - "misc": { - "title": "Miscellaneous", - "fields": { - "appLogLevel": "App Log Level", - "appLogMaxSize": "App Log Max Size", - "appLogMaxCount": "App Log Max Count", - "autoCloseConnections": "Auto Close Connections", - "autoCheckUpdate": "Auto Check Update", - "enableBuiltinEnhanced": "Enable Builtin Enhanced", - "proxyLayoutColumns": "Proxy Layout Columns", - "autoLogClean": "Auto Log Clean", - "autoDelayDetection": "Auto Delay Detection", - "defaultLatencyTest": "Default Latency Test", - "defaultLatencyTimeout": "Default Latency Timeout" - }, - "tooltips": { - "autoCloseConnections": "Terminate established connections when the proxy group selection or proxy mode changes", - "enableBuiltinEnhanced": "Compatibility handling for the configuration file", - "autoDelayDetection": "Periodically test the current node latency in the background", - "defaultLatencyTest": "Used for HTTP client request testing only and won't make a difference to the configuration file" - }, - "options": { - "proxyLayoutColumns": { - "auto": "Auto Columns" - }, - "autoLogClean": { - "never": "Never Clean", - "retainDays": "Retain {{n}} Days" - } - } - }, - "update": { - "title": "New Version v{{version}}", - "actions": { - "goToRelease": "Go to Release Page", - "update": "Update" - }, - "messages": { - "portableError": "The portable version does not support in-app updates. Please manually download and replace it", - "breakChangeError": "This version is a major update and does not support in-app updates. Please uninstall it and manually download and install the new version" - } - }, - "sysproxy": { - "title": "System Proxy Setting", - "fieldsets": { - "currentStatus": "Current System Proxy" - }, - "fields": { - "enableStatus": "Enable Status:", - "serverAddr": "Server Addr: ", - "pacUrl": "PAC URL: ", - "proxyHost": "Proxy Host", - "usePacMode": "Use PAC Mode", - "proxyGuard": "Proxy Guard", - "guardDuration": "Guard Duration", - "alwaysUseDefaultBypass": "Always use Default Bypass", - "proxyBypass": "Proxy Bypass Settings: ", - "bypass": "Bypass: ", - "pacScriptContent": "PAC Script Content" - }, - "tooltips": { - "proxyGuard": "Enable to prevent other software from modifying the operating system's proxy settings" - }, - "messages": { - "durationTooShort": "Proxy Daemon Duration Cannot be Less than 1 Second", - "invalidBypass": "Invalid Bypass Format", - "invalidProxyHost": "Invalid Proxy Host Format" - }, - "actions": { - "editPac": "Edit PAC" - } - }, - "tun": { - "title": "Tun Mode", - "fields": { - "stack": "Tun Stack", - "device": "Device Name", - "autoRoute": "Auto Route", - "strictRoute": "Strict Route", - "autoDetectInterface": "Auto Detect Interface", - "dnsHijack": "DNS Hijack", - "mtu": "Max Transmission Unit" - }, - "tooltips": { - "dnsHijack": "Please use , to separate multiple DNS servers" - }, - "messages": { - "applied": "Settings Applied" - } - }, - "dns": { - "dialog": { - "title": "DNS Overwrite", - "warning": "If you are not familiar with these settings, please do not modify them and keep DNS Overwrite enabled" - }, - "sections": { - "general": "DNS Settings", - "fallbackFilter": "Fallback Filter Settings", - "hosts": "Hosts Settings" - }, - "fields": { - "enable": "Enable DNS", - "listen": "DNS Listen", - "enhancedMode": "Enhanced Mode", - "fakeIpRange": "Fake IP Range", - "fakeIpFilterMode": "Fake IP Filter Mode", - "ipv6": { - "label": "IPv6", - "description": "Enable IPv6 DNS resolution" - }, - "preferH3": { - "label": "Prefer H3", - "description": "DNS DOH uses HTTP/3" - }, - "respectRules": { - "label": "Respect Rules", - "description": "DNS connections follow routing rules" - }, - "useHosts": { - "label": "Use Hosts", - "description": "Enable to resolve hosts through hosts file" - }, - "useSystemHosts": { - "label": "Use System Hosts", - "description": "Enable to resolve hosts through system hosts file" - }, - "directPolicy": { - "label": "Direct Nameserver Follow Policy", - "description": "Whether to follow nameserver policy" - }, - "defaultNameserver": { - "label": "Default Nameserver", - "description": "Default DNS servers used to resolve DNS servers" - }, - "nameserver": { - "label": "Nameserver", - "description": "List of DNS servers, comma separated" - }, - "fallback": { - "label": "Fallback", - "description": "List of fallback DNS servers, comma separated" - }, - "proxy": { - "label": "Proxy Server Nameserver", - "description": "DNS servers for proxy node domain resolution" - }, - "directNameserver": { - "label": "Direct Nameserver", - "description": "DNS servers for direct exit domain resolution, supports 'system' keyword, comma separated" - }, - "fakeIpFilter": { - "label": "Fake IP Filter", - "description": "Domains that skip fake IP resolution, comma separated" - }, - "nameserverPolicy": { - "label": "Nameserver Policy", - "description": "Domain-specific DNS server, multiple servers separated by semicolons, format: domain=server1;server2" - }, - "geoipFiltering": { - "label": "GeoIP Filtering", - "description": "Enable GeoIP filtering for fallback" - }, - "geoipCode": "GeoIP Code", - "fallbackIpCidr": { - "label": "Fallback IP CIDR", - "description": "IP CIDRs not using fallback servers, comma separated" - }, - "fallbackDomain": { - "label": "Fallback Domain", - "description": "Domains using fallback servers, comma separated" - }, - "hosts": { - "label": "Hosts", - "description": "Custom domain to IP or domain mapping" - } - }, - "messages": { - "saved": "DNS settings saved", - "configError": "DNS configuration error:" - }, - "errors": { - "invalid": "Invalid configuration" - } - }, - "webUI": { - "actions": { - "openUrl": "Open URL" - }, - "title": "Web UI", - "messages": { - "supportedPlaceholders": "Support %host, %port, %secret", - "placeholderInstruction": "Replace host, port, secret with %host, %port, %secret" - } - }, - "hotkey": { - "toggles": { - "enableGlobal": "Enable Global Hotkey" - }, - "title": "Hotkey Setting", - "functions": { - "rule": "Rule Mode", - "global": "Global Mode", - "openOrCloseDashboard": "Open/Close Dashboard", - "toggleSystemProxy": "Enable/Disable System Proxy", - "toggleTunMode": "Enable/Disable Tun Mode", - "entryLightweightMode": "Entry Lightweight Mode", - "direct": "Direct Mode" - } - }, - "password": { - "prompts": { - "enterRoot": "Please enter your root password" - } - }, - "networkInterface": { - "title": "Network Interface", - "fields": { - "ipAddress": "IP Address", - "macAddress": "MAC Address" - } - } - }, - "feedback": { - "notifications": { - "clash": { - "restartSuccess": "Clash Core Restarted", - "versionUpdated": "Core Version Updated", - "changeSuccess": "Core changed successfully", - "changeFailed": "Failed to change core", - "geoDataUpdated": "GeoData Updated" - }, - "clashService": { - "installSuccess": "Service Installed Successfully", - "uninstallSuccess": "Service Uninstalled Successfully" - }, - "updater": { - "withClashProxySuccess": "Update with Clash proxy successfully", - "withClashProxyFailed": "Update failed even with Clash proxy" - } - } - }, - "statuses": { - "clash": { - "stopping": "Stopping Core...", - "restarting": "Restarting Core..." - }, - "clashService": { - "installing": "Installing Service...", - "uninstalling": "Uninstalling Service..." - } - } - }, - "layout": { - "components": { - "navigation": { - "tabs": { - "home": "Home", - "proxies": "Proxies", - "profiles": "Profiles", - "connections": "Connections", - "rules": "Rules", - "logs": "Logs", - "unlock": "Test", - "settings": "Settings" - }, - "menu": { - "reorderMode": "Menu reorder mode", - "unlock": "Unlock menu order", - "lock": "Lock menu order" - } - } - } - } -} diff --git a/src/locales/en/connections.json b/src/locales/en/connections.json new file mode 100644 index 00000000..4d5e5360 --- /dev/null +++ b/src/locales/en/connections.json @@ -0,0 +1,28 @@ +{ + "page": { + "title": "Connections" + }, + "components": { + "fields": { + "host": "Host", + "dlSpeed": "DL Speed", + "ulSpeed": "UL Speed", + "chains": "Chains", + "rule": "Rule", + "process": "Process", + "time": "Time", + "source": "Source", + "destination": "Destination", + "destinationPort": "Destination Port", + "type": "Type" + }, + "order": { + "default": "Default", + "uploadSpeed": "Upload Speed", + "downloadSpeed": "Download Speed" + }, + "actions": { + "closeConnection": "Close Connection" + } + } +} diff --git a/src/locales/en/home.json b/src/locales/en/home.json new file mode 100644 index 00000000..39c1bb6c --- /dev/null +++ b/src/locales/en/home.json @@ -0,0 +1,138 @@ +{ + "page": { + "tooltips": { + "lightweightMode": "Lightweight Mode", + "manual": "Manual", + "settings": "Home Settings" + }, + "cards": { + "trafficStats": "Traffic Stats", + "networkSettings": "Network Settings", + "proxyMode": "Proxy Mode" + }, + "settings": { + "cards": { + "profile": "Profile Card", + "currentProxy": "Current Proxy Card", + "network": "Network Settings Card", + "proxyMode": "Proxy Mode Card", + "traffic": "Traffic Stats Card", + "tests": "Website Tests Card", + "ip": "IP Information Card", + "clashInfo": "Clash Info Cards", + "systemInfo": "System Info Cards" + }, + "title": "Home Settings" + }, + "title": "Home" + }, + "components": { + "proxyTun": { + "status": { + "systemProxyEnabled": "System Proxy Enabled", + "systemProxyDisabled": "System Proxy Disabled", + "tunModeServiceRequired": "TUN Mode Service Required", + "tunModeEnabled": "TUN Mode Enabled", + "tunModeDisabled": "TUN Mode Disabled" + }, + "tooltips": { + "systemProxy": "System Proxy Info", + "tunMode": "TUN Mode Intercept Info" + } + }, + "clashInfo": { + "title": "Clash Info", + "fields": { + "coreVersion": "Core Version", + "systemProxyAddress": "System Proxy Address", + "mixedPort": "Mixed Port", + "uptime": "Uptime", + "rulesCount": "Rules Count" + } + }, + "systemInfo": { + "title": "System Info", + "fields": { + "osInfo": "OS Info", + "autoLaunch": "Auto Launch", + "runningMode": "Running Mode", + "lastCheckUpdate": "Last Check Update", + "vergeVersion": "Verge Version" + }, + "actions": { + "settings": "Settings" + }, + "tooltips": { + "autoLaunchAdmin": "Administrator mode may not support auto launch" + }, + "badges": { + "adminMode": "Administrator Mode", + "serviceMode": "Service Mode", + "sidecarMode": "User Mode", + "adminServiceMode": "Admin + Service Mode" + } + }, + "ipInfo": { + "title": "IP Information", + "labels": { + "ip": "IP", + "asn": "ASN", + "isp": "ISP", + "org": "ORG", + "location": "Location", + "timezone": "Timezone", + "autoRefresh": "Auto refresh", + "unknown": "Unknown" + }, + "errors": { + "load": "Failed to get IP info" + } + }, + "currentProxy": { + "title": "Current Node", + "actions": { + "refreshDelay": "Delay check" + }, + "labels": { + "globalMode": "Global Mode", + "directMode": "Direct Mode", + "group": "Group", + "proxy": "Proxy", + "noActiveNode": "No active proxy node" + } + }, + "tests": { + "title": "Website Tests" + }, + "traffic": { + "metrics": { + "uploadSpeed": "Upload Speed", + "downloadSpeed": "Download Speed", + "activeConnections": "Active Connections", + "memoryUsage": "Core Usage" + }, + "legends": { + "upload": "Upload", + "download": "Download" + }, + "patterns": { + "minutes": "{{time}} Minutes" + } + }, + "clashMode": { + "errors": { + "communication": "Core communication error" + }, + "labels": { + "rule": "Rule Mode", + "global": "Global Mode", + "direct": "Direct Mode" + }, + "descriptions": { + "rule": "Automatically choose proxies according to the rule set.", + "global": "Forward all network requests through the selected proxy.", + "direct": "Bypass the proxy and connect to the internet directly." + } + } + } +} diff --git a/src/locales/en/index.ts b/src/locales/en/index.ts new file mode 100644 index 00000000..2977171d --- /dev/null +++ b/src/locales/en/index.ts @@ -0,0 +1,27 @@ +import shared from "./shared.json"; +import profiles from "./profiles.json"; +import proxies from "./proxies.json"; +import connections from "./connections.json"; +import tests from "./tests.json"; +import logs from "./logs.json"; +import rules from "./rules.json"; +import home from "./home.json"; +import unlock from "./unlock.json"; +import settings from "./settings.json"; +import layout from "./layout.json"; + +const resources = { + "shared": shared, + "profiles": profiles, + "proxies": proxies, + "connections": connections, + "tests": tests, + "logs": logs, + "rules": rules, + "home": home, + "unlock": unlock, + "settings": settings, + "layout": layout, +}; + +export default resources; diff --git a/src/locales/en/layout.json b/src/locales/en/layout.json new file mode 100644 index 00000000..7fafd752 --- /dev/null +++ b/src/locales/en/layout.json @@ -0,0 +1,21 @@ +{ + "components": { + "navigation": { + "tabs": { + "home": "Home", + "proxies": "Proxies", + "profiles": "Profiles", + "connections": "Connections", + "rules": "Rules", + "logs": "Logs", + "unlock": "Test", + "settings": "Settings" + }, + "menu": { + "reorderMode": "Menu reorder mode", + "unlock": "Unlock menu order", + "lock": "Lock menu order" + } + } + } +} diff --git a/src/locales/en/logs.json b/src/locales/en/logs.json new file mode 100644 index 00000000..85afa00b --- /dev/null +++ b/src/locales/en/logs.json @@ -0,0 +1,5 @@ +{ + "page": { + "title": "Logs" + } +} diff --git a/src/locales/en/profiles.json b/src/locales/en/profiles.json new file mode 100644 index 00000000..4cd4a09a --- /dev/null +++ b/src/locales/en/profiles.json @@ -0,0 +1,182 @@ +{ + "page": { + "actions": { + "updateAll": "Update All Profiles", + "viewRuntimeConfig": "View Runtime Config", + "reactivate": "Reactivate Profiles", + "import": "Import" + }, + "batch": { + "actions": { + "delete": "Delete Selected Profiles", + "selectAll": "Select All", + "deselectAll": "Deselect All", + "done": "Done" + }, + "summary": { + "selected": "Selected", + "items": "items" + }, + "title": "Batch Operations" + }, + "importForm": { + "placeholder": "Profile URL", + "actions": { + "paste": "Paste" + } + }, + "feedback": { + "errors": { + "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", + "onlyYaml": "Only YAML Files Supported" + }, + "notifications": { + "importRetry": "Import failed, retrying with Clash proxy...", + "importFail": "Import failed even with Clash proxy", + "importNeedsRefresh": "Profile imported but may need manual refresh", + "importSuccess": "Profile imported successfully, please restart if not visible", + "profileSwitched": "Profile Switched", + "profileReactivated": "Profile Reactivated", + "switchInterrupted": "Profile switch interrupted by new selection", + "batchDeleted": "Selected profiles deleted successfully" + }, + "notices": { + "forceRefreshCompleted": "Force refresh completed", + "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" + } + }, + "title": "Profiles" + }, + "components": { + "card": { + "labels": { + "clickToImport": "Click to import subscription" + } + }, + "fileInput": { + "chooseFile": "Choose File" + }, + "menu": { + "home": "Home", + "select": "Select", + "editInfo": "Edit Info", + "editFile": "Edit File", + "editRules": "Edit Rules", + "editProxies": "Edit Proxies", + "editGroups": "Edit Proxy Groups", + "extendConfig": "Extend Config", + "extendScript": "Extend Script", + "openFile": "Open File", + "update": "Update", + "updateViaProxy": "Update via proxy" + }, + "more": { + "global": { + "merge": "Global Merge", + "script": "Global Script" + }, + "chips": { + "merge": "Merge", + "script": "Script" + } + }, + "profileItem": { + "tooltips": { + "showLast": "Click to show last update time", + "showNext": "Click to show next update" + }, + "status": { + "lastUpdateFailed": "Last Update failed", + "nextUp": "Next Up", + "noSchedule": "No schedule", + "unknown": "Unknown", + "autoUpdateDisabled": "Auto update disabled" + } + } + }, + "modals": { + "profileForm": { + "title": { + "create": "Create Profile", + "edit": "Edit Profile" + }, + "fields": { + "type": "Type", + "description": "Descriptions", + "subscriptionUrl": "Subscription URL", + "httpTimeout": "HTTP Request Timeout", + "updateInterval": "Update Interval", + "useSystemProxy": "Use System Proxy", + "useClashProxy": "Use Clash Proxy", + "acceptInvalidCerts": "Allows Invalid Certificates (Danger)", + "allowAutoUpdate": "Allow Auto Update" + }, + "feedback": { + "notifications": { + "creationRetry": "Profile creation failed, retrying with Clash proxy...", + "creationSuccess": "Profile creation succeeded with Clash proxy" + } + } + }, + "proxiesEditor": { + "title": "Edit Proxies", + "placeholders": { + "multiUri": "Use newlines for multiple uri(Base64 encoding supported)" + }, + "actions": { + "prepend": "Prepend Proxy", + "append": "Append Proxy" + } + }, + "groupsEditor": { + "title": "Edit Proxy Groups", + "errors": { + "nameRequired": "Group Name Required", + "nameExists": "Group Name Already Exists" + }, + "fields": { + "type": "Group Type", + "name": "Group Name", + "icon": "Proxy Group Icon", + "proxies": "Use Proxies", + "provider": "Use Provider", + "healthCheckUrl": "Health Check Url", + "expectedStatus": "Expected Status", + "interval": "Interval", + "maxFailedTimes": "Max Failed Times", + "interfaceName": "Interface Name", + "routingMark": "Routing Mark", + "filter": "Filter", + "excludeFilter": "Exclude Filter", + "excludeType": "Exclude Type", + "includeAll": "Include All Proxies and Providers", + "includeAllProxies": "Include All Proxies", + "includeAllProviders": "Include All Providers" + }, + "toggles": { + "lazy": "Lazy", + "disableUdp": "Disable UDP", + "hidden": "Hidden" + }, + "actions": { + "prepend": "Prepend Group", + "append": "Append Group" + } + }, + "editor": { + "actions": { + "format": "Format document" + }, + "messages": { + "readOnly": "Cannot edit in read-only editor" + } + }, + "confirmDelete": { + "title": "Confirm deletion", + "message": "This operation is not reversible" + }, + "logViewer": { + "title": "Script Console" + } + } +} diff --git a/src/locales/en/proxies.json b/src/locales/en/proxies.json new file mode 100644 index 00000000..a359ee32 --- /dev/null +++ b/src/locales/en/proxies.json @@ -0,0 +1,90 @@ +{ + "page": { + "modes": { + "rule": "Rule", + "global": "Global", + "direct": "Direct" + }, + "actions": { + "toggleChain": "🔗 Chain Proxy", + "connect": "Connect", + "disconnect": "Disconnect", + "connecting": "Connecting...", + "clearChainConfig": "Delete Chain Config" + }, + "provider": { + "title": "Proxy Provider", + "actions": { + "updateAll": "Update All", + "update": "Update" + } + }, + "rules": { + "title": "Proxy Rules", + "select": "Select Rules" + }, + "labels": { + "proxyCount": "Proxy Count", + "delayCheckReset": "Delay check to cancel fixed" + }, + "tooltips": { + "locate": "locate", + "delayCheck": "Delay check", + "sortDefault": "Sort by default", + "sortDelay": "Sort by delay", + "sortName": "Sort by name", + "delayCheckUrl": "Delay check URL", + "showBasic": "Proxy basic", + "showDetail": "Proxy detail", + "filter": "Filter" + }, + "placeholders": { + "delayCheckUrl": "Delay check URL" + }, + "chain": { + "header": "Chain Proxy Config", + "empty": "No proxy chain configured", + "instruction": "Click nodes in order to add to proxy chain", + "minimumNodes": "Chain proxy requires at least 2 nodes", + "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", + "connectFailed": "Failed to connect to proxy chain", + "disconnectFailed": "Failed to disconnect from proxy chain", + "duplicateNode": "Proxy node already exists in chain" + }, + "messages": { + "directMode": "Direct Mode" + }, + "title": { + "default": "Proxy Groups", + "chainMode": "Proxy Chain Mode" + } + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "components": { + "enums": { + "strategies": { + "select": "Select proxy manually", + "url-test": "Select proxy based on URL test delay", + "fallback": "Switch to another proxy on error", + "load-balance": "Distribute proxy based on load balancing", + "relay": "Pass through the defined proxy chain" + }, + "policies": { + "DIRECT": "Data goes directly outbound (DIRECT)", + "REJECT": "Intercepts requests (REJECT)", + "REJECT-DROP": "Discards requests (REJECT-DROP)", + "PASS": "Skips this rule when matched (PASS)" + } + } + } +} diff --git a/src/locales/en/rules.json b/src/locales/en/rules.json new file mode 100644 index 00000000..37531492 --- /dev/null +++ b/src/locales/en/rules.json @@ -0,0 +1,82 @@ +{ + "page": { + "provider": { + "trigger": "Rule Provider", + "dialogTitle": "Rule Providers", + "actions": { + "updateAll": "Update All", + "update": "Update" + } + }, + "title": "Rules" + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "modals": { + "editor": { + "form": { + "labels": { + "type": "Rule Type", + "content": "Rule Content", + "proxyPolicy": "Proxy Policy" + }, + "toggles": { + "noResolve": "No Resolve" + }, + "actions": { + "prependRule": "Prepend Rule", + "appendRule": "Append Rule" + }, + "validation": { + "conditionRequired": "Rule Condition Required", + "invalidRule": "Invalid Rule" + } + }, + "ruleTypes": { + "DOMAIN": "Match full domain (DOMAIN)", + "DOMAIN-SUFFIX": "Match domain suffix (DOMAIN-SUFFIX)", + "DOMAIN-KEYWORD": "Match domain keyword (DOMAIN-KEYWORD)", + "DOMAIN-REGEX": "Match domain using regex (DOMAIN-REGEX)", + "GEOSITE": "Match domains in Geosite (GEOSITE)", + "GEOIP": "Match IP country code (GEOIP)", + "SRC-GEOIP": "Match source IP country code (SRC-GEOIP)", + "IP-ASN": "Match IP ASN (IP-ASN)", + "SRC-IP-ASN": "Match source IP ASN (SRC-IP-ASN)", + "IP-CIDR": "Match IP address range (IP-CIDR)", + "IP-CIDR6": "Match IPv6 address range (IP-CIDR6)", + "SRC-IP-CIDR": "Match source IP address range (SRC-IP-CIDR)", + "IP-SUFFIX": "Match IP suffix range (IP-SUFFIX)", + "SRC-IP-SUFFIX": "Match source IP suffix range (SRC-IP-SUFFIX)", + "SRC-PORT": "Match source port range (SRC-PORT)", + "DST-PORT": "Match destination port range (DST-PORT)", + "IN-PORT": "Match inbound port (IN-PORT)", + "DSCP": "DSCP tag (TPROXY UDP inbound only) (DSCP)", + "PROCESS-NAME": "Match process name (PROCESS-NAME)", + "PROCESS-PATH": "Match full process path (PROCESS-PATH)", + "PROCESS-NAME-REGEX": "Match process name using regex (PROCESS-NAME-REGEX)", + "PROCESS-PATH-REGEX": "Match full process path using regex (PROCESS-PATH-REGEX)", + "NETWORK": "Match network protocol (TCP/UDP) (NETWORK)", + "UID": "Match Linux user ID (UID)", + "IN-TYPE": "Match inbound type (IN-TYPE)", + "IN-USER": "Match inbound username (IN-USER)", + "IN-NAME": "Match inbound name (IN-NAME)", + "SUB-RULE": "Sub-rule (SUB-RULE)", + "RULE-SET": "Match rule set (RULE-SET)", + "AND": "Logical AND (AND)", + "OR": "Logical OR (OR)", + "NOT": "Logical NOT (NOT)", + "MATCH": "Match all requests (MATCH)" + }, + "title": "Edit Rules" + } + } +} diff --git a/src/locales/en/settings.json b/src/locales/en/settings.json new file mode 100644 index 00000000..1d3af970 --- /dev/null +++ b/src/locales/en/settings.json @@ -0,0 +1,571 @@ +{ + "page": { + "actions": { + "manual": "Manual", + "telegram": "Telegram Channel", + "github": "Github Repo" + }, + "title": "Settings" + }, + "sections": { + "system": { + "title": "System Setting", + "toggles": { + "tunMode": "Tun Mode", + "systemProxy": "System Proxy" + }, + "tooltips": { + "autoLaunchAdmin": "Administrator mode may not support auto launch", + "silentStart": "Start the program in background mode without displaying the panel" + }, + "fields": { + "autoLaunch": "Auto Launch", + "silentStart": "Silent Start" + }, + "notifications": { + "tunMode": { + "autoDisabled": "TUN Mode automatically disabled due to service unavailable", + "autoDisableFailed": "Failed to disable TUN Mode automatically" + } + } + }, + "proxyControl": { + "tooltips": { + "systemProxy": "Enable to modify the operating system's proxy settings. If enabling fails, modify the operating system's proxy settings manually", + "tunMode": "Tun (Virtual NIC) mode: Captures all system traffic, when enabled, there is no need to enable system proxy.", + "tunUnavailable": "TUN requires Service Mode or Admin Mode" + }, + "actions": { + "installService": "Install Service", + "uninstallService": "Uninstall Service" + }, + "fields": { + "systemProxy": "System Proxy", + "tunMode": "Tun Mode" + } + }, + "externalController": { + "title": "External Controller", + "fields": { + "enable": "Enable External Controller", + "address": "External Controller", + "secret": "Core Secret" + }, + "placeholders": { + "address": "Required", + "secret": "Recommended" + }, + "tooltips": { + "copy": "Copy to clipboard" + }, + "messages": { + "addressRequired": "Controller address cannot be empty", + "secretRequired": "Secret cannot be empty", + "copyFailed": "Failed to copy", + "controllerCopied": "Controller address copied to clipboard", + "secretCopied": "Secret copied to clipboard" + } + }, + "externalCors": { + "title": "External Cors Configuration", + "fields": { + "allowPrivateNetwork": "Allow private network access", + "allowedOrigins": "Allowed Origins" + }, + "placeholders": { + "origin": "Please enter a valid url" + }, + "actions": { + "add": "Add" + }, + "messages": { + "alwaysIncluded": "Always included origins: {{urls}}" + }, + "tooltips": { + "open": "External Cors Settings" + } + }, + "appearance": { + "light": "Light", + "dark": "Dark", + "system": "System" + }, + "clash": { + "title": "Clash Setting", + "form": { + "fields": { + "allowLan": "Allow LAN", + "dnsOverwrite": "DNS Overwrite", + "ipv6": "IPv6", + "unifiedDelay": "Unified Delay", + "logLevel": "Log Level", + "portConfig": "Port Config", + "external": "External", + "webUI": "Web UI", + "clashCore": "Clash Core", + "openUwpTool": "Open UWP tool", + "updateGeoData": "Update GeoData" + }, + "tooltips": { + "networkInterface": "Network Interface", + "unifiedDelay": "When unified delay is turned on, two delay tests will be performed to eliminate the delay differences between different types of nodes caused by connection handshakes, etc", + "logLevel": "This parameter is valid only for kernel log files in the log directory Service folder", + "openUwpTool": "Since Windows 8, UWP apps (such as Microsoft Store) are restricted from directly accessing local host network services, and this tool can be used to bypass this restriction" + }, + "options": { + "logLevel": { + "debug": "Debug", + "info": "Info", + "warning": "Warn", + "error": "Error", + "silent": "Silent" + } + } + } + } + }, + "components": { + "verge": { + "basic": { + "title": "Verge Basic Setting", + "actions": { + "browse": "Browse" + }, + "trayOptions": { + "showMainWindow": "Show Main Window", + "showTrayMenu": "Show Tray Menu", + "disable": "Disable" + }, + "fields": { + "language": "Language", + "themeMode": "Theme Mode", + "trayClickEvent": "Tray Click Event", + "copyEnvType": "Copy Env Type", + "startPage": "Start Page", + "startupScript": "Startup Script", + "themeSetting": "Theme Setting", + "layoutSetting": "Layout Setting", + "misc": "Miscellaneous", + "hotkeySetting": "Hotkey Setting" + } + }, + "advanced": { + "title": "Verge Advanced Setting", + "tooltips": { + "backupInfo": "Support local or WebDAV backup of configuration files", + "openConfDir": "If the software runs abnormally, BACKUP and delete all files in this folder then restart the software", + "liteMode": "Close the GUI and keep only the kernel running" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "Currently on the Latest Version", + "versionCopied": "Version copied to clipboard" + }, + "fields": { + "backupSetting": "Backup Setting", + "runtimeConfig": "Runtime Config", + "openConfDir": "Open Conf Dir", + "openCoreDir": "Open Core Dir", + "openLogsDir": "Open Logs Dir", + "checkUpdates": "Check for Updates", + "openDevTools": "Dev Tools", + "liteModeSettings": "LightWeight Mode Settings", + "exit": "Exit", + "exportDiagnostics": "Export Diagnostic Info", + "vergeVersion": "Verge Version" + } + }, + "theme": { + "title": "Theme Setting", + "fields": { + "primaryColor": "Primary Color", + "secondaryColor": "Secondary Color", + "primaryText": "Primary Text", + "secondaryText": "Secondary Text", + "infoColor": "Info Color", + "warningColor": "Warning Color", + "errorColor": "Error Color", + "successColor": "Success Color", + "fontFamily": "Font Family", + "cssInjection": "CSS Injection" + }, + "actions": { + "editCss": "Edit CSS" + }, + "dialogs": { + "editCssTitle": "Edit CSS" + } + }, + "layout": { + "title": "Layout Setting", + "fields": { + "preferSystemTitlebar": "Prefer System Titlebar", + "trafficGraph": "Traffic Graph", + "memoryUsage": "Core Usage", + "proxyGroupIcon": "Proxy Group Icon", + "hoverNavigator": "Hover Jump Navigator", + "hoverNavigatorDelay": "Hover Jump Navigator Delay", + "navIcon": "Nav Icon", + "trayIcon": "Tray Icon", + "showProxyGroupsInline": "Show Proxy Groups Inline", + "commonTrayIcon": "Common Tray Icon", + "systemProxyTrayIcon": "System Proxy Tray Icon", + "tunTrayIcon": "Tun Tray Icon", + "enableTrayIcon": "Enable Tray Icon", + "enableTraySpeed": "Enable Tray Speed" + }, + "tooltips": { + "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", + "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" + }, + "options": { + "icon": { + "monochrome": "Monochrome", + "colorful": "Colorful", + "disable": "Disable" + } + } + } + } + }, + "modals": { + "clashPort": { + "title": "Port Config", + "fields": { + "mixed": "Mixed Port", + "socks": "Socks Port", + "http": "Http(s) Port", + "redir": "Redir Port", + "tproxy": "Tproxy Port" + }, + "actions": { + "random": "Random Port" + }, + "messages": { + "saved": "Port settings saved", + "saveFailed": "Failed to save port settings" + } + }, + "clashCore": { + "variants": { + "release": "Release Version", + "alpha": "Alpha Version" + } + }, + "liteMode": { + "title": "LightWeight Mode Settings", + "actions": { + "enterNow": "Enter LightWeight Mode Now" + }, + "toggles": { + "autoEnter": "Auto Enter LightWeight Mode" + }, + "tooltips": { + "autoEnter": "Enable to automatically activate LightWeight Mode after the window is closed for a period of time" + }, + "fields": { + "delay": "Auto Enter LightWeight Mode Delay" + }, + "messages": { + "autoEnterHint": "When closing the window, LightWeight Mode will be automatically activated after {{n}} minutes" + } + }, + "backup": { + "title": "Backup Setting", + "tabs": { + "local": "Local backup", + "webdav": "WebDAV backup" + }, + "actions": { + "selectTarget": "Select backup target", + "backup": "Backup", + "export": "Export", + "exportBackup": "Export Backup", + "deleteBackup": "Delete Backup", + "restore": "Restore", + "restoreBackup": "Restore Backup" + }, + "fields": { + "webdavUrl": "WebDAV Server URL", + "username": "Username", + "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." + }, + "messages": { + "webdavUrlRequired": "WebDAV URL cannot be empty", + "invalidWebdavUrl": "Invalid WebDAV URL format", + "usernameRequired": "Username cannot be empty", + "passwordRequired": "Password cannot be empty", + "webdavConfigSaved": "WebDAV configuration saved successfully", + "webdavConfigSaveFailed": "Failed to save WebDAV configuration: {{error}}", + "backupCreated": "Backup created successfully", + "backupFailed": "Backup failed: {{error}}", + "localBackupCreated": "Local backup created successfully", + "localBackupFailed": "Local backup failed", + "restoreSuccess": "Restore Success, App will restart in 1s", + "localBackupExported": "Local backup exported successfully", + "localBackupExportFailed": "Failed to export local backup", + "confirmDelete": "Confirm to delete this backup file?", + "confirmRestore": "Confirm to restore this backup file?" + }, + "table": { + "filename": "Filename", + "backupTime": "Backup Time", + "actions": "Actions", + "noBackups": "No backups available", + "rowsPerPage": "Rows per page" + } + }, + "misc": { + "title": "Miscellaneous", + "fields": { + "appLogLevel": "App Log Level", + "appLogMaxSize": "App Log Max Size", + "appLogMaxCount": "App Log Max Count", + "autoCloseConnections": "Auto Close Connections", + "autoCheckUpdate": "Auto Check Update", + "enableBuiltinEnhanced": "Enable Builtin Enhanced", + "proxyLayoutColumns": "Proxy Layout Columns", + "autoLogClean": "Auto Log Clean", + "autoDelayDetection": "Auto Delay Detection", + "defaultLatencyTest": "Default Latency Test", + "defaultLatencyTimeout": "Default Latency Timeout" + }, + "tooltips": { + "autoCloseConnections": "Terminate established connections when the proxy group selection or proxy mode changes", + "enableBuiltinEnhanced": "Compatibility handling for the configuration file", + "autoDelayDetection": "Periodically test the current node latency in the background", + "defaultLatencyTest": "Used for HTTP client request testing only and won't make a difference to the configuration file" + }, + "options": { + "proxyLayoutColumns": { + "auto": "Auto Columns" + }, + "autoLogClean": { + "never": "Never Clean", + "retainDays": "Retain {{n}} Days" + } + } + }, + "update": { + "title": "New Version v{{version}}", + "actions": { + "goToRelease": "Go to Release Page", + "update": "Update" + }, + "messages": { + "portableError": "The portable version does not support in-app updates. Please manually download and replace it", + "breakChangeError": "This version is a major update and does not support in-app updates. Please uninstall it and manually download and install the new version" + } + }, + "sysproxy": { + "title": "System Proxy Setting", + "fieldsets": { + "currentStatus": "Current System Proxy" + }, + "fields": { + "enableStatus": "Enable Status:", + "serverAddr": "Server Addr: ", + "pacUrl": "PAC URL: ", + "proxyHost": "Proxy Host", + "usePacMode": "Use PAC Mode", + "proxyGuard": "Proxy Guard", + "guardDuration": "Guard Duration", + "alwaysUseDefaultBypass": "Always use Default Bypass", + "proxyBypass": "Proxy Bypass Settings: ", + "bypass": "Bypass: ", + "pacScriptContent": "PAC Script Content" + }, + "tooltips": { + "proxyGuard": "Enable to prevent other software from modifying the operating system's proxy settings" + }, + "messages": { + "durationTooShort": "Proxy Daemon Duration Cannot be Less than 1 Second", + "invalidBypass": "Invalid Bypass Format", + "invalidProxyHost": "Invalid Proxy Host Format" + }, + "actions": { + "editPac": "Edit PAC" + } + }, + "tun": { + "title": "Tun Mode", + "fields": { + "stack": "Tun Stack", + "device": "Device Name", + "autoRoute": "Auto Route", + "strictRoute": "Strict Route", + "autoDetectInterface": "Auto Detect Interface", + "dnsHijack": "DNS Hijack", + "mtu": "Max Transmission Unit" + }, + "tooltips": { + "dnsHijack": "Please use , to separate multiple DNS servers" + }, + "messages": { + "applied": "Settings Applied" + } + }, + "dns": { + "dialog": { + "title": "DNS Overwrite", + "warning": "If you are not familiar with these settings, please do not modify them and keep DNS Overwrite enabled" + }, + "sections": { + "general": "DNS Settings", + "fallbackFilter": "Fallback Filter Settings", + "hosts": "Hosts Settings" + }, + "fields": { + "enable": "Enable DNS", + "listen": "DNS Listen", + "enhancedMode": "Enhanced Mode", + "fakeIpRange": "Fake IP Range", + "fakeIpFilterMode": "Fake IP Filter Mode", + "ipv6": { + "label": "IPv6", + "description": "Enable IPv6 DNS resolution" + }, + "preferH3": { + "label": "Prefer H3", + "description": "DNS DOH uses HTTP/3" + }, + "respectRules": { + "label": "Respect Rules", + "description": "DNS connections follow routing rules" + }, + "useHosts": { + "label": "Use Hosts", + "description": "Enable to resolve hosts through hosts file" + }, + "useSystemHosts": { + "label": "Use System Hosts", + "description": "Enable to resolve hosts through system hosts file" + }, + "directPolicy": { + "label": "Direct Nameserver Follow Policy", + "description": "Whether to follow nameserver policy" + }, + "defaultNameserver": { + "label": "Default Nameserver", + "description": "Default DNS servers used to resolve DNS servers" + }, + "nameserver": { + "label": "Nameserver", + "description": "List of DNS servers, comma separated" + }, + "fallback": { + "label": "Fallback", + "description": "List of fallback DNS servers, comma separated" + }, + "proxy": { + "label": "Proxy Server Nameserver", + "description": "DNS servers for proxy node domain resolution" + }, + "directNameserver": { + "label": "Direct Nameserver", + "description": "DNS servers for direct exit domain resolution, supports 'system' keyword, comma separated" + }, + "fakeIpFilter": { + "label": "Fake IP Filter", + "description": "Domains that skip fake IP resolution, comma separated" + }, + "nameserverPolicy": { + "label": "Nameserver Policy", + "description": "Domain-specific DNS server, multiple servers separated by semicolons, format: domain=server1;server2" + }, + "geoipFiltering": { + "label": "GeoIP Filtering", + "description": "Enable GeoIP filtering for fallback" + }, + "geoipCode": "GeoIP Code", + "fallbackIpCidr": { + "label": "Fallback IP CIDR", + "description": "IP CIDRs not using fallback servers, comma separated" + }, + "fallbackDomain": { + "label": "Fallback Domain", + "description": "Domains using fallback servers, comma separated" + }, + "hosts": { + "label": "Hosts", + "description": "Custom domain to IP or domain mapping" + } + }, + "messages": { + "saved": "DNS settings saved", + "configError": "DNS configuration error:" + }, + "errors": { + "invalid": "Invalid configuration" + } + }, + "webUI": { + "actions": { + "openUrl": "Open URL" + }, + "title": "Web UI", + "messages": { + "supportedPlaceholders": "Support %host, %port, %secret", + "placeholderInstruction": "Replace host, port, secret with %host, %port, %secret" + } + }, + "hotkey": { + "toggles": { + "enableGlobal": "Enable Global Hotkey" + }, + "title": "Hotkey Setting", + "functions": { + "rule": "Rule Mode", + "global": "Global Mode", + "openOrCloseDashboard": "Open/Close Dashboard", + "toggleSystemProxy": "Enable/Disable System Proxy", + "toggleTunMode": "Enable/Disable Tun Mode", + "entryLightweightMode": "Entry Lightweight Mode", + "direct": "Direct Mode" + } + }, + "password": { + "prompts": { + "enterRoot": "Please enter your root password" + } + }, + "networkInterface": { + "title": "Network Interface", + "fields": { + "ipAddress": "IP Address", + "macAddress": "MAC Address" + } + } + }, + "feedback": { + "notifications": { + "clash": { + "restartSuccess": "Clash Core Restarted", + "versionUpdated": "Core Version Updated", + "changeSuccess": "Core changed successfully", + "changeFailed": "Failed to change core", + "geoDataUpdated": "GeoData Updated" + }, + "clashService": { + "installSuccess": "Service Installed Successfully", + "uninstallSuccess": "Service Uninstalled Successfully" + }, + "updater": { + "withClashProxySuccess": "Update with Clash proxy successfully", + "withClashProxyFailed": "Update failed even with Clash proxy" + } + } + }, + "statuses": { + "clash": { + "stopping": "Stopping Core...", + "restarting": "Restarting Core..." + }, + "clashService": { + "installing": "Installing Service...", + "uninstalling": "Uninstalling Service..." + } + } +} diff --git a/src/locales/en/shared.json b/src/locales/en/shared.json new file mode 100644 index 00000000..b384888d --- /dev/null +++ b/src/locales/en/shared.json @@ -0,0 +1,128 @@ +{ + "actions": { + "cancel": "Cancel", + "close": "Close", + "confirm": "Confirm", + "save": "Save", + "delete": "Delete", + "edit": "Edit", + "new": "New", + "enable": "Enable", + "upgrade": "Upgrade", + "restart": "Restart", + "resetToDefault": "Reset to Default", + "refresh": "Refresh", + "retry": "Retry", + "refreshPage": "Refresh Page", + "showDetails": "Show Details", + "hideDetails": "Hide Details", + "listView": "List View", + "tableView": "Table View", + "pause": "Pause", + "resume": "Resume", + "closeAll": "Close All", + "clear": "Clear" + }, + "labels": { + "updateAt": "Update At", + "timeout": "Timeout", + "icon": "Icon", + "name": "Name", + "readOnly": "ReadOnly", + "expireTime": "Expire Time", + "updateTime": "Update Time", + "usedTotal": "Used / Total", + "from": "From", + "password": "Password", + "retryAttempts": "Retry attempts", + "downloaded": "Downloaded", + "uploaded": "Uploaded" + }, + "statuses": { + "enabled": "Enabled", + "disabled": "Disabled", + "saving": "Saving...", + "empty": "Empty" + }, + "units": { + "milliseconds": "ms", + "seconds": "seconds", + "minutes": "mins", + "kilobytes": "KB", + "files": "Files" + }, + "placeholders": { + "filter": "Filter conditions", + "matchCase": "Match Case", + "matchWholeWord": "Match Whole Word", + "useRegex": "Use Regular Expression" + }, + "validation": { + "invalidRegex": "Invalid regular expression" + }, + "window": { + "maximize": "Maximize", + "minimize": "Minimize" + }, + "editorModes": { + "visualization": "Visualization", + "advanced": "Advanced" + }, + "feedback": { + "errors": { + "trafficStats": "Traffic Statistics Error", + "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." + }, + "notices": { + "raw": "{{message}}", + "prefixedRaw": "{{prefix}} {{message}}" + }, + "notifications": { + "importSuccess": "Profile Imported Successfully", + "importSubscriptionSuccess": "Import subscription successful", + "importWithClashProxy": "Profile Imported with Clash proxy", + "saved": "Saved successfully", + "common": { + "copySuccess": "Copy Success", + "saveSuccess": "Configuration saved successfully", + "saveFailed": "Failed to save configuration" + } + }, + "validation": { + "config": { + "failed": "Subscription configuration validation failed. Please check the subscription configuration file; modifications have been rolled back.", + "bootFailed": "Boot subscription configuration validation failed. Started with the default configuration; please check the subscription configuration file.", + "coreChangeFailed": "Configuration validation failed when switching the kernel. Started with the default configuration; please check the subscription configuration file.", + "processTerminated": "The validation process has been terminated." + }, + "script": { + "syntaxError": "Script syntax error, changes reverted", + "missingMain": "Script error, changes reverted", + "fileNotFound": "File missing, changes reverted", + "fileError": "Script file error, changes reverted" + }, + "yaml": { + "syntaxError": "YAML syntax error, changes reverted", + "readError": "YAML read error, changes reverted", + "mappingError": "YAML mapping error, changes reverted", + "keyError": "YAML key error, changes reverted", + "generalError": "YAML error, changes reverted" + }, + "merge": { + "syntaxError": "Merge file syntax error, changes reverted", + "mappingError": "Merge file mapping error, changes reverted", + "keyError": "Merge file key error, changes reverted", + "generalError": "Merge file error, changes reverted" + } + } + }, + "filters": { + "logLevels": { + "all": "ALL", + "debug": "DEBUG", + "info": "INFO", + "warn": "WARN", + "error": "ERROR" + } + } +} diff --git a/src/locales/en/tests.json b/src/locales/en/tests.json new file mode 100644 index 00000000..827ee056 --- /dev/null +++ b/src/locales/en/tests.json @@ -0,0 +1,40 @@ +{ + "page": { + "actions": { + "testAll": "Test All" + }, + "title": "Test" + }, + "components": { + "item": { + "actions": { + "test": "Test" + } + } + }, + "modals": { + "test": { + "title": { + "create": "Create Test", + "edit": "Edit Test" + }, + "fields": { + "url": "Test URL" + } + } + }, + "statuses": { + "test": { + "pending": "Pending", + "yes": "Yes", + "no": "No", + "failed": "Failed", + "completed": "Completed", + "disallowedIsp": "Disallowed ISP", + "originalsOnly": "Originals Only", + "noDisney": "No (IP Banned By Disney+)", + "unsupportedRegion": "Unsupported Country/Region", + "failedNetwork": "Failed (Network Connection)" + } + } +} diff --git a/src/locales/en/unlock.json b/src/locales/en/unlock.json new file mode 100644 index 00000000..e97daa76 --- /dev/null +++ b/src/locales/en/unlock.json @@ -0,0 +1,12 @@ +{ + "page": { + "actions": { + "testing": "Testing..." + }, + "empty": "No unlock test items", + "messages": { + "detectionTimeout": "Detection timeout or failed" + }, + "title": "Unlock Test" + } +} diff --git a/src/locales/es.json b/src/locales/es.json deleted file mode 100644 index 15e7d630..00000000 --- a/src/locales/es.json +++ /dev/null @@ -1,1299 +0,0 @@ -{ - "shared": { - "actions": { - "cancel": "Cancelar", - "close": "Cerrar", - "confirm": "Confirmar", - "save": "Guardar", - "delete": "Eliminar", - "edit": "Editar", - "new": "Nuevo", - "enable": "Habilitar", - "upgrade": "Actualizar núcleo", - "restart": "Reiniciar núcleo", - "resetToDefault": "Restablecer a los valores predeterminados", - "refresh": "Actualizar", - "retry": "Retry", - "refreshPage": "Refresh Page", - "showDetails": "Show Details", - "hideDetails": "Hide Details", - "listView": "Vista de lista", - "tableView": "Vista de tabla", - "pause": "Pausar", - "resume": "Reanudar", - "closeAll": "Cerrar todas", - "clear": "Limpiar" - }, - "labels": { - "updateAt": "Actualizado el", - "timeout": "Timeout", - "icon": "Icono", - "name": "Nombre", - "readOnly": "Solo lectura", - "expireTime": "Tiempo de expiración", - "updateTime": "Hora de actualización", - "usedTotal": "Utilizado / Total", - "from": "De", - "password": "Contraseña", - "retryAttempts": "Retry attempts", - "downloaded": "Descargado", - "uploaded": "Subido" - }, - "statuses": { - "enabled": "Habilitado", - "disabled": "Deshabilitado", - "saving": "Saving...", - "empty": "Vacío" - }, - "units": { - "milliseconds": "Milisegundos", - "seconds": "Segundos", - "minutes": "Minutos", - "kilobytes": "KB", - "files": "Files" - }, - "placeholders": { - "filter": "Condiciones de filtrado", - "matchCase": "Distinguir mayúsculas y minúsculas", - "matchWholeWord": "Coincidencia exacta de palabras", - "useRegex": "Usar expresiones regulares" - }, - "validation": { - "invalidRegex": "Invalid regular expression" - }, - "window": { - "maximize": "Maximizar", - "minimize": "Minimizar" - }, - "editorModes": { - "visualization": "Visualización", - "advanced": "Avanzado" - }, - "feedback": { - "errors": { - "trafficStats": "Traffic Statistics Error", - "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." - }, - "notices": { - "raw": "{{message}}", - "prefixedRaw": "{{prefix}} {{message}}" - }, - "notifications": { - "importSuccess": "Suscripción importada con éxito", - "importSubscriptionSuccess": "Suscripción importada con éxito", - "importWithClashProxy": "Suscripción importada con el proxy de Clash", - "saved": "Saved successfully", - "common": { - "copySuccess": "Copia exitosa", - "saveSuccess": "Configuración aleatoria guardada correctamente", - "saveFailed": "Failed to save configuration" - } - }, - "validation": { - "config": { - "failed": "Error de validación de la configuración de la suscripción. Compruebe el archivo de configuración de la suscripción. Los cambios se han deshecho. Detalles del error: ", - "bootFailed": "Error de validación de la configuración de la suscripción de arranque. Se ha iniciado con la configuración predeterminada. Compruebe el archivo de configuración de la suscripción. Detalles del error: ", - "coreChangeFailed": "Error de validación de la configuración al cambiar el núcleo. Se ha iniciado con la configuración predeterminada. Compruebe el archivo de configuración de la suscripción. Detalles del error: ", - "processTerminated": "Proceso de validación terminado" - }, - "script": { - "syntaxError": "Error de sintaxis en el script. Los cambios se han deshecho", - "missingMain": "Error en el script. Los cambios se han deshecho", - "fileNotFound": "Archivo no encontrado. Los cambios se han deshecho", - "fileError": "Error en el archivo de script. Los cambios se han deshecho" - }, - "yaml": { - "syntaxError": "Error de sintaxis YAML. Los cambios se han deshecho", - "readError": "Error al leer el archivo YAML. Los cambios se han deshecho", - "mappingError": "Error de mapeo YAML. Los cambios se han deshecho", - "keyError": "Error de clave YAML. Los cambios se han deshecho", - "generalError": "Error YAML. Los cambios se han deshecho" - }, - "merge": { - "syntaxError": "Error de sintaxis en el archivo de sobrescritura. Los cambios se han deshecho", - "mappingError": "Error de mapeo en el archivo de sobrescritura. Los cambios se han deshecho", - "keyError": "Error de clave en el archivo de sobrescritura. Los cambios se han deshecho", - "generalError": "Error en el archivo de sobrescritura. Los cambios se han deshecho" - } - } - }, - "filters": { - "logLevels": { - "all": "ALL", - "debug": "DEBUG", - "info": "INFO", - "warn": "WARN", - "error": "ERROR" - } - } - }, - "profiles": { - "page": { - "actions": { - "updateAll": "Actualizar todas las suscripciones", - "viewRuntimeConfig": "Ver configuración en tiempo de ejecución", - "reactivate": "Reactivar suscripciones", - "import": "Importar" - }, - "batch": { - "actions": { - "delete": "Delete Selected Profiles", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "done": "Done" - }, - "summary": { - "selected": "Selected", - "items": "items" - }, - "title": "Batch Operations" - }, - "importForm": { - "placeholder": "Enlace del archivo de suscripción", - "actions": { - "paste": "Pegar" - } - }, - "feedback": { - "errors": { - "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", - "onlyYaml": "Solo se admiten archivos YAML" - }, - "notifications": { - "importRetry": "Error al importar la suscripción. Intentando con el proxy de Clash...", - "importFail": "Error al importar incluso con el proxy de Clash", - "importNeedsRefresh": "Profile imported but may need manual refresh", - "importSuccess": "Profile imported successfully, please restart if not visible", - "profileSwitched": "Suscripción cambiada", - "profileReactivated": "Suscripción reactivada", - "switchInterrupted": "Profile switch interrupted by new selection", - "batchDeleted": "Selected profiles deleted successfully" - }, - "notices": { - "forceRefreshCompleted": "Force refresh completed", - "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" - } - }, - "title": "Suscripciones" - }, - "components": { - "card": { - "labels": { - "clickToImport": "Haga clic para importar una suscripción" - } - }, - "fileInput": { - "chooseFile": "Elegir archivo" - }, - "menu": { - "home": "Hogar", - "select": "Usar", - "editInfo": "Editar información", - "editFile": "Editar archivo", - "editRules": "Editar reglas", - "editProxies": "Editar nodos", - "editGroups": "Editar grupos de proxy", - "extendConfig": "Configurar sobrescritura extendida", - "extendScript": "Script extendido", - "openFile": "Abrir archivo", - "update": "Actualizar", - "updateViaProxy": "Update via proxy" - }, - "more": { - "global": { - "merge": "Global Merge", - "script": "Global Script" - }, - "chips": { - "merge": "Merge", - "script": "Script" - } - }, - "profileItem": { - "tooltips": { - "showLast": "Click to show last update time", - "showNext": "Click to show next update" - }, - "status": { - "lastUpdateFailed": "La última actualización falló", - "nextUp": "Próxima actualización", - "noSchedule": "Sin programación", - "unknown": "Desconocido", - "autoUpdateDisabled": "La actualización automática está deshabilitada" - } - } - }, - "modals": { - "profileForm": { - "title": { - "create": "Crear configuración", - "edit": "Editar configuración" - }, - "fields": { - "type": "Tipo", - "description": "Descripción", - "subscriptionUrl": "Enlace de suscripción", - "httpTimeout": "HTTP Request Timeout", - "updateInterval": "Intervalo de actualización", - "useSystemProxy": "Usar proxy del sistema para actualizar", - "useClashProxy": "Usar proxy del núcleo para actualizar", - "acceptInvalidCerts": "Allows Invalid Certificates (Danger)", - "allowAutoUpdate": "Allow Auto Update" - }, - "feedback": { - "notifications": { - "creationRetry": "Error al crear la suscripción. Intentando con el proxy de Clash...", - "creationSuccess": "Creación de la suscripción con el proxy de Clash exitosa" - } - } - }, - "proxiesEditor": { - "title": "Editar nodos", - "placeholders": { - "multiUri": "Para múltiples URI, utilice saltos de línea (se admite la codificación Base64)" - }, - "actions": { - "prepend": "Agregar nodo de proxy previo", - "append": "Agregar nodo de proxy posterior" - } - }, - "groupsEditor": { - "title": "Editar grupos de proxy", - "errors": { - "nameRequired": "El nombre del grupo de proxy no puede estar vacío", - "nameExists": "El nombre del grupo de proxy ya existe" - }, - "fields": { - "type": "Tipo de grupo de proxy", - "name": "Nombre del grupo de proxy", - "icon": "Icono del grupo de proxy", - "proxies": "Incluir proxies", - "provider": "Incluir proveedor de proxies", - "healthCheckUrl": "URL de prueba de salud", - "expectedStatus": "Código de estado esperado", - "interval": "Intervalo de comprobación", - "maxFailedTimes": "Número máximo de fallos", - "interfaceName": "Nombre de la interfaz de salida", - "routingMark": "Marca de enrutamiento", - "filter": "Filtrar nodos", - "excludeFilter": "Excluir nodos", - "excludeType": "Tipo de nodo a excluir", - "includeAll": "Incluir todos los proxies de salida y proveedores de proxies", - "includeAllProxies": "Incluir todos los proxies de salida", - "includeAllProviders": "Incluir todos los proveedores de proxies" - }, - "toggles": { - "lazy": "Estado de inactividad", - "disableUdp": "Deshabilitar UDP", - "hidden": "Ocultar grupo de proxy" - }, - "actions": { - "prepend": "Agregar grupo de proxy previo", - "append": "Agregar grupo de proxy posterior" - } - }, - "editor": { - "actions": { - "format": "Formatear documento" - }, - "messages": { - "readOnly": "No se puede editar en modo de solo lectura" - } - }, - "confirmDelete": { - "title": "Confirmar eliminación", - "message": "Esta operación no se puede deshacer" - }, - "logViewer": { - "title": "Salida de la consola del script" - } - } - }, - "proxies": { - "page": { - "modes": { - "rule": "Rule", - "global": "Global", - "direct": "Direct" - }, - "actions": { - "toggleChain": "🔗 Proxy en cadena", - "connect": "Connect", - "disconnect": "Disconnect", - "connecting": "Connecting...", - "clearChainConfig": "Delete Chain Config" - }, - "provider": { - "title": "Proveedor de proxies", - "actions": { - "updateAll": "Actualizar todo", - "update": "Actualizar" - } - }, - "rules": { - "title": "Proxy Rules", - "select": "Select Rules" - }, - "labels": { - "proxyCount": "Número de nodos", - "delayCheckReset": "Realizar prueba de latencia para cancelar la fijación" - }, - "tooltips": { - "locate": "Nodo actual", - "delayCheck": "Prueba de latencia", - "sortDefault": "Ordenación predeterminada", - "sortDelay": "Ordenar por latencia", - "sortName": "Ordenar por nombre", - "delayCheckUrl": "URL de prueba de latencia", - "showBasic": "Ocultar detalles del nodo", - "showDetail": "Mostrar detalles del nodo", - "filter": "Filtrar nodos" - }, - "placeholders": { - "delayCheckUrl": "URL de prueba de latencia" - }, - "chain": { - "header": "Chain Proxy Config", - "empty": "No proxy chain configured", - "instruction": "Click nodes in order to add to proxy chain", - "minimumNodes": "Chain proxy requires at least 2 nodes", - "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", - "connectFailed": "Failed to connect to proxy chain", - "disconnectFailed": "Failed to disconnect from proxy chain", - "duplicateNode": "Proxy node already exists in chain" - }, - "messages": { - "directMode": "Modo de conexión directa" - }, - "title": { - "default": "Grupos de proxies", - "chainMode": "Proxy Chain Mode" - } - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "components": { - "enums": { - "strategies": { - "select": "Seleccionar proxy manualmente", - "url-test": "Seleccionar proxy según la prueba de latencia de la URL", - "fallback": "Cambiar a otro proxy cuando no esté disponible", - "load-balance": "Asignar proxy según el equilibrio de carga", - "relay": "Transferir según la cadena de proxy definida" - }, - "policies": { - "DIRECT": "Conexión directa", - "REJECT": "Rechazar solicitud", - "REJECT-DROP": "Descartar solicitud", - "PASS": "Saltar esta regla" - } - } - } - }, - "connections": { - "page": { - "title": "Conexiones" - }, - "components": { - "fields": { - "host": "Host", - "dlSpeed": "Velocidad de descarga", - "ulSpeed": "Velocidad de subida", - "chains": "Cadenas", - "rule": "Regla", - "process": "Proceso", - "time": "Tiempo de conexión", - "source": "Dirección de origen", - "destination": "Dirección de destino", - "destinationPort": "Puerto de destino", - "type": "Tipo" - }, - "order": { - "default": "Default", - "uploadSpeed": "Velocidad de subida", - "downloadSpeed": "Velocidad de descarga" - }, - "actions": { - "closeConnection": "Cerrar conexión" - } - } - }, - "tests": { - "page": { - "actions": { - "testAll": "Probar todo" - }, - "title": "Prueba" - }, - "components": { - "item": { - "actions": { - "test": "Prueba" - } - } - }, - "modals": { - "test": { - "title": { - "create": "Crear prueba", - "edit": "Editar prueba" - }, - "fields": { - "url": "URL de prueba" - } - } - }, - "statuses": { - "test": { - "pending": "Pendiente de detección", - "yes": "Soportado", - "no": "No soportado", - "failed": "Prueba fallida", - "completed": "Detección completada", - "disallowedIsp": "Proveedor de servicios de Internet no permitido", - "originalsOnly": "Solo originales", - "noDisney": "No (IP Banned By Disney+)", - "unsupportedRegion": "País/región no soportado", - "failedNetwork": "Failed (Network Connection)" - } - } - }, - "logs": { - "page": { - "title": "Registros" - } - }, - "rules": { - "page": { - "provider": { - "trigger": "Proveedor de reglas", - "dialogTitle": "Proveedor de reglas", - "actions": { - "updateAll": "Actualizar todo", - "update": "Actualizar" - } - }, - "title": "Reglas" - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "modals": { - "editor": { - "form": { - "labels": { - "type": "Tipo de regla", - "content": "Contenido de la regla", - "proxyPolicy": "Política de proxy" - }, - "toggles": { - "noResolve": "Omitir resolución DNS" - }, - "actions": { - "prependRule": "Agregar regla previa", - "appendRule": "Agregar regla posterior" - }, - "validation": { - "conditionRequired": "Falta la condición de la regla", - "invalidRule": "Regla no válida" - } - }, - "ruleTypes": { - "DOMAIN": "Coincidir con el nombre de dominio completo", - "DOMAIN-SUFFIX": "Coincidir con el sufijo del nombre de dominio", - "DOMAIN-KEYWORD": "Coincidir con la palabra clave del nombre de dominio", - "DOMAIN-REGEX": "Coincidir con la expresión regular del nombre de dominio", - "GEOSITE": "Coincidir con los nombres de dominio en Geosite", - "GEOIP": "Coincidir con el código de país del IP", - "SRC-GEOIP": "Coincidir con el código de país del IP de origen", - "IP-ASN": "Coincidir con el ASN del IP", - "SRC-IP-ASN": "Coincidir con el ASN del IP de origen", - "IP-CIDR": "Coincidir con el rango de direcciones IP", - "IP-CIDR6": "Coincidir con el rango de direcciones IP", - "SRC-IP-CIDR": "Coincidir con el rango de direcciones IP de origen", - "IP-SUFFIX": "Coincidir con el rango de sufijos de IP", - "SRC-IP-SUFFIX": "Coincidir con el rango de sufijos de IP de origen", - "SRC-PORT": "Coincidir con el rango de puertos de origen de la solicitud", - "DST-PORT": "Coincidir con el rango de puertos de destino de la solicitud", - "IN-PORT": "Coincidir con el puerto de entrada", - "DSCP": "Etiqueta DSCP (solo para entradas UDP TPROXY)", - "PROCESS-NAME": "Coincidir con el nombre del proceso (nombre del paquete de Android)", - "PROCESS-PATH": "Coincidir con la ruta completa del proceso", - "PROCESS-NAME-REGEX": "Coincidir con el nombre completo del proceso mediante expresiones regulares (nombre del paquete de Android)", - "PROCESS-PATH-REGEX": "Coincidir con la ruta completa del proceso mediante expresiones regulares", - "NETWORK": "Coincidir con el protocolo de transporte (TCP/UDP)", - "UID": "Coincidir con el ID de usuario de Linux", - "IN-TYPE": "Coincidir con el tipo de entrada", - "IN-USER": "Coincidir con el nombre de usuario de entrada", - "IN-NAME": "Coincidir con el nombre de entrada", - "SUB-RULE": "Subregla", - "RULE-SET": "Coincidir con el conjunto de reglas", - "AND": "Y lógico", - "OR": "O lógico", - "NOT": "No lógico", - "MATCH": "Coincidir con todas las solicitudes" - }, - "title": "Editar reglas" - } - } - }, - "home": { - "page": { - "tooltips": { - "lightweightMode": "Modo ligero", - "manual": "Manual de uso", - "settings": "Configuración de la página de inicio" - }, - "cards": { - "trafficStats": "Estadísticas de tráfico", - "networkSettings": "Configuración de red", - "proxyMode": "Modo de proxy" - }, - "settings": { - "cards": { - "profile": "Tarjeta de suscripción", - "currentProxy": "Tarjeta de proxy actual", - "network": "Tarjeta de configuración de red", - "proxyMode": "Tarjeta de modo de proxy", - "traffic": "Tarjeta de estadísticas de tráfico", - "tests": "Tarjeta de pruebas de sitios web", - "ip": "Tarjeta de información de IP", - "clashInfo": "Tarjetas de información de Clash", - "systemInfo": "Tarjetas de información del sistema" - }, - "title": "Configuración de la página de inicio" - }, - "title": "Hogar" - }, - "components": { - "proxyTun": { - "status": { - "systemProxyEnabled": "El proxy del sistema está habilitado. Sus aplicaciones accederán a Internet a través del proxy.", - "systemProxyDisabled": "El proxy del sistema está deshabilitado. Se recomienda a la mayoría de los usuarios habilitar esta opción.", - "tunModeServiceRequired": "El modo TUN requiere el modo de servicio. Instale el servicio primero.", - "tunModeEnabled": "El modo TUN está habilitado. Las aplicaciones accederán a Internet a través de la interfaz virtual.", - "tunModeDisabled": "El modo TUN está deshabilitado. Este modo es adecuado para aplicaciones especiales." - }, - "tooltips": { - "systemProxy": "Modifica la configuración del proxy del sistema operativo. Si no se puede habilitar, puede modificar manualmente la configuración del proxy del sistema operativo.", - "tunMode": "El modo TUN puede gestionar todo el tráfico de las aplicaciones. Es adecuado para aplicaciones que no siguen la configuración del proxy del sistema." - } - }, - "clashInfo": { - "title": "Información de Clash", - "fields": { - "coreVersion": "Versión del núcleo", - "systemProxyAddress": "Dirección del proxy del sistema", - "mixedPort": "Mixed Port", - "uptime": "Tiempo de actividad", - "rulesCount": "Número de reglas" - } - }, - "systemInfo": { - "title": "Información del sistema", - "fields": { - "osInfo": "Información del sistema operativo", - "autoLaunch": "Inicio automático al arrancar el sistema", - "runningMode": "Modo de ejecución", - "lastCheckUpdate": "Última comprobación de actualizaciones", - "vergeVersion": "Versión de Verge" - }, - "actions": { - "settings": "Ajustes" - }, - "tooltips": { - "autoLaunchAdmin": "El modo de administrador puede no admitir el inicio automático." - }, - "badges": { - "adminMode": "Modo de administrador", - "serviceMode": "Modo de servicio", - "sidecarMode": "Modo de usuario", - "adminServiceMode": "Admin + Service Mode" - } - }, - "ipInfo": { - "title": "Información de IP", - "labels": { - "ip": "IP", - "asn": "Número de sistema autónomo", - "isp": "Proveedor de servicios de Internet", - "org": "Organización", - "location": "Ubicación", - "timezone": "Zona horaria", - "autoRefresh": "Actualización automática", - "unknown": "Desconocido" - }, - "errors": { - "load": "Error al obtener la información de IP" - } - }, - "currentProxy": { - "title": "Nodo actual", - "actions": { - "refreshDelay": "Prueba de latencia" - }, - "labels": { - "globalMode": "Global Mode", - "directMode": "Direct Mode", - "group": "Grupo de proxy", - "proxy": "Nodo", - "noActiveNode": "No hay nodos de proxy activos" - } - }, - "tests": { - "title": "Pruebas de sitios web" - }, - "traffic": { - "metrics": { - "uploadSpeed": "Velocidad de subida", - "downloadSpeed": "Velocidad de descarga", - "activeConnections": "Conexiones activas", - "memoryUsage": "Uso de memoria del núcleo" - }, - "legends": { - "upload": "Subir", - "download": "Descargar" - }, - "patterns": { - "minutes": "{{time}} Minutes" - } - }, - "clashMode": { - "errors": { - "communication": "Core communication error" - }, - "labels": { - "rule": "Modo de reglas", - "global": "Modo global", - "direct": "Modo de conexión directa" - }, - "descriptions": { - "rule": "Automatically choose proxies according to the rule set.", - "global": "Forward all network requests through the selected proxy.", - "direct": "Bypass the proxy and connect to the internet directly." - } - } - } - }, - "unlock": { - "page": { - "actions": { - "testing": "Probando..." - }, - "empty": "No unlock test items", - "messages": { - "detectionTimeout": "Detection timeout or failed" - }, - "title": "Prueba de desbloqueo" - } - }, - "settings": { - "page": { - "actions": { - "manual": "Manual de uso", - "telegram": "Canal de Telegram", - "github": "Dirección del proyecto en GitHub" - }, - "title": "Ajustes" - }, - "sections": { - "system": { - "title": "Ajustes del sistema", - "toggles": { - "tunMode": "Modo de interfaz virtual (TUN)", - "systemProxy": "Proxy del sistema" - }, - "tooltips": { - "autoLaunchAdmin": "El modo de administrador puede no admitir el inicio automático.", - "silentStart": "El programa se ejecutará en segundo plano al iniciarse y no mostrará el panel." - }, - "fields": { - "autoLaunch": "Inicio automático", - "silentStart": "Inicio silencioso" - }, - "notifications": { - "tunMode": { - "autoDisabled": "TUN Mode automatically disabled due to service unavailable", - "autoDisableFailed": "Failed to disable TUN Mode automatically" - } - } - }, - "proxyControl": { - "tooltips": { - "systemProxy": "Modifica la configuración del proxy del sistema operativo. Si no se puede habilitar, puede modificar manualmente la configuración del proxy del sistema operativo.", - "tunMode": "El modo TUN (interfaz virtual) gestiona todo el tráfico del sistema. No es necesario habilitar el proxy del sistema cuando está activado.", - "tunUnavailable": "El modo TUN requiere el modo de servicio o el modo de administrador" - }, - "actions": { - "installService": "Instalar servicio", - "uninstallService": "Desinstalar servicio" - }, - "fields": { - "systemProxy": "Proxy del sistema", - "tunMode": "Modo de interfaz virtual (TUN)" - } - }, - "externalController": { - "title": "Dirección de escucha del controlador externo", - "fields": { - "enable": "Habilitar controlador externo", - "address": "Dirección de escucha del controlador externo", - "secret": "Clave de acceso a la API" - }, - "placeholders": { - "address": "Requerido", - "secret": "Configuración recomendada" - }, - "tooltips": { - "copy": "Copiar al portapapeles" - }, - "messages": { - "addressRequired": "La dirección del controlador no puede estar vacía", - "secretRequired": "La clave secreta no puede estar vacía", - "copyFailed": "Error al copiar", - "controllerCopied": "El puerto API se copió al portapapeles", - "secretCopied": "La clave API se copió al portapapeles" - } - }, - "externalCors": { - "title": "Configuración de CORS externo", - "fields": { - "allowPrivateNetwork": "Permitir acceso a red privada", - "allowedOrigins": "Orígenes permitidos" - }, - "placeholders": { - "origin": "Introduce una URL válida" - }, - "actions": { - "add": "Agregar" - }, - "messages": { - "alwaysIncluded": "Orígenes siempre incluidos: {{urls}}" - }, - "tooltips": { - "open": "Configuración de CORS externo" - } - }, - "appearance": { - "light": "Light", - "dark": "Dark", - "system": "System" - }, - "clash": { - "title": "Ajustes de Clash", - "form": { - "fields": { - "allowLan": "Conexión a la red local", - "dnsOverwrite": "Sobrescritura de DNS", - "ipv6": "IPv6", - "unifiedDelay": "Latencia unificada", - "logLevel": "Nivel de registro", - "portConfig": "Configuración de puerto", - "external": "Control externo", - "webUI": "Interfaz web", - "clashCore": "Núcleo de Clash", - "openUwpTool": "Abrir herramienta UWP", - "updateGeoData": "Actualizar GeoData" - }, - "tooltips": { - "networkInterface": "Interfaz de red", - "unifiedDelay": "Al habilitar la latencia unificada, se realizarán dos pruebas de latencia para eliminar las diferencias de latencia entre diferentes tipos de nodos causadas por el handshake de conexión, etc.", - "logLevel": "Solo se aplica al archivo de registro del núcleo en la carpeta Service del directorio de registros.", - "openUwpTool": "A partir de Windows 8, las aplicaciones UWP (como la Tienda de Microsoft) tienen restricciones para acceder directamente a los servicios de red del host local. Use esta herramienta para evitar esta restricción." - }, - "options": { - "logLevel": { - "debug": "Debug", - "info": "Info", - "warning": "Warn", - "error": "Error", - "silent": "Silent" - } - } - } - } - }, - "components": { - "verge": { - "basic": { - "title": "Ajustes básicos de Verge", - "actions": { - "browse": "Examinar" - }, - "trayOptions": { - "showMainWindow": "Mostrar ventana principal", - "showTrayMenu": "Mostrar menú de la bandeja", - "disable": "Deshabilitar" - }, - "fields": { - "language": "Configuración de idioma", - "themeMode": "Modo de tema", - "trayClickEvent": "Evento de clic en el icono de la bandeja", - "copyEnvType": "Copiar tipo de variable de entorno", - "startPage": "Página de inicio", - "startupScript": "Script de inicio", - "themeSetting": "Configuración de tema", - "layoutSetting": "Configuración de la interfaz", - "misc": "Ajustes varios", - "hotkeySetting": "Configuración de atajos de teclado" - } - }, - "advanced": { - "title": "Ajustes avanzados de Verge", - "tooltips": { - "backupInfo": "Soporte para la copia de seguridad de archivos de configuración a través de WebDAV", - "openConfDir": "Si el software no funciona correctamente, !realice una copia de seguridad! y elimine todos los archivos de esta carpeta, luego reinicie el software.", - "liteMode": "Cierra la interfaz gráfica y solo mantiene el núcleo en ejecución" - }, - "actions": { - "copyVersion": "Copy Version" - }, - "notifications": { - "latestVersion": "Actualmente está en la última versión", - "versionCopied": "Version copied to clipboard" - }, - "fields": { - "backupSetting": "Configuración de copia de seguridad", - "runtimeConfig": "Configuración actual", - "openConfDir": "Directorio de configuración", - "openCoreDir": "Directorio del núcleo", - "openLogsDir": "Directorio de registros", - "checkUpdates": "Comprobar actualizaciones", - "openDevTools": "Abrir herramientas de desarrollo", - "liteModeSettings": "Configuración del modo ligero", - "exit": "Salir", - "exportDiagnostics": "Exportar información de diagnóstico", - "vergeVersion": "Versión de Verge" - } - }, - "theme": { - "title": "Configuración de tema", - "fields": { - "primaryColor": "Color principal", - "secondaryColor": "Color secundario", - "primaryText": "Color principal del texto", - "secondaryText": "Color secundario del texto", - "infoColor": "Color de información", - "warningColor": "Color de advertencia", - "errorColor": "Color de error", - "successColor": "Color de éxito", - "fontFamily": "Familia tipográfica", - "cssInjection": "Inyección de CSS" - }, - "actions": { - "editCss": "Edit CSS" - }, - "dialogs": { - "editCssTitle": "Edit CSS" - } - }, - "layout": { - "title": "Configuración de la interfaz", - "fields": { - "preferSystemTitlebar": "Prefer System Titlebar", - "trafficGraph": "Gráfico de tráfico", - "memoryUsage": "Uso de memoria del núcleo", - "proxyGroupIcon": "Icono del grupo de proxy", - "hoverNavigator": "Hover Jump Navigator", - "hoverNavigatorDelay": "Hover Jump Navigator Delay", - "navIcon": "Icono de la barra de navegación", - "trayIcon": "Icono de la bandeja", - "showProxyGroupsInline": "Show Proxy Groups Inline", - "commonTrayIcon": "Icono de bandeja común", - "systemProxyTrayIcon": "Icono de bandeja del proxy del sistema", - "tunTrayIcon": "Icono de bandeja del modo TUN", - "enableTrayIcon": "Habilitar icono de la bandeja", - "enableTraySpeed": "Habilitar velocidad en la bandeja" - }, - "tooltips": { - "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", - "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" - }, - "options": { - "icon": { - "monochrome": "Icono monocromo", - "colorful": "Icono colorido", - "disable": "Deshabilitar" - } - } - } - } - }, - "modals": { - "clashPort": { - "title": "Configuración de puerto", - "fields": { - "mixed": "Puerto de proxy mixto", - "socks": "Puerto de proxy SOCKS", - "http": "Puerto de proxy HTTP(S)", - "redir": "Puerto de proxy transparente Redir", - "tproxy": "Puerto de proxy transparente TPROXY" - }, - "actions": { - "random": "Puerto aleatorio" - }, - "messages": { - "saved": "Port settings saved", - "saveFailed": "Failed to save port settings" - } - }, - "clashCore": { - "variants": { - "release": "Versión estable", - "alpha": "Versión alfa" - } - }, - "liteMode": { - "title": "Configuración del modo ligero", - "actions": { - "enterNow": "Entrar en modo ligero ahora" - }, - "toggles": { - "autoEnter": "Entrar automáticamente en modo ligero" - }, - "tooltips": { - "autoEnter": "Si se habilita, se activará automáticamente el modo ligero después de un tiempo de inactividad de la ventana." - }, - "fields": { - "delay": "Retraso para entrar automáticamente en modo ligero" - }, - "messages": { - "autoEnterHint": "Después de cerrar la ventana, el modo ligero se activará automáticamente después de {{n}} minutos" - } - }, - "backup": { - "title": "Configuración de copia de seguridad", - "tabs": { - "local": "Local backup", - "webdav": "WebDAV backup" - }, - "actions": { - "selectTarget": "Select backup target", - "backup": "Copia de seguridad", - "export": "Export", - "exportBackup": "Export Backup", - "deleteBackup": "Eliminar copia de seguridad", - "restore": "Restaurar", - "restoreBackup": "Restaurar copia de seguridad" - }, - "fields": { - "webdavUrl": "Dirección del servidor WebDAV http(s)://", - "username": "Nombre de usuario", - "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." - }, - "messages": { - "webdavUrlRequired": "La dirección del servidor WebDAV no puede estar vacía", - "invalidWebdavUrl": "Formato de dirección del servidor WebDAV no válido", - "usernameRequired": "El nombre de usuario no puede estar vacío", - "passwordRequired": "La contraseña no puede estar vacía", - "webdavConfigSaved": "Configuración de WebDAV guardada con éxito", - "webdavConfigSaveFailed": "Error al guardar la configuración de WebDAV: {{error}}", - "backupCreated": "Copia de seguridad creada con éxito", - "backupFailed": "Error al crear la copia de seguridad: {{error}}", - "localBackupCreated": "Local backup created successfully", - "localBackupFailed": "Local backup failed", - "restoreSuccess": "Restauración exitosa. La aplicación se reiniciará en 1 segundo", - "localBackupExported": "Local backup exported successfully", - "localBackupExportFailed": "Failed to export local backup", - "confirmDelete": "Confirm to delete this backup file?", - "confirmRestore": "Confirm to restore this backup file?" - }, - "table": { - "filename": "Nombre del archivo", - "backupTime": "Tiempo de copia de seguridad", - "actions": "Acciones", - "noBackups": "No hay copias de seguridad", - "rowsPerPage": "Rows per page" - } - }, - "misc": { - "title": "Ajustes varios", - "fields": { - "appLogLevel": "Nivel de registro de la aplicación", - "appLogMaxSize": "App Log Max Size", - "appLogMaxCount": "App Log Max Count", - "autoCloseConnections": "Cerrar conexiones automáticamente", - "autoCheckUpdate": "Comprobar actualizaciones automáticamente", - "enableBuiltinEnhanced": "Habilitar funciones mejoradas integradas", - "proxyLayoutColumns": "Número de columnas en la disposición de la página de proxy", - "autoLogClean": "Limpiar registros automáticamente", - "autoDelayDetection": "Detección automática de latencia", - "defaultLatencyTest": "Enlace de prueba de latencia predeterminado", - "defaultLatencyTimeout": "Tiempo de espera de la prueba de latencia" - }, - "tooltips": { - "autoCloseConnections": "Cierra las conexiones establecidas cuando se cambia el nodo seleccionado en el grupo de proxy o el modo de proxy.", - "enableBuiltinEnhanced": "Procesamiento de compatibilidad de archivos de configuración", - "autoDelayDetection": "Prueba periódicamente la latencia del nodo actual en segundo plano", - "defaultLatencyTest": "Solo se utiliza para pruebas de solicitudes de clientes HTTP y no afectará al archivo de configuración." - }, - "options": { - "proxyLayoutColumns": { - "auto": "Número de columnas automático" - }, - "autoLogClean": { - "never": "No limpiar", - "retainDays": "Retener {{n}} días" - } - } - }, - "update": { - "title": "New Version v{{version}}", - "actions": { - "goToRelease": "Ir a la página de lanzamiento", - "update": "Actualizar" - }, - "messages": { - "portableError": "La versión portátil no admite la actualización desde dentro de la aplicación. Descargue e instale manualmente la actualización.", - "breakChangeError": "Esta es una actualización importante y no se admite la actualización desde dentro de la aplicación. Desinstale e instale manualmente la nueva versión." - } - }, - "sysproxy": { - "title": "Configuración del proxy del sistema", - "fieldsets": { - "currentStatus": "Proxy del sistema actual" - }, - "fields": { - "enableStatus": "Estado de habilitación: ", - "serverAddr": "Dirección del servidor: ", - "pacUrl": "URL del PAC: ", - "proxyHost": "Host del proxy", - "usePacMode": "Usar modo PAC", - "proxyGuard": "Guardia del proxy del sistema", - "guardDuration": "Intervalo de guardia del proxy", - "alwaysUseDefaultBypass": "Siempre usar la lista de omisión predeterminada", - "proxyBypass": "Configuración de omisión del proxy: ", - "bypass": "Omisión actual: ", - "pacScriptContent": "Contenido del script PAC" - }, - "tooltips": { - "proxyGuard": "Habilite esta opción para evitar que otros programas modifiquen la configuración del proxy del sistema operativo." - }, - "messages": { - "durationTooShort": "El intervalo de tiempo del daemon de proxy no puede ser menor de 1 segundo", - "invalidBypass": "Formato de omisión de proxy no válido", - "invalidProxyHost": "Formato de host del proxy no válido" - }, - "actions": { - "editPac": "Editar PAC" - } - }, - "tun": { - "title": "Modo de interfaz virtual (TUN)", - "fields": { - "stack": "Pila del modo TUN", - "device": "Device Name", - "autoRoute": "Configurar enrutamiento global automáticamente", - "strictRoute": "Enrutamiento estricto", - "autoDetectInterface": "Detectar automáticamente la interfaz de salida del tráfico", - "dnsHijack": "Secuestro de DNS", - "mtu": "Unidad máxima de transmisión" - }, - "tooltips": { - "dnsHijack": "Please use , to separate multiple DNS servers" - }, - "messages": { - "applied": "Ajustes aplicados" - } - }, - "dns": { - "dialog": { - "title": "Sobrescritura de DNS", - "warning": "Si no está seguro de cómo configurar esto, no realice cambios y mantenga habilitada la sobrescritura de DNS." - }, - "sections": { - "general": "Configuración de DNS", - "fallbackFilter": "Configuración de filtrado de respaldo", - "hosts": "Configuración de hosts" - }, - "fields": { - "enable": "Habilitar DNS", - "listen": "Dirección de escucha de DNS", - "enhancedMode": "Modo mejorado", - "fakeIpRange": "Rango de Fake IP", - "fakeIpFilterMode": "Modo de filtrado de Fake IP", - "ipv6": { - "label": "IPv6", - "description": "Habilitar resolución DNS IPv6" - }, - "preferH3": { - "label": "Prefiere HTTP/3", - "description": "DNS DOH utiliza el protocolo HTTP/3" - }, - "respectRules": { - "label": "Seguir las reglas de enrutamiento", - "description": "Las conexiones DNS siguen las reglas de enrutamiento" - }, - "useHosts": { - "label": "Usar archivo hosts", - "description": "Habilitar la resolución de nombres de host a través del archivo hosts" - }, - "useSystemHosts": { - "label": "Usar archivo hosts del sistema", - "description": "Habilitar la resolución de nombres de host a través del archivo hosts del sistema" - }, - "directPolicy": { - "label": "Los servidores DNS de conexión directa siguen la política", - "description": "Si seguir la configuración de la política de servidores DNS" - }, - "defaultNameserver": { - "label": "Servidor DNS predeterminado", - "description": "Servidores DNS predeterminados utilizados para resolver servidores DNS" - }, - "nameserver": { - "label": "Servidor DNS", - "description": "Lista de servidores DNS, separados por comas" - }, - "fallback": { - "label": "Servidor de respaldo", - "description": "Lista de servidores DNS de respaldo, separados por comas" - }, - "proxy": { - "label": "DNS del servidor proxy", - "description": "Servidor de resolución de nombres de dominio del nodo de proxy, separados por comas" - }, - "directNameserver": { - "label": "Servidor DNS de conexión directa", - "description": "Servidor de resolución de nombres de dominio de salida directa, admite la palabra clave 'system', separados por comas" - }, - "fakeIpFilter": { - "label": "Filtro de Fake IP", - "description": "Dominios que omiten la resolución de Fake IP, separados por comas" - }, - "nameserverPolicy": { - "label": "Política de servidores DNS", - "description": "Servidor DNS específico de dominio, múltiples servidores separados por punto y coma, formato: dominio=server1;server2" - }, - "geoipFiltering": { - "label": "Filtrado GeoIP", - "description": "Habilitar el filtrado GeoIP de respaldo" - }, - "geoipCode": "Código de país GeoIP", - "fallbackIpCidr": { - "label": "IP CIDR de respaldo", - "description": "IP CIDR que no utilizan servidores de respaldo, separados por comas" - }, - "fallbackDomain": { - "label": "Dominio de respaldo", - "description": "Dominios que utilizan servidores de respaldo, separados por comas" - }, - "hosts": { - "label": "Hosts", - "description": "Asignación personalizada de dominio a IP o dominio, separados por comas" - } - }, - "messages": { - "saved": "Configuración de DNS guardada", - "configError": "DNS configuration error:" - }, - "errors": { - "invalid": "Invalid configuration" - } - }, - "webUI": { - "actions": { - "openUrl": "Abrir enlace" - }, - "title": "Interfaz web", - "messages": { - "supportedPlaceholders": "Soporta %host, %port, %secret", - "placeholderInstruction": "Utilice %host, %port, %secret para representar el host, el puerto y la clave de acceso." - } - }, - "hotkey": { - "toggles": { - "enableGlobal": "Habilitar atajos de teclado globales" - }, - "title": "Configuración de atajos de teclado", - "functions": { - "rule": "Modo de reglas", - "global": "Modo global", - "openOrCloseDashboard": "Abrir/cerrar panel", - "toggleSystemProxy": "Activar/desactivar el proxy del sistema", - "toggleTunMode": "Activar/desactivar el modo TUN", - "entryLightweightMode": "Entrar en modo ligero", - "direct": "Modo de conexión directa" - } - }, - "password": { - "prompts": { - "enterRoot": "Ingrese su contraseña de root" - } - }, - "networkInterface": { - "title": "Interfaz de red", - "fields": { - "ipAddress": "Dirección IP", - "macAddress": "Dirección MAC" - } - } - }, - "feedback": { - "notifications": { - "clash": { - "restartSuccess": "Núcleo de Clash reiniciado", - "versionUpdated": "Versión del núcleo actualizada", - "changeSuccess": "Núcleo cambiado con éxito", - "changeFailed": "No se pudo cambiar el núcleo", - "geoDataUpdated": "GeoData actualizado" - }, - "clashService": { - "installSuccess": "Servicio instalado con éxito", - "uninstallSuccess": "Servicio desinstalado con éxito" - }, - "updater": { - "withClashProxySuccess": "Actualización con el proxy de Clash exitosa", - "withClashProxyFailed": "Error al actualizar incluso con el proxy de Clash" - } - } - }, - "statuses": { - "clash": { - "stopping": "Deteniendo núcleo...", - "restarting": "Reiniciando núcleo..." - }, - "clashService": { - "installing": "Instalando servicio...", - "uninstalling": "Desinstalando servicio..." - } - } - }, - "layout": { - "components": { - "navigation": { - "tabs": { - "home": "Hogar", - "proxies": "Proxies", - "profiles": "Perfiles", - "connections": "Conexiones", - "rules": "Normas", - "logs": "Registros", - "unlock": "Descubrir", - "settings": "Ajustes" - }, - "menu": { - "reorderMode": "Menu reorder mode", - "unlock": "Unlock menu order", - "lock": "Lock menu order" - } - } - } - } -} diff --git a/src/locales/es/connections.json b/src/locales/es/connections.json new file mode 100644 index 00000000..e40c6b52 --- /dev/null +++ b/src/locales/es/connections.json @@ -0,0 +1,28 @@ +{ + "page": { + "title": "Conexiones" + }, + "components": { + "fields": { + "host": "Host", + "dlSpeed": "Velocidad de descarga", + "ulSpeed": "Velocidad de subida", + "chains": "Cadenas", + "rule": "Regla", + "process": "Proceso", + "time": "Tiempo de conexión", + "source": "Dirección de origen", + "destination": "Dirección de destino", + "destinationPort": "Puerto de destino", + "type": "Tipo" + }, + "order": { + "default": "Default", + "uploadSpeed": "Velocidad de subida", + "downloadSpeed": "Velocidad de descarga" + }, + "actions": { + "closeConnection": "Cerrar conexión" + } + } +} diff --git a/src/locales/es/home.json b/src/locales/es/home.json new file mode 100644 index 00000000..1c33c5d9 --- /dev/null +++ b/src/locales/es/home.json @@ -0,0 +1,138 @@ +{ + "page": { + "tooltips": { + "lightweightMode": "Modo ligero", + "manual": "Manual de uso", + "settings": "Configuración de la página de inicio" + }, + "cards": { + "trafficStats": "Estadísticas de tráfico", + "networkSettings": "Configuración de red", + "proxyMode": "Modo de proxy" + }, + "settings": { + "cards": { + "profile": "Tarjeta de suscripción", + "currentProxy": "Tarjeta de proxy actual", + "network": "Tarjeta de configuración de red", + "proxyMode": "Tarjeta de modo de proxy", + "traffic": "Tarjeta de estadísticas de tráfico", + "tests": "Tarjeta de pruebas de sitios web", + "ip": "Tarjeta de información de IP", + "clashInfo": "Tarjetas de información de Clash", + "systemInfo": "Tarjetas de información del sistema" + }, + "title": "Configuración de la página de inicio" + }, + "title": "Hogar" + }, + "components": { + "proxyTun": { + "status": { + "systemProxyEnabled": "El proxy del sistema está habilitado. Sus aplicaciones accederán a Internet a través del proxy.", + "systemProxyDisabled": "El proxy del sistema está deshabilitado. Se recomienda a la mayoría de los usuarios habilitar esta opción.", + "tunModeServiceRequired": "El modo TUN requiere el modo de servicio. Instale el servicio primero.", + "tunModeEnabled": "El modo TUN está habilitado. Las aplicaciones accederán a Internet a través de la interfaz virtual.", + "tunModeDisabled": "El modo TUN está deshabilitado. Este modo es adecuado para aplicaciones especiales." + }, + "tooltips": { + "systemProxy": "Modifica la configuración del proxy del sistema operativo. Si no se puede habilitar, puede modificar manualmente la configuración del proxy del sistema operativo.", + "tunMode": "El modo TUN puede gestionar todo el tráfico de las aplicaciones. Es adecuado para aplicaciones que no siguen la configuración del proxy del sistema." + } + }, + "clashInfo": { + "title": "Información de Clash", + "fields": { + "coreVersion": "Versión del núcleo", + "systemProxyAddress": "Dirección del proxy del sistema", + "mixedPort": "Mixed Port", + "uptime": "Tiempo de actividad", + "rulesCount": "Número de reglas" + } + }, + "systemInfo": { + "title": "Información del sistema", + "fields": { + "osInfo": "Información del sistema operativo", + "autoLaunch": "Inicio automático al arrancar el sistema", + "runningMode": "Modo de ejecución", + "lastCheckUpdate": "Última comprobación de actualizaciones", + "vergeVersion": "Versión de Verge" + }, + "actions": { + "settings": "Ajustes" + }, + "tooltips": { + "autoLaunchAdmin": "El modo de administrador puede no admitir el inicio automático." + }, + "badges": { + "adminMode": "Modo de administrador", + "serviceMode": "Modo de servicio", + "sidecarMode": "Modo de usuario", + "adminServiceMode": "Admin + Service Mode" + } + }, + "ipInfo": { + "title": "Información de IP", + "labels": { + "ip": "IP", + "asn": "Número de sistema autónomo", + "isp": "Proveedor de servicios de Internet", + "org": "Organización", + "location": "Ubicación", + "timezone": "Zona horaria", + "autoRefresh": "Actualización automática", + "unknown": "Desconocido" + }, + "errors": { + "load": "Error al obtener la información de IP" + } + }, + "currentProxy": { + "title": "Nodo actual", + "actions": { + "refreshDelay": "Prueba de latencia" + }, + "labels": { + "globalMode": "Global Mode", + "directMode": "Direct Mode", + "group": "Grupo de proxy", + "proxy": "Nodo", + "noActiveNode": "No hay nodos de proxy activos" + } + }, + "tests": { + "title": "Pruebas de sitios web" + }, + "traffic": { + "metrics": { + "uploadSpeed": "Velocidad de subida", + "downloadSpeed": "Velocidad de descarga", + "activeConnections": "Conexiones activas", + "memoryUsage": "Uso de memoria del núcleo" + }, + "legends": { + "upload": "Subir", + "download": "Descargar" + }, + "patterns": { + "minutes": "{{time}} Minutes" + } + }, + "clashMode": { + "errors": { + "communication": "Core communication error" + }, + "labels": { + "rule": "Modo de reglas", + "global": "Modo global", + "direct": "Modo de conexión directa" + }, + "descriptions": { + "rule": "Automatically choose proxies according to the rule set.", + "global": "Forward all network requests through the selected proxy.", + "direct": "Bypass the proxy and connect to the internet directly." + } + } + } +} diff --git a/src/locales/es/index.ts b/src/locales/es/index.ts new file mode 100644 index 00000000..2977171d --- /dev/null +++ b/src/locales/es/index.ts @@ -0,0 +1,27 @@ +import shared from "./shared.json"; +import profiles from "./profiles.json"; +import proxies from "./proxies.json"; +import connections from "./connections.json"; +import tests from "./tests.json"; +import logs from "./logs.json"; +import rules from "./rules.json"; +import home from "./home.json"; +import unlock from "./unlock.json"; +import settings from "./settings.json"; +import layout from "./layout.json"; + +const resources = { + "shared": shared, + "profiles": profiles, + "proxies": proxies, + "connections": connections, + "tests": tests, + "logs": logs, + "rules": rules, + "home": home, + "unlock": unlock, + "settings": settings, + "layout": layout, +}; + +export default resources; diff --git a/src/locales/es/layout.json b/src/locales/es/layout.json new file mode 100644 index 00000000..217d6d70 --- /dev/null +++ b/src/locales/es/layout.json @@ -0,0 +1,21 @@ +{ + "components": { + "navigation": { + "tabs": { + "home": "Hogar", + "proxies": "Proxies", + "profiles": "Perfiles", + "connections": "Conexiones", + "rules": "Normas", + "logs": "Registros", + "unlock": "Descubrir", + "settings": "Ajustes" + }, + "menu": { + "reorderMode": "Menu reorder mode", + "unlock": "Unlock menu order", + "lock": "Lock menu order" + } + } + } +} diff --git a/src/locales/es/logs.json b/src/locales/es/logs.json new file mode 100644 index 00000000..fe479175 --- /dev/null +++ b/src/locales/es/logs.json @@ -0,0 +1,5 @@ +{ + "page": { + "title": "Registros" + } +} diff --git a/src/locales/es/profiles.json b/src/locales/es/profiles.json new file mode 100644 index 00000000..050ed8b2 --- /dev/null +++ b/src/locales/es/profiles.json @@ -0,0 +1,182 @@ +{ + "page": { + "actions": { + "updateAll": "Actualizar todas las suscripciones", + "viewRuntimeConfig": "Ver configuración en tiempo de ejecución", + "reactivate": "Reactivar suscripciones", + "import": "Importar" + }, + "batch": { + "actions": { + "delete": "Delete Selected Profiles", + "selectAll": "Select All", + "deselectAll": "Deselect All", + "done": "Done" + }, + "summary": { + "selected": "Selected", + "items": "items" + }, + "title": "Batch Operations" + }, + "importForm": { + "placeholder": "Enlace del archivo de suscripción", + "actions": { + "paste": "Pegar" + } + }, + "feedback": { + "errors": { + "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", + "onlyYaml": "Solo se admiten archivos YAML" + }, + "notifications": { + "importRetry": "Error al importar la suscripción. Intentando con el proxy de Clash...", + "importFail": "Error al importar incluso con el proxy de Clash", + "importNeedsRefresh": "Profile imported but may need manual refresh", + "importSuccess": "Profile imported successfully, please restart if not visible", + "profileSwitched": "Suscripción cambiada", + "profileReactivated": "Suscripción reactivada", + "switchInterrupted": "Profile switch interrupted by new selection", + "batchDeleted": "Selected profiles deleted successfully" + }, + "notices": { + "forceRefreshCompleted": "Force refresh completed", + "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" + } + }, + "title": "Suscripciones" + }, + "components": { + "card": { + "labels": { + "clickToImport": "Haga clic para importar una suscripción" + } + }, + "fileInput": { + "chooseFile": "Elegir archivo" + }, + "menu": { + "home": "Hogar", + "select": "Usar", + "editInfo": "Editar información", + "editFile": "Editar archivo", + "editRules": "Editar reglas", + "editProxies": "Editar nodos", + "editGroups": "Editar grupos de proxy", + "extendConfig": "Configurar sobrescritura extendida", + "extendScript": "Script extendido", + "openFile": "Abrir archivo", + "update": "Actualizar", + "updateViaProxy": "Update via proxy" + }, + "more": { + "global": { + "merge": "Global Merge", + "script": "Global Script" + }, + "chips": { + "merge": "Merge", + "script": "Script" + } + }, + "profileItem": { + "tooltips": { + "showLast": "Click to show last update time", + "showNext": "Click to show next update" + }, + "status": { + "lastUpdateFailed": "La última actualización falló", + "nextUp": "Próxima actualización", + "noSchedule": "Sin programación", + "unknown": "Desconocido", + "autoUpdateDisabled": "La actualización automática está deshabilitada" + } + } + }, + "modals": { + "profileForm": { + "title": { + "create": "Crear configuración", + "edit": "Editar configuración" + }, + "fields": { + "type": "Tipo", + "description": "Descripción", + "subscriptionUrl": "Enlace de suscripción", + "httpTimeout": "HTTP Request Timeout", + "updateInterval": "Intervalo de actualización", + "useSystemProxy": "Usar proxy del sistema para actualizar", + "useClashProxy": "Usar proxy del núcleo para actualizar", + "acceptInvalidCerts": "Allows Invalid Certificates (Danger)", + "allowAutoUpdate": "Allow Auto Update" + }, + "feedback": { + "notifications": { + "creationRetry": "Error al crear la suscripción. Intentando con el proxy de Clash...", + "creationSuccess": "Creación de la suscripción con el proxy de Clash exitosa" + } + } + }, + "proxiesEditor": { + "title": "Editar nodos", + "placeholders": { + "multiUri": "Para múltiples URI, utilice saltos de línea (se admite la codificación Base64)" + }, + "actions": { + "prepend": "Agregar nodo de proxy previo", + "append": "Agregar nodo de proxy posterior" + } + }, + "groupsEditor": { + "title": "Editar grupos de proxy", + "errors": { + "nameRequired": "El nombre del grupo de proxy no puede estar vacío", + "nameExists": "El nombre del grupo de proxy ya existe" + }, + "fields": { + "type": "Tipo de grupo de proxy", + "name": "Nombre del grupo de proxy", + "icon": "Icono del grupo de proxy", + "proxies": "Incluir proxies", + "provider": "Incluir proveedor de proxies", + "healthCheckUrl": "URL de prueba de salud", + "expectedStatus": "Código de estado esperado", + "interval": "Intervalo de comprobación", + "maxFailedTimes": "Número máximo de fallos", + "interfaceName": "Nombre de la interfaz de salida", + "routingMark": "Marca de enrutamiento", + "filter": "Filtrar nodos", + "excludeFilter": "Excluir nodos", + "excludeType": "Tipo de nodo a excluir", + "includeAll": "Incluir todos los proxies de salida y proveedores de proxies", + "includeAllProxies": "Incluir todos los proxies de salida", + "includeAllProviders": "Incluir todos los proveedores de proxies" + }, + "toggles": { + "lazy": "Estado de inactividad", + "disableUdp": "Deshabilitar UDP", + "hidden": "Ocultar grupo de proxy" + }, + "actions": { + "prepend": "Agregar grupo de proxy previo", + "append": "Agregar grupo de proxy posterior" + } + }, + "editor": { + "actions": { + "format": "Formatear documento" + }, + "messages": { + "readOnly": "No se puede editar en modo de solo lectura" + } + }, + "confirmDelete": { + "title": "Confirmar eliminación", + "message": "Esta operación no se puede deshacer" + }, + "logViewer": { + "title": "Salida de la consola del script" + } + } +} diff --git a/src/locales/es/proxies.json b/src/locales/es/proxies.json new file mode 100644 index 00000000..1699dd5a --- /dev/null +++ b/src/locales/es/proxies.json @@ -0,0 +1,90 @@ +{ + "page": { + "modes": { + "rule": "Rule", + "global": "Global", + "direct": "Direct" + }, + "actions": { + "toggleChain": "🔗 Proxy en cadena", + "connect": "Connect", + "disconnect": "Disconnect", + "connecting": "Connecting...", + "clearChainConfig": "Delete Chain Config" + }, + "provider": { + "title": "Proveedor de proxies", + "actions": { + "updateAll": "Actualizar todo", + "update": "Actualizar" + } + }, + "rules": { + "title": "Proxy Rules", + "select": "Select Rules" + }, + "labels": { + "proxyCount": "Número de nodos", + "delayCheckReset": "Realizar prueba de latencia para cancelar la fijación" + }, + "tooltips": { + "locate": "Nodo actual", + "delayCheck": "Prueba de latencia", + "sortDefault": "Ordenación predeterminada", + "sortDelay": "Ordenar por latencia", + "sortName": "Ordenar por nombre", + "delayCheckUrl": "URL de prueba de latencia", + "showBasic": "Ocultar detalles del nodo", + "showDetail": "Mostrar detalles del nodo", + "filter": "Filtrar nodos" + }, + "placeholders": { + "delayCheckUrl": "URL de prueba de latencia" + }, + "chain": { + "header": "Chain Proxy Config", + "empty": "No proxy chain configured", + "instruction": "Click nodes in order to add to proxy chain", + "minimumNodes": "Chain proxy requires at least 2 nodes", + "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", + "connectFailed": "Failed to connect to proxy chain", + "disconnectFailed": "Failed to disconnect from proxy chain", + "duplicateNode": "Proxy node already exists in chain" + }, + "messages": { + "directMode": "Modo de conexión directa" + }, + "title": { + "default": "Grupos de proxies", + "chainMode": "Proxy Chain Mode" + } + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "components": { + "enums": { + "strategies": { + "select": "Seleccionar proxy manualmente", + "url-test": "Seleccionar proxy según la prueba de latencia de la URL", + "fallback": "Cambiar a otro proxy cuando no esté disponible", + "load-balance": "Asignar proxy según el equilibrio de carga", + "relay": "Transferir según la cadena de proxy definida" + }, + "policies": { + "DIRECT": "Conexión directa", + "REJECT": "Rechazar solicitud", + "REJECT-DROP": "Descartar solicitud", + "PASS": "Saltar esta regla" + } + } + } +} diff --git a/src/locales/es/rules.json b/src/locales/es/rules.json new file mode 100644 index 00000000..442fe13c --- /dev/null +++ b/src/locales/es/rules.json @@ -0,0 +1,82 @@ +{ + "page": { + "provider": { + "trigger": "Proveedor de reglas", + "dialogTitle": "Proveedor de reglas", + "actions": { + "updateAll": "Actualizar todo", + "update": "Actualizar" + } + }, + "title": "Reglas" + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "modals": { + "editor": { + "form": { + "labels": { + "type": "Tipo de regla", + "content": "Contenido de la regla", + "proxyPolicy": "Política de proxy" + }, + "toggles": { + "noResolve": "Omitir resolución DNS" + }, + "actions": { + "prependRule": "Agregar regla previa", + "appendRule": "Agregar regla posterior" + }, + "validation": { + "conditionRequired": "Falta la condición de la regla", + "invalidRule": "Regla no válida" + } + }, + "ruleTypes": { + "DOMAIN": "Coincidir con el nombre de dominio completo", + "DOMAIN-SUFFIX": "Coincidir con el sufijo del nombre de dominio", + "DOMAIN-KEYWORD": "Coincidir con la palabra clave del nombre de dominio", + "DOMAIN-REGEX": "Coincidir con la expresión regular del nombre de dominio", + "GEOSITE": "Coincidir con los nombres de dominio en Geosite", + "GEOIP": "Coincidir con el código de país del IP", + "SRC-GEOIP": "Coincidir con el código de país del IP de origen", + "IP-ASN": "Coincidir con el ASN del IP", + "SRC-IP-ASN": "Coincidir con el ASN del IP de origen", + "IP-CIDR": "Coincidir con el rango de direcciones IP", + "IP-CIDR6": "Coincidir con el rango de direcciones IP", + "SRC-IP-CIDR": "Coincidir con el rango de direcciones IP de origen", + "IP-SUFFIX": "Coincidir con el rango de sufijos de IP", + "SRC-IP-SUFFIX": "Coincidir con el rango de sufijos de IP de origen", + "SRC-PORT": "Coincidir con el rango de puertos de origen de la solicitud", + "DST-PORT": "Coincidir con el rango de puertos de destino de la solicitud", + "IN-PORT": "Coincidir con el puerto de entrada", + "DSCP": "Etiqueta DSCP (solo para entradas UDP TPROXY)", + "PROCESS-NAME": "Coincidir con el nombre del proceso (nombre del paquete de Android)", + "PROCESS-PATH": "Coincidir con la ruta completa del proceso", + "PROCESS-NAME-REGEX": "Coincidir con el nombre completo del proceso mediante expresiones regulares (nombre del paquete de Android)", + "PROCESS-PATH-REGEX": "Coincidir con la ruta completa del proceso mediante expresiones regulares", + "NETWORK": "Coincidir con el protocolo de transporte (TCP/UDP)", + "UID": "Coincidir con el ID de usuario de Linux", + "IN-TYPE": "Coincidir con el tipo de entrada", + "IN-USER": "Coincidir con el nombre de usuario de entrada", + "IN-NAME": "Coincidir con el nombre de entrada", + "SUB-RULE": "Subregla", + "RULE-SET": "Coincidir con el conjunto de reglas", + "AND": "Y lógico", + "OR": "O lógico", + "NOT": "No lógico", + "MATCH": "Coincidir con todas las solicitudes" + }, + "title": "Editar reglas" + } + } +} diff --git a/src/locales/es/settings.json b/src/locales/es/settings.json new file mode 100644 index 00000000..f4ce9c9a --- /dev/null +++ b/src/locales/es/settings.json @@ -0,0 +1,571 @@ +{ + "page": { + "actions": { + "manual": "Manual de uso", + "telegram": "Canal de Telegram", + "github": "Dirección del proyecto en GitHub" + }, + "title": "Ajustes" + }, + "sections": { + "system": { + "title": "Ajustes del sistema", + "toggles": { + "tunMode": "Modo de interfaz virtual (TUN)", + "systemProxy": "Proxy del sistema" + }, + "tooltips": { + "autoLaunchAdmin": "El modo de administrador puede no admitir el inicio automático.", + "silentStart": "El programa se ejecutará en segundo plano al iniciarse y no mostrará el panel." + }, + "fields": { + "autoLaunch": "Inicio automático", + "silentStart": "Inicio silencioso" + }, + "notifications": { + "tunMode": { + "autoDisabled": "TUN Mode automatically disabled due to service unavailable", + "autoDisableFailed": "Failed to disable TUN Mode automatically" + } + } + }, + "proxyControl": { + "tooltips": { + "systemProxy": "Modifica la configuración del proxy del sistema operativo. Si no se puede habilitar, puede modificar manualmente la configuración del proxy del sistema operativo.", + "tunMode": "El modo TUN (interfaz virtual) gestiona todo el tráfico del sistema. No es necesario habilitar el proxy del sistema cuando está activado.", + "tunUnavailable": "El modo TUN requiere el modo de servicio o el modo de administrador" + }, + "actions": { + "installService": "Instalar servicio", + "uninstallService": "Desinstalar servicio" + }, + "fields": { + "systemProxy": "Proxy del sistema", + "tunMode": "Modo de interfaz virtual (TUN)" + } + }, + "externalController": { + "title": "Dirección de escucha del controlador externo", + "fields": { + "enable": "Habilitar controlador externo", + "address": "Dirección de escucha del controlador externo", + "secret": "Clave de acceso a la API" + }, + "placeholders": { + "address": "Requerido", + "secret": "Configuración recomendada" + }, + "tooltips": { + "copy": "Copiar al portapapeles" + }, + "messages": { + "addressRequired": "La dirección del controlador no puede estar vacía", + "secretRequired": "La clave secreta no puede estar vacía", + "copyFailed": "Error al copiar", + "controllerCopied": "El puerto API se copió al portapapeles", + "secretCopied": "La clave API se copió al portapapeles" + } + }, + "externalCors": { + "title": "Configuración de CORS externo", + "fields": { + "allowPrivateNetwork": "Permitir acceso a red privada", + "allowedOrigins": "Orígenes permitidos" + }, + "placeholders": { + "origin": "Introduce una URL válida" + }, + "actions": { + "add": "Agregar" + }, + "messages": { + "alwaysIncluded": "Orígenes siempre incluidos: {{urls}}" + }, + "tooltips": { + "open": "Configuración de CORS externo" + } + }, + "appearance": { + "light": "Light", + "dark": "Dark", + "system": "System" + }, + "clash": { + "title": "Ajustes de Clash", + "form": { + "fields": { + "allowLan": "Conexión a la red local", + "dnsOverwrite": "Sobrescritura de DNS", + "ipv6": "IPv6", + "unifiedDelay": "Latencia unificada", + "logLevel": "Nivel de registro", + "portConfig": "Configuración de puerto", + "external": "Control externo", + "webUI": "Interfaz web", + "clashCore": "Núcleo de Clash", + "openUwpTool": "Abrir herramienta UWP", + "updateGeoData": "Actualizar GeoData" + }, + "tooltips": { + "networkInterface": "Interfaz de red", + "unifiedDelay": "Al habilitar la latencia unificada, se realizarán dos pruebas de latencia para eliminar las diferencias de latencia entre diferentes tipos de nodos causadas por el handshake de conexión, etc.", + "logLevel": "Solo se aplica al archivo de registro del núcleo en la carpeta Service del directorio de registros.", + "openUwpTool": "A partir de Windows 8, las aplicaciones UWP (como la Tienda de Microsoft) tienen restricciones para acceder directamente a los servicios de red del host local. Use esta herramienta para evitar esta restricción." + }, + "options": { + "logLevel": { + "debug": "Debug", + "info": "Info", + "warning": "Warn", + "error": "Error", + "silent": "Silent" + } + } + } + } + }, + "components": { + "verge": { + "basic": { + "title": "Ajustes básicos de Verge", + "actions": { + "browse": "Examinar" + }, + "trayOptions": { + "showMainWindow": "Mostrar ventana principal", + "showTrayMenu": "Mostrar menú de la bandeja", + "disable": "Deshabilitar" + }, + "fields": { + "language": "Configuración de idioma", + "themeMode": "Modo de tema", + "trayClickEvent": "Evento de clic en el icono de la bandeja", + "copyEnvType": "Copiar tipo de variable de entorno", + "startPage": "Página de inicio", + "startupScript": "Script de inicio", + "themeSetting": "Configuración de tema", + "layoutSetting": "Configuración de la interfaz", + "misc": "Ajustes varios", + "hotkeySetting": "Configuración de atajos de teclado" + } + }, + "advanced": { + "title": "Ajustes avanzados de Verge", + "tooltips": { + "backupInfo": "Soporte para la copia de seguridad de archivos de configuración a través de WebDAV", + "openConfDir": "Si el software no funciona correctamente, !realice una copia de seguridad! y elimine todos los archivos de esta carpeta, luego reinicie el software.", + "liteMode": "Cierra la interfaz gráfica y solo mantiene el núcleo en ejecución" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "Actualmente está en la última versión", + "versionCopied": "Version copied to clipboard" + }, + "fields": { + "backupSetting": "Configuración de copia de seguridad", + "runtimeConfig": "Configuración actual", + "openConfDir": "Directorio de configuración", + "openCoreDir": "Directorio del núcleo", + "openLogsDir": "Directorio de registros", + "checkUpdates": "Comprobar actualizaciones", + "openDevTools": "Abrir herramientas de desarrollo", + "liteModeSettings": "Configuración del modo ligero", + "exit": "Salir", + "exportDiagnostics": "Exportar información de diagnóstico", + "vergeVersion": "Versión de Verge" + } + }, + "theme": { + "title": "Configuración de tema", + "fields": { + "primaryColor": "Color principal", + "secondaryColor": "Color secundario", + "primaryText": "Color principal del texto", + "secondaryText": "Color secundario del texto", + "infoColor": "Color de información", + "warningColor": "Color de advertencia", + "errorColor": "Color de error", + "successColor": "Color de éxito", + "fontFamily": "Familia tipográfica", + "cssInjection": "Inyección de CSS" + }, + "actions": { + "editCss": "Edit CSS" + }, + "dialogs": { + "editCssTitle": "Edit CSS" + } + }, + "layout": { + "title": "Configuración de la interfaz", + "fields": { + "preferSystemTitlebar": "Prefer System Titlebar", + "trafficGraph": "Gráfico de tráfico", + "memoryUsage": "Uso de memoria del núcleo", + "proxyGroupIcon": "Icono del grupo de proxy", + "hoverNavigator": "Hover Jump Navigator", + "hoverNavigatorDelay": "Hover Jump Navigator Delay", + "navIcon": "Icono de la barra de navegación", + "trayIcon": "Icono de la bandeja", + "showProxyGroupsInline": "Show Proxy Groups Inline", + "commonTrayIcon": "Icono de bandeja común", + "systemProxyTrayIcon": "Icono de bandeja del proxy del sistema", + "tunTrayIcon": "Icono de bandeja del modo TUN", + "enableTrayIcon": "Habilitar icono de la bandeja", + "enableTraySpeed": "Habilitar velocidad en la bandeja" + }, + "tooltips": { + "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", + "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" + }, + "options": { + "icon": { + "monochrome": "Icono monocromo", + "colorful": "Icono colorido", + "disable": "Deshabilitar" + } + } + } + } + }, + "modals": { + "clashPort": { + "title": "Configuración de puerto", + "fields": { + "mixed": "Puerto de proxy mixto", + "socks": "Puerto de proxy SOCKS", + "http": "Puerto de proxy HTTP(S)", + "redir": "Puerto de proxy transparente Redir", + "tproxy": "Puerto de proxy transparente TPROXY" + }, + "actions": { + "random": "Puerto aleatorio" + }, + "messages": { + "saved": "Port settings saved", + "saveFailed": "Failed to save port settings" + } + }, + "clashCore": { + "variants": { + "release": "Versión estable", + "alpha": "Versión alfa" + } + }, + "liteMode": { + "title": "Configuración del modo ligero", + "actions": { + "enterNow": "Entrar en modo ligero ahora" + }, + "toggles": { + "autoEnter": "Entrar automáticamente en modo ligero" + }, + "tooltips": { + "autoEnter": "Si se habilita, se activará automáticamente el modo ligero después de un tiempo de inactividad de la ventana." + }, + "fields": { + "delay": "Retraso para entrar automáticamente en modo ligero" + }, + "messages": { + "autoEnterHint": "Después de cerrar la ventana, el modo ligero se activará automáticamente después de {{n}} minutos" + } + }, + "backup": { + "title": "Configuración de copia de seguridad", + "tabs": { + "local": "Local backup", + "webdav": "WebDAV backup" + }, + "actions": { + "selectTarget": "Select backup target", + "backup": "Copia de seguridad", + "export": "Export", + "exportBackup": "Export Backup", + "deleteBackup": "Eliminar copia de seguridad", + "restore": "Restaurar", + "restoreBackup": "Restaurar copia de seguridad" + }, + "fields": { + "webdavUrl": "Dirección del servidor WebDAV http(s)://", + "username": "Nombre de usuario", + "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." + }, + "messages": { + "webdavUrlRequired": "La dirección del servidor WebDAV no puede estar vacía", + "invalidWebdavUrl": "Formato de dirección del servidor WebDAV no válido", + "usernameRequired": "El nombre de usuario no puede estar vacío", + "passwordRequired": "La contraseña no puede estar vacía", + "webdavConfigSaved": "Configuración de WebDAV guardada con éxito", + "webdavConfigSaveFailed": "Error al guardar la configuración de WebDAV: {{error}}", + "backupCreated": "Copia de seguridad creada con éxito", + "backupFailed": "Error al crear la copia de seguridad: {{error}}", + "localBackupCreated": "Local backup created successfully", + "localBackupFailed": "Local backup failed", + "restoreSuccess": "Restauración exitosa. La aplicación se reiniciará en 1 segundo", + "localBackupExported": "Local backup exported successfully", + "localBackupExportFailed": "Failed to export local backup", + "confirmDelete": "Confirm to delete this backup file?", + "confirmRestore": "Confirm to restore this backup file?" + }, + "table": { + "filename": "Nombre del archivo", + "backupTime": "Tiempo de copia de seguridad", + "actions": "Acciones", + "noBackups": "No hay copias de seguridad", + "rowsPerPage": "Rows per page" + } + }, + "misc": { + "title": "Ajustes varios", + "fields": { + "appLogLevel": "Nivel de registro de la aplicación", + "appLogMaxSize": "App Log Max Size", + "appLogMaxCount": "App Log Max Count", + "autoCloseConnections": "Cerrar conexiones automáticamente", + "autoCheckUpdate": "Comprobar actualizaciones automáticamente", + "enableBuiltinEnhanced": "Habilitar funciones mejoradas integradas", + "proxyLayoutColumns": "Número de columnas en la disposición de la página de proxy", + "autoLogClean": "Limpiar registros automáticamente", + "autoDelayDetection": "Detección automática de latencia", + "defaultLatencyTest": "Enlace de prueba de latencia predeterminado", + "defaultLatencyTimeout": "Tiempo de espera de la prueba de latencia" + }, + "tooltips": { + "autoCloseConnections": "Cierra las conexiones establecidas cuando se cambia el nodo seleccionado en el grupo de proxy o el modo de proxy.", + "enableBuiltinEnhanced": "Procesamiento de compatibilidad de archivos de configuración", + "autoDelayDetection": "Prueba periódicamente la latencia del nodo actual en segundo plano", + "defaultLatencyTest": "Solo se utiliza para pruebas de solicitudes de clientes HTTP y no afectará al archivo de configuración." + }, + "options": { + "proxyLayoutColumns": { + "auto": "Número de columnas automático" + }, + "autoLogClean": { + "never": "No limpiar", + "retainDays": "Retener {{n}} días" + } + } + }, + "update": { + "title": "New Version v{{version}}", + "actions": { + "goToRelease": "Ir a la página de lanzamiento", + "update": "Actualizar" + }, + "messages": { + "portableError": "La versión portátil no admite la actualización desde dentro de la aplicación. Descargue e instale manualmente la actualización.", + "breakChangeError": "Esta es una actualización importante y no se admite la actualización desde dentro de la aplicación. Desinstale e instale manualmente la nueva versión." + } + }, + "sysproxy": { + "title": "Configuración del proxy del sistema", + "fieldsets": { + "currentStatus": "Proxy del sistema actual" + }, + "fields": { + "enableStatus": "Estado de habilitación: ", + "serverAddr": "Dirección del servidor: ", + "pacUrl": "URL del PAC: ", + "proxyHost": "Host del proxy", + "usePacMode": "Usar modo PAC", + "proxyGuard": "Guardia del proxy del sistema", + "guardDuration": "Intervalo de guardia del proxy", + "alwaysUseDefaultBypass": "Siempre usar la lista de omisión predeterminada", + "proxyBypass": "Configuración de omisión del proxy: ", + "bypass": "Omisión actual: ", + "pacScriptContent": "Contenido del script PAC" + }, + "tooltips": { + "proxyGuard": "Habilite esta opción para evitar que otros programas modifiquen la configuración del proxy del sistema operativo." + }, + "messages": { + "durationTooShort": "El intervalo de tiempo del daemon de proxy no puede ser menor de 1 segundo", + "invalidBypass": "Formato de omisión de proxy no válido", + "invalidProxyHost": "Formato de host del proxy no válido" + }, + "actions": { + "editPac": "Editar PAC" + } + }, + "tun": { + "title": "Modo de interfaz virtual (TUN)", + "fields": { + "stack": "Pila del modo TUN", + "device": "Device Name", + "autoRoute": "Configurar enrutamiento global automáticamente", + "strictRoute": "Enrutamiento estricto", + "autoDetectInterface": "Detectar automáticamente la interfaz de salida del tráfico", + "dnsHijack": "Secuestro de DNS", + "mtu": "Unidad máxima de transmisión" + }, + "tooltips": { + "dnsHijack": "Please use , to separate multiple DNS servers" + }, + "messages": { + "applied": "Ajustes aplicados" + } + }, + "dns": { + "dialog": { + "title": "Sobrescritura de DNS", + "warning": "Si no está seguro de cómo configurar esto, no realice cambios y mantenga habilitada la sobrescritura de DNS." + }, + "sections": { + "general": "Configuración de DNS", + "fallbackFilter": "Configuración de filtrado de respaldo", + "hosts": "Configuración de hosts" + }, + "fields": { + "enable": "Habilitar DNS", + "listen": "Dirección de escucha de DNS", + "enhancedMode": "Modo mejorado", + "fakeIpRange": "Rango de Fake IP", + "fakeIpFilterMode": "Modo de filtrado de Fake IP", + "ipv6": { + "label": "IPv6", + "description": "Habilitar resolución DNS IPv6" + }, + "preferH3": { + "label": "Prefiere HTTP/3", + "description": "DNS DOH utiliza el protocolo HTTP/3" + }, + "respectRules": { + "label": "Seguir las reglas de enrutamiento", + "description": "Las conexiones DNS siguen las reglas de enrutamiento" + }, + "useHosts": { + "label": "Usar archivo hosts", + "description": "Habilitar la resolución de nombres de host a través del archivo hosts" + }, + "useSystemHosts": { + "label": "Usar archivo hosts del sistema", + "description": "Habilitar la resolución de nombres de host a través del archivo hosts del sistema" + }, + "directPolicy": { + "label": "Los servidores DNS de conexión directa siguen la política", + "description": "Si seguir la configuración de la política de servidores DNS" + }, + "defaultNameserver": { + "label": "Servidor DNS predeterminado", + "description": "Servidores DNS predeterminados utilizados para resolver servidores DNS" + }, + "nameserver": { + "label": "Servidor DNS", + "description": "Lista de servidores DNS, separados por comas" + }, + "fallback": { + "label": "Servidor de respaldo", + "description": "Lista de servidores DNS de respaldo, separados por comas" + }, + "proxy": { + "label": "DNS del servidor proxy", + "description": "Servidor de resolución de nombres de dominio del nodo de proxy, separados por comas" + }, + "directNameserver": { + "label": "Servidor DNS de conexión directa", + "description": "Servidor de resolución de nombres de dominio de salida directa, admite la palabra clave 'system', separados por comas" + }, + "fakeIpFilter": { + "label": "Filtro de Fake IP", + "description": "Dominios que omiten la resolución de Fake IP, separados por comas" + }, + "nameserverPolicy": { + "label": "Política de servidores DNS", + "description": "Servidor DNS específico de dominio, múltiples servidores separados por punto y coma, formato: dominio=server1;server2" + }, + "geoipFiltering": { + "label": "Filtrado GeoIP", + "description": "Habilitar el filtrado GeoIP de respaldo" + }, + "geoipCode": "Código de país GeoIP", + "fallbackIpCidr": { + "label": "IP CIDR de respaldo", + "description": "IP CIDR que no utilizan servidores de respaldo, separados por comas" + }, + "fallbackDomain": { + "label": "Dominio de respaldo", + "description": "Dominios que utilizan servidores de respaldo, separados por comas" + }, + "hosts": { + "label": "Hosts", + "description": "Asignación personalizada de dominio a IP o dominio, separados por comas" + } + }, + "messages": { + "saved": "Configuración de DNS guardada", + "configError": "DNS configuration error:" + }, + "errors": { + "invalid": "Invalid configuration" + } + }, + "webUI": { + "actions": { + "openUrl": "Abrir enlace" + }, + "title": "Interfaz web", + "messages": { + "supportedPlaceholders": "Soporta %host, %port, %secret", + "placeholderInstruction": "Utilice %host, %port, %secret para representar el host, el puerto y la clave de acceso." + } + }, + "hotkey": { + "toggles": { + "enableGlobal": "Habilitar atajos de teclado globales" + }, + "title": "Configuración de atajos de teclado", + "functions": { + "rule": "Modo de reglas", + "global": "Modo global", + "openOrCloseDashboard": "Abrir/cerrar panel", + "toggleSystemProxy": "Activar/desactivar el proxy del sistema", + "toggleTunMode": "Activar/desactivar el modo TUN", + "entryLightweightMode": "Entrar en modo ligero", + "direct": "Modo de conexión directa" + } + }, + "password": { + "prompts": { + "enterRoot": "Ingrese su contraseña de root" + } + }, + "networkInterface": { + "title": "Interfaz de red", + "fields": { + "ipAddress": "Dirección IP", + "macAddress": "Dirección MAC" + } + } + }, + "feedback": { + "notifications": { + "clash": { + "restartSuccess": "Núcleo de Clash reiniciado", + "versionUpdated": "Versión del núcleo actualizada", + "changeSuccess": "Núcleo cambiado con éxito", + "changeFailed": "No se pudo cambiar el núcleo", + "geoDataUpdated": "GeoData actualizado" + }, + "clashService": { + "installSuccess": "Servicio instalado con éxito", + "uninstallSuccess": "Servicio desinstalado con éxito" + }, + "updater": { + "withClashProxySuccess": "Actualización con el proxy de Clash exitosa", + "withClashProxyFailed": "Error al actualizar incluso con el proxy de Clash" + } + } + }, + "statuses": { + "clash": { + "stopping": "Deteniendo núcleo...", + "restarting": "Reiniciando núcleo..." + }, + "clashService": { + "installing": "Instalando servicio...", + "uninstalling": "Desinstalando servicio..." + } + } +} diff --git a/src/locales/es/shared.json b/src/locales/es/shared.json new file mode 100644 index 00000000..7e26f82c --- /dev/null +++ b/src/locales/es/shared.json @@ -0,0 +1,128 @@ +{ + "actions": { + "cancel": "Cancelar", + "close": "Cerrar", + "confirm": "Confirmar", + "save": "Guardar", + "delete": "Eliminar", + "edit": "Editar", + "new": "Nuevo", + "enable": "Habilitar", + "upgrade": "Actualizar núcleo", + "restart": "Reiniciar núcleo", + "resetToDefault": "Restablecer a los valores predeterminados", + "refresh": "Actualizar", + "retry": "Retry", + "refreshPage": "Refresh Page", + "showDetails": "Show Details", + "hideDetails": "Hide Details", + "listView": "Vista de lista", + "tableView": "Vista de tabla", + "pause": "Pausar", + "resume": "Reanudar", + "closeAll": "Cerrar todas", + "clear": "Limpiar" + }, + "labels": { + "updateAt": "Actualizado el", + "timeout": "Timeout", + "icon": "Icono", + "name": "Nombre", + "readOnly": "Solo lectura", + "expireTime": "Tiempo de expiración", + "updateTime": "Hora de actualización", + "usedTotal": "Utilizado / Total", + "from": "De", + "password": "Contraseña", + "retryAttempts": "Retry attempts", + "downloaded": "Descargado", + "uploaded": "Subido" + }, + "statuses": { + "enabled": "Habilitado", + "disabled": "Deshabilitado", + "saving": "Saving...", + "empty": "Vacío" + }, + "units": { + "milliseconds": "Milisegundos", + "seconds": "Segundos", + "minutes": "Minutos", + "kilobytes": "KB", + "files": "Files" + }, + "placeholders": { + "filter": "Condiciones de filtrado", + "matchCase": "Distinguir mayúsculas y minúsculas", + "matchWholeWord": "Coincidencia exacta de palabras", + "useRegex": "Usar expresiones regulares" + }, + "validation": { + "invalidRegex": "Invalid regular expression" + }, + "window": { + "maximize": "Maximizar", + "minimize": "Minimizar" + }, + "editorModes": { + "visualization": "Visualización", + "advanced": "Avanzado" + }, + "feedback": { + "errors": { + "trafficStats": "Traffic Statistics Error", + "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." + }, + "notices": { + "raw": "{{message}}", + "prefixedRaw": "{{prefix}} {{message}}" + }, + "notifications": { + "importSuccess": "Suscripción importada con éxito", + "importSubscriptionSuccess": "Suscripción importada con éxito", + "importWithClashProxy": "Suscripción importada con el proxy de Clash", + "saved": "Saved successfully", + "common": { + "copySuccess": "Copia exitosa", + "saveSuccess": "Configuración aleatoria guardada correctamente", + "saveFailed": "Failed to save configuration" + } + }, + "validation": { + "config": { + "failed": "Error de validación de la configuración de la suscripción. Compruebe el archivo de configuración de la suscripción. Los cambios se han deshecho. Detalles del error: ", + "bootFailed": "Error de validación de la configuración de la suscripción de arranque. Se ha iniciado con la configuración predeterminada. Compruebe el archivo de configuración de la suscripción. Detalles del error: ", + "coreChangeFailed": "Error de validación de la configuración al cambiar el núcleo. Se ha iniciado con la configuración predeterminada. Compruebe el archivo de configuración de la suscripción. Detalles del error: ", + "processTerminated": "Proceso de validación terminado" + }, + "script": { + "syntaxError": "Error de sintaxis en el script. Los cambios se han deshecho", + "missingMain": "Error en el script. Los cambios se han deshecho", + "fileNotFound": "Archivo no encontrado. Los cambios se han deshecho", + "fileError": "Error en el archivo de script. Los cambios se han deshecho" + }, + "yaml": { + "syntaxError": "Error de sintaxis YAML. Los cambios se han deshecho", + "readError": "Error al leer el archivo YAML. Los cambios se han deshecho", + "mappingError": "Error de mapeo YAML. Los cambios se han deshecho", + "keyError": "Error de clave YAML. Los cambios se han deshecho", + "generalError": "Error YAML. Los cambios se han deshecho" + }, + "merge": { + "syntaxError": "Error de sintaxis en el archivo de sobrescritura. Los cambios se han deshecho", + "mappingError": "Error de mapeo en el archivo de sobrescritura. Los cambios se han deshecho", + "keyError": "Error de clave en el archivo de sobrescritura. Los cambios se han deshecho", + "generalError": "Error en el archivo de sobrescritura. Los cambios se han deshecho" + } + } + }, + "filters": { + "logLevels": { + "all": "ALL", + "debug": "DEBUG", + "info": "INFO", + "warn": "WARN", + "error": "ERROR" + } + } +} diff --git a/src/locales/es/tests.json b/src/locales/es/tests.json new file mode 100644 index 00000000..d60d2b29 --- /dev/null +++ b/src/locales/es/tests.json @@ -0,0 +1,40 @@ +{ + "page": { + "actions": { + "testAll": "Probar todo" + }, + "title": "Prueba" + }, + "components": { + "item": { + "actions": { + "test": "Prueba" + } + } + }, + "modals": { + "test": { + "title": { + "create": "Crear prueba", + "edit": "Editar prueba" + }, + "fields": { + "url": "URL de prueba" + } + } + }, + "statuses": { + "test": { + "pending": "Pendiente de detección", + "yes": "Soportado", + "no": "No soportado", + "failed": "Prueba fallida", + "completed": "Detección completada", + "disallowedIsp": "Proveedor de servicios de Internet no permitido", + "originalsOnly": "Solo originales", + "noDisney": "No (IP Banned By Disney+)", + "unsupportedRegion": "País/región no soportado", + "failedNetwork": "Failed (Network Connection)" + } + } +} diff --git a/src/locales/es/unlock.json b/src/locales/es/unlock.json new file mode 100644 index 00000000..077fec1c --- /dev/null +++ b/src/locales/es/unlock.json @@ -0,0 +1,12 @@ +{ + "page": { + "actions": { + "testing": "Probando..." + }, + "empty": "No unlock test items", + "messages": { + "detectionTimeout": "Detection timeout or failed" + }, + "title": "Prueba de desbloqueo" + } +} diff --git a/src/locales/fa.json b/src/locales/fa.json deleted file mode 100644 index c49c1e48..00000000 --- a/src/locales/fa.json +++ /dev/null @@ -1,1299 +0,0 @@ -{ - "shared": { - "actions": { - "cancel": "لغو", - "close": "بستن", - "confirm": "تأیید", - "save": "ذخیره", - "delete": "حذف", - "edit": "ویرایش", - "new": "جدید", - "enable": "فعال کردن", - "upgrade": "ارتقاء", - "restart": "راه‌اندازی مجدد", - "resetToDefault": "بازنشانی به پیش‌فرض", - "refresh": "بازنشانی", - "retry": "Retry", - "refreshPage": "Refresh Page", - "showDetails": "Show Details", - "hideDetails": "Hide Details", - "listView": "نمای لیستی", - "tableView": "نمای جدولی", - "pause": "توقف", - "resume": "از سرگیری", - "closeAll": "بستن همه", - "clear": "پاک کردن" - }, - "labels": { - "updateAt": "به‌روزرسانی در", - "timeout": "Timeout", - "icon": "آیکون", - "name": "نام", - "readOnly": "فقط خواندنی", - "expireTime": "زمان انقضا", - "updateTime": "زمان به‌روزرسانی", - "usedTotal": "استفاده‌شده / کل", - "from": "از", - "password": "رمز عبور", - "retryAttempts": "Retry attempts", - "downloaded": "دانلود شده", - "uploaded": "بارگذاری شده" - }, - "statuses": { - "enabled": "توانایی فعال شد", - "disabled": "غیرفعال شد", - "saving": "Saving...", - "empty": "خالی خالی" - }, - "units": { - "milliseconds": "میلی‌ثانیه", - "seconds": "ثانیه‌ها", - "minutes": "دقیقه", - "kilobytes": "KB", - "files": "Files" - }, - "placeholders": { - "filter": "شرایط فیلتر", - "matchCase": "تطبیق حروف کوچک و بزرگ", - "matchWholeWord": "تطبیق کل کلمه", - "useRegex": "استفاده از عبارت منظم" - }, - "validation": { - "invalidRegex": "Invalid regular expression" - }, - "window": { - "maximize": "بزرگ‌نمایی", - "minimize": "کوچک‌نمایی" - }, - "editorModes": { - "visualization": "تجسم", - "advanced": "پیشرفته" - }, - "feedback": { - "errors": { - "trafficStats": "Traffic Statistics Error", - "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." - }, - "notices": { - "raw": "{{message}}", - "prefixedRaw": "{{prefix}} {{message}}" - }, - "notifications": { - "importSuccess": "پروفایل با موفقیت وارد شد", - "importSubscriptionSuccess": "وارد کردن اشتراک با موفقیت انجام شد", - "importWithClashProxy": "Profile Imported with Clash proxy", - "saved": "Saved successfully", - "common": { - "copySuccess": "کپی با موفقیت انجام شد", - "saveSuccess": "Configuration saved successfully", - "saveFailed": "Failed to save configuration" - } - }, - "validation": { - "config": { - "failed": "اعتبارسنجی پیکربندی اشتراک ناموفق بود، فایل پیکربندی را بررسی کنید، تغییرات برگشت داده شد، جزئیات خطا:", - "bootFailed": "اعتبارسنجی پیکربندی هنگام راه‌اندازی ناموفق بود، پیکربندی پیش‌فرض استفاده شد، فایل پیکربندی را بررسی کنید، جزئیات خطا:", - "coreChangeFailed": "اعتبارسنجی پیکربندی هنگام تغییر هسته ناموفق بود، پیکربندی پیش‌فرض استفاده شد، فایل پیکربندی را بررسی کنید، جزئیات خطا:", - "processTerminated": "فرآیند اعتبارسنجی متوقف شد" - }, - "script": { - "syntaxError": "خطای نحوی اسکریپت، تغییرات برگشت داده شد", - "missingMain": "خطای اسکریپت، تغییرات برگشت داده شد", - "fileNotFound": "فایل یافت نشد، تغییرات برگشت داده شد", - "fileError": "خطای فایل اسکریپت، تغییرات برگشت داده شد" - }, - "yaml": { - "syntaxError": "YAML syntax error, changes reverted", - "readError": "YAML read error, changes reverted", - "mappingError": "YAML mapping error, changes reverted", - "keyError": "YAML key error, changes reverted", - "generalError": "YAML error, changes reverted" - }, - "merge": { - "syntaxError": "Merge file syntax error, changes reverted", - "mappingError": "Merge file mapping error, changes reverted", - "keyError": "Merge file key error, changes reverted", - "generalError": "Merge file error, changes reverted" - } - } - }, - "filters": { - "logLevels": { - "all": "ALL", - "debug": "DEBUG", - "info": "INFO", - "warn": "WARN", - "error": "ERROR" - } - } - }, - "profiles": { - "page": { - "actions": { - "updateAll": "به‌روزرسانی همه پروفایل‌ها", - "viewRuntimeConfig": "مشاهده پیکربندی زمان اجرا", - "reactivate": "فعال‌سازی مجدد پروفایل‌ها", - "import": "وارد کردن" - }, - "batch": { - "actions": { - "delete": "Delete Selected Profiles", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "done": "Done" - }, - "summary": { - "selected": "Selected", - "items": "items" - }, - "title": "Batch Operations" - }, - "importForm": { - "placeholder": "آدرس پروفایل", - "actions": { - "paste": "چسباندن" - } - }, - "feedback": { - "errors": { - "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", - "onlyYaml": "فقط فایل‌های YAML پشتیبانی می‌شوند" - }, - "notifications": { - "importRetry": "Import failed, retrying with Clash proxy...", - "importFail": "Import failed even with Clash proxy", - "importNeedsRefresh": "Profile imported but may need manual refresh", - "importSuccess": "Profile imported successfully, please restart if not visible", - "profileSwitched": "پروفایل تغییر یافت", - "profileReactivated": "پروفایل مجدداً فعال شد", - "switchInterrupted": "Profile switch interrupted by new selection", - "batchDeleted": "Selected profiles deleted successfully" - }, - "notices": { - "forceRefreshCompleted": "Force refresh completed", - "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" - } - }, - "title": "پروفایل‌ها" - }, - "components": { - "card": { - "labels": { - "clickToImport": "Click to import subscription" - } - }, - "fileInput": { - "chooseFile": "انتخاب فایل" - }, - "menu": { - "home": "Home", - "select": "انتخاب", - "editInfo": "ویرایش اطلاعات", - "editFile": "ویرایش فایل", - "editRules": "ویرایش قوانین", - "editProxies": "ویرایش پروکسی‌ها", - "editGroups": "ویرایش گروه‌های پروکسی", - "extendConfig": "توسعه پیکربندی", - "extendScript": "ادغام اسکریپت", - "openFile": "باز کردن فایل", - "update": "به‌روزرسانی", - "updateViaProxy": "Update via proxy" - }, - "more": { - "global": { - "merge": "Global Merge", - "script": "Global Script" - }, - "chips": { - "merge": "Merge", - "script": "Script" - } - }, - "profileItem": { - "tooltips": { - "showLast": "Click to show last update time", - "showNext": "Click to show next update" - }, - "status": { - "lastUpdateFailed": "Last Update failed", - "nextUp": "Next Up", - "noSchedule": "No schedule", - "unknown": "Unknown", - "autoUpdateDisabled": "Auto update disabled" - } - } - }, - "modals": { - "profileForm": { - "title": { - "create": "ایجاد پروفایل", - "edit": "ویرایش پروفایل" - }, - "fields": { - "type": "نوع", - "description": "توضیحات", - "subscriptionUrl": "آدرس اشتراک", - "httpTimeout": "HTTP Request Timeout", - "updateInterval": "فاصله زمانی به‌روزرسانی", - "useSystemProxy": "استفاده از پراکسی سیستم", - "useClashProxy": "استفاده از پراکسی Clash", - "acceptInvalidCerts": "پذیرش گواهی‌نامه‌های نامعتبر (خطرناک)", - "allowAutoUpdate": "Allow Auto Update" - }, - "feedback": { - "notifications": { - "creationRetry": "Profile creation failed, retrying with Clash proxy...", - "creationSuccess": "Profile creation succeeded with Clash proxy" - } - } - }, - "proxiesEditor": { - "title": "ویرایش پروکسی‌ها", - "placeholders": { - "multiUri": "استفاده از خطوط جدید برای چندین آدرس (پشتیبانی از رمزگذاری Base64)" - }, - "actions": { - "prepend": "پیش‌افزودن پراکسی", - "append": "پس‌افزودن پراکسی" - } - }, - "groupsEditor": { - "title": "ویرایش گروه‌های پروکسی", - "errors": { - "nameRequired": "نام گروه مورد نیاز است", - "nameExists": "نام گروه قبلا وجود دارد" - }, - "fields": { - "type": "نوع گروه", - "name": "نام گروه", - "icon": "آیکون گروه پراکسی", - "proxies": "استفاده از پروکسی‌ها", - "provider": "استفاده از ارائه‌دهنده", - "healthCheckUrl": "آدرس بررسی سلامت", - "expectedStatus": "وضعیت مورد انتظار", - "interval": "فاصله زمانی", - "maxFailedTimes": "حداکثر تعداد شکست‌ها", - "interfaceName": "نام رابط", - "routingMark": "علامت مسیریابی", - "filter": "فیلتر", - "excludeFilter": "فیلتر استثناء", - "excludeType": "نوع استثناء", - "includeAll": "شامل همه پروکسی‌ها و ارائه‌دهنده‌ها", - "includeAllProxies": "شامل همه پروکسی‌ها", - "includeAllProviders": "شامل همه ارائه‌دهنده‌ها" - }, - "toggles": { - "lazy": "تنبل", - "disableUdp": "غیرفعال کردن UDP", - "hidden": "مخفی" - }, - "actions": { - "prepend": "اضافه کردن گروه به ابتدا", - "append": "اضافه کردن گروه به انتها" - } - }, - "editor": { - "actions": { - "format": "فرمت‌بندی سند" - }, - "messages": { - "readOnly": "نمی‌توان در ویرایشگر فقط خواندنی ویرایش کرد" - } - }, - "confirmDelete": { - "title": "تأیید حذف", - "message": "این عملیات قابل برگشت نیست" - }, - "logViewer": { - "title": "کنسول اسکریپت" - } - } - }, - "proxies": { - "page": { - "modes": { - "rule": "Rule", - "global": "Global", - "direct": "Direct" - }, - "actions": { - "toggleChain": "🔗 پراکسی زنجیره‌ای", - "connect": "Connect", - "disconnect": "Disconnect", - "connecting": "Connecting...", - "clearChainConfig": "Delete Chain Config" - }, - "provider": { - "title": "تأمین‌کننده پروکسی", - "actions": { - "updateAll": "به‌روزرسانی همه", - "update": "به‌روزرسانی" - } - }, - "rules": { - "title": "Proxy Rules", - "select": "Select Rules" - }, - "labels": { - "proxyCount": "Proxy Count", - "delayCheckReset": "بررسی تأخیر برای لغو ثابت" - }, - "tooltips": { - "locate": "موقعیت", - "delayCheck": "بررسی تأخیر", - "sortDefault": "مرتب‌سازی بر اساس پیش‌فرض", - "sortDelay": "مرتب‌سازی بر اساس تأخیر", - "sortName": "مرتب‌سازی بر اساس نام", - "delayCheckUrl": "آدرس بررسی تأخیر", - "showBasic": "پراکسی پایه", - "showDetail": "جزئیات پراکسی", - "filter": "فیلتر" - }, - "placeholders": { - "delayCheckUrl": "آدرس بررسی تأخیر" - }, - "chain": { - "header": "Chain Proxy Config", - "empty": "No proxy chain configured", - "instruction": "Click nodes in order to add to proxy chain", - "minimumNodes": "Chain proxy requires at least 2 nodes", - "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", - "connectFailed": "Failed to connect to proxy chain", - "disconnectFailed": "Failed to disconnect from proxy chain", - "duplicateNode": "Proxy node already exists in chain" - }, - "messages": { - "directMode": "حالت مستقیم" - }, - "title": { - "default": "گروه‌های پراکسی", - "chainMode": "Proxy Chain Mode" - } - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "components": { - "enums": { - "strategies": { - "select": "انتخاب پروکسی به صورت دستی", - "url-test": "انتخاب پروکسی بر اساس تأخیر آزمایش URL", - "fallback": "تعویض به پروکسی دیگر در صورت بروز خطا", - "load-balance": "توزیع پراکسی بر اساس توازن بار", - "relay": "عبور از زنجیره پروکسی تعریف شده" - }, - "policies": { - "DIRECT": "داده‌ها به صورت مستقیم خروجی می‌شوند", - "REJECT": "درخواست‌ها را متوقف می‌کند", - "REJECT-DROP": "درخواست‌ها را نادیده می‌گیرد", - "PASS": "این قانون را در صورت تطابق نادیده می‌گیرد" - } - } - } - }, - "connections": { - "page": { - "title": "اتصالات" - }, - "components": { - "fields": { - "host": "میزبان", - "dlSpeed": "سرعت دانلود", - "ulSpeed": "سرعت بارگذاری", - "chains": "زنجیره‌ها", - "rule": "قانون", - "process": "فرآیند", - "time": "زمان", - "source": "منبع", - "destination": "آدرس IP مقصد", - "destinationPort": "بندر هدف", - "type": "نوع" - }, - "order": { - "default": "Default", - "uploadSpeed": "سرعت بارگذاری", - "downloadSpeed": "سرعت دانلود" - }, - "actions": { - "closeConnection": "بستن اتصال" - } - } - }, - "tests": { - "page": { - "actions": { - "testAll": "آزمون همه" - }, - "title": "آزمون" - }, - "components": { - "item": { - "actions": { - "test": "آزمون" - } - } - }, - "modals": { - "test": { - "title": { - "create": "ایجاد آزمون", - "edit": "ویرایش آزمون" - }, - "fields": { - "url": "آدرس آزمون" - } - } - }, - "statuses": { - "test": { - "pending": "Pending", - "yes": "Yes", - "no": "No", - "failed": "Failed", - "completed": "Completed", - "disallowedIsp": "Disallowed ISP", - "originalsOnly": "Originals Only", - "noDisney": "No (IP Banned By Disney+)", - "unsupportedRegion": "Unsupported Country/Region", - "failedNetwork": "Failed (Network Connection)" - } - } - }, - "logs": { - "page": { - "title": "لاگ‌ها" - } - }, - "rules": { - "page": { - "provider": { - "trigger": "تأمین‌کننده قانون", - "dialogTitle": "تأمین‌کننده قانون", - "actions": { - "updateAll": "به‌روزرسانی همه", - "update": "به‌روزرسانی" - } - }, - "title": "قوانین" - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "modals": { - "editor": { - "form": { - "labels": { - "type": "نوع قانون", - "content": "محتوای قانون", - "proxyPolicy": "سیاست پروکسی" - }, - "toggles": { - "noResolve": "بدون حل" - }, - "actions": { - "prependRule": "اضافه کردن قانون به ابتدا", - "appendRule": "اضافه کردن قانون به انتها" - }, - "validation": { - "conditionRequired": "شرط قانون الزامی است", - "invalidRule": "قانون نامعتبر" - } - }, - "ruleTypes": { - "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": "مطابقت با تمام درخواست‌ها" - }, - "title": "ویرایش قوانین" - } - } - }, - "home": { - "page": { - "tooltips": { - "lightweightMode": "در فارسی", - "manual": "راهنما", - "settings": "Home Settings" - }, - "cards": { - "trafficStats": "Traffic Stats", - "networkSettings": "Network Settings", - "proxyMode": "Proxy Mode" - }, - "settings": { - "cards": { - "profile": "Profile Card", - "currentProxy": "Current Proxy Card", - "network": "Network Settings Card", - "proxyMode": "Proxy Mode Card", - "traffic": "Traffic Stats Card", - "tests": "Website Tests Card", - "ip": "IP Information Card", - "clashInfo": "Clash Info Cards", - "systemInfo": "System Info Cards" - }, - "title": "Home Settings" - }, - "title": "Home" - }, - "components": { - "proxyTun": { - "status": { - "systemProxyEnabled": "System proxy is enabled, your applications will access the network through the proxy", - "systemProxyDisabled": "System proxy is disabled, it is recommended for most users to turn on this option", - "tunModeServiceRequired": "TUN mode requires service mode, please install the service first", - "tunModeEnabled": "TUN mode is enabled, applications will access the network through the virtual network card", - "tunModeDisabled": "TUN mode is disabled, suitable for special applications" - }, - "tooltips": { - "systemProxy": "به امکانات تنظیم پروکسی سیستم عامل دسترسی پیدا کنید. اگر فعال‌سازی ناموفق بود، پروکسی سیستم عامل را به‌صورت دستی تغییر دهید", - "tunMode": "TUN mode can take over all application traffic, suitable for special applications that do not follow the system proxy settings" - } - }, - "clashInfo": { - "title": "Clash Info", - "fields": { - "coreVersion": "Core Version", - "systemProxyAddress": "System Proxy Address", - "mixedPort": "Mixed Port", - "uptime": "Uptime", - "rulesCount": "Rules Count" - } - }, - "systemInfo": { - "title": "System Info", - "fields": { - "osInfo": "OS Info", - "autoLaunch": "راه‌اندازی خودکار", - "runningMode": "Running Mode", - "lastCheckUpdate": "Last Check Update", - "vergeVersion": "نسخه Verge" - }, - "actions": { - "settings": "تنظیمات" - }, - "tooltips": { - "autoLaunchAdmin": "Administrator mode may not support auto launch" - }, - "badges": { - "adminMode": "Administrator Mode", - "serviceMode": "حالت سرویس", - "sidecarMode": "User Mode", - "adminServiceMode": "Admin + Service Mode" - } - }, - "ipInfo": { - "title": "IP Information", - "labels": { - "ip": "IP", - "asn": "ASN", - "isp": "ISP", - "org": "ORG", - "location": "Location", - "timezone": "Timezone", - "autoRefresh": "Auto refresh", - "unknown": "Unknown" - }, - "errors": { - "load": "دریافت اطلاعات IP با خطا مواجه شد" - } - }, - "currentProxy": { - "title": "Current Node", - "actions": { - "refreshDelay": "بررسی تأخیر" - }, - "labels": { - "globalMode": "حالت جهانی", - "directMode": "حالت مستقیم", - "group": "Group", - "proxy": "Proxy", - "noActiveNode": "No active proxy node" - } - }, - "tests": { - "title": "Website Tests" - }, - "traffic": { - "metrics": { - "uploadSpeed": "سرعت بارگذاری", - "downloadSpeed": "سرعت دانلود", - "activeConnections": "Active Connections", - "memoryUsage": "استفاده از حافظه" - }, - "legends": { - "upload": "Upload", - "download": "Download" - }, - "patterns": { - "minutes": "{{time}} Minutes" - } - }, - "clashMode": { - "errors": { - "communication": "Core communication error" - }, - "labels": { - "rule": "حالت قانون", - "global": "حالت جهانی", - "direct": "حالت مستقیم" - }, - "descriptions": { - "rule": "Automatically choose proxies according to the rule set.", - "global": "Forward all network requests through the selected proxy.", - "direct": "Bypass the proxy and connect to the internet directly." - } - } - } - }, - "unlock": { - "page": { - "actions": { - "testing": "Testing..." - }, - "empty": "No unlock test items", - "messages": { - "detectionTimeout": "Detection timeout or failed" - }, - "title": "Unlock Test" - } - }, - "settings": { - "page": { - "actions": { - "manual": "راهنما", - "telegram": "کانال تلگرام", - "github": "مخزن GitHub" - }, - "title": "تنظیمات" - }, - "sections": { - "system": { - "title": "تنظیمات سیستم", - "toggles": { - "tunMode": "Tun (کارت شبکه مجازی)", - "systemProxy": "پراکسی سیستم" - }, - "tooltips": { - "autoLaunchAdmin": "Administrator mode may not support auto launch", - "silentStart": "برنامه را در حالت پس‌زمینه بدون نمایش پانل اجرا کنید" - }, - "fields": { - "autoLaunch": "اجرای خودکار", - "silentStart": "اجرای بی‌صدا" - }, - "notifications": { - "tunMode": { - "autoDisabled": "TUN Mode automatically disabled due to service unavailable", - "autoDisableFailed": "Failed to disable TUN Mode automatically" - } - } - }, - "proxyControl": { - "tooltips": { - "systemProxy": "به امکانات تنظیم پروکسی سیستم عامل دسترسی پیدا کنید. اگر فعال‌سازی ناموفق بود، پروکسی سیستم عامل را به‌صورت دستی تغییر دهید", - "tunMode": "حالت Tun (NIC مجازی): تمام ترافیک سیستم را ضبط می کند، وقتی فعال باشد، نیازی به فعال کردن پروکسی سیستم نیست.", - "tunUnavailable": "TUN requires Service Mode or Admin Mode" - }, - "actions": { - "installService": "نصب سرویس", - "uninstallService": "Uninstall Service" - }, - "fields": { - "systemProxy": "پراکسی سیستم", - "tunMode": "Tun (کارت شبکه مجازی)" - } - }, - "externalController": { - "title": "کنترل‌کننده خارجی", - "fields": { - "enable": "Enable External Controller", - "address": "کنترل‌کننده خارجی", - "secret": "رمز اصلی" - }, - "placeholders": { - "address": "Required", - "secret": "توصیه شده" - }, - "tooltips": { - "copy": "Copy to clipboard" - }, - "messages": { - "addressRequired": "Controller address cannot be empty", - "secretRequired": "Secret cannot be empty", - "copyFailed": "Failed to copy", - "controllerCopied": "Controller address copied to clipboard", - "secretCopied": "Secret copied to clipboard" - } - }, - "externalCors": { - "title": "External Cors Configuration", - "fields": { - "allowPrivateNetwork": "Allow private network access", - "allowedOrigins": "Allowed Origins" - }, - "placeholders": { - "origin": "Please enter a valid url" - }, - "actions": { - "add": "Add" - }, - "messages": { - "alwaysIncluded": "Always included origins: {{urls}}" - }, - "tooltips": { - "open": "External Cors Settings" - } - }, - "appearance": { - "light": "Light", - "dark": "Dark", - "system": "System" - }, - "clash": { - "title": "تنظیمات Clash", - "form": { - "fields": { - "allowLan": "اجازه LAN", - "dnsOverwrite": "DNS Overwrite", - "ipv6": "IPv6", - "unifiedDelay": "معادلDELAY", - "logLevel": "سطح لاگ", - "portConfig": "پیکربندی پورت", - "external": "خارجی", - "webUI": "رابط وب", - "clashCore": "هسته Clash", - "openUwpTool": "باز کردن ابزار UWP", - "updateGeoData": "به‌روزرسانی GeoData" - }, - "tooltips": { - "networkInterface": "رابط شبکه", - "unifiedDelay": "معادلDELAY را فعال کنید تا ترافیک شبکه به سرعت رسید", - "logLevel": "این فقط روی فایل‌های لاگ هسته تحت فایل سرویس در فهرست ورود اثر می‌گذارد.", - "openUwpTool": "از ویندوز 8 به بعد، برنامه‌های UWP (مانند Microsoft Store) از دسترسی مستقیم به خدمات شبکه محلی محدود شده‌اند و این ابزار می‌تواند برای دور زدن این محدودیت استفاده شود" - }, - "options": { - "logLevel": { - "debug": "Debug", - "info": "Info", - "warning": "Warn", - "error": "Error", - "silent": "Silent" - } - } - } - } - }, - "components": { - "verge": { - "basic": { - "title": "تنظیمات پایه Verge", - "actions": { - "browse": "مرور کردن" - }, - "trayOptions": { - "showMainWindow": "نمایش پنجره اصلی", - "showTrayMenu": "Show Tray Menu", - "disable": "غیرفعال کردن" - }, - "fields": { - "language": "زبان", - "themeMode": "حالت تم", - "trayClickEvent": "رویداد کلیک در سینی سیستم", - "copyEnvType": "کپی نوع محیط", - "startPage": "صفحه شروع", - "startupScript": "اسکریپت راه‌اندازی", - "themeSetting": "تنظیمات تم", - "layoutSetting": "تنظیمات چیدمان", - "misc": "متفرقه", - "hotkeySetting": "تنظیمات کلیدهای میانبر" - } - }, - "advanced": { - "title": "تنظیمات پیشرفته Verge", - "tooltips": { - "backupInfo": "از فایل های پیکربندی پشتیبان WebDAV پشتیبانی می کند", - "openConfDir": "اگر نرم‌افزار به‌طور غیرعادی اجرا می‌شود، از تمام فایل‌های موجود در این پوشه نسخه پشتیبان تهیه و پاک کنید تا نرم‌افزار را مجدداً راه‌اندازی کنید", - "liteMode": "رابط کاربری گرافیکی را ببندید و فقط هسته را در حال اجرا نگه دارید" - }, - "actions": { - "copyVersion": "Copy Version" - }, - "notifications": { - "latestVersion": "در حال حاضر در آخرین نسخه", - "versionCopied": "Version copied to clipboard" - }, - "fields": { - "backupSetting": "تنظیمات پشتیبان گیری", - "runtimeConfig": "پیکربندی زمان اجرا", - "openConfDir": "باز کردن پوشه برنامه", - "openCoreDir": "باز کردن پوشه هسته", - "openLogsDir": "باز کردن پوشه لاگ‌ها", - "checkUpdates": "بررسی برای به‌روزرسانی‌ها", - "openDevTools": "باز کردن ابزارهای توسعه‌دهنده", - "liteModeSettings": "LightWeight Mode Settings", - "exit": "خروج", - "exportDiagnostics": "Export Diagnostic Info", - "vergeVersion": "نسخه Verge" - } - }, - "theme": { - "title": "تنظیمات تم", - "fields": { - "primaryColor": "رنگ اصلی", - "secondaryColor": "رنگ ثانویه", - "primaryText": "متن اصلی", - "secondaryText": "متن ثانویه", - "infoColor": "رنگ اطلاعات", - "warningColor": "رنگ هشدار", - "errorColor": "رنگ خطا", - "successColor": "رنگ موفقیت", - "fontFamily": "خانواده فونت", - "cssInjection": "تزریق CSS" - }, - "actions": { - "editCss": "Edit CSS" - }, - "dialogs": { - "editCssTitle": "Edit CSS" - } - }, - "layout": { - "title": "تنظیمات چیدمان", - "fields": { - "preferSystemTitlebar": "Prefer System Titlebar", - "trafficGraph": "نمودار ترافیک", - "memoryUsage": "استفاده از حافظه", - "proxyGroupIcon": "آیکون گروه پراکسی", - "hoverNavigator": "Hover Jump Navigator", - "hoverNavigatorDelay": "Hover Jump Navigator Delay", - "navIcon": "آیکون ناوبری", - "trayIcon": "آیکون سینی سیستم", - "showProxyGroupsInline": "Show Proxy Groups Inline", - "commonTrayIcon": "آیکون مشترک سینی سیستم", - "systemProxyTrayIcon": "آیکون سینی پراکسی سیستم", - "tunTrayIcon": "آیکون سینی Tun", - "enableTrayIcon": "Enable Tray Icon", - "enableTraySpeed": "فعال کردن سرعت ترای" - }, - "tooltips": { - "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", - "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" - }, - "options": { - "icon": { - "monochrome": "تک رنگ", - "colorful": "رنگارنگ", - "disable": "غیرفعال کردن" - } - } - } - } - }, - "modals": { - "clashPort": { - "title": "پیکربندی پورت", - "fields": { - "mixed": "پورت پروکسی ترکیبی", - "socks": "پورت پروکسی Socks", - "http": "پورت پروکسی Http(s)", - "redir": "پورت پروکسی شفاف Redir", - "tproxy": "پورت پروکسی شفاف Tproxy" - }, - "actions": { - "random": "پورت تصادفی" - }, - "messages": { - "saved": "Port settings saved", - "saveFailed": "Failed to save port settings" - } - }, - "clashCore": { - "variants": { - "release": "نسخه نهایی", - "alpha": "نسخه آلفا" - } - }, - "liteMode": { - "title": "LightWeight Mode Settings", - "actions": { - "enterNow": "Enter LightWeight Mode Now" - }, - "toggles": { - "autoEnter": "Auto Enter LightWeight Mode" - }, - "tooltips": { - "autoEnter": "Enable to automatically activate LightWeight Mode after the window is closed for a period of time" - }, - "fields": { - "delay": "Auto Enter LightWeight Mode Delay" - }, - "messages": { - "autoEnterHint": "When closing the window, LightWeight Mode will be automatically activated after {{n}} minutes" - } - }, - "backup": { - "title": "تنظیمات پشتیبان گیری", - "tabs": { - "local": "Local backup", - "webdav": "WebDAV backup" - }, - "actions": { - "selectTarget": "Select backup target", - "backup": "پشتیبان‌گیری", - "export": "Export", - "exportBackup": "Export Backup", - "deleteBackup": "حذف پشتیبان", - "restore": "بازیابی", - "restoreBackup": "بازیابی پشتیبان" - }, - "fields": { - "webdavUrl": "http(s):// URL سرور WebDAV", - "username": "نام کاربری", - "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." - }, - "messages": { - "webdavUrlRequired": "آدرس WebDAV نمی‌تواند خالی باشد", - "invalidWebdavUrl": "فرمت آدرس WebDAV نامعتبر است", - "usernameRequired": "نام کاربری نمی‌تواند خالی باشد", - "passwordRequired": "رمز عبور نمی‌تواند خالی باشد", - "webdavConfigSaved": "پیکربندی WebDAV با موفقیت ذخیره شد", - "webdavConfigSaveFailed": "خطا در ذخیره تنظیمات WebDAV: {{error}}", - "backupCreated": "پشتیبان‌گیری با موفقیت ایجاد شد", - "backupFailed": "خطا در پشتیبان‌گیری: {{error}}", - "localBackupCreated": "Local backup created successfully", - "localBackupFailed": "Local backup failed", - "restoreSuccess": "بازیابی با موفقیت انجام شد، برنامه در 1 ثانیه راه‌اندازی مجدد می‌شود", - "localBackupExported": "Local backup exported successfully", - "localBackupExportFailed": "Failed to export local backup", - "confirmDelete": "آیا از حذف این فایل پشتیبان اطمینان دارید؟", - "confirmRestore": "آیا از بازیابی این فایل پشتیبان اطمینان دارید؟" - }, - "table": { - "filename": "نام فایل", - "backupTime": "زمان پشتیبان‌گیری", - "actions": "عملیات", - "noBackups": "هیچ پشتیبانی موجود نیست", - "rowsPerPage": "Rows per page" - } - }, - "misc": { - "title": "متفرقه", - "fields": { - "appLogLevel": "سطح لاگ برنامه", - "appLogMaxSize": "App Log Max Size", - "appLogMaxCount": "App Log Max Count", - "autoCloseConnections": "بستن خودکار اتصالات", - "autoCheckUpdate": "بررسی خودکار به‌روزرسانی", - "enableBuiltinEnhanced": "فعال کردن تقویت داخلی", - "proxyLayoutColumns": "ستون چیدمان پراکسی", - "autoLogClean": "پاکسازی خودکار لاگ", - "autoDelayDetection": "تشخیص تأخیر خودکار", - "defaultLatencyTest": "آزمون تأخیر پیش‌فرض", - "defaultLatencyTimeout": "زمان انتظار تأخیر پیش‌فرض" - }, - "tooltips": { - "autoCloseConnections": "اتصالات برقرار شده را هنگام تغییر انتخاب گروه پروکسی یا حالت پروکسی خاتمه دهید", - "enableBuiltinEnhanced": "مدیریت سازگاری برای فایل پیکربندی", - "autoDelayDetection": "به‌صورت دوره‌ای تأخیر گره فعلی را در پس‌زمینه آزمایش می‌کند", - "defaultLatencyTest": "فقط برای تست درخواست‌های کلاینت HTTP استفاده می‌شود و بر فایل پیکربندی تأثیری نخواهد داشت" - }, - "options": { - "proxyLayoutColumns": { - "auto": "ستون‌های خودکار" - }, - "autoLogClean": { - "never": "هرگز پاک نکن", - "retainDays": "نگهداری به مدت {{n}} روز" - } - } - }, - "update": { - "title": "New Version v{{version}}", - "actions": { - "goToRelease": "رفتن به صفحه انتشار", - "update": "به‌روزرسانی" - }, - "messages": { - "portableError": "نسخه پرتابل از به‌روزرسانی درون برنامه‌ای پشتیبانی نمی‌کند. لطفاً به صورت دستی دانلود و جایگزین کنید", - "breakChangeError": "این نسخه یک به‌روزرسانی اساسی است و پشتیبانی از به‌روزرسانی درون برنامه را پشتیبانی نمی‌کند. لطفاً پس از حذف، دستی دانلود و نصب کنید." - } - }, - "sysproxy": { - "title": "تنظیمات پراکسی سیستم", - "fieldsets": { - "currentStatus": "پراکسی سیستم فعلی" - }, - "fields": { - "enableStatus": "وضعیت فعال", - "serverAddr": "آدرس سرور: ", - "pacUrl": "PAC URL: ", - "proxyHost": "میزبان پراکسی", - "usePacMode": "استفاده از حالت PAC", - "proxyGuard": "محافظ پراکسی", - "guardDuration": "مدت محافظت", - "alwaysUseDefaultBypass": "همیشه از دور زدن پیش‌فرض استفاده کنید", - "proxyBypass": "دور زدن پراکسی: ", - "bypass": "دور زدن: ", - "pacScriptContent": "محتوای اسکریپت PAC" - }, - "tooltips": { - "proxyGuard": "امکان جلوگیری از نرم‌افزارهای دیگر از تغییر تنظیمات پروکسی سیستم عامل را فعال کنید" - }, - "messages": { - "durationTooShort": "مدت زمان دیمن پراکسی نمی‌تواند کمتر از 1 ثانیه باشد", - "invalidBypass": "فرمت عبور نامعتبر است", - "invalidProxyHost": "فرمت میزبان پراکسی نامعتبر است" - }, - "actions": { - "editPac": "ویرایش PAC" - } - }, - "tun": { - "title": "Tun (کارت شبکه مجازی)", - "fields": { - "stack": "انباشته Tun", - "device": "Device Name", - "autoRoute": "مسیر خودکار", - "strictRoute": "مسیر دقیق", - "autoDetectInterface": "تشخیص خودکار رابط", - "dnsHijack": "ربایش DNS", - "mtu": "واحد حداکثر انتقال" - }, - "tooltips": { - "dnsHijack": "Please use , to separate multiple DNS servers" - }, - "messages": { - "applied": "تنظیمات اعمال شد" - } - }, - "dns": { - "dialog": { - "title": "DNS Overwrite", - "warning": "If you are not familiar with these settings, please do not modify them and keep DNS Overwrite enabled" - }, - "sections": { - "general": "DNS Settings", - "fallbackFilter": "Fallback Filter Settings", - "hosts": "Hosts Settings" - }, - "fields": { - "enable": "Enable DNS", - "listen": "DNS Listen", - "enhancedMode": "Enhanced Mode", - "fakeIpRange": "Fake IP Range", - "fakeIpFilterMode": "Fake IP Filter Mode", - "ipv6": { - "label": "IPv6", - "description": "Enable IPv6 DNS resolution" - }, - "preferH3": { - "label": "Prefer H3", - "description": "DNS DOH uses HTTP/3" - }, - "respectRules": { - "label": "Respect Rules", - "description": "DNS connections follow routing rules" - }, - "useHosts": { - "label": "Use Hosts", - "description": "Enable to resolve hosts through hosts file" - }, - "useSystemHosts": { - "label": "Use System Hosts", - "description": "Enable to resolve hosts through system hosts file" - }, - "directPolicy": { - "label": "Direct Nameserver Follow Policy", - "description": "Whether to follow nameserver policy" - }, - "defaultNameserver": { - "label": "Default Nameserver", - "description": "Default DNS servers used to resolve DNS servers" - }, - "nameserver": { - "label": "Nameserver", - "description": "List of DNS servers, comma separated" - }, - "fallback": { - "label": "Fallback", - "description": "List of fallback DNS servers, comma separated" - }, - "proxy": { - "label": "Proxy Server Nameserver", - "description": "DNS servers for proxy node domain resolution" - }, - "directNameserver": { - "label": "Direct Nameserver", - "description": "DNS servers for direct exit domain resolution, supports 'system' keyword, comma separated" - }, - "fakeIpFilter": { - "label": "Fake IP Filter", - "description": "Domains that skip fake IP resolution, comma separated" - }, - "nameserverPolicy": { - "label": "Nameserver Policy", - "description": "Domain-specific DNS server, multiple servers separated by semicolons, format: domain=server1;server2" - }, - "geoipFiltering": { - "label": "GeoIP Filtering", - "description": "Enable GeoIP filtering for fallback" - }, - "geoipCode": "GeoIP Code", - "fallbackIpCidr": { - "label": "Fallback IP CIDR", - "description": "IP CIDRs not using fallback servers, comma separated" - }, - "fallbackDomain": { - "label": "Fallback Domain", - "description": "Domains using fallback servers, comma separated" - }, - "hosts": { - "label": "Hosts", - "description": "Custom domain to IP or domain mapping" - } - }, - "messages": { - "saved": "DNS settings saved", - "configError": "DNS configuration error:" - }, - "errors": { - "invalid": "Invalid configuration" - } - }, - "webUI": { - "actions": { - "openUrl": "باز کردن آدرس اینترنتی" - }, - "title": "رابط وب", - "messages": { - "supportedPlaceholders": "پشتیبانی از %host، %port و %secret", - "placeholderInstruction": "جایگزین کردن میزبان، پورت و رمز با %host، %port، %secret" - } - }, - "hotkey": { - "toggles": { - "enableGlobal": "فعال کردن کلید میانبر سراسری" - }, - "title": "تنظیمات کلیدهای میانبر", - "functions": { - "rule": "حالت قانون", - "global": "حالت جهانی", - "openOrCloseDashboard": "باز/بستن داشبورد", - "toggleSystemProxy": "فعال/غیرفعال کردن پراکسی سیستم", - "toggleTunMode": "فعال/غیرفعال کردن حالت Tun", - "entryLightweightMode": "Entry Lightweight Mode", - "direct": "حالت مستقیم" - } - }, - "password": { - "prompts": { - "enterRoot": "لطفاً رمز ریشه خود را وارد کنید" - } - }, - "networkInterface": { - "title": "رابط شبکه", - "fields": { - "ipAddress": "آدرس IP", - "macAddress": "آدرس MAC" - } - } - }, - "feedback": { - "notifications": { - "clash": { - "restartSuccess": "هسته Clash مجدداً راه‌اندازی شد", - "versionUpdated": "نسخه هسته به‌روزرسانی شد", - "changeSuccess": "هسته با موفقیت تغییر کرد", - "changeFailed": "تغییر هسته ناموفق بود", - "geoDataUpdated": "GeoData به‌روزرسانی شد" - }, - "clashService": { - "installSuccess": "سرویس با موفقیت نصب شد", - "uninstallSuccess": "سرویس با موفقیت حذف نصب شد" - }, - "updater": { - "withClashProxySuccess": "Update with Clash proxy successfully", - "withClashProxyFailed": "Update failed even with Clash proxy" - } - } - }, - "statuses": { - "clash": { - "stopping": "Stopping Core...", - "restarting": "Restarting Core..." - }, - "clashService": { - "installing": "در حال نصب سرویس...", - "uninstalling": "Uninstalling Service..." - } - } - }, - "layout": { - "components": { - "navigation": { - "tabs": { - "home": "Home", - "proxies": "پراکسی‌ها", - "profiles": "پروفایل‌ها", - "connections": "اتصالات", - "rules": "قوانین", - "logs": "لاگ‌ها", - "unlock": "Test", - "settings": "تنظیمات" - }, - "menu": { - "reorderMode": "Menu reorder mode", - "unlock": "Unlock menu order", - "lock": "Lock menu order" - } - } - } - } -} diff --git a/src/locales/fa/connections.json b/src/locales/fa/connections.json new file mode 100644 index 00000000..dfd891c2 --- /dev/null +++ b/src/locales/fa/connections.json @@ -0,0 +1,28 @@ +{ + "page": { + "title": "اتصالات" + }, + "components": { + "fields": { + "host": "میزبان", + "dlSpeed": "سرعت دانلود", + "ulSpeed": "سرعت بارگذاری", + "chains": "زنجیره‌ها", + "rule": "قانون", + "process": "فرآیند", + "time": "زمان", + "source": "منبع", + "destination": "آدرس IP مقصد", + "destinationPort": "بندر هدف", + "type": "نوع" + }, + "order": { + "default": "Default", + "uploadSpeed": "سرعت بارگذاری", + "downloadSpeed": "سرعت دانلود" + }, + "actions": { + "closeConnection": "بستن اتصال" + } + } +} diff --git a/src/locales/fa/home.json b/src/locales/fa/home.json new file mode 100644 index 00000000..786dbc89 --- /dev/null +++ b/src/locales/fa/home.json @@ -0,0 +1,138 @@ +{ + "page": { + "tooltips": { + "lightweightMode": "در فارسی", + "manual": "راهنما", + "settings": "Home Settings" + }, + "cards": { + "trafficStats": "Traffic Stats", + "networkSettings": "Network Settings", + "proxyMode": "Proxy Mode" + }, + "settings": { + "cards": { + "profile": "Profile Card", + "currentProxy": "Current Proxy Card", + "network": "Network Settings Card", + "proxyMode": "Proxy Mode Card", + "traffic": "Traffic Stats Card", + "tests": "Website Tests Card", + "ip": "IP Information Card", + "clashInfo": "Clash Info Cards", + "systemInfo": "System Info Cards" + }, + "title": "Home Settings" + }, + "title": "Home" + }, + "components": { + "proxyTun": { + "status": { + "systemProxyEnabled": "System proxy is enabled, your applications will access the network through the proxy", + "systemProxyDisabled": "System proxy is disabled, it is recommended for most users to turn on this option", + "tunModeServiceRequired": "TUN mode requires service mode, please install the service first", + "tunModeEnabled": "TUN mode is enabled, applications will access the network through the virtual network card", + "tunModeDisabled": "TUN mode is disabled, suitable for special applications" + }, + "tooltips": { + "systemProxy": "به امکانات تنظیم پروکسی سیستم عامل دسترسی پیدا کنید. اگر فعال‌سازی ناموفق بود، پروکسی سیستم عامل را به‌صورت دستی تغییر دهید", + "tunMode": "TUN mode can take over all application traffic, suitable for special applications that do not follow the system proxy settings" + } + }, + "clashInfo": { + "title": "Clash Info", + "fields": { + "coreVersion": "Core Version", + "systemProxyAddress": "System Proxy Address", + "mixedPort": "Mixed Port", + "uptime": "Uptime", + "rulesCount": "Rules Count" + } + }, + "systemInfo": { + "title": "System Info", + "fields": { + "osInfo": "OS Info", + "autoLaunch": "راه‌اندازی خودکار", + "runningMode": "Running Mode", + "lastCheckUpdate": "Last Check Update", + "vergeVersion": "نسخه Verge" + }, + "actions": { + "settings": "تنظیمات" + }, + "tooltips": { + "autoLaunchAdmin": "Administrator mode may not support auto launch" + }, + "badges": { + "adminMode": "Administrator Mode", + "serviceMode": "حالت سرویس", + "sidecarMode": "User Mode", + "adminServiceMode": "Admin + Service Mode" + } + }, + "ipInfo": { + "title": "IP Information", + "labels": { + "ip": "IP", + "asn": "ASN", + "isp": "ISP", + "org": "ORG", + "location": "Location", + "timezone": "Timezone", + "autoRefresh": "Auto refresh", + "unknown": "Unknown" + }, + "errors": { + "load": "دریافت اطلاعات IP با خطا مواجه شد" + } + }, + "currentProxy": { + "title": "Current Node", + "actions": { + "refreshDelay": "بررسی تأخیر" + }, + "labels": { + "globalMode": "حالت جهانی", + "directMode": "حالت مستقیم", + "group": "Group", + "proxy": "Proxy", + "noActiveNode": "No active proxy node" + } + }, + "tests": { + "title": "Website Tests" + }, + "traffic": { + "metrics": { + "uploadSpeed": "سرعت بارگذاری", + "downloadSpeed": "سرعت دانلود", + "activeConnections": "Active Connections", + "memoryUsage": "استفاده از حافظه" + }, + "legends": { + "upload": "Upload", + "download": "Download" + }, + "patterns": { + "minutes": "{{time}} Minutes" + } + }, + "clashMode": { + "errors": { + "communication": "Core communication error" + }, + "labels": { + "rule": "حالت قانون", + "global": "حالت جهانی", + "direct": "حالت مستقیم" + }, + "descriptions": { + "rule": "Automatically choose proxies according to the rule set.", + "global": "Forward all network requests through the selected proxy.", + "direct": "Bypass the proxy and connect to the internet directly." + } + } + } +} diff --git a/src/locales/fa/index.ts b/src/locales/fa/index.ts new file mode 100644 index 00000000..2977171d --- /dev/null +++ b/src/locales/fa/index.ts @@ -0,0 +1,27 @@ +import shared from "./shared.json"; +import profiles from "./profiles.json"; +import proxies from "./proxies.json"; +import connections from "./connections.json"; +import tests from "./tests.json"; +import logs from "./logs.json"; +import rules from "./rules.json"; +import home from "./home.json"; +import unlock from "./unlock.json"; +import settings from "./settings.json"; +import layout from "./layout.json"; + +const resources = { + "shared": shared, + "profiles": profiles, + "proxies": proxies, + "connections": connections, + "tests": tests, + "logs": logs, + "rules": rules, + "home": home, + "unlock": unlock, + "settings": settings, + "layout": layout, +}; + +export default resources; diff --git a/src/locales/fa/layout.json b/src/locales/fa/layout.json new file mode 100644 index 00000000..5a723984 --- /dev/null +++ b/src/locales/fa/layout.json @@ -0,0 +1,21 @@ +{ + "components": { + "navigation": { + "tabs": { + "home": "Home", + "proxies": "پراکسی‌ها", + "profiles": "پروفایل‌ها", + "connections": "اتصالات", + "rules": "قوانین", + "logs": "لاگ‌ها", + "unlock": "Test", + "settings": "تنظیمات" + }, + "menu": { + "reorderMode": "Menu reorder mode", + "unlock": "Unlock menu order", + "lock": "Lock menu order" + } + } + } +} diff --git a/src/locales/fa/logs.json b/src/locales/fa/logs.json new file mode 100644 index 00000000..18d2842d --- /dev/null +++ b/src/locales/fa/logs.json @@ -0,0 +1,5 @@ +{ + "page": { + "title": "لاگ‌ها" + } +} diff --git a/src/locales/fa/profiles.json b/src/locales/fa/profiles.json new file mode 100644 index 00000000..0bd044d1 --- /dev/null +++ b/src/locales/fa/profiles.json @@ -0,0 +1,182 @@ +{ + "page": { + "actions": { + "updateAll": "به‌روزرسانی همه پروفایل‌ها", + "viewRuntimeConfig": "مشاهده پیکربندی زمان اجرا", + "reactivate": "فعال‌سازی مجدد پروفایل‌ها", + "import": "وارد کردن" + }, + "batch": { + "actions": { + "delete": "Delete Selected Profiles", + "selectAll": "Select All", + "deselectAll": "Deselect All", + "done": "Done" + }, + "summary": { + "selected": "Selected", + "items": "items" + }, + "title": "Batch Operations" + }, + "importForm": { + "placeholder": "آدرس پروفایل", + "actions": { + "paste": "چسباندن" + } + }, + "feedback": { + "errors": { + "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", + "onlyYaml": "فقط فایل‌های YAML پشتیبانی می‌شوند" + }, + "notifications": { + "importRetry": "Import failed, retrying with Clash proxy...", + "importFail": "Import failed even with Clash proxy", + "importNeedsRefresh": "Profile imported but may need manual refresh", + "importSuccess": "Profile imported successfully, please restart if not visible", + "profileSwitched": "پروفایل تغییر یافت", + "profileReactivated": "پروفایل مجدداً فعال شد", + "switchInterrupted": "Profile switch interrupted by new selection", + "batchDeleted": "Selected profiles deleted successfully" + }, + "notices": { + "forceRefreshCompleted": "Force refresh completed", + "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" + } + }, + "title": "پروفایل‌ها" + }, + "components": { + "card": { + "labels": { + "clickToImport": "Click to import subscription" + } + }, + "fileInput": { + "chooseFile": "انتخاب فایل" + }, + "menu": { + "home": "Home", + "select": "انتخاب", + "editInfo": "ویرایش اطلاعات", + "editFile": "ویرایش فایل", + "editRules": "ویرایش قوانین", + "editProxies": "ویرایش پروکسی‌ها", + "editGroups": "ویرایش گروه‌های پروکسی", + "extendConfig": "توسعه پیکربندی", + "extendScript": "ادغام اسکریپت", + "openFile": "باز کردن فایل", + "update": "به‌روزرسانی", + "updateViaProxy": "Update via proxy" + }, + "more": { + "global": { + "merge": "Global Merge", + "script": "Global Script" + }, + "chips": { + "merge": "Merge", + "script": "Script" + } + }, + "profileItem": { + "tooltips": { + "showLast": "Click to show last update time", + "showNext": "Click to show next update" + }, + "status": { + "lastUpdateFailed": "Last Update failed", + "nextUp": "Next Up", + "noSchedule": "No schedule", + "unknown": "Unknown", + "autoUpdateDisabled": "Auto update disabled" + } + } + }, + "modals": { + "profileForm": { + "title": { + "create": "ایجاد پروفایل", + "edit": "ویرایش پروفایل" + }, + "fields": { + "type": "نوع", + "description": "توضیحات", + "subscriptionUrl": "آدرس اشتراک", + "httpTimeout": "HTTP Request Timeout", + "updateInterval": "فاصله زمانی به‌روزرسانی", + "useSystemProxy": "استفاده از پراکسی سیستم", + "useClashProxy": "استفاده از پراکسی Clash", + "acceptInvalidCerts": "پذیرش گواهی‌نامه‌های نامعتبر (خطرناک)", + "allowAutoUpdate": "Allow Auto Update" + }, + "feedback": { + "notifications": { + "creationRetry": "Profile creation failed, retrying with Clash proxy...", + "creationSuccess": "Profile creation succeeded with Clash proxy" + } + } + }, + "proxiesEditor": { + "title": "ویرایش پروکسی‌ها", + "placeholders": { + "multiUri": "استفاده از خطوط جدید برای چندین آدرس (پشتیبانی از رمزگذاری Base64)" + }, + "actions": { + "prepend": "پیش‌افزودن پراکسی", + "append": "پس‌افزودن پراکسی" + } + }, + "groupsEditor": { + "title": "ویرایش گروه‌های پروکسی", + "errors": { + "nameRequired": "نام گروه مورد نیاز است", + "nameExists": "نام گروه قبلا وجود دارد" + }, + "fields": { + "type": "نوع گروه", + "name": "نام گروه", + "icon": "آیکون گروه پراکسی", + "proxies": "استفاده از پروکسی‌ها", + "provider": "استفاده از ارائه‌دهنده", + "healthCheckUrl": "آدرس بررسی سلامت", + "expectedStatus": "وضعیت مورد انتظار", + "interval": "فاصله زمانی", + "maxFailedTimes": "حداکثر تعداد شکست‌ها", + "interfaceName": "نام رابط", + "routingMark": "علامت مسیریابی", + "filter": "فیلتر", + "excludeFilter": "فیلتر استثناء", + "excludeType": "نوع استثناء", + "includeAll": "شامل همه پروکسی‌ها و ارائه‌دهنده‌ها", + "includeAllProxies": "شامل همه پروکسی‌ها", + "includeAllProviders": "شامل همه ارائه‌دهنده‌ها" + }, + "toggles": { + "lazy": "تنبل", + "disableUdp": "غیرفعال کردن UDP", + "hidden": "مخفی" + }, + "actions": { + "prepend": "اضافه کردن گروه به ابتدا", + "append": "اضافه کردن گروه به انتها" + } + }, + "editor": { + "actions": { + "format": "فرمت‌بندی سند" + }, + "messages": { + "readOnly": "نمی‌توان در ویرایشگر فقط خواندنی ویرایش کرد" + } + }, + "confirmDelete": { + "title": "تأیید حذف", + "message": "این عملیات قابل برگشت نیست" + }, + "logViewer": { + "title": "کنسول اسکریپت" + } + } +} diff --git a/src/locales/fa/proxies.json b/src/locales/fa/proxies.json new file mode 100644 index 00000000..20bebdfa --- /dev/null +++ b/src/locales/fa/proxies.json @@ -0,0 +1,90 @@ +{ + "page": { + "modes": { + "rule": "Rule", + "global": "Global", + "direct": "Direct" + }, + "actions": { + "toggleChain": "🔗 پراکسی زنجیره‌ای", + "connect": "Connect", + "disconnect": "Disconnect", + "connecting": "Connecting...", + "clearChainConfig": "Delete Chain Config" + }, + "provider": { + "title": "تأمین‌کننده پروکسی", + "actions": { + "updateAll": "به‌روزرسانی همه", + "update": "به‌روزرسانی" + } + }, + "rules": { + "title": "Proxy Rules", + "select": "Select Rules" + }, + "labels": { + "proxyCount": "Proxy Count", + "delayCheckReset": "بررسی تأخیر برای لغو ثابت" + }, + "tooltips": { + "locate": "موقعیت", + "delayCheck": "بررسی تأخیر", + "sortDefault": "مرتب‌سازی بر اساس پیش‌فرض", + "sortDelay": "مرتب‌سازی بر اساس تأخیر", + "sortName": "مرتب‌سازی بر اساس نام", + "delayCheckUrl": "آدرس بررسی تأخیر", + "showBasic": "پراکسی پایه", + "showDetail": "جزئیات پراکسی", + "filter": "فیلتر" + }, + "placeholders": { + "delayCheckUrl": "آدرس بررسی تأخیر" + }, + "chain": { + "header": "Chain Proxy Config", + "empty": "No proxy chain configured", + "instruction": "Click nodes in order to add to proxy chain", + "minimumNodes": "Chain proxy requires at least 2 nodes", + "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", + "connectFailed": "Failed to connect to proxy chain", + "disconnectFailed": "Failed to disconnect from proxy chain", + "duplicateNode": "Proxy node already exists in chain" + }, + "messages": { + "directMode": "حالت مستقیم" + }, + "title": { + "default": "گروه‌های پراکسی", + "chainMode": "Proxy Chain Mode" + } + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "components": { + "enums": { + "strategies": { + "select": "انتخاب پروکسی به صورت دستی", + "url-test": "انتخاب پروکسی بر اساس تأخیر آزمایش URL", + "fallback": "تعویض به پروکسی دیگر در صورت بروز خطا", + "load-balance": "توزیع پراکسی بر اساس توازن بار", + "relay": "عبور از زنجیره پروکسی تعریف شده" + }, + "policies": { + "DIRECT": "داده‌ها به صورت مستقیم خروجی می‌شوند", + "REJECT": "درخواست‌ها را متوقف می‌کند", + "REJECT-DROP": "درخواست‌ها را نادیده می‌گیرد", + "PASS": "این قانون را در صورت تطابق نادیده می‌گیرد" + } + } + } +} diff --git a/src/locales/fa/rules.json b/src/locales/fa/rules.json new file mode 100644 index 00000000..9aa7c742 --- /dev/null +++ b/src/locales/fa/rules.json @@ -0,0 +1,82 @@ +{ + "page": { + "provider": { + "trigger": "تأمین‌کننده قانون", + "dialogTitle": "تأمین‌کننده قانون", + "actions": { + "updateAll": "به‌روزرسانی همه", + "update": "به‌روزرسانی" + } + }, + "title": "قوانین" + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "modals": { + "editor": { + "form": { + "labels": { + "type": "نوع قانون", + "content": "محتوای قانون", + "proxyPolicy": "سیاست پروکسی" + }, + "toggles": { + "noResolve": "بدون حل" + }, + "actions": { + "prependRule": "اضافه کردن قانون به ابتدا", + "appendRule": "اضافه کردن قانون به انتها" + }, + "validation": { + "conditionRequired": "شرط قانون الزامی است", + "invalidRule": "قانون نامعتبر" + } + }, + "ruleTypes": { + "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": "مطابقت با تمام درخواست‌ها" + }, + "title": "ویرایش قوانین" + } + } +} diff --git a/src/locales/fa/settings.json b/src/locales/fa/settings.json new file mode 100644 index 00000000..d39fabe0 --- /dev/null +++ b/src/locales/fa/settings.json @@ -0,0 +1,571 @@ +{ + "page": { + "actions": { + "manual": "راهنما", + "telegram": "کانال تلگرام", + "github": "مخزن GitHub" + }, + "title": "تنظیمات" + }, + "sections": { + "system": { + "title": "تنظیمات سیستم", + "toggles": { + "tunMode": "Tun (کارت شبکه مجازی)", + "systemProxy": "پراکسی سیستم" + }, + "tooltips": { + "autoLaunchAdmin": "Administrator mode may not support auto launch", + "silentStart": "برنامه را در حالت پس‌زمینه بدون نمایش پانل اجرا کنید" + }, + "fields": { + "autoLaunch": "اجرای خودکار", + "silentStart": "اجرای بی‌صدا" + }, + "notifications": { + "tunMode": { + "autoDisabled": "TUN Mode automatically disabled due to service unavailable", + "autoDisableFailed": "Failed to disable TUN Mode automatically" + } + } + }, + "proxyControl": { + "tooltips": { + "systemProxy": "به امکانات تنظیم پروکسی سیستم عامل دسترسی پیدا کنید. اگر فعال‌سازی ناموفق بود، پروکسی سیستم عامل را به‌صورت دستی تغییر دهید", + "tunMode": "حالت Tun (NIC مجازی): تمام ترافیک سیستم را ضبط می کند، وقتی فعال باشد، نیازی به فعال کردن پروکسی سیستم نیست.", + "tunUnavailable": "TUN requires Service Mode or Admin Mode" + }, + "actions": { + "installService": "نصب سرویس", + "uninstallService": "Uninstall Service" + }, + "fields": { + "systemProxy": "پراکسی سیستم", + "tunMode": "Tun (کارت شبکه مجازی)" + } + }, + "externalController": { + "title": "کنترل‌کننده خارجی", + "fields": { + "enable": "Enable External Controller", + "address": "کنترل‌کننده خارجی", + "secret": "رمز اصلی" + }, + "placeholders": { + "address": "Required", + "secret": "توصیه شده" + }, + "tooltips": { + "copy": "Copy to clipboard" + }, + "messages": { + "addressRequired": "Controller address cannot be empty", + "secretRequired": "Secret cannot be empty", + "copyFailed": "Failed to copy", + "controllerCopied": "Controller address copied to clipboard", + "secretCopied": "Secret copied to clipboard" + } + }, + "externalCors": { + "title": "External Cors Configuration", + "fields": { + "allowPrivateNetwork": "Allow private network access", + "allowedOrigins": "Allowed Origins" + }, + "placeholders": { + "origin": "Please enter a valid url" + }, + "actions": { + "add": "Add" + }, + "messages": { + "alwaysIncluded": "Always included origins: {{urls}}" + }, + "tooltips": { + "open": "External Cors Settings" + } + }, + "appearance": { + "light": "Light", + "dark": "Dark", + "system": "System" + }, + "clash": { + "title": "تنظیمات Clash", + "form": { + "fields": { + "allowLan": "اجازه LAN", + "dnsOverwrite": "DNS Overwrite", + "ipv6": "IPv6", + "unifiedDelay": "معادلDELAY", + "logLevel": "سطح لاگ", + "portConfig": "پیکربندی پورت", + "external": "خارجی", + "webUI": "رابط وب", + "clashCore": "هسته Clash", + "openUwpTool": "باز کردن ابزار UWP", + "updateGeoData": "به‌روزرسانی GeoData" + }, + "tooltips": { + "networkInterface": "رابط شبکه", + "unifiedDelay": "معادلDELAY را فعال کنید تا ترافیک شبکه به سرعت رسید", + "logLevel": "این فقط روی فایل‌های لاگ هسته تحت فایل سرویس در فهرست ورود اثر می‌گذارد.", + "openUwpTool": "از ویندوز 8 به بعد، برنامه‌های UWP (مانند Microsoft Store) از دسترسی مستقیم به خدمات شبکه محلی محدود شده‌اند و این ابزار می‌تواند برای دور زدن این محدودیت استفاده شود" + }, + "options": { + "logLevel": { + "debug": "Debug", + "info": "Info", + "warning": "Warn", + "error": "Error", + "silent": "Silent" + } + } + } + } + }, + "components": { + "verge": { + "basic": { + "title": "تنظیمات پایه Verge", + "actions": { + "browse": "مرور کردن" + }, + "trayOptions": { + "showMainWindow": "نمایش پنجره اصلی", + "showTrayMenu": "Show Tray Menu", + "disable": "غیرفعال کردن" + }, + "fields": { + "language": "زبان", + "themeMode": "حالت تم", + "trayClickEvent": "رویداد کلیک در سینی سیستم", + "copyEnvType": "کپی نوع محیط", + "startPage": "صفحه شروع", + "startupScript": "اسکریپت راه‌اندازی", + "themeSetting": "تنظیمات تم", + "layoutSetting": "تنظیمات چیدمان", + "misc": "متفرقه", + "hotkeySetting": "تنظیمات کلیدهای میانبر" + } + }, + "advanced": { + "title": "تنظیمات پیشرفته Verge", + "tooltips": { + "backupInfo": "از فایل های پیکربندی پشتیبان WebDAV پشتیبانی می کند", + "openConfDir": "اگر نرم‌افزار به‌طور غیرعادی اجرا می‌شود، از تمام فایل‌های موجود در این پوشه نسخه پشتیبان تهیه و پاک کنید تا نرم‌افزار را مجدداً راه‌اندازی کنید", + "liteMode": "رابط کاربری گرافیکی را ببندید و فقط هسته را در حال اجرا نگه دارید" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "در حال حاضر در آخرین نسخه", + "versionCopied": "Version copied to clipboard" + }, + "fields": { + "backupSetting": "تنظیمات پشتیبان گیری", + "runtimeConfig": "پیکربندی زمان اجرا", + "openConfDir": "باز کردن پوشه برنامه", + "openCoreDir": "باز کردن پوشه هسته", + "openLogsDir": "باز کردن پوشه لاگ‌ها", + "checkUpdates": "بررسی برای به‌روزرسانی‌ها", + "openDevTools": "باز کردن ابزارهای توسعه‌دهنده", + "liteModeSettings": "LightWeight Mode Settings", + "exit": "خروج", + "exportDiagnostics": "Export Diagnostic Info", + "vergeVersion": "نسخه Verge" + } + }, + "theme": { + "title": "تنظیمات تم", + "fields": { + "primaryColor": "رنگ اصلی", + "secondaryColor": "رنگ ثانویه", + "primaryText": "متن اصلی", + "secondaryText": "متن ثانویه", + "infoColor": "رنگ اطلاعات", + "warningColor": "رنگ هشدار", + "errorColor": "رنگ خطا", + "successColor": "رنگ موفقیت", + "fontFamily": "خانواده فونت", + "cssInjection": "تزریق CSS" + }, + "actions": { + "editCss": "Edit CSS" + }, + "dialogs": { + "editCssTitle": "Edit CSS" + } + }, + "layout": { + "title": "تنظیمات چیدمان", + "fields": { + "preferSystemTitlebar": "Prefer System Titlebar", + "trafficGraph": "نمودار ترافیک", + "memoryUsage": "استفاده از حافظه", + "proxyGroupIcon": "آیکون گروه پراکسی", + "hoverNavigator": "Hover Jump Navigator", + "hoverNavigatorDelay": "Hover Jump Navigator Delay", + "navIcon": "آیکون ناوبری", + "trayIcon": "آیکون سینی سیستم", + "showProxyGroupsInline": "Show Proxy Groups Inline", + "commonTrayIcon": "آیکون مشترک سینی سیستم", + "systemProxyTrayIcon": "آیکون سینی پراکسی سیستم", + "tunTrayIcon": "آیکون سینی Tun", + "enableTrayIcon": "Enable Tray Icon", + "enableTraySpeed": "فعال کردن سرعت ترای" + }, + "tooltips": { + "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", + "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" + }, + "options": { + "icon": { + "monochrome": "تک رنگ", + "colorful": "رنگارنگ", + "disable": "غیرفعال کردن" + } + } + } + } + }, + "modals": { + "clashPort": { + "title": "پیکربندی پورت", + "fields": { + "mixed": "پورت پروکسی ترکیبی", + "socks": "پورت پروکسی Socks", + "http": "پورت پروکسی Http(s)", + "redir": "پورت پروکسی شفاف Redir", + "tproxy": "پورت پروکسی شفاف Tproxy" + }, + "actions": { + "random": "پورت تصادفی" + }, + "messages": { + "saved": "Port settings saved", + "saveFailed": "Failed to save port settings" + } + }, + "clashCore": { + "variants": { + "release": "نسخه نهایی", + "alpha": "نسخه آلفا" + } + }, + "liteMode": { + "title": "LightWeight Mode Settings", + "actions": { + "enterNow": "Enter LightWeight Mode Now" + }, + "toggles": { + "autoEnter": "Auto Enter LightWeight Mode" + }, + "tooltips": { + "autoEnter": "Enable to automatically activate LightWeight Mode after the window is closed for a period of time" + }, + "fields": { + "delay": "Auto Enter LightWeight Mode Delay" + }, + "messages": { + "autoEnterHint": "When closing the window, LightWeight Mode will be automatically activated after {{n}} minutes" + } + }, + "backup": { + "title": "تنظیمات پشتیبان گیری", + "tabs": { + "local": "Local backup", + "webdav": "WebDAV backup" + }, + "actions": { + "selectTarget": "Select backup target", + "backup": "پشتیبان‌گیری", + "export": "Export", + "exportBackup": "Export Backup", + "deleteBackup": "حذف پشتیبان", + "restore": "بازیابی", + "restoreBackup": "بازیابی پشتیبان" + }, + "fields": { + "webdavUrl": "http(s):// URL سرور WebDAV", + "username": "نام کاربری", + "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." + }, + "messages": { + "webdavUrlRequired": "آدرس WebDAV نمی‌تواند خالی باشد", + "invalidWebdavUrl": "فرمت آدرس WebDAV نامعتبر است", + "usernameRequired": "نام کاربری نمی‌تواند خالی باشد", + "passwordRequired": "رمز عبور نمی‌تواند خالی باشد", + "webdavConfigSaved": "پیکربندی WebDAV با موفقیت ذخیره شد", + "webdavConfigSaveFailed": "خطا در ذخیره تنظیمات WebDAV: {{error}}", + "backupCreated": "پشتیبان‌گیری با موفقیت ایجاد شد", + "backupFailed": "خطا در پشتیبان‌گیری: {{error}}", + "localBackupCreated": "Local backup created successfully", + "localBackupFailed": "Local backup failed", + "restoreSuccess": "بازیابی با موفقیت انجام شد، برنامه در 1 ثانیه راه‌اندازی مجدد می‌شود", + "localBackupExported": "Local backup exported successfully", + "localBackupExportFailed": "Failed to export local backup", + "confirmDelete": "آیا از حذف این فایل پشتیبان اطمینان دارید؟", + "confirmRestore": "آیا از بازیابی این فایل پشتیبان اطمینان دارید؟" + }, + "table": { + "filename": "نام فایل", + "backupTime": "زمان پشتیبان‌گیری", + "actions": "عملیات", + "noBackups": "هیچ پشتیبانی موجود نیست", + "rowsPerPage": "Rows per page" + } + }, + "misc": { + "title": "متفرقه", + "fields": { + "appLogLevel": "سطح لاگ برنامه", + "appLogMaxSize": "App Log Max Size", + "appLogMaxCount": "App Log Max Count", + "autoCloseConnections": "بستن خودکار اتصالات", + "autoCheckUpdate": "بررسی خودکار به‌روزرسانی", + "enableBuiltinEnhanced": "فعال کردن تقویت داخلی", + "proxyLayoutColumns": "ستون چیدمان پراکسی", + "autoLogClean": "پاکسازی خودکار لاگ", + "autoDelayDetection": "تشخیص تأخیر خودکار", + "defaultLatencyTest": "آزمون تأخیر پیش‌فرض", + "defaultLatencyTimeout": "زمان انتظار تأخیر پیش‌فرض" + }, + "tooltips": { + "autoCloseConnections": "اتصالات برقرار شده را هنگام تغییر انتخاب گروه پروکسی یا حالت پروکسی خاتمه دهید", + "enableBuiltinEnhanced": "مدیریت سازگاری برای فایل پیکربندی", + "autoDelayDetection": "به‌صورت دوره‌ای تأخیر گره فعلی را در پس‌زمینه آزمایش می‌کند", + "defaultLatencyTest": "فقط برای تست درخواست‌های کلاینت HTTP استفاده می‌شود و بر فایل پیکربندی تأثیری نخواهد داشت" + }, + "options": { + "proxyLayoutColumns": { + "auto": "ستون‌های خودکار" + }, + "autoLogClean": { + "never": "هرگز پاک نکن", + "retainDays": "نگهداری به مدت {{n}} روز" + } + } + }, + "update": { + "title": "New Version v{{version}}", + "actions": { + "goToRelease": "رفتن به صفحه انتشار", + "update": "به‌روزرسانی" + }, + "messages": { + "portableError": "نسخه پرتابل از به‌روزرسانی درون برنامه‌ای پشتیبانی نمی‌کند. لطفاً به صورت دستی دانلود و جایگزین کنید", + "breakChangeError": "این نسخه یک به‌روزرسانی اساسی است و پشتیبانی از به‌روزرسانی درون برنامه را پشتیبانی نمی‌کند. لطفاً پس از حذف، دستی دانلود و نصب کنید." + } + }, + "sysproxy": { + "title": "تنظیمات پراکسی سیستم", + "fieldsets": { + "currentStatus": "پراکسی سیستم فعلی" + }, + "fields": { + "enableStatus": "وضعیت فعال", + "serverAddr": "آدرس سرور: ", + "pacUrl": "PAC URL: ", + "proxyHost": "میزبان پراکسی", + "usePacMode": "استفاده از حالت PAC", + "proxyGuard": "محافظ پراکسی", + "guardDuration": "مدت محافظت", + "alwaysUseDefaultBypass": "همیشه از دور زدن پیش‌فرض استفاده کنید", + "proxyBypass": "دور زدن پراکسی: ", + "bypass": "دور زدن: ", + "pacScriptContent": "محتوای اسکریپت PAC" + }, + "tooltips": { + "proxyGuard": "امکان جلوگیری از نرم‌افزارهای دیگر از تغییر تنظیمات پروکسی سیستم عامل را فعال کنید" + }, + "messages": { + "durationTooShort": "مدت زمان دیمن پراکسی نمی‌تواند کمتر از 1 ثانیه باشد", + "invalidBypass": "فرمت عبور نامعتبر است", + "invalidProxyHost": "فرمت میزبان پراکسی نامعتبر است" + }, + "actions": { + "editPac": "ویرایش PAC" + } + }, + "tun": { + "title": "Tun (کارت شبکه مجازی)", + "fields": { + "stack": "انباشته Tun", + "device": "Device Name", + "autoRoute": "مسیر خودکار", + "strictRoute": "مسیر دقیق", + "autoDetectInterface": "تشخیص خودکار رابط", + "dnsHijack": "ربایش DNS", + "mtu": "واحد حداکثر انتقال" + }, + "tooltips": { + "dnsHijack": "Please use , to separate multiple DNS servers" + }, + "messages": { + "applied": "تنظیمات اعمال شد" + } + }, + "dns": { + "dialog": { + "title": "DNS Overwrite", + "warning": "If you are not familiar with these settings, please do not modify them and keep DNS Overwrite enabled" + }, + "sections": { + "general": "DNS Settings", + "fallbackFilter": "Fallback Filter Settings", + "hosts": "Hosts Settings" + }, + "fields": { + "enable": "Enable DNS", + "listen": "DNS Listen", + "enhancedMode": "Enhanced Mode", + "fakeIpRange": "Fake IP Range", + "fakeIpFilterMode": "Fake IP Filter Mode", + "ipv6": { + "label": "IPv6", + "description": "Enable IPv6 DNS resolution" + }, + "preferH3": { + "label": "Prefer H3", + "description": "DNS DOH uses HTTP/3" + }, + "respectRules": { + "label": "Respect Rules", + "description": "DNS connections follow routing rules" + }, + "useHosts": { + "label": "Use Hosts", + "description": "Enable to resolve hosts through hosts file" + }, + "useSystemHosts": { + "label": "Use System Hosts", + "description": "Enable to resolve hosts through system hosts file" + }, + "directPolicy": { + "label": "Direct Nameserver Follow Policy", + "description": "Whether to follow nameserver policy" + }, + "defaultNameserver": { + "label": "Default Nameserver", + "description": "Default DNS servers used to resolve DNS servers" + }, + "nameserver": { + "label": "Nameserver", + "description": "List of DNS servers, comma separated" + }, + "fallback": { + "label": "Fallback", + "description": "List of fallback DNS servers, comma separated" + }, + "proxy": { + "label": "Proxy Server Nameserver", + "description": "DNS servers for proxy node domain resolution" + }, + "directNameserver": { + "label": "Direct Nameserver", + "description": "DNS servers for direct exit domain resolution, supports 'system' keyword, comma separated" + }, + "fakeIpFilter": { + "label": "Fake IP Filter", + "description": "Domains that skip fake IP resolution, comma separated" + }, + "nameserverPolicy": { + "label": "Nameserver Policy", + "description": "Domain-specific DNS server, multiple servers separated by semicolons, format: domain=server1;server2" + }, + "geoipFiltering": { + "label": "GeoIP Filtering", + "description": "Enable GeoIP filtering for fallback" + }, + "geoipCode": "GeoIP Code", + "fallbackIpCidr": { + "label": "Fallback IP CIDR", + "description": "IP CIDRs not using fallback servers, comma separated" + }, + "fallbackDomain": { + "label": "Fallback Domain", + "description": "Domains using fallback servers, comma separated" + }, + "hosts": { + "label": "Hosts", + "description": "Custom domain to IP or domain mapping" + } + }, + "messages": { + "saved": "DNS settings saved", + "configError": "DNS configuration error:" + }, + "errors": { + "invalid": "Invalid configuration" + } + }, + "webUI": { + "actions": { + "openUrl": "باز کردن آدرس اینترنتی" + }, + "title": "رابط وب", + "messages": { + "supportedPlaceholders": "پشتیبانی از %host، %port و %secret", + "placeholderInstruction": "جایگزین کردن میزبان، پورت و رمز با %host، %port، %secret" + } + }, + "hotkey": { + "toggles": { + "enableGlobal": "فعال کردن کلید میانبر سراسری" + }, + "title": "تنظیمات کلیدهای میانبر", + "functions": { + "rule": "حالت قانون", + "global": "حالت جهانی", + "openOrCloseDashboard": "باز/بستن داشبورد", + "toggleSystemProxy": "فعال/غیرفعال کردن پراکسی سیستم", + "toggleTunMode": "فعال/غیرفعال کردن حالت Tun", + "entryLightweightMode": "Entry Lightweight Mode", + "direct": "حالت مستقیم" + } + }, + "password": { + "prompts": { + "enterRoot": "لطفاً رمز ریشه خود را وارد کنید" + } + }, + "networkInterface": { + "title": "رابط شبکه", + "fields": { + "ipAddress": "آدرس IP", + "macAddress": "آدرس MAC" + } + } + }, + "feedback": { + "notifications": { + "clash": { + "restartSuccess": "هسته Clash مجدداً راه‌اندازی شد", + "versionUpdated": "نسخه هسته به‌روزرسانی شد", + "changeSuccess": "هسته با موفقیت تغییر کرد", + "changeFailed": "تغییر هسته ناموفق بود", + "geoDataUpdated": "GeoData به‌روزرسانی شد" + }, + "clashService": { + "installSuccess": "سرویس با موفقیت نصب شد", + "uninstallSuccess": "سرویس با موفقیت حذف نصب شد" + }, + "updater": { + "withClashProxySuccess": "Update with Clash proxy successfully", + "withClashProxyFailed": "Update failed even with Clash proxy" + } + } + }, + "statuses": { + "clash": { + "stopping": "Stopping Core...", + "restarting": "Restarting Core..." + }, + "clashService": { + "installing": "در حال نصب سرویس...", + "uninstalling": "Uninstalling Service..." + } + } +} diff --git a/src/locales/fa/shared.json b/src/locales/fa/shared.json new file mode 100644 index 00000000..f46c3ee7 --- /dev/null +++ b/src/locales/fa/shared.json @@ -0,0 +1,128 @@ +{ + "actions": { + "cancel": "لغو", + "close": "بستن", + "confirm": "تأیید", + "save": "ذخیره", + "delete": "حذف", + "edit": "ویرایش", + "new": "جدید", + "enable": "فعال کردن", + "upgrade": "ارتقاء", + "restart": "راه‌اندازی مجدد", + "resetToDefault": "بازنشانی به پیش‌فرض", + "refresh": "بازنشانی", + "retry": "Retry", + "refreshPage": "Refresh Page", + "showDetails": "Show Details", + "hideDetails": "Hide Details", + "listView": "نمای لیستی", + "tableView": "نمای جدولی", + "pause": "توقف", + "resume": "از سرگیری", + "closeAll": "بستن همه", + "clear": "پاک کردن" + }, + "labels": { + "updateAt": "به‌روزرسانی در", + "timeout": "Timeout", + "icon": "آیکون", + "name": "نام", + "readOnly": "فقط خواندنی", + "expireTime": "زمان انقضا", + "updateTime": "زمان به‌روزرسانی", + "usedTotal": "استفاده‌شده / کل", + "from": "از", + "password": "رمز عبور", + "retryAttempts": "Retry attempts", + "downloaded": "دانلود شده", + "uploaded": "بارگذاری شده" + }, + "statuses": { + "enabled": "توانایی فعال شد", + "disabled": "غیرفعال شد", + "saving": "Saving...", + "empty": "خالی خالی" + }, + "units": { + "milliseconds": "میلی‌ثانیه", + "seconds": "ثانیه‌ها", + "minutes": "دقیقه", + "kilobytes": "KB", + "files": "Files" + }, + "placeholders": { + "filter": "شرایط فیلتر", + "matchCase": "تطبیق حروف کوچک و بزرگ", + "matchWholeWord": "تطبیق کل کلمه", + "useRegex": "استفاده از عبارت منظم" + }, + "validation": { + "invalidRegex": "Invalid regular expression" + }, + "window": { + "maximize": "بزرگ‌نمایی", + "minimize": "کوچک‌نمایی" + }, + "editorModes": { + "visualization": "تجسم", + "advanced": "پیشرفته" + }, + "feedback": { + "errors": { + "trafficStats": "Traffic Statistics Error", + "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." + }, + "notices": { + "raw": "{{message}}", + "prefixedRaw": "{{prefix}} {{message}}" + }, + "notifications": { + "importSuccess": "پروفایل با موفقیت وارد شد", + "importSubscriptionSuccess": "وارد کردن اشتراک با موفقیت انجام شد", + "importWithClashProxy": "Profile Imported with Clash proxy", + "saved": "Saved successfully", + "common": { + "copySuccess": "کپی با موفقیت انجام شد", + "saveSuccess": "Configuration saved successfully", + "saveFailed": "Failed to save configuration" + } + }, + "validation": { + "config": { + "failed": "اعتبارسنجی پیکربندی اشتراک ناموفق بود، فایل پیکربندی را بررسی کنید، تغییرات برگشت داده شد، جزئیات خطا:", + "bootFailed": "اعتبارسنجی پیکربندی هنگام راه‌اندازی ناموفق بود، پیکربندی پیش‌فرض استفاده شد، فایل پیکربندی را بررسی کنید، جزئیات خطا:", + "coreChangeFailed": "اعتبارسنجی پیکربندی هنگام تغییر هسته ناموفق بود، پیکربندی پیش‌فرض استفاده شد، فایل پیکربندی را بررسی کنید، جزئیات خطا:", + "processTerminated": "فرآیند اعتبارسنجی متوقف شد" + }, + "script": { + "syntaxError": "خطای نحوی اسکریپت، تغییرات برگشت داده شد", + "missingMain": "خطای اسکریپت، تغییرات برگشت داده شد", + "fileNotFound": "فایل یافت نشد، تغییرات برگشت داده شد", + "fileError": "خطای فایل اسکریپت، تغییرات برگشت داده شد" + }, + "yaml": { + "syntaxError": "YAML syntax error, changes reverted", + "readError": "YAML read error, changes reverted", + "mappingError": "YAML mapping error, changes reverted", + "keyError": "YAML key error, changes reverted", + "generalError": "YAML error, changes reverted" + }, + "merge": { + "syntaxError": "Merge file syntax error, changes reverted", + "mappingError": "Merge file mapping error, changes reverted", + "keyError": "Merge file key error, changes reverted", + "generalError": "Merge file error, changes reverted" + } + } + }, + "filters": { + "logLevels": { + "all": "ALL", + "debug": "DEBUG", + "info": "INFO", + "warn": "WARN", + "error": "ERROR" + } + } +} diff --git a/src/locales/fa/tests.json b/src/locales/fa/tests.json new file mode 100644 index 00000000..15b8af21 --- /dev/null +++ b/src/locales/fa/tests.json @@ -0,0 +1,40 @@ +{ + "page": { + "actions": { + "testAll": "آزمون همه" + }, + "title": "آزمون" + }, + "components": { + "item": { + "actions": { + "test": "آزمون" + } + } + }, + "modals": { + "test": { + "title": { + "create": "ایجاد آزمون", + "edit": "ویرایش آزمون" + }, + "fields": { + "url": "آدرس آزمون" + } + } + }, + "statuses": { + "test": { + "pending": "Pending", + "yes": "Yes", + "no": "No", + "failed": "Failed", + "completed": "Completed", + "disallowedIsp": "Disallowed ISP", + "originalsOnly": "Originals Only", + "noDisney": "No (IP Banned By Disney+)", + "unsupportedRegion": "Unsupported Country/Region", + "failedNetwork": "Failed (Network Connection)" + } + } +} diff --git a/src/locales/fa/unlock.json b/src/locales/fa/unlock.json new file mode 100644 index 00000000..e97daa76 --- /dev/null +++ b/src/locales/fa/unlock.json @@ -0,0 +1,12 @@ +{ + "page": { + "actions": { + "testing": "Testing..." + }, + "empty": "No unlock test items", + "messages": { + "detectionTimeout": "Detection timeout or failed" + }, + "title": "Unlock Test" + } +} diff --git a/src/locales/id.json b/src/locales/id.json deleted file mode 100644 index 4a14556f..00000000 --- a/src/locales/id.json +++ /dev/null @@ -1,1299 +0,0 @@ -{ - "shared": { - "actions": { - "cancel": "Batal", - "close": "Tutup", - "confirm": "Konfirmasi", - "save": "Simpan", - "delete": "Hapus", - "edit": "Ubah", - "new": "Baru", - "enable": "Aktifkan", - "upgrade": "Tingkatkan", - "restart": "Mulai Ulang", - "resetToDefault": "Setel Ulang ke Default", - "refresh": "Segarkan", - "retry": "Retry", - "refreshPage": "Refresh Page", - "showDetails": "Show Details", - "hideDetails": "Hide Details", - "listView": "Tampilan Daftar", - "tableView": "Tampilan Tabel", - "pause": "Jeda", - "resume": "Lanjut", - "closeAll": "Tutup Semua", - "clear": "Bersihkan" - }, - "labels": { - "updateAt": "Diperbarui Pada", - "timeout": "Timeout", - "icon": "Ikon", - "name": "Nama", - "readOnly": "Hanya Baca", - "expireTime": "Waktu Kedaluwarsa", - "updateTime": "Waktu Pembaruan", - "usedTotal": "Digunakan / Total", - "from": "Dari", - "password": "Kata Sandi", - "retryAttempts": "Retry attempts", - "downloaded": "Diunduh", - "uploaded": "Diunggah" - }, - "statuses": { - "enabled": "Diaktifkan", - "disabled": "Dinonaktifkan", - "saving": "Saving...", - "empty": "Kosong" - }, - "units": { - "milliseconds": "milidetik", - "seconds": "detik", - "minutes": "menit", - "kilobytes": "KB", - "files": "Files" - }, - "placeholders": { - "filter": "Kondisi Filter", - "matchCase": "Cocokkan Kasus", - "matchWholeWord": "Cocokkan Kata Utuh", - "useRegex": "Gunakan Ekspresi Reguler" - }, - "validation": { - "invalidRegex": "Invalid regular expression" - }, - "window": { - "maximize": "Maksimalkan", - "minimize": "Minimalkan" - }, - "editorModes": { - "visualization": "Visualisasi", - "advanced": "Lanjutan" - }, - "feedback": { - "errors": { - "trafficStats": "Traffic Statistics Error", - "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." - }, - "notices": { - "raw": "{{message}}", - "prefixedRaw": "{{prefix}} {{message}}" - }, - "notifications": { - "importSuccess": "Profil Berhasil Diimpor", - "importSubscriptionSuccess": "Berlangganan Berhasil Diimpor", - "importWithClashProxy": "Profile Imported with Clash proxy", - "saved": "Saved successfully", - "common": { - "copySuccess": "Salin Berhasil", - "saveSuccess": "Configuration saved successfully", - "saveFailed": "Failed to save configuration" - } - }, - "validation": { - "config": { - "failed": "Validasi konfigurasi langganan gagal, periksa file konfigurasi, perubahan dibatalkan, detail kesalahan:", - "bootFailed": "Validasi konfigurasi saat boot gagal, menggunakan konfigurasi default, periksa file konfigurasi, detail kesalahan:", - "coreChangeFailed": "Validasi konfigurasi saat ganti inti gagal, menggunakan konfigurasi default, periksa file konfigurasi, detail kesalahan:", - "processTerminated": "Proses validasi dihentikan" - }, - "script": { - "syntaxError": "Kesalahan sintaks skrip, perubahan dibatalkan", - "missingMain": "Kesalahan skrip, perubahan dibatalkan", - "fileNotFound": "File tidak ditemukan, perubahan dibatalkan", - "fileError": "Kesalahan file skrip, perubahan dibatalkan" - }, - "yaml": { - "syntaxError": "YAML syntax error, changes reverted", - "readError": "YAML read error, changes reverted", - "mappingError": "YAML mapping error, changes reverted", - "keyError": "YAML key error, changes reverted", - "generalError": "YAML error, changes reverted" - }, - "merge": { - "syntaxError": "Merge file syntax error, changes reverted", - "mappingError": "Merge file mapping error, changes reverted", - "keyError": "Merge file key error, changes reverted", - "generalError": "Merge file error, changes reverted" - } - } - }, - "filters": { - "logLevels": { - "all": "ALL", - "debug": "DEBUG", - "info": "INFO", - "warn": "WARN", - "error": "ERROR" - } - } - }, - "profiles": { - "page": { - "actions": { - "updateAll": "Perbarui Semua Profil", - "viewRuntimeConfig": "Lihat Konfigurasi Runtime", - "reactivate": "Reaktivasi Profil", - "import": "Impor" - }, - "batch": { - "actions": { - "delete": "Delete Selected Profiles", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "done": "Done" - }, - "summary": { - "selected": "Selected", - "items": "items" - }, - "title": "Batch Operations" - }, - "importForm": { - "placeholder": "URL Profil", - "actions": { - "paste": "Tempel" - } - }, - "feedback": { - "errors": { - "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", - "onlyYaml": "Hanya File YAML yang Didukung" - }, - "notifications": { - "importRetry": "Import failed, retrying with Clash proxy...", - "importFail": "Import failed even with Clash proxy", - "importNeedsRefresh": "Profile imported but may need manual refresh", - "importSuccess": "Profile imported successfully, please restart if not visible", - "profileSwitched": "Profil Beralih", - "profileReactivated": "Profil Diaktifkan Kembali", - "switchInterrupted": "Profile switch interrupted by new selection", - "batchDeleted": "Selected profiles deleted successfully" - }, - "notices": { - "forceRefreshCompleted": "Force refresh completed", - "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" - } - }, - "title": "Profil" - }, - "components": { - "card": { - "labels": { - "clickToImport": "Click to import subscription" - } - }, - "fileInput": { - "chooseFile": "Pilih Berkas" - }, - "menu": { - "home": "Home", - "select": "Pilih", - "editInfo": "Ubah Info", - "editFile": "Ubah Berkas", - "editRules": "Ubah Aturan", - "editProxies": "Ubah Proksi", - "editGroups": "Ubah Grup Proksi", - "extendConfig": "Perluas Konfigurasi", - "extendScript": "Perluas Skrip", - "openFile": "Buka Berkas", - "update": "Perbarui", - "updateViaProxy": "Update via proxy" - }, - "more": { - "global": { - "merge": "Global Merge", - "script": "Global Script" - }, - "chips": { - "merge": "Merge", - "script": "Script" - } - }, - "profileItem": { - "tooltips": { - "showLast": "Click to show last update time", - "showNext": "Click to show next update" - }, - "status": { - "lastUpdateFailed": "Last Update failed", - "nextUp": "Next Up", - "noSchedule": "No schedule", - "unknown": "Unknown", - "autoUpdateDisabled": "Auto update disabled" - } - } - }, - "modals": { - "profileForm": { - "title": { - "create": "Buat Profil", - "edit": "Ubah Profil" - }, - "fields": { - "type": "Jenis", - "description": "Deskripsi", - "subscriptionUrl": "URL Langganan", - "httpTimeout": "HTTP Request Timeout", - "updateInterval": "Interval Pembaruan", - "useSystemProxy": "Gunakan Proksi Sistem", - "useClashProxy": "Gunakan Proksi Clash", - "acceptInvalidCerts": "Terima Sertifikat Tidak Valid (Bahaya)", - "allowAutoUpdate": "Allow Auto Update" - }, - "feedback": { - "notifications": { - "creationRetry": "Profile creation failed, retrying with Clash proxy...", - "creationSuccess": "Profile creation succeeded with Clash proxy" - } - } - }, - "proxiesEditor": { - "title": "Ubah Proksi", - "placeholders": { - "multiUri": "Gunakan baris baru untuk beberapa URI (mendukung pengkodean Base64)" - }, - "actions": { - "prepend": "Tambahkan Proksi di Awal", - "append": "Tambahkan Proksi di Akhir" - } - }, - "groupsEditor": { - "title": "Ubah Grup Proksi", - "errors": { - "nameRequired": "Nama Grup Diperlukan", - "nameExists": "Nama Grup Sudah Ada" - }, - "fields": { - "type": "Jenis Grup", - "name": "Nama Grup", - "icon": "Ikon Grup Proksi", - "proxies": "Gunakan Proksi", - "provider": "Gunakan Penyedia", - "healthCheckUrl": "URL Pemeriksaan Kesehatan", - "expectedStatus": "Status yang Diharapkan", - "interval": "Interval", - "maxFailedTimes": "Jumlah Gagal Maksimal", - "interfaceName": "Nama Antarmuka", - "routingMark": "Tanda Routing", - "filter": "Filter", - "excludeFilter": "Kecualikan Filter", - "excludeType": "Kecualikan Jenis", - "includeAll": "Sertakan Semua Proksi dan Penyedia", - "includeAllProxies": "Sertakan Semua Proksi", - "includeAllProviders": "Sertakan Semua Penyedia" - }, - "toggles": { - "lazy": "Malas", - "disableUdp": "Nonaktifkan UDP", - "hidden": "Tersembunyi" - }, - "actions": { - "prepend": "Tambahkan Grup di Awal", - "append": "Tambahkan Grup di Akhir" - } - }, - "editor": { - "actions": { - "format": "Format dokumen" - }, - "messages": { - "readOnly": "Tidak dapat mengedit di editor hanya baca" - } - }, - "confirmDelete": { - "title": "Konfirmasi penghapusan", - "message": "Operasi ini tidak dapat dibatalkan" - }, - "logViewer": { - "title": "Konsol Skrip" - } - } - }, - "proxies": { - "page": { - "modes": { - "rule": "Rule", - "global": "Global", - "direct": "Direct" - }, - "actions": { - "toggleChain": "🔗 Proxy Rantai", - "connect": "Connect", - "disconnect": "Disconnect", - "connecting": "Connecting...", - "clearChainConfig": "Delete Chain Config" - }, - "provider": { - "title": "Penyedia Proksi", - "actions": { - "updateAll": "Perbarui Semua", - "update": "Perbarui" - } - }, - "rules": { - "title": "Proxy Rules", - "select": "Select Rules" - }, - "labels": { - "proxyCount": "Proxy Count", - "delayCheckReset": "Periksa keterlambatan untuk membatalkan tetap" - }, - "tooltips": { - "locate": "Lokasi", - "delayCheck": "Periksa Keterlambatan", - "sortDefault": "Urutkan secara default", - "sortDelay": "Urutkan berdasarkan keterlambatan", - "sortName": "Urutkan berdasarkan nama", - "delayCheckUrl": "URL Periksa Keterlambatan", - "showBasic": "Dasar Proksi", - "showDetail": "Detail Proksi", - "filter": "Filter" - }, - "placeholders": { - "delayCheckUrl": "URL Periksa Keterlambatan" - }, - "chain": { - "header": "Chain Proxy Config", - "empty": "No proxy chain configured", - "instruction": "Click nodes in order to add to proxy chain", - "minimumNodes": "Chain proxy requires at least 2 nodes", - "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", - "connectFailed": "Failed to connect to proxy chain", - "disconnectFailed": "Failed to disconnect from proxy chain", - "duplicateNode": "Proxy node already exists in chain" - }, - "messages": { - "directMode": "Mode Langsung" - }, - "title": { - "default": "Grup Proksi", - "chainMode": "Proxy Chain Mode" - } - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "components": { - "enums": { - "strategies": { - "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" - }, - "policies": { - "DIRECT": "Data langsung keluar", - "REJECT": "Mencegat permintaan", - "REJECT-DROP": "Membuang permintaan", - "PASS": "Lewati aturan ini saat cocok" - } - } - } - }, - "connections": { - "page": { - "title": "Koneksi" - }, - "components": { - "fields": { - "host": "Host", - "dlSpeed": "Kecepatan Unduh", - "ulSpeed": "Kecepatan Unggah", - "chains": "Rantai", - "rule": "Aturan", - "process": "Proses", - "time": "Waktu", - "source": "Sumber", - "destination": "IP Tujuan", - "destinationPort": "Port Tujuan", - "type": "Jenis" - }, - "order": { - "default": "Default", - "uploadSpeed": "Kecepatan Unggah", - "downloadSpeed": "Kecepatan Unduh" - }, - "actions": { - "closeConnection": "Tutup Koneksi" - } - } - }, - "tests": { - "page": { - "actions": { - "testAll": "Tes Semua" - }, - "title": "Tes" - }, - "components": { - "item": { - "actions": { - "test": "Tes" - } - } - }, - "modals": { - "test": { - "title": { - "create": "Buat Tes", - "edit": "Ubah Tes" - }, - "fields": { - "url": "URL Tes" - } - } - }, - "statuses": { - "test": { - "pending": "Pending", - "yes": "Yes", - "no": "No", - "failed": "Failed", - "completed": "Completed", - "disallowedIsp": "Disallowed ISP", - "originalsOnly": "Originals Only", - "noDisney": "No (IP Banned By Disney+)", - "unsupportedRegion": "Unsupported Country/Region", - "failedNetwork": "Failed (Network Connection)" - } - } - }, - "logs": { - "page": { - "title": "Log" - } - }, - "rules": { - "page": { - "provider": { - "trigger": "Penyedia Aturan", - "dialogTitle": "Penyedia Aturan", - "actions": { - "updateAll": "Perbarui Semua", - "update": "Perbarui" - } - }, - "title": "Aturan" - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "modals": { - "editor": { - "form": { - "labels": { - "type": "Jenis Aturan", - "content": "Konten Aturan", - "proxyPolicy": "Kebijakan Proksi" - }, - "toggles": { - "noResolve": "Tidak Menyelesaikan" - }, - "actions": { - "prependRule": "Tambahkan Aturan di Awal", - "appendRule": "Tambahkan Aturan di Akhir" - }, - "validation": { - "conditionRequired": "Kondisi Aturan Diperlukan", - "invalidRule": "Aturan Tidak Valid" - } - }, - "ruleTypes": { - "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" - }, - "title": "Ubah Aturan" - } - } - }, - "home": { - "page": { - "tooltips": { - "lightweightMode": "Mode Ringan", - "manual": "Manual", - "settings": "Home Settings" - }, - "cards": { - "trafficStats": "Traffic Stats", - "networkSettings": "Network Settings", - "proxyMode": "Proxy Mode" - }, - "settings": { - "cards": { - "profile": "Profile Card", - "currentProxy": "Current Proxy Card", - "network": "Network Settings Card", - "proxyMode": "Proxy Mode Card", - "traffic": "Traffic Stats Card", - "tests": "Website Tests Card", - "ip": "IP Information Card", - "clashInfo": "Clash Info Cards", - "systemInfo": "System Info Cards" - }, - "title": "Home Settings" - }, - "title": "Home" - }, - "components": { - "proxyTun": { - "status": { - "systemProxyEnabled": "System proxy is enabled, your applications will access the network through the proxy", - "systemProxyDisabled": "System proxy is disabled, it is recommended for most users to turn on this option", - "tunModeServiceRequired": "TUN mode requires service mode, please install the service first", - "tunModeEnabled": "TUN mode is enabled, applications will access the network through the virtual network card", - "tunModeDisabled": "TUN mode is disabled, suitable for special applications" - }, - "tooltips": { - "systemProxy": "Aktifkan untuk mengubah pengaturan proksi sistem operasi. Jika pengaktifan gagal, ubah pengaturan proksi sistem operasi secara manual", - "tunMode": "TUN mode can take over all application traffic, suitable for special applications that do not follow the system proxy settings" - } - }, - "clashInfo": { - "title": "Clash Info", - "fields": { - "coreVersion": "Core Version", - "systemProxyAddress": "System Proxy Address", - "mixedPort": "Mixed Port", - "uptime": "Uptime", - "rulesCount": "Rules Count" - } - }, - "systemInfo": { - "title": "System Info", - "fields": { - "osInfo": "OS Info", - "autoLaunch": "Peluncuran Otomatis", - "runningMode": "Running Mode", - "lastCheckUpdate": "Last Check Update", - "vergeVersion": "Versi Verge" - }, - "actions": { - "settings": "Pengaturan" - }, - "tooltips": { - "autoLaunchAdmin": "Administrator mode may not support auto launch" - }, - "badges": { - "adminMode": "Administrator Mode", - "serviceMode": "Mode Layanan", - "sidecarMode": "User Mode", - "adminServiceMode": "Admin + Service Mode" - } - }, - "ipInfo": { - "title": "IP Information", - "labels": { - "ip": "IP", - "asn": "ASN", - "isp": "ISP", - "org": "ORG", - "location": "Location", - "timezone": "Timezone", - "autoRefresh": "Auto refresh", - "unknown": "Unknown" - }, - "errors": { - "load": "Gagal mendapatkan informasi IP" - } - }, - "currentProxy": { - "title": "Current Node", - "actions": { - "refreshDelay": "Periksa Keterlambatan" - }, - "labels": { - "globalMode": "Mode Global", - "directMode": "Mode Langsung", - "group": "Group", - "proxy": "Proxy", - "noActiveNode": "No active proxy node" - } - }, - "tests": { - "title": "Website Tests" - }, - "traffic": { - "metrics": { - "uploadSpeed": "Kecepatan Unggah", - "downloadSpeed": "Kecepatan Unduh", - "activeConnections": "Active Connections", - "memoryUsage": "Penggunaan Memori" - }, - "legends": { - "upload": "Upload", - "download": "Download" - }, - "patterns": { - "minutes": "{{time}} Minutes" - } - }, - "clashMode": { - "errors": { - "communication": "Core communication error" - }, - "labels": { - "rule": "Mode Aturan", - "global": "Mode Global", - "direct": "Mode Langsung" - }, - "descriptions": { - "rule": "Automatically choose proxies according to the rule set.", - "global": "Forward all network requests through the selected proxy.", - "direct": "Bypass the proxy and connect to the internet directly." - } - } - } - }, - "unlock": { - "page": { - "actions": { - "testing": "Testing..." - }, - "empty": "No unlock test items", - "messages": { - "detectionTimeout": "Detection timeout or failed" - }, - "title": "Unlock Test" - } - }, - "settings": { - "page": { - "actions": { - "manual": "Manual", - "telegram": "Saluran Telegram", - "github": "Repositori Github" - }, - "title": "Pengaturan" - }, - "sections": { - "system": { - "title": "Pengaturan Sistem", - "toggles": { - "tunMode": "Mode Tun (NIC Virtual)", - "systemProxy": "Proksi Sistem" - }, - "tooltips": { - "autoLaunchAdmin": "Administrator mode may not support auto launch", - "silentStart": "Mulai program dalam mode latar belakang tanpa menampilkan panel" - }, - "fields": { - "autoLaunch": "Mulai otomatis", - "silentStart": "Mulai senyap" - }, - "notifications": { - "tunMode": { - "autoDisabled": "TUN Mode automatically disabled due to service unavailable", - "autoDisableFailed": "Failed to disable TUN Mode automatically" - } - } - }, - "proxyControl": { - "tooltips": { - "systemProxy": "Aktifkan untuk mengubah pengaturan proksi sistem operasi. Jika pengaktifan gagal, ubah pengaturan proksi sistem operasi secara manual", - "tunMode": "Mode Tun (NIC Virtual): Menangkap semua lalu lintas sistem, saat diaktifkan, tidak perlu mengaktifkan proksi sistem.", - "tunUnavailable": "TUN requires Service Mode or Admin Mode" - }, - "actions": { - "installService": "Instal Layanan", - "uninstallService": "Uninstall Service" - }, - "fields": { - "systemProxy": "Proksi Sistem", - "tunMode": "Mode Tun (NIC Virtual)" - } - }, - "externalController": { - "title": "Alamat Pengendali Eksternal", - "fields": { - "enable": "Enable External Controller", - "address": "Alamat Pengendali Eksternal", - "secret": "Rahasia Inti" - }, - "placeholders": { - "address": "Required", - "secret": "Direkomendasikan" - }, - "tooltips": { - "copy": "Copy to clipboard" - }, - "messages": { - "addressRequired": "Controller address cannot be empty", - "secretRequired": "Secret cannot be empty", - "copyFailed": "Failed to copy", - "controllerCopied": "Controller address copied to clipboard", - "secretCopied": "Secret copied to clipboard" - } - }, - "externalCors": { - "title": "External Cors Configuration", - "fields": { - "allowPrivateNetwork": "Allow private network access", - "allowedOrigins": "Allowed Origins" - }, - "placeholders": { - "origin": "Please enter a valid url" - }, - "actions": { - "add": "Add" - }, - "messages": { - "alwaysIncluded": "Always included origins: {{urls}}" - }, - "tooltips": { - "open": "External Cors Settings" - } - }, - "appearance": { - "light": "Light", - "dark": "Dark", - "system": "System" - }, - "clash": { - "title": "Pengaturan Clash", - "form": { - "fields": { - "allowLan": "Izinkan LAN", - "dnsOverwrite": "DNS Overwrite", - "ipv6": "IPv6", - "unifiedDelay": "Keterlambatan Terpadu", - "logLevel": "Tingkat Log", - "portConfig": "Konfigurasi Port", - "external": "Eksternal", - "webUI": "Antarmuka Web", - "clashCore": "Inti Clash", - "openUwpTool": "Buka alat UWP", - "updateGeoData": "Perbarui GeoData" - }, - "tooltips": { - "networkInterface": "Antarmuka Jaringan", - "unifiedDelay": "Saat keterlambatan terpadu diaktifkan, dua tes keterlambatan akan dilakukan untuk menghilangkan perbedaan keterlambatan antara berbagai jenis node yang disebabkan oleh jabat tangan koneksi, dll.", - "logLevel": "Ini hanya berlaku untuk file log kernel di folder layanan di direktori log.", - "openUwpTool": "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" - }, - "options": { - "logLevel": { - "debug": "Debug", - "info": "Info", - "warning": "Warn", - "error": "Error", - "silent": "Silent" - } - } - } - } - }, - "components": { - "verge": { - "basic": { - "title": "Pengaturan Dasar Verge", - "actions": { - "browse": "Jelajahi" - }, - "trayOptions": { - "showMainWindow": "Tampilkan Jendela Utama", - "showTrayMenu": "Show Tray Menu", - "disable": "Nonaktifkan" - }, - "fields": { - "language": "Bahasa", - "themeMode": "Mode Tema", - "trayClickEvent": "Acara Klik Tray", - "copyEnvType": "Salin Jenis Env", - "startPage": "Halaman Mulai", - "startupScript": "Skrip Startup", - "themeSetting": "Pengaturan Tema", - "layoutSetting": "Pengaturan Tata Letak", - "misc": "Lain-lain", - "hotkeySetting": "Pengaturan Pintasan" - } - }, - "advanced": { - "title": "Pengaturan Lanjutan Verge", - "tooltips": { - "backupInfo": "Mendukung file konfigurasi cadangan WebDAV", - "openConfDir": "Jika perangkat lunak berjalan tidak normal, CADANGKAN dan hapus semua file di folder ini lalu mulai ulang perangkat lunak", - "liteMode": "Tutup GUI dan biarkan hanya kernel yang berjalan" - }, - "actions": { - "copyVersion": "Copy Version" - }, - "notifications": { - "latestVersion": "Saat ini pada Versi Terbaru", - "versionCopied": "Version copied to clipboard" - }, - "fields": { - "backupSetting": "Pengaturan Cadangan", - "runtimeConfig": "Konfigurasi Runtime", - "openConfDir": "Buka Direktori Konfigurasi", - "openCoreDir": "Buka Direktori Core", - "openLogsDir": "Buka Direktori Log", - "checkUpdates": "Periksa Pembaruan", - "openDevTools": "Buka Alat Pengembang", - "liteModeSettings": "LightWeight Mode Settings", - "exit": "Keluar", - "exportDiagnostics": "Export Diagnostic Info", - "vergeVersion": "Versi Verge" - } - }, - "theme": { - "title": "Pengaturan Tema", - "fields": { - "primaryColor": "Warna Utama", - "secondaryColor": "Warna Sekunder", - "primaryText": "Teks Utama", - "secondaryText": "Teks Sekunder", - "infoColor": "Warna Info", - "warningColor": "Warna Peringatan", - "errorColor": "Warna Kesalahan", - "successColor": "Warna Keberhasilan", - "fontFamily": "Keluarga Font", - "cssInjection": "Injeksi CSS" - }, - "actions": { - "editCss": "Edit CSS" - }, - "dialogs": { - "editCssTitle": "Edit CSS" - } - }, - "layout": { - "title": "Pengaturan Tata Letak", - "fields": { - "preferSystemTitlebar": "Prefer System Titlebar", - "trafficGraph": "Grafik Lalu Lintas", - "memoryUsage": "Penggunaan Memori", - "proxyGroupIcon": "Ikon Grup Proksi", - "hoverNavigator": "Hover Jump Navigator", - "hoverNavigatorDelay": "Hover Jump Navigator Delay", - "navIcon": "Ikon Navigasi", - "trayIcon": "Ikon Tray", - "showProxyGroupsInline": "Show Proxy Groups Inline", - "commonTrayIcon": "Ikon Tray Umum", - "systemProxyTrayIcon": "Ikon Tray Proksi Sistem", - "tunTrayIcon": "Ikon Tray Tun", - "enableTrayIcon": "Enable Tray Icon", - "enableTraySpeed": "Aktifkan Tray Speed" - }, - "tooltips": { - "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", - "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" - }, - "options": { - "icon": { - "monochrome": "Monokrom", - "colorful": "Berwarna", - "disable": "Nonaktifkan" - } - } - } - } - }, - "modals": { - "clashPort": { - "title": "Konfigurasi Port", - "fields": { - "mixed": "Port Campuran", - "socks": "Port Socks", - "http": "Port Http(s)", - "redir": "Port Redir", - "tproxy": "Port Tproxy" - }, - "actions": { - "random": "Port Acak" - }, - "messages": { - "saved": "Port settings saved", - "saveFailed": "Failed to save port settings" - } - }, - "clashCore": { - "variants": { - "release": "Versi Rilis", - "alpha": "Versi Alpha" - } - }, - "liteMode": { - "title": "LightWeight Mode Settings", - "actions": { - "enterNow": "Enter LightWeight Mode Now" - }, - "toggles": { - "autoEnter": "Auto Enter LightWeight Mode" - }, - "tooltips": { - "autoEnter": "Enable to automatically activate LightWeight Mode after the window is closed for a period of time" - }, - "fields": { - "delay": "Auto Enter LightWeight Mode Delay" - }, - "messages": { - "autoEnterHint": "When closing the window, LightWeight Mode will be automatically activated after {{n}} minutes" - } - }, - "backup": { - "title": "Pengaturan Cadangan", - "tabs": { - "local": "Local backup", - "webdav": "WebDAV backup" - }, - "actions": { - "selectTarget": "Select backup target", - "backup": "Cadangan", - "export": "Export", - "exportBackup": "Export Backup", - "deleteBackup": "Hapus Cadangan", - "restore": "Pulihkan", - "restoreBackup": "Pulihkan Cadangan" - }, - "fields": { - "webdavUrl": "URL Server WebDAV", - "username": "Nama Pengguna", - "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." - }, - "messages": { - "webdavUrlRequired": "URL WebDAV tidak boleh kosong", - "invalidWebdavUrl": "Format URL WebDAV tidak valid", - "usernameRequired": "Nama pengguna tidak boleh kosong", - "passwordRequired": "Kata sandi tidak boleh kosong", - "webdavConfigSaved": "Konfigurasi WebDAV berhasil disimpan", - "webdavConfigSaveFailed": "Gagal menyimpan konfigurasi WebDAV: {{error}}", - "backupCreated": "Cadangan berhasil dibuat", - "backupFailed": "Cadangan gagal: {{error}}", - "localBackupCreated": "Local backup created successfully", - "localBackupFailed": "Local backup failed", - "restoreSuccess": "Pemulihan Berhasil, Aplikasi akan dimulai ulang dalam 1 detik", - "localBackupExported": "Local backup exported successfully", - "localBackupExportFailed": "Failed to export local backup", - "confirmDelete": "Konfirmasi untuk menghapus file cadangan ini?", - "confirmRestore": "Konfirmasi untuk memulihkan file cadangan ini?" - }, - "table": { - "filename": "Nama Berkas", - "backupTime": "Waktu Cadangan", - "actions": "Tindakan", - "noBackups": "Tidak ada cadangan yang tersedia", - "rowsPerPage": "Rows per page" - } - }, - "misc": { - "title": "Lain-lain", - "fields": { - "appLogLevel": "Tingkat Log Aplikasi", - "appLogMaxSize": "App Log Max Size", - "appLogMaxCount": "App Log Max Count", - "autoCloseConnections": "Tutup Koneksi Otomatis", - "autoCheckUpdate": "Periksa Pembaruan Otomatis", - "enableBuiltinEnhanced": "Aktifkan Peningkatan Bawaan", - "proxyLayoutColumns": "Kolom Tata Letak Proksi", - "autoLogClean": "Pembersihan Log Otomatis", - "autoDelayDetection": "Deteksi Latensi Otomatis", - "defaultLatencyTest": "Tes Latensi Default", - "defaultLatencyTimeout": "Waktu Habis Latensi Default" - }, - "tooltips": { - "autoCloseConnections": "Hentikan koneksi yang sudah ada saat pemilihan grup proksi atau mode proksi berubah", - "enableBuiltinEnhanced": "Penanganan kompatibilitas untuk file konfigurasi", - "autoDelayDetection": "Secara berkala menguji latensi node saat ini di latar belakang", - "defaultLatencyTest": "Digunakan hanya untuk pengujian permintaan klien HTTP dan tidak akan mempengaruhi file konfigurasi" - }, - "options": { - "proxyLayoutColumns": { - "auto": "Kolom Otomatis" - }, - "autoLogClean": { - "never": "Jangan Pernah Bersihkan", - "retainDays": "Simpan {{n}} Hari" - } - } - }, - "update": { - "title": "New Version v{{version}}", - "actions": { - "goToRelease": "Pergi ke Halaman Rilis", - "update": "Perbarui" - }, - "messages": { - "portableError": "Versi portabel tidak mendukung pembaruan dalam aplikasi. Harap unduh dan ganti secara manual", - "breakChangeError": "Versi ini adalah pembaruan besar dan tidak mendukung pembaruan dalam aplikasi. Harap hapus instalasi dan unduh serta instal versi baru secara manual" - } - }, - "sysproxy": { - "title": "Pengaturan Proksi Sistem", - "fieldsets": { - "currentStatus": "Proksi Sistem Saat Ini" - }, - "fields": { - "enableStatus": "Status Pengaktifan:", - "serverAddr": "Alamat Server: ", - "pacUrl": "URL PAC: ", - "proxyHost": "Host Proksi", - "usePacMode": "Gunakan Mode PAC", - "proxyGuard": "Penjaga Proksi", - "guardDuration": "Durasi Penjagaan", - "alwaysUseDefaultBypass": "Selalu gunakan Bypass Default", - "proxyBypass": "Pengaturan Bypass Proksi: ", - "bypass": "Bypass: ", - "pacScriptContent": "Konten Skrip PAC" - }, - "tooltips": { - "proxyGuard": "Aktifkan untuk mencegah perangkat lunak lain mengubah pengaturan proksi sistem operasi" - }, - "messages": { - "durationTooShort": "Durasi Daemon Proksi Tidak Boleh Kurang dari 1 Detik", - "invalidBypass": "Format Bypass Tidak Valid", - "invalidProxyHost": "Format Host Proksi Tidak Valid" - }, - "actions": { - "editPac": "Ubah PAC" - } - }, - "tun": { - "title": "Mode Tun (NIC Virtual)", - "fields": { - "stack": "Tumpukan Tun", - "device": "Device Name", - "autoRoute": "Rute Otomatis", - "strictRoute": "Rute Ketat", - "autoDetectInterface": "Deteksi Antarmuka Otomatis", - "dnsHijack": "Pembajakan DNS", - "mtu": "Unit Transmisi Maksimum" - }, - "tooltips": { - "dnsHijack": "Please use , to separate multiple DNS servers" - }, - "messages": { - "applied": "Pengaturan Diterapkan" - } - }, - "dns": { - "dialog": { - "title": "DNS Overwrite", - "warning": "If you are not familiar with these settings, please do not modify them and keep DNS Overwrite enabled" - }, - "sections": { - "general": "DNS Settings", - "fallbackFilter": "Fallback Filter Settings", - "hosts": "Hosts Settings" - }, - "fields": { - "enable": "Enable DNS", - "listen": "DNS Listen", - "enhancedMode": "Enhanced Mode", - "fakeIpRange": "Fake IP Range", - "fakeIpFilterMode": "Fake IP Filter Mode", - "ipv6": { - "label": "IPv6", - "description": "Enable IPv6 DNS resolution" - }, - "preferH3": { - "label": "Prefer H3", - "description": "DNS DOH uses HTTP/3" - }, - "respectRules": { - "label": "Respect Rules", - "description": "DNS connections follow routing rules" - }, - "useHosts": { - "label": "Use Hosts", - "description": "Enable to resolve hosts through hosts file" - }, - "useSystemHosts": { - "label": "Use System Hosts", - "description": "Enable to resolve hosts through system hosts file" - }, - "directPolicy": { - "label": "Direct Nameserver Follow Policy", - "description": "Whether to follow nameserver policy" - }, - "defaultNameserver": { - "label": "Default Nameserver", - "description": "Default DNS servers used to resolve DNS servers" - }, - "nameserver": { - "label": "Nameserver", - "description": "List of DNS servers, comma separated" - }, - "fallback": { - "label": "Fallback", - "description": "List of fallback DNS servers, comma separated" - }, - "proxy": { - "label": "Proxy Server Nameserver", - "description": "DNS servers for proxy node domain resolution" - }, - "directNameserver": { - "label": "Direct Nameserver", - "description": "DNS servers for direct exit domain resolution, supports 'system' keyword, comma separated" - }, - "fakeIpFilter": { - "label": "Fake IP Filter", - "description": "Domains that skip fake IP resolution, comma separated" - }, - "nameserverPolicy": { - "label": "Nameserver Policy", - "description": "Domain-specific DNS server, multiple servers separated by semicolons, format: domain=server1;server2" - }, - "geoipFiltering": { - "label": "GeoIP Filtering", - "description": "Enable GeoIP filtering for fallback" - }, - "geoipCode": "GeoIP Code", - "fallbackIpCidr": { - "label": "Fallback IP CIDR", - "description": "IP CIDRs not using fallback servers, comma separated" - }, - "fallbackDomain": { - "label": "Fallback Domain", - "description": "Domains using fallback servers, comma separated" - }, - "hosts": { - "label": "Hosts", - "description": "Custom domain to IP or domain mapping" - } - }, - "messages": { - "saved": "DNS settings saved", - "configError": "DNS configuration error:" - }, - "errors": { - "invalid": "Invalid configuration" - } - }, - "webUI": { - "actions": { - "openUrl": "Buka URL" - }, - "title": "Antarmuka Web", - "messages": { - "supportedPlaceholders": "Dukung %host, %port, %secret", - "placeholderInstruction": "Ganti host, port, rahasia dengan %host, %port, %secret" - } - }, - "hotkey": { - "toggles": { - "enableGlobal": "Aktifkan Hotkey Global" - }, - "title": "Pengaturan Pintasan", - "functions": { - "rule": "Mode Aturan", - "global": "Mode Global", - "openOrCloseDashboard": "Buka/Tutup Dasbor", - "toggleSystemProxy": "Aktifkan/Nonaktifkan Proksi Sistem", - "toggleTunMode": "Aktifkan/Nonaktifkan Mode Tun", - "entryLightweightMode": "Entry Lightweight Mode", - "direct": "Mode Langsung" - } - }, - "password": { - "prompts": { - "enterRoot": "Harap masukkan kata sandi root Anda" - } - }, - "networkInterface": { - "title": "Antarmuka Jaringan", - "fields": { - "ipAddress": "Alamat IP", - "macAddress": "Alamat MAC" - } - } - }, - "feedback": { - "notifications": { - "clash": { - "restartSuccess": "Core Clash Dimulai Ulang", - "versionUpdated": "Versi Core Diperbarui", - "changeSuccess": "Inti berhasil diubah", - "changeFailed": "Gagal mengubah inti", - "geoDataUpdated": "GeoData Diperbarui" - }, - "clashService": { - "installSuccess": "Layanan Berhasil Diinstal", - "uninstallSuccess": "Layanan Berhasil Dicopot" - }, - "updater": { - "withClashProxySuccess": "Update with Clash proxy successfully", - "withClashProxyFailed": "Update failed even with Clash proxy" - } - } - }, - "statuses": { - "clash": { - "stopping": "Stopping Core...", - "restarting": "Restarting Core..." - }, - "clashService": { - "installing": "Memasang Layanan...", - "uninstalling": "Uninstalling Service..." - } - } - }, - "layout": { - "components": { - "navigation": { - "tabs": { - "home": "Home", - "proxies": "Proksi", - "profiles": "Profil", - "connections": "Koneksi", - "rules": "Aturan", - "logs": "Log", - "unlock": "Test", - "settings": "Pengaturan" - }, - "menu": { - "reorderMode": "Menu reorder mode", - "unlock": "Unlock menu order", - "lock": "Lock menu order" - } - } - } - } -} diff --git a/src/locales/id/connections.json b/src/locales/id/connections.json new file mode 100644 index 00000000..1616eeeb --- /dev/null +++ b/src/locales/id/connections.json @@ -0,0 +1,28 @@ +{ + "page": { + "title": "Koneksi" + }, + "components": { + "fields": { + "host": "Host", + "dlSpeed": "Kecepatan Unduh", + "ulSpeed": "Kecepatan Unggah", + "chains": "Rantai", + "rule": "Aturan", + "process": "Proses", + "time": "Waktu", + "source": "Sumber", + "destination": "IP Tujuan", + "destinationPort": "Port Tujuan", + "type": "Jenis" + }, + "order": { + "default": "Default", + "uploadSpeed": "Kecepatan Unggah", + "downloadSpeed": "Kecepatan Unduh" + }, + "actions": { + "closeConnection": "Tutup Koneksi" + } + } +} diff --git a/src/locales/id/home.json b/src/locales/id/home.json new file mode 100644 index 00000000..89d28169 --- /dev/null +++ b/src/locales/id/home.json @@ -0,0 +1,138 @@ +{ + "page": { + "tooltips": { + "lightweightMode": "Mode Ringan", + "manual": "Manual", + "settings": "Home Settings" + }, + "cards": { + "trafficStats": "Traffic Stats", + "networkSettings": "Network Settings", + "proxyMode": "Proxy Mode" + }, + "settings": { + "cards": { + "profile": "Profile Card", + "currentProxy": "Current Proxy Card", + "network": "Network Settings Card", + "proxyMode": "Proxy Mode Card", + "traffic": "Traffic Stats Card", + "tests": "Website Tests Card", + "ip": "IP Information Card", + "clashInfo": "Clash Info Cards", + "systemInfo": "System Info Cards" + }, + "title": "Home Settings" + }, + "title": "Home" + }, + "components": { + "proxyTun": { + "status": { + "systemProxyEnabled": "System proxy is enabled, your applications will access the network through the proxy", + "systemProxyDisabled": "System proxy is disabled, it is recommended for most users to turn on this option", + "tunModeServiceRequired": "TUN mode requires service mode, please install the service first", + "tunModeEnabled": "TUN mode is enabled, applications will access the network through the virtual network card", + "tunModeDisabled": "TUN mode is disabled, suitable for special applications" + }, + "tooltips": { + "systemProxy": "Aktifkan untuk mengubah pengaturan proksi sistem operasi. Jika pengaktifan gagal, ubah pengaturan proksi sistem operasi secara manual", + "tunMode": "TUN mode can take over all application traffic, suitable for special applications that do not follow the system proxy settings" + } + }, + "clashInfo": { + "title": "Clash Info", + "fields": { + "coreVersion": "Core Version", + "systemProxyAddress": "System Proxy Address", + "mixedPort": "Mixed Port", + "uptime": "Uptime", + "rulesCount": "Rules Count" + } + }, + "systemInfo": { + "title": "System Info", + "fields": { + "osInfo": "OS Info", + "autoLaunch": "Peluncuran Otomatis", + "runningMode": "Running Mode", + "lastCheckUpdate": "Last Check Update", + "vergeVersion": "Versi Verge" + }, + "actions": { + "settings": "Pengaturan" + }, + "tooltips": { + "autoLaunchAdmin": "Administrator mode may not support auto launch" + }, + "badges": { + "adminMode": "Administrator Mode", + "serviceMode": "Mode Layanan", + "sidecarMode": "User Mode", + "adminServiceMode": "Admin + Service Mode" + } + }, + "ipInfo": { + "title": "IP Information", + "labels": { + "ip": "IP", + "asn": "ASN", + "isp": "ISP", + "org": "ORG", + "location": "Location", + "timezone": "Timezone", + "autoRefresh": "Auto refresh", + "unknown": "Unknown" + }, + "errors": { + "load": "Gagal mendapatkan informasi IP" + } + }, + "currentProxy": { + "title": "Current Node", + "actions": { + "refreshDelay": "Periksa Keterlambatan" + }, + "labels": { + "globalMode": "Mode Global", + "directMode": "Mode Langsung", + "group": "Group", + "proxy": "Proxy", + "noActiveNode": "No active proxy node" + } + }, + "tests": { + "title": "Website Tests" + }, + "traffic": { + "metrics": { + "uploadSpeed": "Kecepatan Unggah", + "downloadSpeed": "Kecepatan Unduh", + "activeConnections": "Active Connections", + "memoryUsage": "Penggunaan Memori" + }, + "legends": { + "upload": "Upload", + "download": "Download" + }, + "patterns": { + "minutes": "{{time}} Minutes" + } + }, + "clashMode": { + "errors": { + "communication": "Core communication error" + }, + "labels": { + "rule": "Mode Aturan", + "global": "Mode Global", + "direct": "Mode Langsung" + }, + "descriptions": { + "rule": "Automatically choose proxies according to the rule set.", + "global": "Forward all network requests through the selected proxy.", + "direct": "Bypass the proxy and connect to the internet directly." + } + } + } +} diff --git a/src/locales/id/index.ts b/src/locales/id/index.ts new file mode 100644 index 00000000..2977171d --- /dev/null +++ b/src/locales/id/index.ts @@ -0,0 +1,27 @@ +import shared from "./shared.json"; +import profiles from "./profiles.json"; +import proxies from "./proxies.json"; +import connections from "./connections.json"; +import tests from "./tests.json"; +import logs from "./logs.json"; +import rules from "./rules.json"; +import home from "./home.json"; +import unlock from "./unlock.json"; +import settings from "./settings.json"; +import layout from "./layout.json"; + +const resources = { + "shared": shared, + "profiles": profiles, + "proxies": proxies, + "connections": connections, + "tests": tests, + "logs": logs, + "rules": rules, + "home": home, + "unlock": unlock, + "settings": settings, + "layout": layout, +}; + +export default resources; diff --git a/src/locales/id/layout.json b/src/locales/id/layout.json new file mode 100644 index 00000000..8840853c --- /dev/null +++ b/src/locales/id/layout.json @@ -0,0 +1,21 @@ +{ + "components": { + "navigation": { + "tabs": { + "home": "Home", + "proxies": "Proksi", + "profiles": "Profil", + "connections": "Koneksi", + "rules": "Aturan", + "logs": "Log", + "unlock": "Test", + "settings": "Pengaturan" + }, + "menu": { + "reorderMode": "Menu reorder mode", + "unlock": "Unlock menu order", + "lock": "Lock menu order" + } + } + } +} diff --git a/src/locales/id/logs.json b/src/locales/id/logs.json new file mode 100644 index 00000000..b41b2a76 --- /dev/null +++ b/src/locales/id/logs.json @@ -0,0 +1,5 @@ +{ + "page": { + "title": "Log" + } +} diff --git a/src/locales/id/profiles.json b/src/locales/id/profiles.json new file mode 100644 index 00000000..e88b1901 --- /dev/null +++ b/src/locales/id/profiles.json @@ -0,0 +1,182 @@ +{ + "page": { + "actions": { + "updateAll": "Perbarui Semua Profil", + "viewRuntimeConfig": "Lihat Konfigurasi Runtime", + "reactivate": "Reaktivasi Profil", + "import": "Impor" + }, + "batch": { + "actions": { + "delete": "Delete Selected Profiles", + "selectAll": "Select All", + "deselectAll": "Deselect All", + "done": "Done" + }, + "summary": { + "selected": "Selected", + "items": "items" + }, + "title": "Batch Operations" + }, + "importForm": { + "placeholder": "URL Profil", + "actions": { + "paste": "Tempel" + } + }, + "feedback": { + "errors": { + "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", + "onlyYaml": "Hanya File YAML yang Didukung" + }, + "notifications": { + "importRetry": "Import failed, retrying with Clash proxy...", + "importFail": "Import failed even with Clash proxy", + "importNeedsRefresh": "Profile imported but may need manual refresh", + "importSuccess": "Profile imported successfully, please restart if not visible", + "profileSwitched": "Profil Beralih", + "profileReactivated": "Profil Diaktifkan Kembali", + "switchInterrupted": "Profile switch interrupted by new selection", + "batchDeleted": "Selected profiles deleted successfully" + }, + "notices": { + "forceRefreshCompleted": "Force refresh completed", + "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" + } + }, + "title": "Profil" + }, + "components": { + "card": { + "labels": { + "clickToImport": "Click to import subscription" + } + }, + "fileInput": { + "chooseFile": "Pilih Berkas" + }, + "menu": { + "home": "Home", + "select": "Pilih", + "editInfo": "Ubah Info", + "editFile": "Ubah Berkas", + "editRules": "Ubah Aturan", + "editProxies": "Ubah Proksi", + "editGroups": "Ubah Grup Proksi", + "extendConfig": "Perluas Konfigurasi", + "extendScript": "Perluas Skrip", + "openFile": "Buka Berkas", + "update": "Perbarui", + "updateViaProxy": "Update via proxy" + }, + "more": { + "global": { + "merge": "Global Merge", + "script": "Global Script" + }, + "chips": { + "merge": "Merge", + "script": "Script" + } + }, + "profileItem": { + "tooltips": { + "showLast": "Click to show last update time", + "showNext": "Click to show next update" + }, + "status": { + "lastUpdateFailed": "Last Update failed", + "nextUp": "Next Up", + "noSchedule": "No schedule", + "unknown": "Unknown", + "autoUpdateDisabled": "Auto update disabled" + } + } + }, + "modals": { + "profileForm": { + "title": { + "create": "Buat Profil", + "edit": "Ubah Profil" + }, + "fields": { + "type": "Jenis", + "description": "Deskripsi", + "subscriptionUrl": "URL Langganan", + "httpTimeout": "HTTP Request Timeout", + "updateInterval": "Interval Pembaruan", + "useSystemProxy": "Gunakan Proksi Sistem", + "useClashProxy": "Gunakan Proksi Clash", + "acceptInvalidCerts": "Terima Sertifikat Tidak Valid (Bahaya)", + "allowAutoUpdate": "Allow Auto Update" + }, + "feedback": { + "notifications": { + "creationRetry": "Profile creation failed, retrying with Clash proxy...", + "creationSuccess": "Profile creation succeeded with Clash proxy" + } + } + }, + "proxiesEditor": { + "title": "Ubah Proksi", + "placeholders": { + "multiUri": "Gunakan baris baru untuk beberapa URI (mendukung pengkodean Base64)" + }, + "actions": { + "prepend": "Tambahkan Proksi di Awal", + "append": "Tambahkan Proksi di Akhir" + } + }, + "groupsEditor": { + "title": "Ubah Grup Proksi", + "errors": { + "nameRequired": "Nama Grup Diperlukan", + "nameExists": "Nama Grup Sudah Ada" + }, + "fields": { + "type": "Jenis Grup", + "name": "Nama Grup", + "icon": "Ikon Grup Proksi", + "proxies": "Gunakan Proksi", + "provider": "Gunakan Penyedia", + "healthCheckUrl": "URL Pemeriksaan Kesehatan", + "expectedStatus": "Status yang Diharapkan", + "interval": "Interval", + "maxFailedTimes": "Jumlah Gagal Maksimal", + "interfaceName": "Nama Antarmuka", + "routingMark": "Tanda Routing", + "filter": "Filter", + "excludeFilter": "Kecualikan Filter", + "excludeType": "Kecualikan Jenis", + "includeAll": "Sertakan Semua Proksi dan Penyedia", + "includeAllProxies": "Sertakan Semua Proksi", + "includeAllProviders": "Sertakan Semua Penyedia" + }, + "toggles": { + "lazy": "Malas", + "disableUdp": "Nonaktifkan UDP", + "hidden": "Tersembunyi" + }, + "actions": { + "prepend": "Tambahkan Grup di Awal", + "append": "Tambahkan Grup di Akhir" + } + }, + "editor": { + "actions": { + "format": "Format dokumen" + }, + "messages": { + "readOnly": "Tidak dapat mengedit di editor hanya baca" + } + }, + "confirmDelete": { + "title": "Konfirmasi penghapusan", + "message": "Operasi ini tidak dapat dibatalkan" + }, + "logViewer": { + "title": "Konsol Skrip" + } + } +} diff --git a/src/locales/id/proxies.json b/src/locales/id/proxies.json new file mode 100644 index 00000000..cc1d0177 --- /dev/null +++ b/src/locales/id/proxies.json @@ -0,0 +1,90 @@ +{ + "page": { + "modes": { + "rule": "Rule", + "global": "Global", + "direct": "Direct" + }, + "actions": { + "toggleChain": "🔗 Proxy Rantai", + "connect": "Connect", + "disconnect": "Disconnect", + "connecting": "Connecting...", + "clearChainConfig": "Delete Chain Config" + }, + "provider": { + "title": "Penyedia Proksi", + "actions": { + "updateAll": "Perbarui Semua", + "update": "Perbarui" + } + }, + "rules": { + "title": "Proxy Rules", + "select": "Select Rules" + }, + "labels": { + "proxyCount": "Proxy Count", + "delayCheckReset": "Periksa keterlambatan untuk membatalkan tetap" + }, + "tooltips": { + "locate": "Lokasi", + "delayCheck": "Periksa Keterlambatan", + "sortDefault": "Urutkan secara default", + "sortDelay": "Urutkan berdasarkan keterlambatan", + "sortName": "Urutkan berdasarkan nama", + "delayCheckUrl": "URL Periksa Keterlambatan", + "showBasic": "Dasar Proksi", + "showDetail": "Detail Proksi", + "filter": "Filter" + }, + "placeholders": { + "delayCheckUrl": "URL Periksa Keterlambatan" + }, + "chain": { + "header": "Chain Proxy Config", + "empty": "No proxy chain configured", + "instruction": "Click nodes in order to add to proxy chain", + "minimumNodes": "Chain proxy requires at least 2 nodes", + "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", + "connectFailed": "Failed to connect to proxy chain", + "disconnectFailed": "Failed to disconnect from proxy chain", + "duplicateNode": "Proxy node already exists in chain" + }, + "messages": { + "directMode": "Mode Langsung" + }, + "title": { + "default": "Grup Proksi", + "chainMode": "Proxy Chain Mode" + } + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "components": { + "enums": { + "strategies": { + "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" + }, + "policies": { + "DIRECT": "Data langsung keluar", + "REJECT": "Mencegat permintaan", + "REJECT-DROP": "Membuang permintaan", + "PASS": "Lewati aturan ini saat cocok" + } + } + } +} diff --git a/src/locales/id/rules.json b/src/locales/id/rules.json new file mode 100644 index 00000000..1006ba93 --- /dev/null +++ b/src/locales/id/rules.json @@ -0,0 +1,82 @@ +{ + "page": { + "provider": { + "trigger": "Penyedia Aturan", + "dialogTitle": "Penyedia Aturan", + "actions": { + "updateAll": "Perbarui Semua", + "update": "Perbarui" + } + }, + "title": "Aturan" + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "modals": { + "editor": { + "form": { + "labels": { + "type": "Jenis Aturan", + "content": "Konten Aturan", + "proxyPolicy": "Kebijakan Proksi" + }, + "toggles": { + "noResolve": "Tidak Menyelesaikan" + }, + "actions": { + "prependRule": "Tambahkan Aturan di Awal", + "appendRule": "Tambahkan Aturan di Akhir" + }, + "validation": { + "conditionRequired": "Kondisi Aturan Diperlukan", + "invalidRule": "Aturan Tidak Valid" + } + }, + "ruleTypes": { + "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" + }, + "title": "Ubah Aturan" + } + } +} diff --git a/src/locales/id/settings.json b/src/locales/id/settings.json new file mode 100644 index 00000000..1f68a777 --- /dev/null +++ b/src/locales/id/settings.json @@ -0,0 +1,571 @@ +{ + "page": { + "actions": { + "manual": "Manual", + "telegram": "Saluran Telegram", + "github": "Repositori Github" + }, + "title": "Pengaturan" + }, + "sections": { + "system": { + "title": "Pengaturan Sistem", + "toggles": { + "tunMode": "Mode Tun (NIC Virtual)", + "systemProxy": "Proksi Sistem" + }, + "tooltips": { + "autoLaunchAdmin": "Administrator mode may not support auto launch", + "silentStart": "Mulai program dalam mode latar belakang tanpa menampilkan panel" + }, + "fields": { + "autoLaunch": "Mulai otomatis", + "silentStart": "Mulai senyap" + }, + "notifications": { + "tunMode": { + "autoDisabled": "TUN Mode automatically disabled due to service unavailable", + "autoDisableFailed": "Failed to disable TUN Mode automatically" + } + } + }, + "proxyControl": { + "tooltips": { + "systemProxy": "Aktifkan untuk mengubah pengaturan proksi sistem operasi. Jika pengaktifan gagal, ubah pengaturan proksi sistem operasi secara manual", + "tunMode": "Mode Tun (NIC Virtual): Menangkap semua lalu lintas sistem, saat diaktifkan, tidak perlu mengaktifkan proksi sistem.", + "tunUnavailable": "TUN requires Service Mode or Admin Mode" + }, + "actions": { + "installService": "Instal Layanan", + "uninstallService": "Uninstall Service" + }, + "fields": { + "systemProxy": "Proksi Sistem", + "tunMode": "Mode Tun (NIC Virtual)" + } + }, + "externalController": { + "title": "Alamat Pengendali Eksternal", + "fields": { + "enable": "Enable External Controller", + "address": "Alamat Pengendali Eksternal", + "secret": "Rahasia Inti" + }, + "placeholders": { + "address": "Required", + "secret": "Direkomendasikan" + }, + "tooltips": { + "copy": "Copy to clipboard" + }, + "messages": { + "addressRequired": "Controller address cannot be empty", + "secretRequired": "Secret cannot be empty", + "copyFailed": "Failed to copy", + "controllerCopied": "Controller address copied to clipboard", + "secretCopied": "Secret copied to clipboard" + } + }, + "externalCors": { + "title": "External Cors Configuration", + "fields": { + "allowPrivateNetwork": "Allow private network access", + "allowedOrigins": "Allowed Origins" + }, + "placeholders": { + "origin": "Please enter a valid url" + }, + "actions": { + "add": "Add" + }, + "messages": { + "alwaysIncluded": "Always included origins: {{urls}}" + }, + "tooltips": { + "open": "External Cors Settings" + } + }, + "appearance": { + "light": "Light", + "dark": "Dark", + "system": "System" + }, + "clash": { + "title": "Pengaturan Clash", + "form": { + "fields": { + "allowLan": "Izinkan LAN", + "dnsOverwrite": "DNS Overwrite", + "ipv6": "IPv6", + "unifiedDelay": "Keterlambatan Terpadu", + "logLevel": "Tingkat Log", + "portConfig": "Konfigurasi Port", + "external": "Eksternal", + "webUI": "Antarmuka Web", + "clashCore": "Inti Clash", + "openUwpTool": "Buka alat UWP", + "updateGeoData": "Perbarui GeoData" + }, + "tooltips": { + "networkInterface": "Antarmuka Jaringan", + "unifiedDelay": "Saat keterlambatan terpadu diaktifkan, dua tes keterlambatan akan dilakukan untuk menghilangkan perbedaan keterlambatan antara berbagai jenis node yang disebabkan oleh jabat tangan koneksi, dll.", + "logLevel": "Ini hanya berlaku untuk file log kernel di folder layanan di direktori log.", + "openUwpTool": "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" + }, + "options": { + "logLevel": { + "debug": "Debug", + "info": "Info", + "warning": "Warn", + "error": "Error", + "silent": "Silent" + } + } + } + } + }, + "components": { + "verge": { + "basic": { + "title": "Pengaturan Dasar Verge", + "actions": { + "browse": "Jelajahi" + }, + "trayOptions": { + "showMainWindow": "Tampilkan Jendela Utama", + "showTrayMenu": "Show Tray Menu", + "disable": "Nonaktifkan" + }, + "fields": { + "language": "Bahasa", + "themeMode": "Mode Tema", + "trayClickEvent": "Acara Klik Tray", + "copyEnvType": "Salin Jenis Env", + "startPage": "Halaman Mulai", + "startupScript": "Skrip Startup", + "themeSetting": "Pengaturan Tema", + "layoutSetting": "Pengaturan Tata Letak", + "misc": "Lain-lain", + "hotkeySetting": "Pengaturan Pintasan" + } + }, + "advanced": { + "title": "Pengaturan Lanjutan Verge", + "tooltips": { + "backupInfo": "Mendukung file konfigurasi cadangan WebDAV", + "openConfDir": "Jika perangkat lunak berjalan tidak normal, CADANGKAN dan hapus semua file di folder ini lalu mulai ulang perangkat lunak", + "liteMode": "Tutup GUI dan biarkan hanya kernel yang berjalan" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "Saat ini pada Versi Terbaru", + "versionCopied": "Version copied to clipboard" + }, + "fields": { + "backupSetting": "Pengaturan Cadangan", + "runtimeConfig": "Konfigurasi Runtime", + "openConfDir": "Buka Direktori Konfigurasi", + "openCoreDir": "Buka Direktori Core", + "openLogsDir": "Buka Direktori Log", + "checkUpdates": "Periksa Pembaruan", + "openDevTools": "Buka Alat Pengembang", + "liteModeSettings": "LightWeight Mode Settings", + "exit": "Keluar", + "exportDiagnostics": "Export Diagnostic Info", + "vergeVersion": "Versi Verge" + } + }, + "theme": { + "title": "Pengaturan Tema", + "fields": { + "primaryColor": "Warna Utama", + "secondaryColor": "Warna Sekunder", + "primaryText": "Teks Utama", + "secondaryText": "Teks Sekunder", + "infoColor": "Warna Info", + "warningColor": "Warna Peringatan", + "errorColor": "Warna Kesalahan", + "successColor": "Warna Keberhasilan", + "fontFamily": "Keluarga Font", + "cssInjection": "Injeksi CSS" + }, + "actions": { + "editCss": "Edit CSS" + }, + "dialogs": { + "editCssTitle": "Edit CSS" + } + }, + "layout": { + "title": "Pengaturan Tata Letak", + "fields": { + "preferSystemTitlebar": "Prefer System Titlebar", + "trafficGraph": "Grafik Lalu Lintas", + "memoryUsage": "Penggunaan Memori", + "proxyGroupIcon": "Ikon Grup Proksi", + "hoverNavigator": "Hover Jump Navigator", + "hoverNavigatorDelay": "Hover Jump Navigator Delay", + "navIcon": "Ikon Navigasi", + "trayIcon": "Ikon Tray", + "showProxyGroupsInline": "Show Proxy Groups Inline", + "commonTrayIcon": "Ikon Tray Umum", + "systemProxyTrayIcon": "Ikon Tray Proksi Sistem", + "tunTrayIcon": "Ikon Tray Tun", + "enableTrayIcon": "Enable Tray Icon", + "enableTraySpeed": "Aktifkan Tray Speed" + }, + "tooltips": { + "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", + "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" + }, + "options": { + "icon": { + "monochrome": "Monokrom", + "colorful": "Berwarna", + "disable": "Nonaktifkan" + } + } + } + } + }, + "modals": { + "clashPort": { + "title": "Konfigurasi Port", + "fields": { + "mixed": "Port Campuran", + "socks": "Port Socks", + "http": "Port Http(s)", + "redir": "Port Redir", + "tproxy": "Port Tproxy" + }, + "actions": { + "random": "Port Acak" + }, + "messages": { + "saved": "Port settings saved", + "saveFailed": "Failed to save port settings" + } + }, + "clashCore": { + "variants": { + "release": "Versi Rilis", + "alpha": "Versi Alpha" + } + }, + "liteMode": { + "title": "LightWeight Mode Settings", + "actions": { + "enterNow": "Enter LightWeight Mode Now" + }, + "toggles": { + "autoEnter": "Auto Enter LightWeight Mode" + }, + "tooltips": { + "autoEnter": "Enable to automatically activate LightWeight Mode after the window is closed for a period of time" + }, + "fields": { + "delay": "Auto Enter LightWeight Mode Delay" + }, + "messages": { + "autoEnterHint": "When closing the window, LightWeight Mode will be automatically activated after {{n}} minutes" + } + }, + "backup": { + "title": "Pengaturan Cadangan", + "tabs": { + "local": "Local backup", + "webdav": "WebDAV backup" + }, + "actions": { + "selectTarget": "Select backup target", + "backup": "Cadangan", + "export": "Export", + "exportBackup": "Export Backup", + "deleteBackup": "Hapus Cadangan", + "restore": "Pulihkan", + "restoreBackup": "Pulihkan Cadangan" + }, + "fields": { + "webdavUrl": "URL Server WebDAV", + "username": "Nama Pengguna", + "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." + }, + "messages": { + "webdavUrlRequired": "URL WebDAV tidak boleh kosong", + "invalidWebdavUrl": "Format URL WebDAV tidak valid", + "usernameRequired": "Nama pengguna tidak boleh kosong", + "passwordRequired": "Kata sandi tidak boleh kosong", + "webdavConfigSaved": "Konfigurasi WebDAV berhasil disimpan", + "webdavConfigSaveFailed": "Gagal menyimpan konfigurasi WebDAV: {{error}}", + "backupCreated": "Cadangan berhasil dibuat", + "backupFailed": "Cadangan gagal: {{error}}", + "localBackupCreated": "Local backup created successfully", + "localBackupFailed": "Local backup failed", + "restoreSuccess": "Pemulihan Berhasil, Aplikasi akan dimulai ulang dalam 1 detik", + "localBackupExported": "Local backup exported successfully", + "localBackupExportFailed": "Failed to export local backup", + "confirmDelete": "Konfirmasi untuk menghapus file cadangan ini?", + "confirmRestore": "Konfirmasi untuk memulihkan file cadangan ini?" + }, + "table": { + "filename": "Nama Berkas", + "backupTime": "Waktu Cadangan", + "actions": "Tindakan", + "noBackups": "Tidak ada cadangan yang tersedia", + "rowsPerPage": "Rows per page" + } + }, + "misc": { + "title": "Lain-lain", + "fields": { + "appLogLevel": "Tingkat Log Aplikasi", + "appLogMaxSize": "App Log Max Size", + "appLogMaxCount": "App Log Max Count", + "autoCloseConnections": "Tutup Koneksi Otomatis", + "autoCheckUpdate": "Periksa Pembaruan Otomatis", + "enableBuiltinEnhanced": "Aktifkan Peningkatan Bawaan", + "proxyLayoutColumns": "Kolom Tata Letak Proksi", + "autoLogClean": "Pembersihan Log Otomatis", + "autoDelayDetection": "Deteksi Latensi Otomatis", + "defaultLatencyTest": "Tes Latensi Default", + "defaultLatencyTimeout": "Waktu Habis Latensi Default" + }, + "tooltips": { + "autoCloseConnections": "Hentikan koneksi yang sudah ada saat pemilihan grup proksi atau mode proksi berubah", + "enableBuiltinEnhanced": "Penanganan kompatibilitas untuk file konfigurasi", + "autoDelayDetection": "Secara berkala menguji latensi node saat ini di latar belakang", + "defaultLatencyTest": "Digunakan hanya untuk pengujian permintaan klien HTTP dan tidak akan mempengaruhi file konfigurasi" + }, + "options": { + "proxyLayoutColumns": { + "auto": "Kolom Otomatis" + }, + "autoLogClean": { + "never": "Jangan Pernah Bersihkan", + "retainDays": "Simpan {{n}} Hari" + } + } + }, + "update": { + "title": "New Version v{{version}}", + "actions": { + "goToRelease": "Pergi ke Halaman Rilis", + "update": "Perbarui" + }, + "messages": { + "portableError": "Versi portabel tidak mendukung pembaruan dalam aplikasi. Harap unduh dan ganti secara manual", + "breakChangeError": "Versi ini adalah pembaruan besar dan tidak mendukung pembaruan dalam aplikasi. Harap hapus instalasi dan unduh serta instal versi baru secara manual" + } + }, + "sysproxy": { + "title": "Pengaturan Proksi Sistem", + "fieldsets": { + "currentStatus": "Proksi Sistem Saat Ini" + }, + "fields": { + "enableStatus": "Status Pengaktifan:", + "serverAddr": "Alamat Server: ", + "pacUrl": "URL PAC: ", + "proxyHost": "Host Proksi", + "usePacMode": "Gunakan Mode PAC", + "proxyGuard": "Penjaga Proksi", + "guardDuration": "Durasi Penjagaan", + "alwaysUseDefaultBypass": "Selalu gunakan Bypass Default", + "proxyBypass": "Pengaturan Bypass Proksi: ", + "bypass": "Bypass: ", + "pacScriptContent": "Konten Skrip PAC" + }, + "tooltips": { + "proxyGuard": "Aktifkan untuk mencegah perangkat lunak lain mengubah pengaturan proksi sistem operasi" + }, + "messages": { + "durationTooShort": "Durasi Daemon Proksi Tidak Boleh Kurang dari 1 Detik", + "invalidBypass": "Format Bypass Tidak Valid", + "invalidProxyHost": "Format Host Proksi Tidak Valid" + }, + "actions": { + "editPac": "Ubah PAC" + } + }, + "tun": { + "title": "Mode Tun (NIC Virtual)", + "fields": { + "stack": "Tumpukan Tun", + "device": "Device Name", + "autoRoute": "Rute Otomatis", + "strictRoute": "Rute Ketat", + "autoDetectInterface": "Deteksi Antarmuka Otomatis", + "dnsHijack": "Pembajakan DNS", + "mtu": "Unit Transmisi Maksimum" + }, + "tooltips": { + "dnsHijack": "Please use , to separate multiple DNS servers" + }, + "messages": { + "applied": "Pengaturan Diterapkan" + } + }, + "dns": { + "dialog": { + "title": "DNS Overwrite", + "warning": "If you are not familiar with these settings, please do not modify them and keep DNS Overwrite enabled" + }, + "sections": { + "general": "DNS Settings", + "fallbackFilter": "Fallback Filter Settings", + "hosts": "Hosts Settings" + }, + "fields": { + "enable": "Enable DNS", + "listen": "DNS Listen", + "enhancedMode": "Enhanced Mode", + "fakeIpRange": "Fake IP Range", + "fakeIpFilterMode": "Fake IP Filter Mode", + "ipv6": { + "label": "IPv6", + "description": "Enable IPv6 DNS resolution" + }, + "preferH3": { + "label": "Prefer H3", + "description": "DNS DOH uses HTTP/3" + }, + "respectRules": { + "label": "Respect Rules", + "description": "DNS connections follow routing rules" + }, + "useHosts": { + "label": "Use Hosts", + "description": "Enable to resolve hosts through hosts file" + }, + "useSystemHosts": { + "label": "Use System Hosts", + "description": "Enable to resolve hosts through system hosts file" + }, + "directPolicy": { + "label": "Direct Nameserver Follow Policy", + "description": "Whether to follow nameserver policy" + }, + "defaultNameserver": { + "label": "Default Nameserver", + "description": "Default DNS servers used to resolve DNS servers" + }, + "nameserver": { + "label": "Nameserver", + "description": "List of DNS servers, comma separated" + }, + "fallback": { + "label": "Fallback", + "description": "List of fallback DNS servers, comma separated" + }, + "proxy": { + "label": "Proxy Server Nameserver", + "description": "DNS servers for proxy node domain resolution" + }, + "directNameserver": { + "label": "Direct Nameserver", + "description": "DNS servers for direct exit domain resolution, supports 'system' keyword, comma separated" + }, + "fakeIpFilter": { + "label": "Fake IP Filter", + "description": "Domains that skip fake IP resolution, comma separated" + }, + "nameserverPolicy": { + "label": "Nameserver Policy", + "description": "Domain-specific DNS server, multiple servers separated by semicolons, format: domain=server1;server2" + }, + "geoipFiltering": { + "label": "GeoIP Filtering", + "description": "Enable GeoIP filtering for fallback" + }, + "geoipCode": "GeoIP Code", + "fallbackIpCidr": { + "label": "Fallback IP CIDR", + "description": "IP CIDRs not using fallback servers, comma separated" + }, + "fallbackDomain": { + "label": "Fallback Domain", + "description": "Domains using fallback servers, comma separated" + }, + "hosts": { + "label": "Hosts", + "description": "Custom domain to IP or domain mapping" + } + }, + "messages": { + "saved": "DNS settings saved", + "configError": "DNS configuration error:" + }, + "errors": { + "invalid": "Invalid configuration" + } + }, + "webUI": { + "actions": { + "openUrl": "Buka URL" + }, + "title": "Antarmuka Web", + "messages": { + "supportedPlaceholders": "Dukung %host, %port, %secret", + "placeholderInstruction": "Ganti host, port, rahasia dengan %host, %port, %secret" + } + }, + "hotkey": { + "toggles": { + "enableGlobal": "Aktifkan Hotkey Global" + }, + "title": "Pengaturan Pintasan", + "functions": { + "rule": "Mode Aturan", + "global": "Mode Global", + "openOrCloseDashboard": "Buka/Tutup Dasbor", + "toggleSystemProxy": "Aktifkan/Nonaktifkan Proksi Sistem", + "toggleTunMode": "Aktifkan/Nonaktifkan Mode Tun", + "entryLightweightMode": "Entry Lightweight Mode", + "direct": "Mode Langsung" + } + }, + "password": { + "prompts": { + "enterRoot": "Harap masukkan kata sandi root Anda" + } + }, + "networkInterface": { + "title": "Antarmuka Jaringan", + "fields": { + "ipAddress": "Alamat IP", + "macAddress": "Alamat MAC" + } + } + }, + "feedback": { + "notifications": { + "clash": { + "restartSuccess": "Core Clash Dimulai Ulang", + "versionUpdated": "Versi Core Diperbarui", + "changeSuccess": "Inti berhasil diubah", + "changeFailed": "Gagal mengubah inti", + "geoDataUpdated": "GeoData Diperbarui" + }, + "clashService": { + "installSuccess": "Layanan Berhasil Diinstal", + "uninstallSuccess": "Layanan Berhasil Dicopot" + }, + "updater": { + "withClashProxySuccess": "Update with Clash proxy successfully", + "withClashProxyFailed": "Update failed even with Clash proxy" + } + } + }, + "statuses": { + "clash": { + "stopping": "Stopping Core...", + "restarting": "Restarting Core..." + }, + "clashService": { + "installing": "Memasang Layanan...", + "uninstalling": "Uninstalling Service..." + } + } +} diff --git a/src/locales/id/shared.json b/src/locales/id/shared.json new file mode 100644 index 00000000..a34c9c7f --- /dev/null +++ b/src/locales/id/shared.json @@ -0,0 +1,128 @@ +{ + "actions": { + "cancel": "Batal", + "close": "Tutup", + "confirm": "Konfirmasi", + "save": "Simpan", + "delete": "Hapus", + "edit": "Ubah", + "new": "Baru", + "enable": "Aktifkan", + "upgrade": "Tingkatkan", + "restart": "Mulai Ulang", + "resetToDefault": "Setel Ulang ke Default", + "refresh": "Segarkan", + "retry": "Retry", + "refreshPage": "Refresh Page", + "showDetails": "Show Details", + "hideDetails": "Hide Details", + "listView": "Tampilan Daftar", + "tableView": "Tampilan Tabel", + "pause": "Jeda", + "resume": "Lanjut", + "closeAll": "Tutup Semua", + "clear": "Bersihkan" + }, + "labels": { + "updateAt": "Diperbarui Pada", + "timeout": "Timeout", + "icon": "Ikon", + "name": "Nama", + "readOnly": "Hanya Baca", + "expireTime": "Waktu Kedaluwarsa", + "updateTime": "Waktu Pembaruan", + "usedTotal": "Digunakan / Total", + "from": "Dari", + "password": "Kata Sandi", + "retryAttempts": "Retry attempts", + "downloaded": "Diunduh", + "uploaded": "Diunggah" + }, + "statuses": { + "enabled": "Diaktifkan", + "disabled": "Dinonaktifkan", + "saving": "Saving...", + "empty": "Kosong" + }, + "units": { + "milliseconds": "milidetik", + "seconds": "detik", + "minutes": "menit", + "kilobytes": "KB", + "files": "Files" + }, + "placeholders": { + "filter": "Kondisi Filter", + "matchCase": "Cocokkan Kasus", + "matchWholeWord": "Cocokkan Kata Utuh", + "useRegex": "Gunakan Ekspresi Reguler" + }, + "validation": { + "invalidRegex": "Invalid regular expression" + }, + "window": { + "maximize": "Maksimalkan", + "minimize": "Minimalkan" + }, + "editorModes": { + "visualization": "Visualisasi", + "advanced": "Lanjutan" + }, + "feedback": { + "errors": { + "trafficStats": "Traffic Statistics Error", + "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." + }, + "notices": { + "raw": "{{message}}", + "prefixedRaw": "{{prefix}} {{message}}" + }, + "notifications": { + "importSuccess": "Profil Berhasil Diimpor", + "importSubscriptionSuccess": "Berlangganan Berhasil Diimpor", + "importWithClashProxy": "Profile Imported with Clash proxy", + "saved": "Saved successfully", + "common": { + "copySuccess": "Salin Berhasil", + "saveSuccess": "Configuration saved successfully", + "saveFailed": "Failed to save configuration" + } + }, + "validation": { + "config": { + "failed": "Validasi konfigurasi langganan gagal, periksa file konfigurasi, perubahan dibatalkan, detail kesalahan:", + "bootFailed": "Validasi konfigurasi saat boot gagal, menggunakan konfigurasi default, periksa file konfigurasi, detail kesalahan:", + "coreChangeFailed": "Validasi konfigurasi saat ganti inti gagal, menggunakan konfigurasi default, periksa file konfigurasi, detail kesalahan:", + "processTerminated": "Proses validasi dihentikan" + }, + "script": { + "syntaxError": "Kesalahan sintaks skrip, perubahan dibatalkan", + "missingMain": "Kesalahan skrip, perubahan dibatalkan", + "fileNotFound": "File tidak ditemukan, perubahan dibatalkan", + "fileError": "Kesalahan file skrip, perubahan dibatalkan" + }, + "yaml": { + "syntaxError": "YAML syntax error, changes reverted", + "readError": "YAML read error, changes reverted", + "mappingError": "YAML mapping error, changes reverted", + "keyError": "YAML key error, changes reverted", + "generalError": "YAML error, changes reverted" + }, + "merge": { + "syntaxError": "Merge file syntax error, changes reverted", + "mappingError": "Merge file mapping error, changes reverted", + "keyError": "Merge file key error, changes reverted", + "generalError": "Merge file error, changes reverted" + } + } + }, + "filters": { + "logLevels": { + "all": "ALL", + "debug": "DEBUG", + "info": "INFO", + "warn": "WARN", + "error": "ERROR" + } + } +} diff --git a/src/locales/id/tests.json b/src/locales/id/tests.json new file mode 100644 index 00000000..da0aac91 --- /dev/null +++ b/src/locales/id/tests.json @@ -0,0 +1,40 @@ +{ + "page": { + "actions": { + "testAll": "Tes Semua" + }, + "title": "Tes" + }, + "components": { + "item": { + "actions": { + "test": "Tes" + } + } + }, + "modals": { + "test": { + "title": { + "create": "Buat Tes", + "edit": "Ubah Tes" + }, + "fields": { + "url": "URL Tes" + } + } + }, + "statuses": { + "test": { + "pending": "Pending", + "yes": "Yes", + "no": "No", + "failed": "Failed", + "completed": "Completed", + "disallowedIsp": "Disallowed ISP", + "originalsOnly": "Originals Only", + "noDisney": "No (IP Banned By Disney+)", + "unsupportedRegion": "Unsupported Country/Region", + "failedNetwork": "Failed (Network Connection)" + } + } +} diff --git a/src/locales/id/unlock.json b/src/locales/id/unlock.json new file mode 100644 index 00000000..e97daa76 --- /dev/null +++ b/src/locales/id/unlock.json @@ -0,0 +1,12 @@ +{ + "page": { + "actions": { + "testing": "Testing..." + }, + "empty": "No unlock test items", + "messages": { + "detectionTimeout": "Detection timeout or failed" + }, + "title": "Unlock Test" + } +} diff --git a/src/locales/jp.json b/src/locales/jp.json deleted file mode 100644 index 46221c8d..00000000 --- a/src/locales/jp.json +++ /dev/null @@ -1,1299 +0,0 @@ -{ - "shared": { - "actions": { - "cancel": "キャンセル", - "close": "閉じる", - "confirm": "確認", - "save": "保存", - "delete": "削除", - "edit": "編集", - "new": "新規作成", - "enable": "有効にする", - "upgrade": "コアをアップグレード", - "restart": "コアを再起動", - "resetToDefault": "デフォルト値にリセット", - "refresh": "更新", - "retry": "Retry", - "refreshPage": "Refresh Page", - "showDetails": "Show Details", - "hideDetails": "Hide Details", - "listView": "リストビュー", - "tableView": "テーブルビュー", - "pause": "一時停止", - "resume": "再開", - "closeAll": "すべて閉じる", - "clear": "クリア" - }, - "labels": { - "updateAt": "更新日時", - "timeout": "Timeout", - "icon": "アイコン", - "name": "名前", - "readOnly": "読み取り専用", - "expireTime": "有効期限", - "updateTime": "更新時間", - "usedTotal": "使用済み / 合計", - "from": "から", - "password": "パスワード", - "retryAttempts": "Retry attempts", - "downloaded": "ダウンロード量", - "uploaded": "アップロード量" - }, - "statuses": { - "enabled": "有効", - "disabled": "無効", - "saving": "Saving...", - "empty": "空っぽ" - }, - "units": { - "milliseconds": "ミリ秒", - "seconds": "秒", - "minutes": "分", - "kilobytes": "KB", - "files": "Files" - }, - "placeholders": { - "filter": "フィルタリング条件", - "matchCase": "大文字小文字を区別する", - "matchWholeWord": "完全一致", - "useRegex": "正規表現を使用する" - }, - "validation": { - "invalidRegex": "Invalid regular expression" - }, - "window": { - "maximize": "最大化", - "minimize": "最小化" - }, - "editorModes": { - "visualization": "可視化", - "advanced": "詳細設定" - }, - "feedback": { - "errors": { - "trafficStats": "Traffic Statistics Error", - "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." - }, - "notices": { - "raw": "{{message}}", - "prefixedRaw": "{{prefix}} {{message}}" - }, - "notifications": { - "importSuccess": "プロファイルのインポートに成功しました。", - "importSubscriptionSuccess": "サブスクリプションのインポートに成功しました。", - "importWithClashProxy": "Clashプロキシを使用してプロファイルのインポートに成功しました。", - "saved": "Saved successfully", - "common": { - "copySuccess": "コピー成功", - "saveSuccess": "ランダム設定を保存完了", - "saveFailed": "Failed to save configuration" - } - }, - "validation": { - "config": { - "failed": "プロファイル設定の検証に失敗しました。プロファイル設定ファイルを確認してください。変更は取り消されました。エラー詳細:", - "bootFailed": "起動時のプロファイル設定の検証に失敗しました。デフォルト設定で起動しました。プロファイル設定ファイルを確認してください。エラー詳細:", - "coreChangeFailed": "コアを切り替える際の設定検証に失敗しました。デフォルト設定で起動しました。プロファイル設定ファイルを確認してください。エラー詳細:", - "processTerminated": "検証プロセスが中断されました。" - }, - "script": { - "syntaxError": "スクリプトの構文エラーがあります。変更は取り消されました。", - "missingMain": "スクリプトにメイン関数がありません。変更は取り消されました。", - "fileNotFound": "ファイルが見つかりません。変更は取り消されました。", - "fileError": "スクリプトファイルにエラーがあります。変更は取り消されました。" - }, - "yaml": { - "syntaxError": "YAML構文エラーがあります。変更は取り消されました。", - "readError": "YAMLファイルの読み取りエラーがあります。変更は取り消されました。", - "mappingError": "YAMLマッピングエラーがあります。変更は取り消されました。", - "keyError": "YAMLキーエラーがあります。変更は取り消されました。", - "generalError": "YAMLエラーがあります。変更は取り消されました。" - }, - "merge": { - "syntaxError": "上書きファイルの構文エラーがあります。変更は取り消されました。", - "mappingError": "上書きファイルのマッピングエラーがあります。変更は取り消されました。", - "keyError": "上書きファイルのキーエラーがあります。変更は取り消されました。", - "generalError": "上書きファイルにエラーがあります。変更は取り消されました。" - } - } - }, - "filters": { - "logLevels": { - "all": "ALL", - "debug": "DEBUG", - "info": "INFO", - "warn": "WARN", - "error": "ERROR" - } - } - }, - "profiles": { - "page": { - "actions": { - "updateAll": "すべてのプロファイルを更新", - "viewRuntimeConfig": "実行時のプロファイルを表示", - "reactivate": "プロファイルを再アクティブ化", - "import": "インポート" - }, - "batch": { - "actions": { - "delete": "選択したプロファイルを削除", - "selectAll": "すべて選択", - "deselectAll": "すべての選択を解除", - "done": "完了" - }, - "summary": { - "selected": "選択済み", - "items": "アイテム" - }, - "title": "バッチ操作" - }, - "importForm": { - "placeholder": "プロファイルファイルのURL", - "actions": { - "paste": "貼り付け" - } - }, - "feedback": { - "errors": { - "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", - "onlyYaml": "YAMLファイルのみサポートされています。" - }, - "notifications": { - "importRetry": "インポートに失敗しました。Clashプロキシを使用して再試行します...", - "importFail": "Clashプロキシを使用してもインポートに失敗しました。", - "importNeedsRefresh": "Profile imported but may need manual refresh", - "importSuccess": "Profile imported successfully, please restart if not visible", - "profileSwitched": "プロファイルが切り替えられました。", - "profileReactivated": "プロファイルが再アクティブ化されました。", - "switchInterrupted": "Profile switch interrupted by new selection", - "batchDeleted": "選択したプロファイルが正常に削除されました" - }, - "notices": { - "forceRefreshCompleted": "Force refresh completed", - "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" - } - }, - "title": "プロファイル" - }, - "components": { - "card": { - "labels": { - "clickToImport": "クリックしてサブスクリプションをインポート" - } - }, - "fileInput": { - "chooseFile": "ファイルを選択" - }, - "menu": { - "home": "ホーム", - "select": "使用する", - "editInfo": "情報を編集", - "editFile": "ファイルを編集", - "editRules": "ルールを編集", - "editProxies": "ノードを編集", - "editGroups": "プロキシグループを編集", - "extendConfig": "拡張上書き設定", - "extendScript": "拡張スクリプト", - "openFile": "ファイルを開く", - "update": "更新", - "updateViaProxy": "Update via proxy" - }, - "more": { - "global": { - "merge": "Global Merge", - "script": "Global Script" - }, - "chips": { - "merge": "Merge", - "script": "Script" - } - }, - "profileItem": { - "tooltips": { - "showLast": "Click to show last update time", - "showNext": "Click to show next update" - }, - "status": { - "lastUpdateFailed": "前回の更新に失敗しました。", - "nextUp": "次回の更新", - "noSchedule": "予定がありません。", - "unknown": "不明", - "autoUpdateDisabled": "自動更新が無効になっています。" - } - } - }, - "modals": { - "profileForm": { - "title": { - "create": "新規プロファイルを作成", - "edit": "プロファイルを編集" - }, - "fields": { - "type": "タイプ", - "description": "説明", - "subscriptionUrl": "サブスクリプションURL", - "httpTimeout": "HTTP Request Timeout", - "updateInterval": "更新間隔", - "useSystemProxy": "システムプロキシを使用して更新", - "useClashProxy": "クラッシュプロキシを使用して更新", - "acceptInvalidCerts": "Allows Invalid Certificates (Danger)", - "allowAutoUpdate": "Allow Auto Update" - }, - "feedback": { - "notifications": { - "creationRetry": "プロファイルの作成に失敗しました。Clashプロキシを使用して再試行します...", - "creationSuccess": "Clashプロキシを使用してプロファイルの作成に成功しました。" - } - } - }, - "proxiesEditor": { - "title": "ノードを編集", - "placeholders": { - "multiUri": "複数のURIは改行で区切ってください(Base64エンコードに対応)" - }, - "actions": { - "prepend": "前置プロキシノードを追加", - "append": "後置プロキシノードを追加" - } - }, - "groupsEditor": { - "title": "プロキシグループを編集", - "errors": { - "nameRequired": "プロキシグループ名は必須です", - "nameExists": "プロキシグループ名はすでに存在します" - }, - "fields": { - "type": "プロキシグループタイプ", - "name": "プロキシグループ名", - "icon": "プロキシグループアイコン", - "proxies": "プロキシを導入", - "provider": "プロキシプロバイダーを導入", - "healthCheckUrl": "ヘルスチェックURL", - "expectedStatus": "期待するステータスコード", - "interval": "チェック間隔", - "maxFailedTimes": "最大失敗回数", - "interfaceName": "出力インターフェース", - "routingMark": "ルーティングマーク", - "filter": "ノードをフィルタリング", - "excludeFilter": "除外ノード", - "excludeType": "除外ノードタイプ", - "includeAll": "すべての出力プロキシ、プロキシプロバイダーを導入", - "includeAllProxies": "すべての出力プロキシを導入", - "includeAllProviders": "すべてのプロキシプロバイダーを導入" - }, - "toggles": { - "lazy": "遅延モード", - "disableUdp": "UDPを無効にする", - "hidden": "プロキシグループを隠す" - }, - "actions": { - "prepend": "前置プロキシグループを追加", - "append": "後置プロキシグループを追加" - } - }, - "editor": { - "actions": { - "format": "文書を整形する" - }, - "messages": { - "readOnly": "読み取り専用モードでは編集できません。" - } - }, - "confirmDelete": { - "title": "削除を確認", - "message": "この操作は元に戻せません" - }, - "logViewer": { - "title": "スクリプトコンソール出力" - } - } - }, - "proxies": { - "page": { - "modes": { - "rule": "Rule", - "global": "Global", - "direct": "Direct" - }, - "actions": { - "toggleChain": "🔗 チェーンプロキシ", - "connect": "Connect", - "disconnect": "Disconnect", - "connecting": "Connecting...", - "clearChainConfig": "Delete Chain Config" - }, - "provider": { - "title": "プロキシプロバイダー", - "actions": { - "updateAll": "すべて更新", - "update": "更新" - } - }, - "rules": { - "title": "Proxy Rules", - "select": "Select Rules" - }, - "labels": { - "proxyCount": "ノード数", - "delayCheckReset": "遅延テストを実行して固定を解除する" - }, - "tooltips": { - "locate": "現在のノード", - "delayCheck": "遅延テスト", - "sortDefault": "デフォルトでソート", - "sortDelay": "遅延でソート", - "sortName": "名前でソート", - "delayCheckUrl": "遅延テストURL", - "showBasic": "ノードの詳細を隠す", - "showDetail": "ノードの詳細を表示する", - "filter": "ノードをフィルタリング" - }, - "placeholders": { - "delayCheckUrl": "遅延テストURL" - }, - "chain": { - "header": "Chain Proxy Config", - "empty": "No proxy chain configured", - "instruction": "Click nodes in order to add to proxy chain", - "minimumNodes": "Chain proxy requires at least 2 nodes", - "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", - "connectFailed": "Failed to connect to proxy chain", - "disconnectFailed": "Failed to disconnect from proxy chain", - "duplicateNode": "Proxy node already exists in chain" - }, - "messages": { - "directMode": "直接接続モード" - }, - "title": { - "default": "プロキシグループ", - "chainMode": "Proxy Chain Mode" - } - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "components": { - "enums": { - "strategies": { - "select": "手動でプロキシを選択", - "url-test": "URLテストによる遅延でプロキシを選択", - "fallback": "利用不可の場合は別のプロキシに切り替える", - "load-balance": "負荷分散によりプロキシを割り当てる", - "relay": "定義されたプロキシチェーンに沿って転送する" - }, - "policies": { - "DIRECT": "直接接続", - "REJECT": "リクエストを拒否", - "REJECT-DROP": "リクエストを破棄", - "PASS": "このルールをスキップ" - } - } - } - }, - "connections": { - "page": { - "title": "接続" - }, - "components": { - "fields": { - "host": "ホスト", - "dlSpeed": "ダウンロード速度", - "ulSpeed": "アップロード速度", - "chains": "チェーン", - "rule": "ルール", - "process": "プロセス", - "time": "接続時間", - "source": "送信元アドレス", - "destination": "宛先アドレス", - "destinationPort": "宛先ポート", - "type": "タイプ" - }, - "order": { - "default": "Default", - "uploadSpeed": "アップロード速度", - "downloadSpeed": "ダウンロード速度" - }, - "actions": { - "closeConnection": "接続を閉じる" - } - } - }, - "tests": { - "page": { - "actions": { - "testAll": "すべてテスト" - }, - "title": "テスト" - }, - "components": { - "item": { - "actions": { - "test": "テスト" - } - } - }, - "modals": { - "test": { - "title": { - "create": "新規テストを作成", - "edit": "テストを編集" - }, - "fields": { - "url": "テストURL" - } - } - }, - "statuses": { - "test": { - "pending": "検査待ち", - "yes": "サポートする", - "no": "サポートしない", - "failed": "テストに失敗しました。", - "completed": "検査完了", - "disallowedIsp": "許可されていないインターネットサービスプロバイダー", - "originalsOnly": "オリジナルのみ", - "noDisney": "No (IP Banned By Disney+)", - "unsupportedRegion": "サポートされていない国/地域", - "failedNetwork": "Failed (Network Connection)" - } - } - }, - "logs": { - "page": { - "title": "ログ" - } - }, - "rules": { - "page": { - "provider": { - "trigger": "ルールプロバイダー", - "dialogTitle": "ルールプロバイダー", - "actions": { - "updateAll": "すべて更新", - "update": "更新" - } - }, - "title": "ルール" - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "modals": { - "editor": { - "form": { - "labels": { - "type": "ルールタイプ", - "content": "ルール内容", - "proxyPolicy": "プロキシポリシー" - }, - "toggles": { - "noResolve": "DNS解決をスキップ" - }, - "actions": { - "prependRule": "前置ルールを追加", - "appendRule": "後置ルールを追加" - }, - "validation": { - "conditionRequired": "ルール条件が必要です", - "invalidRule": "無効なルール" - } - }, - "ruleTypes": { - "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": "IPアドレス範囲を一致させる", - "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ユーザーIDを一致させる", - "IN-TYPE": "入力タイプを一致させる", - "IN-USER": "入力ユーザー名を一致させる", - "IN-NAME": "入力名を一致させる", - "SUB-RULE": "サブルール", - "RULE-SET": "ルールセットを一致させる", - "AND": "論理積", - "OR": "論理和", - "NOT": "論理否定", - "MATCH": "すべてのリクエストを一致させる" - }, - "title": "ルールを編集" - } - } - }, - "home": { - "page": { - "tooltips": { - "lightweightMode": "軽量モード", - "manual": "マニュアル", - "settings": "ホーム設定" - }, - "cards": { - "trafficStats": "トラフィック統計", - "networkSettings": "ネットワーク設定", - "proxyMode": "プロキシモード" - }, - "settings": { - "cards": { - "profile": "プロファイルカード", - "currentProxy": "現在のプロキシカード", - "network": "ネットワーク設定カード", - "proxyMode": "プロキシモードカード", - "traffic": "トラフィック統計カード", - "tests": "ウェブサイトテストカード", - "ip": "IP情報カード", - "clashInfo": "Clash情報カード", - "systemInfo": "システム情報カード" - }, - "title": "ホーム設定" - }, - "title": "ホーム" - }, - "components": { - "proxyTun": { - "status": { - "systemProxyEnabled": "システムプロキシが有効になっています。アプリケーションはプロキシを通じてネットワークにアクセスします。", - "systemProxyDisabled": "システムプロキシが無効になっています。ほとんどのユーザーはこのオプションをオンにすることをお勧めします。", - "tunModeServiceRequired": "TUNモードはサービスモードが必要です。まずサービスをインストールしてください。", - "tunModeEnabled": "TUNモードが有効になっています。アプリケーションは仮想ネットワークカードを通じてネットワークにアクセスします。", - "tunModeDisabled": "TUNモードが無効になっています。特殊なアプリケーションに適しています。" - }, - "tooltips": { - "systemProxy": "オペレーティングシステムのプロキシ設定を変更します。有効にできない場合は、手動でオペレーティングシステムのプロキシ設定を変更してください。", - "tunMode": "TUNモードは全てのアプリケーションのトラフィックを制御できます。システムプロキシ設定に従わない特殊なアプリケーションに適しています。" - } - }, - "clashInfo": { - "title": "Clash情報", - "fields": { - "coreVersion": "コアバージョン", - "systemProxyAddress": "システムプロキシアドレス", - "mixedPort": "Mixed Port", - "uptime": "稼働時間", - "rulesCount": "ルール数" - } - }, - "systemInfo": { - "title": "システム情報", - "fields": { - "osInfo": "オペレーティングシステム情報", - "autoLaunch": "起動時に自動起動", - "runningMode": "実行モード", - "lastCheckUpdate": "最後の更新チェック", - "vergeVersion": "Vergeバージョン" - }, - "actions": { - "settings": "設定" - }, - "tooltips": { - "autoLaunchAdmin": "管理者モードでは起動時の自動起動がサポートされない場合があります。" - }, - "badges": { - "adminMode": "管理者モード", - "serviceMode": "サービスモード", - "sidecarMode": "ユーザーモード", - "adminServiceMode": "Admin + Service Mode" - } - }, - "ipInfo": { - "title": "IP情報", - "labels": { - "ip": "IP", - "asn": "自治システム番号", - "isp": "インターネットサービスプロバイダー", - "org": "組織", - "location": "位置", - "timezone": "タイムゾーン", - "autoRefresh": "自動更新", - "unknown": "不明" - }, - "errors": { - "load": "IP情報の取得に失敗しました" - } - }, - "currentProxy": { - "title": "現在のノード", - "actions": { - "refreshDelay": "遅延テスト" - }, - "labels": { - "globalMode": "グローバルモード", - "directMode": "直接接続モード", - "group": "プロキシグループ", - "proxy": "ノード", - "noActiveNode": "アクティブなプロキシノードがありません。" - } - }, - "tests": { - "title": "ウェブサイトテスト" - }, - "traffic": { - "metrics": { - "uploadSpeed": "アップロード速度", - "downloadSpeed": "ダウンロード速度", - "activeConnections": "アクティブな接続", - "memoryUsage": "コアメモリ使用量" - }, - "legends": { - "upload": "アップロード", - "download": "ダウンロード" - }, - "patterns": { - "minutes": "{{time}} Minutes" - } - }, - "clashMode": { - "errors": { - "communication": "Core communication error" - }, - "labels": { - "rule": "ルールモード", - "global": "グローバルモード", - "direct": "直接接続モード" - }, - "descriptions": { - "rule": "Automatically choose proxies according to the rule set.", - "global": "Forward all network requests through the selected proxy.", - "direct": "Bypass the proxy and connect to the internet directly." - } - } - } - }, - "unlock": { - "page": { - "actions": { - "testing": "テスト中..." - }, - "empty": "アンロックテスト項目はありません", - "messages": { - "detectionTimeout": "Detection timeout or failed" - }, - "title": "ロック解除テスト" - } - }, - "settings": { - "page": { - "actions": { - "manual": "マニュアル", - "telegram": "Telegramチャンネル", - "github": "GitHubリポジトリ" - }, - "title": "設定" - }, - "sections": { - "system": { - "title": "システム設定", - "toggles": { - "tunMode": "仮想ネットワークカードモード", - "systemProxy": "システムプロキシ" - }, - "tooltips": { - "autoLaunchAdmin": "管理者モードでは起動時の自動起動がサポートされない場合があります。", - "silentStart": "アプリケーションを起動すると、バックグラウンドモードで実行され、アプリケーションパネルは表示されません。" - }, - "fields": { - "autoLaunch": "自動起動", - "silentStart": "サイレント起動" - }, - "notifications": { - "tunMode": { - "autoDisabled": "TUN Mode automatically disabled due to service unavailable", - "autoDisableFailed": "Failed to disable TUN Mode automatically" - } - } - }, - "proxyControl": { - "tooltips": { - "systemProxy": "オペレーティングシステムのプロキシ設定を変更します。有効にできない場合は、手動でオペレーティングシステムのプロキシ設定を変更してください。", - "tunMode": "TUN(仮想ネットワークカード)モードはシステムのすべてのトラフィックを制御します。有効にすると、システムプロキシを開く必要はありません。", - "tunUnavailable": "TUNモードはサービスモードまたは管理者モードが必要です" - }, - "actions": { - "installService": "サービスをインストール", - "uninstallService": "サービスのアンインストール" - }, - "fields": { - "systemProxy": "システムプロキシ", - "tunMode": "仮想ネットワークカードモード" - } - }, - "externalController": { - "title": "外部コントローラーの監視アドレス", - "fields": { - "enable": "外部コントローラーを有効化", - "address": "外部コントローラーの監視アドレス", - "secret": "APIアクセスキー" - }, - "placeholders": { - "address": "必須", - "secret": "推奨設定" - }, - "tooltips": { - "copy": "クリップボードにコピー" - }, - "messages": { - "addressRequired": "コントローラーのアドレスは空にできません", - "secretRequired": "シークレットを空にすることはできません", - "copyFailed": "コピーに失敗しました", - "controllerCopied": "API ポートがクリップボードにコピーされました", - "secretCopied": "API キーがクリップボードにコピーされました" - } - }, - "externalCors": { - "title": "外部 CORS 設定", - "fields": { - "allowPrivateNetwork": "プライベートネットワークへのアクセスを許可", - "allowedOrigins": "許可されたオリジン" - }, - "placeholders": { - "origin": "有効なURLを入力してください" - }, - "actions": { - "add": "追加" - }, - "messages": { - "alwaysIncluded": "常に含まれるオリジン: {{urls}}" - }, - "tooltips": { - "open": "外部 CORS 設定" - } - }, - "appearance": { - "light": "Light", - "dark": "Dark", - "system": "System" - }, - "clash": { - "title": "Clash設定", - "form": { - "fields": { - "allowLan": "LAN接続を許可", - "dnsOverwrite": "DNS上書き", - "ipv6": "IPv6", - "unifiedDelay": "統一遅延", - "logLevel": "ログレベル", - "portConfig": "ポート設定", - "external": "外部制御", - "webUI": "Webインターフェース", - "clashCore": "Clashコア", - "openUwpTool": "UWPツールを開く", - "updateGeoData": "GeoDataを更新" - }, - "tooltips": { - "networkInterface": "ネットワークインターフェース", - "unifiedDelay": "統一遅延を有効にすると、2回の遅延テストが行われ、接続ハンドシェイクなどによる異なるタイプのノードの遅延差を解消します。", - "logLevel": "ログディレクトリのServiceフォルダ内のコアログファイルにのみ適用されます。", - "openUwpTool": "Windows 8以降では、UWPアプリケーション(Microsoft Storeなど)がローカルホストのネットワークサービスに直接アクセスすることが制限されています。このツールを使用すると、この制限を回避できます。" - }, - "options": { - "logLevel": { - "debug": "Debug", - "info": "Info", - "warning": "Warn", - "error": "Error", - "silent": "Silent" - } - } - } - } - }, - "components": { - "verge": { - "basic": { - "title": "Verge基本設定", - "actions": { - "browse": "参照" - }, - "trayOptions": { - "showMainWindow": "メインウィンドウを表示", - "showTrayMenu": "トレイメニューを表示", - "disable": "無効にする" - }, - "fields": { - "language": "言語設定", - "themeMode": "テーマモード", - "trayClickEvent": "トレイアイコンクリックイベント", - "copyEnvType": "環境変数タイプをコピー", - "startPage": "起動ページ", - "startupScript": "起動スクリプト", - "themeSetting": "テーマ設定", - "layoutSetting": "レイアウト設定", - "misc": "その他の設定", - "hotkeySetting": "ホットキー設定" - } - }, - "advanced": { - "title": "Verge詳細設定", - "tooltips": { - "backupInfo": "WebDAVを使用した設定ファイルのバックアップをサポートします。", - "openConfDir": "アプリケーションが正常に動作しない場合は、このフォルダ内のすべてのファイルを!バックアップ!して削除し、アプリケーションを再起動してください。", - "liteMode": "GUIを閉じて、コアのみを実行します。" - }, - "actions": { - "copyVersion": "Copy Version" - }, - "notifications": { - "latestVersion": "現在は最新バージョンです。", - "versionCopied": "Version copied to clipboard" - }, - "fields": { - "backupSetting": "バックアップ設定", - "runtimeConfig": "現在の設定", - "openConfDir": "設定ディレクトリを開く", - "openCoreDir": "コアディレクトリを開く", - "openLogsDir": "ログディレクトリを開く", - "checkUpdates": "更新を確認", - "openDevTools": "開発者ツールを開く", - "liteModeSettings": "軽量モード設定", - "exit": "終了", - "exportDiagnostics": "診断情報をエクスポート", - "vergeVersion": "Vergeバージョン" - } - }, - "theme": { - "title": "テーマ設定", - "fields": { - "primaryColor": "主要色", - "secondaryColor": "次要色", - "primaryText": "テキスト主要色", - "secondaryText": "テキスト次要色", - "infoColor": "情報色", - "warningColor": "警告色", - "errorColor": "エラー色", - "successColor": "成功色", - "fontFamily": "フォントファミリー", - "cssInjection": "CSSインジェクション" - }, - "actions": { - "editCss": "Edit CSS" - }, - "dialogs": { - "editCssTitle": "Edit CSS" - } - }, - "layout": { - "title": "レイアウト設定", - "fields": { - "preferSystemTitlebar": "Prefer System Titlebar", - "trafficGraph": "トラフィックグラフ", - "memoryUsage": "コアメモリ使用量", - "proxyGroupIcon": "プロキシグループアイコン", - "hoverNavigator": "Hover Jump Navigator", - "hoverNavigatorDelay": "Hover Jump Navigator Delay", - "navIcon": "ナビゲーションバーアイコン", - "trayIcon": "トレイアイコン", - "showProxyGroupsInline": "Show Proxy Groups Inline", - "commonTrayIcon": "通常のトレイアイコン", - "systemProxyTrayIcon": "システムプロキシトレイアイコン", - "tunTrayIcon": "TUNモードトレイアイコン", - "enableTrayIcon": "トレイアイコンを有効にする", - "enableTraySpeed": "トレイの速度表示を有効にする" - }, - "tooltips": { - "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", - "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" - }, - "options": { - "icon": { - "monochrome": "モノクロアイコン", - "colorful": "カラーアイコン", - "disable": "無効にする" - } - } - } - } - }, - "modals": { - "clashPort": { - "title": "ポート設定", - "fields": { - "mixed": "混合プロキシポート", - "socks": "SOCKSプロキシポート", - "http": "HTTP(S)プロキシポート", - "redir": "Redir透明プロキシポート", - "tproxy": "TPROXY透明プロキシポート" - }, - "actions": { - "random": "ランダムポート" - }, - "messages": { - "saved": "Port settings saved", - "saveFailed": "Failed to save port settings" - } - }, - "clashCore": { - "variants": { - "release": "正式版", - "alpha": "アルファ版" - } - }, - "liteMode": { - "title": "軽量モード設定", - "actions": { - "enterNow": "今すぐ軽量モードに入る" - }, - "toggles": { - "autoEnter": "自動的に軽量モードに入る" - }, - "tooltips": { - "autoEnter": "有効にすると、ウィンドウを閉じてから一定時間後に自動的に軽量モードが有効になります。" - }, - "fields": { - "delay": "自動的に軽量モードに入るまでの遅延時間" - }, - "messages": { - "autoEnterHint": "ウィンドウを閉じると、{{n}}分後に自動的に軽量モードが有効になります。" - } - }, - "backup": { - "title": "バックアップ設定", - "tabs": { - "local": "Local backup", - "webdav": "WebDAV backup" - }, - "actions": { - "selectTarget": "Select backup target", - "backup": "バックアップ", - "export": "Export", - "exportBackup": "Export Backup", - "deleteBackup": "バックアップを削除", - "restore": "復元", - "restoreBackup": "バックアップを復元" - }, - "fields": { - "webdavUrl": "WebDAVサーバーのURL http(s)://", - "username": "ユーザー名", - "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." - }, - "messages": { - "webdavUrlRequired": "WebDAVサーバーのURLは必須です。", - "invalidWebdavUrl": "無効なWebDAVサーバーのURL形式", - "usernameRequired": "ユーザー名は必須です。", - "passwordRequired": "パスワードは必須です。", - "webdavConfigSaved": "WebDAV設定が保存されました。", - "webdavConfigSaveFailed": "WebDAV設定の保存に失敗しました: {{error}}", - "backupCreated": "バックアップが作成されました。", - "backupFailed": "バックアップに失敗しました: {{error}}", - "localBackupCreated": "Local backup created successfully", - "localBackupFailed": "Local backup failed", - "restoreSuccess": "復元に成功しました。アプリケーションは1秒後に再起動します。", - "localBackupExported": "Local backup exported successfully", - "localBackupExportFailed": "Failed to export local backup", - "confirmDelete": "Confirm to delete this backup file?", - "confirmRestore": "Confirm to restore this backup file?" - }, - "table": { - "filename": "ファイル名", - "backupTime": "バックアップ時間", - "actions": "操作", - "noBackups": "バックアップがありません。", - "rowsPerPage": "Rows per page" - } - }, - "misc": { - "title": "その他の設定", - "fields": { - "appLogLevel": "アプリケーションログレベル", - "appLogMaxSize": "App Log Max Size", - "appLogMaxCount": "App Log Max Count", - "autoCloseConnections": "接続を自動的に閉じる", - "autoCheckUpdate": "自動更新チェック", - "enableBuiltinEnhanced": "組み込み拡張機能を有効にする", - "proxyLayoutColumns": "プロキシページのレイアウト列数", - "autoLogClean": "ログを自動的にクリーンアップ", - "autoDelayDetection": "自動遅延検出", - "defaultLatencyTest": "デフォルトの遅延テストURL", - "defaultLatencyTimeout": "テストタイムアウト時間" - }, - "tooltips": { - "autoCloseConnections": "プロキシグループで選択されたノードまたはプロキシモードが変更されたときに、既存の接続を閉じます。", - "enableBuiltinEnhanced": "設定ファイルの互換性処理", - "autoDelayDetection": "バックグラウンドで現在のノードのレイテンシーを定期的にテストします", - "defaultLatencyTest": "HTTPクライアントリクエストテストにのみ使用され、設定ファイルには影響しません。" - }, - "options": { - "proxyLayoutColumns": { - "auto": "自動列数" - }, - "autoLogClean": { - "never": "クリーンアップしない", - "retainDays": "{{n}}日間保持" - } - } - }, - "update": { - "title": "New Version v{{version}}", - "actions": { - "goToRelease": "リリースページに移動", - "update": "更新" - }, - "messages": { - "portableError": "ポータブル版ではアプリケーション内での更新はサポートされていません。手動でダウンロードして置き換えてください。", - "breakChangeError": "このバージョンは重大な更新であり、アプリケーション内での更新はサポートされていません。アンインストールしてから手動でダウンロードしてインストールしてください。" - } - }, - "sysproxy": { - "title": "システムプロキシ設定", - "fieldsets": { - "currentStatus": "現在のシステムプロキシ" - }, - "fields": { - "enableStatus": "有効状態:", - "serverAddr": "サーバーアドレス:", - "pacUrl": "PACアドレス:", - "proxyHost": "プロキシホスト", - "usePacMode": "PACモードを使用", - "proxyGuard": "システムプロキシガード", - "guardDuration": "プロキシガード間隔", - "alwaysUseDefaultBypass": "常にデフォルトのバイパスを使用", - "proxyBypass": "プロキシバイパス設定:", - "bypass": "現在のバイパス:", - "pacScriptContent": "PACスクリプト内容" - }, - "tooltips": { - "proxyGuard": "他のソフトウェアがオペレーティングシステムのプロキシ設定を変更するのを防ぐために有効にします。" - }, - "messages": { - "durationTooShort": "プロキシデーモンの間隔は1秒以上に設定する必要があります。", - "invalidBypass": "無効なバイパス形式", - "invalidProxyHost": "プロキシホストの形式が無効です" - }, - "actions": { - "editPac": "編集 PAC" - } - }, - "tun": { - "title": "仮想ネットワークカードモード", - "fields": { - "stack": "TUNモードスタック", - "device": "Device Name", - "autoRoute": "グローバルルートを自動設定", - "strictRoute": "厳格なルート", - "autoDetectInterface": "トラフィックの出口インターフェースを自動選択", - "dnsHijack": "DNSハイジャック", - "mtu": "最大転送単位" - }, - "tooltips": { - "dnsHijack": "Please use , to separate multiple DNS servers" - }, - "messages": { - "applied": "設定が適用されました。" - } - }, - "dns": { - "dialog": { - "title": "DNS上書き", - "warning": "ここの設定がわからない場合は、変更しないでください。DNS上書きを有効にしたままにしてください。" - }, - "sections": { - "general": "DNS設定", - "fallbackFilter": "フォールバックフィルター設定", - "hosts": "Hosts設定" - }, - "fields": { - "enable": "DNSを有効にする", - "listen": "DNS監視アドレス", - "enhancedMode": "拡張モード", - "fakeIpRange": "Fake IP範囲", - "fakeIpFilterMode": "Fake IPフィルターモード", - "ipv6": { - "label": "IPv6", - "description": "IPv6 DNS解決を有効にする" - }, - "preferH3": { - "label": "HTTP/3を優先する", - "description": "DNS DOHでHTTP/3プロトコルを使用する" - }, - "respectRules": { - "label": "ルートルールに従う", - "description": "DNS接続はルートルールに従います。" - }, - "useHosts": { - "label": "Hostsファイルを使用する", - "description": "Hostsファイルを使用してホスト名を解決する" - }, - "useSystemHosts": { - "label": "システムのHostsファイルを使用する", - "description": "システムのHostsファイルを使用してホスト名を解決する" - }, - "directPolicy": { - "label": "直接接続の名前解決サーバーはポリシーに従う", - "description": "名前解決サーバーのポリシーに従うかどうか" - }, - "defaultNameserver": { - "label": "デフォルトの名前解決サーバー", - "description": "名前解決サーバーを解決するために使用されるデフォルトのDNSサーバー" - }, - "nameserver": { - "label": "名前解決サーバー", - "description": "DNSサーバーのリスト。カンマで区切って指定します。" - }, - "fallback": { - "label": "フォールバックサーバー", - "description": "フォールバックDNSサーバーのリスト。カンマで区切って指定します。" - }, - "proxy": { - "label": "プロキシサーバーの名前解決サーバー", - "description": "プロキシノードの名前解決サーバー。プロキシノードのドメイン名を解決するためにのみ使用されます。カンマで区切って指定します。" - }, - "directNameserver": { - "label": "直接接続の名前解決サーバー", - "description": "直接接続の出口名前解決サーバー。systemキーワードをサポートします。カンマで区切って指定します。" - }, - "fakeIpFilter": { - "label": "Fake IPフィルター", - "description": "Fake IP解決をスキップするドメイン名。カンマで区切って指定します。" - }, - "nameserverPolicy": { - "label": "名前解決サーバーのポリシー", - "description": "特定のドメインのDNSサーバー。複数のサーバーはセミコロンで区切って指定します。形式: domain=server1;server2" - }, - "geoipFiltering": { - "label": "GeoIPフィルタリング", - "description": "フォールバックのGeoIPフィルタリングを有効にする" - }, - "geoipCode": "GeoIP国コード", - "fallbackIpCidr": { - "label": "フォールバックIP CIDR", - "description": "フォールバックサーバーを使用しないIP CIDR。カンマで区切って指定します。" - }, - "fallbackDomain": { - "label": "フォールバックドメイン", - "description": "フォールバックサーバーを使用するドメイン名。カンマで区切って指定します。" - }, - "hosts": { - "label": "Hosts", - "description": "カスタムのドメイン名からIPまたはドメイン名へのマッピング。カンマで区切って指定します。" - } - }, - "messages": { - "saved": "DNS設定が保存されました。", - "configError": "DNS configuration error:" - }, - "errors": { - "invalid": "Invalid configuration" - } - }, - "webUI": { - "actions": { - "openUrl": "URLを開く" - }, - "title": "Webインターフェース", - "messages": { - "supportedPlaceholders": "%host, %port, %secretをサポートします。", - "placeholderInstruction": "%host, %port, %secretを使用してホスト、ポート、アクセスキーを表します。" - } - }, - "hotkey": { - "toggles": { - "enableGlobal": "グローバルホットキーを有効にする" - }, - "title": "ホットキー設定", - "functions": { - "rule": "ルールモード", - "global": "グローバルモード", - "openOrCloseDashboard": "ダッシュボードを開く/閉じる", - "toggleSystemProxy": "システムプロキシを開く/閉じる", - "toggleTunMode": "TUNモードを開く/閉じる", - "entryLightweightMode": "軽量モードに入る", - "direct": "直接接続モード" - } - }, - "password": { - "prompts": { - "enterRoot": "ルートパスワードを入力してください。" - } - }, - "networkInterface": { - "title": "ネットワークインターフェース", - "fields": { - "ipAddress": "IPアドレス", - "macAddress": "MACアドレス" - } - } - }, - "feedback": { - "notifications": { - "clash": { - "restartSuccess": "Clashコアが再起動されました。", - "versionUpdated": "コアバージョンが更新されました。", - "changeSuccess": "コアの切り替えに成功しました。", - "changeFailed": "コアの切り替えに失敗しました。", - "geoDataUpdated": "GeoDataが更新されました。" - }, - "clashService": { - "installSuccess": "サービスのインストールに成功しました。", - "uninstallSuccess": "サービスのアンインストールに成功しました。" - }, - "updater": { - "withClashProxySuccess": "Clashプロキシを使用して更新に成功しました。", - "withClashProxyFailed": "Clashプロキシを使用しても更新に失敗しました。" - } - } - }, - "statuses": { - "clash": { - "stopping": "コアを停止中...", - "restarting": "コアを再起動中..." - }, - "clashService": { - "installing": "サービスをインストール中...", - "uninstalling": "サービスをアンインストール中..." - } - } - }, - "layout": { - "components": { - "navigation": { - "tabs": { - "home": "ホーム", - "proxies": "プロキシ", - "profiles": "プロファイル", - "connections": "接続", - "rules": "ルール", - "logs": "ログ", - "unlock": "テスト", - "settings": "設定" - }, - "menu": { - "reorderMode": "Menu reorder mode", - "unlock": "Unlock menu order", - "lock": "Lock menu order" - } - } - } - } -} diff --git a/src/locales/jp/connections.json b/src/locales/jp/connections.json new file mode 100644 index 00000000..806f4bb1 --- /dev/null +++ b/src/locales/jp/connections.json @@ -0,0 +1,28 @@ +{ + "page": { + "title": "接続" + }, + "components": { + "fields": { + "host": "ホスト", + "dlSpeed": "ダウンロード速度", + "ulSpeed": "アップロード速度", + "chains": "チェーン", + "rule": "ルール", + "process": "プロセス", + "time": "接続時間", + "source": "送信元アドレス", + "destination": "宛先アドレス", + "destinationPort": "宛先ポート", + "type": "タイプ" + }, + "order": { + "default": "Default", + "uploadSpeed": "アップロード速度", + "downloadSpeed": "ダウンロード速度" + }, + "actions": { + "closeConnection": "接続を閉じる" + } + } +} diff --git a/src/locales/jp/home.json b/src/locales/jp/home.json new file mode 100644 index 00000000..e8d224c2 --- /dev/null +++ b/src/locales/jp/home.json @@ -0,0 +1,138 @@ +{ + "page": { + "tooltips": { + "lightweightMode": "軽量モード", + "manual": "マニュアル", + "settings": "ホーム設定" + }, + "cards": { + "trafficStats": "トラフィック統計", + "networkSettings": "ネットワーク設定", + "proxyMode": "プロキシモード" + }, + "settings": { + "cards": { + "profile": "プロファイルカード", + "currentProxy": "現在のプロキシカード", + "network": "ネットワーク設定カード", + "proxyMode": "プロキシモードカード", + "traffic": "トラフィック統計カード", + "tests": "ウェブサイトテストカード", + "ip": "IP情報カード", + "clashInfo": "Clash情報カード", + "systemInfo": "システム情報カード" + }, + "title": "ホーム設定" + }, + "title": "ホーム" + }, + "components": { + "proxyTun": { + "status": { + "systemProxyEnabled": "システムプロキシが有効になっています。アプリケーションはプロキシを通じてネットワークにアクセスします。", + "systemProxyDisabled": "システムプロキシが無効になっています。ほとんどのユーザーはこのオプションをオンにすることをお勧めします。", + "tunModeServiceRequired": "TUNモードはサービスモードが必要です。まずサービスをインストールしてください。", + "tunModeEnabled": "TUNモードが有効になっています。アプリケーションは仮想ネットワークカードを通じてネットワークにアクセスします。", + "tunModeDisabled": "TUNモードが無効になっています。特殊なアプリケーションに適しています。" + }, + "tooltips": { + "systemProxy": "オペレーティングシステムのプロキシ設定を変更します。有効にできない場合は、手動でオペレーティングシステムのプロキシ設定を変更してください。", + "tunMode": "TUNモードは全てのアプリケーションのトラフィックを制御できます。システムプロキシ設定に従わない特殊なアプリケーションに適しています。" + } + }, + "clashInfo": { + "title": "Clash情報", + "fields": { + "coreVersion": "コアバージョン", + "systemProxyAddress": "システムプロキシアドレス", + "mixedPort": "Mixed Port", + "uptime": "稼働時間", + "rulesCount": "ルール数" + } + }, + "systemInfo": { + "title": "システム情報", + "fields": { + "osInfo": "オペレーティングシステム情報", + "autoLaunch": "起動時に自動起動", + "runningMode": "実行モード", + "lastCheckUpdate": "最後の更新チェック", + "vergeVersion": "Vergeバージョン" + }, + "actions": { + "settings": "設定" + }, + "tooltips": { + "autoLaunchAdmin": "管理者モードでは起動時の自動起動がサポートされない場合があります。" + }, + "badges": { + "adminMode": "管理者モード", + "serviceMode": "サービスモード", + "sidecarMode": "ユーザーモード", + "adminServiceMode": "Admin + Service Mode" + } + }, + "ipInfo": { + "title": "IP情報", + "labels": { + "ip": "IP", + "asn": "自治システム番号", + "isp": "インターネットサービスプロバイダー", + "org": "組織", + "location": "位置", + "timezone": "タイムゾーン", + "autoRefresh": "自動更新", + "unknown": "不明" + }, + "errors": { + "load": "IP情報の取得に失敗しました" + } + }, + "currentProxy": { + "title": "現在のノード", + "actions": { + "refreshDelay": "遅延テスト" + }, + "labels": { + "globalMode": "グローバルモード", + "directMode": "直接接続モード", + "group": "プロキシグループ", + "proxy": "ノード", + "noActiveNode": "アクティブなプロキシノードがありません。" + } + }, + "tests": { + "title": "ウェブサイトテスト" + }, + "traffic": { + "metrics": { + "uploadSpeed": "アップロード速度", + "downloadSpeed": "ダウンロード速度", + "activeConnections": "アクティブな接続", + "memoryUsage": "コアメモリ使用量" + }, + "legends": { + "upload": "アップロード", + "download": "ダウンロード" + }, + "patterns": { + "minutes": "{{time}} Minutes" + } + }, + "clashMode": { + "errors": { + "communication": "Core communication error" + }, + "labels": { + "rule": "ルールモード", + "global": "グローバルモード", + "direct": "直接接続モード" + }, + "descriptions": { + "rule": "Automatically choose proxies according to the rule set.", + "global": "Forward all network requests through the selected proxy.", + "direct": "Bypass the proxy and connect to the internet directly." + } + } + } +} diff --git a/src/locales/jp/index.ts b/src/locales/jp/index.ts new file mode 100644 index 00000000..2977171d --- /dev/null +++ b/src/locales/jp/index.ts @@ -0,0 +1,27 @@ +import shared from "./shared.json"; +import profiles from "./profiles.json"; +import proxies from "./proxies.json"; +import connections from "./connections.json"; +import tests from "./tests.json"; +import logs from "./logs.json"; +import rules from "./rules.json"; +import home from "./home.json"; +import unlock from "./unlock.json"; +import settings from "./settings.json"; +import layout from "./layout.json"; + +const resources = { + "shared": shared, + "profiles": profiles, + "proxies": proxies, + "connections": connections, + "tests": tests, + "logs": logs, + "rules": rules, + "home": home, + "unlock": unlock, + "settings": settings, + "layout": layout, +}; + +export default resources; diff --git a/src/locales/jp/layout.json b/src/locales/jp/layout.json new file mode 100644 index 00000000..8e8a8798 --- /dev/null +++ b/src/locales/jp/layout.json @@ -0,0 +1,21 @@ +{ + "components": { + "navigation": { + "tabs": { + "home": "ホーム", + "proxies": "プロキシ", + "profiles": "プロファイル", + "connections": "接続", + "rules": "ルール", + "logs": "ログ", + "unlock": "テスト", + "settings": "設定" + }, + "menu": { + "reorderMode": "Menu reorder mode", + "unlock": "Unlock menu order", + "lock": "Lock menu order" + } + } + } +} diff --git a/src/locales/jp/logs.json b/src/locales/jp/logs.json new file mode 100644 index 00000000..3ae97f23 --- /dev/null +++ b/src/locales/jp/logs.json @@ -0,0 +1,5 @@ +{ + "page": { + "title": "ログ" + } +} diff --git a/src/locales/jp/profiles.json b/src/locales/jp/profiles.json new file mode 100644 index 00000000..6d34770b --- /dev/null +++ b/src/locales/jp/profiles.json @@ -0,0 +1,182 @@ +{ + "page": { + "actions": { + "updateAll": "すべてのプロファイルを更新", + "viewRuntimeConfig": "実行時のプロファイルを表示", + "reactivate": "プロファイルを再アクティブ化", + "import": "インポート" + }, + "batch": { + "actions": { + "delete": "選択したプロファイルを削除", + "selectAll": "すべて選択", + "deselectAll": "すべての選択を解除", + "done": "完了" + }, + "summary": { + "selected": "選択済み", + "items": "アイテム" + }, + "title": "バッチ操作" + }, + "importForm": { + "placeholder": "プロファイルファイルのURL", + "actions": { + "paste": "貼り付け" + } + }, + "feedback": { + "errors": { + "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", + "onlyYaml": "YAMLファイルのみサポートされています。" + }, + "notifications": { + "importRetry": "インポートに失敗しました。Clashプロキシを使用して再試行します...", + "importFail": "Clashプロキシを使用してもインポートに失敗しました。", + "importNeedsRefresh": "Profile imported but may need manual refresh", + "importSuccess": "Profile imported successfully, please restart if not visible", + "profileSwitched": "プロファイルが切り替えられました。", + "profileReactivated": "プロファイルが再アクティブ化されました。", + "switchInterrupted": "Profile switch interrupted by new selection", + "batchDeleted": "選択したプロファイルが正常に削除されました" + }, + "notices": { + "forceRefreshCompleted": "Force refresh completed", + "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" + } + }, + "title": "プロファイル" + }, + "components": { + "card": { + "labels": { + "clickToImport": "クリックしてサブスクリプションをインポート" + } + }, + "fileInput": { + "chooseFile": "ファイルを選択" + }, + "menu": { + "home": "ホーム", + "select": "使用する", + "editInfo": "情報を編集", + "editFile": "ファイルを編集", + "editRules": "ルールを編集", + "editProxies": "ノードを編集", + "editGroups": "プロキシグループを編集", + "extendConfig": "拡張上書き設定", + "extendScript": "拡張スクリプト", + "openFile": "ファイルを開く", + "update": "更新", + "updateViaProxy": "Update via proxy" + }, + "more": { + "global": { + "merge": "Global Merge", + "script": "Global Script" + }, + "chips": { + "merge": "Merge", + "script": "Script" + } + }, + "profileItem": { + "tooltips": { + "showLast": "Click to show last update time", + "showNext": "Click to show next update" + }, + "status": { + "lastUpdateFailed": "前回の更新に失敗しました。", + "nextUp": "次回の更新", + "noSchedule": "予定がありません。", + "unknown": "不明", + "autoUpdateDisabled": "自動更新が無効になっています。" + } + } + }, + "modals": { + "profileForm": { + "title": { + "create": "新規プロファイルを作成", + "edit": "プロファイルを編集" + }, + "fields": { + "type": "タイプ", + "description": "説明", + "subscriptionUrl": "サブスクリプションURL", + "httpTimeout": "HTTP Request Timeout", + "updateInterval": "更新間隔", + "useSystemProxy": "システムプロキシを使用して更新", + "useClashProxy": "クラッシュプロキシを使用して更新", + "acceptInvalidCerts": "Allows Invalid Certificates (Danger)", + "allowAutoUpdate": "Allow Auto Update" + }, + "feedback": { + "notifications": { + "creationRetry": "プロファイルの作成に失敗しました。Clashプロキシを使用して再試行します...", + "creationSuccess": "Clashプロキシを使用してプロファイルの作成に成功しました。" + } + } + }, + "proxiesEditor": { + "title": "ノードを編集", + "placeholders": { + "multiUri": "複数のURIは改行で区切ってください(Base64エンコードに対応)" + }, + "actions": { + "prepend": "前置プロキシノードを追加", + "append": "後置プロキシノードを追加" + } + }, + "groupsEditor": { + "title": "プロキシグループを編集", + "errors": { + "nameRequired": "プロキシグループ名は必須です", + "nameExists": "プロキシグループ名はすでに存在します" + }, + "fields": { + "type": "プロキシグループタイプ", + "name": "プロキシグループ名", + "icon": "プロキシグループアイコン", + "proxies": "プロキシを導入", + "provider": "プロキシプロバイダーを導入", + "healthCheckUrl": "ヘルスチェックURL", + "expectedStatus": "期待するステータスコード", + "interval": "チェック間隔", + "maxFailedTimes": "最大失敗回数", + "interfaceName": "出力インターフェース", + "routingMark": "ルーティングマーク", + "filter": "ノードをフィルタリング", + "excludeFilter": "除外ノード", + "excludeType": "除外ノードタイプ", + "includeAll": "すべての出力プロキシ、プロキシプロバイダーを導入", + "includeAllProxies": "すべての出力プロキシを導入", + "includeAllProviders": "すべてのプロキシプロバイダーを導入" + }, + "toggles": { + "lazy": "遅延モード", + "disableUdp": "UDPを無効にする", + "hidden": "プロキシグループを隠す" + }, + "actions": { + "prepend": "前置プロキシグループを追加", + "append": "後置プロキシグループを追加" + } + }, + "editor": { + "actions": { + "format": "文書を整形する" + }, + "messages": { + "readOnly": "読み取り専用モードでは編集できません。" + } + }, + "confirmDelete": { + "title": "削除を確認", + "message": "この操作は元に戻せません" + }, + "logViewer": { + "title": "スクリプトコンソール出力" + } + } +} diff --git a/src/locales/jp/proxies.json b/src/locales/jp/proxies.json new file mode 100644 index 00000000..7667b694 --- /dev/null +++ b/src/locales/jp/proxies.json @@ -0,0 +1,90 @@ +{ + "page": { + "modes": { + "rule": "Rule", + "global": "Global", + "direct": "Direct" + }, + "actions": { + "toggleChain": "🔗 チェーンプロキシ", + "connect": "Connect", + "disconnect": "Disconnect", + "connecting": "Connecting...", + "clearChainConfig": "Delete Chain Config" + }, + "provider": { + "title": "プロキシプロバイダー", + "actions": { + "updateAll": "すべて更新", + "update": "更新" + } + }, + "rules": { + "title": "Proxy Rules", + "select": "Select Rules" + }, + "labels": { + "proxyCount": "ノード数", + "delayCheckReset": "遅延テストを実行して固定を解除する" + }, + "tooltips": { + "locate": "現在のノード", + "delayCheck": "遅延テスト", + "sortDefault": "デフォルトでソート", + "sortDelay": "遅延でソート", + "sortName": "名前でソート", + "delayCheckUrl": "遅延テストURL", + "showBasic": "ノードの詳細を隠す", + "showDetail": "ノードの詳細を表示する", + "filter": "ノードをフィルタリング" + }, + "placeholders": { + "delayCheckUrl": "遅延テストURL" + }, + "chain": { + "header": "Chain Proxy Config", + "empty": "No proxy chain configured", + "instruction": "Click nodes in order to add to proxy chain", + "minimumNodes": "Chain proxy requires at least 2 nodes", + "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", + "connectFailed": "Failed to connect to proxy chain", + "disconnectFailed": "Failed to disconnect from proxy chain", + "duplicateNode": "Proxy node already exists in chain" + }, + "messages": { + "directMode": "直接接続モード" + }, + "title": { + "default": "プロキシグループ", + "chainMode": "Proxy Chain Mode" + } + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "components": { + "enums": { + "strategies": { + "select": "手動でプロキシを選択", + "url-test": "URLテストによる遅延でプロキシを選択", + "fallback": "利用不可の場合は別のプロキシに切り替える", + "load-balance": "負荷分散によりプロキシを割り当てる", + "relay": "定義されたプロキシチェーンに沿って転送する" + }, + "policies": { + "DIRECT": "直接接続", + "REJECT": "リクエストを拒否", + "REJECT-DROP": "リクエストを破棄", + "PASS": "このルールをスキップ" + } + } + } +} diff --git a/src/locales/jp/rules.json b/src/locales/jp/rules.json new file mode 100644 index 00000000..26411f1b --- /dev/null +++ b/src/locales/jp/rules.json @@ -0,0 +1,82 @@ +{ + "page": { + "provider": { + "trigger": "ルールプロバイダー", + "dialogTitle": "ルールプロバイダー", + "actions": { + "updateAll": "すべて更新", + "update": "更新" + } + }, + "title": "ルール" + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "modals": { + "editor": { + "form": { + "labels": { + "type": "ルールタイプ", + "content": "ルール内容", + "proxyPolicy": "プロキシポリシー" + }, + "toggles": { + "noResolve": "DNS解決をスキップ" + }, + "actions": { + "prependRule": "前置ルールを追加", + "appendRule": "後置ルールを追加" + }, + "validation": { + "conditionRequired": "ルール条件が必要です", + "invalidRule": "無効なルール" + } + }, + "ruleTypes": { + "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": "IPアドレス範囲を一致させる", + "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ユーザーIDを一致させる", + "IN-TYPE": "入力タイプを一致させる", + "IN-USER": "入力ユーザー名を一致させる", + "IN-NAME": "入力名を一致させる", + "SUB-RULE": "サブルール", + "RULE-SET": "ルールセットを一致させる", + "AND": "論理積", + "OR": "論理和", + "NOT": "論理否定", + "MATCH": "すべてのリクエストを一致させる" + }, + "title": "ルールを編集" + } + } +} diff --git a/src/locales/jp/settings.json b/src/locales/jp/settings.json new file mode 100644 index 00000000..c552f907 --- /dev/null +++ b/src/locales/jp/settings.json @@ -0,0 +1,571 @@ +{ + "page": { + "actions": { + "manual": "マニュアル", + "telegram": "Telegramチャンネル", + "github": "GitHubリポジトリ" + }, + "title": "設定" + }, + "sections": { + "system": { + "title": "システム設定", + "toggles": { + "tunMode": "仮想ネットワークカードモード", + "systemProxy": "システムプロキシ" + }, + "tooltips": { + "autoLaunchAdmin": "管理者モードでは起動時の自動起動がサポートされない場合があります。", + "silentStart": "アプリケーションを起動すると、バックグラウンドモードで実行され、アプリケーションパネルは表示されません。" + }, + "fields": { + "autoLaunch": "自動起動", + "silentStart": "サイレント起動" + }, + "notifications": { + "tunMode": { + "autoDisabled": "TUN Mode automatically disabled due to service unavailable", + "autoDisableFailed": "Failed to disable TUN Mode automatically" + } + } + }, + "proxyControl": { + "tooltips": { + "systemProxy": "オペレーティングシステムのプロキシ設定を変更します。有効にできない場合は、手動でオペレーティングシステムのプロキシ設定を変更してください。", + "tunMode": "TUN(仮想ネットワークカード)モードはシステムのすべてのトラフィックを制御します。有効にすると、システムプロキシを開く必要はありません。", + "tunUnavailable": "TUNモードはサービスモードまたは管理者モードが必要です" + }, + "actions": { + "installService": "サービスをインストール", + "uninstallService": "サービスのアンインストール" + }, + "fields": { + "systemProxy": "システムプロキシ", + "tunMode": "仮想ネットワークカードモード" + } + }, + "externalController": { + "title": "外部コントローラーの監視アドレス", + "fields": { + "enable": "外部コントローラーを有効化", + "address": "外部コントローラーの監視アドレス", + "secret": "APIアクセスキー" + }, + "placeholders": { + "address": "必須", + "secret": "推奨設定" + }, + "tooltips": { + "copy": "クリップボードにコピー" + }, + "messages": { + "addressRequired": "コントローラーのアドレスは空にできません", + "secretRequired": "シークレットを空にすることはできません", + "copyFailed": "コピーに失敗しました", + "controllerCopied": "API ポートがクリップボードにコピーされました", + "secretCopied": "API キーがクリップボードにコピーされました" + } + }, + "externalCors": { + "title": "外部 CORS 設定", + "fields": { + "allowPrivateNetwork": "プライベートネットワークへのアクセスを許可", + "allowedOrigins": "許可されたオリジン" + }, + "placeholders": { + "origin": "有効なURLを入力してください" + }, + "actions": { + "add": "追加" + }, + "messages": { + "alwaysIncluded": "常に含まれるオリジン: {{urls}}" + }, + "tooltips": { + "open": "外部 CORS 設定" + } + }, + "appearance": { + "light": "Light", + "dark": "Dark", + "system": "System" + }, + "clash": { + "title": "Clash設定", + "form": { + "fields": { + "allowLan": "LAN接続を許可", + "dnsOverwrite": "DNS上書き", + "ipv6": "IPv6", + "unifiedDelay": "統一遅延", + "logLevel": "ログレベル", + "portConfig": "ポート設定", + "external": "外部制御", + "webUI": "Webインターフェース", + "clashCore": "Clashコア", + "openUwpTool": "UWPツールを開く", + "updateGeoData": "GeoDataを更新" + }, + "tooltips": { + "networkInterface": "ネットワークインターフェース", + "unifiedDelay": "統一遅延を有効にすると、2回の遅延テストが行われ、接続ハンドシェイクなどによる異なるタイプのノードの遅延差を解消します。", + "logLevel": "ログディレクトリのServiceフォルダ内のコアログファイルにのみ適用されます。", + "openUwpTool": "Windows 8以降では、UWPアプリケーション(Microsoft Storeなど)がローカルホストのネットワークサービスに直接アクセスすることが制限されています。このツールを使用すると、この制限を回避できます。" + }, + "options": { + "logLevel": { + "debug": "Debug", + "info": "Info", + "warning": "Warn", + "error": "Error", + "silent": "Silent" + } + } + } + } + }, + "components": { + "verge": { + "basic": { + "title": "Verge基本設定", + "actions": { + "browse": "参照" + }, + "trayOptions": { + "showMainWindow": "メインウィンドウを表示", + "showTrayMenu": "トレイメニューを表示", + "disable": "無効にする" + }, + "fields": { + "language": "言語設定", + "themeMode": "テーマモード", + "trayClickEvent": "トレイアイコンクリックイベント", + "copyEnvType": "環境変数タイプをコピー", + "startPage": "起動ページ", + "startupScript": "起動スクリプト", + "themeSetting": "テーマ設定", + "layoutSetting": "レイアウト設定", + "misc": "その他の設定", + "hotkeySetting": "ホットキー設定" + } + }, + "advanced": { + "title": "Verge詳細設定", + "tooltips": { + "backupInfo": "WebDAVを使用した設定ファイルのバックアップをサポートします。", + "openConfDir": "アプリケーションが正常に動作しない場合は、このフォルダ内のすべてのファイルを!バックアップ!して削除し、アプリケーションを再起動してください。", + "liteMode": "GUIを閉じて、コアのみを実行します。" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "現在は最新バージョンです。", + "versionCopied": "Version copied to clipboard" + }, + "fields": { + "backupSetting": "バックアップ設定", + "runtimeConfig": "現在の設定", + "openConfDir": "設定ディレクトリを開く", + "openCoreDir": "コアディレクトリを開く", + "openLogsDir": "ログディレクトリを開く", + "checkUpdates": "更新を確認", + "openDevTools": "開発者ツールを開く", + "liteModeSettings": "軽量モード設定", + "exit": "終了", + "exportDiagnostics": "診断情報をエクスポート", + "vergeVersion": "Vergeバージョン" + } + }, + "theme": { + "title": "テーマ設定", + "fields": { + "primaryColor": "主要色", + "secondaryColor": "次要色", + "primaryText": "テキスト主要色", + "secondaryText": "テキスト次要色", + "infoColor": "情報色", + "warningColor": "警告色", + "errorColor": "エラー色", + "successColor": "成功色", + "fontFamily": "フォントファミリー", + "cssInjection": "CSSインジェクション" + }, + "actions": { + "editCss": "Edit CSS" + }, + "dialogs": { + "editCssTitle": "Edit CSS" + } + }, + "layout": { + "title": "レイアウト設定", + "fields": { + "preferSystemTitlebar": "Prefer System Titlebar", + "trafficGraph": "トラフィックグラフ", + "memoryUsage": "コアメモリ使用量", + "proxyGroupIcon": "プロキシグループアイコン", + "hoverNavigator": "Hover Jump Navigator", + "hoverNavigatorDelay": "Hover Jump Navigator Delay", + "navIcon": "ナビゲーションバーアイコン", + "trayIcon": "トレイアイコン", + "showProxyGroupsInline": "Show Proxy Groups Inline", + "commonTrayIcon": "通常のトレイアイコン", + "systemProxyTrayIcon": "システムプロキシトレイアイコン", + "tunTrayIcon": "TUNモードトレイアイコン", + "enableTrayIcon": "トレイアイコンを有効にする", + "enableTraySpeed": "トレイの速度表示を有効にする" + }, + "tooltips": { + "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", + "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" + }, + "options": { + "icon": { + "monochrome": "モノクロアイコン", + "colorful": "カラーアイコン", + "disable": "無効にする" + } + } + } + } + }, + "modals": { + "clashPort": { + "title": "ポート設定", + "fields": { + "mixed": "混合プロキシポート", + "socks": "SOCKSプロキシポート", + "http": "HTTP(S)プロキシポート", + "redir": "Redir透明プロキシポート", + "tproxy": "TPROXY透明プロキシポート" + }, + "actions": { + "random": "ランダムポート" + }, + "messages": { + "saved": "Port settings saved", + "saveFailed": "Failed to save port settings" + } + }, + "clashCore": { + "variants": { + "release": "正式版", + "alpha": "アルファ版" + } + }, + "liteMode": { + "title": "軽量モード設定", + "actions": { + "enterNow": "今すぐ軽量モードに入る" + }, + "toggles": { + "autoEnter": "自動的に軽量モードに入る" + }, + "tooltips": { + "autoEnter": "有効にすると、ウィンドウを閉じてから一定時間後に自動的に軽量モードが有効になります。" + }, + "fields": { + "delay": "自動的に軽量モードに入るまでの遅延時間" + }, + "messages": { + "autoEnterHint": "ウィンドウを閉じると、{{n}}分後に自動的に軽量モードが有効になります。" + } + }, + "backup": { + "title": "バックアップ設定", + "tabs": { + "local": "Local backup", + "webdav": "WebDAV backup" + }, + "actions": { + "selectTarget": "Select backup target", + "backup": "バックアップ", + "export": "Export", + "exportBackup": "Export Backup", + "deleteBackup": "バックアップを削除", + "restore": "復元", + "restoreBackup": "バックアップを復元" + }, + "fields": { + "webdavUrl": "WebDAVサーバーのURL http(s)://", + "username": "ユーザー名", + "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." + }, + "messages": { + "webdavUrlRequired": "WebDAVサーバーのURLは必須です。", + "invalidWebdavUrl": "無効なWebDAVサーバーのURL形式", + "usernameRequired": "ユーザー名は必須です。", + "passwordRequired": "パスワードは必須です。", + "webdavConfigSaved": "WebDAV設定が保存されました。", + "webdavConfigSaveFailed": "WebDAV設定の保存に失敗しました: {{error}}", + "backupCreated": "バックアップが作成されました。", + "backupFailed": "バックアップに失敗しました: {{error}}", + "localBackupCreated": "Local backup created successfully", + "localBackupFailed": "Local backup failed", + "restoreSuccess": "復元に成功しました。アプリケーションは1秒後に再起動します。", + "localBackupExported": "Local backup exported successfully", + "localBackupExportFailed": "Failed to export local backup", + "confirmDelete": "Confirm to delete this backup file?", + "confirmRestore": "Confirm to restore this backup file?" + }, + "table": { + "filename": "ファイル名", + "backupTime": "バックアップ時間", + "actions": "操作", + "noBackups": "バックアップがありません。", + "rowsPerPage": "Rows per page" + } + }, + "misc": { + "title": "その他の設定", + "fields": { + "appLogLevel": "アプリケーションログレベル", + "appLogMaxSize": "App Log Max Size", + "appLogMaxCount": "App Log Max Count", + "autoCloseConnections": "接続を自動的に閉じる", + "autoCheckUpdate": "自動更新チェック", + "enableBuiltinEnhanced": "組み込み拡張機能を有効にする", + "proxyLayoutColumns": "プロキシページのレイアウト列数", + "autoLogClean": "ログを自動的にクリーンアップ", + "autoDelayDetection": "自動遅延検出", + "defaultLatencyTest": "デフォルトの遅延テストURL", + "defaultLatencyTimeout": "テストタイムアウト時間" + }, + "tooltips": { + "autoCloseConnections": "プロキシグループで選択されたノードまたはプロキシモードが変更されたときに、既存の接続を閉じます。", + "enableBuiltinEnhanced": "設定ファイルの互換性処理", + "autoDelayDetection": "バックグラウンドで現在のノードのレイテンシーを定期的にテストします", + "defaultLatencyTest": "HTTPクライアントリクエストテストにのみ使用され、設定ファイルには影響しません。" + }, + "options": { + "proxyLayoutColumns": { + "auto": "自動列数" + }, + "autoLogClean": { + "never": "クリーンアップしない", + "retainDays": "{{n}}日間保持" + } + } + }, + "update": { + "title": "New Version v{{version}}", + "actions": { + "goToRelease": "リリースページに移動", + "update": "更新" + }, + "messages": { + "portableError": "ポータブル版ではアプリケーション内での更新はサポートされていません。手動でダウンロードして置き換えてください。", + "breakChangeError": "このバージョンは重大な更新であり、アプリケーション内での更新はサポートされていません。アンインストールしてから手動でダウンロードしてインストールしてください。" + } + }, + "sysproxy": { + "title": "システムプロキシ設定", + "fieldsets": { + "currentStatus": "現在のシステムプロキシ" + }, + "fields": { + "enableStatus": "有効状態:", + "serverAddr": "サーバーアドレス:", + "pacUrl": "PACアドレス:", + "proxyHost": "プロキシホスト", + "usePacMode": "PACモードを使用", + "proxyGuard": "システムプロキシガード", + "guardDuration": "プロキシガード間隔", + "alwaysUseDefaultBypass": "常にデフォルトのバイパスを使用", + "proxyBypass": "プロキシバイパス設定:", + "bypass": "現在のバイパス:", + "pacScriptContent": "PACスクリプト内容" + }, + "tooltips": { + "proxyGuard": "他のソフトウェアがオペレーティングシステムのプロキシ設定を変更するのを防ぐために有効にします。" + }, + "messages": { + "durationTooShort": "プロキシデーモンの間隔は1秒以上に設定する必要があります。", + "invalidBypass": "無効なバイパス形式", + "invalidProxyHost": "プロキシホストの形式が無効です" + }, + "actions": { + "editPac": "編集 PAC" + } + }, + "tun": { + "title": "仮想ネットワークカードモード", + "fields": { + "stack": "TUNモードスタック", + "device": "Device Name", + "autoRoute": "グローバルルートを自動設定", + "strictRoute": "厳格なルート", + "autoDetectInterface": "トラフィックの出口インターフェースを自動選択", + "dnsHijack": "DNSハイジャック", + "mtu": "最大転送単位" + }, + "tooltips": { + "dnsHijack": "Please use , to separate multiple DNS servers" + }, + "messages": { + "applied": "設定が適用されました。" + } + }, + "dns": { + "dialog": { + "title": "DNS上書き", + "warning": "ここの設定がわからない場合は、変更しないでください。DNS上書きを有効にしたままにしてください。" + }, + "sections": { + "general": "DNS設定", + "fallbackFilter": "フォールバックフィルター設定", + "hosts": "Hosts設定" + }, + "fields": { + "enable": "DNSを有効にする", + "listen": "DNS監視アドレス", + "enhancedMode": "拡張モード", + "fakeIpRange": "Fake IP範囲", + "fakeIpFilterMode": "Fake IPフィルターモード", + "ipv6": { + "label": "IPv6", + "description": "IPv6 DNS解決を有効にする" + }, + "preferH3": { + "label": "HTTP/3を優先する", + "description": "DNS DOHでHTTP/3プロトコルを使用する" + }, + "respectRules": { + "label": "ルートルールに従う", + "description": "DNS接続はルートルールに従います。" + }, + "useHosts": { + "label": "Hostsファイルを使用する", + "description": "Hostsファイルを使用してホスト名を解決する" + }, + "useSystemHosts": { + "label": "システムのHostsファイルを使用する", + "description": "システムのHostsファイルを使用してホスト名を解決する" + }, + "directPolicy": { + "label": "直接接続の名前解決サーバーはポリシーに従う", + "description": "名前解決サーバーのポリシーに従うかどうか" + }, + "defaultNameserver": { + "label": "デフォルトの名前解決サーバー", + "description": "名前解決サーバーを解決するために使用されるデフォルトのDNSサーバー" + }, + "nameserver": { + "label": "名前解決サーバー", + "description": "DNSサーバーのリスト。カンマで区切って指定します。" + }, + "fallback": { + "label": "フォールバックサーバー", + "description": "フォールバックDNSサーバーのリスト。カンマで区切って指定します。" + }, + "proxy": { + "label": "プロキシサーバーの名前解決サーバー", + "description": "プロキシノードの名前解決サーバー。プロキシノードのドメイン名を解決するためにのみ使用されます。カンマで区切って指定します。" + }, + "directNameserver": { + "label": "直接接続の名前解決サーバー", + "description": "直接接続の出口名前解決サーバー。systemキーワードをサポートします。カンマで区切って指定します。" + }, + "fakeIpFilter": { + "label": "Fake IPフィルター", + "description": "Fake IP解決をスキップするドメイン名。カンマで区切って指定します。" + }, + "nameserverPolicy": { + "label": "名前解決サーバーのポリシー", + "description": "特定のドメインのDNSサーバー。複数のサーバーはセミコロンで区切って指定します。形式: domain=server1;server2" + }, + "geoipFiltering": { + "label": "GeoIPフィルタリング", + "description": "フォールバックのGeoIPフィルタリングを有効にする" + }, + "geoipCode": "GeoIP国コード", + "fallbackIpCidr": { + "label": "フォールバックIP CIDR", + "description": "フォールバックサーバーを使用しないIP CIDR。カンマで区切って指定します。" + }, + "fallbackDomain": { + "label": "フォールバックドメイン", + "description": "フォールバックサーバーを使用するドメイン名。カンマで区切って指定します。" + }, + "hosts": { + "label": "Hosts", + "description": "カスタムのドメイン名からIPまたはドメイン名へのマッピング。カンマで区切って指定します。" + } + }, + "messages": { + "saved": "DNS設定が保存されました。", + "configError": "DNS configuration error:" + }, + "errors": { + "invalid": "Invalid configuration" + } + }, + "webUI": { + "actions": { + "openUrl": "URLを開く" + }, + "title": "Webインターフェース", + "messages": { + "supportedPlaceholders": "%host, %port, %secretをサポートします。", + "placeholderInstruction": "%host, %port, %secretを使用してホスト、ポート、アクセスキーを表します。" + } + }, + "hotkey": { + "toggles": { + "enableGlobal": "グローバルホットキーを有効にする" + }, + "title": "ホットキー設定", + "functions": { + "rule": "ルールモード", + "global": "グローバルモード", + "openOrCloseDashboard": "ダッシュボードを開く/閉じる", + "toggleSystemProxy": "システムプロキシを開く/閉じる", + "toggleTunMode": "TUNモードを開く/閉じる", + "entryLightweightMode": "軽量モードに入る", + "direct": "直接接続モード" + } + }, + "password": { + "prompts": { + "enterRoot": "ルートパスワードを入力してください。" + } + }, + "networkInterface": { + "title": "ネットワークインターフェース", + "fields": { + "ipAddress": "IPアドレス", + "macAddress": "MACアドレス" + } + } + }, + "feedback": { + "notifications": { + "clash": { + "restartSuccess": "Clashコアが再起動されました。", + "versionUpdated": "コアバージョンが更新されました。", + "changeSuccess": "コアの切り替えに成功しました。", + "changeFailed": "コアの切り替えに失敗しました。", + "geoDataUpdated": "GeoDataが更新されました。" + }, + "clashService": { + "installSuccess": "サービスのインストールに成功しました。", + "uninstallSuccess": "サービスのアンインストールに成功しました。" + }, + "updater": { + "withClashProxySuccess": "Clashプロキシを使用して更新に成功しました。", + "withClashProxyFailed": "Clashプロキシを使用しても更新に失敗しました。" + } + } + }, + "statuses": { + "clash": { + "stopping": "コアを停止中...", + "restarting": "コアを再起動中..." + }, + "clashService": { + "installing": "サービスをインストール中...", + "uninstalling": "サービスをアンインストール中..." + } + } +} diff --git a/src/locales/jp/shared.json b/src/locales/jp/shared.json new file mode 100644 index 00000000..ca129cbe --- /dev/null +++ b/src/locales/jp/shared.json @@ -0,0 +1,128 @@ +{ + "actions": { + "cancel": "キャンセル", + "close": "閉じる", + "confirm": "確認", + "save": "保存", + "delete": "削除", + "edit": "編集", + "new": "新規作成", + "enable": "有効にする", + "upgrade": "コアをアップグレード", + "restart": "コアを再起動", + "resetToDefault": "デフォルト値にリセット", + "refresh": "更新", + "retry": "Retry", + "refreshPage": "Refresh Page", + "showDetails": "Show Details", + "hideDetails": "Hide Details", + "listView": "リストビュー", + "tableView": "テーブルビュー", + "pause": "一時停止", + "resume": "再開", + "closeAll": "すべて閉じる", + "clear": "クリア" + }, + "labels": { + "updateAt": "更新日時", + "timeout": "Timeout", + "icon": "アイコン", + "name": "名前", + "readOnly": "読み取り専用", + "expireTime": "有効期限", + "updateTime": "更新時間", + "usedTotal": "使用済み / 合計", + "from": "から", + "password": "パスワード", + "retryAttempts": "Retry attempts", + "downloaded": "ダウンロード量", + "uploaded": "アップロード量" + }, + "statuses": { + "enabled": "有効", + "disabled": "無効", + "saving": "Saving...", + "empty": "空っぽ" + }, + "units": { + "milliseconds": "ミリ秒", + "seconds": "秒", + "minutes": "分", + "kilobytes": "KB", + "files": "Files" + }, + "placeholders": { + "filter": "フィルタリング条件", + "matchCase": "大文字小文字を区別する", + "matchWholeWord": "完全一致", + "useRegex": "正規表現を使用する" + }, + "validation": { + "invalidRegex": "Invalid regular expression" + }, + "window": { + "maximize": "最大化", + "minimize": "最小化" + }, + "editorModes": { + "visualization": "可視化", + "advanced": "詳細設定" + }, + "feedback": { + "errors": { + "trafficStats": "Traffic Statistics Error", + "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." + }, + "notices": { + "raw": "{{message}}", + "prefixedRaw": "{{prefix}} {{message}}" + }, + "notifications": { + "importSuccess": "プロファイルのインポートに成功しました。", + "importSubscriptionSuccess": "サブスクリプションのインポートに成功しました。", + "importWithClashProxy": "Clashプロキシを使用してプロファイルのインポートに成功しました。", + "saved": "Saved successfully", + "common": { + "copySuccess": "コピー成功", + "saveSuccess": "ランダム設定を保存完了", + "saveFailed": "Failed to save configuration" + } + }, + "validation": { + "config": { + "failed": "プロファイル設定の検証に失敗しました。プロファイル設定ファイルを確認してください。変更は取り消されました。エラー詳細:", + "bootFailed": "起動時のプロファイル設定の検証に失敗しました。デフォルト設定で起動しました。プロファイル設定ファイルを確認してください。エラー詳細:", + "coreChangeFailed": "コアを切り替える際の設定検証に失敗しました。デフォルト設定で起動しました。プロファイル設定ファイルを確認してください。エラー詳細:", + "processTerminated": "検証プロセスが中断されました。" + }, + "script": { + "syntaxError": "スクリプトの構文エラーがあります。変更は取り消されました。", + "missingMain": "スクリプトにメイン関数がありません。変更は取り消されました。", + "fileNotFound": "ファイルが見つかりません。変更は取り消されました。", + "fileError": "スクリプトファイルにエラーがあります。変更は取り消されました。" + }, + "yaml": { + "syntaxError": "YAML構文エラーがあります。変更は取り消されました。", + "readError": "YAMLファイルの読み取りエラーがあります。変更は取り消されました。", + "mappingError": "YAMLマッピングエラーがあります。変更は取り消されました。", + "keyError": "YAMLキーエラーがあります。変更は取り消されました。", + "generalError": "YAMLエラーがあります。変更は取り消されました。" + }, + "merge": { + "syntaxError": "上書きファイルの構文エラーがあります。変更は取り消されました。", + "mappingError": "上書きファイルのマッピングエラーがあります。変更は取り消されました。", + "keyError": "上書きファイルのキーエラーがあります。変更は取り消されました。", + "generalError": "上書きファイルにエラーがあります。変更は取り消されました。" + } + } + }, + "filters": { + "logLevels": { + "all": "ALL", + "debug": "DEBUG", + "info": "INFO", + "warn": "WARN", + "error": "ERROR" + } + } +} diff --git a/src/locales/jp/tests.json b/src/locales/jp/tests.json new file mode 100644 index 00000000..19c76799 --- /dev/null +++ b/src/locales/jp/tests.json @@ -0,0 +1,40 @@ +{ + "page": { + "actions": { + "testAll": "すべてテスト" + }, + "title": "テスト" + }, + "components": { + "item": { + "actions": { + "test": "テスト" + } + } + }, + "modals": { + "test": { + "title": { + "create": "新規テストを作成", + "edit": "テストを編集" + }, + "fields": { + "url": "テストURL" + } + } + }, + "statuses": { + "test": { + "pending": "検査待ち", + "yes": "サポートする", + "no": "サポートしない", + "failed": "テストに失敗しました。", + "completed": "検査完了", + "disallowedIsp": "許可されていないインターネットサービスプロバイダー", + "originalsOnly": "オリジナルのみ", + "noDisney": "No (IP Banned By Disney+)", + "unsupportedRegion": "サポートされていない国/地域", + "failedNetwork": "Failed (Network Connection)" + } + } +} diff --git a/src/locales/jp/unlock.json b/src/locales/jp/unlock.json new file mode 100644 index 00000000..1df645f5 --- /dev/null +++ b/src/locales/jp/unlock.json @@ -0,0 +1,12 @@ +{ + "page": { + "actions": { + "testing": "テスト中..." + }, + "empty": "アンロックテスト項目はありません", + "messages": { + "detectionTimeout": "Detection timeout or failed" + }, + "title": "ロック解除テスト" + } +} diff --git a/src/locales/ko.json b/src/locales/ko.json deleted file mode 100644 index 24a0ebea..00000000 --- a/src/locales/ko.json +++ /dev/null @@ -1,1299 +0,0 @@ -{ - "shared": { - "actions": { - "cancel": "취소", - "close": "닫기", - "confirm": "확인", - "save": "저장", - "delete": "삭제", - "edit": "편집", - "new": "새로 만들기", - "enable": "활성화", - "upgrade": "Upgrade", - "restart": "Restart", - "resetToDefault": "Reset to Default", - "refresh": "새로고침", - "retry": "Retry", - "refreshPage": "Refresh Page", - "showDetails": "Show Details", - "hideDetails": "Hide Details", - "listView": "목록 보기", - "tableView": "테이블 보기", - "pause": "일시 정지", - "resume": "재개", - "closeAll": "모두 닫기", - "clear": "지우기" - }, - "labels": { - "updateAt": "업데이트 시간", - "timeout": "Timeout", - "icon": "아이콘", - "name": "이름", - "readOnly": "ReadOnly", - "expireTime": "만료 시간", - "updateTime": "업데이트 시간", - "usedTotal": "사용됨 / 전체", - "from": "출처", - "password": "비밀번호", - "retryAttempts": "Retry attempts", - "downloaded": "다운로드됨", - "uploaded": "업로드됨" - }, - "statuses": { - "enabled": "Enabled", - "disabled": "Disabled", - "saving": "Saving...", - "empty": "비어있음" - }, - "units": { - "milliseconds": "밀리초", - "seconds": "초", - "minutes": "분", - "kilobytes": "KB", - "files": "Files" - }, - "placeholders": { - "filter": "Filter conditions", - "matchCase": "Match Case", - "matchWholeWord": "Match Whole Word", - "useRegex": "Use Regular Expression" - }, - "validation": { - "invalidRegex": "Invalid regular expression" - }, - "window": { - "maximize": "최대화", - "minimize": "최소화" - }, - "editorModes": { - "visualization": "시각화", - "advanced": "고급" - }, - "feedback": { - "errors": { - "trafficStats": "Traffic Statistics Error", - "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." - }, - "notices": { - "raw": "{{message}}", - "prefixedRaw": "{{prefix}} {{message}}" - }, - "notifications": { - "importSuccess": "Profile Imported Successfully", - "importSubscriptionSuccess": "구독 가져오기 성공", - "importWithClashProxy": "Profile Imported with Clash proxy", - "saved": "Saved successfully", - "common": { - "copySuccess": "복사 성공", - "saveSuccess": "Configuration saved successfully", - "saveFailed": "Failed to save configuration" - } - }, - "validation": { - "config": { - "failed": "설정 검증 실패", - "bootFailed": "부팅 설정 검증 실패", - "coreChangeFailed": "코어 변경 설정 검증 실패", - "processTerminated": "설정 검증 프로세스 종료됨" - }, - "script": { - "syntaxError": "스크립트 구문 오류", - "missingMain": "스크립트 메인 없음", - "fileNotFound": "파일을 찾을 수 없음", - "fileError": "스크립트 파일 오류" - }, - "yaml": { - "syntaxError": "YAML 구문 오류", - "readError": "YAML 읽기 오류", - "mappingError": "YAML 매핑 오류", - "keyError": "YAML 키 오류", - "generalError": "YAML 오류" - }, - "merge": { - "syntaxError": "병합 파일 구문 오류", - "mappingError": "병합 파일 매핑 오류", - "keyError": "병합 파일 키 오류", - "generalError": "병합 파일 오류" - } - } - }, - "filters": { - "logLevels": { - "all": "ALL", - "debug": "DEBUG", - "info": "INFO", - "warn": "WARN", - "error": "ERROR" - } - } - }, - "profiles": { - "page": { - "actions": { - "updateAll": "모든 프로필 업데이트", - "viewRuntimeConfig": "런타임 설정 보기", - "reactivate": "프로필 재활성화", - "import": "가져오기" - }, - "batch": { - "actions": { - "delete": "Delete Selected Profiles", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "done": "Done" - }, - "summary": { - "selected": "Selected", - "items": "items" - }, - "title": "Batch Operations" - }, - "importForm": { - "placeholder": "프로필 URL", - "actions": { - "paste": "붙여넣기" - } - }, - "feedback": { - "errors": { - "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", - "onlyYaml": "Only YAML Files Supported" - }, - "notifications": { - "importRetry": "Import failed, retrying with Clash proxy...", - "importFail": "Import failed even with Clash proxy", - "importNeedsRefresh": "Profile imported but may need manual refresh", - "importSuccess": "Profile imported successfully, please restart if not visible", - "profileSwitched": "Profile Switched", - "profileReactivated": "Profile Reactivated", - "switchInterrupted": "Profile switch interrupted by new selection", - "batchDeleted": "Selected profiles deleted successfully" - }, - "notices": { - "forceRefreshCompleted": "Force refresh completed", - "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" - } - }, - "title": "프로필" - }, - "components": { - "card": { - "labels": { - "clickToImport": "Click to import subscription" - } - }, - "fileInput": { - "chooseFile": "파일 선택" - }, - "menu": { - "home": "홈", - "select": "선택", - "editInfo": "정보 편집", - "editFile": "파일 편집", - "editRules": "규칙 편집", - "editProxies": "프록시 편집", - "editGroups": "프록시 그룹 편집", - "extendConfig": "설정 확장", - "extendScript": "스크립트 확장", - "openFile": "파일 열기", - "update": "업데이트", - "updateViaProxy": "Update via proxy" - }, - "more": { - "global": { - "merge": "Global Merge", - "script": "Global Script" - }, - "chips": { - "merge": "Merge", - "script": "Script" - } - }, - "profileItem": { - "tooltips": { - "showLast": "Click to show last update time", - "showNext": "Click to show next update" - }, - "status": { - "lastUpdateFailed": "Last Update failed", - "nextUp": "Next Up", - "noSchedule": "No schedule", - "unknown": "Unknown", - "autoUpdateDisabled": "Auto update disabled" - } - } - }, - "modals": { - "profileForm": { - "title": { - "create": "프로필 생성", - "edit": "프로필 편집" - }, - "fields": { - "type": "유형", - "description": "설명", - "subscriptionUrl": "구독 URL", - "httpTimeout": "HTTP Request Timeout", - "updateInterval": "업데이트 간격", - "useSystemProxy": "시스템 프록시 사용", - "useClashProxy": "Clash 프록시 사용", - "acceptInvalidCerts": "잘못된 인증서 허용(위험)", - "allowAutoUpdate": "Allow Auto Update" - }, - "feedback": { - "notifications": { - "creationRetry": "Profile creation failed, retrying with Clash proxy...", - "creationSuccess": "Profile creation succeeded with Clash proxy" - } - } - }, - "proxiesEditor": { - "title": "프록시 편집", - "placeholders": { - "multiUri": "여러 URI의 경우 줄바꿈 사용(Base64 인코딩 지원)" - }, - "actions": { - "prepend": "프록시 앞에 추가", - "append": "프록시 뒤에 추가" - } - }, - "groupsEditor": { - "title": "프록시 그룹 편집", - "errors": { - "nameRequired": "그룹 이름 필수", - "nameExists": "그룹 이름이 이미 존재함" - }, - "fields": { - "type": "그룹 유형", - "name": "그룹 이름", - "icon": "Proxy Group Icon", - "proxies": "프록시 사용", - "provider": "제공자 사용", - "healthCheckUrl": "상태 확인 URL", - "expectedStatus": "예상 상태", - "interval": "간격", - "maxFailedTimes": "최대 실패 횟수", - "interfaceName": "인터페이스 이름", - "routingMark": "라우팅 마크", - "filter": "필터", - "excludeFilter": "제외 필터", - "excludeType": "제외 유형", - "includeAll": "모든 프록시 및 제공자 포함", - "includeAllProxies": "모든 프록시 포함", - "includeAllProviders": "모든 제공자 포함" - }, - "toggles": { - "lazy": "지연 로딩", - "disableUdp": "UDP 비활성화", - "hidden": "숨김" - }, - "actions": { - "prepend": "그룹 앞에 추가", - "append": "그룹 뒤에 추가" - } - }, - "editor": { - "actions": { - "format": "문서 포맷" - }, - "messages": { - "readOnly": "Cannot edit in read-only editor" - } - }, - "confirmDelete": { - "title": "삭제 확인", - "message": "이 작업은 되돌릴 수 없습니다" - }, - "logViewer": { - "title": "스크립트 콘솔" - } - } - }, - "proxies": { - "page": { - "modes": { - "rule": "Rule", - "global": "Global", - "direct": "Direct" - }, - "actions": { - "toggleChain": "🔗 체인 프록시", - "connect": "Connect", - "disconnect": "Disconnect", - "connecting": "Connecting...", - "clearChainConfig": "Delete Chain Config" - }, - "provider": { - "title": "프록시 제공자", - "actions": { - "updateAll": "모두 업데이트", - "update": "업데이트" - } - }, - "rules": { - "title": "Proxy Rules", - "select": "Select Rules" - }, - "labels": { - "proxyCount": "프록시 개수", - "delayCheckReset": "고정 취소를 위한 지연 확인" - }, - "tooltips": { - "locate": "로케이트", - "delayCheck": "지연 확인", - "sortDefault": "기본값으로 정렬", - "sortDelay": "지연시간으로 정렬", - "sortName": "이름으로 정렬", - "delayCheckUrl": "지연 확인 URL", - "showBasic": "프록시 기본", - "showDetail": "프록시 상세", - "filter": "필터" - }, - "placeholders": { - "delayCheckUrl": "지연 확인 URL" - }, - "chain": { - "header": "Chain Proxy Config", - "empty": "No proxy chain configured", - "instruction": "Click nodes in order to add to proxy chain", - "minimumNodes": "Chain proxy requires at least 2 nodes", - "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", - "connectFailed": "Failed to connect to proxy chain", - "disconnectFailed": "Failed to disconnect from proxy chain", - "duplicateNode": "Proxy node already exists in chain" - }, - "messages": { - "directMode": "Direct Mode" - }, - "title": { - "default": "프록시 그룹", - "chainMode": "Proxy Chain Mode" - } - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "components": { - "enums": { - "strategies": { - "select": "수동으로 프록시 선택", - "url-test": "URL 테스트 지연을 기준으로 프록시 선택", - "fallback": "오류 발생 시 다른 프록시로 전환", - "load-balance": "부하 분산에 따라 프록시 분배", - "relay": "정의된 프록시 체인을 통과" - }, - "policies": { - "DIRECT": "데이터가 직접 아웃바운드로 이동", - "REJECT": "요청 차단", - "REJECT-DROP": "요청 폐기", - "PASS": "일치할 경우 이 규칙 건너뛰기" - } - } - } - }, - "connections": { - "page": { - "title": "연결" - }, - "components": { - "fields": { - "host": "호스트", - "dlSpeed": "다운로드 속도", - "ulSpeed": "업로드 속도", - "chains": "체인", - "rule": "규칙", - "process": "프로세스", - "time": "시간", - "source": "소스", - "destination": "목적지", - "destinationPort": "목적지 포트", - "type": "유형" - }, - "order": { - "default": "Default", - "uploadSpeed": "업로드 속도", - "downloadSpeed": "다운로드 속도" - }, - "actions": { - "closeConnection": "연결 닫기" - } - } - }, - "tests": { - "page": { - "actions": { - "testAll": "모두 테스트" - }, - "title": "테스트" - }, - "components": { - "item": { - "actions": { - "test": "테스트" - } - } - }, - "modals": { - "test": { - "title": { - "create": "테스트 생성", - "edit": "테스트 편집" - }, - "fields": { - "url": "테스트 URL" - } - } - }, - "statuses": { - "test": { - "pending": "Pending", - "yes": "Yes", - "no": "No", - "failed": "실패", - "completed": "Completed", - "disallowedIsp": "Disallowed ISP", - "originalsOnly": "Originals Only", - "noDisney": "No (IP Banned By Disney+)", - "unsupportedRegion": "Unsupported Country/Region", - "failedNetwork": "Failed (Network Connection)" - } - } - }, - "logs": { - "page": { - "title": "로그" - } - }, - "rules": { - "page": { - "provider": { - "trigger": "규칙 제공자", - "dialogTitle": "규칙 제공자", - "actions": { - "updateAll": "모두 업데이트", - "update": "업데이트" - } - }, - "title": "규칙" - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "modals": { - "editor": { - "form": { - "labels": { - "type": "규칙 유형", - "content": "규칙 내용", - "proxyPolicy": "프록시 정책" - }, - "toggles": { - "noResolve": "해석 안함" - }, - "actions": { - "prependRule": "규칙 앞에 추가", - "appendRule": "규칙 뒤에 추가" - }, - "validation": { - "conditionRequired": "규칙 조건 필요", - "invalidRule": "잘못된 규칙" - } - }, - "ruleTypes": { - "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": "프로세스 이름과 일치(안드로이드 패키지 이름)", - "PROCESS-PATH": "전체 프로세스 경로와 일치", - "PROCESS-NAME-REGEX": "정규 표현식을 사용한 전체 프로세스 이름 일치(안드로이드 패키지 이름)", - "PROCESS-PATH-REGEX": "정규 표현식을 사용한 전체 프로세스 경로 일치", - "NETWORK": "전송 프로토콜과 일치(tcp/udp)", - "UID": "Linux 사용자 ID와 일치", - "IN-TYPE": "인바운드 유형과 일치", - "IN-USER": "인바운드 사용자 이름과 일치", - "IN-NAME": "인바운드 이름과 일치", - "SUB-RULE": "하위 규칙", - "RULE-SET": "규칙 세트와 일치", - "AND": "논리 AND", - "OR": "논리 OR", - "NOT": "논리 NOT", - "MATCH": "모든 요청과 일치" - }, - "title": "규칙 편집" - } - } - }, - "home": { - "page": { - "tooltips": { - "lightweightMode": "Lightweight Mode", - "manual": "Manual", - "settings": "Home Settings" - }, - "cards": { - "trafficStats": "Traffic Stats", - "networkSettings": "Network Settings", - "proxyMode": "Proxy Mode" - }, - "settings": { - "cards": { - "profile": "Profile Card", - "currentProxy": "Current Proxy Card", - "network": "Network Settings Card", - "proxyMode": "Proxy Mode Card", - "traffic": "Traffic Stats Card", - "tests": "Website Tests Card", - "ip": "IP Information Card", - "clashInfo": "Clash Info Cards", - "systemInfo": "System Info Cards" - }, - "title": "Home Settings" - }, - "title": "홈" - }, - "components": { - "proxyTun": { - "status": { - "systemProxyEnabled": "System proxy is enabled, your applications will access the network through the proxy", - "systemProxyDisabled": "System proxy is disabled, it is recommended for most users to turn on this option", - "tunModeServiceRequired": "TUN mode requires service mode, please install the service first", - "tunModeEnabled": "TUN mode is enabled, applications will access the network through the virtual network card", - "tunModeDisabled": "TUN mode is disabled, suitable for special applications" - }, - "tooltips": { - "systemProxy": "Enable to modify the operating system's proxy settings. If enabling fails, modify the operating system's proxy settings manually", - "tunMode": "TUN mode can take over all application traffic, suitable for special applications that do not follow the system proxy settings" - } - }, - "clashInfo": { - "title": "Clash Info", - "fields": { - "coreVersion": "Core Version", - "systemProxyAddress": "System Proxy Address", - "mixedPort": "Mixed Port", - "uptime": "Uptime", - "rulesCount": "Rules Count" - } - }, - "systemInfo": { - "title": "System Info", - "fields": { - "osInfo": "OS Info", - "autoLaunch": "Auto Launch", - "runningMode": "Running Mode", - "lastCheckUpdate": "Last Check Update", - "vergeVersion": "Verge Version" - }, - "actions": { - "settings": "설정" - }, - "tooltips": { - "autoLaunchAdmin": "Administrator mode may not support auto launch" - }, - "badges": { - "adminMode": "Administrator Mode", - "serviceMode": "서비스 모드", - "sidecarMode": "User Mode", - "adminServiceMode": "Admin + Service Mode" - } - }, - "ipInfo": { - "title": "IP Information", - "labels": { - "ip": "IP", - "asn": "ASN", - "isp": "ISP", - "org": "ORG", - "location": "Location", - "timezone": "Timezone", - "autoRefresh": "Auto refresh", - "unknown": "Unknown" - }, - "errors": { - "load": "IP 정보를 가져오지 못했습니다" - } - }, - "currentProxy": { - "title": "Current Node", - "actions": { - "refreshDelay": "지연 확인" - }, - "labels": { - "globalMode": "Global Mode", - "directMode": "Direct Mode", - "group": "Group", - "proxy": "Proxy", - "noActiveNode": "No active proxy node" - } - }, - "tests": { - "title": "Website Tests" - }, - "traffic": { - "metrics": { - "uploadSpeed": "업로드 속도", - "downloadSpeed": "다운로드 속도", - "activeConnections": "활성 연결", - "memoryUsage": "메모리 사용량" - }, - "legends": { - "upload": "업로드", - "download": "다운로드" - }, - "patterns": { - "minutes": "{{time}} Minutes" - } - }, - "clashMode": { - "errors": { - "communication": "Core communication error" - }, - "labels": { - "rule": "Rule Mode", - "global": "Global Mode", - "direct": "Direct Mode" - }, - "descriptions": { - "rule": "Automatically choose proxies according to the rule set.", - "global": "Forward all network requests through the selected proxy.", - "direct": "Bypass the proxy and connect to the internet directly." - } - } - } - }, - "unlock": { - "page": { - "actions": { - "testing": "테스트 중..." - }, - "empty": "No unlock test items", - "messages": { - "detectionTimeout": "Detection timeout or failed" - }, - "title": "Unlock Test" - } - }, - "settings": { - "page": { - "actions": { - "manual": "Manual", - "telegram": "Telegram Channel", - "github": "Github Repo" - }, - "title": "설정" - }, - "sections": { - "system": { - "title": "시스템 설정", - "toggles": { - "tunMode": "Tun 모드", - "systemProxy": "시스템 프록시" - }, - "tooltips": { - "autoLaunchAdmin": "Administrator mode may not support auto launch", - "silentStart": "Start the program in background mode without displaying the panel" - }, - "fields": { - "autoLaunch": "자동 실행", - "silentStart": "백그라운드 시작" - }, - "notifications": { - "tunMode": { - "autoDisabled": "TUN Mode automatically disabled due to service unavailable", - "autoDisableFailed": "Failed to disable TUN Mode automatically" - } - } - }, - "proxyControl": { - "tooltips": { - "systemProxy": "Enable to modify the operating system's proxy settings. If enabling fails, modify the operating system's proxy settings manually", - "tunMode": "Tun (Virtual NIC) mode: Captures all system traffic, when enabled, there is no need to enable system proxy.", - "tunUnavailable": "TUN requires Service Mode or Admin Mode" - }, - "actions": { - "installService": "Install Service", - "uninstallService": "Uninstall Service" - }, - "fields": { - "systemProxy": "시스템 프록시", - "tunMode": "Tun 모드" - } - }, - "externalController": { - "title": "External Controller", - "fields": { - "enable": "Enable External Controller", - "address": "External Controller", - "secret": "Core Secret" - }, - "placeholders": { - "address": "Required", - "secret": "Recommended" - }, - "tooltips": { - "copy": "Copy to clipboard" - }, - "messages": { - "addressRequired": "Controller address cannot be empty", - "secretRequired": "Secret cannot be empty", - "copyFailed": "Failed to copy", - "controllerCopied": "Controller address copied to clipboard", - "secretCopied": "Secret copied to clipboard" - } - }, - "externalCors": { - "title": "External Cors Configuration", - "fields": { - "allowPrivateNetwork": "Allow private network access", - "allowedOrigins": "Allowed Origins" - }, - "placeholders": { - "origin": "Please enter a valid url" - }, - "actions": { - "add": "Add" - }, - "messages": { - "alwaysIncluded": "Always included origins: {{urls}}" - }, - "tooltips": { - "open": "External Cors Settings" - } - }, - "appearance": { - "light": "Light", - "dark": "Dark", - "system": "System" - }, - "clash": { - "title": "Clash 설정", - "form": { - "fields": { - "allowLan": "Allow LAN", - "dnsOverwrite": "DNS Overwrite", - "ipv6": "IPv6", - "unifiedDelay": "Unified Delay", - "logLevel": "로그 레벨", - "portConfig": "Port Config", - "external": "External", - "webUI": "Web UI", - "clashCore": "Clash Core", - "openUwpTool": "Open UWP tool", - "updateGeoData": "Update GeoData" - }, - "tooltips": { - "networkInterface": "Network Interface", - "unifiedDelay": "When unified delay is turned on, two delay tests will be performed to eliminate the delay differences between different types of nodes caused by connection handshakes, etc", - "logLevel": "This parameter is valid only for kernel log files in the log directory Service folder", - "openUwpTool": "Since Windows 8, UWP apps (such as Microsoft Store) are restricted from directly accessing local host network services, and this tool can be used to bypass this restriction" - }, - "options": { - "logLevel": { - "debug": "Debug", - "info": "Info", - "warning": "Warn", - "error": "Error", - "silent": "Silent" - } - } - } - } - }, - "components": { - "verge": { - "basic": { - "title": "Verge 기본 설정", - "actions": { - "browse": "Browse" - }, - "trayOptions": { - "showMainWindow": "메인 창 표시", - "showTrayMenu": "트레이 메뉴 표시", - "disable": "비활성화" - }, - "fields": { - "language": "언어", - "themeMode": "테마 모드", - "trayClickEvent": "트레이 클릭 이벤트", - "copyEnvType": "환경 유형 복사", - "startPage": "시작 페이지", - "startupScript": "시작 스크립트", - "themeSetting": "Theme Setting", - "layoutSetting": "레이아웃 설정", - "misc": "Miscellaneous", - "hotkeySetting": "단축키 설정" - } - }, - "advanced": { - "title": "Verge Advanced Setting", - "tooltips": { - "backupInfo": "Support local or WebDAV backup of configuration files", - "openConfDir": "If the software runs abnormally, BACKUP and delete all files in this folder then restart the software", - "liteMode": "Close the GUI and keep only the kernel running" - }, - "actions": { - "copyVersion": "Copy Version" - }, - "notifications": { - "latestVersion": "Currently on the Latest Version", - "versionCopied": "Version copied to clipboard" - }, - "fields": { - "backupSetting": "Backup Setting", - "runtimeConfig": "Runtime Config", - "openConfDir": "Open Conf Dir", - "openCoreDir": "Open Core Dir", - "openLogsDir": "Open Logs Dir", - "checkUpdates": "Check for Updates", - "openDevTools": "Dev Tools", - "liteModeSettings": "LightWeight Mode Settings", - "exit": "Exit", - "exportDiagnostics": "Export Diagnostic Info", - "vergeVersion": "Verge Version" - } - }, - "theme": { - "title": "Theme Setting", - "fields": { - "primaryColor": "기본 색상", - "secondaryColor": "Secondary Color", - "primaryText": "Primary Text", - "secondaryText": "Secondary Text", - "infoColor": "Info Color", - "warningColor": "Warning Color", - "errorColor": "Error Color", - "successColor": "Success Color", - "fontFamily": "Font Family", - "cssInjection": "CSS Injection" - }, - "actions": { - "editCss": "Edit CSS" - }, - "dialogs": { - "editCssTitle": "Edit CSS" - } - }, - "layout": { - "title": "레이아웃 설정", - "fields": { - "preferSystemTitlebar": "Prefer System Titlebar", - "trafficGraph": "트래픽 그래프", - "memoryUsage": "메모리 사용량", - "proxyGroupIcon": "Proxy Group Icon", - "hoverNavigator": "Hover Jump Navigator", - "hoverNavigatorDelay": "Hover Jump Navigator Delay", - "navIcon": "Nav Icon", - "trayIcon": "Tray Icon", - "showProxyGroupsInline": "Show Proxy Groups Inline", - "commonTrayIcon": "Common Tray Icon", - "systemProxyTrayIcon": "System Proxy Tray Icon", - "tunTrayIcon": "Tun Tray Icon", - "enableTrayIcon": "Enable Tray Icon", - "enableTraySpeed": "Enable Tray Speed" - }, - "tooltips": { - "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", - "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" - }, - "options": { - "icon": { - "monochrome": "Monochrome", - "colorful": "Colorful", - "disable": "비활성화" - } - } - } - } - }, - "modals": { - "clashPort": { - "title": "Port Config", - "fields": { - "mixed": "혼합 포트", - "socks": "Socks Port", - "http": "Http(s) Port", - "redir": "Redir Port", - "tproxy": "Tproxy Port" - }, - "actions": { - "random": "Random Port" - }, - "messages": { - "saved": "Port settings saved", - "saveFailed": "Failed to save port settings" - } - }, - "clashCore": { - "variants": { - "release": "안정 버전", - "alpha": "알파 버전" - } - }, - "liteMode": { - "title": "LightWeight Mode Settings", - "actions": { - "enterNow": "Enter LightWeight Mode Now" - }, - "toggles": { - "autoEnter": "Auto Enter LightWeight Mode" - }, - "tooltips": { - "autoEnter": "Enable to automatically activate LightWeight Mode after the window is closed for a period of time" - }, - "fields": { - "delay": "Auto Enter LightWeight Mode Delay" - }, - "messages": { - "autoEnterHint": "When closing the window, LightWeight Mode will be automatically activated after {{n}} minutes" - } - }, - "backup": { - "title": "Backup Setting", - "tabs": { - "local": "Local backup", - "webdav": "WebDAV backup" - }, - "actions": { - "selectTarget": "Select backup target", - "backup": "Backup", - "export": "Export", - "exportBackup": "Export Backup", - "deleteBackup": "Delete Backup", - "restore": "Restore", - "restoreBackup": "Restore Backup" - }, - "fields": { - "webdavUrl": "WebDAV Server URL", - "username": "사용자 이름", - "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." - }, - "messages": { - "webdavUrlRequired": "WebDAV URL cannot be empty", - "invalidWebdavUrl": "Invalid WebDAV URL format", - "usernameRequired": "Username cannot be empty", - "passwordRequired": "Password cannot be empty", - "webdavConfigSaved": "WebDAV configuration saved successfully", - "webdavConfigSaveFailed": "Failed to save WebDAV configuration: {{error}}", - "backupCreated": "Backup created successfully", - "backupFailed": "Backup failed: {{error}}", - "localBackupCreated": "Local backup created successfully", - "localBackupFailed": "Local backup failed", - "restoreSuccess": "Restore Success, App will restart in 1s", - "localBackupExported": "Local backup exported successfully", - "localBackupExportFailed": "Failed to export local backup", - "confirmDelete": "Confirm to delete this backup file?", - "confirmRestore": "Confirm to restore this backup file?" - }, - "table": { - "filename": "Filename", - "backupTime": "Backup Time", - "actions": "Actions", - "noBackups": "No backups available", - "rowsPerPage": "Rows per page" - } - }, - "misc": { - "title": "Miscellaneous", - "fields": { - "appLogLevel": "App Log Level", - "appLogMaxSize": "App Log Max Size", - "appLogMaxCount": "App Log Max Count", - "autoCloseConnections": "Auto Close Connections", - "autoCheckUpdate": "Auto Check Update", - "enableBuiltinEnhanced": "Enable Builtin Enhanced", - "proxyLayoutColumns": "Proxy Layout Columns", - "autoLogClean": "Auto Log Clean", - "autoDelayDetection": "자동 지연 감지", - "defaultLatencyTest": "Default Latency Test", - "defaultLatencyTimeout": "Default Latency Timeout" - }, - "tooltips": { - "autoCloseConnections": "Terminate established connections when the proxy group selection or proxy mode changes", - "enableBuiltinEnhanced": "Compatibility handling for the configuration file", - "autoDelayDetection": "백그라운드에서 현재 노드의 지연을 주기적으로 검사합니다", - "defaultLatencyTest": "Used for HTTP client request testing only and won't make a difference to the configuration file" - }, - "options": { - "proxyLayoutColumns": { - "auto": "Auto Columns" - }, - "autoLogClean": { - "never": "Never Clean", - "retainDays": "Retain {{n}} Days" - } - } - }, - "update": { - "title": "New Version v{{version}}", - "actions": { - "goToRelease": "Go to Release Page", - "update": "업데이트" - }, - "messages": { - "portableError": "The portable version does not support in-app updates. Please manually download and replace it", - "breakChangeError": "This version is a major update and does not support in-app updates. Please uninstall it and manually download and install the new version" - } - }, - "sysproxy": { - "title": "System Proxy Setting", - "fieldsets": { - "currentStatus": "Current System Proxy" - }, - "fields": { - "enableStatus": "Enable Status:", - "serverAddr": "Server Addr: ", - "pacUrl": "PAC URL: ", - "proxyHost": "Proxy Host", - "usePacMode": "Use PAC Mode", - "proxyGuard": "Proxy Guard", - "guardDuration": "Guard Duration", - "alwaysUseDefaultBypass": "Always use Default Bypass", - "proxyBypass": "Proxy Bypass Settings: ", - "bypass": "Bypass: ", - "pacScriptContent": "PAC Script Content" - }, - "tooltips": { - "proxyGuard": "Enable to prevent other software from modifying the operating system's proxy settings" - }, - "messages": { - "durationTooShort": "Proxy Daemon Duration Cannot be Less than 1 Second", - "invalidBypass": "Invalid Bypass Format", - "invalidProxyHost": "Invalid Proxy Host Format" - }, - "actions": { - "editPac": "편집 PAC" - } - }, - "tun": { - "title": "Tun 모드", - "fields": { - "stack": "스택", - "device": "Device Name", - "autoRoute": "자동 라우팅", - "strictRoute": "Strict Route", - "autoDetectInterface": "인터페이스 자동 감지", - "dnsHijack": "DNS Hijack", - "mtu": "MTU" - }, - "tooltips": { - "dnsHijack": "Please use , to separate multiple DNS servers" - }, - "messages": { - "applied": "Settings Applied" - } - }, - "dns": { - "dialog": { - "title": "DNS Overwrite", - "warning": "If you are not familiar with these settings, please do not modify them and keep DNS Overwrite enabled" - }, - "sections": { - "general": "DNS Settings", - "fallbackFilter": "Fallback Filter Settings", - "hosts": "Hosts Settings" - }, - "fields": { - "enable": "Enable DNS", - "listen": "DNS Listen", - "enhancedMode": "Enhanced Mode", - "fakeIpRange": "Fake IP Range", - "fakeIpFilterMode": "Fake IP Filter Mode", - "ipv6": { - "label": "IPv6", - "description": "Enable IPv6 DNS resolution" - }, - "preferH3": { - "label": "Prefer H3", - "description": "DNS DOH uses HTTP/3" - }, - "respectRules": { - "label": "Respect Rules", - "description": "DNS connections follow routing rules" - }, - "useHosts": { - "label": "Use Hosts", - "description": "Enable to resolve hosts through hosts file" - }, - "useSystemHosts": { - "label": "Use System Hosts", - "description": "Enable to resolve hosts through system hosts file" - }, - "directPolicy": { - "label": "Direct Nameserver Follow Policy", - "description": "Whether to follow nameserver policy" - }, - "defaultNameserver": { - "label": "Default Nameserver", - "description": "Default DNS servers used to resolve DNS servers" - }, - "nameserver": { - "label": "Nameserver", - "description": "List of DNS servers, comma separated" - }, - "fallback": { - "label": "Fallback", - "description": "List of fallback DNS servers, comma separated" - }, - "proxy": { - "label": "Proxy Server Nameserver", - "description": "DNS servers for proxy node domain resolution" - }, - "directNameserver": { - "label": "Direct Nameserver", - "description": "DNS servers for direct exit domain resolution, supports 'system' keyword, comma separated" - }, - "fakeIpFilter": { - "label": "Fake IP Filter", - "description": "Domains that skip fake IP resolution, comma separated" - }, - "nameserverPolicy": { - "label": "Nameserver Policy", - "description": "Domain-specific DNS server, multiple servers separated by semicolons, format: domain=server1;server2" - }, - "geoipFiltering": { - "label": "GeoIP Filtering", - "description": "Enable GeoIP filtering for fallback" - }, - "geoipCode": "GeoIP Code", - "fallbackIpCidr": { - "label": "Fallback IP CIDR", - "description": "IP CIDRs not using fallback servers, comma separated" - }, - "fallbackDomain": { - "label": "Fallback Domain", - "description": "Domains using fallback servers, comma separated" - }, - "hosts": { - "label": "Hosts", - "description": "Custom domain to IP or domain mapping" - } - }, - "messages": { - "saved": "DNS settings saved", - "configError": "DNS configuration error:" - }, - "errors": { - "invalid": "Invalid configuration" - } - }, - "webUI": { - "actions": { - "openUrl": "Open URL" - }, - "title": "Web UI", - "messages": { - "supportedPlaceholders": "Support %host, %port, %secret", - "placeholderInstruction": "Replace host, port, secret with %host, %port, %secret" - } - }, - "hotkey": { - "toggles": { - "enableGlobal": "Enable Global Hotkey" - }, - "title": "단축키 설정", - "functions": { - "rule": "Rule Mode", - "global": "Global Mode", - "openOrCloseDashboard": "Open/Close Dashboard", - "toggleSystemProxy": "Enable/Disable System Proxy", - "toggleTunMode": "Enable/Disable Tun Mode", - "entryLightweightMode": "Entry Lightweight Mode", - "direct": "Direct Mode" - } - }, - "password": { - "prompts": { - "enterRoot": "Please enter your root password" - } - }, - "networkInterface": { - "title": "Network Interface", - "fields": { - "ipAddress": "IP Address", - "macAddress": "MAC Address" - } - } - }, - "feedback": { - "notifications": { - "clash": { - "restartSuccess": "Clash Core Restarted", - "versionUpdated": "Core Version Updated", - "changeSuccess": "코어 변경 성공", - "changeFailed": "코어 변경 실패", - "geoDataUpdated": "GeoData Updated" - }, - "clashService": { - "installSuccess": "Service Installed Successfully", - "uninstallSuccess": "Service Uninstalled Successfully" - }, - "updater": { - "withClashProxySuccess": "Clash 프록시로 업데이트 성공", - "withClashProxyFailed": "Clash 프록시로도 업데이트 실패" - } - } - }, - "statuses": { - "clash": { - "stopping": "Stopping Core...", - "restarting": "Restarting Core..." - }, - "clashService": { - "installing": "Installing Service...", - "uninstalling": "Uninstalling Service..." - } - } - }, - "layout": { - "components": { - "navigation": { - "tabs": { - "home": "홈", - "proxies": "프록시", - "profiles": "프로필", - "connections": "연결", - "rules": "규칙", - "logs": "로그", - "unlock": "테스트", - "settings": "설정" - }, - "menu": { - "reorderMode": "Menu reorder mode", - "unlock": "Unlock menu order", - "lock": "Lock menu order" - } - } - } - } -} diff --git a/src/locales/ko/connections.json b/src/locales/ko/connections.json new file mode 100644 index 00000000..5cf20a11 --- /dev/null +++ b/src/locales/ko/connections.json @@ -0,0 +1,28 @@ +{ + "page": { + "title": "연결" + }, + "components": { + "fields": { + "host": "호스트", + "dlSpeed": "다운로드 속도", + "ulSpeed": "업로드 속도", + "chains": "체인", + "rule": "규칙", + "process": "프로세스", + "time": "시간", + "source": "소스", + "destination": "목적지", + "destinationPort": "목적지 포트", + "type": "유형" + }, + "order": { + "default": "Default", + "uploadSpeed": "업로드 속도", + "downloadSpeed": "다운로드 속도" + }, + "actions": { + "closeConnection": "연결 닫기" + } + } +} diff --git a/src/locales/ko/home.json b/src/locales/ko/home.json new file mode 100644 index 00000000..6fa9bcb8 --- /dev/null +++ b/src/locales/ko/home.json @@ -0,0 +1,138 @@ +{ + "page": { + "tooltips": { + "lightweightMode": "Lightweight Mode", + "manual": "Manual", + "settings": "Home Settings" + }, + "cards": { + "trafficStats": "Traffic Stats", + "networkSettings": "Network Settings", + "proxyMode": "Proxy Mode" + }, + "settings": { + "cards": { + "profile": "Profile Card", + "currentProxy": "Current Proxy Card", + "network": "Network Settings Card", + "proxyMode": "Proxy Mode Card", + "traffic": "Traffic Stats Card", + "tests": "Website Tests Card", + "ip": "IP Information Card", + "clashInfo": "Clash Info Cards", + "systemInfo": "System Info Cards" + }, + "title": "Home Settings" + }, + "title": "홈" + }, + "components": { + "proxyTun": { + "status": { + "systemProxyEnabled": "System proxy is enabled, your applications will access the network through the proxy", + "systemProxyDisabled": "System proxy is disabled, it is recommended for most users to turn on this option", + "tunModeServiceRequired": "TUN mode requires service mode, please install the service first", + "tunModeEnabled": "TUN mode is enabled, applications will access the network through the virtual network card", + "tunModeDisabled": "TUN mode is disabled, suitable for special applications" + }, + "tooltips": { + "systemProxy": "Enable to modify the operating system's proxy settings. If enabling fails, modify the operating system's proxy settings manually", + "tunMode": "TUN mode can take over all application traffic, suitable for special applications that do not follow the system proxy settings" + } + }, + "clashInfo": { + "title": "Clash Info", + "fields": { + "coreVersion": "Core Version", + "systemProxyAddress": "System Proxy Address", + "mixedPort": "Mixed Port", + "uptime": "Uptime", + "rulesCount": "Rules Count" + } + }, + "systemInfo": { + "title": "System Info", + "fields": { + "osInfo": "OS Info", + "autoLaunch": "Auto Launch", + "runningMode": "Running Mode", + "lastCheckUpdate": "Last Check Update", + "vergeVersion": "Verge Version" + }, + "actions": { + "settings": "설정" + }, + "tooltips": { + "autoLaunchAdmin": "Administrator mode may not support auto launch" + }, + "badges": { + "adminMode": "Administrator Mode", + "serviceMode": "서비스 모드", + "sidecarMode": "User Mode", + "adminServiceMode": "Admin + Service Mode" + } + }, + "ipInfo": { + "title": "IP Information", + "labels": { + "ip": "IP", + "asn": "ASN", + "isp": "ISP", + "org": "ORG", + "location": "Location", + "timezone": "Timezone", + "autoRefresh": "Auto refresh", + "unknown": "Unknown" + }, + "errors": { + "load": "IP 정보를 가져오지 못했습니다" + } + }, + "currentProxy": { + "title": "Current Node", + "actions": { + "refreshDelay": "지연 확인" + }, + "labels": { + "globalMode": "Global Mode", + "directMode": "Direct Mode", + "group": "Group", + "proxy": "Proxy", + "noActiveNode": "No active proxy node" + } + }, + "tests": { + "title": "Website Tests" + }, + "traffic": { + "metrics": { + "uploadSpeed": "업로드 속도", + "downloadSpeed": "다운로드 속도", + "activeConnections": "활성 연결", + "memoryUsage": "메모리 사용량" + }, + "legends": { + "upload": "업로드", + "download": "다운로드" + }, + "patterns": { + "minutes": "{{time}} Minutes" + } + }, + "clashMode": { + "errors": { + "communication": "Core communication error" + }, + "labels": { + "rule": "Rule Mode", + "global": "Global Mode", + "direct": "Direct Mode" + }, + "descriptions": { + "rule": "Automatically choose proxies according to the rule set.", + "global": "Forward all network requests through the selected proxy.", + "direct": "Bypass the proxy and connect to the internet directly." + } + } + } +} diff --git a/src/locales/ko/index.ts b/src/locales/ko/index.ts new file mode 100644 index 00000000..2977171d --- /dev/null +++ b/src/locales/ko/index.ts @@ -0,0 +1,27 @@ +import shared from "./shared.json"; +import profiles from "./profiles.json"; +import proxies from "./proxies.json"; +import connections from "./connections.json"; +import tests from "./tests.json"; +import logs from "./logs.json"; +import rules from "./rules.json"; +import home from "./home.json"; +import unlock from "./unlock.json"; +import settings from "./settings.json"; +import layout from "./layout.json"; + +const resources = { + "shared": shared, + "profiles": profiles, + "proxies": proxies, + "connections": connections, + "tests": tests, + "logs": logs, + "rules": rules, + "home": home, + "unlock": unlock, + "settings": settings, + "layout": layout, +}; + +export default resources; diff --git a/src/locales/ko/layout.json b/src/locales/ko/layout.json new file mode 100644 index 00000000..6c5e839d --- /dev/null +++ b/src/locales/ko/layout.json @@ -0,0 +1,21 @@ +{ + "components": { + "navigation": { + "tabs": { + "home": "홈", + "proxies": "프록시", + "profiles": "프로필", + "connections": "연결", + "rules": "규칙", + "logs": "로그", + "unlock": "테스트", + "settings": "설정" + }, + "menu": { + "reorderMode": "Menu reorder mode", + "unlock": "Unlock menu order", + "lock": "Lock menu order" + } + } + } +} diff --git a/src/locales/ko/logs.json b/src/locales/ko/logs.json new file mode 100644 index 00000000..a5e30a1d --- /dev/null +++ b/src/locales/ko/logs.json @@ -0,0 +1,5 @@ +{ + "page": { + "title": "로그" + } +} diff --git a/src/locales/ko/profiles.json b/src/locales/ko/profiles.json new file mode 100644 index 00000000..b1912670 --- /dev/null +++ b/src/locales/ko/profiles.json @@ -0,0 +1,182 @@ +{ + "page": { + "actions": { + "updateAll": "모든 프로필 업데이트", + "viewRuntimeConfig": "런타임 설정 보기", + "reactivate": "프로필 재활성화", + "import": "가져오기" + }, + "batch": { + "actions": { + "delete": "Delete Selected Profiles", + "selectAll": "Select All", + "deselectAll": "Deselect All", + "done": "Done" + }, + "summary": { + "selected": "Selected", + "items": "items" + }, + "title": "Batch Operations" + }, + "importForm": { + "placeholder": "프로필 URL", + "actions": { + "paste": "붙여넣기" + } + }, + "feedback": { + "errors": { + "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", + "onlyYaml": "Only YAML Files Supported" + }, + "notifications": { + "importRetry": "Import failed, retrying with Clash proxy...", + "importFail": "Import failed even with Clash proxy", + "importNeedsRefresh": "Profile imported but may need manual refresh", + "importSuccess": "Profile imported successfully, please restart if not visible", + "profileSwitched": "Profile Switched", + "profileReactivated": "Profile Reactivated", + "switchInterrupted": "Profile switch interrupted by new selection", + "batchDeleted": "Selected profiles deleted successfully" + }, + "notices": { + "forceRefreshCompleted": "Force refresh completed", + "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" + } + }, + "title": "프로필" + }, + "components": { + "card": { + "labels": { + "clickToImport": "Click to import subscription" + } + }, + "fileInput": { + "chooseFile": "파일 선택" + }, + "menu": { + "home": "홈", + "select": "선택", + "editInfo": "정보 편집", + "editFile": "파일 편집", + "editRules": "규칙 편집", + "editProxies": "프록시 편집", + "editGroups": "프록시 그룹 편집", + "extendConfig": "설정 확장", + "extendScript": "스크립트 확장", + "openFile": "파일 열기", + "update": "업데이트", + "updateViaProxy": "Update via proxy" + }, + "more": { + "global": { + "merge": "Global Merge", + "script": "Global Script" + }, + "chips": { + "merge": "Merge", + "script": "Script" + } + }, + "profileItem": { + "tooltips": { + "showLast": "Click to show last update time", + "showNext": "Click to show next update" + }, + "status": { + "lastUpdateFailed": "Last Update failed", + "nextUp": "Next Up", + "noSchedule": "No schedule", + "unknown": "Unknown", + "autoUpdateDisabled": "Auto update disabled" + } + } + }, + "modals": { + "profileForm": { + "title": { + "create": "프로필 생성", + "edit": "프로필 편집" + }, + "fields": { + "type": "유형", + "description": "설명", + "subscriptionUrl": "구독 URL", + "httpTimeout": "HTTP Request Timeout", + "updateInterval": "업데이트 간격", + "useSystemProxy": "시스템 프록시 사용", + "useClashProxy": "Clash 프록시 사용", + "acceptInvalidCerts": "잘못된 인증서 허용(위험)", + "allowAutoUpdate": "Allow Auto Update" + }, + "feedback": { + "notifications": { + "creationRetry": "Profile creation failed, retrying with Clash proxy...", + "creationSuccess": "Profile creation succeeded with Clash proxy" + } + } + }, + "proxiesEditor": { + "title": "프록시 편집", + "placeholders": { + "multiUri": "여러 URI의 경우 줄바꿈 사용(Base64 인코딩 지원)" + }, + "actions": { + "prepend": "프록시 앞에 추가", + "append": "프록시 뒤에 추가" + } + }, + "groupsEditor": { + "title": "프록시 그룹 편집", + "errors": { + "nameRequired": "그룹 이름 필수", + "nameExists": "그룹 이름이 이미 존재함" + }, + "fields": { + "type": "그룹 유형", + "name": "그룹 이름", + "icon": "Proxy Group Icon", + "proxies": "프록시 사용", + "provider": "제공자 사용", + "healthCheckUrl": "상태 확인 URL", + "expectedStatus": "예상 상태", + "interval": "간격", + "maxFailedTimes": "최대 실패 횟수", + "interfaceName": "인터페이스 이름", + "routingMark": "라우팅 마크", + "filter": "필터", + "excludeFilter": "제외 필터", + "excludeType": "제외 유형", + "includeAll": "모든 프록시 및 제공자 포함", + "includeAllProxies": "모든 프록시 포함", + "includeAllProviders": "모든 제공자 포함" + }, + "toggles": { + "lazy": "지연 로딩", + "disableUdp": "UDP 비활성화", + "hidden": "숨김" + }, + "actions": { + "prepend": "그룹 앞에 추가", + "append": "그룹 뒤에 추가" + } + }, + "editor": { + "actions": { + "format": "문서 포맷" + }, + "messages": { + "readOnly": "Cannot edit in read-only editor" + } + }, + "confirmDelete": { + "title": "삭제 확인", + "message": "이 작업은 되돌릴 수 없습니다" + }, + "logViewer": { + "title": "스크립트 콘솔" + } + } +} diff --git a/src/locales/ko/proxies.json b/src/locales/ko/proxies.json new file mode 100644 index 00000000..618e695b --- /dev/null +++ b/src/locales/ko/proxies.json @@ -0,0 +1,90 @@ +{ + "page": { + "modes": { + "rule": "Rule", + "global": "Global", + "direct": "Direct" + }, + "actions": { + "toggleChain": "🔗 체인 프록시", + "connect": "Connect", + "disconnect": "Disconnect", + "connecting": "Connecting...", + "clearChainConfig": "Delete Chain Config" + }, + "provider": { + "title": "프록시 제공자", + "actions": { + "updateAll": "모두 업데이트", + "update": "업데이트" + } + }, + "rules": { + "title": "Proxy Rules", + "select": "Select Rules" + }, + "labels": { + "proxyCount": "프록시 개수", + "delayCheckReset": "고정 취소를 위한 지연 확인" + }, + "tooltips": { + "locate": "로케이트", + "delayCheck": "지연 확인", + "sortDefault": "기본값으로 정렬", + "sortDelay": "지연시간으로 정렬", + "sortName": "이름으로 정렬", + "delayCheckUrl": "지연 확인 URL", + "showBasic": "프록시 기본", + "showDetail": "프록시 상세", + "filter": "필터" + }, + "placeholders": { + "delayCheckUrl": "지연 확인 URL" + }, + "chain": { + "header": "Chain Proxy Config", + "empty": "No proxy chain configured", + "instruction": "Click nodes in order to add to proxy chain", + "minimumNodes": "Chain proxy requires at least 2 nodes", + "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", + "connectFailed": "Failed to connect to proxy chain", + "disconnectFailed": "Failed to disconnect from proxy chain", + "duplicateNode": "Proxy node already exists in chain" + }, + "messages": { + "directMode": "Direct Mode" + }, + "title": { + "default": "프록시 그룹", + "chainMode": "Proxy Chain Mode" + } + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "components": { + "enums": { + "strategies": { + "select": "수동으로 프록시 선택", + "url-test": "URL 테스트 지연을 기준으로 프록시 선택", + "fallback": "오류 발생 시 다른 프록시로 전환", + "load-balance": "부하 분산에 따라 프록시 분배", + "relay": "정의된 프록시 체인을 통과" + }, + "policies": { + "DIRECT": "데이터가 직접 아웃바운드로 이동", + "REJECT": "요청 차단", + "REJECT-DROP": "요청 폐기", + "PASS": "일치할 경우 이 규칙 건너뛰기" + } + } + } +} diff --git a/src/locales/ko/rules.json b/src/locales/ko/rules.json new file mode 100644 index 00000000..55dd74c1 --- /dev/null +++ b/src/locales/ko/rules.json @@ -0,0 +1,82 @@ +{ + "page": { + "provider": { + "trigger": "규칙 제공자", + "dialogTitle": "규칙 제공자", + "actions": { + "updateAll": "모두 업데이트", + "update": "업데이트" + } + }, + "title": "규칙" + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "modals": { + "editor": { + "form": { + "labels": { + "type": "규칙 유형", + "content": "규칙 내용", + "proxyPolicy": "프록시 정책" + }, + "toggles": { + "noResolve": "해석 안함" + }, + "actions": { + "prependRule": "규칙 앞에 추가", + "appendRule": "규칙 뒤에 추가" + }, + "validation": { + "conditionRequired": "규칙 조건 필요", + "invalidRule": "잘못된 규칙" + } + }, + "ruleTypes": { + "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": "프로세스 이름과 일치(안드로이드 패키지 이름)", + "PROCESS-PATH": "전체 프로세스 경로와 일치", + "PROCESS-NAME-REGEX": "정규 표현식을 사용한 전체 프로세스 이름 일치(안드로이드 패키지 이름)", + "PROCESS-PATH-REGEX": "정규 표현식을 사용한 전체 프로세스 경로 일치", + "NETWORK": "전송 프로토콜과 일치(tcp/udp)", + "UID": "Linux 사용자 ID와 일치", + "IN-TYPE": "인바운드 유형과 일치", + "IN-USER": "인바운드 사용자 이름과 일치", + "IN-NAME": "인바운드 이름과 일치", + "SUB-RULE": "하위 규칙", + "RULE-SET": "규칙 세트와 일치", + "AND": "논리 AND", + "OR": "논리 OR", + "NOT": "논리 NOT", + "MATCH": "모든 요청과 일치" + }, + "title": "규칙 편집" + } + } +} diff --git a/src/locales/ko/settings.json b/src/locales/ko/settings.json new file mode 100644 index 00000000..9bb0b39d --- /dev/null +++ b/src/locales/ko/settings.json @@ -0,0 +1,571 @@ +{ + "page": { + "actions": { + "manual": "Manual", + "telegram": "Telegram Channel", + "github": "Github Repo" + }, + "title": "설정" + }, + "sections": { + "system": { + "title": "시스템 설정", + "toggles": { + "tunMode": "Tun 모드", + "systemProxy": "시스템 프록시" + }, + "tooltips": { + "autoLaunchAdmin": "Administrator mode may not support auto launch", + "silentStart": "Start the program in background mode without displaying the panel" + }, + "fields": { + "autoLaunch": "자동 실행", + "silentStart": "백그라운드 시작" + }, + "notifications": { + "tunMode": { + "autoDisabled": "TUN Mode automatically disabled due to service unavailable", + "autoDisableFailed": "Failed to disable TUN Mode automatically" + } + } + }, + "proxyControl": { + "tooltips": { + "systemProxy": "Enable to modify the operating system's proxy settings. If enabling fails, modify the operating system's proxy settings manually", + "tunMode": "Tun (Virtual NIC) mode: Captures all system traffic, when enabled, there is no need to enable system proxy.", + "tunUnavailable": "TUN requires Service Mode or Admin Mode" + }, + "actions": { + "installService": "Install Service", + "uninstallService": "Uninstall Service" + }, + "fields": { + "systemProxy": "시스템 프록시", + "tunMode": "Tun 모드" + } + }, + "externalController": { + "title": "External Controller", + "fields": { + "enable": "Enable External Controller", + "address": "External Controller", + "secret": "Core Secret" + }, + "placeholders": { + "address": "Required", + "secret": "Recommended" + }, + "tooltips": { + "copy": "Copy to clipboard" + }, + "messages": { + "addressRequired": "Controller address cannot be empty", + "secretRequired": "Secret cannot be empty", + "copyFailed": "Failed to copy", + "controllerCopied": "Controller address copied to clipboard", + "secretCopied": "Secret copied to clipboard" + } + }, + "externalCors": { + "title": "External Cors Configuration", + "fields": { + "allowPrivateNetwork": "Allow private network access", + "allowedOrigins": "Allowed Origins" + }, + "placeholders": { + "origin": "Please enter a valid url" + }, + "actions": { + "add": "Add" + }, + "messages": { + "alwaysIncluded": "Always included origins: {{urls}}" + }, + "tooltips": { + "open": "External Cors Settings" + } + }, + "appearance": { + "light": "Light", + "dark": "Dark", + "system": "System" + }, + "clash": { + "title": "Clash 설정", + "form": { + "fields": { + "allowLan": "Allow LAN", + "dnsOverwrite": "DNS Overwrite", + "ipv6": "IPv6", + "unifiedDelay": "Unified Delay", + "logLevel": "로그 레벨", + "portConfig": "Port Config", + "external": "External", + "webUI": "Web UI", + "clashCore": "Clash Core", + "openUwpTool": "Open UWP tool", + "updateGeoData": "Update GeoData" + }, + "tooltips": { + "networkInterface": "Network Interface", + "unifiedDelay": "When unified delay is turned on, two delay tests will be performed to eliminate the delay differences between different types of nodes caused by connection handshakes, etc", + "logLevel": "This parameter is valid only for kernel log files in the log directory Service folder", + "openUwpTool": "Since Windows 8, UWP apps (such as Microsoft Store) are restricted from directly accessing local host network services, and this tool can be used to bypass this restriction" + }, + "options": { + "logLevel": { + "debug": "Debug", + "info": "Info", + "warning": "Warn", + "error": "Error", + "silent": "Silent" + } + } + } + } + }, + "components": { + "verge": { + "basic": { + "title": "Verge 기본 설정", + "actions": { + "browse": "Browse" + }, + "trayOptions": { + "showMainWindow": "메인 창 표시", + "showTrayMenu": "트레이 메뉴 표시", + "disable": "비활성화" + }, + "fields": { + "language": "언어", + "themeMode": "테마 모드", + "trayClickEvent": "트레이 클릭 이벤트", + "copyEnvType": "환경 유형 복사", + "startPage": "시작 페이지", + "startupScript": "시작 스크립트", + "themeSetting": "Theme Setting", + "layoutSetting": "레이아웃 설정", + "misc": "Miscellaneous", + "hotkeySetting": "단축키 설정" + } + }, + "advanced": { + "title": "Verge Advanced Setting", + "tooltips": { + "backupInfo": "Support local or WebDAV backup of configuration files", + "openConfDir": "If the software runs abnormally, BACKUP and delete all files in this folder then restart the software", + "liteMode": "Close the GUI and keep only the kernel running" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "Currently on the Latest Version", + "versionCopied": "Version copied to clipboard" + }, + "fields": { + "backupSetting": "Backup Setting", + "runtimeConfig": "Runtime Config", + "openConfDir": "Open Conf Dir", + "openCoreDir": "Open Core Dir", + "openLogsDir": "Open Logs Dir", + "checkUpdates": "Check for Updates", + "openDevTools": "Dev Tools", + "liteModeSettings": "LightWeight Mode Settings", + "exit": "Exit", + "exportDiagnostics": "Export Diagnostic Info", + "vergeVersion": "Verge Version" + } + }, + "theme": { + "title": "Theme Setting", + "fields": { + "primaryColor": "기본 색상", + "secondaryColor": "Secondary Color", + "primaryText": "Primary Text", + "secondaryText": "Secondary Text", + "infoColor": "Info Color", + "warningColor": "Warning Color", + "errorColor": "Error Color", + "successColor": "Success Color", + "fontFamily": "Font Family", + "cssInjection": "CSS Injection" + }, + "actions": { + "editCss": "Edit CSS" + }, + "dialogs": { + "editCssTitle": "Edit CSS" + } + }, + "layout": { + "title": "레이아웃 설정", + "fields": { + "preferSystemTitlebar": "Prefer System Titlebar", + "trafficGraph": "트래픽 그래프", + "memoryUsage": "메모리 사용량", + "proxyGroupIcon": "Proxy Group Icon", + "hoverNavigator": "Hover Jump Navigator", + "hoverNavigatorDelay": "Hover Jump Navigator Delay", + "navIcon": "Nav Icon", + "trayIcon": "Tray Icon", + "showProxyGroupsInline": "Show Proxy Groups Inline", + "commonTrayIcon": "Common Tray Icon", + "systemProxyTrayIcon": "System Proxy Tray Icon", + "tunTrayIcon": "Tun Tray Icon", + "enableTrayIcon": "Enable Tray Icon", + "enableTraySpeed": "Enable Tray Speed" + }, + "tooltips": { + "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", + "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" + }, + "options": { + "icon": { + "monochrome": "Monochrome", + "colorful": "Colorful", + "disable": "비활성화" + } + } + } + } + }, + "modals": { + "clashPort": { + "title": "Port Config", + "fields": { + "mixed": "혼합 포트", + "socks": "Socks Port", + "http": "Http(s) Port", + "redir": "Redir Port", + "tproxy": "Tproxy Port" + }, + "actions": { + "random": "Random Port" + }, + "messages": { + "saved": "Port settings saved", + "saveFailed": "Failed to save port settings" + } + }, + "clashCore": { + "variants": { + "release": "안정 버전", + "alpha": "알파 버전" + } + }, + "liteMode": { + "title": "LightWeight Mode Settings", + "actions": { + "enterNow": "Enter LightWeight Mode Now" + }, + "toggles": { + "autoEnter": "Auto Enter LightWeight Mode" + }, + "tooltips": { + "autoEnter": "Enable to automatically activate LightWeight Mode after the window is closed for a period of time" + }, + "fields": { + "delay": "Auto Enter LightWeight Mode Delay" + }, + "messages": { + "autoEnterHint": "When closing the window, LightWeight Mode will be automatically activated after {{n}} minutes" + } + }, + "backup": { + "title": "Backup Setting", + "tabs": { + "local": "Local backup", + "webdav": "WebDAV backup" + }, + "actions": { + "selectTarget": "Select backup target", + "backup": "Backup", + "export": "Export", + "exportBackup": "Export Backup", + "deleteBackup": "Delete Backup", + "restore": "Restore", + "restoreBackup": "Restore Backup" + }, + "fields": { + "webdavUrl": "WebDAV Server URL", + "username": "사용자 이름", + "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." + }, + "messages": { + "webdavUrlRequired": "WebDAV URL cannot be empty", + "invalidWebdavUrl": "Invalid WebDAV URL format", + "usernameRequired": "Username cannot be empty", + "passwordRequired": "Password cannot be empty", + "webdavConfigSaved": "WebDAV configuration saved successfully", + "webdavConfigSaveFailed": "Failed to save WebDAV configuration: {{error}}", + "backupCreated": "Backup created successfully", + "backupFailed": "Backup failed: {{error}}", + "localBackupCreated": "Local backup created successfully", + "localBackupFailed": "Local backup failed", + "restoreSuccess": "Restore Success, App will restart in 1s", + "localBackupExported": "Local backup exported successfully", + "localBackupExportFailed": "Failed to export local backup", + "confirmDelete": "Confirm to delete this backup file?", + "confirmRestore": "Confirm to restore this backup file?" + }, + "table": { + "filename": "Filename", + "backupTime": "Backup Time", + "actions": "Actions", + "noBackups": "No backups available", + "rowsPerPage": "Rows per page" + } + }, + "misc": { + "title": "Miscellaneous", + "fields": { + "appLogLevel": "App Log Level", + "appLogMaxSize": "App Log Max Size", + "appLogMaxCount": "App Log Max Count", + "autoCloseConnections": "Auto Close Connections", + "autoCheckUpdate": "Auto Check Update", + "enableBuiltinEnhanced": "Enable Builtin Enhanced", + "proxyLayoutColumns": "Proxy Layout Columns", + "autoLogClean": "Auto Log Clean", + "autoDelayDetection": "자동 지연 감지", + "defaultLatencyTest": "Default Latency Test", + "defaultLatencyTimeout": "Default Latency Timeout" + }, + "tooltips": { + "autoCloseConnections": "Terminate established connections when the proxy group selection or proxy mode changes", + "enableBuiltinEnhanced": "Compatibility handling for the configuration file", + "autoDelayDetection": "백그라운드에서 현재 노드의 지연을 주기적으로 검사합니다", + "defaultLatencyTest": "Used for HTTP client request testing only and won't make a difference to the configuration file" + }, + "options": { + "proxyLayoutColumns": { + "auto": "Auto Columns" + }, + "autoLogClean": { + "never": "Never Clean", + "retainDays": "Retain {{n}} Days" + } + } + }, + "update": { + "title": "New Version v{{version}}", + "actions": { + "goToRelease": "Go to Release Page", + "update": "업데이트" + }, + "messages": { + "portableError": "The portable version does not support in-app updates. Please manually download and replace it", + "breakChangeError": "This version is a major update and does not support in-app updates. Please uninstall it and manually download and install the new version" + } + }, + "sysproxy": { + "title": "System Proxy Setting", + "fieldsets": { + "currentStatus": "Current System Proxy" + }, + "fields": { + "enableStatus": "Enable Status:", + "serverAddr": "Server Addr: ", + "pacUrl": "PAC URL: ", + "proxyHost": "Proxy Host", + "usePacMode": "Use PAC Mode", + "proxyGuard": "Proxy Guard", + "guardDuration": "Guard Duration", + "alwaysUseDefaultBypass": "Always use Default Bypass", + "proxyBypass": "Proxy Bypass Settings: ", + "bypass": "Bypass: ", + "pacScriptContent": "PAC Script Content" + }, + "tooltips": { + "proxyGuard": "Enable to prevent other software from modifying the operating system's proxy settings" + }, + "messages": { + "durationTooShort": "Proxy Daemon Duration Cannot be Less than 1 Second", + "invalidBypass": "Invalid Bypass Format", + "invalidProxyHost": "Invalid Proxy Host Format" + }, + "actions": { + "editPac": "편집 PAC" + } + }, + "tun": { + "title": "Tun 모드", + "fields": { + "stack": "스택", + "device": "Device Name", + "autoRoute": "자동 라우팅", + "strictRoute": "Strict Route", + "autoDetectInterface": "인터페이스 자동 감지", + "dnsHijack": "DNS Hijack", + "mtu": "MTU" + }, + "tooltips": { + "dnsHijack": "Please use , to separate multiple DNS servers" + }, + "messages": { + "applied": "Settings Applied" + } + }, + "dns": { + "dialog": { + "title": "DNS Overwrite", + "warning": "If you are not familiar with these settings, please do not modify them and keep DNS Overwrite enabled" + }, + "sections": { + "general": "DNS Settings", + "fallbackFilter": "Fallback Filter Settings", + "hosts": "Hosts Settings" + }, + "fields": { + "enable": "Enable DNS", + "listen": "DNS Listen", + "enhancedMode": "Enhanced Mode", + "fakeIpRange": "Fake IP Range", + "fakeIpFilterMode": "Fake IP Filter Mode", + "ipv6": { + "label": "IPv6", + "description": "Enable IPv6 DNS resolution" + }, + "preferH3": { + "label": "Prefer H3", + "description": "DNS DOH uses HTTP/3" + }, + "respectRules": { + "label": "Respect Rules", + "description": "DNS connections follow routing rules" + }, + "useHosts": { + "label": "Use Hosts", + "description": "Enable to resolve hosts through hosts file" + }, + "useSystemHosts": { + "label": "Use System Hosts", + "description": "Enable to resolve hosts through system hosts file" + }, + "directPolicy": { + "label": "Direct Nameserver Follow Policy", + "description": "Whether to follow nameserver policy" + }, + "defaultNameserver": { + "label": "Default Nameserver", + "description": "Default DNS servers used to resolve DNS servers" + }, + "nameserver": { + "label": "Nameserver", + "description": "List of DNS servers, comma separated" + }, + "fallback": { + "label": "Fallback", + "description": "List of fallback DNS servers, comma separated" + }, + "proxy": { + "label": "Proxy Server Nameserver", + "description": "DNS servers for proxy node domain resolution" + }, + "directNameserver": { + "label": "Direct Nameserver", + "description": "DNS servers for direct exit domain resolution, supports 'system' keyword, comma separated" + }, + "fakeIpFilter": { + "label": "Fake IP Filter", + "description": "Domains that skip fake IP resolution, comma separated" + }, + "nameserverPolicy": { + "label": "Nameserver Policy", + "description": "Domain-specific DNS server, multiple servers separated by semicolons, format: domain=server1;server2" + }, + "geoipFiltering": { + "label": "GeoIP Filtering", + "description": "Enable GeoIP filtering for fallback" + }, + "geoipCode": "GeoIP Code", + "fallbackIpCidr": { + "label": "Fallback IP CIDR", + "description": "IP CIDRs not using fallback servers, comma separated" + }, + "fallbackDomain": { + "label": "Fallback Domain", + "description": "Domains using fallback servers, comma separated" + }, + "hosts": { + "label": "Hosts", + "description": "Custom domain to IP or domain mapping" + } + }, + "messages": { + "saved": "DNS settings saved", + "configError": "DNS configuration error:" + }, + "errors": { + "invalid": "Invalid configuration" + } + }, + "webUI": { + "actions": { + "openUrl": "Open URL" + }, + "title": "Web UI", + "messages": { + "supportedPlaceholders": "Support %host, %port, %secret", + "placeholderInstruction": "Replace host, port, secret with %host, %port, %secret" + } + }, + "hotkey": { + "toggles": { + "enableGlobal": "Enable Global Hotkey" + }, + "title": "단축키 설정", + "functions": { + "rule": "Rule Mode", + "global": "Global Mode", + "openOrCloseDashboard": "Open/Close Dashboard", + "toggleSystemProxy": "Enable/Disable System Proxy", + "toggleTunMode": "Enable/Disable Tun Mode", + "entryLightweightMode": "Entry Lightweight Mode", + "direct": "Direct Mode" + } + }, + "password": { + "prompts": { + "enterRoot": "Please enter your root password" + } + }, + "networkInterface": { + "title": "Network Interface", + "fields": { + "ipAddress": "IP Address", + "macAddress": "MAC Address" + } + } + }, + "feedback": { + "notifications": { + "clash": { + "restartSuccess": "Clash Core Restarted", + "versionUpdated": "Core Version Updated", + "changeSuccess": "코어 변경 성공", + "changeFailed": "코어 변경 실패", + "geoDataUpdated": "GeoData Updated" + }, + "clashService": { + "installSuccess": "Service Installed Successfully", + "uninstallSuccess": "Service Uninstalled Successfully" + }, + "updater": { + "withClashProxySuccess": "Clash 프록시로 업데이트 성공", + "withClashProxyFailed": "Clash 프록시로도 업데이트 실패" + } + } + }, + "statuses": { + "clash": { + "stopping": "Stopping Core...", + "restarting": "Restarting Core..." + }, + "clashService": { + "installing": "Installing Service...", + "uninstalling": "Uninstalling Service..." + } + } +} diff --git a/src/locales/ko/shared.json b/src/locales/ko/shared.json new file mode 100644 index 00000000..cbb9c18e --- /dev/null +++ b/src/locales/ko/shared.json @@ -0,0 +1,128 @@ +{ + "actions": { + "cancel": "취소", + "close": "닫기", + "confirm": "확인", + "save": "저장", + "delete": "삭제", + "edit": "편집", + "new": "새로 만들기", + "enable": "활성화", + "upgrade": "Upgrade", + "restart": "Restart", + "resetToDefault": "Reset to Default", + "refresh": "새로고침", + "retry": "Retry", + "refreshPage": "Refresh Page", + "showDetails": "Show Details", + "hideDetails": "Hide Details", + "listView": "목록 보기", + "tableView": "테이블 보기", + "pause": "일시 정지", + "resume": "재개", + "closeAll": "모두 닫기", + "clear": "지우기" + }, + "labels": { + "updateAt": "업데이트 시간", + "timeout": "Timeout", + "icon": "아이콘", + "name": "이름", + "readOnly": "ReadOnly", + "expireTime": "만료 시간", + "updateTime": "업데이트 시간", + "usedTotal": "사용됨 / 전체", + "from": "출처", + "password": "비밀번호", + "retryAttempts": "Retry attempts", + "downloaded": "다운로드됨", + "uploaded": "업로드됨" + }, + "statuses": { + "enabled": "Enabled", + "disabled": "Disabled", + "saving": "Saving...", + "empty": "비어있음" + }, + "units": { + "milliseconds": "밀리초", + "seconds": "초", + "minutes": "분", + "kilobytes": "KB", + "files": "Files" + }, + "placeholders": { + "filter": "Filter conditions", + "matchCase": "Match Case", + "matchWholeWord": "Match Whole Word", + "useRegex": "Use Regular Expression" + }, + "validation": { + "invalidRegex": "Invalid regular expression" + }, + "window": { + "maximize": "최대화", + "minimize": "최소화" + }, + "editorModes": { + "visualization": "시각화", + "advanced": "고급" + }, + "feedback": { + "errors": { + "trafficStats": "Traffic Statistics Error", + "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." + }, + "notices": { + "raw": "{{message}}", + "prefixedRaw": "{{prefix}} {{message}}" + }, + "notifications": { + "importSuccess": "Profile Imported Successfully", + "importSubscriptionSuccess": "구독 가져오기 성공", + "importWithClashProxy": "Profile Imported with Clash proxy", + "saved": "Saved successfully", + "common": { + "copySuccess": "복사 성공", + "saveSuccess": "Configuration saved successfully", + "saveFailed": "Failed to save configuration" + } + }, + "validation": { + "config": { + "failed": "설정 검증 실패", + "bootFailed": "부팅 설정 검증 실패", + "coreChangeFailed": "코어 변경 설정 검증 실패", + "processTerminated": "설정 검증 프로세스 종료됨" + }, + "script": { + "syntaxError": "스크립트 구문 오류", + "missingMain": "스크립트 메인 없음", + "fileNotFound": "파일을 찾을 수 없음", + "fileError": "스크립트 파일 오류" + }, + "yaml": { + "syntaxError": "YAML 구문 오류", + "readError": "YAML 읽기 오류", + "mappingError": "YAML 매핑 오류", + "keyError": "YAML 키 오류", + "generalError": "YAML 오류" + }, + "merge": { + "syntaxError": "병합 파일 구문 오류", + "mappingError": "병합 파일 매핑 오류", + "keyError": "병합 파일 키 오류", + "generalError": "병합 파일 오류" + } + } + }, + "filters": { + "logLevels": { + "all": "ALL", + "debug": "DEBUG", + "info": "INFO", + "warn": "WARN", + "error": "ERROR" + } + } +} diff --git a/src/locales/ko/tests.json b/src/locales/ko/tests.json new file mode 100644 index 00000000..987f939f --- /dev/null +++ b/src/locales/ko/tests.json @@ -0,0 +1,40 @@ +{ + "page": { + "actions": { + "testAll": "모두 테스트" + }, + "title": "테스트" + }, + "components": { + "item": { + "actions": { + "test": "테스트" + } + } + }, + "modals": { + "test": { + "title": { + "create": "테스트 생성", + "edit": "테스트 편집" + }, + "fields": { + "url": "테스트 URL" + } + } + }, + "statuses": { + "test": { + "pending": "Pending", + "yes": "Yes", + "no": "No", + "failed": "실패", + "completed": "Completed", + "disallowedIsp": "Disallowed ISP", + "originalsOnly": "Originals Only", + "noDisney": "No (IP Banned By Disney+)", + "unsupportedRegion": "Unsupported Country/Region", + "failedNetwork": "Failed (Network Connection)" + } + } +} diff --git a/src/locales/ko/unlock.json b/src/locales/ko/unlock.json new file mode 100644 index 00000000..d5711e4c --- /dev/null +++ b/src/locales/ko/unlock.json @@ -0,0 +1,12 @@ +{ + "page": { + "actions": { + "testing": "테스트 중..." + }, + "empty": "No unlock test items", + "messages": { + "detectionTimeout": "Detection timeout or failed" + }, + "title": "Unlock Test" + } +} diff --git a/src/locales/ru.json b/src/locales/ru.json deleted file mode 100644 index 7e139ad7..00000000 --- a/src/locales/ru.json +++ /dev/null @@ -1,1299 +0,0 @@ -{ - "shared": { - "actions": { - "cancel": "Отмена", - "close": "Закрыть", - "confirm": "Подтвердить", - "save": "Сохранить", - "delete": "Удалить", - "edit": "Редактировать", - "new": "Новый", - "enable": "Включить", - "upgrade": "Обновить", - "restart": "Перезапустить", - "resetToDefault": "Сбросить настройки", - "refresh": "Обновить", - "retry": "Retry", - "refreshPage": "Refresh Page", - "showDetails": "Show Details", - "hideDetails": "Hide Details", - "listView": "Отображать в виде списка", - "tableView": "Отображать в виде таблицы", - "pause": "Пауза", - "resume": "Возобновить", - "closeAll": "Закрыть всё", - "clear": "Очистить" - }, - "labels": { - "updateAt": "Обновлено в", - "timeout": "Тайм-аут", - "icon": "Иконка", - "name": "Название", - "readOnly": "Только для чтения", - "expireTime": "Время окончания", - "updateTime": "Время обновления", - "usedTotal": "Использовано / Всего", - "from": "От", - "password": "Пароль", - "retryAttempts": "Retry attempts", - "downloaded": "Скачано", - "uploaded": "Загружено" - }, - "statuses": { - "enabled": "Включено", - "disabled": "Отключено", - "saving": "Saving...", - "empty": "Пусто" - }, - "units": { - "milliseconds": "миллисекунды", - "seconds": "секунды", - "minutes": "минуты", - "kilobytes": "KB", - "files": "Files" - }, - "placeholders": { - "filter": "Условия фильтрации", - "matchCase": "Учитывать регистр", - "matchWholeWord": "Полное совпадение слова", - "useRegex": "Использовать регулярные выражения" - }, - "validation": { - "invalidRegex": "Invalid regular expression" - }, - "window": { - "maximize": "Развернуть", - "minimize": "Свернуть" - }, - "editorModes": { - "visualization": "Визуализация", - "advanced": "Дополнительно" - }, - "feedback": { - "errors": { - "trafficStats": "Traffic Statistics Error", - "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." - }, - "notices": { - "raw": "{{message}}", - "prefixedRaw": "{{prefix}} {{message}}" - }, - "notifications": { - "importSuccess": "Профиль успешно импортирован", - "importSubscriptionSuccess": "Подписка успешно импортирована", - "importWithClashProxy": "Profile Imported with Clash proxy", - "saved": "Saved successfully", - "common": { - "copySuccess": "Скопировано", - "saveSuccess": "Configuration saved successfully", - "saveFailed": "Failed to save configuration" - } - }, - "validation": { - "config": { - "failed": "Ошибка проверки конфигурации подписки, проверьте файл конфигурации, изменения отменены, ошибка:", - "bootFailed": "Ошибка проверки конфигурации при запуске, используется конфигурация по умолчанию, проверьте файл конфигурации, ошибка:", - "coreChangeFailed": "Ошибка проверки конфигурации при смене ядра, используется конфигурация по умолчанию, проверьте файл конфигурации, ошибка:", - "processTerminated": "Процесс проверки прерван" - }, - "script": { - "syntaxError": "Ошибка синтаксиса скрипта, изменения отменены", - "missingMain": "Ошибка скрипта, изменения отменены", - "fileNotFound": "Файл не найден, изменения отменены", - "fileError": "Ошибка файла скрипта, изменения отменены" - }, - "yaml": { - "syntaxError": "Ошибка синтаксиса YAML, откат изменений", - "readError": "Ошибка чтения YAML, откат изменений", - "mappingError": "Ошибка YAML Mapping, откат изменений", - "keyError": "Ошибка ключа YAML, откат изменений", - "generalError": "Ошибка YAML, откат изменений" - }, - "merge": { - "syntaxError": "Ошибка синтаксиса Merge File, откат изменений", - "mappingError": "Ошибка сопоставления в Merge File, откат изменений", - "keyError": "Ошибка ключа в Merge File, откат изменений", - "generalError": "Ошибка Merge File, откат изменений" - } - } - }, - "filters": { - "logLevels": { - "all": "ALL", - "debug": "DEBUG", - "info": "INFO", - "warn": "WARN", - "error": "ERROR" - } - } - }, - "profiles": { - "page": { - "actions": { - "updateAll": "Обновить все профили", - "viewRuntimeConfig": "Просмотреть используемый конфиг", - "reactivate": "Перезапустить профиль", - "import": "Импорт" - }, - "batch": { - "actions": { - "delete": "Удалить выбранные профили", - "selectAll": "Выбрать все", - "deselectAll": "Отменить выбор всех", - "done": "Готово" - }, - "summary": { - "selected": "Выбрано", - "items": "элементы" - }, - "title": "Пакетные операции" - }, - "importForm": { - "placeholder": "URL профиля", - "actions": { - "paste": "Вставить" - } - }, - "feedback": { - "errors": { - "invalidUrl": "Недопустимая ссылка на профиль, введите адрес, начинающийся с http:// или https://", - "onlyYaml": "Поддерживаются только файлы YAML" - }, - "notifications": { - "importRetry": "Import failed, retrying with Clash proxy...", - "importFail": "Import failed even with Clash proxy", - "importNeedsRefresh": "Profile imported but may need manual refresh", - "importSuccess": "Profile imported successfully, please restart if not visible", - "profileSwitched": "Профиль изменен", - "profileReactivated": "Профиль перезапущен", - "switchInterrupted": "Profile switch interrupted by new selection", - "batchDeleted": "Выбранные профили успешно удалены" - }, - "notices": { - "forceRefreshCompleted": "Force refresh completed", - "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" - } - }, - "title": "Профили" - }, - "components": { - "card": { - "labels": { - "clickToImport": "Нажмите, чтобы импортировать подписку" - } - }, - "fileInput": { - "chooseFile": "Выбрать файл" - }, - "menu": { - "home": "Главная", - "select": "Выбрать", - "editInfo": "Изменить информацию", - "editFile": "Изменить файл", - "editRules": "Редактировать правила", - "editProxies": "Редактировать прокси", - "editGroups": "Редактировать группы прокси", - "extendConfig": "Изменить Merge", - "extendScript": "Изменить Script", - "openFile": "Открыть файл", - "update": "Обновить", - "updateViaProxy": "Update via proxy" - }, - "more": { - "global": { - "merge": "Global Merge", - "script": "Global Script" - }, - "chips": { - "merge": "Merge", - "script": "Script" - } - }, - "profileItem": { - "tooltips": { - "showLast": "Click to show last update time", - "showNext": "Click to show next update" - }, - "status": { - "lastUpdateFailed": "Last Update failed", - "nextUp": "Next Up", - "noSchedule": "No schedule", - "unknown": "Unknown", - "autoUpdateDisabled": "Auto update disabled" - } - } - }, - "modals": { - "profileForm": { - "title": { - "create": "Создать профиль", - "edit": "Изменить профиль" - }, - "fields": { - "type": "Тип", - "description": "Описание", - "subscriptionUrl": "URL подписки", - "httpTimeout": "HTTP Request Timeout", - "updateInterval": "Интервал обновления", - "useSystemProxy": "Использовать системный прокси для обновления", - "useClashProxy": "Использовать прокси Clash для обновления", - "acceptInvalidCerts": "Принимать недействительные сертификаты (ОПАСНО)", - "allowAutoUpdate": "Allow Auto Update" - }, - "feedback": { - "notifications": { - "creationRetry": "Profile creation failed, retrying with Clash proxy...", - "creationSuccess": "Profile creation succeeded with Clash proxy" - } - } - }, - "proxiesEditor": { - "title": "Редактировать прокси", - "placeholders": { - "multiUri": "Используйте символы новой строки для нескольких URI (поддерживается кодировка Base64)" - }, - "actions": { - "prepend": "Добавить прокси в начало", - "append": "Добавить прокси в конец" - } - }, - "groupsEditor": { - "title": "Редактировать группы прокси", - "errors": { - "nameRequired": "Требуется имя группы", - "nameExists": "Имя группы уже существует" - }, - "fields": { - "type": "Тип группы", - "name": "Имя группы", - "icon": "Иконка Группы прокси", - "proxies": "Использовать прокси", - "provider": "Использовать провайдера", - "healthCheckUrl": "URL проверки здоровья", - "expectedStatus": "Ожидаемый статус", - "interval": "Интервал", - "maxFailedTimes": "Максимальное количество неудач", - "interfaceName": "Имя интерфейса", - "routingMark": "Марка маршрутизации", - "filter": "Фильтр", - "excludeFilter": "Исключить фильтр", - "excludeType": "Тип исключения", - "includeAll": "Включить все прокси и провайдеры", - "includeAllProxies": "Включить все прокси", - "includeAllProviders": "Включить всех провайдеров" - }, - "toggles": { - "lazy": "Ленивый", - "disableUdp": "Отключить UDP", - "hidden": "Скрытый" - }, - "actions": { - "prepend": "Добавить группу в начало", - "append": "Добавить группу в конец" - } - }, - "editor": { - "actions": { - "format": "Форматировать документ" - }, - "messages": { - "readOnly": "Невозможно редактировать в режиме только для чтения" - } - }, - "confirmDelete": { - "title": "Подтвердите удаление", - "message": "Эта операция необратима" - }, - "logViewer": { - "title": "Консоль скрипта" - } - } - }, - "proxies": { - "page": { - "modes": { - "rule": "Rule", - "global": "Global", - "direct": "Direct" - }, - "actions": { - "toggleChain": "🔗 Цепной прокси", - "connect": "Connect", - "disconnect": "Disconnect", - "connecting": "Connecting...", - "clearChainConfig": "Delete Chain Config" - }, - "provider": { - "title": "Провайдер прокси", - "actions": { - "updateAll": "Обновить все", - "update": "Обновить" - } - }, - "rules": { - "title": "Proxy Rules", - "select": "Select Rules" - }, - "labels": { - "proxyCount": "Proxy Count", - "delayCheckReset": "Проверка задержки для отмены фиксированного" - }, - "tooltips": { - "locate": "Местоположение", - "delayCheck": "Проверка задержки", - "sortDefault": "Сортировать по умолчанию", - "sortDelay": "Сортировать по задержке", - "sortName": "Сортировать по названию", - "delayCheckUrl": "URL проверки задержки", - "showBasic": "Отображать меньше сведений о прокси", - "showDetail": "Отображать больше сведений о прокси", - "filter": "Фильтр" - }, - "placeholders": { - "delayCheckUrl": "URL проверки задержки" - }, - "chain": { - "header": "Конфигурация цепочки прокси", - "empty": "Цепочка прокси не настроена", - "instruction": "Нажимайте узлы по порядку, чтобы добавить в цепочку прокси", - "minimumNodes": "Chain proxy requires at least 2 nodes", - "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", - "connectFailed": "Failed to connect to proxy chain", - "disconnectFailed": "Failed to disconnect from proxy chain", - "duplicateNode": "Proxy node already exists in chain" - }, - "messages": { - "directMode": "Прямой режим" - }, - "title": { - "default": "Группы прокси", - "chainMode": "Proxy Chain Mode" - } - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "components": { - "enums": { - "strategies": { - "select": "Выбор прокси вручную", - "url-test": "Выбор прокси на основе задержки теста URL", - "fallback": "Переключение на другой прокси при ошибке", - "load-balance": "Распределение прокси на основе балансировки нагрузки", - "relay": "Передача через определенную цепочку прокси" - }, - "policies": { - "DIRECT": "Данные направляются напрямую наружу", - "REJECT": "Перехватывает запросы", - "REJECT-DROP": "Отклоняет запросы", - "PASS": "Пропускает это правило при совпадении" - } - } - } - }, - "connections": { - "page": { - "title": "Соединения" - }, - "components": { - "fields": { - "host": "Хост", - "dlSpeed": "Скорость скачивания", - "ulSpeed": "Скорость загрузки", - "chains": "Цепочки", - "rule": "Правило", - "process": "Процесс", - "time": "Время подключения", - "source": "Исходный адрес", - "destination": "IP-адрес назначения", - "destinationPort": "Целевой порт", - "type": "Тип" - }, - "order": { - "default": "Default", - "uploadSpeed": "Скорость загрузки", - "downloadSpeed": "Скорость скачивания" - }, - "actions": { - "closeConnection": "Закрыть соединение" - } - } - }, - "tests": { - "page": { - "actions": { - "testAll": "Тестировать все" - }, - "title": "Тест" - }, - "components": { - "item": { - "actions": { - "test": "Тест" - } - } - }, - "modals": { - "test": { - "title": { - "create": "Создать тест", - "edit": "Редактировать тест" - }, - "fields": { - "url": "URL проверка" - } - } - }, - "statuses": { - "test": { - "pending": "В ожидании", - "yes": "Да", - "no": "Нет", - "failed": "Ошибка", - "completed": "Завершено", - "disallowedIsp": "ISP заблокирован", - "originalsOnly": "Только Originals", - "noDisney": "Нет (IP забанен Disney+)", - "unsupportedRegion": "Страна/регион не поддерживается", - "failedNetwork": "Ошибка подключения" - } - } - }, - "logs": { - "page": { - "title": "Логи" - } - }, - "rules": { - "page": { - "provider": { - "trigger": "Провайдеры правил", - "dialogTitle": "Провайдеры правил", - "actions": { - "updateAll": "Обновить все", - "update": "Обновить" - } - }, - "title": "Правила" - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "modals": { - "editor": { - "form": { - "labels": { - "type": "Тип правила", - "content": "Содержимое правила", - "proxyPolicy": "Политика прокси" - }, - "toggles": { - "noResolve": "Без разрешения" - }, - "actions": { - "prependRule": "Добавить правило в начало", - "appendRule": "Добавить правило в конец" - }, - "validation": { - "conditionRequired": "Требуется условие правила", - "invalidRule": "Недействительное правило" - } - }, - "ruleTypes": { - "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": "Соответствует USER ID в Linux", - "IN-TYPE": "Соответствует типу входящего соединения", - "IN-USER": "Соответствует имени пользователя входящего соединения", - "IN-NAME": "Соответствует имени входящего соединения", - "SUB-RULE": "Подправило", - "RULE-SET": "Соответствует набору правил", - "AND": "Логическое И", - "OR": "Логическое ИЛИ", - "NOT": "Логическое НЕ", - "MATCH": "Соответствует всем запросам" - }, - "title": "Редактировать правила" - } - } - }, - "home": { - "page": { - "tooltips": { - "lightweightMode": "LightWeight Mode", - "manual": "Документация", - "settings": "Настройки главной страницы" - }, - "cards": { - "trafficStats": "Статистика по трафику", - "networkSettings": "Настройки сети", - "proxyMode": "Режим работы" - }, - "settings": { - "cards": { - "profile": "Карточка профиля", - "currentProxy": "Карточка текущего прокси", - "network": "Карточка настроек сети", - "proxyMode": "Карточка режима работы", - "traffic": "Карточка статистики по трафику", - "tests": "Карточка тестов доступности веб-сайтов", - "ip": "Информация об IP", - "clashInfo": "Информация о Clash", - "systemInfo": "Информация о системе" - }, - "title": "Настройки главной страницы" - }, - "title": "Главная" - }, - "components": { - "proxyTun": { - "status": { - "systemProxyEnabled": "Системный прокси включен, ваши приложения будут получать доступ к сети через него", - "systemProxyDisabled": "Системный прокси отключен, большинству пользователей рекомендуется включить эту опцию", - "tunModeServiceRequired": "Режим TUN требует установленную службу Clash Verge", - "tunModeEnabled": "Режим TUN включен, приложения будут получать доступ к сети через виртуальную сетевую карту", - "tunModeDisabled": "Режим TUN отключен" - }, - "tooltips": { - "systemProxy": "Разрешить изменение настроек прокси-сервера операционной системы. Если разрешение не удастся, измените настройки прокси-сервера операционной системы вручную", - "tunMode": "Режим TUN может перехватить трафик всех приложений, подходит для приложений, которые не работают в режиме системного прокси." - } - }, - "clashInfo": { - "title": "Информация о Clash", - "fields": { - "coreVersion": "Версия ядра", - "systemProxyAddress": "Адрес системного прокси", - "mixedPort": "Mixed Port", - "uptime": "Время работы", - "rulesCount": "Количество правил" - } - }, - "systemInfo": { - "title": "Информация о системе", - "fields": { - "osInfo": "Версия ОС", - "autoLaunch": "Автозапуск", - "runningMode": "Режим работы", - "lastCheckUpdate": "Последняя проверка обновлений", - "vergeVersion": "Версия Clash Verge Rev" - }, - "actions": { - "settings": "Настройки" - }, - "tooltips": { - "autoLaunchAdmin": "Administrator mode may not support auto launch" - }, - "badges": { - "adminMode": "Administrator Mode", - "serviceMode": "Режим системной службы", - "sidecarMode": "Пользовательский режим", - "adminServiceMode": "Admin + Service Mode" - } - }, - "ipInfo": { - "title": "Информация об IP", - "labels": { - "ip": "IP", - "asn": "ASN", - "isp": "ISP", - "org": "ORG", - "location": "Location", - "timezone": "Timezone", - "autoRefresh": "Автоматическое обновление через", - "unknown": "Unknown" - }, - "errors": { - "load": "Не удалось получить данные IP" - } - }, - "currentProxy": { - "title": "Текущий сервер", - "actions": { - "refreshDelay": "Проверка задержки" - }, - "labels": { - "globalMode": "Глобальный режим", - "directMode": "Прямой режим", - "group": "Группа", - "proxy": "Прокси", - "noActiveNode": "Нет активного прокси-узла" - } - }, - "tests": { - "title": "Проверка доступности веб-сайтов" - }, - "traffic": { - "metrics": { - "uploadSpeed": "Скорость загрузки", - "downloadSpeed": "Скорость скачивания", - "activeConnections": "Активные соединения", - "memoryUsage": "Использование памяти" - }, - "legends": { - "upload": "Загрузка", - "download": "Скачивание" - }, - "patterns": { - "minutes": "{{time}} Minutes" - } - }, - "clashMode": { - "errors": { - "communication": "Core communication error" - }, - "labels": { - "rule": "Режим правил", - "global": "Глобальный режим", - "direct": "Прямой режим" - }, - "descriptions": { - "rule": "Automatically choose proxies according to the rule set.", - "global": "Forward all network requests through the selected proxy.", - "direct": "Bypass the proxy and connect to the internet directly." - } - } - } - }, - "unlock": { - "page": { - "actions": { - "testing": "Тестирование ..." - }, - "empty": "No unlock test items", - "messages": { - "detectionTimeout": "Detection timeout or failed" - }, - "title": "Тест доступности веб-сайтов" - } - }, - "settings": { - "page": { - "actions": { - "manual": "Документация", - "telegram": "Telegram-канал", - "github": "GitHub репозиторий" - }, - "title": "Настройки" - }, - "sections": { - "system": { - "title": "Настройки системы", - "toggles": { - "tunMode": "Режим TUN", - "systemProxy": "Системный прокси" - }, - "tooltips": { - "autoLaunchAdmin": "Administrator mode may not support auto launch", - "silentStart": "Запускать программу в фоновом режиме без отображения панели" - }, - "fields": { - "autoLaunch": "Автозапуск", - "silentStart": "Тихий запуск" - }, - "notifications": { - "tunMode": { - "autoDisabled": "TUN Mode automatically disabled due to service unavailable", - "autoDisableFailed": "Failed to disable TUN Mode automatically" - } - } - }, - "proxyControl": { - "tooltips": { - "systemProxy": "Разрешить изменение настроек прокси-сервера операционной системы. Если разрешение не удастся, измените настройки прокси-сервера операционной системы вручную", - "tunMode": "Режим Tun: захватывает весь системный трафик, при включении нет необходимости включать системный прокси-сервер.", - "tunUnavailable": "TUN requires Service Mode or Admin Mode" - }, - "actions": { - "installService": "Установить службу", - "uninstallService": "Uninstall Service" - }, - "fields": { - "systemProxy": "Системный прокси", - "tunMode": "Режим TUN" - } - }, - "externalController": { - "title": "Адрес прослушивания внешнего контроллера", - "fields": { - "enable": "Включить внешний контроллер", - "address": "Адрес прослушивания внешнего контроллера", - "secret": "Секрет" - }, - "placeholders": { - "address": "Обязательно", - "secret": "Рекомендуется" - }, - "tooltips": { - "copy": "Копировать в буфер обмена" - }, - "messages": { - "addressRequired": "Адрес контроллера не может быть пустым", - "secretRequired": "Секрет не может быть пустым", - "copyFailed": "Не удалось скопировать", - "controllerCopied": "Адрес контроллера скопирован в буфер обмена", - "secretCopied": "Секрет скопирован в буфер обмена" - } - }, - "externalCors": { - "title": "Конфигурация внешнего CORS", - "fields": { - "allowPrivateNetwork": "Разрешить доступ к частной сети", - "allowedOrigins": "Разрешённые источники" - }, - "placeholders": { - "origin": "Введите корректный URL" - }, - "actions": { - "add": "Добавить" - }, - "messages": { - "alwaysIncluded": "Всегда включаемые источники: {{urls}}" - }, - "tooltips": { - "open": "Настройки внешнего CORS" - } - }, - "appearance": { - "light": "Light", - "dark": "Dark", - "system": "System" - }, - "clash": { - "title": "Настройки Clash", - "form": { - "fields": { - "allowLan": "Разрешить доступ из локальной сети", - "dnsOverwrite": "Переопределение настроек DNS", - "ipv6": "IPv6", - "unifiedDelay": "Точная задержка", - "logLevel": "Уровень логов", - "portConfig": "Настройка порта", - "external": "Внешний контроллер", - "webUI": "Веб-интерфейс", - "clashCore": "Ядро Clash", - "openUwpTool": "Открыть UWP инструмент", - "updateGeoData": "Обновить GeoData" - }, - "tooltips": { - "networkInterface": "Сетевой интерфейс", - "unifiedDelay": "Когда унифицированная(точная) задержка включена, будут выполнены два теста задержки, чтобы устранить различия в задержке между разными типами узлов, вызванные подтверждением соединения и т. д", - "logLevel": "Это действует только на файлы журнала ядра в служебном файле в каталоге журналов.", - "openUwpTool": "С Windows 8 приложения UWP (такие как Microsoft Store) ограничены в прямом доступе к сетевым службам локального хоста, и этот инструмент позволяет обойти это ограничение" - }, - "options": { - "logLevel": { - "debug": "Debug", - "info": "Info", - "warning": "Warn", - "error": "Error", - "silent": "Silent" - } - } - } - } - }, - "components": { - "verge": { - "basic": { - "title": "Основные настройки Verge", - "actions": { - "browse": "Просмотреть" - }, - "trayOptions": { - "showMainWindow": "Показать главное окно", - "showTrayMenu": "Показать меню в трее", - "disable": "Отключить" - }, - "fields": { - "language": "Язык", - "themeMode": "Цветовая тема", - "trayClickEvent": "Событие при щелчке по иконке в трее", - "copyEnvType": "Скопировать тип Env", - "startPage": "Главная страница", - "startupScript": "Скрипт запуска", - "themeSetting": "Настройки темы", - "layoutSetting": "Настройки раскладки", - "misc": "Расширенные настройки", - "hotkeySetting": "Настройки сочетаний клавиш" - } - }, - "advanced": { - "title": "Расширенные настройки Verge", - "tooltips": { - "backupInfo": "Поддерживает файлы конфигурации резервного копирования WebDAV", - "openConfDir": "Если программное обеспечение работает неправильно, сделайте резервную копию и удалите все файлы в этой папке, а затем перезапустите ПО", - "liteMode": "Режим, в котором работает только ядро Clash, а графический интрефейс закрыт" - }, - "actions": { - "copyVersion": "Copy Version" - }, - "notifications": { - "latestVersion": "Обновление не требуется", - "versionCopied": "Version copied to clipboard" - }, - "fields": { - "backupSetting": "Настройки резервного копирования", - "runtimeConfig": "Используемый конфиг", - "openConfDir": "Открыть папку приложения", - "openCoreDir": "Открыть папку ядра", - "openLogsDir": "Открыть папку логов", - "checkUpdates": "Проверить обновления", - "openDevTools": "Открыть Dev Tools", - "liteModeSettings": "Настройки LightWeight Mode", - "exit": "Выход", - "exportDiagnostics": "Экспорт диагностической информации", - "vergeVersion": "Версия Clash Verge Rev" - } - }, - "theme": { - "title": "Настройки темы", - "fields": { - "primaryColor": "Основной цвет", - "secondaryColor": "Вторичный цвет", - "primaryText": "Первичный текст", - "secondaryText": "Вторичный текст", - "infoColor": "Информационный цвет", - "warningColor": "Цвет предупреждения", - "errorColor": "Цвет ошибки", - "successColor": "Цвет успеха", - "fontFamily": "Семейство шрифтов", - "cssInjection": "Внедрение CSS" - }, - "actions": { - "editCss": "Edit CSS" - }, - "dialogs": { - "editCssTitle": "Edit CSS" - } - }, - "layout": { - "title": "Настройки раскладки", - "fields": { - "preferSystemTitlebar": "Prefer System Titlebar", - "trafficGraph": "График трафика", - "memoryUsage": "Использование памяти", - "proxyGroupIcon": "Иконка Группы прокси", - "hoverNavigator": "Hover Jump Navigator", - "hoverNavigatorDelay": "Hover Jump Navigator Delay", - "navIcon": "Иконки навигации", - "trayIcon": "Иконка в трее", - "showProxyGroupsInline": "Show Proxy Groups Inline", - "commonTrayIcon": "Общий значок в трее", - "systemProxyTrayIcon": "Значок системного прокси в трее", - "tunTrayIcon": "Значок TUN в трее", - "enableTrayIcon": "Показывать значок в трее", - "enableTraySpeed": "Показывать скорость в трее" - }, - "tooltips": { - "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", - "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" - }, - "options": { - "icon": { - "monochrome": "Монохромные", - "colorful": "Цветные", - "disable": "Отключить" - } - } - } - } - }, - "modals": { - "clashPort": { - "title": "Настройка порта", - "fields": { - "mixed": "Смешанный прокси-порт", - "socks": "Порт Socks-прокси", - "http": "Порт Http(s)-прокси", - "redir": "Порт прозрачного прокси Redir", - "tproxy": "Порт прозрачного прокси Tproxy" - }, - "actions": { - "random": "Случайный порт" - }, - "messages": { - "saved": "Port settings saved", - "saveFailed": "Failed to save port settings" - } - }, - "clashCore": { - "variants": { - "release": "Официальная версия", - "alpha": "Альфа-версия" - } - }, - "liteMode": { - "title": "Настройки LightWeight Mode", - "actions": { - "enterNow": "Войти в LightWeight Mode" - }, - "toggles": { - "autoEnter": "Автоматический вход в LightWeight Mode" - }, - "tooltips": { - "autoEnter": "Автоматически включать LightWeight Mode, если окно закрыто определенное время" - }, - "fields": { - "delay": "Задержка включения LightWeight Mode" - }, - "messages": { - "autoEnterHint": "При закрытии окна LightWeight Mode будет автоматически активирован через {{n}} минут" - } - }, - "backup": { - "title": "Настройки резервного копирования", - "tabs": { - "local": "Local backup", - "webdav": "WebDAV backup" - }, - "actions": { - "selectTarget": "Select backup target", - "backup": "Резервное копирование", - "export": "Export", - "exportBackup": "Export Backup", - "deleteBackup": "Удалить резервную копию", - "restore": "Восстановить", - "restoreBackup": "Восстановить резервную копию" - }, - "fields": { - "webdavUrl": "URL-адрес сервера WebDAV http(s)://", - "username": "Имя пользователя", - "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." - }, - "messages": { - "webdavUrlRequired": "URL-адрес WebDAV не может быть пустым", - "invalidWebdavUrl": "Неверный формат URL-адреса WebDAV", - "usernameRequired": "Имя пользователя не может быть пустым", - "passwordRequired": "Пароль не может быть пустым", - "webdavConfigSaved": "Конфигурация WebDAV успешно сохранена", - "webdavConfigSaveFailed": "Не удалось сохранить конфигурацию WebDAV: {{error}}", - "backupCreated": "Резервная копия успешно создана", - "backupFailed": "Ошибка резервного копирования: {{error}}", - "localBackupCreated": "Local backup created successfully", - "localBackupFailed": "Local backup failed", - "restoreSuccess": "Восстановление успешно выполнено, приложение перезапустится через 1 секунду", - "localBackupExported": "Local backup exported successfully", - "localBackupExportFailed": "Failed to export local backup", - "confirmDelete": "Вы уверены, что хотите удалить этот файл резервной копии?", - "confirmRestore": "Вы уверены, что хотите восстановить этот файл резервной копии?" - }, - "table": { - "filename": "Имя файла", - "backupTime": "Время резервного копирования", - "actions": "Действия", - "noBackups": "Нет доступных резервных копий", - "rowsPerPage": "Rows per page" - } - }, - "misc": { - "title": "Расширенные настройки", - "fields": { - "appLogLevel": "Уровень журнала приложения", - "appLogMaxSize": "App Log Max Size", - "appLogMaxCount": "App Log Max Count", - "autoCloseConnections": "Автоматическое закрытие соединений", - "autoCheckUpdate": "Автоматическая проверка обновлений", - "enableBuiltinEnhanced": "Включить встроенные улучшения", - "proxyLayoutColumns": "Количество столбцов в макете прокси", - "autoLogClean": "Автоматическая очистка логов", - "autoDelayDetection": "Автоматическое измерение задержки", - "defaultLatencyTest": "Ссылка на тест задержки", - "defaultLatencyTimeout": "Таймаут задержки по умолчанию" - }, - "tooltips": { - "autoCloseConnections": "Закрыть установленные соединения при изменении выбора группы прокси или режима прокси", - "enableBuiltinEnhanced": "Обработка совместимости для файла конфигурации", - "autoDelayDetection": "Периодически проверяет задержку текущего узла в фоновом режиме", - "defaultLatencyTest": "Используется только для тестирования HTTP-запросов клиента и не влияет на файл конфигурации" - }, - "options": { - "proxyLayoutColumns": { - "auto": "Авто колонки" - }, - "autoLogClean": { - "never": "Никогда не очищать", - "retainDays": "Сохранять {{n}} дней" - } - } - }, - "update": { - "title": "New Version v{{version}}", - "actions": { - "goToRelease": "Перейти на страницу релизов", - "update": "Обновить" - }, - "messages": { - "portableError": "Портативная версия не поддерживает обновление внутри приложения, пожалуйста, скачайте и замените файлы вручную", - "breakChangeError": "Это крупное обновление, которое не поддерживает обновление внутри приложения. Пожалуйста, удалите его и загрузите установочный файл вручную." - } - }, - "sysproxy": { - "title": "Настройка системного прокси", - "fieldsets": { - "currentStatus": "Текущий системный прокси" - }, - "fields": { - "enableStatus": "Статус включения", - "serverAddr": "Адрес сервера: ", - "pacUrl": "Адрес PAC: ", - "proxyHost": "Хост прокси", - "usePacMode": "Используйте режим PAC", - "proxyGuard": "Proxy Guard", - "guardDuration": "Период защиты", - "alwaysUseDefaultBypass": "Всегда использовать стандартное обходное решение", - "proxyBypass": "Игнорируемые адреса: ", - "bypass": "Игнорируемые адреса: ", - "pacScriptContent": "Содержание сценария PAC" - }, - "tooltips": { - "proxyGuard": "Включите эту функцию чтобы предотвратить изменение настроек прокси-сервера операционной системы другим ПО" - }, - "messages": { - "durationTooShort": "Продолжительность работы прокси-демона не может быть меньше 1 секунды", - "invalidBypass": "Неверный формат обхода", - "invalidProxyHost": "Неверный формат хоста прокси" - }, - "actions": { - "editPac": "Редактировать PAC" - } - }, - "tun": { - "title": "Режим TUN", - "fields": { - "stack": "Стек", - "device": "Device Name", - "autoRoute": "Автоматическая маршрутизация", - "strictRoute": "Строгая маршрутизация", - "autoDetectInterface": "Автоопределение интерфейса", - "dnsHijack": "DNS-перехват", - "mtu": "MTU" - }, - "tooltips": { - "dnsHijack": "Please use , to separate multiple DNS servers" - }, - "messages": { - "applied": "Настройки применены" - } - }, - "dns": { - "dialog": { - "title": "Переопределение настроек DNS", - "warning": "Если вы не знакомы с этими настройками, пожалуйста, не изменяйте и не отключайте их" - }, - "sections": { - "general": "Настройки DNS", - "fallbackFilter": "Настройки фильтра Fallback", - "hosts": "Hosts Settings" - }, - "fields": { - "enable": "Включить DNS", - "listen": "Прослушивание DNS", - "enhancedMode": "Enhanced Mode", - "fakeIpRange": "Диапазон FakeIP", - "fakeIpFilterMode": "FakeIP Filter Mode", - "ipv6": { - "label": "IPv6", - "description": "Enable IPv6 DNS resolution" - }, - "preferH3": { - "label": "Предпочитать H3", - "description": "DNS DOH использует http/3" - }, - "respectRules": { - "label": "Приоритизировать правила", - "description": "Соединения DNS следуют правилам маршрутизации" - }, - "useHosts": { - "label": "Использовать файл Hosts", - "description": "Включить разрешение хостов через файл Hosts" - }, - "useSystemHosts": { - "label": "Использовать системный файл Hosts", - "description": "Включить разрешение хостов через системный файл Hosts" - }, - "directPolicy": { - "label": "Прямой сервер имен следует политике", - "description": "Следовать ли политике DNS-серверов" - }, - "defaultNameserver": { - "label": "DNS-сервер по умолчанию", - "description": "DNS-серверы по умолчанию, используемые для разрешения адресов серверов DNS" - }, - "nameserver": { - "label": "DNS-сервер", - "description": "Список DNS-серверов, разделенных запятой" - }, - "fallback": { - "label": "Fallback", - "description": "Список резервных DNS-серверов, разделенных запятой" - }, - "proxy": { - "label": "Proxy Server Nameserver", - "description": "DNS-серверы для разрешения домена прокси-узлов" - }, - "directNameserver": { - "label": "DNS-сервер для прямых соединений", - "description": "Список DNS-серверов для прямых соединений, разделенных запятой" - }, - "fakeIpFilter": { - "label": "Фильтр FakeIP", - "description": "Домены, которые пропускают разрешение FakeIP, разделенные запятой" - }, - "nameserverPolicy": { - "label": "Политика серверов имен", - "description": "DNS-сервер, специфичный для домена, несколько серверов разделяются знаком ';'" - }, - "geoipFiltering": { - "label": "Фильтрация GeoIP", - "description": "Включить фильтрацию GeoIP" - }, - "geoipCode": "Код GeoIP", - "fallbackIpCidr": { - "label": "Fallback IP CIDR", - "description": "Диапазоны IP-адресов, не использующие резервные серверы, разделенные запятой" - }, - "fallbackDomain": { - "label": "Fallback домены", - "description": "Домены, использующие резервные серверы, разделенные запятой" - }, - "hosts": { - "label": "Hosts", - "description": "Custom domain to IP or domain mapping" - } - }, - "messages": { - "saved": "DNS settings saved", - "configError": "DNS configuration error:" - }, - "errors": { - "invalid": "Invalid configuration" - } - }, - "webUI": { - "actions": { - "openUrl": "Перейти по адресу" - }, - "title": "Веб-интерфейс", - "messages": { - "supportedPlaceholders": "Поддерживаются %host, %port, %secret", - "placeholderInstruction": "Замените хост, порт и секрет на %host, %port, %secret" - } - }, - "hotkey": { - "toggles": { - "enableGlobal": "Включить глобальную горячую клавишу" - }, - "title": "Настройки сочетаний клавиш", - "functions": { - "rule": "Режим правил", - "global": "Глобальный режим", - "openOrCloseDashboard": "Открыть/Закрыть панель управления", - "toggleSystemProxy": "Включить/Отключить системный прокси", - "toggleTunMode": "Включить/Отключить режим TUN", - "entryLightweightMode": "Вход в LightWeight Mode", - "direct": "Прямой режим" - } - }, - "password": { - "prompts": { - "enterRoot": "Пожалуйста, введите ваш пароль root" - } - }, - "networkInterface": { - "title": "Сетевой интерфейс", - "fields": { - "ipAddress": "IP адрес", - "macAddress": "MAC адрес" - } - } - }, - "feedback": { - "notifications": { - "clash": { - "restartSuccess": "Ядро перезапущено", - "versionUpdated": "Ядро обновлено до последней версии", - "changeSuccess": "Ядро успешно изменено", - "changeFailed": "Не удалось сменить ядро", - "geoDataUpdated": "Файлы GeoData обновлены" - }, - "clashService": { - "installSuccess": "Служба успешно установлена", - "uninstallSuccess": "Служба успешно удалена" - }, - "updater": { - "withClashProxySuccess": "Update with Clash proxy successfully", - "withClashProxyFailed": "Update failed even with Clash proxy" - } - } - }, - "statuses": { - "clash": { - "stopping": "Stopping Core...", - "restarting": "Restarting Core..." - }, - "clashService": { - "installing": "Установка службы...", - "uninstalling": "Uninstalling Service..." - } - } - }, - "layout": { - "components": { - "navigation": { - "tabs": { - "home": "Главная", - "proxies": "Прокси", - "profiles": "Профили", - "connections": "Соединения", - "rules": "Правила", - "logs": "Логи", - "unlock": "Тест", - "settings": "Настройки" - }, - "menu": { - "reorderMode": "Menu reorder mode", - "unlock": "Unlock menu order", - "lock": "Lock menu order" - } - } - } - } -} diff --git a/src/locales/ru/connections.json b/src/locales/ru/connections.json new file mode 100644 index 00000000..09d0caf9 --- /dev/null +++ b/src/locales/ru/connections.json @@ -0,0 +1,28 @@ +{ + "page": { + "title": "Соединения" + }, + "components": { + "fields": { + "host": "Хост", + "dlSpeed": "Скорость скачивания", + "ulSpeed": "Скорость загрузки", + "chains": "Цепочки", + "rule": "Правило", + "process": "Процесс", + "time": "Время подключения", + "source": "Исходный адрес", + "destination": "IP-адрес назначения", + "destinationPort": "Целевой порт", + "type": "Тип" + }, + "order": { + "default": "Default", + "uploadSpeed": "Скорость загрузки", + "downloadSpeed": "Скорость скачивания" + }, + "actions": { + "closeConnection": "Закрыть соединение" + } + } +} diff --git a/src/locales/ru/home.json b/src/locales/ru/home.json new file mode 100644 index 00000000..06419297 --- /dev/null +++ b/src/locales/ru/home.json @@ -0,0 +1,138 @@ +{ + "page": { + "tooltips": { + "lightweightMode": "LightWeight Mode", + "manual": "Документация", + "settings": "Настройки главной страницы" + }, + "cards": { + "trafficStats": "Статистика по трафику", + "networkSettings": "Настройки сети", + "proxyMode": "Режим работы" + }, + "settings": { + "cards": { + "profile": "Карточка профиля", + "currentProxy": "Карточка текущего прокси", + "network": "Карточка настроек сети", + "proxyMode": "Карточка режима работы", + "traffic": "Карточка статистики по трафику", + "tests": "Карточка тестов доступности веб-сайтов", + "ip": "Информация об IP", + "clashInfo": "Информация о Clash", + "systemInfo": "Информация о системе" + }, + "title": "Настройки главной страницы" + }, + "title": "Главная" + }, + "components": { + "proxyTun": { + "status": { + "systemProxyEnabled": "Системный прокси включен, ваши приложения будут получать доступ к сети через него", + "systemProxyDisabled": "Системный прокси отключен, большинству пользователей рекомендуется включить эту опцию", + "tunModeServiceRequired": "Режим TUN требует установленную службу Clash Verge", + "tunModeEnabled": "Режим TUN включен, приложения будут получать доступ к сети через виртуальную сетевую карту", + "tunModeDisabled": "Режим TUN отключен" + }, + "tooltips": { + "systemProxy": "Разрешить изменение настроек прокси-сервера операционной системы. Если разрешение не удастся, измените настройки прокси-сервера операционной системы вручную", + "tunMode": "Режим TUN может перехватить трафик всех приложений, подходит для приложений, которые не работают в режиме системного прокси." + } + }, + "clashInfo": { + "title": "Информация о Clash", + "fields": { + "coreVersion": "Версия ядра", + "systemProxyAddress": "Адрес системного прокси", + "mixedPort": "Mixed Port", + "uptime": "Время работы", + "rulesCount": "Количество правил" + } + }, + "systemInfo": { + "title": "Информация о системе", + "fields": { + "osInfo": "Версия ОС", + "autoLaunch": "Автозапуск", + "runningMode": "Режим работы", + "lastCheckUpdate": "Последняя проверка обновлений", + "vergeVersion": "Версия Clash Verge Rev" + }, + "actions": { + "settings": "Настройки" + }, + "tooltips": { + "autoLaunchAdmin": "Administrator mode may not support auto launch" + }, + "badges": { + "adminMode": "Administrator Mode", + "serviceMode": "Режим системной службы", + "sidecarMode": "Пользовательский режим", + "adminServiceMode": "Admin + Service Mode" + } + }, + "ipInfo": { + "title": "Информация об IP", + "labels": { + "ip": "IP", + "asn": "ASN", + "isp": "ISP", + "org": "ORG", + "location": "Location", + "timezone": "Timezone", + "autoRefresh": "Автоматическое обновление через", + "unknown": "Unknown" + }, + "errors": { + "load": "Не удалось получить данные IP" + } + }, + "currentProxy": { + "title": "Текущий сервер", + "actions": { + "refreshDelay": "Проверка задержки" + }, + "labels": { + "globalMode": "Глобальный режим", + "directMode": "Прямой режим", + "group": "Группа", + "proxy": "Прокси", + "noActiveNode": "Нет активного прокси-узла" + } + }, + "tests": { + "title": "Проверка доступности веб-сайтов" + }, + "traffic": { + "metrics": { + "uploadSpeed": "Скорость загрузки", + "downloadSpeed": "Скорость скачивания", + "activeConnections": "Активные соединения", + "memoryUsage": "Использование памяти" + }, + "legends": { + "upload": "Загрузка", + "download": "Скачивание" + }, + "patterns": { + "minutes": "{{time}} Minutes" + } + }, + "clashMode": { + "errors": { + "communication": "Core communication error" + }, + "labels": { + "rule": "Режим правил", + "global": "Глобальный режим", + "direct": "Прямой режим" + }, + "descriptions": { + "rule": "Automatically choose proxies according to the rule set.", + "global": "Forward all network requests through the selected proxy.", + "direct": "Bypass the proxy and connect to the internet directly." + } + } + } +} diff --git a/src/locales/ru/index.ts b/src/locales/ru/index.ts new file mode 100644 index 00000000..2977171d --- /dev/null +++ b/src/locales/ru/index.ts @@ -0,0 +1,27 @@ +import shared from "./shared.json"; +import profiles from "./profiles.json"; +import proxies from "./proxies.json"; +import connections from "./connections.json"; +import tests from "./tests.json"; +import logs from "./logs.json"; +import rules from "./rules.json"; +import home from "./home.json"; +import unlock from "./unlock.json"; +import settings from "./settings.json"; +import layout from "./layout.json"; + +const resources = { + "shared": shared, + "profiles": profiles, + "proxies": proxies, + "connections": connections, + "tests": tests, + "logs": logs, + "rules": rules, + "home": home, + "unlock": unlock, + "settings": settings, + "layout": layout, +}; + +export default resources; diff --git a/src/locales/ru/layout.json b/src/locales/ru/layout.json new file mode 100644 index 00000000..ed99bada --- /dev/null +++ b/src/locales/ru/layout.json @@ -0,0 +1,21 @@ +{ + "components": { + "navigation": { + "tabs": { + "home": "Главная", + "proxies": "Прокси", + "profiles": "Профили", + "connections": "Соединения", + "rules": "Правила", + "logs": "Логи", + "unlock": "Тест", + "settings": "Настройки" + }, + "menu": { + "reorderMode": "Menu reorder mode", + "unlock": "Unlock menu order", + "lock": "Lock menu order" + } + } + } +} diff --git a/src/locales/ru/logs.json b/src/locales/ru/logs.json new file mode 100644 index 00000000..523666c1 --- /dev/null +++ b/src/locales/ru/logs.json @@ -0,0 +1,5 @@ +{ + "page": { + "title": "Логи" + } +} diff --git a/src/locales/ru/profiles.json b/src/locales/ru/profiles.json new file mode 100644 index 00000000..85c104a1 --- /dev/null +++ b/src/locales/ru/profiles.json @@ -0,0 +1,182 @@ +{ + "page": { + "actions": { + "updateAll": "Обновить все профили", + "viewRuntimeConfig": "Просмотреть используемый конфиг", + "reactivate": "Перезапустить профиль", + "import": "Импорт" + }, + "batch": { + "actions": { + "delete": "Удалить выбранные профили", + "selectAll": "Выбрать все", + "deselectAll": "Отменить выбор всех", + "done": "Готово" + }, + "summary": { + "selected": "Выбрано", + "items": "элементы" + }, + "title": "Пакетные операции" + }, + "importForm": { + "placeholder": "URL профиля", + "actions": { + "paste": "Вставить" + } + }, + "feedback": { + "errors": { + "invalidUrl": "Недопустимая ссылка на профиль, введите адрес, начинающийся с http:// или https://", + "onlyYaml": "Поддерживаются только файлы YAML" + }, + "notifications": { + "importRetry": "Import failed, retrying with Clash proxy...", + "importFail": "Import failed even with Clash proxy", + "importNeedsRefresh": "Profile imported but may need manual refresh", + "importSuccess": "Profile imported successfully, please restart if not visible", + "profileSwitched": "Профиль изменен", + "profileReactivated": "Профиль перезапущен", + "switchInterrupted": "Profile switch interrupted by new selection", + "batchDeleted": "Выбранные профили успешно удалены" + }, + "notices": { + "forceRefreshCompleted": "Force refresh completed", + "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" + } + }, + "title": "Профили" + }, + "components": { + "card": { + "labels": { + "clickToImport": "Нажмите, чтобы импортировать подписку" + } + }, + "fileInput": { + "chooseFile": "Выбрать файл" + }, + "menu": { + "home": "Главная", + "select": "Выбрать", + "editInfo": "Изменить информацию", + "editFile": "Изменить файл", + "editRules": "Редактировать правила", + "editProxies": "Редактировать прокси", + "editGroups": "Редактировать группы прокси", + "extendConfig": "Изменить Merge", + "extendScript": "Изменить Script", + "openFile": "Открыть файл", + "update": "Обновить", + "updateViaProxy": "Update via proxy" + }, + "more": { + "global": { + "merge": "Global Merge", + "script": "Global Script" + }, + "chips": { + "merge": "Merge", + "script": "Script" + } + }, + "profileItem": { + "tooltips": { + "showLast": "Click to show last update time", + "showNext": "Click to show next update" + }, + "status": { + "lastUpdateFailed": "Last Update failed", + "nextUp": "Next Up", + "noSchedule": "No schedule", + "unknown": "Unknown", + "autoUpdateDisabled": "Auto update disabled" + } + } + }, + "modals": { + "profileForm": { + "title": { + "create": "Создать профиль", + "edit": "Изменить профиль" + }, + "fields": { + "type": "Тип", + "description": "Описание", + "subscriptionUrl": "URL подписки", + "httpTimeout": "HTTP Request Timeout", + "updateInterval": "Интервал обновления", + "useSystemProxy": "Использовать системный прокси для обновления", + "useClashProxy": "Использовать прокси Clash для обновления", + "acceptInvalidCerts": "Принимать недействительные сертификаты (ОПАСНО)", + "allowAutoUpdate": "Allow Auto Update" + }, + "feedback": { + "notifications": { + "creationRetry": "Profile creation failed, retrying with Clash proxy...", + "creationSuccess": "Profile creation succeeded with Clash proxy" + } + } + }, + "proxiesEditor": { + "title": "Редактировать прокси", + "placeholders": { + "multiUri": "Используйте символы новой строки для нескольких URI (поддерживается кодировка Base64)" + }, + "actions": { + "prepend": "Добавить прокси в начало", + "append": "Добавить прокси в конец" + } + }, + "groupsEditor": { + "title": "Редактировать группы прокси", + "errors": { + "nameRequired": "Требуется имя группы", + "nameExists": "Имя группы уже существует" + }, + "fields": { + "type": "Тип группы", + "name": "Имя группы", + "icon": "Иконка Группы прокси", + "proxies": "Использовать прокси", + "provider": "Использовать провайдера", + "healthCheckUrl": "URL проверки здоровья", + "expectedStatus": "Ожидаемый статус", + "interval": "Интервал", + "maxFailedTimes": "Максимальное количество неудач", + "interfaceName": "Имя интерфейса", + "routingMark": "Марка маршрутизации", + "filter": "Фильтр", + "excludeFilter": "Исключить фильтр", + "excludeType": "Тип исключения", + "includeAll": "Включить все прокси и провайдеры", + "includeAllProxies": "Включить все прокси", + "includeAllProviders": "Включить всех провайдеров" + }, + "toggles": { + "lazy": "Ленивый", + "disableUdp": "Отключить UDP", + "hidden": "Скрытый" + }, + "actions": { + "prepend": "Добавить группу в начало", + "append": "Добавить группу в конец" + } + }, + "editor": { + "actions": { + "format": "Форматировать документ" + }, + "messages": { + "readOnly": "Невозможно редактировать в режиме только для чтения" + } + }, + "confirmDelete": { + "title": "Подтвердите удаление", + "message": "Эта операция необратима" + }, + "logViewer": { + "title": "Консоль скрипта" + } + } +} diff --git a/src/locales/ru/proxies.json b/src/locales/ru/proxies.json new file mode 100644 index 00000000..fca9ccf2 --- /dev/null +++ b/src/locales/ru/proxies.json @@ -0,0 +1,90 @@ +{ + "page": { + "modes": { + "rule": "Rule", + "global": "Global", + "direct": "Direct" + }, + "actions": { + "toggleChain": "🔗 Цепной прокси", + "connect": "Connect", + "disconnect": "Disconnect", + "connecting": "Connecting...", + "clearChainConfig": "Delete Chain Config" + }, + "provider": { + "title": "Провайдер прокси", + "actions": { + "updateAll": "Обновить все", + "update": "Обновить" + } + }, + "rules": { + "title": "Proxy Rules", + "select": "Select Rules" + }, + "labels": { + "proxyCount": "Proxy Count", + "delayCheckReset": "Проверка задержки для отмены фиксированного" + }, + "tooltips": { + "locate": "Местоположение", + "delayCheck": "Проверка задержки", + "sortDefault": "Сортировать по умолчанию", + "sortDelay": "Сортировать по задержке", + "sortName": "Сортировать по названию", + "delayCheckUrl": "URL проверки задержки", + "showBasic": "Отображать меньше сведений о прокси", + "showDetail": "Отображать больше сведений о прокси", + "filter": "Фильтр" + }, + "placeholders": { + "delayCheckUrl": "URL проверки задержки" + }, + "chain": { + "header": "Конфигурация цепочки прокси", + "empty": "Цепочка прокси не настроена", + "instruction": "Нажимайте узлы по порядку, чтобы добавить в цепочку прокси", + "minimumNodes": "Chain proxy requires at least 2 nodes", + "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", + "connectFailed": "Failed to connect to proxy chain", + "disconnectFailed": "Failed to disconnect from proxy chain", + "duplicateNode": "Proxy node already exists in chain" + }, + "messages": { + "directMode": "Прямой режим" + }, + "title": { + "default": "Группы прокси", + "chainMode": "Proxy Chain Mode" + } + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "components": { + "enums": { + "strategies": { + "select": "Выбор прокси вручную", + "url-test": "Выбор прокси на основе задержки теста URL", + "fallback": "Переключение на другой прокси при ошибке", + "load-balance": "Распределение прокси на основе балансировки нагрузки", + "relay": "Передача через определенную цепочку прокси" + }, + "policies": { + "DIRECT": "Данные направляются напрямую наружу", + "REJECT": "Перехватывает запросы", + "REJECT-DROP": "Отклоняет запросы", + "PASS": "Пропускает это правило при совпадении" + } + } + } +} diff --git a/src/locales/ru/rules.json b/src/locales/ru/rules.json new file mode 100644 index 00000000..71b85ee0 --- /dev/null +++ b/src/locales/ru/rules.json @@ -0,0 +1,82 @@ +{ + "page": { + "provider": { + "trigger": "Провайдеры правил", + "dialogTitle": "Провайдеры правил", + "actions": { + "updateAll": "Обновить все", + "update": "Обновить" + } + }, + "title": "Правила" + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "modals": { + "editor": { + "form": { + "labels": { + "type": "Тип правила", + "content": "Содержимое правила", + "proxyPolicy": "Политика прокси" + }, + "toggles": { + "noResolve": "Без разрешения" + }, + "actions": { + "prependRule": "Добавить правило в начало", + "appendRule": "Добавить правило в конец" + }, + "validation": { + "conditionRequired": "Требуется условие правила", + "invalidRule": "Недействительное правило" + } + }, + "ruleTypes": { + "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": "Соответствует USER ID в Linux", + "IN-TYPE": "Соответствует типу входящего соединения", + "IN-USER": "Соответствует имени пользователя входящего соединения", + "IN-NAME": "Соответствует имени входящего соединения", + "SUB-RULE": "Подправило", + "RULE-SET": "Соответствует набору правил", + "AND": "Логическое И", + "OR": "Логическое ИЛИ", + "NOT": "Логическое НЕ", + "MATCH": "Соответствует всем запросам" + }, + "title": "Редактировать правила" + } + } +} diff --git a/src/locales/ru/settings.json b/src/locales/ru/settings.json new file mode 100644 index 00000000..63dd9438 --- /dev/null +++ b/src/locales/ru/settings.json @@ -0,0 +1,571 @@ +{ + "page": { + "actions": { + "manual": "Документация", + "telegram": "Telegram-канал", + "github": "GitHub репозиторий" + }, + "title": "Настройки" + }, + "sections": { + "system": { + "title": "Настройки системы", + "toggles": { + "tunMode": "Режим TUN", + "systemProxy": "Системный прокси" + }, + "tooltips": { + "autoLaunchAdmin": "Administrator mode may not support auto launch", + "silentStart": "Запускать программу в фоновом режиме без отображения панели" + }, + "fields": { + "autoLaunch": "Автозапуск", + "silentStart": "Тихий запуск" + }, + "notifications": { + "tunMode": { + "autoDisabled": "TUN Mode automatically disabled due to service unavailable", + "autoDisableFailed": "Failed to disable TUN Mode automatically" + } + } + }, + "proxyControl": { + "tooltips": { + "systemProxy": "Разрешить изменение настроек прокси-сервера операционной системы. Если разрешение не удастся, измените настройки прокси-сервера операционной системы вручную", + "tunMode": "Режим Tun: захватывает весь системный трафик, при включении нет необходимости включать системный прокси-сервер.", + "tunUnavailable": "TUN requires Service Mode or Admin Mode" + }, + "actions": { + "installService": "Установить службу", + "uninstallService": "Uninstall Service" + }, + "fields": { + "systemProxy": "Системный прокси", + "tunMode": "Режим TUN" + } + }, + "externalController": { + "title": "Адрес прослушивания внешнего контроллера", + "fields": { + "enable": "Включить внешний контроллер", + "address": "Адрес прослушивания внешнего контроллера", + "secret": "Секрет" + }, + "placeholders": { + "address": "Обязательно", + "secret": "Рекомендуется" + }, + "tooltips": { + "copy": "Копировать в буфер обмена" + }, + "messages": { + "addressRequired": "Адрес контроллера не может быть пустым", + "secretRequired": "Секрет не может быть пустым", + "copyFailed": "Не удалось скопировать", + "controllerCopied": "Адрес контроллера скопирован в буфер обмена", + "secretCopied": "Секрет скопирован в буфер обмена" + } + }, + "externalCors": { + "title": "Конфигурация внешнего CORS", + "fields": { + "allowPrivateNetwork": "Разрешить доступ к частной сети", + "allowedOrigins": "Разрешённые источники" + }, + "placeholders": { + "origin": "Введите корректный URL" + }, + "actions": { + "add": "Добавить" + }, + "messages": { + "alwaysIncluded": "Всегда включаемые источники: {{urls}}" + }, + "tooltips": { + "open": "Настройки внешнего CORS" + } + }, + "appearance": { + "light": "Light", + "dark": "Dark", + "system": "System" + }, + "clash": { + "title": "Настройки Clash", + "form": { + "fields": { + "allowLan": "Разрешить доступ из локальной сети", + "dnsOverwrite": "Переопределение настроек DNS", + "ipv6": "IPv6", + "unifiedDelay": "Точная задержка", + "logLevel": "Уровень логов", + "portConfig": "Настройка порта", + "external": "Внешний контроллер", + "webUI": "Веб-интерфейс", + "clashCore": "Ядро Clash", + "openUwpTool": "Открыть UWP инструмент", + "updateGeoData": "Обновить GeoData" + }, + "tooltips": { + "networkInterface": "Сетевой интерфейс", + "unifiedDelay": "Когда унифицированная(точная) задержка включена, будут выполнены два теста задержки, чтобы устранить различия в задержке между разными типами узлов, вызванные подтверждением соединения и т. д", + "logLevel": "Это действует только на файлы журнала ядра в служебном файле в каталоге журналов.", + "openUwpTool": "С Windows 8 приложения UWP (такие как Microsoft Store) ограничены в прямом доступе к сетевым службам локального хоста, и этот инструмент позволяет обойти это ограничение" + }, + "options": { + "logLevel": { + "debug": "Debug", + "info": "Info", + "warning": "Warn", + "error": "Error", + "silent": "Silent" + } + } + } + } + }, + "components": { + "verge": { + "basic": { + "title": "Основные настройки Verge", + "actions": { + "browse": "Просмотреть" + }, + "trayOptions": { + "showMainWindow": "Показать главное окно", + "showTrayMenu": "Показать меню в трее", + "disable": "Отключить" + }, + "fields": { + "language": "Язык", + "themeMode": "Цветовая тема", + "trayClickEvent": "Событие при щелчке по иконке в трее", + "copyEnvType": "Скопировать тип Env", + "startPage": "Главная страница", + "startupScript": "Скрипт запуска", + "themeSetting": "Настройки темы", + "layoutSetting": "Настройки раскладки", + "misc": "Расширенные настройки", + "hotkeySetting": "Настройки сочетаний клавиш" + } + }, + "advanced": { + "title": "Расширенные настройки Verge", + "tooltips": { + "backupInfo": "Поддерживает файлы конфигурации резервного копирования WebDAV", + "openConfDir": "Если программное обеспечение работает неправильно, сделайте резервную копию и удалите все файлы в этой папке, а затем перезапустите ПО", + "liteMode": "Режим, в котором работает только ядро Clash, а графический интрефейс закрыт" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "Обновление не требуется", + "versionCopied": "Version copied to clipboard" + }, + "fields": { + "backupSetting": "Настройки резервного копирования", + "runtimeConfig": "Используемый конфиг", + "openConfDir": "Открыть папку приложения", + "openCoreDir": "Открыть папку ядра", + "openLogsDir": "Открыть папку логов", + "checkUpdates": "Проверить обновления", + "openDevTools": "Открыть Dev Tools", + "liteModeSettings": "Настройки LightWeight Mode", + "exit": "Выход", + "exportDiagnostics": "Экспорт диагностической информации", + "vergeVersion": "Версия Clash Verge Rev" + } + }, + "theme": { + "title": "Настройки темы", + "fields": { + "primaryColor": "Основной цвет", + "secondaryColor": "Вторичный цвет", + "primaryText": "Первичный текст", + "secondaryText": "Вторичный текст", + "infoColor": "Информационный цвет", + "warningColor": "Цвет предупреждения", + "errorColor": "Цвет ошибки", + "successColor": "Цвет успеха", + "fontFamily": "Семейство шрифтов", + "cssInjection": "Внедрение CSS" + }, + "actions": { + "editCss": "Edit CSS" + }, + "dialogs": { + "editCssTitle": "Edit CSS" + } + }, + "layout": { + "title": "Настройки раскладки", + "fields": { + "preferSystemTitlebar": "Prefer System Titlebar", + "trafficGraph": "График трафика", + "memoryUsage": "Использование памяти", + "proxyGroupIcon": "Иконка Группы прокси", + "hoverNavigator": "Hover Jump Navigator", + "hoverNavigatorDelay": "Hover Jump Navigator Delay", + "navIcon": "Иконки навигации", + "trayIcon": "Иконка в трее", + "showProxyGroupsInline": "Show Proxy Groups Inline", + "commonTrayIcon": "Общий значок в трее", + "systemProxyTrayIcon": "Значок системного прокси в трее", + "tunTrayIcon": "Значок TUN в трее", + "enableTrayIcon": "Показывать значок в трее", + "enableTraySpeed": "Показывать скорость в трее" + }, + "tooltips": { + "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", + "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" + }, + "options": { + "icon": { + "monochrome": "Монохромные", + "colorful": "Цветные", + "disable": "Отключить" + } + } + } + } + }, + "modals": { + "clashPort": { + "title": "Настройка порта", + "fields": { + "mixed": "Смешанный прокси-порт", + "socks": "Порт Socks-прокси", + "http": "Порт Http(s)-прокси", + "redir": "Порт прозрачного прокси Redir", + "tproxy": "Порт прозрачного прокси Tproxy" + }, + "actions": { + "random": "Случайный порт" + }, + "messages": { + "saved": "Port settings saved", + "saveFailed": "Failed to save port settings" + } + }, + "clashCore": { + "variants": { + "release": "Официальная версия", + "alpha": "Альфа-версия" + } + }, + "liteMode": { + "title": "Настройки LightWeight Mode", + "actions": { + "enterNow": "Войти в LightWeight Mode" + }, + "toggles": { + "autoEnter": "Автоматический вход в LightWeight Mode" + }, + "tooltips": { + "autoEnter": "Автоматически включать LightWeight Mode, если окно закрыто определенное время" + }, + "fields": { + "delay": "Задержка включения LightWeight Mode" + }, + "messages": { + "autoEnterHint": "При закрытии окна LightWeight Mode будет автоматически активирован через {{n}} минут" + } + }, + "backup": { + "title": "Настройки резервного копирования", + "tabs": { + "local": "Local backup", + "webdav": "WebDAV backup" + }, + "actions": { + "selectTarget": "Select backup target", + "backup": "Резервное копирование", + "export": "Export", + "exportBackup": "Export Backup", + "deleteBackup": "Удалить резервную копию", + "restore": "Восстановить", + "restoreBackup": "Восстановить резервную копию" + }, + "fields": { + "webdavUrl": "URL-адрес сервера WebDAV http(s)://", + "username": "Имя пользователя", + "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." + }, + "messages": { + "webdavUrlRequired": "URL-адрес WebDAV не может быть пустым", + "invalidWebdavUrl": "Неверный формат URL-адреса WebDAV", + "usernameRequired": "Имя пользователя не может быть пустым", + "passwordRequired": "Пароль не может быть пустым", + "webdavConfigSaved": "Конфигурация WebDAV успешно сохранена", + "webdavConfigSaveFailed": "Не удалось сохранить конфигурацию WebDAV: {{error}}", + "backupCreated": "Резервная копия успешно создана", + "backupFailed": "Ошибка резервного копирования: {{error}}", + "localBackupCreated": "Local backup created successfully", + "localBackupFailed": "Local backup failed", + "restoreSuccess": "Восстановление успешно выполнено, приложение перезапустится через 1 секунду", + "localBackupExported": "Local backup exported successfully", + "localBackupExportFailed": "Failed to export local backup", + "confirmDelete": "Вы уверены, что хотите удалить этот файл резервной копии?", + "confirmRestore": "Вы уверены, что хотите восстановить этот файл резервной копии?" + }, + "table": { + "filename": "Имя файла", + "backupTime": "Время резервного копирования", + "actions": "Действия", + "noBackups": "Нет доступных резервных копий", + "rowsPerPage": "Rows per page" + } + }, + "misc": { + "title": "Расширенные настройки", + "fields": { + "appLogLevel": "Уровень журнала приложения", + "appLogMaxSize": "App Log Max Size", + "appLogMaxCount": "App Log Max Count", + "autoCloseConnections": "Автоматическое закрытие соединений", + "autoCheckUpdate": "Автоматическая проверка обновлений", + "enableBuiltinEnhanced": "Включить встроенные улучшения", + "proxyLayoutColumns": "Количество столбцов в макете прокси", + "autoLogClean": "Автоматическая очистка логов", + "autoDelayDetection": "Автоматическое измерение задержки", + "defaultLatencyTest": "Ссылка на тест задержки", + "defaultLatencyTimeout": "Таймаут задержки по умолчанию" + }, + "tooltips": { + "autoCloseConnections": "Закрыть установленные соединения при изменении выбора группы прокси или режима прокси", + "enableBuiltinEnhanced": "Обработка совместимости для файла конфигурации", + "autoDelayDetection": "Периодически проверяет задержку текущего узла в фоновом режиме", + "defaultLatencyTest": "Используется только для тестирования HTTP-запросов клиента и не влияет на файл конфигурации" + }, + "options": { + "proxyLayoutColumns": { + "auto": "Авто колонки" + }, + "autoLogClean": { + "never": "Никогда не очищать", + "retainDays": "Сохранять {{n}} дней" + } + } + }, + "update": { + "title": "New Version v{{version}}", + "actions": { + "goToRelease": "Перейти на страницу релизов", + "update": "Обновить" + }, + "messages": { + "portableError": "Портативная версия не поддерживает обновление внутри приложения, пожалуйста, скачайте и замените файлы вручную", + "breakChangeError": "Это крупное обновление, которое не поддерживает обновление внутри приложения. Пожалуйста, удалите его и загрузите установочный файл вручную." + } + }, + "sysproxy": { + "title": "Настройка системного прокси", + "fieldsets": { + "currentStatus": "Текущий системный прокси" + }, + "fields": { + "enableStatus": "Статус включения", + "serverAddr": "Адрес сервера: ", + "pacUrl": "Адрес PAC: ", + "proxyHost": "Хост прокси", + "usePacMode": "Используйте режим PAC", + "proxyGuard": "Proxy Guard", + "guardDuration": "Период защиты", + "alwaysUseDefaultBypass": "Всегда использовать стандартное обходное решение", + "proxyBypass": "Игнорируемые адреса: ", + "bypass": "Игнорируемые адреса: ", + "pacScriptContent": "Содержание сценария PAC" + }, + "tooltips": { + "proxyGuard": "Включите эту функцию чтобы предотвратить изменение настроек прокси-сервера операционной системы другим ПО" + }, + "messages": { + "durationTooShort": "Продолжительность работы прокси-демона не может быть меньше 1 секунды", + "invalidBypass": "Неверный формат обхода", + "invalidProxyHost": "Неверный формат хоста прокси" + }, + "actions": { + "editPac": "Редактировать PAC" + } + }, + "tun": { + "title": "Режим TUN", + "fields": { + "stack": "Стек", + "device": "Device Name", + "autoRoute": "Автоматическая маршрутизация", + "strictRoute": "Строгая маршрутизация", + "autoDetectInterface": "Автоопределение интерфейса", + "dnsHijack": "DNS-перехват", + "mtu": "MTU" + }, + "tooltips": { + "dnsHijack": "Please use , to separate multiple DNS servers" + }, + "messages": { + "applied": "Настройки применены" + } + }, + "dns": { + "dialog": { + "title": "Переопределение настроек DNS", + "warning": "Если вы не знакомы с этими настройками, пожалуйста, не изменяйте и не отключайте их" + }, + "sections": { + "general": "Настройки DNS", + "fallbackFilter": "Настройки фильтра Fallback", + "hosts": "Hosts Settings" + }, + "fields": { + "enable": "Включить DNS", + "listen": "Прослушивание DNS", + "enhancedMode": "Enhanced Mode", + "fakeIpRange": "Диапазон FakeIP", + "fakeIpFilterMode": "FakeIP Filter Mode", + "ipv6": { + "label": "IPv6", + "description": "Enable IPv6 DNS resolution" + }, + "preferH3": { + "label": "Предпочитать H3", + "description": "DNS DOH использует http/3" + }, + "respectRules": { + "label": "Приоритизировать правила", + "description": "Соединения DNS следуют правилам маршрутизации" + }, + "useHosts": { + "label": "Использовать файл Hosts", + "description": "Включить разрешение хостов через файл Hosts" + }, + "useSystemHosts": { + "label": "Использовать системный файл Hosts", + "description": "Включить разрешение хостов через системный файл Hosts" + }, + "directPolicy": { + "label": "Прямой сервер имен следует политике", + "description": "Следовать ли политике DNS-серверов" + }, + "defaultNameserver": { + "label": "DNS-сервер по умолчанию", + "description": "DNS-серверы по умолчанию, используемые для разрешения адресов серверов DNS" + }, + "nameserver": { + "label": "DNS-сервер", + "description": "Список DNS-серверов, разделенных запятой" + }, + "fallback": { + "label": "Fallback", + "description": "Список резервных DNS-серверов, разделенных запятой" + }, + "proxy": { + "label": "Proxy Server Nameserver", + "description": "DNS-серверы для разрешения домена прокси-узлов" + }, + "directNameserver": { + "label": "DNS-сервер для прямых соединений", + "description": "Список DNS-серверов для прямых соединений, разделенных запятой" + }, + "fakeIpFilter": { + "label": "Фильтр FakeIP", + "description": "Домены, которые пропускают разрешение FakeIP, разделенные запятой" + }, + "nameserverPolicy": { + "label": "Политика серверов имен", + "description": "DNS-сервер, специфичный для домена, несколько серверов разделяются знаком ';'" + }, + "geoipFiltering": { + "label": "Фильтрация GeoIP", + "description": "Включить фильтрацию GeoIP" + }, + "geoipCode": "Код GeoIP", + "fallbackIpCidr": { + "label": "Fallback IP CIDR", + "description": "Диапазоны IP-адресов, не использующие резервные серверы, разделенные запятой" + }, + "fallbackDomain": { + "label": "Fallback домены", + "description": "Домены, использующие резервные серверы, разделенные запятой" + }, + "hosts": { + "label": "Hosts", + "description": "Custom domain to IP or domain mapping" + } + }, + "messages": { + "saved": "DNS settings saved", + "configError": "DNS configuration error:" + }, + "errors": { + "invalid": "Invalid configuration" + } + }, + "webUI": { + "actions": { + "openUrl": "Перейти по адресу" + }, + "title": "Веб-интерфейс", + "messages": { + "supportedPlaceholders": "Поддерживаются %host, %port, %secret", + "placeholderInstruction": "Замените хост, порт и секрет на %host, %port, %secret" + } + }, + "hotkey": { + "toggles": { + "enableGlobal": "Включить глобальную горячую клавишу" + }, + "title": "Настройки сочетаний клавиш", + "functions": { + "rule": "Режим правил", + "global": "Глобальный режим", + "openOrCloseDashboard": "Открыть/Закрыть панель управления", + "toggleSystemProxy": "Включить/Отключить системный прокси", + "toggleTunMode": "Включить/Отключить режим TUN", + "entryLightweightMode": "Вход в LightWeight Mode", + "direct": "Прямой режим" + } + }, + "password": { + "prompts": { + "enterRoot": "Пожалуйста, введите ваш пароль root" + } + }, + "networkInterface": { + "title": "Сетевой интерфейс", + "fields": { + "ipAddress": "IP адрес", + "macAddress": "MAC адрес" + } + } + }, + "feedback": { + "notifications": { + "clash": { + "restartSuccess": "Ядро перезапущено", + "versionUpdated": "Ядро обновлено до последней версии", + "changeSuccess": "Ядро успешно изменено", + "changeFailed": "Не удалось сменить ядро", + "geoDataUpdated": "Файлы GeoData обновлены" + }, + "clashService": { + "installSuccess": "Служба успешно установлена", + "uninstallSuccess": "Служба успешно удалена" + }, + "updater": { + "withClashProxySuccess": "Update with Clash proxy successfully", + "withClashProxyFailed": "Update failed even with Clash proxy" + } + } + }, + "statuses": { + "clash": { + "stopping": "Stopping Core...", + "restarting": "Restarting Core..." + }, + "clashService": { + "installing": "Установка службы...", + "uninstalling": "Uninstalling Service..." + } + } +} diff --git a/src/locales/ru/shared.json b/src/locales/ru/shared.json new file mode 100644 index 00000000..9cb6a1ca --- /dev/null +++ b/src/locales/ru/shared.json @@ -0,0 +1,128 @@ +{ + "actions": { + "cancel": "Отмена", + "close": "Закрыть", + "confirm": "Подтвердить", + "save": "Сохранить", + "delete": "Удалить", + "edit": "Редактировать", + "new": "Новый", + "enable": "Включить", + "upgrade": "Обновить", + "restart": "Перезапустить", + "resetToDefault": "Сбросить настройки", + "refresh": "Обновить", + "retry": "Retry", + "refreshPage": "Refresh Page", + "showDetails": "Show Details", + "hideDetails": "Hide Details", + "listView": "Отображать в виде списка", + "tableView": "Отображать в виде таблицы", + "pause": "Пауза", + "resume": "Возобновить", + "closeAll": "Закрыть всё", + "clear": "Очистить" + }, + "labels": { + "updateAt": "Обновлено в", + "timeout": "Тайм-аут", + "icon": "Иконка", + "name": "Название", + "readOnly": "Только для чтения", + "expireTime": "Время окончания", + "updateTime": "Время обновления", + "usedTotal": "Использовано / Всего", + "from": "От", + "password": "Пароль", + "retryAttempts": "Retry attempts", + "downloaded": "Скачано", + "uploaded": "Загружено" + }, + "statuses": { + "enabled": "Включено", + "disabled": "Отключено", + "saving": "Saving...", + "empty": "Пусто" + }, + "units": { + "milliseconds": "миллисекунды", + "seconds": "секунды", + "minutes": "минуты", + "kilobytes": "KB", + "files": "Files" + }, + "placeholders": { + "filter": "Условия фильтрации", + "matchCase": "Учитывать регистр", + "matchWholeWord": "Полное совпадение слова", + "useRegex": "Использовать регулярные выражения" + }, + "validation": { + "invalidRegex": "Invalid regular expression" + }, + "window": { + "maximize": "Развернуть", + "minimize": "Свернуть" + }, + "editorModes": { + "visualization": "Визуализация", + "advanced": "Дополнительно" + }, + "feedback": { + "errors": { + "trafficStats": "Traffic Statistics Error", + "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." + }, + "notices": { + "raw": "{{message}}", + "prefixedRaw": "{{prefix}} {{message}}" + }, + "notifications": { + "importSuccess": "Профиль успешно импортирован", + "importSubscriptionSuccess": "Подписка успешно импортирована", + "importWithClashProxy": "Profile Imported with Clash proxy", + "saved": "Saved successfully", + "common": { + "copySuccess": "Скопировано", + "saveSuccess": "Configuration saved successfully", + "saveFailed": "Failed to save configuration" + } + }, + "validation": { + "config": { + "failed": "Ошибка проверки конфигурации подписки, проверьте файл конфигурации, изменения отменены, ошибка:", + "bootFailed": "Ошибка проверки конфигурации при запуске, используется конфигурация по умолчанию, проверьте файл конфигурации, ошибка:", + "coreChangeFailed": "Ошибка проверки конфигурации при смене ядра, используется конфигурация по умолчанию, проверьте файл конфигурации, ошибка:", + "processTerminated": "Процесс проверки прерван" + }, + "script": { + "syntaxError": "Ошибка синтаксиса скрипта, изменения отменены", + "missingMain": "Ошибка скрипта, изменения отменены", + "fileNotFound": "Файл не найден, изменения отменены", + "fileError": "Ошибка файла скрипта, изменения отменены" + }, + "yaml": { + "syntaxError": "Ошибка синтаксиса YAML, откат изменений", + "readError": "Ошибка чтения YAML, откат изменений", + "mappingError": "Ошибка YAML Mapping, откат изменений", + "keyError": "Ошибка ключа YAML, откат изменений", + "generalError": "Ошибка YAML, откат изменений" + }, + "merge": { + "syntaxError": "Ошибка синтаксиса Merge File, откат изменений", + "mappingError": "Ошибка сопоставления в Merge File, откат изменений", + "keyError": "Ошибка ключа в Merge File, откат изменений", + "generalError": "Ошибка Merge File, откат изменений" + } + } + }, + "filters": { + "logLevels": { + "all": "ALL", + "debug": "DEBUG", + "info": "INFO", + "warn": "WARN", + "error": "ERROR" + } + } +} diff --git a/src/locales/ru/tests.json b/src/locales/ru/tests.json new file mode 100644 index 00000000..77fe8f27 --- /dev/null +++ b/src/locales/ru/tests.json @@ -0,0 +1,40 @@ +{ + "page": { + "actions": { + "testAll": "Тестировать все" + }, + "title": "Тест" + }, + "components": { + "item": { + "actions": { + "test": "Тест" + } + } + }, + "modals": { + "test": { + "title": { + "create": "Создать тест", + "edit": "Редактировать тест" + }, + "fields": { + "url": "URL проверка" + } + } + }, + "statuses": { + "test": { + "pending": "В ожидании", + "yes": "Да", + "no": "Нет", + "failed": "Ошибка", + "completed": "Завершено", + "disallowedIsp": "ISP заблокирован", + "originalsOnly": "Только Originals", + "noDisney": "Нет (IP забанен Disney+)", + "unsupportedRegion": "Страна/регион не поддерживается", + "failedNetwork": "Ошибка подключения" + } + } +} diff --git a/src/locales/ru/unlock.json b/src/locales/ru/unlock.json new file mode 100644 index 00000000..d12d5a25 --- /dev/null +++ b/src/locales/ru/unlock.json @@ -0,0 +1,12 @@ +{ + "page": { + "actions": { + "testing": "Тестирование ..." + }, + "empty": "No unlock test items", + "messages": { + "detectionTimeout": "Detection timeout or failed" + }, + "title": "Тест доступности веб-сайтов" + } +} diff --git a/src/locales/tr.json b/src/locales/tr.json deleted file mode 100644 index 283f2318..00000000 --- a/src/locales/tr.json +++ /dev/null @@ -1,1299 +0,0 @@ -{ - "shared": { - "actions": { - "cancel": "İptal", - "close": "Kapat", - "confirm": "Onayla", - "save": "Kaydet", - "delete": "Sil", - "edit": "Düzenle", - "new": "Yeni", - "enable": "Etkinleştir", - "upgrade": "Yükselt", - "restart": "Yeniden Başlat", - "resetToDefault": "Varsayılana Sıfırla", - "refresh": "Yenile", - "retry": "Retry", - "refreshPage": "Refresh Page", - "showDetails": "Show Details", - "hideDetails": "Hide Details", - "listView": "Liste Görünümü", - "tableView": "Tablo Görünümü", - "pause": "Duraklat", - "resume": "Sürdür", - "closeAll": "Tümünü Kapat", - "clear": "Temizle" - }, - "labels": { - "updateAt": "Güncelleme Zamanı", - "timeout": "Timeout", - "icon": "Simge", - "name": "İsim", - "readOnly": "Salt Okunur", - "expireTime": "Sona Erme Zamanı", - "updateTime": "Güncelleme Zamanı", - "usedTotal": "Kullanılan / Toplam", - "from": "Kaynak", - "password": "Şifre", - "retryAttempts": "Retry attempts", - "downloaded": "İndirilen", - "uploaded": "Yüklenen" - }, - "statuses": { - "enabled": "Etkin", - "disabled": "Devre Dışı", - "saving": "Saving...", - "empty": "Boş" - }, - "units": { - "milliseconds": "ms", - "seconds": "saniye", - "minutes": "dakika", - "kilobytes": "KB", - "files": "Files" - }, - "placeholders": { - "filter": "Filtre koşulları", - "matchCase": "Büyük/Küçük Harf Eşleştir", - "matchWholeWord": "Tam Kelime Eşleştir", - "useRegex": "Düzenli İfade Kullan" - }, - "validation": { - "invalidRegex": "Invalid regular expression" - }, - "window": { - "maximize": "Büyüt", - "minimize": "Küçült" - }, - "editorModes": { - "visualization": "Görselleştirme", - "advanced": "Gelişmiş" - }, - "feedback": { - "errors": { - "trafficStats": "Traffic Statistics Error", - "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." - }, - "notices": { - "raw": "{{message}}", - "prefixedRaw": "{{prefix}} {{message}}" - }, - "notifications": { - "importSuccess": "Profil Başarıyla İçe Aktarıldı", - "importSubscriptionSuccess": "Abonelik içe aktarımı başarılı", - "importWithClashProxy": "Profil Clash vekil ile içe aktarıldı", - "saved": "Saved successfully", - "common": { - "copySuccess": "Kopyalama Başarılı", - "saveSuccess": "Configuration saved successfully", - "saveFailed": "Failed to save configuration" - } - }, - "validation": { - "config": { - "failed": "Abonelik yapılandırması doğrulaması başarısız oldu. Lütfen abonelik yapılandırma dosyasını kontrol edin; değişiklikler geri alındı.", - "bootFailed": "Başlangıç abonelik yapılandırması doğrulaması başarısız oldu. Varsayılan yapılandırma ile başlatıldı; lütfen abonelik yapılandırma dosyasını kontrol edin.", - "coreChangeFailed": "Çekirdek değiştirilirken yapılandırma doğrulaması başarısız oldu. Varsayılan yapılandırma ile başlatıldı; lütfen abonelik yapılandırma dosyasını kontrol edin.", - "processTerminated": "Doğrulama işlemi sonlandırıldı." - }, - "script": { - "syntaxError": "Betik sözdizimi hatası, değişiklikler geri alındı", - "missingMain": "Betik hatası, değişiklikler geri alındı", - "fileNotFound": "Dosya eksik, değişiklikler geri alındı", - "fileError": "Betik dosyası hatası, değişiklikler geri alındı" - }, - "yaml": { - "syntaxError": "YAML sözdizimi hatası, değişiklikler geri alındı", - "readError": "YAML okuma hatası, değişiklikler geri alındı", - "mappingError": "YAML eşleme hatası, değişiklikler geri alındı", - "keyError": "YAML anahtar hatası, değişiklikler geri alındı", - "generalError": "YAML hatası, değişiklikler geri alındı" - }, - "merge": { - "syntaxError": "Birleştirme dosyası sözdizimi hatası, değişiklikler geri alındı", - "mappingError": "Birleştirme dosyası eşleme hatası, değişiklikler geri alındı", - "keyError": "Birleştirme dosyası anahtar hatası, değişiklikler geri alındı", - "generalError": "Birleştirme dosyası hatası, değişiklikler geri alındı" - } - } - }, - "filters": { - "logLevels": { - "all": "ALL", - "debug": "DEBUG", - "info": "INFO", - "warn": "WARN", - "error": "ERROR" - } - } - }, - "profiles": { - "page": { - "actions": { - "updateAll": "Tüm Profilleri Güncelle", - "viewRuntimeConfig": "Çalışma Zamanı Yapılandırmasını Görüntüle", - "reactivate": "Profilleri Yeniden Etkinleştir", - "import": "İçe Aktar" - }, - "batch": { - "actions": { - "delete": "Seçili Profilleri Sil", - "selectAll": "Tümünü Seç", - "deselectAll": "Tüm Seçimi Kaldır", - "done": "Tamam" - }, - "summary": { - "selected": "Seçildi", - "items": "öğeler" - }, - "title": "Toplu İşlemler" - }, - "importForm": { - "placeholder": "Profil URL'si", - "actions": { - "paste": "Yapıştır" - } - }, - "feedback": { - "errors": { - "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", - "onlyYaml": "Yalnızca YAML Dosyaları Desteklenir" - }, - "notifications": { - "importRetry": "İçe aktarma başarısız oldu, Clash vekil ile yeniden deneniyor...", - "importFail": "Clash vekil ile bile içe aktarma başarısız oldu", - "importNeedsRefresh": "Profile imported but may need manual refresh", - "importSuccess": "Profile imported successfully, please restart if not visible", - "profileSwitched": "Profil Değiştirildi", - "profileReactivated": "Profil Yeniden Etkinleştirildi", - "switchInterrupted": "Profile switch interrupted by new selection", - "batchDeleted": "Seçili profiller başarıyla silindi" - }, - "notices": { - "forceRefreshCompleted": "Force refresh completed", - "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" - } - }, - "title": "Profiller" - }, - "components": { - "card": { - "labels": { - "clickToImport": "Abonelik içe aktarmak için tıklayın" - } - }, - "fileInput": { - "chooseFile": "Dosya Seç" - }, - "menu": { - "home": "Ana Sayfa", - "select": "Seç", - "editInfo": "Bilgileri Düzenle", - "editFile": "Dosyayı Düzenle", - "editRules": "Kuralları Düzenle", - "editProxies": "Vekil'leri Düzenle", - "editGroups": "Vekil Gruplarını Düzenle", - "extendConfig": "Yapılandırma Genişletme", - "extendScript": "Betik Genişletme", - "openFile": "Dosyayı Aç", - "update": "Güncelle", - "updateViaProxy": "Update via proxy" - }, - "more": { - "global": { - "merge": "Global Merge", - "script": "Global Script" - }, - "chips": { - "merge": "Merge", - "script": "Script" - } - }, - "profileItem": { - "tooltips": { - "showLast": "Click to show last update time", - "showNext": "Click to show next update" - }, - "status": { - "lastUpdateFailed": "Son güncelleme başarısız oldu", - "nextUp": "Sıradaki", - "noSchedule": "Program yok", - "unknown": "Bilinmiyor", - "autoUpdateDisabled": "Otomatik güncelleme devre dışı" - } - } - }, - "modals": { - "profileForm": { - "title": { - "create": "Profil Oluştur", - "edit": "Profili Düzenle" - }, - "fields": { - "type": "Tip", - "description": "Açıklamalar", - "subscriptionUrl": "Abonelik URL'si", - "httpTimeout": "HTTP Request Timeout", - "updateInterval": "Güncelleme Aralığı", - "useSystemProxy": "Sistem Vekil'ini Kullan", - "useClashProxy": "Clash Vekil'ini Kullan", - "acceptInvalidCerts": "Geçersiz Sertifikalara İzin Ver (Tehlikeli)", - "allowAutoUpdate": "Allow Auto Update" - }, - "feedback": { - "notifications": { - "creationRetry": "Profil oluşturma başarısız oldu, Clash vekil ile yeniden deneniyor...", - "creationSuccess": "Clash vekil ile profil oluşturma başarılı oldu" - } - } - }, - "proxiesEditor": { - "title": "Vekil'leri Düzenle", - "placeholders": { - "multiUri": "Birden fazla URI için yeni satırlar kullanın (Base64 kodlaması desteklenir)" - }, - "actions": { - "prepend": "Vekil'in Başına Ekle", - "append": "Vekil'in Sonuna Ekle" - } - }, - "groupsEditor": { - "title": "Vekil Gruplarını Düzenle", - "errors": { - "nameRequired": "Grup Adı Gerekli", - "nameExists": "Grup Adı Zaten Var" - }, - "fields": { - "type": "Grup Tipi", - "name": "Grup Adı", - "icon": "Vekil Grup Simgesi", - "proxies": "Vekil'leri Kullan", - "provider": "Sağlayıcı Kullan", - "healthCheckUrl": "Sağlık Kontrolü URL'si", - "expectedStatus": "Beklenen Durum", - "interval": "Aralık", - "maxFailedTimes": "Maksimum Başarısız Deneme", - "interfaceName": "Arayüz Adı", - "routingMark": "Yönlendirme İşareti", - "filter": "Filtre", - "excludeFilter": "Hariç Tutma Filtresi", - "excludeType": "Hariç Tutma Tipi", - "includeAll": "Tüm Vekil'leri ve Sağlayıcıları Dahil Et", - "includeAllProxies": "Tüm Vekil'leri Dahil Et", - "includeAllProviders": "Tüm Sağlayıcıları Dahil Et" - }, - "toggles": { - "lazy": "Tembel", - "disableUdp": "UDP'yi Devre Dışı Bırak", - "hidden": "Gizli" - }, - "actions": { - "prepend": "Grubun Başına Ekle", - "append": "Grubun Sonuna Ekle" - } - }, - "editor": { - "actions": { - "format": "Belgeyi biçimlendir" - }, - "messages": { - "readOnly": "Salt okunur düzenleyicide düzenlenemez" - } - }, - "confirmDelete": { - "title": "Silmeyi Onayla", - "message": "Bu işlem geri alınamaz" - }, - "logViewer": { - "title": "Betik Konsolu" - } - } - }, - "proxies": { - "page": { - "modes": { - "rule": "Rule", - "global": "Global", - "direct": "Direct" - }, - "actions": { - "toggleChain": "🔗 Zincir Proxy", - "connect": "Connect", - "disconnect": "Disconnect", - "connecting": "Connecting...", - "clearChainConfig": "Delete Chain Config" - }, - "provider": { - "title": "Vekil Sağlayıcısı", - "actions": { - "updateAll": "Tümünü Güncelle", - "update": "Güncelle" - } - }, - "rules": { - "title": "Proxy Rules", - "select": "Select Rules" - }, - "labels": { - "proxyCount": "Vekil Sayısı", - "delayCheckReset": "Sabit iptali için gecikme kontrolü" - }, - "tooltips": { - "locate": "konum", - "delayCheck": "Gecikme kontrolü", - "sortDefault": "Varsayılana göre sırala", - "sortDelay": "Gecikmeye göre sırala", - "sortName": "İsme göre sırala", - "delayCheckUrl": "Gecikme kontrol URL'si", - "showBasic": "Temel Vekil", - "showDetail": "Vekil detayı", - "filter": "Filtre" - }, - "placeholders": { - "delayCheckUrl": "Gecikme kontrol URL'si" - }, - "chain": { - "header": "Chain Proxy Config", - "empty": "No proxy chain configured", - "instruction": "Click nodes in order to add to proxy chain", - "minimumNodes": "Chain proxy requires at least 2 nodes", - "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", - "connectFailed": "Failed to connect to proxy chain", - "disconnectFailed": "Failed to disconnect from proxy chain", - "duplicateNode": "Proxy node already exists in chain" - }, - "messages": { - "directMode": "Doğrudan Mod" - }, - "title": { - "default": "Vekil Grupları", - "chainMode": "Proxy Chain Mode" - } - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "components": { - "enums": { - "strategies": { - "select": "Vekil'i manuel olarak seçin", - "url-test": "URL testi gecikmesine göre vekil seçin", - "fallback": "Hata durumunda başka bir vekil'e geçin", - "load-balance": "Yük dengelemeye göre vekil dağıtın", - "relay": "Tanımlanan vekil zincirinden geçirin" - }, - "policies": { - "DIRECT": "Veri doğrudan dışarı gider", - "REJECT": "İstekleri engeller", - "REJECT-DROP": "İstekleri atar", - "PASS": "Eşleştiğinde bu kuralı atlar" - } - } - } - }, - "connections": { - "page": { - "title": "Bağlantılar" - }, - "components": { - "fields": { - "host": "Ana Bilgisayar", - "dlSpeed": "İndirme Hızı", - "ulSpeed": "Yükleme Hızı", - "chains": "Zincirler", - "rule": "Kural", - "process": "İşlem", - "time": "Zaman", - "source": "Kaynak", - "destination": "Hedef", - "destinationPort": "Hedef Port", - "type": "Tip" - }, - "order": { - "default": "Default", - "uploadSpeed": "Yükleme Hızı", - "downloadSpeed": "İndirme Hızı" - }, - "actions": { - "closeConnection": "Bağlantıyı Kapat" - } - } - }, - "tests": { - "page": { - "actions": { - "testAll": "Tümünü Test Et" - }, - "title": "Test" - }, - "components": { - "item": { - "actions": { - "test": "Test" - } - } - }, - "modals": { - "test": { - "title": { - "create": "Test Oluştur", - "edit": "Testi Düzenle" - }, - "fields": { - "url": "Test URL'si" - } - } - }, - "statuses": { - "test": { - "pending": "Beklemede", - "yes": "Evet", - "no": "Hayır", - "failed": "Başarısız", - "completed": "Tamamlandı", - "disallowedIsp": "İzin Verilmeyen ISP", - "originalsOnly": "Yalnızca Orijinaller", - "noDisney": "Hayır (IP Disney+ Tarafından Yasaklandı)", - "unsupportedRegion": "Desteklenmeyen Ülke/Bölge", - "failedNetwork": "Başarısız (Ağ Bağlantısı)" - } - } - }, - "logs": { - "page": { - "title": "Günlükler" - } - }, - "rules": { - "page": { - "provider": { - "trigger": "Kural Sağlayıcısı", - "dialogTitle": "Kural Sağlayıcısı", - "actions": { - "updateAll": "Tümünü Güncelle", - "update": "Güncelle" - } - }, - "title": "Kurallar" - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "modals": { - "editor": { - "form": { - "labels": { - "type": "Kural Tipi", - "content": "Kural İçeriği", - "proxyPolicy": "Vekil Politikası" - }, - "toggles": { - "noResolve": "Çözümleme Yok" - }, - "actions": { - "prependRule": "Kuralın Başına Ekle", - "appendRule": "Kuralın Sonuna Ekle" - }, - "validation": { - "conditionRequired": "Kural Koşulu Gerekli", - "invalidRule": "Geçersiz Kural" - } - }, - "ruleTypes": { - "DOMAIN": "Tam alan adıyla eşleşir", - "DOMAIN-SUFFIX": "Alan adı sonekiyle eşleşir", - "DOMAIN-KEYWORD": "Alan adı anahtar kelimesiyle eşleşir", - "DOMAIN-REGEX": "Alan adını düzenli ifadeler kullanarak eşleştirir", - "GEOSITE": "Geosite içindeki alan adlarıyla eşleşir", - "GEOIP": "IP adresinin ülke koduyla eşleşir", - "SRC-GEOIP": "Kaynak IP adresinin ülke koduyla eşleşir", - "IP-ASN": "IP adresinin ASN'siyle eşleşir", - "SRC-IP-ASN": "Kaynak IP adresinin ASN'siyle eşleşir", - "IP-CIDR": "IP adresi aralığıyla eşleşir", - "IP-CIDR6": "IPv6 adresi aralığıyla eşleşir", - "SRC-IP-CIDR": "Kaynak IP adresi aralığıyla eşleşir", - "IP-SUFFIX": "IP adresi sonek aralığıyla eşleşir", - "SRC-IP-SUFFIX": "Kaynak IP adresi sonek aralığıyla eşleşir", - "SRC-PORT": "Kaynak port aralığıyla eşleşir", - "DST-PORT": "Hedef port aralığıyla eşleşir", - "IN-PORT": "Gelen port ile eşleşir", - "DSCP": "DSCP işaretlemesi (sadece tvekil UDP girişi için)", - "PROCESS-NAME": "İşlem adıyla eşleşir (Android paket adı)", - "PROCESS-PATH": "Tam işlem yoluyla eşleşir", - "PROCESS-NAME-REGEX": "Tam işlem adını düzenli ifadeler kullanarak eşleştirir (Android paket adı)", - "PROCESS-PATH-REGEX": "Tam işlem yolunu düzenli ifadeler kullanarak eşleştirir", - "NETWORK": "Taşıma protokolüyle eşleşir (tcp/udp)", - "UID": "Linux KULLANICI ID'siyle eşleşir", - "IN-TYPE": "Gelen bağlantı tipiyle eşleşir", - "IN-USER": "Gelen bağlantı kullanıcı adıyla eşleşir", - "IN-NAME": "Gelen bağlantı adıyla eşleşir", - "SUB-RULE": "Alt kural", - "RULE-SET": "Kural setiyle eşleşir", - "AND": "Mantıksal VE", - "OR": "Mantıksal VEYA", - "NOT": "Mantıksal DEĞİL", - "MATCH": "Tüm isteklerle eşleşir" - }, - "title": "Kuralları Düzenle" - } - } - }, - "home": { - "page": { - "tooltips": { - "lightweightMode": "Hafif Mod", - "manual": "Kılavuz", - "settings": "Ana Sayfa Ayarları" - }, - "cards": { - "trafficStats": "Trafik İstatistikleri", - "networkSettings": "Ağ Ayarları", - "proxyMode": "Vekil Modu" - }, - "settings": { - "cards": { - "profile": "Profil Kartı", - "currentProxy": "Geçerli Vekil Kartı", - "network": "Ağ Ayarları Kartı", - "proxyMode": "Vekil Modu Kartı", - "traffic": "Trafik İstatistikleri Kartı", - "tests": "Web Sitesi Testleri Kartı", - "ip": "IP Bilgi Kartı", - "clashInfo": "Clash Bilgi Kartları", - "systemInfo": "Sistem Bilgi Kartları" - }, - "title": "Ana Sayfa Ayarları" - }, - "title": "Ana Sayfa" - }, - "components": { - "proxyTun": { - "status": { - "systemProxyEnabled": "Sistem vekil'i etkinleştirildi, uygulamalarınız vekil üzerinden ağa erişecek", - "systemProxyDisabled": "Sistem vekil'i devre dışı, çoğu kullanıcı için bu seçeneği açmanız önerilir", - "tunModeServiceRequired": "TUN modu hizmet modu gerektirir, lütfen önce hizmeti kurun", - "tunModeEnabled": "TUN modu etkinleştirildi, uygulamalar sanal ağ kartı üzerinden ağa erişecek", - "tunModeDisabled": "TUN modu devre dışı, özel uygulamalar için uygundur" - }, - "tooltips": { - "systemProxy": "İşletim sisteminin vekil ayarlarını değiştirmek için etkinleştirin. Etkinleştirme başarısız olursa, işletim sisteminin proxy ayarlarını manuel olarak değiştirin", - "tunMode": "TUN modu tüm uygulama trafiğini ele alabilir, sistem vekil ayarlarını takip etmeyen özel uygulamalar için uygundur" - } - }, - "clashInfo": { - "title": "Clash Bilgisi", - "fields": { - "coreVersion": "Çekirdek Sürümü", - "systemProxyAddress": "Sistem Vekil Adresi", - "mixedPort": "Mixed Port", - "uptime": "Çalışma Süresi", - "rulesCount": "Kural Sayısı" - } - }, - "systemInfo": { - "title": "Sistem Bilgisi", - "fields": { - "osInfo": "İşletim Sistemi Bilgisi", - "autoLaunch": "Otomatik Başlatma", - "runningMode": "Çalışma Modu", - "lastCheckUpdate": "Son Güncelleme Kontrolü", - "vergeVersion": "Verge Sürümü" - }, - "actions": { - "settings": "Ayarlar" - }, - "tooltips": { - "autoLaunchAdmin": "Yönetici modu otomatik başlatmayı desteklemeyebilir" - }, - "badges": { - "adminMode": "Yönetici Modu", - "serviceMode": "Hizmet Modu", - "sidecarMode": "Kullanıcı Modu", - "adminServiceMode": "Yönetici + Hizmet Modu" - } - }, - "ipInfo": { - "title": "IP Bilgisi", - "labels": { - "ip": "IP", - "asn": "ASN", - "isp": "ISP", - "org": "Kuruluş", - "location": "Konum", - "timezone": "Saat Dilimi", - "autoRefresh": "Otomatik yenile", - "unknown": "Bilinmiyor" - }, - "errors": { - "load": "IP bilgisi alınamadı" - } - }, - "currentProxy": { - "title": "Geçerli Düğüm", - "actions": { - "refreshDelay": "Gecikme kontrolü" - }, - "labels": { - "globalMode": "Küresel Mod", - "directMode": "Doğrudan Mod", - "group": "Grup", - "proxy": "Vekil", - "noActiveNode": "Aktif vekil düğümü yok" - } - }, - "tests": { - "title": "Web Sitesi Testleri" - }, - "traffic": { - "metrics": { - "uploadSpeed": "Yükleme Hızı", - "downloadSpeed": "İndirme Hızı", - "activeConnections": "Aktif Bağlantılar", - "memoryUsage": "Çekirdek Kullanımı" - }, - "legends": { - "upload": "Yükleme", - "download": "İndirme" - }, - "patterns": { - "minutes": "{{time}} Minutes" - } - }, - "clashMode": { - "errors": { - "communication": "Core communication error" - }, - "labels": { - "rule": "Kural Modu", - "global": "Küresel Mod", - "direct": "Doğrudan Mod" - }, - "descriptions": { - "rule": "Automatically choose proxies according to the rule set.", - "global": "Forward all network requests through the selected proxy.", - "direct": "Bypass the proxy and connect to the internet directly." - } - } - } - }, - "unlock": { - "page": { - "actions": { - "testing": "Test Ediliyor..." - }, - "empty": "No unlock test items", - "messages": { - "detectionTimeout": "Detection timeout or failed" - }, - "title": "Kilit Açma Testi" - } - }, - "settings": { - "page": { - "actions": { - "manual": "Kılavuz", - "telegram": "Telegram Kanalı", - "github": "Github Repo" - }, - "title": "Ayarlar" - }, - "sections": { - "system": { - "title": "Sistem Ayarları", - "toggles": { - "tunMode": "Tun Modu", - "systemProxy": "Sistem Vekil'i" - }, - "tooltips": { - "autoLaunchAdmin": "Yönetici modu otomatik başlatmayı desteklemeyebilir", - "silentStart": "Programı paneli görüntülemeden arka plan modunda başlatır" - }, - "fields": { - "autoLaunch": "Otomatik Başlat", - "silentStart": "Sessiz Başlatma" - }, - "notifications": { - "tunMode": { - "autoDisabled": "TUN Mode automatically disabled due to service unavailable", - "autoDisableFailed": "Failed to disable TUN Mode automatically" - } - } - }, - "proxyControl": { - "tooltips": { - "systemProxy": "İşletim sisteminin vekil ayarlarını değiştirmek için etkinleştirin. Etkinleştirme başarısız olursa, işletim sisteminin proxy ayarlarını manuel olarak değiştirin", - "tunMode": "Tun (Sanal Ağ Kartı) modu: Tüm sistem trafiğini yakalar, etkinleştirildiğinde sistem vekil'ini etkinleştirmeye gerek yoktur.", - "tunUnavailable": "TUN requires Service Mode or Admin Mode" - }, - "actions": { - "installService": "Hizmeti Kur", - "uninstallService": "Uninstall Service" - }, - "fields": { - "systemProxy": "Sistem Vekil'i", - "tunMode": "Tun Modu" - } - }, - "externalController": { - "title": "Harici Denetleyici", - "fields": { - "enable": "Harici denetleyiciyi etkinleştir", - "address": "Harici Denetleyici", - "secret": "Çekirdek Sırrı" - }, - "placeholders": { - "address": "Gerekli", - "secret": "Önerilen" - }, - "tooltips": { - "copy": "Panoya kopyala" - }, - "messages": { - "addressRequired": "Denetleyici adresi boş olamaz", - "secretRequired": "Gizli anahtar boş olamaz", - "copyFailed": "Kopyalama başarısız", - "controllerCopied": "Denetleyici adresi panoya kopyalandı", - "secretCopied": "Gizli anahtar panoya kopyalandı" - } - }, - "externalCors": { - "title": "Harici CORS yapılandırması", - "fields": { - "allowPrivateNetwork": "Özel ağ erişimine izin ver", - "allowedOrigins": "İzin verilen kökenler" - }, - "placeholders": { - "origin": "Geçerli bir URL girin" - }, - "actions": { - "add": "Ekle" - }, - "messages": { - "alwaysIncluded": "Her zaman dahil edilen kökenler: {{urls}}" - }, - "tooltips": { - "open": "Harici CORS ayarları" - } - }, - "appearance": { - "light": "Light", - "dark": "Dark", - "system": "System" - }, - "clash": { - "title": "Clash Ayarı", - "form": { - "fields": { - "allowLan": "LAN'a İzin Ver", - "dnsOverwrite": "DNS Üzerine Yazma", - "ipv6": "IPv6", - "unifiedDelay": "Birleşik Gecikme", - "logLevel": "Günlük Seviyesi", - "portConfig": "Port Yapılandırması", - "external": "Harici", - "webUI": "Web Arayüzü", - "clashCore": "Clash Çekirdeği", - "openUwpTool": "UWP Aracını Aç", - "updateGeoData": "GeoData'yı Güncelle" - }, - "tooltips": { - "networkInterface": "Ağ Arayüzü", - "unifiedDelay": "Birleşik gecikme açıldığında, bağlantı el sıkışmaları vb. nedeniyle farklı tür düğümler arasındaki gecikme farklarını ortadan kaldırmak için iki gecikme testi gerçekleştirilir", - "logLevel": "Bu parametre yalnızca günlük dizini Hizmet klasöründeki çekirdek günlük dosyaları için geçerlidir", - "openUwpTool": "Windows 8'den beri, UWP uygulamaları (Microsoft Store gibi) yerel ana bilgisayar ağ hizmetlerine doğrudan erişmekten kısıtlanmıştır ve bu araç bu kısıtlamayı atlatmak için kullanılabilir" - }, - "options": { - "logLevel": { - "debug": "Debug", - "info": "Info", - "warning": "Warn", - "error": "Error", - "silent": "Silent" - } - } - } - } - }, - "components": { - "verge": { - "basic": { - "title": "Verge Temel Ayarı", - "actions": { - "browse": "Gözat" - }, - "trayOptions": { - "showMainWindow": "Ana Pencereyi Göster", - "showTrayMenu": "Tepsi Menüsünü Göster", - "disable": "Devre Dışı Bırak" - }, - "fields": { - "language": "Dil", - "themeMode": "Tema Modu", - "trayClickEvent": "Sistem Tepsisi Tıklama Olayı", - "copyEnvType": "Env Tipini Kopyala", - "startPage": "Başlangıç Sayfası", - "startupScript": "Başlangıç Betiği", - "themeSetting": "Tema Ayarı", - "layoutSetting": "Düzen Ayarı", - "misc": "Çeşitli", - "hotkeySetting": "Kısayol Tuşu Ayarı" - } - }, - "advanced": { - "title": "Verge Gelişmiş Ayarı", - "tooltips": { - "backupInfo": "WebDAV yedekleme yapılandırma dosyalarını destekler", - "openConfDir": "Yazılım anormal çalışıyorsa, bu klasördeki tüm dosyaları YEDEKLEYİN ve silin, ardından yazılımı yeniden başlatın", - "liteMode": "GUI'yi kapatın ve yalnızca çekirdeği çalışır durumda tutun" - }, - "actions": { - "copyVersion": "Copy Version" - }, - "notifications": { - "latestVersion": "Şu Anda En Son Sürümdesiniz", - "versionCopied": "Version copied to clipboard" - }, - "fields": { - "backupSetting": "Yedekleme Ayarı", - "runtimeConfig": "Çalışma Zamanı Yapılandırması", - "openConfDir": "Yapılandırma Dizinini Aç", - "openCoreDir": "Çekirdek Dizinini Aç", - "openLogsDir": "Günlük Dizinini Aç", - "checkUpdates": "Güncellemeleri Kontrol Et", - "openDevTools": "Geliştirici Araçları", - "liteModeSettings": "Hafif Mod Ayarları", - "exit": "Çıkış", - "exportDiagnostics": "Tanılama Bilgilerini Dışa Aktar", - "vergeVersion": "Verge Sürümü" - } - }, - "theme": { - "title": "Tema Ayarı", - "fields": { - "primaryColor": "Ana Renk", - "secondaryColor": "İkincil Renk", - "primaryText": "Ana Metin", - "secondaryText": "İkincil Metin", - "infoColor": "Bilgi Rengi", - "warningColor": "Uyarı Rengi", - "errorColor": "Hata Rengi", - "successColor": "Başarı Rengi", - "fontFamily": "Yazı Tipi Ailesi", - "cssInjection": "CSS Enjeksiyonu" - }, - "actions": { - "editCss": "Edit CSS" - }, - "dialogs": { - "editCssTitle": "Edit CSS" - } - }, - "layout": { - "title": "Düzen Ayarı", - "fields": { - "preferSystemTitlebar": "Prefer System Titlebar", - "trafficGraph": "Trafik Grafiği", - "memoryUsage": "Çekirdek Kullanımı", - "proxyGroupIcon": "Vekil Grup Simgesi", - "hoverNavigator": "Hover Jump Navigator", - "hoverNavigatorDelay": "Hover Jump Navigator Delay", - "navIcon": "Gezinme Simgesi", - "trayIcon": "Tepsi Simgesi", - "showProxyGroupsInline": "Show Proxy Groups Inline", - "commonTrayIcon": "Genel Tepsi Simgesi", - "systemProxyTrayIcon": "Sistem Vekil Tepsi Simgesi", - "tunTrayIcon": "Tun Tepsi Simgesi", - "enableTrayIcon": "Tepsi Simgesini Etkinleştir", - "enableTraySpeed": "Tepsi Hızını Etkinleştir" - }, - "tooltips": { - "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", - "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" - }, - "options": { - "icon": { - "monochrome": "Tek Renkli", - "colorful": "Renkli", - "disable": "Devre Dışı Bırak" - } - } - } - } - }, - "modals": { - "clashPort": { - "title": "Port Yapılandırması", - "fields": { - "mixed": "Karışık Port", - "socks": "Socks Portu", - "http": "Http(s) Portu", - "redir": "Redir Portu", - "tproxy": "Tvekil Portu" - }, - "actions": { - "random": "Rastgele Port" - }, - "messages": { - "saved": "Port settings saved", - "saveFailed": "Failed to save port settings" - } - }, - "clashCore": { - "variants": { - "release": "Kararlı Sürüm", - "alpha": "Alfa Sürümü" - } - }, - "liteMode": { - "title": "Hafif Mod Ayarları", - "actions": { - "enterNow": "Şimdi Hafif Moda Gir" - }, - "toggles": { - "autoEnter": "Otomatik Hafif Moda Gir" - }, - "tooltips": { - "autoEnter": "Pencere belirli bir süre kapatıldıktan sonra Hafif Modun otomatik olarak etkinleştirilmesi için etkinleştirin" - }, - "fields": { - "delay": "Otomatik Hafif Mod Giriş Gecikmesi" - }, - "messages": { - "autoEnterHint": "Pencere kapatıldığında, Hafif Mod {{n}} dakika sonra otomatik olarak etkinleştirilecek" - } - }, - "backup": { - "title": "Yedekleme Ayarı", - "tabs": { - "local": "Local backup", - "webdav": "WebDAV backup" - }, - "actions": { - "selectTarget": "Select backup target", - "backup": "Yedekle", - "export": "Export", - "exportBackup": "Export Backup", - "deleteBackup": "Yedeği Sil", - "restore": "Geri Yükle", - "restoreBackup": "Yedeği Geri Yükle" - }, - "fields": { - "webdavUrl": "WebDAV Sunucu URL'si", - "username": "Kullanıcı Adı", - "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." - }, - "messages": { - "webdavUrlRequired": "WebDAV URL'si boş olamaz", - "invalidWebdavUrl": "Geçersiz WebDAV URL formatı", - "usernameRequired": "Kullanıcı adı boş olamaz", - "passwordRequired": "Şifre boş olamaz", - "webdavConfigSaved": "WebDAV yapılandırması başarıyla kaydedildi", - "webdavConfigSaveFailed": "WebDAV yapılandırması kaydedilemedi: {{error}}", - "backupCreated": "Yedek başarıyla oluşturuldu", - "backupFailed": "Yedekleme başarısız oldu: {{error}}", - "localBackupCreated": "Local backup created successfully", - "localBackupFailed": "Local backup failed", - "restoreSuccess": "Geri Yükleme Başarılı, Uygulama 1 saniye içinde yeniden başlatılacak", - "localBackupExported": "Local backup exported successfully", - "localBackupExportFailed": "Failed to export local backup", - "confirmDelete": "Bu yedek dosyasını silmeyi onaylıyor musunuz?", - "confirmRestore": "Bu yedek dosyasını geri yüklemeyi onaylıyor musunuz?" - }, - "table": { - "filename": "Dosya Adı", - "backupTime": "Yedekleme Zamanı", - "actions": "İşlemler", - "noBackups": "Kullanılabilir yedek yok", - "rowsPerPage": "Rows per page" - } - }, - "misc": { - "title": "Çeşitli", - "fields": { - "appLogLevel": "Uygulama Günlük Seviyesi", - "appLogMaxSize": "App Log Max Size", - "appLogMaxCount": "App Log Max Count", - "autoCloseConnections": "Bağlantıları Otomatik Kapat", - "autoCheckUpdate": "Otomatik Güncelleme Kontrolü", - "enableBuiltinEnhanced": "Yerleşik Geliştirilmiş Modu Etkinleştir", - "proxyLayoutColumns": "Vekil Düzeni Sütunları", - "autoLogClean": "Otomatik Günlük Temizleme", - "autoDelayDetection": "Otomatik Gecikme Tespiti", - "defaultLatencyTest": "Varsayılan Gecikme Testi", - "defaultLatencyTimeout": "Varsayılan Gecikme Zaman Aşımı" - }, - "tooltips": { - "autoCloseConnections": "Vekil grup seçimi veya vekil modu değiştiğinde kurulan bağlantıları sonlandır", - "enableBuiltinEnhanced": "Yapılandırma dosyası için uyumluluk işleme", - "autoDelayDetection": "Arka planda mevcut düğümün gecikmesini periyodik olarak test eder", - "defaultLatencyTest": "Yalnızca HTTP istemci isteği testi için kullanılır ve yapılandırma dosyasında bir fark yaratmaz" - }, - "options": { - "proxyLayoutColumns": { - "auto": "Otomatik Sütunlar" - }, - "autoLogClean": { - "never": "Asla Temizleme", - "retainDays": "{{n}} Gün Sakla" - } - } - }, - "update": { - "title": "New Version v{{version}}", - "actions": { - "goToRelease": "Sürüm Sayfasına Git", - "update": "Güncelle" - }, - "messages": { - "portableError": "Taşınabilir sürüm uygulama içi güncellemeleri desteklemez. Lütfen manuel olarak indirip değiştirin", - "breakChangeError": "Bu sürüm büyük bir güncellemedir ve uygulama içi güncellemeleri desteklemez. Lütfen kaldırın ve yeni sürümü manuel olarak indirip kurun" - } - }, - "sysproxy": { - "title": "Sistem Vekil Ayarı", - "fieldsets": { - "currentStatus": "Geçerli Sistem Vekil'i" - }, - "fields": { - "enableStatus": "Etkinlik Durumu:", - "serverAddr": "Sunucu Adresi: ", - "pacUrl": "PAC URL'si: ", - "proxyHost": "Vekil Sunucusu", - "usePacMode": "PAC Modunu Kullan", - "proxyGuard": "Vekil Koruyucusu", - "guardDuration": "Koruma Süresi", - "alwaysUseDefaultBypass": "Her Zaman Varsayılan Baypas Kullan", - "proxyBypass": "Vekil Baypas Ayarları: ", - "bypass": "Baypas: ", - "pacScriptContent": "PAC Betiği İçeriği" - }, - "tooltips": { - "proxyGuard": "Diğer yazılımların işletim sisteminin vekil ayarlarını değiştirmesini önlemek için etkinleştirin" - }, - "messages": { - "durationTooShort": "Vekil Koruyucu Süresi 1 Saniyeden Az Olamaz", - "invalidBypass": "Geçersiz Baypas Formatı", - "invalidProxyHost": "Geçersiz Vekil Sunucusu Formatı" - }, - "actions": { - "editPac": "Düzenle PAC" - } - }, - "tun": { - "title": "Tun Modu", - "fields": { - "stack": "Tun Yığını", - "device": "Device Name", - "autoRoute": "Otomatik Yönlendirme", - "strictRoute": "Katı Yönlendirme", - "autoDetectInterface": "Arayüzü Otomatik Algıla", - "dnsHijack": "DNS Ele Geçirme", - "mtu": "Maksimum İletim Birimi" - }, - "tooltips": { - "dnsHijack": "Please use , to separate multiple DNS servers" - }, - "messages": { - "applied": "Ayarlar Uygulandı" - } - }, - "dns": { - "dialog": { - "title": "DNS Üzerine Yazma", - "warning": "Bu ayarlarla ilgili bilginiz yoksa, lütfen bunları değiştirmeyin ve DNS Üzerine Yazma'yı etkin tutun" - }, - "sections": { - "general": "DNS Ayarları", - "fallbackFilter": "Yedek Filtre Ayarları", - "hosts": "Hosts Ayarları" - }, - "fields": { - "enable": "DNS'i Etkinleştir", - "listen": "DNS Dinleme", - "enhancedMode": "Geliştirilmiş Mod", - "fakeIpRange": "Sahte IP Aralığı", - "fakeIpFilterMode": "Sahte IP Filtre Modu", - "ipv6": { - "label": "IPv6", - "description": "IPv6 DNS çözümlemesini etkinleştir" - }, - "preferH3": { - "label": "H3'ü Tercih Et", - "description": "DNS DOH uses HTTP/3" - }, - "respectRules": { - "label": "Kurallara Uy", - "description": "DNS bağlantıları yönlendirme kurallarını takip eder" - }, - "useHosts": { - "label": "Hosts Kullan", - "description": "Ana bilgisayarları hosts dosyası aracılığıyla çözümlemek için etkinleştirin" - }, - "useSystemHosts": { - "label": "Sistem Hosts Dosyasını Kullan", - "description": "Ana bilgisayarları sistem hosts dosyası aracılığıyla çözümlemek için etkinleştirin" - }, - "directPolicy": { - "label": "Doğrudan İsim Sunucusu Politikasını Takip Et", - "description": "İsim sunucusu politikasının takip edilip edilmeyeceği" - }, - "defaultNameserver": { - "label": "Varsayılan İsim Sunucusu", - "description": "DNS sunucularını çözümlemek için kullanılan varsayılan DNS sunucuları" - }, - "nameserver": { - "label": "İsim Sunucusu", - "description": "DNS sunucuları listesi, virgülle ayrılmış" - }, - "fallback": { - "label": "Yedek", - "description": "Yedek DNS sunucuları listesi, virgülle ayrılmış" - }, - "proxy": { - "label": "Vekil Sunucusu İsim Sunucusu", - "description": "Vekil düğümü alan adı çözümlemesi için DNS sunucuları" - }, - "directNameserver": { - "label": "Doğrudan İsim Sunucusu", - "description": "Doğrudan çıkış alan adı çözümlemesi için DNS sunucuları, 'system' anahtar kelimesini destekler, virgülle ayrılmış" - }, - "fakeIpFilter": { - "label": "Sahte IP Filtresi", - "description": "Sahte IP çözümlemesini atlayan alan adları, virgülle ayrılmış" - }, - "nameserverPolicy": { - "label": "İsim Sunucusu Politikası", - "description": "Alana özgü DNS sunucusu, birden çok sunucu noktalı virgülle ayrılır, format: domain=server1;server2" - }, - "geoipFiltering": { - "label": "GeoIP Filtreleme", - "description": "Yedek için GeoIP filtrelemeyi etkinleştir" - }, - "geoipCode": "GeoIP Kodu", - "fallbackIpCidr": { - "label": "Yedek IP CIDR", - "description": "Yedek sunucuları kullanmayan IP CIDR'ları, virgülle ayrılmış" - }, - "fallbackDomain": { - "label": "Yedek Alan Adı", - "description": "Yedek sunucuları kullanan alan adları, virgülle ayrılmış" - }, - "hosts": { - "label": "Hosts", - "description": "Özel alan adından IP'ye veya alan adına eşleme" - } - }, - "messages": { - "saved": "DNS ayarları kaydedildi", - "configError": "DNS configuration error:" - }, - "errors": { - "invalid": "Invalid configuration" - } - }, - "webUI": { - "actions": { - "openUrl": "URL Aç" - }, - "title": "Web Arayüzü", - "messages": { - "supportedPlaceholders": "%host, %port, %secret destekler", - "placeholderInstruction": "Ana bilgisayar, port, sırrı %host, %port, %secret ile değiştirin" - } - }, - "hotkey": { - "toggles": { - "enableGlobal": "Küresel Kısayol Tuşunu Etkinleştir" - }, - "title": "Kısayol Tuşu Ayarı", - "functions": { - "rule": "Kural Modu", - "global": "Küresel Mod", - "openOrCloseDashboard": "Kontrol Panelini Aç/Kapat", - "toggleSystemProxy": "Sistem Vekil'ini Etkinleştir/Devre Dışı Bırak", - "toggleTunMode": "Tun Modunu Etkinleştir/Devre Dışı Bırak", - "entryLightweightMode": "Hafif Moda Gir", - "direct": "Doğrudan Mod" - } - }, - "password": { - "prompts": { - "enterRoot": "Lütfen root şifrenizi girin" - } - }, - "networkInterface": { - "title": "Ağ Arayüzü", - "fields": { - "ipAddress": "IP Adresi", - "macAddress": "MAC Adresi" - } - } - }, - "feedback": { - "notifications": { - "clash": { - "restartSuccess": "Clash Çekirdeği Yeniden Başlatıldı", - "versionUpdated": "Çekirdek Sürümü Güncellendi", - "changeSuccess": "Çekirdek başarıyla değiştirildi", - "changeFailed": "Çekirdek değiştirilemedi", - "geoDataUpdated": "GeoData Güncellendi" - }, - "clashService": { - "installSuccess": "Hizmet Başarıyla Kuruldu", - "uninstallSuccess": "Hizmet Başarıyla Kaldırıldı" - }, - "updater": { - "withClashProxySuccess": "Clash vekil ile güncelleme başarılı", - "withClashProxyFailed": "Clash vekil ile bile güncelleme başarısız oldu" - } - } - }, - "statuses": { - "clash": { - "stopping": "Stopping Core...", - "restarting": "Restarting Core..." - }, - "clashService": { - "installing": "Hizmet Kuruluyor...", - "uninstalling": "Uninstalling Service..." - } - } - }, - "layout": { - "components": { - "navigation": { - "tabs": { - "home": "Ana Sayfa", - "proxies": "Vekil'ler", - "profiles": "Profiller", - "connections": "Bağlantılar", - "rules": "Kurallar", - "logs": "Günlükler", - "unlock": "Test", - "settings": "Ayarlar" - }, - "menu": { - "reorderMode": "Menu reorder mode", - "unlock": "Unlock menu order", - "lock": "Lock menu order" - } - } - } - } -} diff --git a/src/locales/tr/connections.json b/src/locales/tr/connections.json new file mode 100644 index 00000000..e13e2bd1 --- /dev/null +++ b/src/locales/tr/connections.json @@ -0,0 +1,28 @@ +{ + "page": { + "title": "Bağlantılar" + }, + "components": { + "fields": { + "host": "Ana Bilgisayar", + "dlSpeed": "İndirme Hızı", + "ulSpeed": "Yükleme Hızı", + "chains": "Zincirler", + "rule": "Kural", + "process": "İşlem", + "time": "Zaman", + "source": "Kaynak", + "destination": "Hedef", + "destinationPort": "Hedef Port", + "type": "Tip" + }, + "order": { + "default": "Default", + "uploadSpeed": "Yükleme Hızı", + "downloadSpeed": "İndirme Hızı" + }, + "actions": { + "closeConnection": "Bağlantıyı Kapat" + } + } +} diff --git a/src/locales/tr/home.json b/src/locales/tr/home.json new file mode 100644 index 00000000..2bcf868c --- /dev/null +++ b/src/locales/tr/home.json @@ -0,0 +1,138 @@ +{ + "page": { + "tooltips": { + "lightweightMode": "Hafif Mod", + "manual": "Kılavuz", + "settings": "Ana Sayfa Ayarları" + }, + "cards": { + "trafficStats": "Trafik İstatistikleri", + "networkSettings": "Ağ Ayarları", + "proxyMode": "Vekil Modu" + }, + "settings": { + "cards": { + "profile": "Profil Kartı", + "currentProxy": "Geçerli Vekil Kartı", + "network": "Ağ Ayarları Kartı", + "proxyMode": "Vekil Modu Kartı", + "traffic": "Trafik İstatistikleri Kartı", + "tests": "Web Sitesi Testleri Kartı", + "ip": "IP Bilgi Kartı", + "clashInfo": "Clash Bilgi Kartları", + "systemInfo": "Sistem Bilgi Kartları" + }, + "title": "Ana Sayfa Ayarları" + }, + "title": "Ana Sayfa" + }, + "components": { + "proxyTun": { + "status": { + "systemProxyEnabled": "Sistem vekil'i etkinleştirildi, uygulamalarınız vekil üzerinden ağa erişecek", + "systemProxyDisabled": "Sistem vekil'i devre dışı, çoğu kullanıcı için bu seçeneği açmanız önerilir", + "tunModeServiceRequired": "TUN modu hizmet modu gerektirir, lütfen önce hizmeti kurun", + "tunModeEnabled": "TUN modu etkinleştirildi, uygulamalar sanal ağ kartı üzerinden ağa erişecek", + "tunModeDisabled": "TUN modu devre dışı, özel uygulamalar için uygundur" + }, + "tooltips": { + "systemProxy": "İşletim sisteminin vekil ayarlarını değiştirmek için etkinleştirin. Etkinleştirme başarısız olursa, işletim sisteminin proxy ayarlarını manuel olarak değiştirin", + "tunMode": "TUN modu tüm uygulama trafiğini ele alabilir, sistem vekil ayarlarını takip etmeyen özel uygulamalar için uygundur" + } + }, + "clashInfo": { + "title": "Clash Bilgisi", + "fields": { + "coreVersion": "Çekirdek Sürümü", + "systemProxyAddress": "Sistem Vekil Adresi", + "mixedPort": "Mixed Port", + "uptime": "Çalışma Süresi", + "rulesCount": "Kural Sayısı" + } + }, + "systemInfo": { + "title": "Sistem Bilgisi", + "fields": { + "osInfo": "İşletim Sistemi Bilgisi", + "autoLaunch": "Otomatik Başlatma", + "runningMode": "Çalışma Modu", + "lastCheckUpdate": "Son Güncelleme Kontrolü", + "vergeVersion": "Verge Sürümü" + }, + "actions": { + "settings": "Ayarlar" + }, + "tooltips": { + "autoLaunchAdmin": "Yönetici modu otomatik başlatmayı desteklemeyebilir" + }, + "badges": { + "adminMode": "Yönetici Modu", + "serviceMode": "Hizmet Modu", + "sidecarMode": "Kullanıcı Modu", + "adminServiceMode": "Yönetici + Hizmet Modu" + } + }, + "ipInfo": { + "title": "IP Bilgisi", + "labels": { + "ip": "IP", + "asn": "ASN", + "isp": "ISP", + "org": "Kuruluş", + "location": "Konum", + "timezone": "Saat Dilimi", + "autoRefresh": "Otomatik yenile", + "unknown": "Bilinmiyor" + }, + "errors": { + "load": "IP bilgisi alınamadı" + } + }, + "currentProxy": { + "title": "Geçerli Düğüm", + "actions": { + "refreshDelay": "Gecikme kontrolü" + }, + "labels": { + "globalMode": "Küresel Mod", + "directMode": "Doğrudan Mod", + "group": "Grup", + "proxy": "Vekil", + "noActiveNode": "Aktif vekil düğümü yok" + } + }, + "tests": { + "title": "Web Sitesi Testleri" + }, + "traffic": { + "metrics": { + "uploadSpeed": "Yükleme Hızı", + "downloadSpeed": "İndirme Hızı", + "activeConnections": "Aktif Bağlantılar", + "memoryUsage": "Çekirdek Kullanımı" + }, + "legends": { + "upload": "Yükleme", + "download": "İndirme" + }, + "patterns": { + "minutes": "{{time}} Minutes" + } + }, + "clashMode": { + "errors": { + "communication": "Core communication error" + }, + "labels": { + "rule": "Kural Modu", + "global": "Küresel Mod", + "direct": "Doğrudan Mod" + }, + "descriptions": { + "rule": "Automatically choose proxies according to the rule set.", + "global": "Forward all network requests through the selected proxy.", + "direct": "Bypass the proxy and connect to the internet directly." + } + } + } +} diff --git a/src/locales/tr/index.ts b/src/locales/tr/index.ts new file mode 100644 index 00000000..2977171d --- /dev/null +++ b/src/locales/tr/index.ts @@ -0,0 +1,27 @@ +import shared from "./shared.json"; +import profiles from "./profiles.json"; +import proxies from "./proxies.json"; +import connections from "./connections.json"; +import tests from "./tests.json"; +import logs from "./logs.json"; +import rules from "./rules.json"; +import home from "./home.json"; +import unlock from "./unlock.json"; +import settings from "./settings.json"; +import layout from "./layout.json"; + +const resources = { + "shared": shared, + "profiles": profiles, + "proxies": proxies, + "connections": connections, + "tests": tests, + "logs": logs, + "rules": rules, + "home": home, + "unlock": unlock, + "settings": settings, + "layout": layout, +}; + +export default resources; diff --git a/src/locales/tr/layout.json b/src/locales/tr/layout.json new file mode 100644 index 00000000..839bc6e8 --- /dev/null +++ b/src/locales/tr/layout.json @@ -0,0 +1,21 @@ +{ + "components": { + "navigation": { + "tabs": { + "home": "Ana Sayfa", + "proxies": "Vekil'ler", + "profiles": "Profiller", + "connections": "Bağlantılar", + "rules": "Kurallar", + "logs": "Günlükler", + "unlock": "Test", + "settings": "Ayarlar" + }, + "menu": { + "reorderMode": "Menu reorder mode", + "unlock": "Unlock menu order", + "lock": "Lock menu order" + } + } + } +} diff --git a/src/locales/tr/logs.json b/src/locales/tr/logs.json new file mode 100644 index 00000000..4fa81c05 --- /dev/null +++ b/src/locales/tr/logs.json @@ -0,0 +1,5 @@ +{ + "page": { + "title": "Günlükler" + } +} diff --git a/src/locales/tr/profiles.json b/src/locales/tr/profiles.json new file mode 100644 index 00000000..5a8ab7c5 --- /dev/null +++ b/src/locales/tr/profiles.json @@ -0,0 +1,182 @@ +{ + "page": { + "actions": { + "updateAll": "Tüm Profilleri Güncelle", + "viewRuntimeConfig": "Çalışma Zamanı Yapılandırmasını Görüntüle", + "reactivate": "Profilleri Yeniden Etkinleştir", + "import": "İçe Aktar" + }, + "batch": { + "actions": { + "delete": "Seçili Profilleri Sil", + "selectAll": "Tümünü Seç", + "deselectAll": "Tüm Seçimi Kaldır", + "done": "Tamam" + }, + "summary": { + "selected": "Seçildi", + "items": "öğeler" + }, + "title": "Toplu İşlemler" + }, + "importForm": { + "placeholder": "Profil URL'si", + "actions": { + "paste": "Yapıştır" + } + }, + "feedback": { + "errors": { + "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", + "onlyYaml": "Yalnızca YAML Dosyaları Desteklenir" + }, + "notifications": { + "importRetry": "İçe aktarma başarısız oldu, Clash vekil ile yeniden deneniyor...", + "importFail": "Clash vekil ile bile içe aktarma başarısız oldu", + "importNeedsRefresh": "Profile imported but may need manual refresh", + "importSuccess": "Profile imported successfully, please restart if not visible", + "profileSwitched": "Profil Değiştirildi", + "profileReactivated": "Profil Yeniden Etkinleştirildi", + "switchInterrupted": "Profile switch interrupted by new selection", + "batchDeleted": "Seçili profiller başarıyla silindi" + }, + "notices": { + "forceRefreshCompleted": "Force refresh completed", + "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" + } + }, + "title": "Profiller" + }, + "components": { + "card": { + "labels": { + "clickToImport": "Abonelik içe aktarmak için tıklayın" + } + }, + "fileInput": { + "chooseFile": "Dosya Seç" + }, + "menu": { + "home": "Ana Sayfa", + "select": "Seç", + "editInfo": "Bilgileri Düzenle", + "editFile": "Dosyayı Düzenle", + "editRules": "Kuralları Düzenle", + "editProxies": "Vekil'leri Düzenle", + "editGroups": "Vekil Gruplarını Düzenle", + "extendConfig": "Yapılandırma Genişletme", + "extendScript": "Betik Genişletme", + "openFile": "Dosyayı Aç", + "update": "Güncelle", + "updateViaProxy": "Update via proxy" + }, + "more": { + "global": { + "merge": "Global Merge", + "script": "Global Script" + }, + "chips": { + "merge": "Merge", + "script": "Script" + } + }, + "profileItem": { + "tooltips": { + "showLast": "Click to show last update time", + "showNext": "Click to show next update" + }, + "status": { + "lastUpdateFailed": "Son güncelleme başarısız oldu", + "nextUp": "Sıradaki", + "noSchedule": "Program yok", + "unknown": "Bilinmiyor", + "autoUpdateDisabled": "Otomatik güncelleme devre dışı" + } + } + }, + "modals": { + "profileForm": { + "title": { + "create": "Profil Oluştur", + "edit": "Profili Düzenle" + }, + "fields": { + "type": "Tip", + "description": "Açıklamalar", + "subscriptionUrl": "Abonelik URL'si", + "httpTimeout": "HTTP Request Timeout", + "updateInterval": "Güncelleme Aralığı", + "useSystemProxy": "Sistem Vekil'ini Kullan", + "useClashProxy": "Clash Vekil'ini Kullan", + "acceptInvalidCerts": "Geçersiz Sertifikalara İzin Ver (Tehlikeli)", + "allowAutoUpdate": "Allow Auto Update" + }, + "feedback": { + "notifications": { + "creationRetry": "Profil oluşturma başarısız oldu, Clash vekil ile yeniden deneniyor...", + "creationSuccess": "Clash vekil ile profil oluşturma başarılı oldu" + } + } + }, + "proxiesEditor": { + "title": "Vekil'leri Düzenle", + "placeholders": { + "multiUri": "Birden fazla URI için yeni satırlar kullanın (Base64 kodlaması desteklenir)" + }, + "actions": { + "prepend": "Vekil'in Başına Ekle", + "append": "Vekil'in Sonuna Ekle" + } + }, + "groupsEditor": { + "title": "Vekil Gruplarını Düzenle", + "errors": { + "nameRequired": "Grup Adı Gerekli", + "nameExists": "Grup Adı Zaten Var" + }, + "fields": { + "type": "Grup Tipi", + "name": "Grup Adı", + "icon": "Vekil Grup Simgesi", + "proxies": "Vekil'leri Kullan", + "provider": "Sağlayıcı Kullan", + "healthCheckUrl": "Sağlık Kontrolü URL'si", + "expectedStatus": "Beklenen Durum", + "interval": "Aralık", + "maxFailedTimes": "Maksimum Başarısız Deneme", + "interfaceName": "Arayüz Adı", + "routingMark": "Yönlendirme İşareti", + "filter": "Filtre", + "excludeFilter": "Hariç Tutma Filtresi", + "excludeType": "Hariç Tutma Tipi", + "includeAll": "Tüm Vekil'leri ve Sağlayıcıları Dahil Et", + "includeAllProxies": "Tüm Vekil'leri Dahil Et", + "includeAllProviders": "Tüm Sağlayıcıları Dahil Et" + }, + "toggles": { + "lazy": "Tembel", + "disableUdp": "UDP'yi Devre Dışı Bırak", + "hidden": "Gizli" + }, + "actions": { + "prepend": "Grubun Başına Ekle", + "append": "Grubun Sonuna Ekle" + } + }, + "editor": { + "actions": { + "format": "Belgeyi biçimlendir" + }, + "messages": { + "readOnly": "Salt okunur düzenleyicide düzenlenemez" + } + }, + "confirmDelete": { + "title": "Silmeyi Onayla", + "message": "Bu işlem geri alınamaz" + }, + "logViewer": { + "title": "Betik Konsolu" + } + } +} diff --git a/src/locales/tr/proxies.json b/src/locales/tr/proxies.json new file mode 100644 index 00000000..ac098259 --- /dev/null +++ b/src/locales/tr/proxies.json @@ -0,0 +1,90 @@ +{ + "page": { + "modes": { + "rule": "Rule", + "global": "Global", + "direct": "Direct" + }, + "actions": { + "toggleChain": "🔗 Zincir Proxy", + "connect": "Connect", + "disconnect": "Disconnect", + "connecting": "Connecting...", + "clearChainConfig": "Delete Chain Config" + }, + "provider": { + "title": "Vekil Sağlayıcısı", + "actions": { + "updateAll": "Tümünü Güncelle", + "update": "Güncelle" + } + }, + "rules": { + "title": "Proxy Rules", + "select": "Select Rules" + }, + "labels": { + "proxyCount": "Vekil Sayısı", + "delayCheckReset": "Sabit iptali için gecikme kontrolü" + }, + "tooltips": { + "locate": "konum", + "delayCheck": "Gecikme kontrolü", + "sortDefault": "Varsayılana göre sırala", + "sortDelay": "Gecikmeye göre sırala", + "sortName": "İsme göre sırala", + "delayCheckUrl": "Gecikme kontrol URL'si", + "showBasic": "Temel Vekil", + "showDetail": "Vekil detayı", + "filter": "Filtre" + }, + "placeholders": { + "delayCheckUrl": "Gecikme kontrol URL'si" + }, + "chain": { + "header": "Chain Proxy Config", + "empty": "No proxy chain configured", + "instruction": "Click nodes in order to add to proxy chain", + "minimumNodes": "Chain proxy requires at least 2 nodes", + "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", + "connectFailed": "Failed to connect to proxy chain", + "disconnectFailed": "Failed to disconnect from proxy chain", + "duplicateNode": "Proxy node already exists in chain" + }, + "messages": { + "directMode": "Doğrudan Mod" + }, + "title": { + "default": "Vekil Grupları", + "chainMode": "Proxy Chain Mode" + } + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "components": { + "enums": { + "strategies": { + "select": "Vekil'i manuel olarak seçin", + "url-test": "URL testi gecikmesine göre vekil seçin", + "fallback": "Hata durumunda başka bir vekil'e geçin", + "load-balance": "Yük dengelemeye göre vekil dağıtın", + "relay": "Tanımlanan vekil zincirinden geçirin" + }, + "policies": { + "DIRECT": "Veri doğrudan dışarı gider", + "REJECT": "İstekleri engeller", + "REJECT-DROP": "İstekleri atar", + "PASS": "Eşleştiğinde bu kuralı atlar" + } + } + } +} diff --git a/src/locales/tr/rules.json b/src/locales/tr/rules.json new file mode 100644 index 00000000..ac8ae0d8 --- /dev/null +++ b/src/locales/tr/rules.json @@ -0,0 +1,82 @@ +{ + "page": { + "provider": { + "trigger": "Kural Sağlayıcısı", + "dialogTitle": "Kural Sağlayıcısı", + "actions": { + "updateAll": "Tümünü Güncelle", + "update": "Güncelle" + } + }, + "title": "Kurallar" + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "modals": { + "editor": { + "form": { + "labels": { + "type": "Kural Tipi", + "content": "Kural İçeriği", + "proxyPolicy": "Vekil Politikası" + }, + "toggles": { + "noResolve": "Çözümleme Yok" + }, + "actions": { + "prependRule": "Kuralın Başına Ekle", + "appendRule": "Kuralın Sonuna Ekle" + }, + "validation": { + "conditionRequired": "Kural Koşulu Gerekli", + "invalidRule": "Geçersiz Kural" + } + }, + "ruleTypes": { + "DOMAIN": "Tam alan adıyla eşleşir", + "DOMAIN-SUFFIX": "Alan adı sonekiyle eşleşir", + "DOMAIN-KEYWORD": "Alan adı anahtar kelimesiyle eşleşir", + "DOMAIN-REGEX": "Alan adını düzenli ifadeler kullanarak eşleştirir", + "GEOSITE": "Geosite içindeki alan adlarıyla eşleşir", + "GEOIP": "IP adresinin ülke koduyla eşleşir", + "SRC-GEOIP": "Kaynak IP adresinin ülke koduyla eşleşir", + "IP-ASN": "IP adresinin ASN'siyle eşleşir", + "SRC-IP-ASN": "Kaynak IP adresinin ASN'siyle eşleşir", + "IP-CIDR": "IP adresi aralığıyla eşleşir", + "IP-CIDR6": "IPv6 adresi aralığıyla eşleşir", + "SRC-IP-CIDR": "Kaynak IP adresi aralığıyla eşleşir", + "IP-SUFFIX": "IP adresi sonek aralığıyla eşleşir", + "SRC-IP-SUFFIX": "Kaynak IP adresi sonek aralığıyla eşleşir", + "SRC-PORT": "Kaynak port aralığıyla eşleşir", + "DST-PORT": "Hedef port aralığıyla eşleşir", + "IN-PORT": "Gelen port ile eşleşir", + "DSCP": "DSCP işaretlemesi (sadece tvekil UDP girişi için)", + "PROCESS-NAME": "İşlem adıyla eşleşir (Android paket adı)", + "PROCESS-PATH": "Tam işlem yoluyla eşleşir", + "PROCESS-NAME-REGEX": "Tam işlem adını düzenli ifadeler kullanarak eşleştirir (Android paket adı)", + "PROCESS-PATH-REGEX": "Tam işlem yolunu düzenli ifadeler kullanarak eşleştirir", + "NETWORK": "Taşıma protokolüyle eşleşir (tcp/udp)", + "UID": "Linux KULLANICI ID'siyle eşleşir", + "IN-TYPE": "Gelen bağlantı tipiyle eşleşir", + "IN-USER": "Gelen bağlantı kullanıcı adıyla eşleşir", + "IN-NAME": "Gelen bağlantı adıyla eşleşir", + "SUB-RULE": "Alt kural", + "RULE-SET": "Kural setiyle eşleşir", + "AND": "Mantıksal VE", + "OR": "Mantıksal VEYA", + "NOT": "Mantıksal DEĞİL", + "MATCH": "Tüm isteklerle eşleşir" + }, + "title": "Kuralları Düzenle" + } + } +} diff --git a/src/locales/tr/settings.json b/src/locales/tr/settings.json new file mode 100644 index 00000000..5dcb0154 --- /dev/null +++ b/src/locales/tr/settings.json @@ -0,0 +1,571 @@ +{ + "page": { + "actions": { + "manual": "Kılavuz", + "telegram": "Telegram Kanalı", + "github": "Github Repo" + }, + "title": "Ayarlar" + }, + "sections": { + "system": { + "title": "Sistem Ayarları", + "toggles": { + "tunMode": "Tun Modu", + "systemProxy": "Sistem Vekil'i" + }, + "tooltips": { + "autoLaunchAdmin": "Yönetici modu otomatik başlatmayı desteklemeyebilir", + "silentStart": "Programı paneli görüntülemeden arka plan modunda başlatır" + }, + "fields": { + "autoLaunch": "Otomatik Başlat", + "silentStart": "Sessiz Başlatma" + }, + "notifications": { + "tunMode": { + "autoDisabled": "TUN Mode automatically disabled due to service unavailable", + "autoDisableFailed": "Failed to disable TUN Mode automatically" + } + } + }, + "proxyControl": { + "tooltips": { + "systemProxy": "İşletim sisteminin vekil ayarlarını değiştirmek için etkinleştirin. Etkinleştirme başarısız olursa, işletim sisteminin proxy ayarlarını manuel olarak değiştirin", + "tunMode": "Tun (Sanal Ağ Kartı) modu: Tüm sistem trafiğini yakalar, etkinleştirildiğinde sistem vekil'ini etkinleştirmeye gerek yoktur.", + "tunUnavailable": "TUN requires Service Mode or Admin Mode" + }, + "actions": { + "installService": "Hizmeti Kur", + "uninstallService": "Uninstall Service" + }, + "fields": { + "systemProxy": "Sistem Vekil'i", + "tunMode": "Tun Modu" + } + }, + "externalController": { + "title": "Harici Denetleyici", + "fields": { + "enable": "Harici denetleyiciyi etkinleştir", + "address": "Harici Denetleyici", + "secret": "Çekirdek Sırrı" + }, + "placeholders": { + "address": "Gerekli", + "secret": "Önerilen" + }, + "tooltips": { + "copy": "Panoya kopyala" + }, + "messages": { + "addressRequired": "Denetleyici adresi boş olamaz", + "secretRequired": "Gizli anahtar boş olamaz", + "copyFailed": "Kopyalama başarısız", + "controllerCopied": "Denetleyici adresi panoya kopyalandı", + "secretCopied": "Gizli anahtar panoya kopyalandı" + } + }, + "externalCors": { + "title": "Harici CORS yapılandırması", + "fields": { + "allowPrivateNetwork": "Özel ağ erişimine izin ver", + "allowedOrigins": "İzin verilen kökenler" + }, + "placeholders": { + "origin": "Geçerli bir URL girin" + }, + "actions": { + "add": "Ekle" + }, + "messages": { + "alwaysIncluded": "Her zaman dahil edilen kökenler: {{urls}}" + }, + "tooltips": { + "open": "Harici CORS ayarları" + } + }, + "appearance": { + "light": "Light", + "dark": "Dark", + "system": "System" + }, + "clash": { + "title": "Clash Ayarı", + "form": { + "fields": { + "allowLan": "LAN'a İzin Ver", + "dnsOverwrite": "DNS Üzerine Yazma", + "ipv6": "IPv6", + "unifiedDelay": "Birleşik Gecikme", + "logLevel": "Günlük Seviyesi", + "portConfig": "Port Yapılandırması", + "external": "Harici", + "webUI": "Web Arayüzü", + "clashCore": "Clash Çekirdeği", + "openUwpTool": "UWP Aracını Aç", + "updateGeoData": "GeoData'yı Güncelle" + }, + "tooltips": { + "networkInterface": "Ağ Arayüzü", + "unifiedDelay": "Birleşik gecikme açıldığında, bağlantı el sıkışmaları vb. nedeniyle farklı tür düğümler arasındaki gecikme farklarını ortadan kaldırmak için iki gecikme testi gerçekleştirilir", + "logLevel": "Bu parametre yalnızca günlük dizini Hizmet klasöründeki çekirdek günlük dosyaları için geçerlidir", + "openUwpTool": "Windows 8'den beri, UWP uygulamaları (Microsoft Store gibi) yerel ana bilgisayar ağ hizmetlerine doğrudan erişmekten kısıtlanmıştır ve bu araç bu kısıtlamayı atlatmak için kullanılabilir" + }, + "options": { + "logLevel": { + "debug": "Debug", + "info": "Info", + "warning": "Warn", + "error": "Error", + "silent": "Silent" + } + } + } + } + }, + "components": { + "verge": { + "basic": { + "title": "Verge Temel Ayarı", + "actions": { + "browse": "Gözat" + }, + "trayOptions": { + "showMainWindow": "Ana Pencereyi Göster", + "showTrayMenu": "Tepsi Menüsünü Göster", + "disable": "Devre Dışı Bırak" + }, + "fields": { + "language": "Dil", + "themeMode": "Tema Modu", + "trayClickEvent": "Sistem Tepsisi Tıklama Olayı", + "copyEnvType": "Env Tipini Kopyala", + "startPage": "Başlangıç Sayfası", + "startupScript": "Başlangıç Betiği", + "themeSetting": "Tema Ayarı", + "layoutSetting": "Düzen Ayarı", + "misc": "Çeşitli", + "hotkeySetting": "Kısayol Tuşu Ayarı" + } + }, + "advanced": { + "title": "Verge Gelişmiş Ayarı", + "tooltips": { + "backupInfo": "WebDAV yedekleme yapılandırma dosyalarını destekler", + "openConfDir": "Yazılım anormal çalışıyorsa, bu klasördeki tüm dosyaları YEDEKLEYİN ve silin, ardından yazılımı yeniden başlatın", + "liteMode": "GUI'yi kapatın ve yalnızca çekirdeği çalışır durumda tutun" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "Şu Anda En Son Sürümdesiniz", + "versionCopied": "Version copied to clipboard" + }, + "fields": { + "backupSetting": "Yedekleme Ayarı", + "runtimeConfig": "Çalışma Zamanı Yapılandırması", + "openConfDir": "Yapılandırma Dizinini Aç", + "openCoreDir": "Çekirdek Dizinini Aç", + "openLogsDir": "Günlük Dizinini Aç", + "checkUpdates": "Güncellemeleri Kontrol Et", + "openDevTools": "Geliştirici Araçları", + "liteModeSettings": "Hafif Mod Ayarları", + "exit": "Çıkış", + "exportDiagnostics": "Tanılama Bilgilerini Dışa Aktar", + "vergeVersion": "Verge Sürümü" + } + }, + "theme": { + "title": "Tema Ayarı", + "fields": { + "primaryColor": "Ana Renk", + "secondaryColor": "İkincil Renk", + "primaryText": "Ana Metin", + "secondaryText": "İkincil Metin", + "infoColor": "Bilgi Rengi", + "warningColor": "Uyarı Rengi", + "errorColor": "Hata Rengi", + "successColor": "Başarı Rengi", + "fontFamily": "Yazı Tipi Ailesi", + "cssInjection": "CSS Enjeksiyonu" + }, + "actions": { + "editCss": "Edit CSS" + }, + "dialogs": { + "editCssTitle": "Edit CSS" + } + }, + "layout": { + "title": "Düzen Ayarı", + "fields": { + "preferSystemTitlebar": "Prefer System Titlebar", + "trafficGraph": "Trafik Grafiği", + "memoryUsage": "Çekirdek Kullanımı", + "proxyGroupIcon": "Vekil Grup Simgesi", + "hoverNavigator": "Hover Jump Navigator", + "hoverNavigatorDelay": "Hover Jump Navigator Delay", + "navIcon": "Gezinme Simgesi", + "trayIcon": "Tepsi Simgesi", + "showProxyGroupsInline": "Show Proxy Groups Inline", + "commonTrayIcon": "Genel Tepsi Simgesi", + "systemProxyTrayIcon": "Sistem Vekil Tepsi Simgesi", + "tunTrayIcon": "Tun Tepsi Simgesi", + "enableTrayIcon": "Tepsi Simgesini Etkinleştir", + "enableTraySpeed": "Tepsi Hızını Etkinleştir" + }, + "tooltips": { + "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", + "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" + }, + "options": { + "icon": { + "monochrome": "Tek Renkli", + "colorful": "Renkli", + "disable": "Devre Dışı Bırak" + } + } + } + } + }, + "modals": { + "clashPort": { + "title": "Port Yapılandırması", + "fields": { + "mixed": "Karışık Port", + "socks": "Socks Portu", + "http": "Http(s) Portu", + "redir": "Redir Portu", + "tproxy": "Tvekil Portu" + }, + "actions": { + "random": "Rastgele Port" + }, + "messages": { + "saved": "Port settings saved", + "saveFailed": "Failed to save port settings" + } + }, + "clashCore": { + "variants": { + "release": "Kararlı Sürüm", + "alpha": "Alfa Sürümü" + } + }, + "liteMode": { + "title": "Hafif Mod Ayarları", + "actions": { + "enterNow": "Şimdi Hafif Moda Gir" + }, + "toggles": { + "autoEnter": "Otomatik Hafif Moda Gir" + }, + "tooltips": { + "autoEnter": "Pencere belirli bir süre kapatıldıktan sonra Hafif Modun otomatik olarak etkinleştirilmesi için etkinleştirin" + }, + "fields": { + "delay": "Otomatik Hafif Mod Giriş Gecikmesi" + }, + "messages": { + "autoEnterHint": "Pencere kapatıldığında, Hafif Mod {{n}} dakika sonra otomatik olarak etkinleştirilecek" + } + }, + "backup": { + "title": "Yedekleme Ayarı", + "tabs": { + "local": "Local backup", + "webdav": "WebDAV backup" + }, + "actions": { + "selectTarget": "Select backup target", + "backup": "Yedekle", + "export": "Export", + "exportBackup": "Export Backup", + "deleteBackup": "Yedeği Sil", + "restore": "Geri Yükle", + "restoreBackup": "Yedeği Geri Yükle" + }, + "fields": { + "webdavUrl": "WebDAV Sunucu URL'si", + "username": "Kullanıcı Adı", + "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." + }, + "messages": { + "webdavUrlRequired": "WebDAV URL'si boş olamaz", + "invalidWebdavUrl": "Geçersiz WebDAV URL formatı", + "usernameRequired": "Kullanıcı adı boş olamaz", + "passwordRequired": "Şifre boş olamaz", + "webdavConfigSaved": "WebDAV yapılandırması başarıyla kaydedildi", + "webdavConfigSaveFailed": "WebDAV yapılandırması kaydedilemedi: {{error}}", + "backupCreated": "Yedek başarıyla oluşturuldu", + "backupFailed": "Yedekleme başarısız oldu: {{error}}", + "localBackupCreated": "Local backup created successfully", + "localBackupFailed": "Local backup failed", + "restoreSuccess": "Geri Yükleme Başarılı, Uygulama 1 saniye içinde yeniden başlatılacak", + "localBackupExported": "Local backup exported successfully", + "localBackupExportFailed": "Failed to export local backup", + "confirmDelete": "Bu yedek dosyasını silmeyi onaylıyor musunuz?", + "confirmRestore": "Bu yedek dosyasını geri yüklemeyi onaylıyor musunuz?" + }, + "table": { + "filename": "Dosya Adı", + "backupTime": "Yedekleme Zamanı", + "actions": "İşlemler", + "noBackups": "Kullanılabilir yedek yok", + "rowsPerPage": "Rows per page" + } + }, + "misc": { + "title": "Çeşitli", + "fields": { + "appLogLevel": "Uygulama Günlük Seviyesi", + "appLogMaxSize": "App Log Max Size", + "appLogMaxCount": "App Log Max Count", + "autoCloseConnections": "Bağlantıları Otomatik Kapat", + "autoCheckUpdate": "Otomatik Güncelleme Kontrolü", + "enableBuiltinEnhanced": "Yerleşik Geliştirilmiş Modu Etkinleştir", + "proxyLayoutColumns": "Vekil Düzeni Sütunları", + "autoLogClean": "Otomatik Günlük Temizleme", + "autoDelayDetection": "Otomatik Gecikme Tespiti", + "defaultLatencyTest": "Varsayılan Gecikme Testi", + "defaultLatencyTimeout": "Varsayılan Gecikme Zaman Aşımı" + }, + "tooltips": { + "autoCloseConnections": "Vekil grup seçimi veya vekil modu değiştiğinde kurulan bağlantıları sonlandır", + "enableBuiltinEnhanced": "Yapılandırma dosyası için uyumluluk işleme", + "autoDelayDetection": "Arka planda mevcut düğümün gecikmesini periyodik olarak test eder", + "defaultLatencyTest": "Yalnızca HTTP istemci isteği testi için kullanılır ve yapılandırma dosyasında bir fark yaratmaz" + }, + "options": { + "proxyLayoutColumns": { + "auto": "Otomatik Sütunlar" + }, + "autoLogClean": { + "never": "Asla Temizleme", + "retainDays": "{{n}} Gün Sakla" + } + } + }, + "update": { + "title": "New Version v{{version}}", + "actions": { + "goToRelease": "Sürüm Sayfasına Git", + "update": "Güncelle" + }, + "messages": { + "portableError": "Taşınabilir sürüm uygulama içi güncellemeleri desteklemez. Lütfen manuel olarak indirip değiştirin", + "breakChangeError": "Bu sürüm büyük bir güncellemedir ve uygulama içi güncellemeleri desteklemez. Lütfen kaldırın ve yeni sürümü manuel olarak indirip kurun" + } + }, + "sysproxy": { + "title": "Sistem Vekil Ayarı", + "fieldsets": { + "currentStatus": "Geçerli Sistem Vekil'i" + }, + "fields": { + "enableStatus": "Etkinlik Durumu:", + "serverAddr": "Sunucu Adresi: ", + "pacUrl": "PAC URL'si: ", + "proxyHost": "Vekil Sunucusu", + "usePacMode": "PAC Modunu Kullan", + "proxyGuard": "Vekil Koruyucusu", + "guardDuration": "Koruma Süresi", + "alwaysUseDefaultBypass": "Her Zaman Varsayılan Baypas Kullan", + "proxyBypass": "Vekil Baypas Ayarları: ", + "bypass": "Baypas: ", + "pacScriptContent": "PAC Betiği İçeriği" + }, + "tooltips": { + "proxyGuard": "Diğer yazılımların işletim sisteminin vekil ayarlarını değiştirmesini önlemek için etkinleştirin" + }, + "messages": { + "durationTooShort": "Vekil Koruyucu Süresi 1 Saniyeden Az Olamaz", + "invalidBypass": "Geçersiz Baypas Formatı", + "invalidProxyHost": "Geçersiz Vekil Sunucusu Formatı" + }, + "actions": { + "editPac": "Düzenle PAC" + } + }, + "tun": { + "title": "Tun Modu", + "fields": { + "stack": "Tun Yığını", + "device": "Device Name", + "autoRoute": "Otomatik Yönlendirme", + "strictRoute": "Katı Yönlendirme", + "autoDetectInterface": "Arayüzü Otomatik Algıla", + "dnsHijack": "DNS Ele Geçirme", + "mtu": "Maksimum İletim Birimi" + }, + "tooltips": { + "dnsHijack": "Please use , to separate multiple DNS servers" + }, + "messages": { + "applied": "Ayarlar Uygulandı" + } + }, + "dns": { + "dialog": { + "title": "DNS Üzerine Yazma", + "warning": "Bu ayarlarla ilgili bilginiz yoksa, lütfen bunları değiştirmeyin ve DNS Üzerine Yazma'yı etkin tutun" + }, + "sections": { + "general": "DNS Ayarları", + "fallbackFilter": "Yedek Filtre Ayarları", + "hosts": "Hosts Ayarları" + }, + "fields": { + "enable": "DNS'i Etkinleştir", + "listen": "DNS Dinleme", + "enhancedMode": "Geliştirilmiş Mod", + "fakeIpRange": "Sahte IP Aralığı", + "fakeIpFilterMode": "Sahte IP Filtre Modu", + "ipv6": { + "label": "IPv6", + "description": "IPv6 DNS çözümlemesini etkinleştir" + }, + "preferH3": { + "label": "H3'ü Tercih Et", + "description": "DNS DOH uses HTTP/3" + }, + "respectRules": { + "label": "Kurallara Uy", + "description": "DNS bağlantıları yönlendirme kurallarını takip eder" + }, + "useHosts": { + "label": "Hosts Kullan", + "description": "Ana bilgisayarları hosts dosyası aracılığıyla çözümlemek için etkinleştirin" + }, + "useSystemHosts": { + "label": "Sistem Hosts Dosyasını Kullan", + "description": "Ana bilgisayarları sistem hosts dosyası aracılığıyla çözümlemek için etkinleştirin" + }, + "directPolicy": { + "label": "Doğrudan İsim Sunucusu Politikasını Takip Et", + "description": "İsim sunucusu politikasının takip edilip edilmeyeceği" + }, + "defaultNameserver": { + "label": "Varsayılan İsim Sunucusu", + "description": "DNS sunucularını çözümlemek için kullanılan varsayılan DNS sunucuları" + }, + "nameserver": { + "label": "İsim Sunucusu", + "description": "DNS sunucuları listesi, virgülle ayrılmış" + }, + "fallback": { + "label": "Yedek", + "description": "Yedek DNS sunucuları listesi, virgülle ayrılmış" + }, + "proxy": { + "label": "Vekil Sunucusu İsim Sunucusu", + "description": "Vekil düğümü alan adı çözümlemesi için DNS sunucuları" + }, + "directNameserver": { + "label": "Doğrudan İsim Sunucusu", + "description": "Doğrudan çıkış alan adı çözümlemesi için DNS sunucuları, 'system' anahtar kelimesini destekler, virgülle ayrılmış" + }, + "fakeIpFilter": { + "label": "Sahte IP Filtresi", + "description": "Sahte IP çözümlemesini atlayan alan adları, virgülle ayrılmış" + }, + "nameserverPolicy": { + "label": "İsim Sunucusu Politikası", + "description": "Alana özgü DNS sunucusu, birden çok sunucu noktalı virgülle ayrılır, format: domain=server1;server2" + }, + "geoipFiltering": { + "label": "GeoIP Filtreleme", + "description": "Yedek için GeoIP filtrelemeyi etkinleştir" + }, + "geoipCode": "GeoIP Kodu", + "fallbackIpCidr": { + "label": "Yedek IP CIDR", + "description": "Yedek sunucuları kullanmayan IP CIDR'ları, virgülle ayrılmış" + }, + "fallbackDomain": { + "label": "Yedek Alan Adı", + "description": "Yedek sunucuları kullanan alan adları, virgülle ayrılmış" + }, + "hosts": { + "label": "Hosts", + "description": "Özel alan adından IP'ye veya alan adına eşleme" + } + }, + "messages": { + "saved": "DNS ayarları kaydedildi", + "configError": "DNS configuration error:" + }, + "errors": { + "invalid": "Invalid configuration" + } + }, + "webUI": { + "actions": { + "openUrl": "URL Aç" + }, + "title": "Web Arayüzü", + "messages": { + "supportedPlaceholders": "%host, %port, %secret destekler", + "placeholderInstruction": "Ana bilgisayar, port, sırrı %host, %port, %secret ile değiştirin" + } + }, + "hotkey": { + "toggles": { + "enableGlobal": "Küresel Kısayol Tuşunu Etkinleştir" + }, + "title": "Kısayol Tuşu Ayarı", + "functions": { + "rule": "Kural Modu", + "global": "Küresel Mod", + "openOrCloseDashboard": "Kontrol Panelini Aç/Kapat", + "toggleSystemProxy": "Sistem Vekil'ini Etkinleştir/Devre Dışı Bırak", + "toggleTunMode": "Tun Modunu Etkinleştir/Devre Dışı Bırak", + "entryLightweightMode": "Hafif Moda Gir", + "direct": "Doğrudan Mod" + } + }, + "password": { + "prompts": { + "enterRoot": "Lütfen root şifrenizi girin" + } + }, + "networkInterface": { + "title": "Ağ Arayüzü", + "fields": { + "ipAddress": "IP Adresi", + "macAddress": "MAC Adresi" + } + } + }, + "feedback": { + "notifications": { + "clash": { + "restartSuccess": "Clash Çekirdeği Yeniden Başlatıldı", + "versionUpdated": "Çekirdek Sürümü Güncellendi", + "changeSuccess": "Çekirdek başarıyla değiştirildi", + "changeFailed": "Çekirdek değiştirilemedi", + "geoDataUpdated": "GeoData Güncellendi" + }, + "clashService": { + "installSuccess": "Hizmet Başarıyla Kuruldu", + "uninstallSuccess": "Hizmet Başarıyla Kaldırıldı" + }, + "updater": { + "withClashProxySuccess": "Clash vekil ile güncelleme başarılı", + "withClashProxyFailed": "Clash vekil ile bile güncelleme başarısız oldu" + } + } + }, + "statuses": { + "clash": { + "stopping": "Stopping Core...", + "restarting": "Restarting Core..." + }, + "clashService": { + "installing": "Hizmet Kuruluyor...", + "uninstalling": "Uninstalling Service..." + } + } +} diff --git a/src/locales/tr/shared.json b/src/locales/tr/shared.json new file mode 100644 index 00000000..6ac4af29 --- /dev/null +++ b/src/locales/tr/shared.json @@ -0,0 +1,128 @@ +{ + "actions": { + "cancel": "İptal", + "close": "Kapat", + "confirm": "Onayla", + "save": "Kaydet", + "delete": "Sil", + "edit": "Düzenle", + "new": "Yeni", + "enable": "Etkinleştir", + "upgrade": "Yükselt", + "restart": "Yeniden Başlat", + "resetToDefault": "Varsayılana Sıfırla", + "refresh": "Yenile", + "retry": "Retry", + "refreshPage": "Refresh Page", + "showDetails": "Show Details", + "hideDetails": "Hide Details", + "listView": "Liste Görünümü", + "tableView": "Tablo Görünümü", + "pause": "Duraklat", + "resume": "Sürdür", + "closeAll": "Tümünü Kapat", + "clear": "Temizle" + }, + "labels": { + "updateAt": "Güncelleme Zamanı", + "timeout": "Timeout", + "icon": "Simge", + "name": "İsim", + "readOnly": "Salt Okunur", + "expireTime": "Sona Erme Zamanı", + "updateTime": "Güncelleme Zamanı", + "usedTotal": "Kullanılan / Toplam", + "from": "Kaynak", + "password": "Şifre", + "retryAttempts": "Retry attempts", + "downloaded": "İndirilen", + "uploaded": "Yüklenen" + }, + "statuses": { + "enabled": "Etkin", + "disabled": "Devre Dışı", + "saving": "Saving...", + "empty": "Boş" + }, + "units": { + "milliseconds": "ms", + "seconds": "saniye", + "minutes": "dakika", + "kilobytes": "KB", + "files": "Files" + }, + "placeholders": { + "filter": "Filtre koşulları", + "matchCase": "Büyük/Küçük Harf Eşleştir", + "matchWholeWord": "Tam Kelime Eşleştir", + "useRegex": "Düzenli İfade Kullan" + }, + "validation": { + "invalidRegex": "Invalid regular expression" + }, + "window": { + "maximize": "Büyüt", + "minimize": "Küçült" + }, + "editorModes": { + "visualization": "Görselleştirme", + "advanced": "Gelişmiş" + }, + "feedback": { + "errors": { + "trafficStats": "Traffic Statistics Error", + "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." + }, + "notices": { + "raw": "{{message}}", + "prefixedRaw": "{{prefix}} {{message}}" + }, + "notifications": { + "importSuccess": "Profil Başarıyla İçe Aktarıldı", + "importSubscriptionSuccess": "Abonelik içe aktarımı başarılı", + "importWithClashProxy": "Profil Clash vekil ile içe aktarıldı", + "saved": "Saved successfully", + "common": { + "copySuccess": "Kopyalama Başarılı", + "saveSuccess": "Configuration saved successfully", + "saveFailed": "Failed to save configuration" + } + }, + "validation": { + "config": { + "failed": "Abonelik yapılandırması doğrulaması başarısız oldu. Lütfen abonelik yapılandırma dosyasını kontrol edin; değişiklikler geri alındı.", + "bootFailed": "Başlangıç abonelik yapılandırması doğrulaması başarısız oldu. Varsayılan yapılandırma ile başlatıldı; lütfen abonelik yapılandırma dosyasını kontrol edin.", + "coreChangeFailed": "Çekirdek değiştirilirken yapılandırma doğrulaması başarısız oldu. Varsayılan yapılandırma ile başlatıldı; lütfen abonelik yapılandırma dosyasını kontrol edin.", + "processTerminated": "Doğrulama işlemi sonlandırıldı." + }, + "script": { + "syntaxError": "Betik sözdizimi hatası, değişiklikler geri alındı", + "missingMain": "Betik hatası, değişiklikler geri alındı", + "fileNotFound": "Dosya eksik, değişiklikler geri alındı", + "fileError": "Betik dosyası hatası, değişiklikler geri alındı" + }, + "yaml": { + "syntaxError": "YAML sözdizimi hatası, değişiklikler geri alındı", + "readError": "YAML okuma hatası, değişiklikler geri alındı", + "mappingError": "YAML eşleme hatası, değişiklikler geri alındı", + "keyError": "YAML anahtar hatası, değişiklikler geri alındı", + "generalError": "YAML hatası, değişiklikler geri alındı" + }, + "merge": { + "syntaxError": "Birleştirme dosyası sözdizimi hatası, değişiklikler geri alındı", + "mappingError": "Birleştirme dosyası eşleme hatası, değişiklikler geri alındı", + "keyError": "Birleştirme dosyası anahtar hatası, değişiklikler geri alındı", + "generalError": "Birleştirme dosyası hatası, değişiklikler geri alındı" + } + } + }, + "filters": { + "logLevels": { + "all": "ALL", + "debug": "DEBUG", + "info": "INFO", + "warn": "WARN", + "error": "ERROR" + } + } +} diff --git a/src/locales/tr/tests.json b/src/locales/tr/tests.json new file mode 100644 index 00000000..1db43d64 --- /dev/null +++ b/src/locales/tr/tests.json @@ -0,0 +1,40 @@ +{ + "page": { + "actions": { + "testAll": "Tümünü Test Et" + }, + "title": "Test" + }, + "components": { + "item": { + "actions": { + "test": "Test" + } + } + }, + "modals": { + "test": { + "title": { + "create": "Test Oluştur", + "edit": "Testi Düzenle" + }, + "fields": { + "url": "Test URL'si" + } + } + }, + "statuses": { + "test": { + "pending": "Beklemede", + "yes": "Evet", + "no": "Hayır", + "failed": "Başarısız", + "completed": "Tamamlandı", + "disallowedIsp": "İzin Verilmeyen ISP", + "originalsOnly": "Yalnızca Orijinaller", + "noDisney": "Hayır (IP Disney+ Tarafından Yasaklandı)", + "unsupportedRegion": "Desteklenmeyen Ülke/Bölge", + "failedNetwork": "Başarısız (Ağ Bağlantısı)" + } + } +} diff --git a/src/locales/tr/unlock.json b/src/locales/tr/unlock.json new file mode 100644 index 00000000..12099c33 --- /dev/null +++ b/src/locales/tr/unlock.json @@ -0,0 +1,12 @@ +{ + "page": { + "actions": { + "testing": "Test Ediliyor..." + }, + "empty": "No unlock test items", + "messages": { + "detectionTimeout": "Detection timeout or failed" + }, + "title": "Kilit Açma Testi" + } +} diff --git a/src/locales/tt.json b/src/locales/tt.json deleted file mode 100644 index 4be119e7..00000000 --- a/src/locales/tt.json +++ /dev/null @@ -1,1299 +0,0 @@ -{ - "shared": { - "actions": { - "cancel": "Баш тарту", - "close": "Ябу", - "confirm": "Растау", - "save": "Саклау", - "delete": "Бетерү", - "edit": "Үзгәртү", - "new": "Яңа", - "enable": "Кушу", - "upgrade": "Яңарту", - "restart": "Перезапуск", - "resetToDefault": "Башлангычка кайтару", - "refresh": "Яңарту", - "retry": "Retry", - "refreshPage": "Refresh Page", - "showDetails": "Show Details", - "hideDetails": "Hide Details", - "listView": "Исемлек күзаллау", - "tableView": "Таблица күзаллау", - "pause": "Туктау", - "resume": "Дәвам", - "closeAll": "Барысын да ябу", - "clear": "Чистарту" - }, - "labels": { - "updateAt": "Яңартылган вакыт", - "timeout": "Timeout", - "icon": "Иконка", - "name": "Исем", - "readOnly": "Уку режимы гына", - "expireTime": "Тамамлану вакыты", - "updateTime": "Яңарту вакыты", - "usedTotal": "Кулланылган / Барлыгы", - "from": "Каян", - "password": "Пароль", - "retryAttempts": "Retry attempts", - "downloaded": "Йөкләнгән", - "uploaded": "Чыгарылган" - }, - "statuses": { - "enabled": "Кушылган", - "disabled": "Сүнгән", - "saving": "Saving...", - "empty": "Буш" - }, - "units": { - "milliseconds": "Миллисекундлар", - "seconds": "Секундлар", - "minutes": "Минутлар", - "kilobytes": "KB", - "files": "Files" - }, - "placeholders": { - "filter": "Фильтр шартлары", - "matchCase": "Регистрны исәпкә алу", - "matchWholeWord": "Сүзнең тулы туры килүе", - "useRegex": "Регуляр выражениеләр куллану" - }, - "validation": { - "invalidRegex": "Invalid regular expression" - }, - "window": { - "maximize": "Зурайту", - "minimize": "Кечерәйтү" - }, - "editorModes": { - "visualization": "Визуализация", - "advanced": "Өстәмә" - }, - "feedback": { - "errors": { - "trafficStats": "Traffic Statistics Error", - "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." - }, - "notices": { - "raw": "{{message}}", - "prefixedRaw": "{{prefix}} {{message}}" - }, - "notifications": { - "importSuccess": "Профиль уңышлы импортланды", - "importSubscriptionSuccess": "Import subscription successful", - "importWithClashProxy": "Profile Imported with Clash proxy", - "saved": "Saved successfully", - "common": { - "copySuccess": "Күчерелде", - "saveSuccess": "Configuration saved successfully", - "saveFailed": "Failed to save configuration" - } - }, - "validation": { - "config": { - "failed": "Язылу көйләү тикшерүе уңышсыз, көйләү файлын тикшерегез, үзгәрешләр кире кайтарылды, хата:", - "bootFailed": "Йөкләү вакытында көйләү тикшерүе уңышсыз, стандарт көйләү кулланылды, көйләү файлын тикшерегез, хата:", - "coreChangeFailed": "Ядро алыштырганда көйләү тикшерүе уңышсыз, стандарт көйләү кулланылды, көйләү файлын тикшерегез, хата:", - "processTerminated": "Тикшерү процессы туктатылды" - }, - "script": { - "syntaxError": "Скрипт синтаксик хатасы, үзгәрешләр кире кайтарылды", - "missingMain": "Скрипт хатасы, үзгәрешләр кире кайтарылды", - "fileNotFound": "Файл табылмады, үзгәрешләр кире кайтарылды", - "fileError": "Скрипт файлы хатасы, үзгәрешләр кире кайтарылды" - }, - "yaml": { - "syntaxError": "YAML syntax error, changes reverted", - "readError": "YAML read error, changes reverted", - "mappingError": "YAML mapping error, changes reverted", - "keyError": "YAML key error, changes reverted", - "generalError": "YAML error, changes reverted" - }, - "merge": { - "syntaxError": "Merge file syntax error, changes reverted", - "mappingError": "Merge file mapping error, changes reverted", - "keyError": "Merge file key error, changes reverted", - "generalError": "Merge file error, changes reverted" - } - } - }, - "filters": { - "logLevels": { - "all": "ALL", - "debug": "DEBUG", - "info": "INFO", - "warn": "WARN", - "error": "ERROR" - } - } - }, - "profiles": { - "page": { - "actions": { - "updateAll": "Барлык профильләрне яңарту", - "viewRuntimeConfig": "Кулланылган конфигурацияне карау", - "reactivate": "Профильләрне янәдән активлаштыру", - "import": "Импорт" - }, - "batch": { - "actions": { - "delete": "Delete Selected Profiles", - "selectAll": "Select All", - "deselectAll": "Deselect All", - "done": "Done" - }, - "summary": { - "selected": "Selected", - "items": "items" - }, - "title": "Batch Operations" - }, - "importForm": { - "placeholder": "Профиль URL-ы", - "actions": { - "paste": "Кую" - } - }, - "feedback": { - "errors": { - "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", - "onlyYaml": "Фәкать YAML-файллар гына хуплана" - }, - "notifications": { - "importRetry": "Import failed, retrying with Clash proxy...", - "importFail": "Import failed even with Clash proxy", - "importNeedsRefresh": "Profile imported but may need manual refresh", - "importSuccess": "Profile imported successfully, please restart if not visible", - "profileSwitched": "Профиль алмаштырылды", - "profileReactivated": "Профиль яңадан активлаштырылды", - "switchInterrupted": "Profile switch interrupted by new selection", - "batchDeleted": "Selected profiles deleted successfully" - }, - "notices": { - "forceRefreshCompleted": "Force refresh completed", - "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" - } - }, - "title": "Профильләр" - }, - "components": { - "card": { - "labels": { - "clickToImport": "Click to import subscription" - } - }, - "fileInput": { - "chooseFile": "Файл сайлау" - }, - "menu": { - "home": "Home", - "select": "Сайлау", - "editInfo": "Мәгълүматны үзгәртү", - "editFile": "Файлны үзгәртү", - "editRules": "Кагыйдәләрне үзгәртү", - "editProxies": "Проксины үзгәртү", - "editGroups": "Прокси төркемнәрен үзгәртү", - "extendConfig": "Merge-ны үзгәртергә", - "extendScript": "Script-ны үзгәртергә", - "openFile": "Файлны ачу", - "update": "Яңарту", - "updateViaProxy": "Update via proxy" - }, - "more": { - "global": { - "merge": "Global Merge", - "script": "Global Script" - }, - "chips": { - "merge": "Merge", - "script": "Script" - } - }, - "profileItem": { - "tooltips": { - "showLast": "Click to show last update time", - "showNext": "Click to show next update" - }, - "status": { - "lastUpdateFailed": "Last Update failed", - "nextUp": "Next Up", - "noSchedule": "No schedule", - "unknown": "Unknown", - "autoUpdateDisabled": "Auto update disabled" - } - } - }, - "modals": { - "profileForm": { - "title": { - "create": "Профиль булдыру", - "edit": "Профильне үзгәртү" - }, - "fields": { - "type": "Төр", - "description": "Тасвирламалар", - "subscriptionUrl": "Подписка URL-ы", - "httpTimeout": "HTTP Request Timeout", - "updateInterval": "Яңарту интервалы", - "useSystemProxy": "Системалы проксины кулланып яңарту", - "useClashProxy": "Clash прокси кулланып яңарту", - "acceptInvalidCerts": "Дөрес булмаган сертификатларны кабул итү (Куркыныч)", - "allowAutoUpdate": "Allow Auto Update" - }, - "feedback": { - "notifications": { - "creationRetry": "Profile creation failed, retrying with Clash proxy...", - "creationSuccess": "Profile creation succeeded with Clash proxy" - } - } - }, - "proxiesEditor": { - "title": "Проксины үзгәртү", - "placeholders": { - "multiUri": "Берничә URI өчен яңа юл символын кулланыгыз (Base64 кодлавы ярдәм ителә)" - }, - "actions": { - "prepend": "Проксины өскә өстәү", - "append": "Проксины аска өстәү" - } - }, - "groupsEditor": { - "title": "Прокси төркемнәрен үзгәртү", - "errors": { - "nameRequired": "Төркем исеме кирәк", - "nameExists": "Әлеге төркем исеме бар инде" - }, - "fields": { - "type": "Төркем төре", - "name": "Төркем исеме", - "icon": "Прокси төркеме иконкасы", - "proxies": "Прокси куллану", - "provider": "Провайдер куллану", - "healthCheckUrl": "Сәламәтлекне тикшерү URL-ы", - "expectedStatus": "Көтелгән статус коды", - "interval": "Интервал", - "maxFailedTimes": "Иң күп хаталы тикшерү саны", - "interfaceName": "Интерфейс исеме", - "routingMark": "Маршрут билгесе", - "filter": "Фильтр", - "excludeFilter": "Фильтр аша чыгару", - "excludeType": "Чыгару төре", - "includeAll": "Барлык прокси һәм провайдерларны кертү", - "includeAllProxies": "Барлык проксины кертү", - "includeAllProviders": "Барлык провайдерларны кертү" - }, - "toggles": { - "lazy": "Сак режим (lazy)", - "disableUdp": "UDP'ны сүндерү", - "hidden": "Яшерен" - }, - "actions": { - "prepend": "Төркемне өскә өстәү", - "append": "Төркемне аска өстәү" - } - }, - "editor": { - "actions": { - "format": "Документны форматлау" - }, - "messages": { - "readOnly": "Уку режимында үзгәртү мөмкин түгел" - } - }, - "confirmDelete": { - "title": "Бетерүне раслагыз", - "message": "Бу гамәлне кире кайтарып булмый" - }, - "logViewer": { - "title": "Скрипт консоле" - } - } - }, - "proxies": { - "page": { - "modes": { - "rule": "Rule", - "global": "Global", - "direct": "Direct" - }, - "actions": { - "toggleChain": "🔗 Чылбыр прокси", - "connect": "Connect", - "disconnect": "Disconnect", - "connecting": "Connecting...", - "clearChainConfig": "Delete Chain Config" - }, - "provider": { - "title": "Прокси провайдеры", - "actions": { - "updateAll": "Барысын да яңарту", - "update": "Яңарту" - } - }, - "rules": { - "title": "Proxy Rules", - "select": "Select Rules" - }, - "labels": { - "proxyCount": "Proxy Count", - "delayCheckReset": "Беркетелгәнне гамәлдән чыгару өчен задержканы тикшерү" - }, - "tooltips": { - "locate": "Урын", - "delayCheck": "Задержканы тикшерү", - "sortDefault": "Башлангыч итеп сортлау", - "sortDelay": "Задержка буенча сортлау", - "sortName": "Исем буенча сортлау", - "delayCheckUrl": "Задержканы тикшерү URL-ы", - "showBasic": "Прокси турында кыскача мәгълүмат", - "showDetail": "Прокси турында тулы мәгълүмат", - "filter": "Фильтр" - }, - "placeholders": { - "delayCheckUrl": "Задержканы тикшерү URL-ы" - }, - "chain": { - "header": "Chain Proxy Config", - "empty": "No proxy chain configured", - "instruction": "Click nodes in order to add to proxy chain", - "minimumNodes": "Chain proxy requires at least 2 nodes", - "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", - "connectFailed": "Failed to connect to proxy chain", - "disconnectFailed": "Failed to disconnect from proxy chain", - "duplicateNode": "Proxy node already exists in chain" - }, - "messages": { - "directMode": "Туры режим" - }, - "title": { - "default": "Прокси төркемнәре", - "chainMode": "Proxy Chain Mode" - } - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "components": { - "enums": { - "strategies": { - "select": "Проксины кулдан сайлау", - "url-test": "URL-тест задержкасына карап прокси сайлау", - "fallback": "Хата булган очракта башка проксига күчү", - "load-balance": "Трафикны баланслау нигезендә прокси тарату", - "relay": "Билгеле прокси чылбыры аша тапшыру" - }, - "policies": { - "DIRECT": "Туры чыгу", - "REJECT": "Сорауларны тоткарлау", - "REJECT-DROP": "Сорауларны кире кагу", - "PASS": "Туры килсә дә, бу кагыйдәне урап узу" - } - } - } - }, - "connections": { - "page": { - "title": "Тоташулар" - }, - "components": { - "fields": { - "host": "Хост", - "dlSpeed": "Йөкләү тизл.", - "ulSpeed": "Чыгару тизл.", - "chains": "Чылбырлар", - "rule": "Кагыйдә", - "process": "Процесс", - "time": "Тоташу вакыты", - "source": "Чыганак адресы", - "destination": "Максат IP-адресы", - "destinationPort": "Барасы порты", - "type": "Төр" - }, - "order": { - "default": "Default", - "uploadSpeed": "Йөкләү (чыгару) тизлеге", - "downloadSpeed": "Йөкләү тизлеге" - }, - "actions": { - "closeConnection": "Тоташуны ябу" - } - } - }, - "tests": { - "page": { - "actions": { - "testAll": "Барчасын тестлау" - }, - "title": "Тест" - }, - "components": { - "item": { - "actions": { - "test": "Тест" - } - } - }, - "modals": { - "test": { - "title": { - "create": "Тест булдыру", - "edit": "Тестны үзгәртү" - }, - "fields": { - "url": "Тест URL-ы" - } - } - }, - "statuses": { - "test": { - "pending": "Pending", - "yes": "Yes", - "no": "No", - "failed": "Failed", - "completed": "Completed", - "disallowedIsp": "Disallowed ISP", - "originalsOnly": "Originals Only", - "noDisney": "No (IP Banned By Disney+)", - "unsupportedRegion": "Unsupported Country/Region", - "failedNetwork": "Failed (Network Connection)" - } - } - }, - "logs": { - "page": { - "title": "Логлар" - } - }, - "rules": { - "page": { - "provider": { - "trigger": "Кагыйдә провайдеры", - "dialogTitle": "Кагыйдә провайдеры", - "actions": { - "updateAll": "Барысын да яңарту", - "update": "Яңарту" - } - }, - "title": "Кагыйдәләр" - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "modals": { - "editor": { - "form": { - "labels": { - "type": "Кагыйдә төре", - "content": "Кагыйдә эчтәлеге", - "proxyPolicy": "Прокси сәясәте" - }, - "toggles": { - "noResolve": "Резолвсыз" - }, - "actions": { - "prependRule": "Кагыйдәне өскә өстәү", - "appendRule": "Кагыйдәне аска өстәү" - }, - "validation": { - "conditionRequired": "Кагыйдә шарты кирәк", - "invalidRule": "Яраксыз кагыйдә" - } - }, - "ruleTypes": { - "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": "Барлык сорауларга туры килә" - }, - "title": "Кагыйдәләрне үзгәртү" - } - } - }, - "home": { - "page": { - "tooltips": { - "lightweightMode": "Җиңел Режим", - "manual": "Документация", - "settings": "Home Settings" - }, - "cards": { - "trafficStats": "Traffic Stats", - "networkSettings": "Network Settings", - "proxyMode": "Proxy Mode" - }, - "settings": { - "cards": { - "profile": "Profile Card", - "currentProxy": "Current Proxy Card", - "network": "Network Settings Card", - "proxyMode": "Proxy Mode Card", - "traffic": "Traffic Stats Card", - "tests": "Website Tests Card", - "ip": "IP Information Card", - "clashInfo": "Clash Info Cards", - "systemInfo": "System Info Cards" - }, - "title": "Home Settings" - }, - "title": "Home" - }, - "components": { - "proxyTun": { - "status": { - "systemProxyEnabled": "System proxy is enabled, your applications will access the network through the proxy", - "systemProxyDisabled": "System proxy is disabled, it is recommended for most users to turn on this option", - "tunModeServiceRequired": "TUN mode requires service mode, please install the service first", - "tunModeEnabled": "TUN mode is enabled, applications will access the network through the virtual network card", - "tunModeDisabled": "TUN mode is disabled, suitable for special applications" - }, - "tooltips": { - "systemProxy": "Системалы прокси көйләүләрен үзгәртү рөхсәтен бирегез. Әгәр рөхсәт алу мөмкин түгел икән, прокси көйләүләрен кулдан үзгәртегез", - "tunMode": "TUN mode can take over all application traffic, suitable for special applications that do not follow the system proxy settings" - } - }, - "clashInfo": { - "title": "Clash Info", - "fields": { - "coreVersion": "Core Version", - "systemProxyAddress": "System Proxy Address", - "mixedPort": "Mixed Port", - "uptime": "Uptime", - "rulesCount": "Rules Count" - } - }, - "systemInfo": { - "title": "System Info", - "fields": { - "osInfo": "OS Info", - "autoLaunch": "Автостарт", - "runningMode": "Running Mode", - "lastCheckUpdate": "Last Check Update", - "vergeVersion": "Verge версиясе" - }, - "actions": { - "settings": "Көйләүләр" - }, - "tooltips": { - "autoLaunchAdmin": "Administrator mode may not support auto launch" - }, - "badges": { - "adminMode": "Administrator Mode", - "serviceMode": "Сервис режимы", - "sidecarMode": "User Mode", - "adminServiceMode": "Admin + Service Mode" - } - }, - "ipInfo": { - "title": "IP Information", - "labels": { - "ip": "IP", - "asn": "ASN", - "isp": "ISP", - "org": "ORG", - "location": "Location", - "timezone": "Timezone", - "autoRefresh": "Auto refresh", - "unknown": "Unknown" - }, - "errors": { - "load": "IP мәгълүматын алу мөмкин булмады" - } - }, - "currentProxy": { - "title": "Current Node", - "actions": { - "refreshDelay": "Задержканы тикшерү" - }, - "labels": { - "globalMode": "Глобаль режим", - "directMode": "Туры режим", - "group": "Group", - "proxy": "Proxy", - "noActiveNode": "No active proxy node" - } - }, - "tests": { - "title": "Website Tests" - }, - "traffic": { - "metrics": { - "uploadSpeed": "Йөкләү (чыгару) тизлеге", - "downloadSpeed": "Йөкләү тизлеге", - "activeConnections": "Active Connections", - "memoryUsage": "Хәтер куллану" - }, - "legends": { - "upload": "Upload", - "download": "Download" - }, - "patterns": { - "minutes": "{{time}} Minutes" - } - }, - "clashMode": { - "errors": { - "communication": "Core communication error" - }, - "labels": { - "rule": "Кагыйдәләр режимы", - "global": "Глобаль режим", - "direct": "Туры режим" - }, - "descriptions": { - "rule": "Automatically choose proxies according to the rule set.", - "global": "Forward all network requests through the selected proxy.", - "direct": "Bypass the proxy and connect to the internet directly." - } - } - } - }, - "unlock": { - "page": { - "actions": { - "testing": "Testing..." - }, - "empty": "No unlock test items", - "messages": { - "detectionTimeout": "Detection timeout or failed" - }, - "title": "Unlock Test" - } - }, - "settings": { - "page": { - "actions": { - "manual": "Документация", - "telegram": "Telegram каналы", - "github": "GitHub репозиториясе" - }, - "title": "Көйләүләр" - }, - "sections": { - "system": { - "title": "Система көйләүләре", - "toggles": { - "tunMode": "Tun режимы (виртуаль челтәр адаптеры)", - "systemProxy": "Системалы прокси" - }, - "tooltips": { - "autoLaunchAdmin": "Administrator mode may not support auto launch", - "silentStart": "Программаны фоновый режимда, тәрәзәсез эшләтеп җибәрү" - }, - "fields": { - "autoLaunch": "Автоматик башлау", - "silentStart": "Тын башлау" - }, - "notifications": { - "tunMode": { - "autoDisabled": "TUN Mode automatically disabled due to service unavailable", - "autoDisableFailed": "Failed to disable TUN Mode automatically" - } - } - }, - "proxyControl": { - "tooltips": { - "systemProxy": "Системалы прокси көйләүләрен үзгәртү рөхсәтен бирегез. Әгәр рөхсәт алу мөмкин түгел икән, прокси көйләүләрен кулдан үзгәртегез", - "tunMode": "Tun режимы бөтен системаның трафигын тотып ала. Аны кабызган очракта системалы проксины аерым кабызу таләп ителми.", - "tunUnavailable": "TUN requires Service Mode or Admin Mode" - }, - "actions": { - "installService": "Хезмәтне урнаштыру", - "uninstallService": "Uninstall Service" - }, - "fields": { - "systemProxy": "Системалы прокси", - "tunMode": "Tun режимы (виртуаль челтәр адаптеры)" - } - }, - "externalController": { - "title": "Тышкы контроллер адресы", - "fields": { - "enable": "Enable External Controller", - "address": "Тышкы контроллер адресы", - "secret": "Серсүз" - }, - "placeholders": { - "address": "Required", - "secret": "Тавсия ителә" - }, - "tooltips": { - "copy": "Copy to clipboard" - }, - "messages": { - "addressRequired": "Controller address cannot be empty", - "secretRequired": "Secret cannot be empty", - "copyFailed": "Failed to copy", - "controllerCopied": "Controller address copied to clipboard", - "secretCopied": "Secret copied to clipboard" - } - }, - "externalCors": { - "title": "External Cors Configuration", - "fields": { - "allowPrivateNetwork": "Allow private network access", - "allowedOrigins": "Allowed Origins" - }, - "placeholders": { - "origin": "Please enter a valid url" - }, - "actions": { - "add": "Add" - }, - "messages": { - "alwaysIncluded": "Always included origins: {{urls}}" - }, - "tooltips": { - "open": "External Cors Settings" - } - }, - "appearance": { - "light": "Light", - "dark": "Dark", - "system": "System" - }, - "clash": { - "title": "Clash көйләүләре", - "form": { - "fields": { - "allowLan": "Локаль челтәргә рөхсәт", - "dnsOverwrite": "DNS Overwrite", - "ipv6": "IPv6", - "unifiedDelay": "Бердәм задержка", - "logLevel": "Лог дәрәҗәсе", - "portConfig": "Порт көйләүләре", - "external": "Тышкы", - "webUI": "Веб-интерфейс", - "clashCore": "Clash ядросы", - "openUwpTool": "UWP инструментын ачу", - "updateGeoData": "GeoData яңарту" - }, - "tooltips": { - "networkInterface": "Челтәр интерфейсы", - "unifiedDelay": "Бердәм задержка актив булганда, төрле типтагы узеллар өчен икеләтә тест башкарыла, TCP установканы раслау аермаларын тигезләү максатында", - "logLevel": "Бу фәкать сервис режимында эшләгән вакытта системалы журнал файлларына кагыла", - "openUwpTool": "Windows 8'дән башлап UWP кушымталары (Microsoft Store кебек) локаль хосттагы челтәр хезмәтләренә турыдан-туры тоташа алмый. Бу инструмент әлеге чикләүне әйләнеп узарга ярдәм итә" - }, - "options": { - "logLevel": { - "debug": "Debug", - "info": "Info", - "warning": "Warn", - "error": "Error", - "silent": "Silent" - } - } - } - } - }, - "components": { - "verge": { - "basic": { - "title": "Verge Төп көйләүләр", - "actions": { - "browse": "Карау" - }, - "trayOptions": { - "showMainWindow": "Төп тәрәзәне күрсәтү", - "showTrayMenu": "Show Tray Menu", - "disable": "Сүндерү" - }, - "fields": { - "language": "Тел", - "themeMode": "Теманың режимы", - "trayClickEvent": "Трейдагы басу вакыйгасы", - "copyEnvType": "Env төрен күчереп алу", - "startPage": "Баш бит", - "startupScript": "Башлану скрипты", - "themeSetting": "Тема көйләүләре", - "layoutSetting": "Расположение көйләүләре", - "misc": "Өстәмә көйләүләр", - "hotkeySetting": "Клавиатура төймәләре (hotkey) көйләүләре" - } - }, - "advanced": { - "title": "Verge Киңәйтелгән көйләүләр", - "tooltips": { - "backupInfo": "WebDAV аша конфигурация файлын саклауны хуплый", - "openConfDir": "Әгәр программада хаталар чыкса, бу папкадагы файлларны саклап калыгыз да, аннары барысын да бетереп, программаны яңадан башлагыз", - "liteMode": "GUI-ны ябыгыз һәм бары тик төшне генә эшләтеп калдырыгыз" - }, - "actions": { - "copyVersion": "Copy Version" - }, - "notifications": { - "latestVersion": "Сездә иң соңгы версия урнаштырылган", - "versionCopied": "Version copied to clipboard" - }, - "fields": { - "backupSetting": "Резерв копия көйләүләре", - "runtimeConfig": "Агымдагы конфигурация", - "openConfDir": "Кушымта папкасын ачу", - "openCoreDir": "Ядро сакланган папканы ачу", - "openLogsDir": "Логлар папкасын ачу", - "checkUpdates": "Яңартуларны тикшерү", - "openDevTools": "Разработчик коралларын ачу", - "liteModeSettings": "LightWeight Mode Settings", - "exit": "Чыгу", - "exportDiagnostics": "Export Diagnostic Info", - "vergeVersion": "Verge версиясе" - } - }, - "theme": { - "title": "Тема көйләүләре", - "fields": { - "primaryColor": "Төп төс", - "secondaryColor": "Икенче төс", - "primaryText": "Primary Text", - "secondaryText": "Secondary Text", - "infoColor": "Мәгълүмат төсе", - "warningColor": "Кисәтү төсе", - "errorColor": "Хата төсе", - "successColor": "Уңыш төсе", - "fontFamily": "Шрифтлар гаиләсе", - "cssInjection": "CSS кертү" - }, - "actions": { - "editCss": "Edit CSS" - }, - "dialogs": { - "editCssTitle": "Edit CSS" - } - }, - "layout": { - "title": "Расположение көйләүләре", - "fields": { - "preferSystemTitlebar": "Prefer System Titlebar", - "trafficGraph": "Трафик графигы", - "memoryUsage": "Хәтер куллану", - "proxyGroupIcon": "Прокси төркеме иконкасы", - "hoverNavigator": "Hover Jump Navigator", - "hoverNavigatorDelay": "Hover Jump Navigator Delay", - "navIcon": "Навигация иконкасы", - "trayIcon": "Трей иконкасы", - "showProxyGroupsInline": "Show Proxy Groups Inline", - "commonTrayIcon": "Гомуми трей иконкасы", - "systemProxyTrayIcon": "Системалы прокси иконкасы", - "tunTrayIcon": "Tun (виртуаль адаптер) иконкасы", - "enableTrayIcon": "Enable Tray Icon", - "enableTraySpeed": "Трей скоростьне үстерү" - }, - "tooltips": { - "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", - "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" - }, - "options": { - "icon": { - "monochrome": "Монохром", - "colorful": "Төсле", - "disable": "Сүндерү" - } - } - } - } - }, - "modals": { - "clashPort": { - "title": "Порт көйләүләре", - "fields": { - "mixed": "Катнаш прокси порты", - "socks": "Socks прокси порты", - "http": "HTTP(s) прокси порты", - "redir": "Redir — үтә күренмәле прокси порты", - "tproxy": "Tproxy — үтә күренмәле прокси порты" - }, - "actions": { - "random": "Очраклы порт" - }, - "messages": { - "saved": "Port settings saved", - "saveFailed": "Failed to save port settings" - } - }, - "clashCore": { - "variants": { - "release": "Рәсми версия", - "alpha": "Альфа-версия" - } - }, - "liteMode": { - "title": "LightWeight Mode Settings", - "actions": { - "enterNow": "Enter LightWeight Mode Now" - }, - "toggles": { - "autoEnter": "Auto Enter LightWeight Mode" - }, - "tooltips": { - "autoEnter": "Enable to automatically activate LightWeight Mode after the window is closed for a period of time" - }, - "fields": { - "delay": "Auto Enter LightWeight Mode Delay" - }, - "messages": { - "autoEnterHint": "When closing the window, LightWeight Mode will be automatically activated after {{n}} minutes" - } - }, - "backup": { - "title": "Резерв копия көйләүләре", - "tabs": { - "local": "Local backup", - "webdav": "WebDAV backup" - }, - "actions": { - "selectTarget": "Select backup target", - "backup": "Резерв копия", - "export": "Export", - "exportBackup": "Export Backup", - "deleteBackup": "Резерв копияне бетерү", - "restore": "Кайтару", - "restoreBackup": "Резерв копияне кайтару" - }, - "fields": { - "webdavUrl": "WebDAV сервер URL-ы (http(s)://)", - "username": "Кулланучы исеме", - "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." - }, - "messages": { - "webdavUrlRequired": "WebDAV адресы буш булырга тиеш түгел", - "invalidWebdavUrl": "WebDAV адресы дөрес түгел", - "usernameRequired": "Кулланучы исеме буш булмаска тиеш", - "passwordRequired": "Пароль буш булмаска тиеш", - "webdavConfigSaved": "WebDAV көйләүләре сакланды", - "webdavConfigSaveFailed": "WebDAV көйләүләрен саклап булмады: {{error}}", - "backupCreated": "Резерв копия уңышлы ясалды", - "backupFailed": "Резерв копия хата белән төгәлләнде: {{error}}", - "localBackupCreated": "Local backup created successfully", - "localBackupFailed": "Local backup failed", - "restoreSuccess": "Уңышлы кайтарылды, кушымта 1 секундтан яңадан башланачак", - "localBackupExported": "Local backup exported successfully", - "localBackupExportFailed": "Failed to export local backup", - "confirmDelete": "Бу резерв копия файлын бетерергә телисезме?", - "confirmRestore": "Бу резерв копия файлын кире кайтарырга телисезме?" - }, - "table": { - "filename": "Файл исеме", - "backupTime": "Резерв копия вакыты", - "actions": "Гамәлләр", - "noBackups": "Резерв копияләр юк", - "rowsPerPage": "Rows per page" - } - }, - "misc": { - "title": "Өстәмә көйләүләр", - "fields": { - "appLogLevel": "Кушымта журналы дәрәҗәсе", - "appLogMaxSize": "App Log Max Size", - "appLogMaxCount": "App Log Max Count", - "autoCloseConnections": "Тоташуларны автоматик ябу", - "autoCheckUpdate": "Яңартуларны автоматик тикшерү", - "enableBuiltinEnhanced": "Эчке камилләштерүне кабызу", - "proxyLayoutColumns": "Прокси күрсәтү баганалары саны", - "autoLogClean": "Логларны автоматик чистарту", - "autoDelayDetection": "Автоматик тоткарлык ачыклау", - "defaultLatencyTest": "Тоткарлануны тикшерү сылтамасы (defaults)", - "defaultLatencyTimeout": "Тоткарлануның стандарт таймауты" - }, - "tooltips": { - "autoCloseConnections": "Прокси төркеме яисә режимын үзгәрткәндә актив тоташуларны өзү", - "enableBuiltinEnhanced": "Конфигурация файлы белән туры килә торган өстәмә оптимизация", - "autoDelayDetection": "Фон режимында хәзерге төен тоткарлыгын периодик тикшерә", - "defaultLatencyTest": "Бу фәкать клиентның HTTP сораулары тесты өчен кулланыла, конфигурация файлына йогынты ясамый" - }, - "options": { - "proxyLayoutColumns": { - "auto": "Авто баганалар" - }, - "autoLogClean": { - "never": "Беркайчан чистартмаска", - "retainDays": "{{n}} көн саклау" - } - } - }, - "update": { - "title": "New Version v{{version}}", - "actions": { - "goToRelease": "Релизлар битенә күчү", - "update": "Яңарту" - }, - "messages": { - "portableError": "Портатив версиядә кушымта эчендә яңарту хупланмый, кулдан төшереп алыгыз", - "breakChangeError": "Бу зур яңарту, ул кушымта эчендә яңартылмый. Борып алып ташлап, яңадан урнаштыру сорала." - } - }, - "sysproxy": { - "title": "Системалы прокси көйләүләре", - "fieldsets": { - "currentStatus": "Агымдагы системалы прокси" - }, - "fields": { - "enableStatus": "Активлаштыру статусы", - "serverAddr": "Сервер адресы", - "pacUrl": "PAC адресы", - "proxyHost": "Прокси хосты", - "usePacMode": "PAC режимын куллану", - "proxyGuard": "Прокси саклаучы", - "guardDuration": "Саклау вакыты", - "alwaysUseDefaultBypass": "Һәрвакыт төп Bypass-ны куллану", - "proxyBypass": "Проксины әйләнеп узу:", - "bypass": "Әйләнеп узу:", - "pacScriptContent": "PAC скрипты эчтәлеге" - }, - "tooltips": { - "proxyGuard": "Системалы прокси көйләүләрен чит программа үзгәртмәсен өчен шушы функцияне кабызыгыз" - }, - "messages": { - "durationTooShort": "Прокси-демон эш вакыты 1 секундтан ким була алмый", - "invalidBypass": "Дөрес булмаган Bypass форматы", - "invalidProxyHost": "Прокси хосты форматы дөрес түгел" - }, - "actions": { - "editPac": "Үзгәртү PAC" - } - }, - "tun": { - "title": "Tun режимы (виртуаль челтәр адаптеры)", - "fields": { - "stack": "Стек", - "device": "Device Name", - "autoRoute": "Авто-маршрутлау", - "strictRoute": "Катгый маршрутлау", - "autoDetectInterface": "Интерфейсны автоматик ачыклау", - "dnsHijack": "DNS'ны үзгәртеп тоту (hijack)", - "mtu": "MTU (макс. тапшыру берәмлеге)" - }, - "tooltips": { - "dnsHijack": "Please use , to separate multiple DNS servers" - }, - "messages": { - "applied": "Көйләүләр кулланылды" - } - }, - "dns": { - "dialog": { - "title": "DNS Overwrite", - "warning": "If you are not familiar with these settings, please do not modify them and keep DNS Overwrite enabled" - }, - "sections": { - "general": "DNS Settings", - "fallbackFilter": "Fallback Filter Settings", - "hosts": "Hosts Settings" - }, - "fields": { - "enable": "Enable DNS", - "listen": "DNS Listen", - "enhancedMode": "Enhanced Mode", - "fakeIpRange": "Fake IP Range", - "fakeIpFilterMode": "Fake IP Filter Mode", - "ipv6": { - "label": "IPv6", - "description": "Enable IPv6 DNS resolution" - }, - "preferH3": { - "label": "Prefer H3", - "description": "DNS DOH uses HTTP/3" - }, - "respectRules": { - "label": "Respect Rules", - "description": "DNS connections follow routing rules" - }, - "useHosts": { - "label": "Use Hosts", - "description": "Enable to resolve hosts through hosts file" - }, - "useSystemHosts": { - "label": "Use System Hosts", - "description": "Enable to resolve hosts through system hosts file" - }, - "directPolicy": { - "label": "Direct Nameserver Follow Policy", - "description": "Whether to follow nameserver policy" - }, - "defaultNameserver": { - "label": "Default Nameserver", - "description": "Default DNS servers used to resolve DNS servers" - }, - "nameserver": { - "label": "Nameserver", - "description": "List of DNS servers, comma separated" - }, - "fallback": { - "label": "Fallback", - "description": "List of fallback DNS servers, comma separated" - }, - "proxy": { - "label": "Proxy Server Nameserver", - "description": "DNS servers for proxy node domain resolution" - }, - "directNameserver": { - "label": "Direct Nameserver", - "description": "DNS servers for direct exit domain resolution, supports 'system' keyword, comma separated" - }, - "fakeIpFilter": { - "label": "Fake IP Filter", - "description": "Domains that skip fake IP resolution, comma separated" - }, - "nameserverPolicy": { - "label": "Nameserver Policy", - "description": "Domain-specific DNS server, multiple servers separated by semicolons, format: domain=server1;server2" - }, - "geoipFiltering": { - "label": "GeoIP Filtering", - "description": "Enable GeoIP filtering for fallback" - }, - "geoipCode": "GeoIP Code", - "fallbackIpCidr": { - "label": "Fallback IP CIDR", - "description": "IP CIDRs not using fallback servers, comma separated" - }, - "fallbackDomain": { - "label": "Fallback Domain", - "description": "Domains using fallback servers, comma separated" - }, - "hosts": { - "label": "Hosts", - "description": "Custom domain to IP or domain mapping" - } - }, - "messages": { - "saved": "DNS settings saved", - "configError": "DNS configuration error:" - }, - "errors": { - "invalid": "Invalid configuration" - } - }, - "webUI": { - "actions": { - "openUrl": "URL ачарга" - }, - "title": "Веб-интерфейс", - "messages": { - "supportedPlaceholders": "%host, %port, %secret макросларын хуплау", - "placeholderInstruction": "Хост, порт, серсүзне %host, %port, %secret белән алмаштырыгыз" - } - }, - "hotkey": { - "toggles": { - "enableGlobal": "Глобаль Хоткейны кушу" - }, - "title": "Клавиатура төймәләре (hotkey) көйләүләре", - "functions": { - "rule": "Кагыйдәләр режимы", - "global": "Глобаль режим", - "openOrCloseDashboard": "Панельне ачу/ябу", - "toggleSystemProxy": "Системалы проксины кабызу/сүндерү", - "toggleTunMode": "Tun режимын кабызу/сүндерү", - "entryLightweightMode": "Entry Lightweight Mode", - "direct": "Туры режим" - } - }, - "password": { - "prompts": { - "enterRoot": "root паролен языгыз" - } - }, - "networkInterface": { - "title": "Челтәр интерфейсы", - "fields": { - "ipAddress": "IP адресы", - "macAddress": "MAC адресы" - } - } - }, - "feedback": { - "notifications": { - "clash": { - "restartSuccess": "Clash ядросы яңадан башланды", - "versionUpdated": "Ядро версиясе яңартылды", - "changeSuccess": "Ядро уңышлы алыштырылды", - "changeFailed": "Ядро алыштыру уңышсыз булды", - "geoDataUpdated": "GeoData яңартылды" - }, - "clashService": { - "installSuccess": "Сервис уңышлы урнаштырылды", - "uninstallSuccess": "Сервис уңышлы салдырылды" - }, - "updater": { - "withClashProxySuccess": "Update with Clash proxy successfully", - "withClashProxyFailed": "Update failed even with Clash proxy" - } - } - }, - "statuses": { - "clash": { - "stopping": "Stopping Core...", - "restarting": "Restarting Core..." - }, - "clashService": { - "installing": "Хезмәт урнаштырыла...", - "uninstalling": "Uninstalling Service..." - } - } - }, - "layout": { - "components": { - "navigation": { - "tabs": { - "home": "Home", - "proxies": "Прокси", - "profiles": "Профильләр", - "connections": "Тоташулар", - "rules": "Кагыйдәләр", - "logs": "Логлар", - "unlock": "Test", - "settings": "Көйләүләр" - }, - "menu": { - "reorderMode": "Menu reorder mode", - "unlock": "Unlock menu order", - "lock": "Lock menu order" - } - } - } - } -} diff --git a/src/locales/tt/connections.json b/src/locales/tt/connections.json new file mode 100644 index 00000000..847a07f1 --- /dev/null +++ b/src/locales/tt/connections.json @@ -0,0 +1,28 @@ +{ + "page": { + "title": "Тоташулар" + }, + "components": { + "fields": { + "host": "Хост", + "dlSpeed": "Йөкләү тизл.", + "ulSpeed": "Чыгару тизл.", + "chains": "Чылбырлар", + "rule": "Кагыйдә", + "process": "Процесс", + "time": "Тоташу вакыты", + "source": "Чыганак адресы", + "destination": "Максат IP-адресы", + "destinationPort": "Барасы порты", + "type": "Төр" + }, + "order": { + "default": "Default", + "uploadSpeed": "Йөкләү (чыгару) тизлеге", + "downloadSpeed": "Йөкләү тизлеге" + }, + "actions": { + "closeConnection": "Тоташуны ябу" + } + } +} diff --git a/src/locales/tt/home.json b/src/locales/tt/home.json new file mode 100644 index 00000000..1a92f39f --- /dev/null +++ b/src/locales/tt/home.json @@ -0,0 +1,138 @@ +{ + "page": { + "tooltips": { + "lightweightMode": "Җиңел Режим", + "manual": "Документация", + "settings": "Home Settings" + }, + "cards": { + "trafficStats": "Traffic Stats", + "networkSettings": "Network Settings", + "proxyMode": "Proxy Mode" + }, + "settings": { + "cards": { + "profile": "Profile Card", + "currentProxy": "Current Proxy Card", + "network": "Network Settings Card", + "proxyMode": "Proxy Mode Card", + "traffic": "Traffic Stats Card", + "tests": "Website Tests Card", + "ip": "IP Information Card", + "clashInfo": "Clash Info Cards", + "systemInfo": "System Info Cards" + }, + "title": "Home Settings" + }, + "title": "Home" + }, + "components": { + "proxyTun": { + "status": { + "systemProxyEnabled": "System proxy is enabled, your applications will access the network through the proxy", + "systemProxyDisabled": "System proxy is disabled, it is recommended for most users to turn on this option", + "tunModeServiceRequired": "TUN mode requires service mode, please install the service first", + "tunModeEnabled": "TUN mode is enabled, applications will access the network through the virtual network card", + "tunModeDisabled": "TUN mode is disabled, suitable for special applications" + }, + "tooltips": { + "systemProxy": "Системалы прокси көйләүләрен үзгәртү рөхсәтен бирегез. Әгәр рөхсәт алу мөмкин түгел икән, прокси көйләүләрен кулдан үзгәртегез", + "tunMode": "TUN mode can take over all application traffic, suitable for special applications that do not follow the system proxy settings" + } + }, + "clashInfo": { + "title": "Clash Info", + "fields": { + "coreVersion": "Core Version", + "systemProxyAddress": "System Proxy Address", + "mixedPort": "Mixed Port", + "uptime": "Uptime", + "rulesCount": "Rules Count" + } + }, + "systemInfo": { + "title": "System Info", + "fields": { + "osInfo": "OS Info", + "autoLaunch": "Автостарт", + "runningMode": "Running Mode", + "lastCheckUpdate": "Last Check Update", + "vergeVersion": "Verge версиясе" + }, + "actions": { + "settings": "Көйләүләр" + }, + "tooltips": { + "autoLaunchAdmin": "Administrator mode may not support auto launch" + }, + "badges": { + "adminMode": "Administrator Mode", + "serviceMode": "Сервис режимы", + "sidecarMode": "User Mode", + "adminServiceMode": "Admin + Service Mode" + } + }, + "ipInfo": { + "title": "IP Information", + "labels": { + "ip": "IP", + "asn": "ASN", + "isp": "ISP", + "org": "ORG", + "location": "Location", + "timezone": "Timezone", + "autoRefresh": "Auto refresh", + "unknown": "Unknown" + }, + "errors": { + "load": "IP мәгълүматын алу мөмкин булмады" + } + }, + "currentProxy": { + "title": "Current Node", + "actions": { + "refreshDelay": "Задержканы тикшерү" + }, + "labels": { + "globalMode": "Глобаль режим", + "directMode": "Туры режим", + "group": "Group", + "proxy": "Proxy", + "noActiveNode": "No active proxy node" + } + }, + "tests": { + "title": "Website Tests" + }, + "traffic": { + "metrics": { + "uploadSpeed": "Йөкләү (чыгару) тизлеге", + "downloadSpeed": "Йөкләү тизлеге", + "activeConnections": "Active Connections", + "memoryUsage": "Хәтер куллану" + }, + "legends": { + "upload": "Upload", + "download": "Download" + }, + "patterns": { + "minutes": "{{time}} Minutes" + } + }, + "clashMode": { + "errors": { + "communication": "Core communication error" + }, + "labels": { + "rule": "Кагыйдәләр режимы", + "global": "Глобаль режим", + "direct": "Туры режим" + }, + "descriptions": { + "rule": "Automatically choose proxies according to the rule set.", + "global": "Forward all network requests through the selected proxy.", + "direct": "Bypass the proxy and connect to the internet directly." + } + } + } +} diff --git a/src/locales/tt/index.ts b/src/locales/tt/index.ts new file mode 100644 index 00000000..2977171d --- /dev/null +++ b/src/locales/tt/index.ts @@ -0,0 +1,27 @@ +import shared from "./shared.json"; +import profiles from "./profiles.json"; +import proxies from "./proxies.json"; +import connections from "./connections.json"; +import tests from "./tests.json"; +import logs from "./logs.json"; +import rules from "./rules.json"; +import home from "./home.json"; +import unlock from "./unlock.json"; +import settings from "./settings.json"; +import layout from "./layout.json"; + +const resources = { + "shared": shared, + "profiles": profiles, + "proxies": proxies, + "connections": connections, + "tests": tests, + "logs": logs, + "rules": rules, + "home": home, + "unlock": unlock, + "settings": settings, + "layout": layout, +}; + +export default resources; diff --git a/src/locales/tt/layout.json b/src/locales/tt/layout.json new file mode 100644 index 00000000..140644bb --- /dev/null +++ b/src/locales/tt/layout.json @@ -0,0 +1,21 @@ +{ + "components": { + "navigation": { + "tabs": { + "home": "Home", + "proxies": "Прокси", + "profiles": "Профильләр", + "connections": "Тоташулар", + "rules": "Кагыйдәләр", + "logs": "Логлар", + "unlock": "Test", + "settings": "Көйләүләр" + }, + "menu": { + "reorderMode": "Menu reorder mode", + "unlock": "Unlock menu order", + "lock": "Lock menu order" + } + } + } +} diff --git a/src/locales/tt/logs.json b/src/locales/tt/logs.json new file mode 100644 index 00000000..5e4931c7 --- /dev/null +++ b/src/locales/tt/logs.json @@ -0,0 +1,5 @@ +{ + "page": { + "title": "Логлар" + } +} diff --git a/src/locales/tt/profiles.json b/src/locales/tt/profiles.json new file mode 100644 index 00000000..9c1697af --- /dev/null +++ b/src/locales/tt/profiles.json @@ -0,0 +1,182 @@ +{ + "page": { + "actions": { + "updateAll": "Барлык профильләрне яңарту", + "viewRuntimeConfig": "Кулланылган конфигурацияне карау", + "reactivate": "Профильләрне янәдән активлаштыру", + "import": "Импорт" + }, + "batch": { + "actions": { + "delete": "Delete Selected Profiles", + "selectAll": "Select All", + "deselectAll": "Deselect All", + "done": "Done" + }, + "summary": { + "selected": "Selected", + "items": "items" + }, + "title": "Batch Operations" + }, + "importForm": { + "placeholder": "Профиль URL-ы", + "actions": { + "paste": "Кую" + } + }, + "feedback": { + "errors": { + "invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://", + "onlyYaml": "Фәкать YAML-файллар гына хуплана" + }, + "notifications": { + "importRetry": "Import failed, retrying with Clash proxy...", + "importFail": "Import failed even with Clash proxy", + "importNeedsRefresh": "Profile imported but may need manual refresh", + "importSuccess": "Profile imported successfully, please restart if not visible", + "profileSwitched": "Профиль алмаштырылды", + "profileReactivated": "Профиль яңадан активлаштырылды", + "switchInterrupted": "Profile switch interrupted by new selection", + "batchDeleted": "Selected profiles deleted successfully" + }, + "notices": { + "forceRefreshCompleted": "Force refresh completed", + "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" + } + }, + "title": "Профильләр" + }, + "components": { + "card": { + "labels": { + "clickToImport": "Click to import subscription" + } + }, + "fileInput": { + "chooseFile": "Файл сайлау" + }, + "menu": { + "home": "Home", + "select": "Сайлау", + "editInfo": "Мәгълүматны үзгәртү", + "editFile": "Файлны үзгәртү", + "editRules": "Кагыйдәләрне үзгәртү", + "editProxies": "Проксины үзгәртү", + "editGroups": "Прокси төркемнәрен үзгәртү", + "extendConfig": "Merge-ны үзгәртергә", + "extendScript": "Script-ны үзгәртергә", + "openFile": "Файлны ачу", + "update": "Яңарту", + "updateViaProxy": "Update via proxy" + }, + "more": { + "global": { + "merge": "Global Merge", + "script": "Global Script" + }, + "chips": { + "merge": "Merge", + "script": "Script" + } + }, + "profileItem": { + "tooltips": { + "showLast": "Click to show last update time", + "showNext": "Click to show next update" + }, + "status": { + "lastUpdateFailed": "Last Update failed", + "nextUp": "Next Up", + "noSchedule": "No schedule", + "unknown": "Unknown", + "autoUpdateDisabled": "Auto update disabled" + } + } + }, + "modals": { + "profileForm": { + "title": { + "create": "Профиль булдыру", + "edit": "Профильне үзгәртү" + }, + "fields": { + "type": "Төр", + "description": "Тасвирламалар", + "subscriptionUrl": "Подписка URL-ы", + "httpTimeout": "HTTP Request Timeout", + "updateInterval": "Яңарту интервалы", + "useSystemProxy": "Системалы проксины кулланып яңарту", + "useClashProxy": "Clash прокси кулланып яңарту", + "acceptInvalidCerts": "Дөрес булмаган сертификатларны кабул итү (Куркыныч)", + "allowAutoUpdate": "Allow Auto Update" + }, + "feedback": { + "notifications": { + "creationRetry": "Profile creation failed, retrying with Clash proxy...", + "creationSuccess": "Profile creation succeeded with Clash proxy" + } + } + }, + "proxiesEditor": { + "title": "Проксины үзгәртү", + "placeholders": { + "multiUri": "Берничә URI өчен яңа юл символын кулланыгыз (Base64 кодлавы ярдәм ителә)" + }, + "actions": { + "prepend": "Проксины өскә өстәү", + "append": "Проксины аска өстәү" + } + }, + "groupsEditor": { + "title": "Прокси төркемнәрен үзгәртү", + "errors": { + "nameRequired": "Төркем исеме кирәк", + "nameExists": "Әлеге төркем исеме бар инде" + }, + "fields": { + "type": "Төркем төре", + "name": "Төркем исеме", + "icon": "Прокси төркеме иконкасы", + "proxies": "Прокси куллану", + "provider": "Провайдер куллану", + "healthCheckUrl": "Сәламәтлекне тикшерү URL-ы", + "expectedStatus": "Көтелгән статус коды", + "interval": "Интервал", + "maxFailedTimes": "Иң күп хаталы тикшерү саны", + "interfaceName": "Интерфейс исеме", + "routingMark": "Маршрут билгесе", + "filter": "Фильтр", + "excludeFilter": "Фильтр аша чыгару", + "excludeType": "Чыгару төре", + "includeAll": "Барлык прокси һәм провайдерларны кертү", + "includeAllProxies": "Барлык проксины кертү", + "includeAllProviders": "Барлык провайдерларны кертү" + }, + "toggles": { + "lazy": "Сак режим (lazy)", + "disableUdp": "UDP'ны сүндерү", + "hidden": "Яшерен" + }, + "actions": { + "prepend": "Төркемне өскә өстәү", + "append": "Төркемне аска өстәү" + } + }, + "editor": { + "actions": { + "format": "Документны форматлау" + }, + "messages": { + "readOnly": "Уку режимында үзгәртү мөмкин түгел" + } + }, + "confirmDelete": { + "title": "Бетерүне раслагыз", + "message": "Бу гамәлне кире кайтарып булмый" + }, + "logViewer": { + "title": "Скрипт консоле" + } + } +} diff --git a/src/locales/tt/proxies.json b/src/locales/tt/proxies.json new file mode 100644 index 00000000..20204431 --- /dev/null +++ b/src/locales/tt/proxies.json @@ -0,0 +1,90 @@ +{ + "page": { + "modes": { + "rule": "Rule", + "global": "Global", + "direct": "Direct" + }, + "actions": { + "toggleChain": "🔗 Чылбыр прокси", + "connect": "Connect", + "disconnect": "Disconnect", + "connecting": "Connecting...", + "clearChainConfig": "Delete Chain Config" + }, + "provider": { + "title": "Прокси провайдеры", + "actions": { + "updateAll": "Барысын да яңарту", + "update": "Яңарту" + } + }, + "rules": { + "title": "Proxy Rules", + "select": "Select Rules" + }, + "labels": { + "proxyCount": "Proxy Count", + "delayCheckReset": "Беркетелгәнне гамәлдән чыгару өчен задержканы тикшерү" + }, + "tooltips": { + "locate": "Урын", + "delayCheck": "Задержканы тикшерү", + "sortDefault": "Башлангыч итеп сортлау", + "sortDelay": "Задержка буенча сортлау", + "sortName": "Исем буенча сортлау", + "delayCheckUrl": "Задержканы тикшерү URL-ы", + "showBasic": "Прокси турында кыскача мәгълүмат", + "showDetail": "Прокси турында тулы мәгълүмат", + "filter": "Фильтр" + }, + "placeholders": { + "delayCheckUrl": "Задержканы тикшерү URL-ы" + }, + "chain": { + "header": "Chain Proxy Config", + "empty": "No proxy chain configured", + "instruction": "Click nodes in order to add to proxy chain", + "minimumNodes": "Chain proxy requires at least 2 nodes", + "minimumNodesHint": "Chain proxy requires at least 2 nodes. Please add one more node.", + "connectFailed": "Failed to connect to proxy chain", + "disconnectFailed": "Failed to disconnect from proxy chain", + "duplicateNode": "Proxy node already exists in chain" + }, + "messages": { + "directMode": "Туры режим" + }, + "title": { + "default": "Прокси төркемнәре", + "chainMode": "Proxy Chain Mode" + } + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "components": { + "enums": { + "strategies": { + "select": "Проксины кулдан сайлау", + "url-test": "URL-тест задержкасына карап прокси сайлау", + "fallback": "Хата булган очракта башка проксига күчү", + "load-balance": "Трафикны баланслау нигезендә прокси тарату", + "relay": "Билгеле прокси чылбыры аша тапшыру" + }, + "policies": { + "DIRECT": "Туры чыгу", + "REJECT": "Сорауларны тоткарлау", + "REJECT-DROP": "Сорауларны кире кагу", + "PASS": "Туры килсә дә, бу кагыйдәне урап узу" + } + } + } +} diff --git a/src/locales/tt/rules.json b/src/locales/tt/rules.json new file mode 100644 index 00000000..f35446df --- /dev/null +++ b/src/locales/tt/rules.json @@ -0,0 +1,82 @@ +{ + "page": { + "provider": { + "trigger": "Кагыйдә провайдеры", + "dialogTitle": "Кагыйдә провайдеры", + "actions": { + "updateAll": "Барысын да яңарту", + "update": "Яңарту" + } + }, + "title": "Кагыйдәләр" + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "modals": { + "editor": { + "form": { + "labels": { + "type": "Кагыйдә төре", + "content": "Кагыйдә эчтәлеге", + "proxyPolicy": "Прокси сәясәте" + }, + "toggles": { + "noResolve": "Резолвсыз" + }, + "actions": { + "prependRule": "Кагыйдәне өскә өстәү", + "appendRule": "Кагыйдәне аска өстәү" + }, + "validation": { + "conditionRequired": "Кагыйдә шарты кирәк", + "invalidRule": "Яраксыз кагыйдә" + } + }, + "ruleTypes": { + "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": "Барлык сорауларга туры килә" + }, + "title": "Кагыйдәләрне үзгәртү" + } + } +} diff --git a/src/locales/tt/settings.json b/src/locales/tt/settings.json new file mode 100644 index 00000000..860dec9a --- /dev/null +++ b/src/locales/tt/settings.json @@ -0,0 +1,571 @@ +{ + "page": { + "actions": { + "manual": "Документация", + "telegram": "Telegram каналы", + "github": "GitHub репозиториясе" + }, + "title": "Көйләүләр" + }, + "sections": { + "system": { + "title": "Система көйләүләре", + "toggles": { + "tunMode": "Tun режимы (виртуаль челтәр адаптеры)", + "systemProxy": "Системалы прокси" + }, + "tooltips": { + "autoLaunchAdmin": "Administrator mode may not support auto launch", + "silentStart": "Программаны фоновый режимда, тәрәзәсез эшләтеп җибәрү" + }, + "fields": { + "autoLaunch": "Автоматик башлау", + "silentStart": "Тын башлау" + }, + "notifications": { + "tunMode": { + "autoDisabled": "TUN Mode automatically disabled due to service unavailable", + "autoDisableFailed": "Failed to disable TUN Mode automatically" + } + } + }, + "proxyControl": { + "tooltips": { + "systemProxy": "Системалы прокси көйләүләрен үзгәртү рөхсәтен бирегез. Әгәр рөхсәт алу мөмкин түгел икән, прокси көйләүләрен кулдан үзгәртегез", + "tunMode": "Tun режимы бөтен системаның трафигын тотып ала. Аны кабызган очракта системалы проксины аерым кабызу таләп ителми.", + "tunUnavailable": "TUN requires Service Mode or Admin Mode" + }, + "actions": { + "installService": "Хезмәтне урнаштыру", + "uninstallService": "Uninstall Service" + }, + "fields": { + "systemProxy": "Системалы прокси", + "tunMode": "Tun режимы (виртуаль челтәр адаптеры)" + } + }, + "externalController": { + "title": "Тышкы контроллер адресы", + "fields": { + "enable": "Enable External Controller", + "address": "Тышкы контроллер адресы", + "secret": "Серсүз" + }, + "placeholders": { + "address": "Required", + "secret": "Тавсия ителә" + }, + "tooltips": { + "copy": "Copy to clipboard" + }, + "messages": { + "addressRequired": "Controller address cannot be empty", + "secretRequired": "Secret cannot be empty", + "copyFailed": "Failed to copy", + "controllerCopied": "Controller address copied to clipboard", + "secretCopied": "Secret copied to clipboard" + } + }, + "externalCors": { + "title": "External Cors Configuration", + "fields": { + "allowPrivateNetwork": "Allow private network access", + "allowedOrigins": "Allowed Origins" + }, + "placeholders": { + "origin": "Please enter a valid url" + }, + "actions": { + "add": "Add" + }, + "messages": { + "alwaysIncluded": "Always included origins: {{urls}}" + }, + "tooltips": { + "open": "External Cors Settings" + } + }, + "appearance": { + "light": "Light", + "dark": "Dark", + "system": "System" + }, + "clash": { + "title": "Clash көйләүләре", + "form": { + "fields": { + "allowLan": "Локаль челтәргә рөхсәт", + "dnsOverwrite": "DNS Overwrite", + "ipv6": "IPv6", + "unifiedDelay": "Бердәм задержка", + "logLevel": "Лог дәрәҗәсе", + "portConfig": "Порт көйләүләре", + "external": "Тышкы", + "webUI": "Веб-интерфейс", + "clashCore": "Clash ядросы", + "openUwpTool": "UWP инструментын ачу", + "updateGeoData": "GeoData яңарту" + }, + "tooltips": { + "networkInterface": "Челтәр интерфейсы", + "unifiedDelay": "Бердәм задержка актив булганда, төрле типтагы узеллар өчен икеләтә тест башкарыла, TCP установканы раслау аермаларын тигезләү максатында", + "logLevel": "Бу фәкать сервис режимында эшләгән вакытта системалы журнал файлларына кагыла", + "openUwpTool": "Windows 8'дән башлап UWP кушымталары (Microsoft Store кебек) локаль хосттагы челтәр хезмәтләренә турыдан-туры тоташа алмый. Бу инструмент әлеге чикләүне әйләнеп узарга ярдәм итә" + }, + "options": { + "logLevel": { + "debug": "Debug", + "info": "Info", + "warning": "Warn", + "error": "Error", + "silent": "Silent" + } + } + } + } + }, + "components": { + "verge": { + "basic": { + "title": "Verge Төп көйләүләр", + "actions": { + "browse": "Карау" + }, + "trayOptions": { + "showMainWindow": "Төп тәрәзәне күрсәтү", + "showTrayMenu": "Show Tray Menu", + "disable": "Сүндерү" + }, + "fields": { + "language": "Тел", + "themeMode": "Теманың режимы", + "trayClickEvent": "Трейдагы басу вакыйгасы", + "copyEnvType": "Env төрен күчереп алу", + "startPage": "Баш бит", + "startupScript": "Башлану скрипты", + "themeSetting": "Тема көйләүләре", + "layoutSetting": "Расположение көйләүләре", + "misc": "Өстәмә көйләүләр", + "hotkeySetting": "Клавиатура төймәләре (hotkey) көйләүләре" + } + }, + "advanced": { + "title": "Verge Киңәйтелгән көйләүләр", + "tooltips": { + "backupInfo": "WebDAV аша конфигурация файлын саклауны хуплый", + "openConfDir": "Әгәр программада хаталар чыкса, бу папкадагы файлларны саклап калыгыз да, аннары барысын да бетереп, программаны яңадан башлагыз", + "liteMode": "GUI-ны ябыгыз һәм бары тик төшне генә эшләтеп калдырыгыз" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "Сездә иң соңгы версия урнаштырылган", + "versionCopied": "Version copied to clipboard" + }, + "fields": { + "backupSetting": "Резерв копия көйләүләре", + "runtimeConfig": "Агымдагы конфигурация", + "openConfDir": "Кушымта папкасын ачу", + "openCoreDir": "Ядро сакланган папканы ачу", + "openLogsDir": "Логлар папкасын ачу", + "checkUpdates": "Яңартуларны тикшерү", + "openDevTools": "Разработчик коралларын ачу", + "liteModeSettings": "LightWeight Mode Settings", + "exit": "Чыгу", + "exportDiagnostics": "Export Diagnostic Info", + "vergeVersion": "Verge версиясе" + } + }, + "theme": { + "title": "Тема көйләүләре", + "fields": { + "primaryColor": "Төп төс", + "secondaryColor": "Икенче төс", + "primaryText": "Primary Text", + "secondaryText": "Secondary Text", + "infoColor": "Мәгълүмат төсе", + "warningColor": "Кисәтү төсе", + "errorColor": "Хата төсе", + "successColor": "Уңыш төсе", + "fontFamily": "Шрифтлар гаиләсе", + "cssInjection": "CSS кертү" + }, + "actions": { + "editCss": "Edit CSS" + }, + "dialogs": { + "editCssTitle": "Edit CSS" + } + }, + "layout": { + "title": "Расположение көйләүләре", + "fields": { + "preferSystemTitlebar": "Prefer System Titlebar", + "trafficGraph": "Трафик графигы", + "memoryUsage": "Хәтер куллану", + "proxyGroupIcon": "Прокси төркеме иконкасы", + "hoverNavigator": "Hover Jump Navigator", + "hoverNavigatorDelay": "Hover Jump Navigator Delay", + "navIcon": "Навигация иконкасы", + "trayIcon": "Трей иконкасы", + "showProxyGroupsInline": "Show Proxy Groups Inline", + "commonTrayIcon": "Гомуми трей иконкасы", + "systemProxyTrayIcon": "Системалы прокси иконкасы", + "tunTrayIcon": "Tun (виртуаль адаптер) иконкасы", + "enableTrayIcon": "Enable Tray Icon", + "enableTraySpeed": "Трей скоростьне үстерү" + }, + "tooltips": { + "hoverNavigator": "Automatically scroll to the corresponding proxy group when hovering over alphabet letters", + "hoverNavigatorDelay": "Delay before auto scrolling when hovering, in milliseconds" + }, + "options": { + "icon": { + "monochrome": "Монохром", + "colorful": "Төсле", + "disable": "Сүндерү" + } + } + } + } + }, + "modals": { + "clashPort": { + "title": "Порт көйләүләре", + "fields": { + "mixed": "Катнаш прокси порты", + "socks": "Socks прокси порты", + "http": "HTTP(s) прокси порты", + "redir": "Redir — үтә күренмәле прокси порты", + "tproxy": "Tproxy — үтә күренмәле прокси порты" + }, + "actions": { + "random": "Очраклы порт" + }, + "messages": { + "saved": "Port settings saved", + "saveFailed": "Failed to save port settings" + } + }, + "clashCore": { + "variants": { + "release": "Рәсми версия", + "alpha": "Альфа-версия" + } + }, + "liteMode": { + "title": "LightWeight Mode Settings", + "actions": { + "enterNow": "Enter LightWeight Mode Now" + }, + "toggles": { + "autoEnter": "Auto Enter LightWeight Mode" + }, + "tooltips": { + "autoEnter": "Enable to automatically activate LightWeight Mode after the window is closed for a period of time" + }, + "fields": { + "delay": "Auto Enter LightWeight Mode Delay" + }, + "messages": { + "autoEnterHint": "When closing the window, LightWeight Mode will be automatically activated after {{n}} minutes" + } + }, + "backup": { + "title": "Резерв копия көйләүләре", + "tabs": { + "local": "Local backup", + "webdav": "WebDAV backup" + }, + "actions": { + "selectTarget": "Select backup target", + "backup": "Резерв копия", + "export": "Export", + "exportBackup": "Export Backup", + "deleteBackup": "Резерв копияне бетерү", + "restore": "Кайтару", + "restoreBackup": "Резерв копияне кайтару" + }, + "fields": { + "webdavUrl": "WebDAV сервер URL-ы (http(s)://)", + "username": "Кулланучы исеме", + "info": "Backups are stored locally in the application data directory. Use the list below to restore or delete backups." + }, + "messages": { + "webdavUrlRequired": "WebDAV адресы буш булырга тиеш түгел", + "invalidWebdavUrl": "WebDAV адресы дөрес түгел", + "usernameRequired": "Кулланучы исеме буш булмаска тиеш", + "passwordRequired": "Пароль буш булмаска тиеш", + "webdavConfigSaved": "WebDAV көйләүләре сакланды", + "webdavConfigSaveFailed": "WebDAV көйләүләрен саклап булмады: {{error}}", + "backupCreated": "Резерв копия уңышлы ясалды", + "backupFailed": "Резерв копия хата белән төгәлләнде: {{error}}", + "localBackupCreated": "Local backup created successfully", + "localBackupFailed": "Local backup failed", + "restoreSuccess": "Уңышлы кайтарылды, кушымта 1 секундтан яңадан башланачак", + "localBackupExported": "Local backup exported successfully", + "localBackupExportFailed": "Failed to export local backup", + "confirmDelete": "Бу резерв копия файлын бетерергә телисезме?", + "confirmRestore": "Бу резерв копия файлын кире кайтарырга телисезме?" + }, + "table": { + "filename": "Файл исеме", + "backupTime": "Резерв копия вакыты", + "actions": "Гамәлләр", + "noBackups": "Резерв копияләр юк", + "rowsPerPage": "Rows per page" + } + }, + "misc": { + "title": "Өстәмә көйләүләр", + "fields": { + "appLogLevel": "Кушымта журналы дәрәҗәсе", + "appLogMaxSize": "App Log Max Size", + "appLogMaxCount": "App Log Max Count", + "autoCloseConnections": "Тоташуларны автоматик ябу", + "autoCheckUpdate": "Яңартуларны автоматик тикшерү", + "enableBuiltinEnhanced": "Эчке камилләштерүне кабызу", + "proxyLayoutColumns": "Прокси күрсәтү баганалары саны", + "autoLogClean": "Логларны автоматик чистарту", + "autoDelayDetection": "Автоматик тоткарлык ачыклау", + "defaultLatencyTest": "Тоткарлануны тикшерү сылтамасы (defaults)", + "defaultLatencyTimeout": "Тоткарлануның стандарт таймауты" + }, + "tooltips": { + "autoCloseConnections": "Прокси төркеме яисә режимын үзгәрткәндә актив тоташуларны өзү", + "enableBuiltinEnhanced": "Конфигурация файлы белән туры килә торган өстәмә оптимизация", + "autoDelayDetection": "Фон режимында хәзерге төен тоткарлыгын периодик тикшерә", + "defaultLatencyTest": "Бу фәкать клиентның HTTP сораулары тесты өчен кулланыла, конфигурация файлына йогынты ясамый" + }, + "options": { + "proxyLayoutColumns": { + "auto": "Авто баганалар" + }, + "autoLogClean": { + "never": "Беркайчан чистартмаска", + "retainDays": "{{n}} көн саклау" + } + } + }, + "update": { + "title": "New Version v{{version}}", + "actions": { + "goToRelease": "Релизлар битенә күчү", + "update": "Яңарту" + }, + "messages": { + "portableError": "Портатив версиядә кушымта эчендә яңарту хупланмый, кулдан төшереп алыгыз", + "breakChangeError": "Бу зур яңарту, ул кушымта эчендә яңартылмый. Борып алып ташлап, яңадан урнаштыру сорала." + } + }, + "sysproxy": { + "title": "Системалы прокси көйләүләре", + "fieldsets": { + "currentStatus": "Агымдагы системалы прокси" + }, + "fields": { + "enableStatus": "Активлаштыру статусы", + "serverAddr": "Сервер адресы", + "pacUrl": "PAC адресы", + "proxyHost": "Прокси хосты", + "usePacMode": "PAC режимын куллану", + "proxyGuard": "Прокси саклаучы", + "guardDuration": "Саклау вакыты", + "alwaysUseDefaultBypass": "Һәрвакыт төп Bypass-ны куллану", + "proxyBypass": "Проксины әйләнеп узу:", + "bypass": "Әйләнеп узу:", + "pacScriptContent": "PAC скрипты эчтәлеге" + }, + "tooltips": { + "proxyGuard": "Системалы прокси көйләүләрен чит программа үзгәртмәсен өчен шушы функцияне кабызыгыз" + }, + "messages": { + "durationTooShort": "Прокси-демон эш вакыты 1 секундтан ким була алмый", + "invalidBypass": "Дөрес булмаган Bypass форматы", + "invalidProxyHost": "Прокси хосты форматы дөрес түгел" + }, + "actions": { + "editPac": "Үзгәртү PAC" + } + }, + "tun": { + "title": "Tun режимы (виртуаль челтәр адаптеры)", + "fields": { + "stack": "Стек", + "device": "Device Name", + "autoRoute": "Авто-маршрутлау", + "strictRoute": "Катгый маршрутлау", + "autoDetectInterface": "Интерфейсны автоматик ачыклау", + "dnsHijack": "DNS'ны үзгәртеп тоту (hijack)", + "mtu": "MTU (макс. тапшыру берәмлеге)" + }, + "tooltips": { + "dnsHijack": "Please use , to separate multiple DNS servers" + }, + "messages": { + "applied": "Көйләүләр кулланылды" + } + }, + "dns": { + "dialog": { + "title": "DNS Overwrite", + "warning": "If you are not familiar with these settings, please do not modify them and keep DNS Overwrite enabled" + }, + "sections": { + "general": "DNS Settings", + "fallbackFilter": "Fallback Filter Settings", + "hosts": "Hosts Settings" + }, + "fields": { + "enable": "Enable DNS", + "listen": "DNS Listen", + "enhancedMode": "Enhanced Mode", + "fakeIpRange": "Fake IP Range", + "fakeIpFilterMode": "Fake IP Filter Mode", + "ipv6": { + "label": "IPv6", + "description": "Enable IPv6 DNS resolution" + }, + "preferH3": { + "label": "Prefer H3", + "description": "DNS DOH uses HTTP/3" + }, + "respectRules": { + "label": "Respect Rules", + "description": "DNS connections follow routing rules" + }, + "useHosts": { + "label": "Use Hosts", + "description": "Enable to resolve hosts through hosts file" + }, + "useSystemHosts": { + "label": "Use System Hosts", + "description": "Enable to resolve hosts through system hosts file" + }, + "directPolicy": { + "label": "Direct Nameserver Follow Policy", + "description": "Whether to follow nameserver policy" + }, + "defaultNameserver": { + "label": "Default Nameserver", + "description": "Default DNS servers used to resolve DNS servers" + }, + "nameserver": { + "label": "Nameserver", + "description": "List of DNS servers, comma separated" + }, + "fallback": { + "label": "Fallback", + "description": "List of fallback DNS servers, comma separated" + }, + "proxy": { + "label": "Proxy Server Nameserver", + "description": "DNS servers for proxy node domain resolution" + }, + "directNameserver": { + "label": "Direct Nameserver", + "description": "DNS servers for direct exit domain resolution, supports 'system' keyword, comma separated" + }, + "fakeIpFilter": { + "label": "Fake IP Filter", + "description": "Domains that skip fake IP resolution, comma separated" + }, + "nameserverPolicy": { + "label": "Nameserver Policy", + "description": "Domain-specific DNS server, multiple servers separated by semicolons, format: domain=server1;server2" + }, + "geoipFiltering": { + "label": "GeoIP Filtering", + "description": "Enable GeoIP filtering for fallback" + }, + "geoipCode": "GeoIP Code", + "fallbackIpCidr": { + "label": "Fallback IP CIDR", + "description": "IP CIDRs not using fallback servers, comma separated" + }, + "fallbackDomain": { + "label": "Fallback Domain", + "description": "Domains using fallback servers, comma separated" + }, + "hosts": { + "label": "Hosts", + "description": "Custom domain to IP or domain mapping" + } + }, + "messages": { + "saved": "DNS settings saved", + "configError": "DNS configuration error:" + }, + "errors": { + "invalid": "Invalid configuration" + } + }, + "webUI": { + "actions": { + "openUrl": "URL ачарга" + }, + "title": "Веб-интерфейс", + "messages": { + "supportedPlaceholders": "%host, %port, %secret макросларын хуплау", + "placeholderInstruction": "Хост, порт, серсүзне %host, %port, %secret белән алмаштырыгыз" + } + }, + "hotkey": { + "toggles": { + "enableGlobal": "Глобаль Хоткейны кушу" + }, + "title": "Клавиатура төймәләре (hotkey) көйләүләре", + "functions": { + "rule": "Кагыйдәләр режимы", + "global": "Глобаль режим", + "openOrCloseDashboard": "Панельне ачу/ябу", + "toggleSystemProxy": "Системалы проксины кабызу/сүндерү", + "toggleTunMode": "Tun режимын кабызу/сүндерү", + "entryLightweightMode": "Entry Lightweight Mode", + "direct": "Туры режим" + } + }, + "password": { + "prompts": { + "enterRoot": "root паролен языгыз" + } + }, + "networkInterface": { + "title": "Челтәр интерфейсы", + "fields": { + "ipAddress": "IP адресы", + "macAddress": "MAC адресы" + } + } + }, + "feedback": { + "notifications": { + "clash": { + "restartSuccess": "Clash ядросы яңадан башланды", + "versionUpdated": "Ядро версиясе яңартылды", + "changeSuccess": "Ядро уңышлы алыштырылды", + "changeFailed": "Ядро алыштыру уңышсыз булды", + "geoDataUpdated": "GeoData яңартылды" + }, + "clashService": { + "installSuccess": "Сервис уңышлы урнаштырылды", + "uninstallSuccess": "Сервис уңышлы салдырылды" + }, + "updater": { + "withClashProxySuccess": "Update with Clash proxy successfully", + "withClashProxyFailed": "Update failed even with Clash proxy" + } + } + }, + "statuses": { + "clash": { + "stopping": "Stopping Core...", + "restarting": "Restarting Core..." + }, + "clashService": { + "installing": "Хезмәт урнаштырыла...", + "uninstalling": "Uninstalling Service..." + } + } +} diff --git a/src/locales/tt/shared.json b/src/locales/tt/shared.json new file mode 100644 index 00000000..11ca09e4 --- /dev/null +++ b/src/locales/tt/shared.json @@ -0,0 +1,128 @@ +{ + "actions": { + "cancel": "Баш тарту", + "close": "Ябу", + "confirm": "Растау", + "save": "Саклау", + "delete": "Бетерү", + "edit": "Үзгәртү", + "new": "Яңа", + "enable": "Кушу", + "upgrade": "Яңарту", + "restart": "Перезапуск", + "resetToDefault": "Башлангычка кайтару", + "refresh": "Яңарту", + "retry": "Retry", + "refreshPage": "Refresh Page", + "showDetails": "Show Details", + "hideDetails": "Hide Details", + "listView": "Исемлек күзаллау", + "tableView": "Таблица күзаллау", + "pause": "Туктау", + "resume": "Дәвам", + "closeAll": "Барысын да ябу", + "clear": "Чистарту" + }, + "labels": { + "updateAt": "Яңартылган вакыт", + "timeout": "Timeout", + "icon": "Иконка", + "name": "Исем", + "readOnly": "Уку режимы гына", + "expireTime": "Тамамлану вакыты", + "updateTime": "Яңарту вакыты", + "usedTotal": "Кулланылган / Барлыгы", + "from": "Каян", + "password": "Пароль", + "retryAttempts": "Retry attempts", + "downloaded": "Йөкләнгән", + "uploaded": "Чыгарылган" + }, + "statuses": { + "enabled": "Кушылган", + "disabled": "Сүнгән", + "saving": "Saving...", + "empty": "Буш" + }, + "units": { + "milliseconds": "Миллисекундлар", + "seconds": "Секундлар", + "minutes": "Минутлар", + "kilobytes": "KB", + "files": "Files" + }, + "placeholders": { + "filter": "Фильтр шартлары", + "matchCase": "Регистрны исәпкә алу", + "matchWholeWord": "Сүзнең тулы туры килүе", + "useRegex": "Регуляр выражениеләр куллану" + }, + "validation": { + "invalidRegex": "Invalid regular expression" + }, + "window": { + "maximize": "Зурайту", + "minimize": "Кечерәйтү" + }, + "editorModes": { + "visualization": "Визуализация", + "advanced": "Өстәмә" + }, + "feedback": { + "errors": { + "trafficStats": "Traffic Statistics Error", + "trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes." + }, + "notices": { + "raw": "{{message}}", + "prefixedRaw": "{{prefix}} {{message}}" + }, + "notifications": { + "importSuccess": "Профиль уңышлы импортланды", + "importSubscriptionSuccess": "Import subscription successful", + "importWithClashProxy": "Profile Imported with Clash proxy", + "saved": "Saved successfully", + "common": { + "copySuccess": "Күчерелде", + "saveSuccess": "Configuration saved successfully", + "saveFailed": "Failed to save configuration" + } + }, + "validation": { + "config": { + "failed": "Язылу көйләү тикшерүе уңышсыз, көйләү файлын тикшерегез, үзгәрешләр кире кайтарылды, хата:", + "bootFailed": "Йөкләү вакытында көйләү тикшерүе уңышсыз, стандарт көйләү кулланылды, көйләү файлын тикшерегез, хата:", + "coreChangeFailed": "Ядро алыштырганда көйләү тикшерүе уңышсыз, стандарт көйләү кулланылды, көйләү файлын тикшерегез, хата:", + "processTerminated": "Тикшерү процессы туктатылды" + }, + "script": { + "syntaxError": "Скрипт синтаксик хатасы, үзгәрешләр кире кайтарылды", + "missingMain": "Скрипт хатасы, үзгәрешләр кире кайтарылды", + "fileNotFound": "Файл табылмады, үзгәрешләр кире кайтарылды", + "fileError": "Скрипт файлы хатасы, үзгәрешләр кире кайтарылды" + }, + "yaml": { + "syntaxError": "YAML syntax error, changes reverted", + "readError": "YAML read error, changes reverted", + "mappingError": "YAML mapping error, changes reverted", + "keyError": "YAML key error, changes reverted", + "generalError": "YAML error, changes reverted" + }, + "merge": { + "syntaxError": "Merge file syntax error, changes reverted", + "mappingError": "Merge file mapping error, changes reverted", + "keyError": "Merge file key error, changes reverted", + "generalError": "Merge file error, changes reverted" + } + } + }, + "filters": { + "logLevels": { + "all": "ALL", + "debug": "DEBUG", + "info": "INFO", + "warn": "WARN", + "error": "ERROR" + } + } +} diff --git a/src/locales/tt/tests.json b/src/locales/tt/tests.json new file mode 100644 index 00000000..ddb03074 --- /dev/null +++ b/src/locales/tt/tests.json @@ -0,0 +1,40 @@ +{ + "page": { + "actions": { + "testAll": "Барчасын тестлау" + }, + "title": "Тест" + }, + "components": { + "item": { + "actions": { + "test": "Тест" + } + } + }, + "modals": { + "test": { + "title": { + "create": "Тест булдыру", + "edit": "Тестны үзгәртү" + }, + "fields": { + "url": "Тест URL-ы" + } + } + }, + "statuses": { + "test": { + "pending": "Pending", + "yes": "Yes", + "no": "No", + "failed": "Failed", + "completed": "Completed", + "disallowedIsp": "Disallowed ISP", + "originalsOnly": "Originals Only", + "noDisney": "No (IP Banned By Disney+)", + "unsupportedRegion": "Unsupported Country/Region", + "failedNetwork": "Failed (Network Connection)" + } + } +} diff --git a/src/locales/tt/unlock.json b/src/locales/tt/unlock.json new file mode 100644 index 00000000..e97daa76 --- /dev/null +++ b/src/locales/tt/unlock.json @@ -0,0 +1,12 @@ +{ + "page": { + "actions": { + "testing": "Testing..." + }, + "empty": "No unlock test items", + "messages": { + "detectionTimeout": "Detection timeout or failed" + }, + "title": "Unlock Test" + } +} diff --git a/src/locales/zh.json b/src/locales/zh.json deleted file mode 100644 index c8b9ad8f..00000000 --- a/src/locales/zh.json +++ /dev/null @@ -1,1299 +0,0 @@ -{ - "shared": { - "actions": { - "cancel": "取消", - "close": "关闭", - "confirm": "确认", - "save": "保存", - "delete": "删除", - "edit": "编辑", - "new": "新建", - "enable": "启用", - "upgrade": "升级内核", - "restart": "重启内核", - "resetToDefault": "重置为默认值", - "refresh": "刷新", - "retry": "重试", - "refreshPage": "刷新页面", - "showDetails": "显示详情", - "hideDetails": "隐藏详情", - "listView": "列表视图", - "tableView": "表格视图", - "pause": "暂停", - "resume": "继续", - "closeAll": "关闭全部", - "clear": "清除" - }, - "labels": { - "updateAt": "更新于", - "timeout": "超时", - "icon": "图标", - "name": "名称", - "readOnly": "只读", - "expireTime": "到期时间", - "updateTime": "更新时间", - "usedTotal": "已使用 / 总量", - "from": "来自", - "password": "密码", - "retryAttempts": "重试次数", - "downloaded": "下载量", - "uploaded": "上传量" - }, - "statuses": { - "enabled": "已启用", - "disabled": "未启用", - "saving": "保存中...", - "empty": "空空如也" - }, - "units": { - "milliseconds": "毫秒", - "seconds": "秒", - "minutes": "分钟", - "kilobytes": "KB", - "files": "文件" - }, - "placeholders": { - "filter": "过滤条件", - "matchCase": "区分大小写", - "matchWholeWord": "全字匹配", - "useRegex": "使用正则表达式" - }, - "validation": { - "invalidRegex": "无效的正则表达式" - }, - "window": { - "maximize": "最大化", - "minimize": "最小化" - }, - "editorModes": { - "visualization": "可视化", - "advanced": "高级" - }, - "feedback": { - "errors": { - "trafficStats": "流量统计错误", - "trafficStatsDescription": "流量统计组件发生错误,为防止崩溃已暂时停用。" - }, - "notices": { - "raw": "{{message}}", - "prefixedRaw": "{{prefix}} {{message}}" - }, - "notifications": { - "importSuccess": "导入订阅成功", - "importSubscriptionSuccess": "导入订阅成功", - "importWithClashProxy": "使用 Clash 代理导入订阅成功", - "saved": "保存成功", - "common": { - "copySuccess": "复制成功", - "saveSuccess": "配置保存成功", - "saveFailed": "配置保存失败" - } - }, - "validation": { - "config": { - "failed": "订阅配置校验失败,请检查订阅配置文件,变更已撤销,错误详情:", - "bootFailed": "启动订阅配置校验失败,已使用默认配置启动;请检查订阅配置文件,错误详情:", - "coreChangeFailed": "切换内核时配置校验失败,已使用默认配置启动;请检查订阅配置文件,错误详情:", - "processTerminated": "验证进程被终止" - }, - "script": { - "syntaxError": "脚本语法错误,变更已撤销", - "missingMain": "脚本错误,变更已撤销", - "fileNotFound": "文件丢失,变更已撤销", - "fileError": "脚本文件错误,变更已撤销" - }, - "yaml": { - "syntaxError": "YAML 语法错误,变更已撤销", - "readError": "YAML 读取错误,变更已撤销", - "mappingError": "YAML 映射错误,变更已撤销", - "keyError": "YAML 键错误,变更已撤销", - "generalError": "YAML 错误,变更已撤销" - }, - "merge": { - "syntaxError": "覆写文件语法错误,变更已撤销", - "mappingError": "覆写文件映射错误,变更已撤销", - "keyError": "覆写文件键错误,变更已撤销", - "generalError": "覆写文件错误,变更已撤销" - } - } - }, - "filters": { - "logLevels": { - "all": "ALL", - "debug": "DEBUG", - "info": "INFO", - "warn": "WARN", - "error": "ERROR" - } - } - }, - "profiles": { - "page": { - "actions": { - "updateAll": "更新所有订阅", - "viewRuntimeConfig": "查看运行时订阅", - "reactivate": "重新激活订阅", - "import": "导入" - }, - "batch": { - "actions": { - "delete": "删除选中订阅", - "selectAll": "全选", - "deselectAll": "取消全选", - "done": "完成" - }, - "summary": { - "selected": "已选中", - "items": "项目" - }, - "title": "批量操作" - }, - "importForm": { - "placeholder": "订阅文件链接", - "actions": { - "paste": "粘贴" - } - }, - "feedback": { - "errors": { - "invalidUrl": "无效的订阅链接,请输入以 http:// 或 https:// 开头的地址", - "onlyYaml": "仅支持 YAML 文件" - }, - "notifications": { - "importRetry": "订阅导入失败,尝试使用 Clash 代理导入", - "importFail": "使用 Clash 代理导入订阅也失败", - "importNeedsRefresh": "订阅已导入,但可能需要手动刷新", - "importSuccess": "订阅已成功导入,如未显示请重启应用", - "profileSwitched": "订阅已切换", - "profileReactivated": "订阅已激活", - "switchInterrupted": "订阅切换被新选择中断", - "batchDeleted": "选中的订阅已成功删除" - }, - "notices": { - "forceRefreshCompleted": "数据已强制刷新", - "emergencyRefreshFailed": "紧急刷新失败: {{message}}" - } - }, - "title": "订阅" - }, - "components": { - "card": { - "labels": { - "clickToImport": "点击导入订阅" - } - }, - "fileInput": { - "chooseFile": "选择文件" - }, - "menu": { - "home": "首 页", - "select": "使用", - "editInfo": "编辑信息", - "editFile": "编辑文件", - "editRules": "编辑规则", - "editProxies": "编辑节点", - "editGroups": "编辑代理组", - "extendConfig": "扩展覆写配置", - "extendScript": "扩展脚本", - "openFile": "打开文件", - "update": "更新", - "updateViaProxy": "更新(代理)" - }, - "more": { - "global": { - "merge": "全局扩展覆写配置", - "script": "全局扩展脚本" - }, - "chips": { - "merge": "Merge", - "script": "Script" - } - }, - "profileItem": { - "tooltips": { - "showLast": "点击查看上次更新时间", - "showNext": "点击查看下一次更新" - }, - "status": { - "lastUpdateFailed": "上次更新失败", - "nextUp": "下次更新", - "noSchedule": "没有计划", - "unknown": "未知", - "autoUpdateDisabled": "自动更新已禁用" - } - } - }, - "modals": { - "profileForm": { - "title": { - "create": "新建配置", - "edit": "编辑配置" - }, - "fields": { - "type": "类型", - "description": "描述", - "subscriptionUrl": "订阅链接", - "httpTimeout": "HTTP 请求超时", - "updateInterval": "更新间隔", - "useSystemProxy": "使用系统代理更新", - "useClashProxy": "使用内核代理更新", - "acceptInvalidCerts": "允许无效证书(危险)", - "allowAutoUpdate": "允许自动更新" - }, - "feedback": { - "notifications": { - "creationRetry": "订阅创建失败,尝试使用 Clash 代理创建", - "creationSuccess": "使用 Clash 代理创建订阅成功" - } - } - }, - "proxiesEditor": { - "title": "编辑节点", - "placeholders": { - "multiUri": "多条 URI 请使用换行分隔(支持 Base64 编码)" - }, - "actions": { - "prepend": "添加前置代理节点", - "append": "添加后置代理节点" - } - }, - "groupsEditor": { - "title": "编辑代理组", - "errors": { - "nameRequired": "代理组名称不能为空", - "nameExists": "代理组名称已存在" - }, - "fields": { - "type": "代理组类型", - "name": "代理组组名", - "icon": "代理组图标", - "proxies": "引入代理", - "provider": "引入代理集合", - "healthCheckUrl": "健康检查测试地址", - "expectedStatus": "期望状态码", - "interval": "检查间隔", - "maxFailedTimes": "最大失败次数", - "interfaceName": "出站接口", - "routingMark": "路由标记", - "filter": "过滤节点", - "excludeFilter": "排除节点", - "excludeType": "排除节点类型", - "includeAll": "引入所有出站代理、代理集合", - "includeAllProxies": "引入所有出站代理", - "includeAllProviders": "引入所有代理集合" - }, - "toggles": { - "lazy": "懒惰状态", - "disableUdp": "禁用 UDP", - "hidden": "隐藏代理组" - }, - "actions": { - "prepend": "添加前置代理组", - "append": "添加后置代理组" - } - }, - "editor": { - "actions": { - "format": "格式化文档" - }, - "messages": { - "readOnly": "无法在只读模式下编辑" - } - }, - "confirmDelete": { - "title": "确认删除", - "message": "此操作不可逆" - }, - "logViewer": { - "title": "脚本控制台输出" - } - } - }, - "proxies": { - "page": { - "modes": { - "rule": "规则", - "global": "全局", - "direct": "直连" - }, - "actions": { - "toggleChain": "🔗 链式代理", - "connect": "连接", - "disconnect": "断开", - "connecting": "连接中...", - "clearChainConfig": "删除链式配置" - }, - "provider": { - "title": "代理集合", - "actions": { - "updateAll": "更新全部", - "update": "更新" - } - }, - "rules": { - "title": "代理规则", - "select": "选择规则" - }, - "labels": { - "proxyCount": "节点数量", - "delayCheckReset": "进行延迟测试,以取消固定" - }, - "tooltips": { - "locate": "当前节点", - "delayCheck": "延迟测试", - "sortDefault": "默认排序", - "sortDelay": "按延迟排序", - "sortName": "按名称排序", - "delayCheckUrl": "延迟测试链接", - "showBasic": "隐藏节点细节", - "showDetail": "展示节点细节", - "filter": "过滤节点" - }, - "placeholders": { - "delayCheckUrl": "延迟测试链接" - }, - "chain": { - "header": "代理链配置", - "empty": "暂无代理链配置", - "instruction": "顺序点击节点添加到代理链中", - "minimumNodes": "链式代理至少需要 2 个节点", - "minimumNodesHint": "链式代理至少需要 2 个节点,请再添加一个节点。", - "connectFailed": "连接链式代理失败", - "disconnectFailed": "断开链式代理失败", - "duplicateNode": "该节点已在链式代理表中" - }, - "messages": { - "directMode": "直连模式" - }, - "title": { - "default": "代理组", - "chainMode": "链式代理模式" - } - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} 更新成功", - "updateFailed": "{{name}} 更新失败: {{message}}", - "genericError": "更新失败: {{message}}", - "none": "没有可更新的 provider", - "allUpdated": "所有 provider 均已更新" - } - } - }, - "components": { - "enums": { - "strategies": { - "select": "手动选择代理", - "url-test": "根据 URL 测试延迟选择代理", - "fallback": "不可用时切换到另一个代理", - "load-balance": "根据负载均衡分配代理", - "relay": "根据定义的代理链传递" - }, - "policies": { - "DIRECT": "直连 (DIRECT)", - "REJECT": "拦截请求 (REJECT)", - "REJECT-DROP": "抛弃请求 (REJECT-DROP)", - "PASS": "跳过此规则 (PASS)" - } - } - } - }, - "connections": { - "page": { - "title": "连接" - }, - "components": { - "fields": { - "host": "主机", - "dlSpeed": "下载速度", - "ulSpeed": "上传速度", - "chains": "链路", - "rule": "规则", - "process": "进程", - "time": "连接时间", - "source": "源地址", - "destination": "目标地址", - "destinationPort": "目标端口", - "type": "类型" - }, - "order": { - "default": "默认", - "uploadSpeed": "上传速度", - "downloadSpeed": "下载速度" - }, - "actions": { - "closeConnection": "关闭连接" - } - } - }, - "tests": { - "page": { - "actions": { - "testAll": "测试全部" - }, - "title": "测试" - }, - "components": { - "item": { - "actions": { - "test": "测试" - } - } - }, - "modals": { - "test": { - "title": { - "create": "新建测试", - "edit": "编辑测试" - }, - "fields": { - "url": "测试地址" - } - } - }, - "statuses": { - "test": { - "pending": "待检测", - "yes": "支持", - "no": "不支持", - "failed": "测试失败", - "completed": "检测完成", - "disallowedIsp": "不允许的 ISP", - "originalsOnly": "仅限原创", - "noDisney": "不支持(IP被Disney+禁止)", - "unsupportedRegion": "不支持的国家/地区", - "failedNetwork": "测试失败(网络连接问题)" - } - } - }, - "logs": { - "page": { - "title": "日志" - } - }, - "rules": { - "page": { - "provider": { - "trigger": "规则集合", - "dialogTitle": "规则集合", - "actions": { - "updateAll": "更新全部", - "update": "更新" - } - }, - "title": "规则" - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} 更新成功", - "updateFailed": "{{name}} 更新失败: {{message}}", - "genericError": "更新失败: {{message}}", - "none": "没有可更新的 provider", - "allUpdated": "所有 provider 均已更新" - } - } - }, - "modals": { - "editor": { - "form": { - "labels": { - "type": "规则类型", - "content": "规则内容", - "proxyPolicy": "代理策略" - }, - "toggles": { - "noResolve": "跳过 DNS 解析" - }, - "actions": { - "prependRule": "添加前置规则", - "appendRule": "添加后置规则" - }, - "validation": { - "conditionRequired": "规则条件缺失", - "invalidRule": "无效规则" - } - }, - "ruleTypes": { - "DOMAIN": "匹配完整域名 (DOMAIN)", - "DOMAIN-SUFFIX": "匹配域名后缀 (DOMAIN-SUFFIX)", - "DOMAIN-KEYWORD": "匹配域名关键字 (DOMAIN-KEYWORD)", - "DOMAIN-REGEX": "匹配域名正则表达式 (DOMAIN-REGEX)", - "GEOSITE": "匹配 Geosite 内的域名 (GEOSITE)", - "GEOIP": "匹配 IP 所属国家代码 (GEOIP)", - "SRC-GEOIP": "匹配来源 IP 所属国家代码 (SRC-GEOIP)", - "IP-ASN": "匹配 IP 所属 ASN (IP-ASN)", - "SRC-IP-ASN": "匹配来源 IP 所属 ASN (SRC-IP-ASN)", - "IP-CIDR": "匹配 IP 地址范围 (IP-CIDR)", - "IP-CIDR6": "匹配 IP 地址范围 (IP-CIDR6)", - "SRC-IP-CIDR": "匹配来源 IP 地址范围 (SRC-IP-CIDR)", - "IP-SUFFIX": "匹配 IP 后缀范围 (IP-SUFFIX)", - "SRC-IP-SUFFIX": "匹配来源 IP 后缀范围 (SRC-IP-SUFFIX)", - "SRC-PORT": "匹配请求来源端口范围 (SRC-PORT)", - "DST-PORT": "匹配请求目标端口范围 (DST-PORT)", - "IN-PORT": "匹配入站端口 (IN-PORT)", - "DSCP": "DSCP 标记(仅限 TPROXY UDP 入站)(DSCP)", - "PROCESS-NAME": "匹配进程名称 (PROCESS-NAME)", - "PROCESS-PATH": "匹配完整进程路径 (PROCESS-PATH)", - "PROCESS-NAME-REGEX": "正则匹配完整进程名称 (PROCESS-NAME-REGEX)", - "PROCESS-PATH-REGEX": "正则匹配完整进程路径 (PROCESS-PATH-REGEX)", - "NETWORK": "匹配传输协议 (TCP/UDP) (NETWORK)", - "UID": "匹配 Linux USER ID (UID)", - "IN-TYPE": "匹配入站类型 (IN-TYPE)", - "IN-USER": "匹配入站用户名 (IN-USER)", - "IN-NAME": "匹配入站名称 (IN-NAME)", - "SUB-RULE": "子规则 (SUB-RULE)", - "RULE-SET": "匹配规则集 (RULE-SET)", - "AND": "逻辑与 (AND)", - "OR": "逻辑或 (OR)", - "NOT": "逻辑非 (NOT)", - "MATCH": "匹配所有请求 (MATCH)" - }, - "title": "编辑规则" - } - } - }, - "home": { - "page": { - "tooltips": { - "lightweightMode": "轻量模式", - "manual": "使用手册", - "settings": "首页设置" - }, - "cards": { - "trafficStats": "流量统计", - "networkSettings": "网络设置", - "proxyMode": "代理模式" - }, - "settings": { - "cards": { - "profile": "订阅卡", - "currentProxy": "当前代理卡", - "network": "网络设置卡", - "proxyMode": "代理模式卡", - "traffic": "流量统计卡", - "tests": "网站测试卡", - "ip": "IP 信息卡", - "clashInfo": "Clash 信息卡", - "systemInfo": "系统信息卡" - }, - "title": "首页设置" - }, - "title": "首页" - }, - "components": { - "proxyTun": { - "status": { - "systemProxyEnabled": "系统代理已启用,您的应用将通过代理访问网络", - "systemProxyDisabled": "系统代理已关闭,建议大多数用户打开此选项", - "tunModeServiceRequired": "TUN模式需要服务模式,请先安装服务", - "tunModeEnabled": "TUN 模式已启用,应用将通过虚拟网卡访问网络", - "tunModeDisabled": "TUN 模式已关闭,适用于特殊应用" - }, - "tooltips": { - "systemProxy": "修改操作系统的代理设置,如果开启失败,可手动修改操作系统的代理设置", - "tunMode": "TUN模式可以接管所有应用流量,适用于特殊不遵循系统代理设置的应用" - } - }, - "clashInfo": { - "title": "Clash 信息", - "fields": { - "coreVersion": "内核版本", - "systemProxyAddress": "系统代理地址", - "mixedPort": "混合代理端口", - "uptime": "运行时间", - "rulesCount": "规则数量" - } - }, - "systemInfo": { - "title": "系统信息", - "fields": { - "osInfo": "操作系统信息", - "autoLaunch": "开机自启", - "runningMode": "运行模式", - "lastCheckUpdate": "最后检查更新", - "vergeVersion": "Verge 版本" - }, - "actions": { - "settings": "设置" - }, - "tooltips": { - "autoLaunchAdmin": "管理员模式可能不支持开机自启" - }, - "badges": { - "adminMode": "管理员模式", - "serviceMode": "服务模式", - "sidecarMode": "用户模式", - "adminServiceMode": "管理员 + 服务模式" - } - }, - "ipInfo": { - "title": "IP 信息", - "labels": { - "ip": "IP", - "asn": "自治域", - "isp": "服务商", - "org": "组织", - "location": "位置", - "timezone": "时区", - "autoRefresh": "自动刷新", - "unknown": "未知" - }, - "errors": { - "load": "获取 IP 信息失败" - } - }, - "currentProxy": { - "title": "当前节点", - "actions": { - "refreshDelay": "延迟测试" - }, - "labels": { - "globalMode": "全局模式", - "directMode": "直连模式", - "group": "代理组", - "proxy": "节点", - "noActiveNode": "暂无激活的代理节点" - } - }, - "tests": { - "title": "网站测试" - }, - "traffic": { - "metrics": { - "uploadSpeed": "上传速度", - "downloadSpeed": "下载速度", - "activeConnections": "活跃连接", - "memoryUsage": "内核占用" - }, - "legends": { - "upload": "上传", - "download": "下载" - }, - "patterns": { - "minutes": "{{time}} 分钟" - } - }, - "clashMode": { - "errors": { - "communication": "内核通信错误" - }, - "labels": { - "rule": "规则", - "global": "全局", - "direct": "直连" - }, - "descriptions": { - "rule": "基于预设规则智能判断流量走向,提供灵活的代理策略", - "global": "所有流量均通过代理服务器,适用于需要全局科学上网的场景", - "direct": "所有流量不经过代理节点,但经过Clash内核转发连接目标服务器,适用于需要通过内核进行分流的特定场景" - } - } - } - }, - "unlock": { - "page": { - "actions": { - "testing": "测试中..." - }, - "empty": "暂无解锁测试项目", - "messages": { - "detectionTimeout": "检测超时或失败" - }, - "title": "解锁测试" - } - }, - "settings": { - "page": { - "actions": { - "manual": "使用手册", - "telegram": "Telegram 频道", - "github": "GitHub 项目地址" - }, - "title": "设置" - }, - "sections": { - "system": { - "title": "系统设置", - "toggles": { - "tunMode": "虚拟网卡模式", - "systemProxy": "系统代理" - }, - "tooltips": { - "autoLaunchAdmin": "管理员模式可能不支持开机自启", - "silentStart": "程序启动时以后台模式运行,不显示程序面板" - }, - "fields": { - "autoLaunch": "开机自启", - "silentStart": "静默启动" - }, - "notifications": { - "tunMode": { - "autoDisabled": "由于服务不可用,TUN 模式已自动关闭", - "autoDisableFailed": "自动关闭 TUN 模式失败" - } - } - }, - "proxyControl": { - "tooltips": { - "systemProxy": "修改操作系统的代理设置,如果开启失败,可手动修改操作系统的代理设置", - "tunMode": "TUN(虚拟网卡)模式接管系统所有流量,启用时无须打开系统代理", - "tunUnavailable": "TUN 模式需要安装服务模式或管理员模式" - }, - "actions": { - "installService": "安装服务", - "uninstallService": "卸载服务" - }, - "fields": { - "systemProxy": "系统代理", - "tunMode": "虚拟网卡模式" - } - }, - "externalController": { - "title": "外部控制器监听地址", - "fields": { - "enable": "启用外部控制器", - "address": "外部控制器监听地址", - "secret": "API 访问密钥" - }, - "placeholders": { - "address": "必填", - "secret": "建议设置" - }, - "tooltips": { - "copy": "复制到剪贴板" - }, - "messages": { - "addressRequired": "控制器地址不能为空", - "secretRequired": "访问密钥不能为空", - "copyFailed": "复制失败", - "controllerCopied": "控制器地址已复制到剪贴板", - "secretCopied": "访问密钥已复制到剪贴板" - } - }, - "externalCors": { - "title": "外部控制跨域设置", - "fields": { - "allowPrivateNetwork": "允许专用网络访问", - "allowedOrigins": "允许的来源" - }, - "placeholders": { - "origin": "请输入有效的网址" - }, - "actions": { - "add": "添加" - }, - "messages": { - "alwaysIncluded": "始终包含来源:{{urls}}" - }, - "tooltips": { - "open": "外部控制跨域设置" - } - }, - "appearance": { - "light": "浅色", - "dark": "深色", - "system": "系统" - }, - "clash": { - "title": "Clash 设置", - "form": { - "fields": { - "allowLan": "局域网连接", - "dnsOverwrite": "DNS 覆写", - "ipv6": "IPv6", - "unifiedDelay": "统一延迟", - "logLevel": "日志等级", - "portConfig": "端口设置", - "external": "外部控制", - "webUI": "网页界面", - "clashCore": "Clash 内核", - "openUwpTool": "UWP 工具", - "updateGeoData": "更新 GeoData" - }, - "tooltips": { - "networkInterface": "网络接口", - "unifiedDelay": "开启统一延迟时,会进行两次延迟测试,以消除连接握手等带来的不同类型节点的延迟差异", - "logLevel": "仅对日志目录 Service 文件夹下的内核日志文件生效", - "openUwpTool": "Windows 8 开始限制 UWP 应用(如微软商店)直接访问本地主机的网络服务,使用此工具可绕过该限制" - }, - "options": { - "logLevel": { - "debug": "Debug", - "info": "Info", - "warning": "Warn", - "error": "Error", - "silent": "Silent" - } - } - } - } - }, - "components": { - "verge": { - "basic": { - "title": "Verge 基础设置", - "actions": { - "browse": "浏览" - }, - "trayOptions": { - "showMainWindow": "显示主窗口", - "showTrayMenu": "显示托盘菜单", - "disable": "禁用" - }, - "fields": { - "language": "语言设置", - "themeMode": "主题模式", - "trayClickEvent": "托盘点击事件", - "copyEnvType": "复制环境变量类型", - "startPage": "启动页面", - "startupScript": "启动脚本", - "themeSetting": "主题设置", - "layoutSetting": "界面设置", - "misc": "杂项设置", - "hotkeySetting": "热键设置" - } - }, - "advanced": { - "title": "Verge 高级设置", - "tooltips": { - "backupInfo": "支持本地或 WebDAV 方式备份配置文件", - "openConfDir": "如果软件运行异常,!备份!并删除此文件夹下的所有文件,重启软件", - "liteMode": "关闭GUI界面,仅保留内核运行" - }, - "actions": { - "copyVersion": "复制Verge版本号" - }, - "notifications": { - "latestVersion": "当前已是最新版本", - "versionCopied": "Verge 版本已复制到剪贴板" - }, - "fields": { - "backupSetting": "备份设置", - "runtimeConfig": "当前配置", - "openConfDir": "配置目录", - "openCoreDir": "内核目录", - "openLogsDir": "日志目录", - "checkUpdates": "检查更新", - "openDevTools": "开发者工具", - "liteModeSettings": "轻量模式设置", - "exit": "退出", - "exportDiagnostics": "导出诊断信息", - "vergeVersion": "Verge 版本" - } - }, - "theme": { - "title": "主题设置", - "fields": { - "primaryColor": "主要颜色", - "secondaryColor": "次要颜色", - "primaryText": "文本主要颜色", - "secondaryText": "文本次要颜色", - "infoColor": "信息颜色", - "warningColor": "警告颜色", - "errorColor": "错误颜色", - "successColor": "成功颜色", - "fontFamily": "字体系列", - "cssInjection": "CSS 注入" - }, - "actions": { - "editCss": "编辑 CSS" - }, - "dialogs": { - "editCssTitle": "编辑 CSS" - } - }, - "layout": { - "title": "界面设置", - "fields": { - "preferSystemTitlebar": "优先使用系统标题栏", - "trafficGraph": "流量图显", - "memoryUsage": "内核占用", - "proxyGroupIcon": "代理组图标", - "hoverNavigator": "悬浮跳转导航", - "hoverNavigatorDelay": "悬浮跳转导航延迟", - "navIcon": "导航栏图标", - "trayIcon": "托盘图标", - "showProxyGroupsInline": "将代理组显示在托盘一级菜单", - "commonTrayIcon": "常规托盘图标", - "systemProxyTrayIcon": "系统代理托盘图标", - "tunTrayIcon": "TUN 模式托盘图标", - "enableTrayIcon": "启用托盘图标", - "enableTraySpeed": "启用托盘速率" - }, - "tooltips": { - "hoverNavigator": "鼠标悬停在字母上时自动滚动到对应代理组", - "hoverNavigatorDelay": "鼠标悬停后触发自动跳转前等待的毫秒数" - }, - "options": { - "icon": { - "monochrome": "单色图标", - "colorful": "彩色图标", - "disable": "禁用" - } - } - } - } - }, - "modals": { - "clashPort": { - "title": "端口设置", - "fields": { - "mixed": "混合代理端口", - "socks": "SOCKS 代理端口", - "http": "HTTP(S) 代理端口", - "redir": "Redir 透明代理端口", - "tproxy": "Tproxy 透明代理端口" - }, - "actions": { - "random": "随机端口" - }, - "messages": { - "saved": "端口设置已保存", - "saveFailed": "端口设置保存失败" - } - }, - "clashCore": { - "variants": { - "release": "正式版", - "alpha": "预览版" - } - }, - "liteMode": { - "title": "轻量模式设置", - "actions": { - "enterNow": "立即进入轻量模式" - }, - "toggles": { - "autoEnter": "自动进入轻量模式" - }, - "tooltips": { - "autoEnter": "启用后,将在窗口关闭一段时间后自动激活轻量模式" - }, - "fields": { - "delay": "自动进入轻量模式延迟" - }, - "messages": { - "autoEnterHint": "关闭窗口后,轻量模式将在 {{n}} 分钟后自动激活" - } - }, - "backup": { - "title": "备份设置", - "tabs": { - "local": "本地备份", - "webdav": "WebDAV 备份" - }, - "actions": { - "selectTarget": "选择备份目标", - "backup": "备份", - "export": "导出", - "exportBackup": "导出备份", - "deleteBackup": "删除备份", - "restore": "恢复", - "restoreBackup": "恢复备份" - }, - "fields": { - "webdavUrl": "WebDAV 服务器地址 http(s)://", - "username": "用户名", - "info": "在应用数据目录中创建本地备份,您可以通过下方列表进行恢复或删除。" - }, - "messages": { - "webdavUrlRequired": "WebDAV 服务器地址不能为空", - "invalidWebdavUrl": "无效的 WebDAV 服务器地址格式", - "usernameRequired": "用户名不能为空", - "passwordRequired": "密码不能为空", - "webdavConfigSaved": "WebDAV 配置保存成功", - "webdavConfigSaveFailed": "保存 WebDAV 配置失败: {{error}}", - "backupCreated": "备份创建成功", - "backupFailed": "备份失败: {{error}}", - "localBackupCreated": "本地备份创建成功", - "localBackupFailed": "本地备份失败", - "restoreSuccess": "恢复成功,应用将在 1 秒后重启", - "localBackupExported": "本地备份导出成功", - "localBackupExportFailed": "本地备份导出失败", - "confirmDelete": "确认删除此备份文件吗?", - "confirmRestore": "确认恢复此份文件吗?" - }, - "table": { - "filename": "文件名称", - "backupTime": "备份时间", - "actions": "操作", - "noBackups": "暂无备份", - "rowsPerPage": "每页行数" - } - }, - "misc": { - "title": "杂项设置", - "fields": { - "appLogLevel": "应用日志等级", - "appLogMaxSize": "应用日志最大大小", - "appLogMaxCount": "应用日志最大数量", - "autoCloseConnections": "自动关闭连接", - "autoCheckUpdate": "自动检查更新", - "enableBuiltinEnhanced": "内置增强功能", - "proxyLayoutColumns": "代理页布局列数", - "autoLogClean": "自动清理日志", - "autoDelayDetection": "自动延迟检测", - "defaultLatencyTest": "默认测试链接", - "defaultLatencyTimeout": "测试超时时间" - }, - "tooltips": { - "autoCloseConnections": "当代理组选中节点或代理模式变动时,关闭已建立的连接", - "enableBuiltinEnhanced": "配置文件的兼容性处理", - "autoDelayDetection": "后台定时检测当前节点延迟", - "defaultLatencyTest": "仅用于 HTTP 客户端请求测试,不会对配置文件产生影响" - }, - "options": { - "proxyLayoutColumns": { - "auto": "自动列数" - }, - "autoLogClean": { - "never": "不清理", - "retainDays": "保留 {{n}} 天" - } - } - }, - "update": { - "title": "新版本 v{{version}}", - "actions": { - "goToRelease": "前往发布页", - "update": "更新" - }, - "messages": { - "portableError": "便携版不支持应用内更新,请手动下载替换", - "breakChangeError": "此版本为重大更新,不支持应用内更新,请卸载后手动下载安装" - } - }, - "sysproxy": { - "title": "系统代理设置", - "fieldsets": { - "currentStatus": "当前系统代理" - }, - "fields": { - "enableStatus": "开启状态:", - "serverAddr": "服务地址:", - "pacUrl": "PAC 地址:", - "proxyHost": "代理主机", - "usePacMode": "使用 PAC 模式", - "proxyGuard": "系统代理守卫", - "guardDuration": "代理守卫间隔", - "alwaysUseDefaultBypass": "始终使用默认绕过", - "proxyBypass": "代理绕过设置:", - "bypass": "当前绕过:", - "pacScriptContent": "PAC 脚本内容" - }, - "tooltips": { - "proxyGuard": "开启以防止其他软件修改操作系统的代理设置" - }, - "messages": { - "durationTooShort": "代理守护间隔时间不得低于 1 秒", - "invalidBypass": "无效的代理绕过格式", - "invalidProxyHost": "代理主机格式无效" - }, - "actions": { - "editPac": "编辑 PAC" - } - }, - "tun": { - "title": "虚拟网卡模式", - "fields": { - "stack": "TUN 模式堆栈", - "device": "虚拟网卡名称", - "autoRoute": "自动设置全局路由", - "strictRoute": "严格路由", - "autoDetectInterface": "自动选择流量出口接口", - "dnsHijack": "DNS 劫持", - "mtu": "最大传输单元" - }, - "tooltips": { - "dnsHijack": "多个 DNS 服务器请使用 , 分隔" - }, - "messages": { - "applied": "设置已应用" - } - }, - "dns": { - "dialog": { - "title": "DNS 覆写", - "warning": "如果你不清楚这里的设置请不要修改,并保持 DNS 覆写开启" - }, - "sections": { - "general": "DNS 设置", - "fallbackFilter": "回退过滤设置", - "hosts": "Hosts 设置" - }, - "fields": { - "enable": "启用 DNS", - "listen": "DNS 监听地址", - "enhancedMode": "增强模式", - "fakeIpRange": "Fake IP 范围", - "fakeIpFilterMode": "Fake IP 过滤模式", - "ipv6": { - "label": "IPv6", - "description": "启用 IPv6 DNS 解析" - }, - "preferH3": { - "label": "优先使用 HTTP/3", - "description": "DNS DOH 使用 HTTP/3 协议" - }, - "respectRules": { - "label": "遵循路由规则", - "description": "DNS 连接遵循路由规则" - }, - "useHosts": { - "label": "使用 Hosts", - "description": "启用通过 hosts 文件解析域名" - }, - "useSystemHosts": { - "label": "使用系统 Hosts", - "description": "启用通过系统 hosts 文件解析域名" - }, - "directPolicy": { - "label": "直连域名服务器遵循策略", - "description": "是否遵循 nameserver-policy 设置" - }, - "defaultNameserver": { - "label": "默认域名服务器", - "description": "用于解析 DNS 服务器的默认 DNS 服务器" - }, - "nameserver": { - "label": "域名服务器", - "description": "DNS 服务器列表,用逗号分隔" - }, - "fallback": { - "label": "回退服务器", - "description": "回退 DNS 服务器列表,用逗号分隔" - }, - "proxy": { - "label": "代理节点DNS", - "description": "代理节点域名解析服务器,仅用于解析代理节点的域名,用逗号分隔" - }, - "directNameserver": { - "label": "直连域名服务器", - "description": "直连出口域名解析服务器,支持 system 关键字,用逗号分隔" - }, - "fakeIpFilter": { - "label": "Fake IP 过滤", - "description": "跳过 Fake IP 解析的域名,用逗号分隔" - }, - "nameserverPolicy": { - "label": "域名服务器策略", - "description": "特定域名的 DNS 服务器,多个服务器使用分号分隔,格式: domain=server1;server2" - }, - "geoipFiltering": { - "label": "GeoIP 过滤", - "description": "启用 GeoIP 回退过滤" - }, - "geoipCode": "GeoIP 国家代码", - "fallbackIpCidr": { - "label": "回退 IP CIDR", - "description": "不使用回退服务器的 IP CIDR,用逗号分隔" - }, - "fallbackDomain": { - "label": "回退域名", - "description": "使用回退服务器的域名,用逗号分隔" - }, - "hosts": { - "label": "Hosts", - "description": "自定义域名到 IP 或域名的映射,用逗号分隔" - } - }, - "messages": { - "saved": "DNS 设置已保存", - "configError": "DNS 配置错误:" - }, - "errors": { - "invalid": "配置无效" - } - }, - "webUI": { - "actions": { - "openUrl": "打开链接" - }, - "title": "网页界面", - "messages": { - "supportedPlaceholders": "支持 %host, %port, %secret", - "placeholderInstruction": "使用 %host, %port, %secret 表示 主机, 端口, 访问密钥" - } - }, - "hotkey": { - "toggles": { - "enableGlobal": "启用全局热键" - }, - "title": "热键设置", - "functions": { - "rule": "规则模式", - "global": "全局模式", - "openOrCloseDashboard": "打开/关闭面板", - "toggleSystemProxy": "打开/关闭系统代理", - "toggleTunMode": "打开/关闭 TUN 模式", - "entryLightweightMode": "进入轻量模式", - "direct": "直连模式" - } - }, - "password": { - "prompts": { - "enterRoot": "请输入您的 root 密码" - } - }, - "networkInterface": { - "title": "网络接口", - "fields": { - "ipAddress": "IP 地址", - "macAddress": "MAC 地址" - } - } - }, - "feedback": { - "notifications": { - "clash": { - "restartSuccess": "已重启 Clash 内核", - "versionUpdated": "内核版本已更新", - "changeSuccess": "内核切换成功", - "changeFailed": "无法切换内核", - "geoDataUpdated": "已更新 GeoData" - }, - "clashService": { - "installSuccess": "已成功安装服务", - "uninstallSuccess": "已成功卸载服务" - }, - "updater": { - "withClashProxySuccess": "使用 Clash 代理更新成功", - "withClashProxyFailed": "使用 Clash 代理更新也失败" - } - } - }, - "statuses": { - "clash": { - "stopping": "停止内核中...", - "restarting": "重启内核中..." - }, - "clashService": { - "installing": "安装服务中...", - "uninstalling": "卸载服务中..." - } - } - }, - "layout": { - "components": { - "navigation": { - "tabs": { - "home": "首 页", - "proxies": "代 理", - "profiles": "订 阅", - "connections": "连 接", - "rules": "规 则", - "logs": "日 志", - "unlock": "测 试", - "settings": "设 置" - }, - "menu": { - "reorderMode": "菜单排序模式", - "unlock": "解锁菜单排序", - "lock": "锁定菜单排序" - } - } - } - } -} diff --git a/src/locales/zh/connections.json b/src/locales/zh/connections.json new file mode 100644 index 00000000..3b4a4ddd --- /dev/null +++ b/src/locales/zh/connections.json @@ -0,0 +1,28 @@ +{ + "page": { + "title": "连接" + }, + "components": { + "fields": { + "host": "主机", + "dlSpeed": "下载速度", + "ulSpeed": "上传速度", + "chains": "链路", + "rule": "规则", + "process": "进程", + "time": "连接时间", + "source": "源地址", + "destination": "目标地址", + "destinationPort": "目标端口", + "type": "类型" + }, + "order": { + "default": "默认", + "uploadSpeed": "上传速度", + "downloadSpeed": "下载速度" + }, + "actions": { + "closeConnection": "关闭连接" + } + } +} diff --git a/src/locales/zh/home.json b/src/locales/zh/home.json new file mode 100644 index 00000000..7b11ef2f --- /dev/null +++ b/src/locales/zh/home.json @@ -0,0 +1,138 @@ +{ + "page": { + "tooltips": { + "lightweightMode": "轻量模式", + "manual": "使用手册", + "settings": "首页设置" + }, + "cards": { + "trafficStats": "流量统计", + "networkSettings": "网络设置", + "proxyMode": "代理模式" + }, + "settings": { + "cards": { + "profile": "订阅卡", + "currentProxy": "当前代理卡", + "network": "网络设置卡", + "proxyMode": "代理模式卡", + "traffic": "流量统计卡", + "tests": "网站测试卡", + "ip": "IP 信息卡", + "clashInfo": "Clash 信息卡", + "systemInfo": "系统信息卡" + }, + "title": "首页设置" + }, + "title": "首页" + }, + "components": { + "proxyTun": { + "status": { + "systemProxyEnabled": "系统代理已启用,您的应用将通过代理访问网络", + "systemProxyDisabled": "系统代理已关闭,建议大多数用户打开此选项", + "tunModeServiceRequired": "TUN模式需要服务模式,请先安装服务", + "tunModeEnabled": "TUN 模式已启用,应用将通过虚拟网卡访问网络", + "tunModeDisabled": "TUN 模式已关闭,适用于特殊应用" + }, + "tooltips": { + "systemProxy": "修改操作系统的代理设置,如果开启失败,可手动修改操作系统的代理设置", + "tunMode": "TUN模式可以接管所有应用流量,适用于特殊不遵循系统代理设置的应用" + } + }, + "clashInfo": { + "title": "Clash 信息", + "fields": { + "coreVersion": "内核版本", + "systemProxyAddress": "系统代理地址", + "mixedPort": "混合代理端口", + "uptime": "运行时间", + "rulesCount": "规则数量" + } + }, + "systemInfo": { + "title": "系统信息", + "fields": { + "osInfo": "操作系统信息", + "autoLaunch": "开机自启", + "runningMode": "运行模式", + "lastCheckUpdate": "最后检查更新", + "vergeVersion": "Verge 版本" + }, + "actions": { + "settings": "设置" + }, + "tooltips": { + "autoLaunchAdmin": "管理员模式可能不支持开机自启" + }, + "badges": { + "adminMode": "管理员模式", + "serviceMode": "服务模式", + "sidecarMode": "用户模式", + "adminServiceMode": "管理员 + 服务模式" + } + }, + "ipInfo": { + "title": "IP 信息", + "labels": { + "ip": "IP", + "asn": "自治域", + "isp": "服务商", + "org": "组织", + "location": "位置", + "timezone": "时区", + "autoRefresh": "自动刷新", + "unknown": "未知" + }, + "errors": { + "load": "获取 IP 信息失败" + } + }, + "currentProxy": { + "title": "当前节点", + "actions": { + "refreshDelay": "延迟测试" + }, + "labels": { + "globalMode": "全局模式", + "directMode": "直连模式", + "group": "代理组", + "proxy": "节点", + "noActiveNode": "暂无激活的代理节点" + } + }, + "tests": { + "title": "网站测试" + }, + "traffic": { + "metrics": { + "uploadSpeed": "上传速度", + "downloadSpeed": "下载速度", + "activeConnections": "活跃连接", + "memoryUsage": "内核占用" + }, + "legends": { + "upload": "上传", + "download": "下载" + }, + "patterns": { + "minutes": "{{time}} 分钟" + } + }, + "clashMode": { + "errors": { + "communication": "内核通信错误" + }, + "labels": { + "rule": "规则", + "global": "全局", + "direct": "直连" + }, + "descriptions": { + "rule": "基于预设规则智能判断流量走向,提供灵活的代理策略", + "global": "所有流量均通过代理服务器,适用于需要全局科学上网的场景", + "direct": "所有流量不经过代理节点,但经过Clash内核转发连接目标服务器,适用于需要通过内核进行分流的特定场景" + } + } + } +} diff --git a/src/locales/zh/index.ts b/src/locales/zh/index.ts new file mode 100644 index 00000000..2977171d --- /dev/null +++ b/src/locales/zh/index.ts @@ -0,0 +1,27 @@ +import shared from "./shared.json"; +import profiles from "./profiles.json"; +import proxies from "./proxies.json"; +import connections from "./connections.json"; +import tests from "./tests.json"; +import logs from "./logs.json"; +import rules from "./rules.json"; +import home from "./home.json"; +import unlock from "./unlock.json"; +import settings from "./settings.json"; +import layout from "./layout.json"; + +const resources = { + "shared": shared, + "profiles": profiles, + "proxies": proxies, + "connections": connections, + "tests": tests, + "logs": logs, + "rules": rules, + "home": home, + "unlock": unlock, + "settings": settings, + "layout": layout, +}; + +export default resources; diff --git a/src/locales/zh/layout.json b/src/locales/zh/layout.json new file mode 100644 index 00000000..4ecfb4c4 --- /dev/null +++ b/src/locales/zh/layout.json @@ -0,0 +1,21 @@ +{ + "components": { + "navigation": { + "tabs": { + "home": "首 页", + "proxies": "代 理", + "profiles": "订 阅", + "connections": "连 接", + "rules": "规 则", + "logs": "日 志", + "unlock": "测 试", + "settings": "设 置" + }, + "menu": { + "reorderMode": "菜单排序模式", + "unlock": "解锁菜单排序", + "lock": "锁定菜单排序" + } + } + } +} diff --git a/src/locales/zh/logs.json b/src/locales/zh/logs.json new file mode 100644 index 00000000..1e38a12c --- /dev/null +++ b/src/locales/zh/logs.json @@ -0,0 +1,5 @@ +{ + "page": { + "title": "日志" + } +} diff --git a/src/locales/zh/profiles.json b/src/locales/zh/profiles.json new file mode 100644 index 00000000..1173c58a --- /dev/null +++ b/src/locales/zh/profiles.json @@ -0,0 +1,182 @@ +{ + "page": { + "actions": { + "updateAll": "更新所有订阅", + "viewRuntimeConfig": "查看运行时订阅", + "reactivate": "重新激活订阅", + "import": "导入" + }, + "batch": { + "actions": { + "delete": "删除选中订阅", + "selectAll": "全选", + "deselectAll": "取消全选", + "done": "完成" + }, + "summary": { + "selected": "已选中", + "items": "项目" + }, + "title": "批量操作" + }, + "importForm": { + "placeholder": "订阅文件链接", + "actions": { + "paste": "粘贴" + } + }, + "feedback": { + "errors": { + "invalidUrl": "无效的订阅链接,请输入以 http:// 或 https:// 开头的地址", + "onlyYaml": "仅支持 YAML 文件" + }, + "notifications": { + "importRetry": "订阅导入失败,尝试使用 Clash 代理导入", + "importFail": "使用 Clash 代理导入订阅也失败", + "importNeedsRefresh": "订阅已导入,但可能需要手动刷新", + "importSuccess": "订阅已成功导入,如未显示请重启应用", + "profileSwitched": "订阅已切换", + "profileReactivated": "订阅已激活", + "switchInterrupted": "订阅切换被新选择中断", + "batchDeleted": "选中的订阅已成功删除" + }, + "notices": { + "forceRefreshCompleted": "数据已强制刷新", + "emergencyRefreshFailed": "紧急刷新失败: {{message}}" + } + }, + "title": "订阅" + }, + "components": { + "card": { + "labels": { + "clickToImport": "点击导入订阅" + } + }, + "fileInput": { + "chooseFile": "选择文件" + }, + "menu": { + "home": "首 页", + "select": "使用", + "editInfo": "编辑信息", + "editFile": "编辑文件", + "editRules": "编辑规则", + "editProxies": "编辑节点", + "editGroups": "编辑代理组", + "extendConfig": "扩展覆写配置", + "extendScript": "扩展脚本", + "openFile": "打开文件", + "update": "更新", + "updateViaProxy": "更新(代理)" + }, + "more": { + "global": { + "merge": "全局扩展覆写配置", + "script": "全局扩展脚本" + }, + "chips": { + "merge": "Merge", + "script": "Script" + } + }, + "profileItem": { + "tooltips": { + "showLast": "点击查看上次更新时间", + "showNext": "点击查看下一次更新" + }, + "status": { + "lastUpdateFailed": "上次更新失败", + "nextUp": "下次更新", + "noSchedule": "没有计划", + "unknown": "未知", + "autoUpdateDisabled": "自动更新已禁用" + } + } + }, + "modals": { + "profileForm": { + "title": { + "create": "新建配置", + "edit": "编辑配置" + }, + "fields": { + "type": "类型", + "description": "描述", + "subscriptionUrl": "订阅链接", + "httpTimeout": "HTTP 请求超时", + "updateInterval": "更新间隔", + "useSystemProxy": "使用系统代理更新", + "useClashProxy": "使用内核代理更新", + "acceptInvalidCerts": "允许无效证书(危险)", + "allowAutoUpdate": "允许自动更新" + }, + "feedback": { + "notifications": { + "creationRetry": "订阅创建失败,尝试使用 Clash 代理创建", + "creationSuccess": "使用 Clash 代理创建订阅成功" + } + } + }, + "proxiesEditor": { + "title": "编辑节点", + "placeholders": { + "multiUri": "多条 URI 请使用换行分隔(支持 Base64 编码)" + }, + "actions": { + "prepend": "添加前置代理节点", + "append": "添加后置代理节点" + } + }, + "groupsEditor": { + "title": "编辑代理组", + "errors": { + "nameRequired": "代理组名称不能为空", + "nameExists": "代理组名称已存在" + }, + "fields": { + "type": "代理组类型", + "name": "代理组组名", + "icon": "代理组图标", + "proxies": "引入代理", + "provider": "引入代理集合", + "healthCheckUrl": "健康检查测试地址", + "expectedStatus": "期望状态码", + "interval": "检查间隔", + "maxFailedTimes": "最大失败次数", + "interfaceName": "出站接口", + "routingMark": "路由标记", + "filter": "过滤节点", + "excludeFilter": "排除节点", + "excludeType": "排除节点类型", + "includeAll": "引入所有出站代理、代理集合", + "includeAllProxies": "引入所有出站代理", + "includeAllProviders": "引入所有代理集合" + }, + "toggles": { + "lazy": "懒惰状态", + "disableUdp": "禁用 UDP", + "hidden": "隐藏代理组" + }, + "actions": { + "prepend": "添加前置代理组", + "append": "添加后置代理组" + } + }, + "editor": { + "actions": { + "format": "格式化文档" + }, + "messages": { + "readOnly": "无法在只读模式下编辑" + } + }, + "confirmDelete": { + "title": "确认删除", + "message": "此操作不可逆" + }, + "logViewer": { + "title": "脚本控制台输出" + } + } +} diff --git a/src/locales/zh/proxies.json b/src/locales/zh/proxies.json new file mode 100644 index 00000000..dbcfdc60 --- /dev/null +++ b/src/locales/zh/proxies.json @@ -0,0 +1,90 @@ +{ + "page": { + "modes": { + "rule": "规则", + "global": "全局", + "direct": "直连" + }, + "actions": { + "toggleChain": "🔗 链式代理", + "connect": "连接", + "disconnect": "断开", + "connecting": "连接中...", + "clearChainConfig": "删除链式配置" + }, + "provider": { + "title": "代理集合", + "actions": { + "updateAll": "更新全部", + "update": "更新" + } + }, + "rules": { + "title": "代理规则", + "select": "选择规则" + }, + "labels": { + "proxyCount": "节点数量", + "delayCheckReset": "进行延迟测试,以取消固定" + }, + "tooltips": { + "locate": "当前节点", + "delayCheck": "延迟测试", + "sortDefault": "默认排序", + "sortDelay": "按延迟排序", + "sortName": "按名称排序", + "delayCheckUrl": "延迟测试链接", + "showBasic": "隐藏节点细节", + "showDetail": "展示节点细节", + "filter": "过滤节点" + }, + "placeholders": { + "delayCheckUrl": "延迟测试链接" + }, + "chain": { + "header": "代理链配置", + "empty": "暂无代理链配置", + "instruction": "顺序点击节点添加到代理链中", + "minimumNodes": "链式代理至少需要 2 个节点", + "minimumNodesHint": "链式代理至少需要 2 个节点,请再添加一个节点。", + "connectFailed": "连接链式代理失败", + "disconnectFailed": "断开链式代理失败", + "duplicateNode": "该节点已在链式代理表中" + }, + "messages": { + "directMode": "直连模式" + }, + "title": { + "default": "代理组", + "chainMode": "链式代理模式" + } + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} 更新成功", + "updateFailed": "{{name}} 更新失败: {{message}}", + "genericError": "更新失败: {{message}}", + "none": "没有可更新的 provider", + "allUpdated": "所有 provider 均已更新" + } + } + }, + "components": { + "enums": { + "strategies": { + "select": "手动选择代理", + "url-test": "根据 URL 测试延迟选择代理", + "fallback": "不可用时切换到另一个代理", + "load-balance": "根据负载均衡分配代理", + "relay": "根据定义的代理链传递" + }, + "policies": { + "DIRECT": "直连 (DIRECT)", + "REJECT": "拦截请求 (REJECT)", + "REJECT-DROP": "抛弃请求 (REJECT-DROP)", + "PASS": "跳过此规则 (PASS)" + } + } + } +} diff --git a/src/locales/zh/rules.json b/src/locales/zh/rules.json new file mode 100644 index 00000000..15596df3 --- /dev/null +++ b/src/locales/zh/rules.json @@ -0,0 +1,82 @@ +{ + "page": { + "provider": { + "trigger": "规则集合", + "dialogTitle": "规则集合", + "actions": { + "updateAll": "更新全部", + "update": "更新" + } + }, + "title": "规则" + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} 更新成功", + "updateFailed": "{{name}} 更新失败: {{message}}", + "genericError": "更新失败: {{message}}", + "none": "没有可更新的 provider", + "allUpdated": "所有 provider 均已更新" + } + } + }, + "modals": { + "editor": { + "form": { + "labels": { + "type": "规则类型", + "content": "规则内容", + "proxyPolicy": "代理策略" + }, + "toggles": { + "noResolve": "跳过 DNS 解析" + }, + "actions": { + "prependRule": "添加前置规则", + "appendRule": "添加后置规则" + }, + "validation": { + "conditionRequired": "规则条件缺失", + "invalidRule": "无效规则" + } + }, + "ruleTypes": { + "DOMAIN": "匹配完整域名 (DOMAIN)", + "DOMAIN-SUFFIX": "匹配域名后缀 (DOMAIN-SUFFIX)", + "DOMAIN-KEYWORD": "匹配域名关键字 (DOMAIN-KEYWORD)", + "DOMAIN-REGEX": "匹配域名正则表达式 (DOMAIN-REGEX)", + "GEOSITE": "匹配 Geosite 内的域名 (GEOSITE)", + "GEOIP": "匹配 IP 所属国家代码 (GEOIP)", + "SRC-GEOIP": "匹配来源 IP 所属国家代码 (SRC-GEOIP)", + "IP-ASN": "匹配 IP 所属 ASN (IP-ASN)", + "SRC-IP-ASN": "匹配来源 IP 所属 ASN (SRC-IP-ASN)", + "IP-CIDR": "匹配 IP 地址范围 (IP-CIDR)", + "IP-CIDR6": "匹配 IP 地址范围 (IP-CIDR6)", + "SRC-IP-CIDR": "匹配来源 IP 地址范围 (SRC-IP-CIDR)", + "IP-SUFFIX": "匹配 IP 后缀范围 (IP-SUFFIX)", + "SRC-IP-SUFFIX": "匹配来源 IP 后缀范围 (SRC-IP-SUFFIX)", + "SRC-PORT": "匹配请求来源端口范围 (SRC-PORT)", + "DST-PORT": "匹配请求目标端口范围 (DST-PORT)", + "IN-PORT": "匹配入站端口 (IN-PORT)", + "DSCP": "DSCP 标记(仅限 TPROXY UDP 入站)(DSCP)", + "PROCESS-NAME": "匹配进程名称 (PROCESS-NAME)", + "PROCESS-PATH": "匹配完整进程路径 (PROCESS-PATH)", + "PROCESS-NAME-REGEX": "正则匹配完整进程名称 (PROCESS-NAME-REGEX)", + "PROCESS-PATH-REGEX": "正则匹配完整进程路径 (PROCESS-PATH-REGEX)", + "NETWORK": "匹配传输协议 (TCP/UDP) (NETWORK)", + "UID": "匹配 Linux USER ID (UID)", + "IN-TYPE": "匹配入站类型 (IN-TYPE)", + "IN-USER": "匹配入站用户名 (IN-USER)", + "IN-NAME": "匹配入站名称 (IN-NAME)", + "SUB-RULE": "子规则 (SUB-RULE)", + "RULE-SET": "匹配规则集 (RULE-SET)", + "AND": "逻辑与 (AND)", + "OR": "逻辑或 (OR)", + "NOT": "逻辑非 (NOT)", + "MATCH": "匹配所有请求 (MATCH)" + }, + "title": "编辑规则" + } + } +} diff --git a/src/locales/zh/settings.json b/src/locales/zh/settings.json new file mode 100644 index 00000000..62d1590f --- /dev/null +++ b/src/locales/zh/settings.json @@ -0,0 +1,571 @@ +{ + "page": { + "actions": { + "manual": "使用手册", + "telegram": "Telegram 频道", + "github": "GitHub 项目地址" + }, + "title": "设置" + }, + "sections": { + "system": { + "title": "系统设置", + "toggles": { + "tunMode": "虚拟网卡模式", + "systemProxy": "系统代理" + }, + "tooltips": { + "autoLaunchAdmin": "管理员模式可能不支持开机自启", + "silentStart": "程序启动时以后台模式运行,不显示程序面板" + }, + "fields": { + "autoLaunch": "开机自启", + "silentStart": "静默启动" + }, + "notifications": { + "tunMode": { + "autoDisabled": "由于服务不可用,TUN 模式已自动关闭", + "autoDisableFailed": "自动关闭 TUN 模式失败" + } + } + }, + "proxyControl": { + "tooltips": { + "systemProxy": "修改操作系统的代理设置,如果开启失败,可手动修改操作系统的代理设置", + "tunMode": "TUN(虚拟网卡)模式接管系统所有流量,启用时无须打开系统代理", + "tunUnavailable": "TUN 模式需要安装服务模式或管理员模式" + }, + "actions": { + "installService": "安装服务", + "uninstallService": "卸载服务" + }, + "fields": { + "systemProxy": "系统代理", + "tunMode": "虚拟网卡模式" + } + }, + "externalController": { + "title": "外部控制器监听地址", + "fields": { + "enable": "启用外部控制器", + "address": "外部控制器监听地址", + "secret": "API 访问密钥" + }, + "placeholders": { + "address": "必填", + "secret": "建议设置" + }, + "tooltips": { + "copy": "复制到剪贴板" + }, + "messages": { + "addressRequired": "控制器地址不能为空", + "secretRequired": "访问密钥不能为空", + "copyFailed": "复制失败", + "controllerCopied": "控制器地址已复制到剪贴板", + "secretCopied": "访问密钥已复制到剪贴板" + } + }, + "externalCors": { + "title": "外部控制跨域设置", + "fields": { + "allowPrivateNetwork": "允许专用网络访问", + "allowedOrigins": "允许的来源" + }, + "placeholders": { + "origin": "请输入有效的网址" + }, + "actions": { + "add": "添加" + }, + "messages": { + "alwaysIncluded": "始终包含来源:{{urls}}" + }, + "tooltips": { + "open": "外部控制跨域设置" + } + }, + "appearance": { + "light": "浅色", + "dark": "深色", + "system": "系统" + }, + "clash": { + "title": "Clash 设置", + "form": { + "fields": { + "allowLan": "局域网连接", + "dnsOverwrite": "DNS 覆写", + "ipv6": "IPv6", + "unifiedDelay": "统一延迟", + "logLevel": "日志等级", + "portConfig": "端口设置", + "external": "外部控制", + "webUI": "网页界面", + "clashCore": "Clash 内核", + "openUwpTool": "UWP 工具", + "updateGeoData": "更新 GeoData" + }, + "tooltips": { + "networkInterface": "网络接口", + "unifiedDelay": "开启统一延迟时,会进行两次延迟测试,以消除连接握手等带来的不同类型节点的延迟差异", + "logLevel": "仅对日志目录 Service 文件夹下的内核日志文件生效", + "openUwpTool": "Windows 8 开始限制 UWP 应用(如微软商店)直接访问本地主机的网络服务,使用此工具可绕过该限制" + }, + "options": { + "logLevel": { + "debug": "Debug", + "info": "Info", + "warning": "Warn", + "error": "Error", + "silent": "Silent" + } + } + } + } + }, + "components": { + "verge": { + "basic": { + "title": "Verge 基础设置", + "actions": { + "browse": "浏览" + }, + "trayOptions": { + "showMainWindow": "显示主窗口", + "showTrayMenu": "显示托盘菜单", + "disable": "禁用" + }, + "fields": { + "language": "语言设置", + "themeMode": "主题模式", + "trayClickEvent": "托盘点击事件", + "copyEnvType": "复制环境变量类型", + "startPage": "启动页面", + "startupScript": "启动脚本", + "themeSetting": "主题设置", + "layoutSetting": "界面设置", + "misc": "杂项设置", + "hotkeySetting": "热键设置" + } + }, + "advanced": { + "title": "Verge 高级设置", + "tooltips": { + "backupInfo": "支持本地或 WebDAV 方式备份配置文件", + "openConfDir": "如果软件运行异常,!备份!并删除此文件夹下的所有文件,重启软件", + "liteMode": "关闭GUI界面,仅保留内核运行" + }, + "actions": { + "copyVersion": "复制Verge版本号" + }, + "notifications": { + "latestVersion": "当前已是最新版本", + "versionCopied": "Verge 版本已复制到剪贴板" + }, + "fields": { + "backupSetting": "备份设置", + "runtimeConfig": "当前配置", + "openConfDir": "配置目录", + "openCoreDir": "内核目录", + "openLogsDir": "日志目录", + "checkUpdates": "检查更新", + "openDevTools": "开发者工具", + "liteModeSettings": "轻量模式设置", + "exit": "退出", + "exportDiagnostics": "导出诊断信息", + "vergeVersion": "Verge 版本" + } + }, + "theme": { + "title": "主题设置", + "fields": { + "primaryColor": "主要颜色", + "secondaryColor": "次要颜色", + "primaryText": "文本主要颜色", + "secondaryText": "文本次要颜色", + "infoColor": "信息颜色", + "warningColor": "警告颜色", + "errorColor": "错误颜色", + "successColor": "成功颜色", + "fontFamily": "字体系列", + "cssInjection": "CSS 注入" + }, + "actions": { + "editCss": "编辑 CSS" + }, + "dialogs": { + "editCssTitle": "编辑 CSS" + } + }, + "layout": { + "title": "界面设置", + "fields": { + "preferSystemTitlebar": "优先使用系统标题栏", + "trafficGraph": "流量图显", + "memoryUsage": "内核占用", + "proxyGroupIcon": "代理组图标", + "hoverNavigator": "悬浮跳转导航", + "hoverNavigatorDelay": "悬浮跳转导航延迟", + "navIcon": "导航栏图标", + "trayIcon": "托盘图标", + "showProxyGroupsInline": "将代理组显示在托盘一级菜单", + "commonTrayIcon": "常规托盘图标", + "systemProxyTrayIcon": "系统代理托盘图标", + "tunTrayIcon": "TUN 模式托盘图标", + "enableTrayIcon": "启用托盘图标", + "enableTraySpeed": "启用托盘速率" + }, + "tooltips": { + "hoverNavigator": "鼠标悬停在字母上时自动滚动到对应代理组", + "hoverNavigatorDelay": "鼠标悬停后触发自动跳转前等待的毫秒数" + }, + "options": { + "icon": { + "monochrome": "单色图标", + "colorful": "彩色图标", + "disable": "禁用" + } + } + } + } + }, + "modals": { + "clashPort": { + "title": "端口设置", + "fields": { + "mixed": "混合代理端口", + "socks": "SOCKS 代理端口", + "http": "HTTP(S) 代理端口", + "redir": "Redir 透明代理端口", + "tproxy": "Tproxy 透明代理端口" + }, + "actions": { + "random": "随机端口" + }, + "messages": { + "saved": "端口设置已保存", + "saveFailed": "端口设置保存失败" + } + }, + "clashCore": { + "variants": { + "release": "正式版", + "alpha": "预览版" + } + }, + "liteMode": { + "title": "轻量模式设置", + "actions": { + "enterNow": "立即进入轻量模式" + }, + "toggles": { + "autoEnter": "自动进入轻量模式" + }, + "tooltips": { + "autoEnter": "启用后,将在窗口关闭一段时间后自动激活轻量模式" + }, + "fields": { + "delay": "自动进入轻量模式延迟" + }, + "messages": { + "autoEnterHint": "关闭窗口后,轻量模式将在 {{n}} 分钟后自动激活" + } + }, + "backup": { + "title": "备份设置", + "tabs": { + "local": "本地备份", + "webdav": "WebDAV 备份" + }, + "actions": { + "selectTarget": "选择备份目标", + "backup": "备份", + "export": "导出", + "exportBackup": "导出备份", + "deleteBackup": "删除备份", + "restore": "恢复", + "restoreBackup": "恢复备份" + }, + "fields": { + "webdavUrl": "WebDAV 服务器地址 http(s)://", + "username": "用户名", + "info": "在应用数据目录中创建本地备份,您可以通过下方列表进行恢复或删除。" + }, + "messages": { + "webdavUrlRequired": "WebDAV 服务器地址不能为空", + "invalidWebdavUrl": "无效的 WebDAV 服务器地址格式", + "usernameRequired": "用户名不能为空", + "passwordRequired": "密码不能为空", + "webdavConfigSaved": "WebDAV 配置保存成功", + "webdavConfigSaveFailed": "保存 WebDAV 配置失败: {{error}}", + "backupCreated": "备份创建成功", + "backupFailed": "备份失败: {{error}}", + "localBackupCreated": "本地备份创建成功", + "localBackupFailed": "本地备份失败", + "restoreSuccess": "恢复成功,应用将在 1 秒后重启", + "localBackupExported": "本地备份导出成功", + "localBackupExportFailed": "本地备份导出失败", + "confirmDelete": "确认删除此备份文件吗?", + "confirmRestore": "确认恢复此份文件吗?" + }, + "table": { + "filename": "文件名称", + "backupTime": "备份时间", + "actions": "操作", + "noBackups": "暂无备份", + "rowsPerPage": "每页行数" + } + }, + "misc": { + "title": "杂项设置", + "fields": { + "appLogLevel": "应用日志等级", + "appLogMaxSize": "应用日志最大大小", + "appLogMaxCount": "应用日志最大数量", + "autoCloseConnections": "自动关闭连接", + "autoCheckUpdate": "自动检查更新", + "enableBuiltinEnhanced": "内置增强功能", + "proxyLayoutColumns": "代理页布局列数", + "autoLogClean": "自动清理日志", + "autoDelayDetection": "自动延迟检测", + "defaultLatencyTest": "默认测试链接", + "defaultLatencyTimeout": "测试超时时间" + }, + "tooltips": { + "autoCloseConnections": "当代理组选中节点或代理模式变动时,关闭已建立的连接", + "enableBuiltinEnhanced": "配置文件的兼容性处理", + "autoDelayDetection": "后台定时检测当前节点延迟", + "defaultLatencyTest": "仅用于 HTTP 客户端请求测试,不会对配置文件产生影响" + }, + "options": { + "proxyLayoutColumns": { + "auto": "自动列数" + }, + "autoLogClean": { + "never": "不清理", + "retainDays": "保留 {{n}} 天" + } + } + }, + "update": { + "title": "新版本 v{{version}}", + "actions": { + "goToRelease": "前往发布页", + "update": "更新" + }, + "messages": { + "portableError": "便携版不支持应用内更新,请手动下载替换", + "breakChangeError": "此版本为重大更新,不支持应用内更新,请卸载后手动下载安装" + } + }, + "sysproxy": { + "title": "系统代理设置", + "fieldsets": { + "currentStatus": "当前系统代理" + }, + "fields": { + "enableStatus": "开启状态:", + "serverAddr": "服务地址:", + "pacUrl": "PAC 地址:", + "proxyHost": "代理主机", + "usePacMode": "使用 PAC 模式", + "proxyGuard": "系统代理守卫", + "guardDuration": "代理守卫间隔", + "alwaysUseDefaultBypass": "始终使用默认绕过", + "proxyBypass": "代理绕过设置:", + "bypass": "当前绕过:", + "pacScriptContent": "PAC 脚本内容" + }, + "tooltips": { + "proxyGuard": "开启以防止其他软件修改操作系统的代理设置" + }, + "messages": { + "durationTooShort": "代理守护间隔时间不得低于 1 秒", + "invalidBypass": "无效的代理绕过格式", + "invalidProxyHost": "代理主机格式无效" + }, + "actions": { + "editPac": "编辑 PAC" + } + }, + "tun": { + "title": "虚拟网卡模式", + "fields": { + "stack": "TUN 模式堆栈", + "device": "虚拟网卡名称", + "autoRoute": "自动设置全局路由", + "strictRoute": "严格路由", + "autoDetectInterface": "自动选择流量出口接口", + "dnsHijack": "DNS 劫持", + "mtu": "最大传输单元" + }, + "tooltips": { + "dnsHijack": "多个 DNS 服务器请使用 , 分隔" + }, + "messages": { + "applied": "设置已应用" + } + }, + "dns": { + "dialog": { + "title": "DNS 覆写", + "warning": "如果你不清楚这里的设置请不要修改,并保持 DNS 覆写开启" + }, + "sections": { + "general": "DNS 设置", + "fallbackFilter": "回退过滤设置", + "hosts": "Hosts 设置" + }, + "fields": { + "enable": "启用 DNS", + "listen": "DNS 监听地址", + "enhancedMode": "增强模式", + "fakeIpRange": "Fake IP 范围", + "fakeIpFilterMode": "Fake IP 过滤模式", + "ipv6": { + "label": "IPv6", + "description": "启用 IPv6 DNS 解析" + }, + "preferH3": { + "label": "优先使用 HTTP/3", + "description": "DNS DOH 使用 HTTP/3 协议" + }, + "respectRules": { + "label": "遵循路由规则", + "description": "DNS 连接遵循路由规则" + }, + "useHosts": { + "label": "使用 Hosts", + "description": "启用通过 hosts 文件解析域名" + }, + "useSystemHosts": { + "label": "使用系统 Hosts", + "description": "启用通过系统 hosts 文件解析域名" + }, + "directPolicy": { + "label": "直连域名服务器遵循策略", + "description": "是否遵循 nameserver-policy 设置" + }, + "defaultNameserver": { + "label": "默认域名服务器", + "description": "用于解析 DNS 服务器的默认 DNS 服务器" + }, + "nameserver": { + "label": "域名服务器", + "description": "DNS 服务器列表,用逗号分隔" + }, + "fallback": { + "label": "回退服务器", + "description": "回退 DNS 服务器列表,用逗号分隔" + }, + "proxy": { + "label": "代理节点DNS", + "description": "代理节点域名解析服务器,仅用于解析代理节点的域名,用逗号分隔" + }, + "directNameserver": { + "label": "直连域名服务器", + "description": "直连出口域名解析服务器,支持 system 关键字,用逗号分隔" + }, + "fakeIpFilter": { + "label": "Fake IP 过滤", + "description": "跳过 Fake IP 解析的域名,用逗号分隔" + }, + "nameserverPolicy": { + "label": "域名服务器策略", + "description": "特定域名的 DNS 服务器,多个服务器使用分号分隔,格式: domain=server1;server2" + }, + "geoipFiltering": { + "label": "GeoIP 过滤", + "description": "启用 GeoIP 回退过滤" + }, + "geoipCode": "GeoIP 国家代码", + "fallbackIpCidr": { + "label": "回退 IP CIDR", + "description": "不使用回退服务器的 IP CIDR,用逗号分隔" + }, + "fallbackDomain": { + "label": "回退域名", + "description": "使用回退服务器的域名,用逗号分隔" + }, + "hosts": { + "label": "Hosts", + "description": "自定义域名到 IP 或域名的映射,用逗号分隔" + } + }, + "messages": { + "saved": "DNS 设置已保存", + "configError": "DNS 配置错误:" + }, + "errors": { + "invalid": "配置无效" + } + }, + "webUI": { + "actions": { + "openUrl": "打开链接" + }, + "title": "网页界面", + "messages": { + "supportedPlaceholders": "支持 %host, %port, %secret", + "placeholderInstruction": "使用 %host, %port, %secret 表示 主机, 端口, 访问密钥" + } + }, + "hotkey": { + "toggles": { + "enableGlobal": "启用全局热键" + }, + "title": "热键设置", + "functions": { + "rule": "规则模式", + "global": "全局模式", + "openOrCloseDashboard": "打开/关闭面板", + "toggleSystemProxy": "打开/关闭系统代理", + "toggleTunMode": "打开/关闭 TUN 模式", + "entryLightweightMode": "进入轻量模式", + "direct": "直连模式" + } + }, + "password": { + "prompts": { + "enterRoot": "请输入您的 root 密码" + } + }, + "networkInterface": { + "title": "网络接口", + "fields": { + "ipAddress": "IP 地址", + "macAddress": "MAC 地址" + } + } + }, + "feedback": { + "notifications": { + "clash": { + "restartSuccess": "已重启 Clash 内核", + "versionUpdated": "内核版本已更新", + "changeSuccess": "内核切换成功", + "changeFailed": "无法切换内核", + "geoDataUpdated": "已更新 GeoData" + }, + "clashService": { + "installSuccess": "已成功安装服务", + "uninstallSuccess": "已成功卸载服务" + }, + "updater": { + "withClashProxySuccess": "使用 Clash 代理更新成功", + "withClashProxyFailed": "使用 Clash 代理更新也失败" + } + } + }, + "statuses": { + "clash": { + "stopping": "停止内核中...", + "restarting": "重启内核中..." + }, + "clashService": { + "installing": "安装服务中...", + "uninstalling": "卸载服务中..." + } + } +} diff --git a/src/locales/zh/shared.json b/src/locales/zh/shared.json new file mode 100644 index 00000000..19e37415 --- /dev/null +++ b/src/locales/zh/shared.json @@ -0,0 +1,128 @@ +{ + "actions": { + "cancel": "取消", + "close": "关闭", + "confirm": "确认", + "save": "保存", + "delete": "删除", + "edit": "编辑", + "new": "新建", + "enable": "启用", + "upgrade": "升级内核", + "restart": "重启内核", + "resetToDefault": "重置为默认值", + "refresh": "刷新", + "retry": "重试", + "refreshPage": "刷新页面", + "showDetails": "显示详情", + "hideDetails": "隐藏详情", + "listView": "列表视图", + "tableView": "表格视图", + "pause": "暂停", + "resume": "继续", + "closeAll": "关闭全部", + "clear": "清除" + }, + "labels": { + "updateAt": "更新于", + "timeout": "超时", + "icon": "图标", + "name": "名称", + "readOnly": "只读", + "expireTime": "到期时间", + "updateTime": "更新时间", + "usedTotal": "已使用 / 总量", + "from": "来自", + "password": "密码", + "retryAttempts": "重试次数", + "downloaded": "下载量", + "uploaded": "上传量" + }, + "statuses": { + "enabled": "已启用", + "disabled": "未启用", + "saving": "保存中...", + "empty": "空空如也" + }, + "units": { + "milliseconds": "毫秒", + "seconds": "秒", + "minutes": "分钟", + "kilobytes": "KB", + "files": "文件" + }, + "placeholders": { + "filter": "过滤条件", + "matchCase": "区分大小写", + "matchWholeWord": "全字匹配", + "useRegex": "使用正则表达式" + }, + "validation": { + "invalidRegex": "无效的正则表达式" + }, + "window": { + "maximize": "最大化", + "minimize": "最小化" + }, + "editorModes": { + "visualization": "可视化", + "advanced": "高级" + }, + "feedback": { + "errors": { + "trafficStats": "流量统计错误", + "trafficStatsDescription": "流量统计组件发生错误,为防止崩溃已暂时停用。" + }, + "notices": { + "raw": "{{message}}", + "prefixedRaw": "{{prefix}} {{message}}" + }, + "notifications": { + "importSuccess": "导入订阅成功", + "importSubscriptionSuccess": "导入订阅成功", + "importWithClashProxy": "使用 Clash 代理导入订阅成功", + "saved": "保存成功", + "common": { + "copySuccess": "复制成功", + "saveSuccess": "配置保存成功", + "saveFailed": "配置保存失败" + } + }, + "validation": { + "config": { + "failed": "订阅配置校验失败,请检查订阅配置文件,变更已撤销,错误详情:", + "bootFailed": "启动订阅配置校验失败,已使用默认配置启动;请检查订阅配置文件,错误详情:", + "coreChangeFailed": "切换内核时配置校验失败,已使用默认配置启动;请检查订阅配置文件,错误详情:", + "processTerminated": "验证进程被终止" + }, + "script": { + "syntaxError": "脚本语法错误,变更已撤销", + "missingMain": "脚本错误,变更已撤销", + "fileNotFound": "文件丢失,变更已撤销", + "fileError": "脚本文件错误,变更已撤销" + }, + "yaml": { + "syntaxError": "YAML 语法错误,变更已撤销", + "readError": "YAML 读取错误,变更已撤销", + "mappingError": "YAML 映射错误,变更已撤销", + "keyError": "YAML 键错误,变更已撤销", + "generalError": "YAML 错误,变更已撤销" + }, + "merge": { + "syntaxError": "覆写文件语法错误,变更已撤销", + "mappingError": "覆写文件映射错误,变更已撤销", + "keyError": "覆写文件键错误,变更已撤销", + "generalError": "覆写文件错误,变更已撤销" + } + } + }, + "filters": { + "logLevels": { + "all": "ALL", + "debug": "DEBUG", + "info": "INFO", + "warn": "WARN", + "error": "ERROR" + } + } +} diff --git a/src/locales/zh/tests.json b/src/locales/zh/tests.json new file mode 100644 index 00000000..e7459867 --- /dev/null +++ b/src/locales/zh/tests.json @@ -0,0 +1,40 @@ +{ + "page": { + "actions": { + "testAll": "测试全部" + }, + "title": "测试" + }, + "components": { + "item": { + "actions": { + "test": "测试" + } + } + }, + "modals": { + "test": { + "title": { + "create": "新建测试", + "edit": "编辑测试" + }, + "fields": { + "url": "测试地址" + } + } + }, + "statuses": { + "test": { + "pending": "待检测", + "yes": "支持", + "no": "不支持", + "failed": "测试失败", + "completed": "检测完成", + "disallowedIsp": "不允许的 ISP", + "originalsOnly": "仅限原创", + "noDisney": "不支持(IP被Disney+禁止)", + "unsupportedRegion": "不支持的国家/地区", + "failedNetwork": "测试失败(网络连接问题)" + } + } +} diff --git a/src/locales/zh/unlock.json b/src/locales/zh/unlock.json new file mode 100644 index 00000000..f5e2cc41 --- /dev/null +++ b/src/locales/zh/unlock.json @@ -0,0 +1,12 @@ +{ + "page": { + "actions": { + "testing": "测试中..." + }, + "empty": "暂无解锁测试项目", + "messages": { + "detectionTimeout": "检测超时或失败" + }, + "title": "解锁测试" + } +} diff --git a/src/locales/zhtw.json b/src/locales/zhtw.json deleted file mode 100644 index 2a314ecb..00000000 --- a/src/locales/zhtw.json +++ /dev/null @@ -1,1299 +0,0 @@ -{ - "shared": { - "actions": { - "cancel": "取消", - "close": "關閉", - "confirm": "確認", - "save": "儲存", - "delete": "刪除", - "edit": "編輯", - "new": "新增", - "enable": "啟用", - "upgrade": "升級內核", - "restart": "重啟內核", - "resetToDefault": "重設為預設值", - "refresh": "重整", - "retry": "重試", - "refreshPage": "重新整理頁面", - "showDetails": "顯示詳情", - "hideDetails": "隱藏詳情", - "listView": "列表檢視", - "tableView": "表格檢視", - "pause": "暫停", - "resume": "繼續", - "closeAll": "關閉全部", - "clear": "清除" - }, - "labels": { - "updateAt": "更新於", - "timeout": "逾時", - "icon": "圖示", - "name": "名稱", - "readOnly": "唯讀", - "expireTime": "到期時間", - "updateTime": "更新時間", - "usedTotal": "已使用 / 總量", - "from": "來自", - "password": "密碼", - "retryAttempts": "重試次數", - "downloaded": "下載量", - "uploaded": "上傳量" - }, - "statuses": { - "enabled": "已啟用", - "disabled": "已停用", - "saving": "儲存中...", - "empty": "空空如也" - }, - "units": { - "milliseconds": "毫秒", - "seconds": "秒", - "minutes": "分鐘", - "kilobytes": "KB", - "files": "檔案" - }, - "placeholders": { - "filter": "篩選條件", - "matchCase": "區分大小寫", - "matchWholeWord": "完整字詞配對", - "useRegex": "使用正規表示式" - }, - "validation": { - "invalidRegex": "無效的正規表示式" - }, - "window": { - "maximize": "最大化", - "minimize": "最小化" - }, - "editorModes": { - "visualization": "視覺化", - "advanced": "進階" - }, - "feedback": { - "errors": { - "trafficStats": "流量統計錯誤", - "trafficStatsDescription": "流量統計元件發生錯誤,已停用以避免當機。" - }, - "notices": { - "raw": "{{message}}", - "prefixedRaw": "{{prefix}} {{message}}" - }, - "notifications": { - "importSuccess": "匯入設定檔成功", - "importSubscriptionSuccess": "匯入訂閱成功", - "importWithClashProxy": "使用 Clash 代理匯入訂閱成功", - "saved": "儲存成功", - "common": { - "copySuccess": "複製成功", - "saveSuccess": "設定儲存完成", - "saveFailed": "設定儲存失敗" - } - }, - "validation": { - "config": { - "failed": "訂閱配置校驗失敗,請檢查訂閱配置文件,變更已撤銷,錯誤詳情:", - "bootFailed": "啟動訂閱配置校驗失敗,已使用預設配置啟動;請檢查訂閱配置文件,錯誤詳情:", - "coreChangeFailed": "切換內核時配置校驗失敗,已使用預設配置啟動;請檢查訂閱配置文件,錯誤詳情:", - "processTerminated": "驗證程序被終止" - }, - "script": { - "syntaxError": "指令碼語法錯誤,變更已撤銷", - "missingMain": "指令碼錯誤,變更已撤銷", - "fileNotFound": "檔案遺失,變更已撤銷", - "fileError": "指令碼檔案錯誤,變更已撤銷" - }, - "yaml": { - "syntaxError": "YAML 語法錯誤,變更已撤銷", - "readError": "YAML 讀取錯誤,變更已撤銷", - "mappingError": "YAML 映射錯誤,變更已撤銷", - "keyError": "YAML 鍵錯誤,變更已撤銷", - "generalError": "YAML 錯誤,變更已撤銷" - }, - "merge": { - "syntaxError": "覆寫檔案語法錯誤,變更已撤銷", - "mappingError": "覆寫檔案映射錯誤,變更已撤銷", - "keyError": "覆寫檔案鍵錯誤,變更已撤銷", - "generalError": "覆寫檔案錯誤,變更已撤銷" - } - } - }, - "filters": { - "logLevels": { - "all": "ALL", - "debug": "DEBUG", - "info": "INFO", - "warn": "WARN", - "error": "ERROR" - } - } - }, - "profiles": { - "page": { - "actions": { - "updateAll": "更新所有訂閱", - "viewRuntimeConfig": "查看執行時訂閱", - "reactivate": "重新啟用訂閱", - "import": "匯入" - }, - "batch": { - "actions": { - "delete": "刪除選取訂閱", - "selectAll": "全選", - "deselectAll": "取消選取", - "done": "完成" - }, - "summary": { - "selected": "已選取", - "items": "項目" - }, - "title": "批次操作" - }, - "importForm": { - "placeholder": "訂閱檔網址", - "actions": { - "paste": "貼上" - } - }, - "feedback": { - "errors": { - "invalidUrl": "無效的訂閱網址,請輸入以 http:// 或 https:// 開頭的位址", - "onlyYaml": "僅支援 YAML 檔案" - }, - "notifications": { - "importRetry": "訂閱匯入失敗,嘗試使用 Clash 代理匯入", - "importFail": "使用 Clash 代理匯入訂閱也失敗", - "importNeedsRefresh": "Profile imported but may need manual refresh", - "importSuccess": "Profile imported successfully, please restart if not visible", - "profileSwitched": "訂閱已切換", - "profileReactivated": "訂閱已啟用", - "switchInterrupted": "配置切換被新的選擇中斷", - "batchDeleted": "選取的訂閱已成功刪除" - }, - "notices": { - "forceRefreshCompleted": "Force refresh completed", - "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" - } - }, - "title": "訂閱" - }, - "components": { - "card": { - "labels": { - "clickToImport": "點擊匯入訂閱" - } - }, - "fileInput": { - "chooseFile": "選擇檔案" - }, - "menu": { - "home": "首 頁", - "select": "使用", - "editInfo": "編輯資訊", - "editFile": "編輯檔案", - "editRules": "編輯規則", - "editProxies": "編輯節點", - "editGroups": "編輯代理組", - "extendConfig": "擴充覆寫設定", - "extendScript": "擴充指令碼", - "openFile": "開啟檔案", - "update": "更新", - "updateViaProxy": "更新(代理)" - }, - "more": { - "global": { - "merge": "Global Merge", - "script": "Global Script" - }, - "chips": { - "merge": "Merge", - "script": "Script" - } - }, - "profileItem": { - "tooltips": { - "showLast": "Click to show last update time", - "showNext": "Click to show next update" - }, - "status": { - "lastUpdateFailed": "上次更新失敗", - "nextUp": "下次更新", - "noSchedule": "沒有排程", - "unknown": "未知", - "autoUpdateDisabled": "自動更新已停用" - } - } - }, - "modals": { - "profileForm": { - "title": { - "create": "新增設定檔", - "edit": "編輯設定檔" - }, - "fields": { - "type": "類型", - "description": "描述", - "subscriptionUrl": "訂閱網址", - "httpTimeout": "HTTP Request Timeout", - "updateInterval": "更新間隔", - "useSystemProxy": "使用系統代理更新", - "useClashProxy": "使用內核代理更新", - "acceptInvalidCerts": "允許無效憑證(危險)", - "allowAutoUpdate": "允許自動更新" - }, - "feedback": { - "notifications": { - "creationRetry": "訂閱建立失敗,嘗試使用 Clash 代理建立", - "creationSuccess": "使用 Clash 代理建立訂閱成功" - } - } - }, - "proxiesEditor": { - "title": "編輯節點", - "placeholders": { - "multiUri": "多條網址,請使用換行分隔(支援 Base64 編碼)" - }, - "actions": { - "prepend": "新增前置代理節點", - "append": "新增後置代理節點" - } - }, - "groupsEditor": { - "title": "編輯代理組", - "errors": { - "nameRequired": "代理組名稱為必填", - "nameExists": "代理組名稱已存在" - }, - "fields": { - "type": "代理組類型", - "name": "代理組名稱", - "icon": "代理組圖示", - "proxies": "使用代理", - "provider": "使用代理集合", - "healthCheckUrl": "健康檢查網址", - "expectedStatus": "預期狀態碼", - "interval": "檢查間隔", - "maxFailedTimes": "最大失敗次數", - "interfaceName": "輸出介面", - "routingMark": "路由標記", - "filter": "篩選節點", - "excludeFilter": "排除節點", - "excludeType": "排除節點類型", - "includeAll": "包含所有輸出代理、代理集合", - "includeAllProxies": "包含所有輸出代理", - "includeAllProviders": "包含所有代理集合" - }, - "toggles": { - "lazy": "延遲載入", - "disableUdp": "停用 UDP", - "hidden": "隱藏代理組" - }, - "actions": { - "prepend": "新增前置代理組", - "append": "新增後置代理組" - } - }, - "editor": { - "actions": { - "format": "格式化文件" - }, - "messages": { - "readOnly": "無法在唯讀模式下編輯" - } - }, - "confirmDelete": { - "title": "確認刪除", - "message": "此操作無法復原" - }, - "logViewer": { - "title": "指令碼控制台輸出" - } - } - }, - "proxies": { - "page": { - "modes": { - "rule": "規則", - "global": "全局", - "direct": "直連" - }, - "actions": { - "toggleChain": "🔗 鏈式代理", - "connect": "連線", - "disconnect": "中斷", - "connecting": "連線中...", - "clearChainConfig": "刪除鏈式設定" - }, - "provider": { - "title": "代理集合", - "actions": { - "updateAll": "全部更新", - "update": "更新" - } - }, - "rules": { - "title": "代理規則", - "select": "選擇規則" - }, - "labels": { - "proxyCount": "節點數量", - "delayCheckReset": "測試延遲以取消固定" - }, - "tooltips": { - "locate": "目前節點", - "delayCheck": "延遲測試", - "sortDefault": "預設排序", - "sortDelay": "按延遲排序", - "sortName": "按名稱排序", - "delayCheckUrl": "延遲測試網址", - "showBasic": "隱藏節點細節", - "showDetail": "展示節點細節", - "filter": "篩選節點" - }, - "placeholders": { - "delayCheckUrl": "延遲測試網址" - }, - "chain": { - "header": "鏈式代理設定", - "empty": "暫無鏈式代理設定", - "instruction": "依序點擊節點新增到鏈式代理中", - "minimumNodes": "鏈式代理至少需要 2 個節點", - "minimumNodesHint": "鏈式代理至少需要 2 個節點,請再新增一個節點。", - "connectFailed": "連線鏈式代理失敗", - "disconnectFailed": "中斷鏈式代理失敗", - "duplicateNode": "該節點已在鏈式代理表中" - }, - "messages": { - "directMode": "直連模式" - }, - "title": { - "default": "代理組", - "chainMode": "鏈式代理模式" - } - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "components": { - "enums": { - "strategies": { - "select": "手動選擇代理", - "url-test": "根據網址測試延遲選擇代理", - "fallback": "切換至另一個備用代理", - "load-balance": "根據負載平衡分配代理", - "relay": "根據定義的代理鏈傳送" - }, - "policies": { - "DIRECT": "直連 (DIRECT)", - "REJECT": "拒絕請求 (REJECT)", - "REJECT-DROP": "丟棄請求 (REJECT-DROP)", - "PASS": "跳過此規則 (PASS)" - } - } - } - }, - "connections": { - "page": { - "title": "連線" - }, - "components": { - "fields": { - "host": "主機", - "dlSpeed": "下載速度", - "ulSpeed": "上傳速度", - "chains": "鏈路", - "rule": "規則", - "process": "處理程序", - "time": "連線時間", - "source": "來源位址", - "destination": "目標位址", - "destinationPort": "目標連接埠", - "type": "類型" - }, - "order": { - "default": "Default", - "uploadSpeed": "上傳速度", - "downloadSpeed": "下載速度" - }, - "actions": { - "closeConnection": "關閉連線" - } - } - }, - "tests": { - "page": { - "actions": { - "testAll": "測試全部" - }, - "title": "測試" - }, - "components": { - "item": { - "actions": { - "test": "測試" - } - } - }, - "modals": { - "test": { - "title": { - "create": "新增測試", - "edit": "編輯測試" - }, - "fields": { - "url": "測試網址" - } - } - }, - "statuses": { - "test": { - "pending": "待檢測", - "yes": "支援", - "no": "不支援", - "failed": "測試失敗", - "completed": "檢測完成", - "disallowedIsp": "不允許的網際網路服務供應商", - "originalsOnly": "僅限原創", - "noDisney": "不支援(IP被Disney+禁止)", - "unsupportedRegion": "不支援的國家/地區", - "failedNetwork": "測試失敗(網路連線問題)" - } - } - }, - "logs": { - "page": { - "title": "日誌" - } - }, - "rules": { - "page": { - "provider": { - "trigger": "規則集合", - "dialogTitle": "規則集合", - "actions": { - "updateAll": "全部更新", - "update": "更新" - } - }, - "title": "規則" - }, - "feedback": { - "notifications": { - "provider": { - "updateSuccess": "{{name}} updated successfully", - "updateFailed": "Failed to update {{name}}: {{message}}", - "genericError": "Update failed: {{message}}", - "none": "No providers available to update", - "allUpdated": "All providers updated successfully" - } - } - }, - "modals": { - "editor": { - "form": { - "labels": { - "type": "規則類型", - "content": "規則內容", - "proxyPolicy": "代理策略" - }, - "toggles": { - "noResolve": "跳過 DNS 解析" - }, - "actions": { - "prependRule": "新增前置規則", - "appendRule": "新增後置規則" - }, - "validation": { - "conditionRequired": "規則條件為必填", - "invalidRule": "無效規則" - } - }, - "ruleTypes": { - "DOMAIN": "配對完整網域 (DOMAIN)", - "DOMAIN-SUFFIX": "配對網域後綴 (DOMAIN-SUFFIX)", - "DOMAIN-KEYWORD": "配對網域關鍵字 (DOMAIN-KEYWORD)", - "DOMAIN-REGEX": "配對網域正規表示式 (DOMAIN-REGEX)", - "GEOSITE": "配對 Geosite 內的網域 (GEOSITE)", - "GEOIP": "配對 IP 所屬國家代碼 (GEOIP)", - "SRC-GEOIP": "配對來源 IP 所屬國家代碼 (SRC-GEOIP)", - "IP-ASN": "配對 IP 所屬 ASN (IP-ASN)", - "SRC-IP-ASN": "配對來源 IP 所屬 ASN (SRC-IP-ASN)", - "IP-CIDR": "配對 IP 位址範圍 (IP-CIDR)", - "IP-CIDR6": "配對 IP 位址範圍 (IP-CIDR6)", - "SRC-IP-CIDR": "配對來源 IP 位址範圍 (SRC-IP-CIDR)", - "IP-SUFFIX": "配對 IP 後綴範圍 (IP-SUFFIX)", - "SRC-IP-SUFFIX": "配對來源 IP 後綴範圍 (SRC-IP-SUFFIX)", - "SRC-PORT": "配對請求來源連接埠範圍 (SRC-PORT)", - "DST-PORT": "配對請求目標連接埠範圍 (DST-PORT)", - "IN-PORT": "配對傳入連接埠 (IN-PORT)", - "DSCP": "DSCP標記(僅限 TPROXY UDP 傳入)(DSCP)", - "PROCESS-NAME": "配對程序名稱 (PROCESS-NAME)", - "PROCESS-PATH": "配對完整程序路徑 (PROCESS-PATH)", - "PROCESS-NAME-REGEX": "正規表示式配對完整程序名稱 (PROCESS-NAME-REGEX)", - "PROCESS-PATH-REGEX": "正規表示式配對完整程序路徑 (PROCESS-PATH-REGEX)", - "NETWORK": "配對傳輸協定 (TCP/UDP) (NETWORK)", - "UID": "配對 Linux 使用者 ID (UID)", - "IN-TYPE": "配對傳入類型 (IN-TYPE)", - "IN-USER": "配對傳入使用者名稱 (IN-USER)", - "IN-NAME": "配對傳入名稱 (IN-NAME)", - "SUB-RULE": "子規則 (SUB-RULE)", - "RULE-SET": "配對規則集 (RULE-SET)", - "AND": "邏輯與 (AND)", - "OR": "邏輯或 (OR)", - "NOT": "邏輯非 (NOT)", - "MATCH": "配對所有請求 (MATCH)" - }, - "title": "編輯規則" - } - } - }, - "home": { - "page": { - "tooltips": { - "lightweightMode": "輕量模式", - "manual": "使用手冊", - "settings": "首頁設定" - }, - "cards": { - "trafficStats": "流量統計", - "networkSettings": "網路設定", - "proxyMode": "代理模式" - }, - "settings": { - "cards": { - "profile": "訂閱卡", - "currentProxy": "目前代理卡", - "network": "網路設定卡", - "proxyMode": "代理模式卡", - "traffic": "流量統計卡", - "tests": "網站測試卡", - "ip": "IP資訊卡", - "clashInfo": "Clash 資訊卡", - "systemInfo": "系統資訊卡" - }, - "title": "首頁設定" - }, - "title": "首頁" - }, - "components": { - "proxyTun": { - "status": { - "systemProxyEnabled": "系統代理已啟用,您的應用程式將透過代理存取網路", - "systemProxyDisabled": "系統代理已關閉,建議大多數使用者開啟此選項", - "tunModeServiceRequired": "虛擬網路介面卡模式需要服務模式,請先安裝服務", - "tunModeEnabled": "虛擬網路介面卡模式已啟用,應用程式將透過虛擬網路介面卡存取網路", - "tunModeDisabled": "虛擬網路介面卡模式已關閉,適用於特殊應用程式" - }, - "tooltips": { - "systemProxy": "修改作業系統的代理設定,如果開啟失敗,可手動修改作業系統的代理設定", - "tunMode": "虛擬網路介面卡模式可以接管所有應用程式流量,適用於不遵循系統代理設定的特殊應用程式" - } - }, - "clashInfo": { - "title": "Clash 資訊", - "fields": { - "coreVersion": "內核版本", - "systemProxyAddress": "系統代理位址", - "mixedPort": "Mixed Port", - "uptime": "執行時間", - "rulesCount": "規則數量" - } - }, - "systemInfo": { - "title": "系統資訊", - "fields": { - "osInfo": "作業系統資訊", - "autoLaunch": "開機自啟", - "runningMode": "執行模式", - "lastCheckUpdate": "最後檢查更新", - "vergeVersion": "Verge 版本" - }, - "actions": { - "settings": "設定" - }, - "tooltips": { - "autoLaunchAdmin": "管理員模式可能不支援開機自啟" - }, - "badges": { - "adminMode": "管理員模式", - "serviceMode": "服務模式", - "sidecarMode": "使用者模式", - "adminServiceMode": "系統管理員 + 服務模式" - } - }, - "ipInfo": { - "title": "IP資訊", - "labels": { - "ip": "IP", - "asn": "自治系統", - "isp": "網際網路服務供應商", - "org": "組織", - "location": "位置", - "timezone": "時區", - "autoRefresh": "自動重整", - "unknown": "未知" - }, - "errors": { - "load": "獲取 IP 資訊失敗" - } - }, - "currentProxy": { - "title": "目前節點", - "actions": { - "refreshDelay": "延遲測試" - }, - "labels": { - "globalMode": "全域模式", - "directMode": "直連模式", - "group": "代理組", - "proxy": "節點", - "noActiveNode": "暫無作用中的代理節點" - } - }, - "tests": { - "title": "網站測試" - }, - "traffic": { - "metrics": { - "uploadSpeed": "上傳速度", - "downloadSpeed": "下載速度", - "activeConnections": "作用中連線", - "memoryUsage": "內核佔用" - }, - "legends": { - "upload": "上傳", - "download": "下載" - }, - "patterns": { - "minutes": "{{time}} Minutes" - } - }, - "clashMode": { - "errors": { - "communication": "內核通信錯誤" - }, - "labels": { - "rule": "規則模式", - "global": "全域模式", - "direct": "直連模式" - }, - "descriptions": { - "rule": "依照規則自動選擇代理。", - "global": "將所有網路請求轉送至所選代理。", - "direct": "略過代理,直接連線至網際網路。" - } - } - } - }, - "unlock": { - "page": { - "actions": { - "testing": "測試中..." - }, - "empty": "目前沒有解鎖測試項目", - "messages": { - "detectionTimeout": "檢測逾時或失敗" - }, - "title": "解鎖測試" - } - }, - "settings": { - "page": { - "actions": { - "manual": "使用手冊", - "telegram": "Telegram 頻道", - "github": "GitHub 專案位址" - }, - "title": "設定" - }, - "sections": { - "system": { - "title": "系統設定", - "toggles": { - "tunMode": "虛擬網路介面卡模式", - "systemProxy": "系統代理" - }, - "tooltips": { - "autoLaunchAdmin": "管理員模式可能不支援開機自啟", - "silentStart": "程序啟動時以後台模式執行,不顯示程序面板" - }, - "fields": { - "autoLaunch": "開機自啟", - "silentStart": "靜默啟動" - }, - "notifications": { - "tunMode": { - "autoDisabled": "由於服務不可使用,虛擬網路介面卡模式已自動停用", - "autoDisableFailed": "自動停用虛擬網路介面卡模式失敗" - } - } - }, - "proxyControl": { - "tooltips": { - "systemProxy": "修改作業系統的代理設定,如果開啟失敗,可手動修改作業系統的代理設定", - "tunMode": "TUN(虛擬網路介面卡)模式接管系統所有流量,啟用時無需開啟系統代理", - "tunUnavailable": "虛擬網路介面卡模式需要安裝服務模式或以系統管理員身分執行" - }, - "actions": { - "installService": "安裝服務", - "uninstallService": "解除安裝服務" - }, - "fields": { - "systemProxy": "系統代理", - "tunMode": "虛擬網路介面卡模式" - } - }, - "externalController": { - "title": "外部控制器監聽位址", - "fields": { - "enable": "啟用外部控制器", - "address": "外部控制器監聽位址", - "secret": "API 存取金鑰" - }, - "placeholders": { - "address": "必填", - "secret": "建議設定" - }, - "tooltips": { - "copy": "複製到剪貼簿" - }, - "messages": { - "addressRequired": "控制器位址不能為空", - "secretRequired": "存取金鑰不能為空", - "copyFailed": "複製失敗", - "controllerCopied": "API 連接埠已複製到剪貼簿", - "secretCopied": "API 金鑰已複製到剪貼簿" - } - }, - "externalCors": { - "title": "外部跨來源資源共享設定", - "fields": { - "allowPrivateNetwork": "允許專用網路存取", - "allowedOrigins": "允許的來源" - }, - "placeholders": { - "origin": "請輸入有效的網址" - }, - "actions": { - "add": "新增" - }, - "messages": { - "alwaysIncluded": "始終包含來源:{{urls}}" - }, - "tooltips": { - "open": "外部跨來源資源共享設定" - } - }, - "appearance": { - "light": "淺色", - "dark": "深色", - "system": "系統" - }, - "clash": { - "title": "Clash 設定", - "form": { - "fields": { - "allowLan": "區域網路連線", - "dnsOverwrite": "DNS 覆寫", - "ipv6": "IPv6", - "unifiedDelay": "統一延遲", - "logLevel": "日誌等級", - "portConfig": "連接埠設定", - "external": "外部控制", - "webUI": "網頁介面", - "clashCore": "Clash 內核", - "openUwpTool": "UWP 工具", - "updateGeoData": "更新 GeoData" - }, - "tooltips": { - "networkInterface": "網路介面", - "unifiedDelay": "開啟統一延遲時,會進行兩次延遲測試,以消除連線握手等帶來的不同類型節點的延遲差異", - "logLevel": "僅對日誌目錄 Service 資料夾下的內核日誌檔案生效", - "openUwpTool": "Windows 8 開始限制 UWP 應用程式(如Microsoft Store)直接存取本機主機的網路服務,使用此工具可繞過該限制" - }, - "options": { - "logLevel": { - "debug": "Debug", - "info": "Info", - "warning": "Warn", - "error": "Error", - "silent": "Silent" - } - } - } - } - }, - "components": { - "verge": { - "basic": { - "title": "Verge 基礎設定", - "actions": { - "browse": "瀏覽" - }, - "trayOptions": { - "showMainWindow": "顯示主視窗", - "showTrayMenu": "顯示系統匣選單", - "disable": "停用" - }, - "fields": { - "language": "語言設定", - "themeMode": "主題模式", - "trayClickEvent": "系統匣點擊事件", - "copyEnvType": "複製環境變數類型", - "startPage": "啟動頁面", - "startupScript": "啟動指令碼", - "themeSetting": "主題設定", - "layoutSetting": "介面設定", - "misc": "雜項設定", - "hotkeySetting": "快速鍵設定" - } - }, - "advanced": { - "title": "Verge 進階設定", - "tooltips": { - "backupInfo": "支援本機或 WebDAV 方式備份配置檔案", - "openConfDir": "如果軟體執行異常,!備份!並刪除此資料夾下的所有檔案,重新啟動軟體", - "liteMode": "關閉 GUI 介面,僅保留內核執行" - }, - "actions": { - "copyVersion": "複製Verge版本號" - }, - "notifications": { - "latestVersion": "目前已是最新版本", - "versionCopied": "Verge版本已複製到剪貼簿" - }, - "fields": { - "backupSetting": "備份設定", - "runtimeConfig": "執行期設定", - "openConfDir": "配置目錄", - "openCoreDir": "內核目錄", - "openLogsDir": "日誌目錄", - "checkUpdates": "檢查更新", - "openDevTools": "開發人員工具", - "liteModeSettings": "輕量模式設定", - "exit": "離開", - "exportDiagnostics": "匯出診斷資訊", - "vergeVersion": "Verge 版本" - } - }, - "theme": { - "title": "主題設定", - "fields": { - "primaryColor": "主要顏色", - "secondaryColor": "次要顏色", - "primaryText": "文字主要顏色", - "secondaryText": "文字次要顏色", - "infoColor": "資訊顏色", - "warningColor": "警告顏色", - "errorColor": "錯誤顏色", - "successColor": "成功顏色", - "fontFamily": "字型系列", - "cssInjection": "CSS 注入" - }, - "actions": { - "editCss": "Edit CSS" - }, - "dialogs": { - "editCssTitle": "Edit CSS" - } - }, - "layout": { - "title": "介面設定", - "fields": { - "preferSystemTitlebar": "優先使用系統標題欄", - "trafficGraph": "流量圖表", - "memoryUsage": "內核佔用", - "proxyGroupIcon": "代理組圖示", - "hoverNavigator": "懸浮跳轉導航", - "hoverNavigatorDelay": "懸浮跳轉導航延遲", - "navIcon": "導覽列圖示", - "trayIcon": "系統匣圖示", - "showProxyGroupsInline": "將代理組顯示在系統匣一級選單", - "commonTrayIcon": "一般系統匣圖示", - "systemProxyTrayIcon": "系統代理系統匣圖示", - "tunTrayIcon": "虛擬網路介面卡模式系統匣圖示", - "enableTrayIcon": "啟用系統匣圖示", - "enableTraySpeed": "啟用系統匣速率" - }, - "tooltips": { - "hoverNavigator": "滑鼠懸停在字母上時自動捲動到對應代理組", - "hoverNavigatorDelay": "滑鼠懸停後觸發自動跳轉前等待的毫秒數" - }, - "options": { - "icon": { - "monochrome": "單色圖示", - "colorful": "彩色圖示", - "disable": "停用" - } - } - } - } - }, - "modals": { - "clashPort": { - "title": "連接埠設定", - "fields": { - "mixed": "混合代理連接埠", - "socks": "SOCKS 代理連接埠", - "http": "HTTP(S) 代理連接埠", - "redir": "Redir 透明代理連接埠", - "tproxy": "Tproxy Port" - }, - "actions": { - "random": "隨機連接埠" - }, - "messages": { - "saved": "連結埠設定已儲存", - "saveFailed": "連結埠設定儲存失敗" - } - }, - "clashCore": { - "variants": { - "release": "正式版", - "alpha": "預覽版" - } - }, - "liteMode": { - "title": "輕量模式設定", - "actions": { - "enterNow": "立即進入輕量模式" - }, - "toggles": { - "autoEnter": "自動進入輕量模式" - }, - "tooltips": { - "autoEnter": "啟用後,將在視窗關閉一段時間後自動啟用輕量模式" - }, - "fields": { - "delay": "自動進入輕量模式延遲" - }, - "messages": { - "autoEnterHint": "關閉視窗後,輕量模式將在 {{n}} 分鐘後自動啟用" - } - }, - "backup": { - "title": "備份設定", - "tabs": { - "local": "本機備份", - "webdav": "WebDAV 備份" - }, - "actions": { - "selectTarget": "選擇備份目標", - "backup": "備份", - "export": "匯出", - "exportBackup": "匯出備份", - "deleteBackup": "刪除備份", - "restore": "還原", - "restoreBackup": "還原備份" - }, - "fields": { - "webdavUrl": "WebDAV 伺服器位址 http(s)://", - "username": "使用者名稱", - "info": "在應用程式資料目錄中建立本機備份,您可以透過下方列表進行還原或刪除。" - }, - "messages": { - "webdavUrlRequired": "WebDAV 伺服器位址不能為空", - "invalidWebdavUrl": "無效的 WebDAV 伺服器位址格式", - "usernameRequired": "使用者名稱不能為空", - "passwordRequired": "密碼不能為空", - "webdavConfigSaved": "WebDAV 配置儲存成功", - "webdavConfigSaveFailed": "儲存 WebDAV 配置失敗: {{error}}", - "backupCreated": "備份建立成功", - "backupFailed": "備份失敗: {{error}}", - "localBackupCreated": "本機備份建立成功", - "localBackupFailed": "本機備份失敗", - "restoreSuccess": "還原成功,應用程式將在 1 秒後重啟", - "localBackupExported": "本機備份匯出成功", - "localBackupExportFailed": "本機備份匯出失敗", - "confirmDelete": "確認是否刪除此備份檔案嗎?", - "confirmRestore": "確認還原此份檔案嗎?" - }, - "table": { - "filename": "檔案名稱", - "backupTime": "備份時間", - "actions": "動作", - "noBackups": "暫無備份", - "rowsPerPage": "Rows per page" - } - }, - "misc": { - "title": "雜項設定", - "fields": { - "appLogLevel": "應用程式日誌等級", - "appLogMaxSize": "應用程式日誌最大大小", - "appLogMaxCount": "應用程式日誌最大數量", - "autoCloseConnections": "自動關閉連線", - "autoCheckUpdate": "自動檢查更新", - "enableBuiltinEnhanced": "內建增強功能", - "proxyLayoutColumns": "代理頁面欄數", - "autoLogClean": "自動清理日誌", - "autoDelayDetection": "自動延遲偵測", - "defaultLatencyTest": "預設測試網址", - "defaultLatencyTimeout": "測試逾時" - }, - "tooltips": { - "autoCloseConnections": "當代理組選中節點或代理模式變動時,關閉已建立的連線", - "enableBuiltinEnhanced": "配置檔案的相容性處理", - "autoDelayDetection": "在背景定時偵測目前節點延遲", - "defaultLatencyTest": "僅用於 HTTP 客戶端請求測試,不會對配置檔案產生影響" - }, - "options": { - "proxyLayoutColumns": { - "auto": "自動欄數" - }, - "autoLogClean": { - "never": "不清理", - "retainDays": "保留 {{n}} 天" - } - } - }, - "update": { - "title": "New Version v{{version}}", - "actions": { - "goToRelease": "前往發佈頁面", - "update": "更新" - }, - "messages": { - "portableError": "可攜式版不支援應用程式內更新,請手動下載替換", - "breakChangeError": "此版本為重大更新,不支援應用程式內更新,請解除安裝後手動下載安裝" - } - }, - "sysproxy": { - "title": "系統代理設定", - "fieldsets": { - "currentStatus": "目前系統代理" - }, - "fields": { - "enableStatus": "啟用狀態:", - "serverAddr": "服務位址:", - "pacUrl": "PAC 位址:", - "proxyHost": "代理主機", - "usePacMode": "使用 PAC 模式", - "proxyGuard": "系統代理守護", - "guardDuration": "代理守護間隔", - "alwaysUseDefaultBypass": "始終使用預設繞過", - "proxyBypass": "代理繞過設定:", - "bypass": "目前繞過:", - "pacScriptContent": "PAC 指令碼內容" - }, - "tooltips": { - "proxyGuard": "開啟以防止其他軟體修改作業系統的代理設定" - }, - "messages": { - "durationTooShort": "代理守護間隔時間不得低於 1 秒", - "invalidBypass": "無效的代理繞過格式", - "invalidProxyHost": "代理主機格式無效" - }, - "actions": { - "editPac": "編輯 PAC" - } - }, - "tun": { - "title": "虛擬網路介面卡模式", - "fields": { - "stack": "虛擬網路介面卡模式堆疊", - "device": "Device Name", - "autoRoute": "自動設定全域路由", - "strictRoute": "嚴格路由", - "autoDetectInterface": "自動偵測流量輸出介面", - "dnsHijack": "DNS 綁架", - "mtu": "最大傳輸單位" - }, - "tooltips": { - "dnsHijack": "Please use , to separate multiple DNS servers" - }, - "messages": { - "applied": "設定已套用" - } - }, - "dns": { - "dialog": { - "title": "DNS 覆寫", - "warning": "如果你不清楚這裡的設定請不要修改,並保持 DNS 覆寫開啟" - }, - "sections": { - "general": "DNS 設定", - "fallbackFilter": "備援篩選設定", - "hosts": "Hosts 設定" - }, - "fields": { - "enable": "啟用 DNS", - "listen": "DNS 監聽位址", - "enhancedMode": "增強模式", - "fakeIpRange": "Fake IP 範圍", - "fakeIpFilterMode": "Fake IP 篩選模式", - "ipv6": { - "label": "IPv6", - "description": "啟用 IPv6 DNS 解析" - }, - "preferH3": { - "label": "優先使用 HTTP/3", - "description": "DNS DOH 使用 HTTP/3 協定" - }, - "respectRules": { - "label": "遵循路由規則", - "description": "DNS 連線遵循路由規則" - }, - "useHosts": { - "label": "使用 Hosts", - "description": "啟用透過 hosts 檔案解析網域" - }, - "useSystemHosts": { - "label": "使用系統 Hosts", - "description": "啟用透過系統 hosts 檔案解析網域" - }, - "directPolicy": { - "label": "直連域名伺服器遵循策略", - "description": "是否遵循 nameserver-policy 設定" - }, - "defaultNameserver": { - "label": "預設域名伺服器", - "description": "用於解析 DNS 伺服器的預設 DNS 伺服器" - }, - "nameserver": { - "label": "域名伺服器", - "description": "DNS 伺服器列表,用逗號分隔" - }, - "fallback": { - "label": "備援伺服器", - "description": "備援 DNS 伺服器列表,用逗號分隔" - }, - "proxy": { - "label": "代理節點 DNS", - "description": "代理節點網域解析伺服器,僅用於解析代理節點的網域,用逗號分隔" - }, - "directNameserver": { - "label": "直連域名伺服器", - "description": "直連輸出網域解析伺服器,支援 system 關鍵字,用逗號分隔" - }, - "fakeIpFilter": { - "label": "Fake IP 篩選", - "description": "跳過 Fake IP 解析的網域,用逗號分隔" - }, - "nameserverPolicy": { - "label": "域名伺服器策略", - "description": "特定網域的 DNS 伺服器,多個伺服器使用分號分隔,格式: domain=server1;server2" - }, - "geoipFiltering": { - "label": "GeoIP 篩選", - "description": "啟用 GeoIP 備援篩選" - }, - "geoipCode": "GeoIP 國家代碼", - "fallbackIpCidr": { - "label": "備援 IP CIDR", - "description": "不使用備援伺服器的 IP CIDR,用逗號分隔" - }, - "fallbackDomain": { - "label": "備援網域", - "description": "使用備援伺服器的網域,用逗號分隔" - }, - "hosts": { - "label": "Hosts", - "description": "自訂網域到 IP 或網域的映射,用逗號分隔" - } - }, - "messages": { - "saved": "DNS 設定已儲存", - "configError": "DNS 設定錯誤:" - }, - "errors": { - "invalid": "Invalid configuration" - } - }, - "webUI": { - "actions": { - "openUrl": "開啟網址" - }, - "title": "網頁介面", - "messages": { - "supportedPlaceholders": "支援 %host, %port, %secret", - "placeholderInstruction": "使用 %host, %port, %secret 表示 主機, 連接埠, 存取金鑰" - } - }, - "hotkey": { - "toggles": { - "enableGlobal": "啟用全域快速鍵" - }, - "title": "快速鍵設定", - "functions": { - "rule": "規則模式", - "global": "全域模式", - "openOrCloseDashboard": "開啟/關閉儀表板", - "toggleSystemProxy": "開啟/關閉系統代理", - "toggleTunMode": "開啟/關閉 虛擬網路介面卡模式", - "entryLightweightMode": "進入輕量模式", - "direct": "直連模式" - } - }, - "password": { - "prompts": { - "enterRoot": "請輸入您的 root 密碼" - } - }, - "networkInterface": { - "title": "網路介面", - "fields": { - "ipAddress": "IP 位址", - "macAddress": "MAC 位址" - } - } - }, - "feedback": { - "notifications": { - "clash": { - "restartSuccess": "已重啟 Clash 內核", - "versionUpdated": "內核版本已更新", - "changeSuccess": "內核切換成功", - "changeFailed": "無法切換內核", - "geoDataUpdated": "已更新 GeoData" - }, - "clashService": { - "installSuccess": "已成功安裝服務", - "uninstallSuccess": "已成功解除安裝服務" - }, - "updater": { - "withClashProxySuccess": "使用 Clash 代理更新成功", - "withClashProxyFailed": "使用 Clash 代理更新也失敗" - } - } - }, - "statuses": { - "clash": { - "stopping": "內核停止中...", - "restarting": "內核重啟中..." - }, - "clashService": { - "installing": "安裝服務中...", - "uninstalling": "服務解除安裝中..." - } - } - }, - "layout": { - "components": { - "navigation": { - "tabs": { - "home": "首 頁", - "proxies": "代 理", - "profiles": "訂 閱", - "connections": "連 線", - "rules": "規 則", - "logs": "日 誌", - "unlock": "解 鎖", - "settings": "設 定" - }, - "menu": { - "reorderMode": "選單排序模式", - "unlock": "解鎖選單排序", - "lock": "鎖定選單排序" - } - } - } - } -} diff --git a/src/locales/zhtw/connections.json b/src/locales/zhtw/connections.json new file mode 100644 index 00000000..6da04e1a --- /dev/null +++ b/src/locales/zhtw/connections.json @@ -0,0 +1,28 @@ +{ + "page": { + "title": "連線" + }, + "components": { + "fields": { + "host": "主機", + "dlSpeed": "下載速度", + "ulSpeed": "上傳速度", + "chains": "鏈路", + "rule": "規則", + "process": "處理程序", + "time": "連線時間", + "source": "來源位址", + "destination": "目標位址", + "destinationPort": "目標連接埠", + "type": "類型" + }, + "order": { + "default": "Default", + "uploadSpeed": "上傳速度", + "downloadSpeed": "下載速度" + }, + "actions": { + "closeConnection": "關閉連線" + } + } +} diff --git a/src/locales/zhtw/home.json b/src/locales/zhtw/home.json new file mode 100644 index 00000000..e9882c9f --- /dev/null +++ b/src/locales/zhtw/home.json @@ -0,0 +1,138 @@ +{ + "page": { + "tooltips": { + "lightweightMode": "輕量模式", + "manual": "使用手冊", + "settings": "首頁設定" + }, + "cards": { + "trafficStats": "流量統計", + "networkSettings": "網路設定", + "proxyMode": "代理模式" + }, + "settings": { + "cards": { + "profile": "訂閱卡", + "currentProxy": "目前代理卡", + "network": "網路設定卡", + "proxyMode": "代理模式卡", + "traffic": "流量統計卡", + "tests": "網站測試卡", + "ip": "IP資訊卡", + "clashInfo": "Clash 資訊卡", + "systemInfo": "系統資訊卡" + }, + "title": "首頁設定" + }, + "title": "首頁" + }, + "components": { + "proxyTun": { + "status": { + "systemProxyEnabled": "系統代理已啟用,您的應用程式將透過代理存取網路", + "systemProxyDisabled": "系統代理已關閉,建議大多數使用者開啟此選項", + "tunModeServiceRequired": "虛擬網路介面卡模式需要服務模式,請先安裝服務", + "tunModeEnabled": "虛擬網路介面卡模式已啟用,應用程式將透過虛擬網路介面卡存取網路", + "tunModeDisabled": "虛擬網路介面卡模式已關閉,適用於特殊應用程式" + }, + "tooltips": { + "systemProxy": "修改作業系統的代理設定,如果開啟失敗,可手動修改作業系統的代理設定", + "tunMode": "虛擬網路介面卡模式可以接管所有應用程式流量,適用於不遵循系統代理設定的特殊應用程式" + } + }, + "clashInfo": { + "title": "Clash 資訊", + "fields": { + "coreVersion": "內核版本", + "systemProxyAddress": "系統代理位址", + "mixedPort": "Mixed Port", + "uptime": "執行時間", + "rulesCount": "規則數量" + } + }, + "systemInfo": { + "title": "系統資訊", + "fields": { + "osInfo": "作業系統資訊", + "autoLaunch": "開機自啟", + "runningMode": "執行模式", + "lastCheckUpdate": "最後檢查更新", + "vergeVersion": "Verge 版本" + }, + "actions": { + "settings": "設定" + }, + "tooltips": { + "autoLaunchAdmin": "管理員模式可能不支援開機自啟" + }, + "badges": { + "adminMode": "管理員模式", + "serviceMode": "服務模式", + "sidecarMode": "使用者模式", + "adminServiceMode": "系統管理員 + 服務模式" + } + }, + "ipInfo": { + "title": "IP資訊", + "labels": { + "ip": "IP", + "asn": "自治系統", + "isp": "網際網路服務供應商", + "org": "組織", + "location": "位置", + "timezone": "時區", + "autoRefresh": "自動重整", + "unknown": "未知" + }, + "errors": { + "load": "獲取 IP 資訊失敗" + } + }, + "currentProxy": { + "title": "目前節點", + "actions": { + "refreshDelay": "延遲測試" + }, + "labels": { + "globalMode": "全域模式", + "directMode": "直連模式", + "group": "代理組", + "proxy": "節點", + "noActiveNode": "暫無作用中的代理節點" + } + }, + "tests": { + "title": "網站測試" + }, + "traffic": { + "metrics": { + "uploadSpeed": "上傳速度", + "downloadSpeed": "下載速度", + "activeConnections": "作用中連線", + "memoryUsage": "內核佔用" + }, + "legends": { + "upload": "上傳", + "download": "下載" + }, + "patterns": { + "minutes": "{{time}} Minutes" + } + }, + "clashMode": { + "errors": { + "communication": "內核通信錯誤" + }, + "labels": { + "rule": "規則模式", + "global": "全域模式", + "direct": "直連模式" + }, + "descriptions": { + "rule": "依照規則自動選擇代理。", + "global": "將所有網路請求轉送至所選代理。", + "direct": "略過代理,直接連線至網際網路。" + } + } + } +} diff --git a/src/locales/zhtw/index.ts b/src/locales/zhtw/index.ts new file mode 100644 index 00000000..2977171d --- /dev/null +++ b/src/locales/zhtw/index.ts @@ -0,0 +1,27 @@ +import shared from "./shared.json"; +import profiles from "./profiles.json"; +import proxies from "./proxies.json"; +import connections from "./connections.json"; +import tests from "./tests.json"; +import logs from "./logs.json"; +import rules from "./rules.json"; +import home from "./home.json"; +import unlock from "./unlock.json"; +import settings from "./settings.json"; +import layout from "./layout.json"; + +const resources = { + "shared": shared, + "profiles": profiles, + "proxies": proxies, + "connections": connections, + "tests": tests, + "logs": logs, + "rules": rules, + "home": home, + "unlock": unlock, + "settings": settings, + "layout": layout, +}; + +export default resources; diff --git a/src/locales/zhtw/layout.json b/src/locales/zhtw/layout.json new file mode 100644 index 00000000..820056d0 --- /dev/null +++ b/src/locales/zhtw/layout.json @@ -0,0 +1,21 @@ +{ + "components": { + "navigation": { + "tabs": { + "home": "首 頁", + "proxies": "代 理", + "profiles": "訂 閱", + "connections": "連 線", + "rules": "規 則", + "logs": "日 誌", + "unlock": "解 鎖", + "settings": "設 定" + }, + "menu": { + "reorderMode": "選單排序模式", + "unlock": "解鎖選單排序", + "lock": "鎖定選單排序" + } + } + } +} diff --git a/src/locales/zhtw/logs.json b/src/locales/zhtw/logs.json new file mode 100644 index 00000000..183916d3 --- /dev/null +++ b/src/locales/zhtw/logs.json @@ -0,0 +1,5 @@ +{ + "page": { + "title": "日誌" + } +} diff --git a/src/locales/zhtw/profiles.json b/src/locales/zhtw/profiles.json new file mode 100644 index 00000000..0bc5cc89 --- /dev/null +++ b/src/locales/zhtw/profiles.json @@ -0,0 +1,182 @@ +{ + "page": { + "actions": { + "updateAll": "更新所有訂閱", + "viewRuntimeConfig": "查看執行時訂閱", + "reactivate": "重新啟用訂閱", + "import": "匯入" + }, + "batch": { + "actions": { + "delete": "刪除選取訂閱", + "selectAll": "全選", + "deselectAll": "取消選取", + "done": "完成" + }, + "summary": { + "selected": "已選取", + "items": "項目" + }, + "title": "批次操作" + }, + "importForm": { + "placeholder": "訂閱檔網址", + "actions": { + "paste": "貼上" + } + }, + "feedback": { + "errors": { + "invalidUrl": "無效的訂閱網址,請輸入以 http:// 或 https:// 開頭的位址", + "onlyYaml": "僅支援 YAML 檔案" + }, + "notifications": { + "importRetry": "訂閱匯入失敗,嘗試使用 Clash 代理匯入", + "importFail": "使用 Clash 代理匯入訂閱也失敗", + "importNeedsRefresh": "Profile imported but may need manual refresh", + "importSuccess": "Profile imported successfully, please restart if not visible", + "profileSwitched": "訂閱已切換", + "profileReactivated": "訂閱已啟用", + "switchInterrupted": "配置切換被新的選擇中斷", + "batchDeleted": "選取的訂閱已成功刪除" + }, + "notices": { + "forceRefreshCompleted": "Force refresh completed", + "emergencyRefreshFailed": "Emergency refresh failed: {{message}}" + } + }, + "title": "訂閱" + }, + "components": { + "card": { + "labels": { + "clickToImport": "點擊匯入訂閱" + } + }, + "fileInput": { + "chooseFile": "選擇檔案" + }, + "menu": { + "home": "首 頁", + "select": "使用", + "editInfo": "編輯資訊", + "editFile": "編輯檔案", + "editRules": "編輯規則", + "editProxies": "編輯節點", + "editGroups": "編輯代理組", + "extendConfig": "擴充覆寫設定", + "extendScript": "擴充指令碼", + "openFile": "開啟檔案", + "update": "更新", + "updateViaProxy": "更新(代理)" + }, + "more": { + "global": { + "merge": "Global Merge", + "script": "Global Script" + }, + "chips": { + "merge": "Merge", + "script": "Script" + } + }, + "profileItem": { + "tooltips": { + "showLast": "Click to show last update time", + "showNext": "Click to show next update" + }, + "status": { + "lastUpdateFailed": "上次更新失敗", + "nextUp": "下次更新", + "noSchedule": "沒有排程", + "unknown": "未知", + "autoUpdateDisabled": "自動更新已停用" + } + } + }, + "modals": { + "profileForm": { + "title": { + "create": "新增設定檔", + "edit": "編輯設定檔" + }, + "fields": { + "type": "類型", + "description": "描述", + "subscriptionUrl": "訂閱網址", + "httpTimeout": "HTTP Request Timeout", + "updateInterval": "更新間隔", + "useSystemProxy": "使用系統代理更新", + "useClashProxy": "使用內核代理更新", + "acceptInvalidCerts": "允許無效憑證(危險)", + "allowAutoUpdate": "允許自動更新" + }, + "feedback": { + "notifications": { + "creationRetry": "訂閱建立失敗,嘗試使用 Clash 代理建立", + "creationSuccess": "使用 Clash 代理建立訂閱成功" + } + } + }, + "proxiesEditor": { + "title": "編輯節點", + "placeholders": { + "multiUri": "多條網址,請使用換行分隔(支援 Base64 編碼)" + }, + "actions": { + "prepend": "新增前置代理節點", + "append": "新增後置代理節點" + } + }, + "groupsEditor": { + "title": "編輯代理組", + "errors": { + "nameRequired": "代理組名稱為必填", + "nameExists": "代理組名稱已存在" + }, + "fields": { + "type": "代理組類型", + "name": "代理組名稱", + "icon": "代理組圖示", + "proxies": "使用代理", + "provider": "使用代理集合", + "healthCheckUrl": "健康檢查網址", + "expectedStatus": "預期狀態碼", + "interval": "檢查間隔", + "maxFailedTimes": "最大失敗次數", + "interfaceName": "輸出介面", + "routingMark": "路由標記", + "filter": "篩選節點", + "excludeFilter": "排除節點", + "excludeType": "排除節點類型", + "includeAll": "包含所有輸出代理、代理集合", + "includeAllProxies": "包含所有輸出代理", + "includeAllProviders": "包含所有代理集合" + }, + "toggles": { + "lazy": "延遲載入", + "disableUdp": "停用 UDP", + "hidden": "隱藏代理組" + }, + "actions": { + "prepend": "新增前置代理組", + "append": "新增後置代理組" + } + }, + "editor": { + "actions": { + "format": "格式化文件" + }, + "messages": { + "readOnly": "無法在唯讀模式下編輯" + } + }, + "confirmDelete": { + "title": "確認刪除", + "message": "此操作無法復原" + }, + "logViewer": { + "title": "指令碼控制台輸出" + } + } +} diff --git a/src/locales/zhtw/proxies.json b/src/locales/zhtw/proxies.json new file mode 100644 index 00000000..d6a01037 --- /dev/null +++ b/src/locales/zhtw/proxies.json @@ -0,0 +1,90 @@ +{ + "page": { + "modes": { + "rule": "規則", + "global": "全局", + "direct": "直連" + }, + "actions": { + "toggleChain": "🔗 鏈式代理", + "connect": "連線", + "disconnect": "中斷", + "connecting": "連線中...", + "clearChainConfig": "刪除鏈式設定" + }, + "provider": { + "title": "代理集合", + "actions": { + "updateAll": "全部更新", + "update": "更新" + } + }, + "rules": { + "title": "代理規則", + "select": "選擇規則" + }, + "labels": { + "proxyCount": "節點數量", + "delayCheckReset": "測試延遲以取消固定" + }, + "tooltips": { + "locate": "目前節點", + "delayCheck": "延遲測試", + "sortDefault": "預設排序", + "sortDelay": "按延遲排序", + "sortName": "按名稱排序", + "delayCheckUrl": "延遲測試網址", + "showBasic": "隱藏節點細節", + "showDetail": "展示節點細節", + "filter": "篩選節點" + }, + "placeholders": { + "delayCheckUrl": "延遲測試網址" + }, + "chain": { + "header": "鏈式代理設定", + "empty": "暫無鏈式代理設定", + "instruction": "依序點擊節點新增到鏈式代理中", + "minimumNodes": "鏈式代理至少需要 2 個節點", + "minimumNodesHint": "鏈式代理至少需要 2 個節點,請再新增一個節點。", + "connectFailed": "連線鏈式代理失敗", + "disconnectFailed": "中斷鏈式代理失敗", + "duplicateNode": "該節點已在鏈式代理表中" + }, + "messages": { + "directMode": "直連模式" + }, + "title": { + "default": "代理組", + "chainMode": "鏈式代理模式" + } + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "components": { + "enums": { + "strategies": { + "select": "手動選擇代理", + "url-test": "根據網址測試延遲選擇代理", + "fallback": "切換至另一個備用代理", + "load-balance": "根據負載平衡分配代理", + "relay": "根據定義的代理鏈傳送" + }, + "policies": { + "DIRECT": "直連 (DIRECT)", + "REJECT": "拒絕請求 (REJECT)", + "REJECT-DROP": "丟棄請求 (REJECT-DROP)", + "PASS": "跳過此規則 (PASS)" + } + } + } +} diff --git a/src/locales/zhtw/rules.json b/src/locales/zhtw/rules.json new file mode 100644 index 00000000..3eca5a4f --- /dev/null +++ b/src/locales/zhtw/rules.json @@ -0,0 +1,82 @@ +{ + "page": { + "provider": { + "trigger": "規則集合", + "dialogTitle": "規則集合", + "actions": { + "updateAll": "全部更新", + "update": "更新" + } + }, + "title": "規則" + }, + "feedback": { + "notifications": { + "provider": { + "updateSuccess": "{{name}} updated successfully", + "updateFailed": "Failed to update {{name}}: {{message}}", + "genericError": "Update failed: {{message}}", + "none": "No providers available to update", + "allUpdated": "All providers updated successfully" + } + } + }, + "modals": { + "editor": { + "form": { + "labels": { + "type": "規則類型", + "content": "規則內容", + "proxyPolicy": "代理策略" + }, + "toggles": { + "noResolve": "跳過 DNS 解析" + }, + "actions": { + "prependRule": "新增前置規則", + "appendRule": "新增後置規則" + }, + "validation": { + "conditionRequired": "規則條件為必填", + "invalidRule": "無效規則" + } + }, + "ruleTypes": { + "DOMAIN": "配對完整網域 (DOMAIN)", + "DOMAIN-SUFFIX": "配對網域後綴 (DOMAIN-SUFFIX)", + "DOMAIN-KEYWORD": "配對網域關鍵字 (DOMAIN-KEYWORD)", + "DOMAIN-REGEX": "配對網域正規表示式 (DOMAIN-REGEX)", + "GEOSITE": "配對 Geosite 內的網域 (GEOSITE)", + "GEOIP": "配對 IP 所屬國家代碼 (GEOIP)", + "SRC-GEOIP": "配對來源 IP 所屬國家代碼 (SRC-GEOIP)", + "IP-ASN": "配對 IP 所屬 ASN (IP-ASN)", + "SRC-IP-ASN": "配對來源 IP 所屬 ASN (SRC-IP-ASN)", + "IP-CIDR": "配對 IP 位址範圍 (IP-CIDR)", + "IP-CIDR6": "配對 IP 位址範圍 (IP-CIDR6)", + "SRC-IP-CIDR": "配對來源 IP 位址範圍 (SRC-IP-CIDR)", + "IP-SUFFIX": "配對 IP 後綴範圍 (IP-SUFFIX)", + "SRC-IP-SUFFIX": "配對來源 IP 後綴範圍 (SRC-IP-SUFFIX)", + "SRC-PORT": "配對請求來源連接埠範圍 (SRC-PORT)", + "DST-PORT": "配對請求目標連接埠範圍 (DST-PORT)", + "IN-PORT": "配對傳入連接埠 (IN-PORT)", + "DSCP": "DSCP標記(僅限 TPROXY UDP 傳入)(DSCP)", + "PROCESS-NAME": "配對程序名稱 (PROCESS-NAME)", + "PROCESS-PATH": "配對完整程序路徑 (PROCESS-PATH)", + "PROCESS-NAME-REGEX": "正規表示式配對完整程序名稱 (PROCESS-NAME-REGEX)", + "PROCESS-PATH-REGEX": "正規表示式配對完整程序路徑 (PROCESS-PATH-REGEX)", + "NETWORK": "配對傳輸協定 (TCP/UDP) (NETWORK)", + "UID": "配對 Linux 使用者 ID (UID)", + "IN-TYPE": "配對傳入類型 (IN-TYPE)", + "IN-USER": "配對傳入使用者名稱 (IN-USER)", + "IN-NAME": "配對傳入名稱 (IN-NAME)", + "SUB-RULE": "子規則 (SUB-RULE)", + "RULE-SET": "配對規則集 (RULE-SET)", + "AND": "邏輯與 (AND)", + "OR": "邏輯或 (OR)", + "NOT": "邏輯非 (NOT)", + "MATCH": "配對所有請求 (MATCH)" + }, + "title": "編輯規則" + } + } +} diff --git a/src/locales/zhtw/settings.json b/src/locales/zhtw/settings.json new file mode 100644 index 00000000..ca0c0e46 --- /dev/null +++ b/src/locales/zhtw/settings.json @@ -0,0 +1,571 @@ +{ + "page": { + "actions": { + "manual": "使用手冊", + "telegram": "Telegram 頻道", + "github": "GitHub 專案位址" + }, + "title": "設定" + }, + "sections": { + "system": { + "title": "系統設定", + "toggles": { + "tunMode": "虛擬網路介面卡模式", + "systemProxy": "系統代理" + }, + "tooltips": { + "autoLaunchAdmin": "管理員模式可能不支援開機自啟", + "silentStart": "程序啟動時以後台模式執行,不顯示程序面板" + }, + "fields": { + "autoLaunch": "開機自啟", + "silentStart": "靜默啟動" + }, + "notifications": { + "tunMode": { + "autoDisabled": "由於服務不可使用,虛擬網路介面卡模式已自動停用", + "autoDisableFailed": "自動停用虛擬網路介面卡模式失敗" + } + } + }, + "proxyControl": { + "tooltips": { + "systemProxy": "修改作業系統的代理設定,如果開啟失敗,可手動修改作業系統的代理設定", + "tunMode": "TUN(虛擬網路介面卡)模式接管系統所有流量,啟用時無需開啟系統代理", + "tunUnavailable": "虛擬網路介面卡模式需要安裝服務模式或以系統管理員身分執行" + }, + "actions": { + "installService": "安裝服務", + "uninstallService": "解除安裝服務" + }, + "fields": { + "systemProxy": "系統代理", + "tunMode": "虛擬網路介面卡模式" + } + }, + "externalController": { + "title": "外部控制器監聽位址", + "fields": { + "enable": "啟用外部控制器", + "address": "外部控制器監聽位址", + "secret": "API 存取金鑰" + }, + "placeholders": { + "address": "必填", + "secret": "建議設定" + }, + "tooltips": { + "copy": "複製到剪貼簿" + }, + "messages": { + "addressRequired": "控制器位址不能為空", + "secretRequired": "存取金鑰不能為空", + "copyFailed": "複製失敗", + "controllerCopied": "API 連接埠已複製到剪貼簿", + "secretCopied": "API 金鑰已複製到剪貼簿" + } + }, + "externalCors": { + "title": "外部跨來源資源共享設定", + "fields": { + "allowPrivateNetwork": "允許專用網路存取", + "allowedOrigins": "允許的來源" + }, + "placeholders": { + "origin": "請輸入有效的網址" + }, + "actions": { + "add": "新增" + }, + "messages": { + "alwaysIncluded": "始終包含來源:{{urls}}" + }, + "tooltips": { + "open": "外部跨來源資源共享設定" + } + }, + "appearance": { + "light": "淺色", + "dark": "深色", + "system": "系統" + }, + "clash": { + "title": "Clash 設定", + "form": { + "fields": { + "allowLan": "區域網路連線", + "dnsOverwrite": "DNS 覆寫", + "ipv6": "IPv6", + "unifiedDelay": "統一延遲", + "logLevel": "日誌等級", + "portConfig": "連接埠設定", + "external": "外部控制", + "webUI": "網頁介面", + "clashCore": "Clash 內核", + "openUwpTool": "UWP 工具", + "updateGeoData": "更新 GeoData" + }, + "tooltips": { + "networkInterface": "網路介面", + "unifiedDelay": "開啟統一延遲時,會進行兩次延遲測試,以消除連線握手等帶來的不同類型節點的延遲差異", + "logLevel": "僅對日誌目錄 Service 資料夾下的內核日誌檔案生效", + "openUwpTool": "Windows 8 開始限制 UWP 應用程式(如Microsoft Store)直接存取本機主機的網路服務,使用此工具可繞過該限制" + }, + "options": { + "logLevel": { + "debug": "Debug", + "info": "Info", + "warning": "Warn", + "error": "Error", + "silent": "Silent" + } + } + } + } + }, + "components": { + "verge": { + "basic": { + "title": "Verge 基礎設定", + "actions": { + "browse": "瀏覽" + }, + "trayOptions": { + "showMainWindow": "顯示主視窗", + "showTrayMenu": "顯示系統匣選單", + "disable": "停用" + }, + "fields": { + "language": "語言設定", + "themeMode": "主題模式", + "trayClickEvent": "系統匣點擊事件", + "copyEnvType": "複製環境變數類型", + "startPage": "啟動頁面", + "startupScript": "啟動指令碼", + "themeSetting": "主題設定", + "layoutSetting": "介面設定", + "misc": "雜項設定", + "hotkeySetting": "快速鍵設定" + } + }, + "advanced": { + "title": "Verge 進階設定", + "tooltips": { + "backupInfo": "支援本機或 WebDAV 方式備份配置檔案", + "openConfDir": "如果軟體執行異常,!備份!並刪除此資料夾下的所有檔案,重新啟動軟體", + "liteMode": "關閉 GUI 介面,僅保留內核執行" + }, + "actions": { + "copyVersion": "複製Verge版本號" + }, + "notifications": { + "latestVersion": "目前已是最新版本", + "versionCopied": "Verge版本已複製到剪貼簿" + }, + "fields": { + "backupSetting": "備份設定", + "runtimeConfig": "執行期設定", + "openConfDir": "配置目錄", + "openCoreDir": "內核目錄", + "openLogsDir": "日誌目錄", + "checkUpdates": "檢查更新", + "openDevTools": "開發人員工具", + "liteModeSettings": "輕量模式設定", + "exit": "離開", + "exportDiagnostics": "匯出診斷資訊", + "vergeVersion": "Verge 版本" + } + }, + "theme": { + "title": "主題設定", + "fields": { + "primaryColor": "主要顏色", + "secondaryColor": "次要顏色", + "primaryText": "文字主要顏色", + "secondaryText": "文字次要顏色", + "infoColor": "資訊顏色", + "warningColor": "警告顏色", + "errorColor": "錯誤顏色", + "successColor": "成功顏色", + "fontFamily": "字型系列", + "cssInjection": "CSS 注入" + }, + "actions": { + "editCss": "Edit CSS" + }, + "dialogs": { + "editCssTitle": "Edit CSS" + } + }, + "layout": { + "title": "介面設定", + "fields": { + "preferSystemTitlebar": "優先使用系統標題欄", + "trafficGraph": "流量圖表", + "memoryUsage": "內核佔用", + "proxyGroupIcon": "代理組圖示", + "hoverNavigator": "懸浮跳轉導航", + "hoverNavigatorDelay": "懸浮跳轉導航延遲", + "navIcon": "導覽列圖示", + "trayIcon": "系統匣圖示", + "showProxyGroupsInline": "將代理組顯示在系統匣一級選單", + "commonTrayIcon": "一般系統匣圖示", + "systemProxyTrayIcon": "系統代理系統匣圖示", + "tunTrayIcon": "虛擬網路介面卡模式系統匣圖示", + "enableTrayIcon": "啟用系統匣圖示", + "enableTraySpeed": "啟用系統匣速率" + }, + "tooltips": { + "hoverNavigator": "滑鼠懸停在字母上時自動捲動到對應代理組", + "hoverNavigatorDelay": "滑鼠懸停後觸發自動跳轉前等待的毫秒數" + }, + "options": { + "icon": { + "monochrome": "單色圖示", + "colorful": "彩色圖示", + "disable": "停用" + } + } + } + } + }, + "modals": { + "clashPort": { + "title": "連接埠設定", + "fields": { + "mixed": "混合代理連接埠", + "socks": "SOCKS 代理連接埠", + "http": "HTTP(S) 代理連接埠", + "redir": "Redir 透明代理連接埠", + "tproxy": "Tproxy Port" + }, + "actions": { + "random": "隨機連接埠" + }, + "messages": { + "saved": "連結埠設定已儲存", + "saveFailed": "連結埠設定儲存失敗" + } + }, + "clashCore": { + "variants": { + "release": "正式版", + "alpha": "預覽版" + } + }, + "liteMode": { + "title": "輕量模式設定", + "actions": { + "enterNow": "立即進入輕量模式" + }, + "toggles": { + "autoEnter": "自動進入輕量模式" + }, + "tooltips": { + "autoEnter": "啟用後,將在視窗關閉一段時間後自動啟用輕量模式" + }, + "fields": { + "delay": "自動進入輕量模式延遲" + }, + "messages": { + "autoEnterHint": "關閉視窗後,輕量模式將在 {{n}} 分鐘後自動啟用" + } + }, + "backup": { + "title": "備份設定", + "tabs": { + "local": "本機備份", + "webdav": "WebDAV 備份" + }, + "actions": { + "selectTarget": "選擇備份目標", + "backup": "備份", + "export": "匯出", + "exportBackup": "匯出備份", + "deleteBackup": "刪除備份", + "restore": "還原", + "restoreBackup": "還原備份" + }, + "fields": { + "webdavUrl": "WebDAV 伺服器位址 http(s)://", + "username": "使用者名稱", + "info": "在應用程式資料目錄中建立本機備份,您可以透過下方列表進行還原或刪除。" + }, + "messages": { + "webdavUrlRequired": "WebDAV 伺服器位址不能為空", + "invalidWebdavUrl": "無效的 WebDAV 伺服器位址格式", + "usernameRequired": "使用者名稱不能為空", + "passwordRequired": "密碼不能為空", + "webdavConfigSaved": "WebDAV 配置儲存成功", + "webdavConfigSaveFailed": "儲存 WebDAV 配置失敗: {{error}}", + "backupCreated": "備份建立成功", + "backupFailed": "備份失敗: {{error}}", + "localBackupCreated": "本機備份建立成功", + "localBackupFailed": "本機備份失敗", + "restoreSuccess": "還原成功,應用程式將在 1 秒後重啟", + "localBackupExported": "本機備份匯出成功", + "localBackupExportFailed": "本機備份匯出失敗", + "confirmDelete": "確認是否刪除此備份檔案嗎?", + "confirmRestore": "確認還原此份檔案嗎?" + }, + "table": { + "filename": "檔案名稱", + "backupTime": "備份時間", + "actions": "動作", + "noBackups": "暫無備份", + "rowsPerPage": "Rows per page" + } + }, + "misc": { + "title": "雜項設定", + "fields": { + "appLogLevel": "應用程式日誌等級", + "appLogMaxSize": "應用程式日誌最大大小", + "appLogMaxCount": "應用程式日誌最大數量", + "autoCloseConnections": "自動關閉連線", + "autoCheckUpdate": "自動檢查更新", + "enableBuiltinEnhanced": "內建增強功能", + "proxyLayoutColumns": "代理頁面欄數", + "autoLogClean": "自動清理日誌", + "autoDelayDetection": "自動延遲偵測", + "defaultLatencyTest": "預設測試網址", + "defaultLatencyTimeout": "測試逾時" + }, + "tooltips": { + "autoCloseConnections": "當代理組選中節點或代理模式變動時,關閉已建立的連線", + "enableBuiltinEnhanced": "配置檔案的相容性處理", + "autoDelayDetection": "在背景定時偵測目前節點延遲", + "defaultLatencyTest": "僅用於 HTTP 客戶端請求測試,不會對配置檔案產生影響" + }, + "options": { + "proxyLayoutColumns": { + "auto": "自動欄數" + }, + "autoLogClean": { + "never": "不清理", + "retainDays": "保留 {{n}} 天" + } + } + }, + "update": { + "title": "New Version v{{version}}", + "actions": { + "goToRelease": "前往發佈頁面", + "update": "更新" + }, + "messages": { + "portableError": "可攜式版不支援應用程式內更新,請手動下載替換", + "breakChangeError": "此版本為重大更新,不支援應用程式內更新,請解除安裝後手動下載安裝" + } + }, + "sysproxy": { + "title": "系統代理設定", + "fieldsets": { + "currentStatus": "目前系統代理" + }, + "fields": { + "enableStatus": "啟用狀態:", + "serverAddr": "服務位址:", + "pacUrl": "PAC 位址:", + "proxyHost": "代理主機", + "usePacMode": "使用 PAC 模式", + "proxyGuard": "系統代理守護", + "guardDuration": "代理守護間隔", + "alwaysUseDefaultBypass": "始終使用預設繞過", + "proxyBypass": "代理繞過設定:", + "bypass": "目前繞過:", + "pacScriptContent": "PAC 指令碼內容" + }, + "tooltips": { + "proxyGuard": "開啟以防止其他軟體修改作業系統的代理設定" + }, + "messages": { + "durationTooShort": "代理守護間隔時間不得低於 1 秒", + "invalidBypass": "無效的代理繞過格式", + "invalidProxyHost": "代理主機格式無效" + }, + "actions": { + "editPac": "編輯 PAC" + } + }, + "tun": { + "title": "虛擬網路介面卡模式", + "fields": { + "stack": "虛擬網路介面卡模式堆疊", + "device": "Device Name", + "autoRoute": "自動設定全域路由", + "strictRoute": "嚴格路由", + "autoDetectInterface": "自動偵測流量輸出介面", + "dnsHijack": "DNS 綁架", + "mtu": "最大傳輸單位" + }, + "tooltips": { + "dnsHijack": "Please use , to separate multiple DNS servers" + }, + "messages": { + "applied": "設定已套用" + } + }, + "dns": { + "dialog": { + "title": "DNS 覆寫", + "warning": "如果你不清楚這裡的設定請不要修改,並保持 DNS 覆寫開啟" + }, + "sections": { + "general": "DNS 設定", + "fallbackFilter": "備援篩選設定", + "hosts": "Hosts 設定" + }, + "fields": { + "enable": "啟用 DNS", + "listen": "DNS 監聽位址", + "enhancedMode": "增強模式", + "fakeIpRange": "Fake IP 範圍", + "fakeIpFilterMode": "Fake IP 篩選模式", + "ipv6": { + "label": "IPv6", + "description": "啟用 IPv6 DNS 解析" + }, + "preferH3": { + "label": "優先使用 HTTP/3", + "description": "DNS DOH 使用 HTTP/3 協定" + }, + "respectRules": { + "label": "遵循路由規則", + "description": "DNS 連線遵循路由規則" + }, + "useHosts": { + "label": "使用 Hosts", + "description": "啟用透過 hosts 檔案解析網域" + }, + "useSystemHosts": { + "label": "使用系統 Hosts", + "description": "啟用透過系統 hosts 檔案解析網域" + }, + "directPolicy": { + "label": "直連域名伺服器遵循策略", + "description": "是否遵循 nameserver-policy 設定" + }, + "defaultNameserver": { + "label": "預設域名伺服器", + "description": "用於解析 DNS 伺服器的預設 DNS 伺服器" + }, + "nameserver": { + "label": "域名伺服器", + "description": "DNS 伺服器列表,用逗號分隔" + }, + "fallback": { + "label": "備援伺服器", + "description": "備援 DNS 伺服器列表,用逗號分隔" + }, + "proxy": { + "label": "代理節點 DNS", + "description": "代理節點網域解析伺服器,僅用於解析代理節點的網域,用逗號分隔" + }, + "directNameserver": { + "label": "直連域名伺服器", + "description": "直連輸出網域解析伺服器,支援 system 關鍵字,用逗號分隔" + }, + "fakeIpFilter": { + "label": "Fake IP 篩選", + "description": "跳過 Fake IP 解析的網域,用逗號分隔" + }, + "nameserverPolicy": { + "label": "域名伺服器策略", + "description": "特定網域的 DNS 伺服器,多個伺服器使用分號分隔,格式: domain=server1;server2" + }, + "geoipFiltering": { + "label": "GeoIP 篩選", + "description": "啟用 GeoIP 備援篩選" + }, + "geoipCode": "GeoIP 國家代碼", + "fallbackIpCidr": { + "label": "備援 IP CIDR", + "description": "不使用備援伺服器的 IP CIDR,用逗號分隔" + }, + "fallbackDomain": { + "label": "備援網域", + "description": "使用備援伺服器的網域,用逗號分隔" + }, + "hosts": { + "label": "Hosts", + "description": "自訂網域到 IP 或網域的映射,用逗號分隔" + } + }, + "messages": { + "saved": "DNS 設定已儲存", + "configError": "DNS 設定錯誤:" + }, + "errors": { + "invalid": "Invalid configuration" + } + }, + "webUI": { + "actions": { + "openUrl": "開啟網址" + }, + "title": "網頁介面", + "messages": { + "supportedPlaceholders": "支援 %host, %port, %secret", + "placeholderInstruction": "使用 %host, %port, %secret 表示 主機, 連接埠, 存取金鑰" + } + }, + "hotkey": { + "toggles": { + "enableGlobal": "啟用全域快速鍵" + }, + "title": "快速鍵設定", + "functions": { + "rule": "規則模式", + "global": "全域模式", + "openOrCloseDashboard": "開啟/關閉儀表板", + "toggleSystemProxy": "開啟/關閉系統代理", + "toggleTunMode": "開啟/關閉 虛擬網路介面卡模式", + "entryLightweightMode": "進入輕量模式", + "direct": "直連模式" + } + }, + "password": { + "prompts": { + "enterRoot": "請輸入您的 root 密碼" + } + }, + "networkInterface": { + "title": "網路介面", + "fields": { + "ipAddress": "IP 位址", + "macAddress": "MAC 位址" + } + } + }, + "feedback": { + "notifications": { + "clash": { + "restartSuccess": "已重啟 Clash 內核", + "versionUpdated": "內核版本已更新", + "changeSuccess": "內核切換成功", + "changeFailed": "無法切換內核", + "geoDataUpdated": "已更新 GeoData" + }, + "clashService": { + "installSuccess": "已成功安裝服務", + "uninstallSuccess": "已成功解除安裝服務" + }, + "updater": { + "withClashProxySuccess": "使用 Clash 代理更新成功", + "withClashProxyFailed": "使用 Clash 代理更新也失敗" + } + } + }, + "statuses": { + "clash": { + "stopping": "內核停止中...", + "restarting": "內核重啟中..." + }, + "clashService": { + "installing": "安裝服務中...", + "uninstalling": "服務解除安裝中..." + } + } +} diff --git a/src/locales/zhtw/shared.json b/src/locales/zhtw/shared.json new file mode 100644 index 00000000..1ed71af2 --- /dev/null +++ b/src/locales/zhtw/shared.json @@ -0,0 +1,128 @@ +{ + "actions": { + "cancel": "取消", + "close": "關閉", + "confirm": "確認", + "save": "儲存", + "delete": "刪除", + "edit": "編輯", + "new": "新增", + "enable": "啟用", + "upgrade": "升級內核", + "restart": "重啟內核", + "resetToDefault": "重設為預設值", + "refresh": "重整", + "retry": "重試", + "refreshPage": "重新整理頁面", + "showDetails": "顯示詳情", + "hideDetails": "隱藏詳情", + "listView": "列表檢視", + "tableView": "表格檢視", + "pause": "暫停", + "resume": "繼續", + "closeAll": "關閉全部", + "clear": "清除" + }, + "labels": { + "updateAt": "更新於", + "timeout": "逾時", + "icon": "圖示", + "name": "名稱", + "readOnly": "唯讀", + "expireTime": "到期時間", + "updateTime": "更新時間", + "usedTotal": "已使用 / 總量", + "from": "來自", + "password": "密碼", + "retryAttempts": "重試次數", + "downloaded": "下載量", + "uploaded": "上傳量" + }, + "statuses": { + "enabled": "已啟用", + "disabled": "已停用", + "saving": "儲存中...", + "empty": "空空如也" + }, + "units": { + "milliseconds": "毫秒", + "seconds": "秒", + "minutes": "分鐘", + "kilobytes": "KB", + "files": "檔案" + }, + "placeholders": { + "filter": "篩選條件", + "matchCase": "區分大小寫", + "matchWholeWord": "完整字詞配對", + "useRegex": "使用正規表示式" + }, + "validation": { + "invalidRegex": "無效的正規表示式" + }, + "window": { + "maximize": "最大化", + "minimize": "最小化" + }, + "editorModes": { + "visualization": "視覺化", + "advanced": "進階" + }, + "feedback": { + "errors": { + "trafficStats": "流量統計錯誤", + "trafficStatsDescription": "流量統計元件發生錯誤,已停用以避免當機。" + }, + "notices": { + "raw": "{{message}}", + "prefixedRaw": "{{prefix}} {{message}}" + }, + "notifications": { + "importSuccess": "匯入設定檔成功", + "importSubscriptionSuccess": "匯入訂閱成功", + "importWithClashProxy": "使用 Clash 代理匯入訂閱成功", + "saved": "儲存成功", + "common": { + "copySuccess": "複製成功", + "saveSuccess": "設定儲存完成", + "saveFailed": "設定儲存失敗" + } + }, + "validation": { + "config": { + "failed": "訂閱配置校驗失敗,請檢查訂閱配置文件,變更已撤銷,錯誤詳情:", + "bootFailed": "啟動訂閱配置校驗失敗,已使用預設配置啟動;請檢查訂閱配置文件,錯誤詳情:", + "coreChangeFailed": "切換內核時配置校驗失敗,已使用預設配置啟動;請檢查訂閱配置文件,錯誤詳情:", + "processTerminated": "驗證程序被終止" + }, + "script": { + "syntaxError": "指令碼語法錯誤,變更已撤銷", + "missingMain": "指令碼錯誤,變更已撤銷", + "fileNotFound": "檔案遺失,變更已撤銷", + "fileError": "指令碼檔案錯誤,變更已撤銷" + }, + "yaml": { + "syntaxError": "YAML 語法錯誤,變更已撤銷", + "readError": "YAML 讀取錯誤,變更已撤銷", + "mappingError": "YAML 映射錯誤,變更已撤銷", + "keyError": "YAML 鍵錯誤,變更已撤銷", + "generalError": "YAML 錯誤,變更已撤銷" + }, + "merge": { + "syntaxError": "覆寫檔案語法錯誤,變更已撤銷", + "mappingError": "覆寫檔案映射錯誤,變更已撤銷", + "keyError": "覆寫檔案鍵錯誤,變更已撤銷", + "generalError": "覆寫檔案錯誤,變更已撤銷" + } + } + }, + "filters": { + "logLevels": { + "all": "ALL", + "debug": "DEBUG", + "info": "INFO", + "warn": "WARN", + "error": "ERROR" + } + } +} diff --git a/src/locales/zhtw/tests.json b/src/locales/zhtw/tests.json new file mode 100644 index 00000000..4dbcdeec --- /dev/null +++ b/src/locales/zhtw/tests.json @@ -0,0 +1,40 @@ +{ + "page": { + "actions": { + "testAll": "測試全部" + }, + "title": "測試" + }, + "components": { + "item": { + "actions": { + "test": "測試" + } + } + }, + "modals": { + "test": { + "title": { + "create": "新增測試", + "edit": "編輯測試" + }, + "fields": { + "url": "測試網址" + } + } + }, + "statuses": { + "test": { + "pending": "待檢測", + "yes": "支援", + "no": "不支援", + "failed": "測試失敗", + "completed": "檢測完成", + "disallowedIsp": "不允許的網際網路服務供應商", + "originalsOnly": "僅限原創", + "noDisney": "不支援(IP被Disney+禁止)", + "unsupportedRegion": "不支援的國家/地區", + "failedNetwork": "測試失敗(網路連線問題)" + } + } +} diff --git a/src/locales/zhtw/unlock.json b/src/locales/zhtw/unlock.json new file mode 100644 index 00000000..364bcf0d --- /dev/null +++ b/src/locales/zhtw/unlock.json @@ -0,0 +1,12 @@ +{ + "page": { + "actions": { + "testing": "測試中..." + }, + "empty": "目前沒有解鎖測試項目", + "messages": { + "detectionTimeout": "檢測逾時或失敗" + }, + "title": "解鎖測試" + } +} diff --git a/src/services/i18n.ts b/src/services/i18n.ts index 7b6c910e..2cb6c153 100644 --- a/src/services/i18n.ts +++ b/src/services/i18n.ts @@ -27,13 +27,13 @@ export const languages: Record = supportedLanguages.reduce( export const loadLanguage = async (language: string) => { try { - const module = await import(`@/locales/${language}.json`); + const module = await import(`@/locales/${language}/index.ts`); return module.default; } catch (error) { console.warn( `Failed to load language ${language}, fallback to zh, ${error}`, ); - const fallback = await import("@/locales/zh.json"); + const fallback = await import("@/locales/zh/index.ts"); return fallback.default; } };