Change translation keys

This commit is contained in:
problematicconsumer
2024-03-08 17:24:43 +03:30
parent 7f0397a97f
commit 4118863a20
20 changed files with 1004 additions and 1005 deletions

View File

@@ -29,18 +29,7 @@
"home": { "home": {
"pageTitle": "Home", "pageTitle": "Home",
"emptyProfilesMsg": "Begin by adding a subscription profile", "emptyProfilesMsg": "Begin by adding a subscription profile",
"noActiveProfileMsg": "Choose a profile", "noActiveProfileMsg": "Choose a profile"
"connection": {
"tapToConnect": "Tap to Connect",
"connecting": "Connecting",
"disconnecting": "Disconnecting",
"connected": "Connected",
"reconnect": "Reconnect",
"connectAnyWay": "Connect",
"experimentalNotice": "Experimental Features In Use",
"experimentalNoticeMsg": "You've enabled some experimental features which might affect connection quality and cause unexpected errors. You can always change or reset these options from Config options page.",
"disableExperimentalNotice": "Don't show again"
}
}, },
"stats": { "stats": {
"traffic": "Traffic", "traffic": "Traffic",
@@ -226,93 +215,6 @@
"hideSystemApps": "Hide system apps", "hideSystemApps": "Hide system apps",
"clearSelection": "Clear selection" "clearSelection": "Clear selection"
}, },
"config": {
"resetBtn": "Reset options",
"reconnectMsg": "Reconnect for changes to take effect",
"reconnectBtn": "Reconnect",
"serviceMode": "Service Mode",
"quickSettings": "Quick Settings",
"setupWarp": "Setup WARP",
"allOptions": "All Config Options",
"serviceModes": {
"proxy": "Proxy Service Only",
"systemProxy": "Set System Proxy",
"tun": "VPN",
"tunService": "VPN Service"
},
"shortServiceModes": {
"proxy": "Proxy",
"systemProxy": "System Proxy",
"tun": "VPN",
"tunService": "VPN Service"
},
"section": {
"route": "Route Options",
"dns": "DNS Options",
"inbound": "Inbound Options",
"mux": "Multiplexer",
"outbound": "Outbound Options",
"tlsTricks": "TLS Tricks",
"warp": "WARP Options",
"misc": "Misc Options"
},
"warpConsent": {
"title": "Cloudflare WARP Consent",
"description(rich)": "Cloudflare WARP is a free WireGuard VPN provider. By enabling this option you are agreeing to the Cloudflare WARP's ${tos(Terms of Service)} and ${privacy(Privacy Policy)}."
},
"generateWarpConfig": "Generate WARP config",
"missingWarpConfig": "Missing WARP config",
"warpConfigGenerated": "WARP config generated",
"pageTitle": "Config Options",
"logLevel": "Log Level",
"resolveDestination": "Resolve Destination",
"ipv6Mode": "IPv6 Route",
"ipv6Modes": {
"disable": "Disable",
"enable": "Enable",
"prefer": "Preferred",
"only": "Exclusive"
},
"remoteDnsAddress": "Remote DNS",
"remoteDnsDomainStrategy": "Remote DNS Domain Strategy",
"directDnsAddress": "Direct DNS",
"directDnsDomainStrategy": "Direct DNS Domain Strategy",
"mixedPort": "Mixed Port",
"localDnsPort": "Local DNS Port",
"allowConnectionFromLan": "Allow Connection from LAN",
"tunImplementation": "TUN Implementation",
"mtu": "MTU",
"connectionTestUrl": "Connection Test URL",
"urlTestInterval": "URL Test Interval",
"enableClashApi": "Enable Clash API",
"clashApiPort": "Clash API Port",
"enableTun": "Enable TUN",
"setSystemProxy": "Set System Proxy",
"enableDnsRouting": "Enable DNS Routing",
"enableFakeDns": "Enable Fake DNS",
"bypassLan": "Bypass Lan",
"strictRoute": "Strict Route",
"enableTlsFragment": "Enable TLS Fragment",
"tlsFragmentSize": "TLS Fragment Size",
"tlsFragmentSleep": "TLS Fragment Sleep",
"enableTlsMixedSniCase": "Enable TLS Mixed SNI Case",
"enableTlsPadding": "Enable TLS Padding",
"tlsPaddingSize": "TLS Padding",
"enableMux": "Enable Mux",
"muxProtocol": "Mux Protocol",
"muxMaxStreams": "Max Concurrent Streams",
"enableWarp": "Enable WARP",
"warpDetourMode": "Detour Mode",
"warpDetourModes": {
"proxyOverWarp": "Detour proxies through WARP",
"warpOverProxy": "Detour WARP through proxies"
},
"warpLicenseKey": "License Key",
"warpCleanIp": "Clean IP",
"warpPort": "Port",
"warpNoise": "Noise Count",
"warpNoiseDelay": "Noise Delay"
},
"geoAssets": { "geoAssets": {
"pageTitle": "Routing Assets", "pageTitle": "Routing Assets",
"geoip": "Geoip", "geoip": "Geoip",
@@ -404,5 +306,102 @@
"title": "Hiddify (Preview)", "title": "Hiddify (Preview)",
"short_description": "Auto, SSH, VLESS, Vmess, Trojan, Reality, Sing-Box, Clash, Xray, Shadowsocks", "short_description": "Auto, SSH, VLESS, Vmess, Trojan, Reality, Sing-Box, Clash, Xray, Shadowsocks",
"full_description": "The key goal of Hiddify is to provide a secure, user-friendly and efficient tunneling client. It enables you to route all traffic or selected app traffic to a remote server of your choose, utilizing VPN-Service permission.\n\nNote: We do not provide any server; users are required to ensure their online activities stay private by using use their own self-hosted server or trusted servers. \n \nWe support servers with:\n- Normal V2ray/Xray Subscription Link\n- Clash Subscription Link\n- Sing-Box Subscription Link\n\nWhat is our unique features?\n - User Friendly\n - Optimized and Fast\n - Automatically select LowestPing \n - Show user usage information\n - Easily import sublink by one click using deeplinking \n - Free and No ADS\n - Easily switch user sublinks\n - more and more\n\nSupport:\n- All Protocols supported by Sing-Box \n- VLESS + xtls reality, vision\n- VMESS\n- Trojan\n- ShoadowSocks\n- Reality\n- V2ray\n- Hystria2\n- TUIC\n- SSH\n- ShadowTLS\n\n\nThe source code exist in https://github.com/hiddify/Hiddify-Next\nThe application core is based on open-source sing-box.\n\nPermission Description:\n- VPN Service: As the goal of this application is to provide a secure, user-friendly and efficient tunneling client, we need this permission to be able to route the traffic via tunnel to the remote server. \n- QUERY ALL PACKAGES: This permission is used to allow users to include or exclude specific applications for tunneling.\n- RECEIVE BOOT COMPLETED: This permission can be enabled or disabled from app settings to activate this application upon device boot.\n- POST NOTIFICATIONS: This permission is essential as we employ a foreground service to ensure the continuous operation of the VPN service.\n- This application is free from advertisements. The analytics and crash data only occurs with the explicit consent of the user in the first use of application." "full_description": "The key goal of Hiddify is to provide a secure, user-friendly and efficient tunneling client. It enables you to route all traffic or selected app traffic to a remote server of your choose, utilizing VPN-Service permission.\n\nNote: We do not provide any server; users are required to ensure their online activities stay private by using use their own self-hosted server or trusted servers. \n \nWe support servers with:\n- Normal V2ray/Xray Subscription Link\n- Clash Subscription Link\n- Sing-Box Subscription Link\n\nWhat is our unique features?\n - User Friendly\n - Optimized and Fast\n - Automatically select LowestPing \n - Show user usage information\n - Easily import sublink by one click using deeplinking \n - Free and No ADS\n - Easily switch user sublinks\n - more and more\n\nSupport:\n- All Protocols supported by Sing-Box \n- VLESS + xtls reality, vision\n- VMESS\n- Trojan\n- ShoadowSocks\n- Reality\n- V2ray\n- Hystria2\n- TUIC\n- SSH\n- ShadowTLS\n\n\nThe source code exist in https://github.com/hiddify/Hiddify-Next\nThe application core is based on open-source sing-box.\n\nPermission Description:\n- VPN Service: As the goal of this application is to provide a secure, user-friendly and efficient tunneling client, we need this permission to be able to route the traffic via tunnel to the remote server. \n- QUERY ALL PACKAGES: This permission is used to allow users to include or exclude specific applications for tunneling.\n- RECEIVE BOOT COMPLETED: This permission can be enabled or disabled from app settings to activate this application upon device boot.\n- POST NOTIFICATIONS: This permission is essential as we employ a foreground service to ensure the continuous operation of the VPN service.\n- This application is free from advertisements. The analytics and crash data only occurs with the explicit consent of the user in the first use of application."
},
"connection": {
"tapToConnect": "Tap to Connect",
"connecting": "Connecting",
"disconnecting": "Disconnecting",
"connected": "Connected",
"reconnect": "Reconnect",
"connectAnyWay": "Connect",
"experimentalNotice": "Experimental Features In Use",
"experimentalNoticeMsg": "You've enabled some experimental features which might affect connection quality and cause unexpected errors. You can always change or reset these options from Config options page.",
"disableExperimentalNotice": "Don't show again",
"reconnectMsg": "Reconnect for changes to take effect"
},
"config": {
"resetBtn": "Reset options",
"serviceMode": "Service Mode",
"quickSettings": "Quick Settings",
"setupWarp": "Setup WARP",
"allOptions": "All Config Options",
"serviceModes": {
"proxy": "Proxy Service Only",
"systemProxy": "Set System Proxy",
"tun": "VPN",
"tunService": "VPN Service"
},
"shortServiceModes": {
"proxy": "Proxy",
"systemProxy": "System Proxy",
"tun": "VPN",
"tunService": "VPN Service"
},
"section": {
"route": "Route Options",
"dns": "DNS Options",
"inbound": "Inbound Options",
"mux": "Multiplexer",
"outbound": "Outbound Options",
"tlsTricks": "TLS Tricks",
"warp": "WARP Options",
"misc": "Misc Options"
},
"warpConsent": {
"title": "Cloudflare WARP Consent",
"description(rich)": "Cloudflare WARP is a free WireGuard VPN provider. By enabling this option you are agreeing to the Cloudflare WARP's ${tos(Terms of Service)} and ${privacy(Privacy Policy)}."
},
"generateWarpConfig": "Generate WARP config",
"missingWarpConfig": "Missing WARP config",
"warpConfigGenerated": "WARP config generated",
"pageTitle": "Config Options",
"logLevel": "Log Level",
"resolveDestination": "Resolve Destination",
"ipv6Mode": "IPv6 Route",
"ipv6Modes": {
"disable": "Disable",
"enable": "Enable",
"prefer": "Preferred",
"only": "Exclusive"
},
"remoteDnsAddress": "Remote DNS",
"remoteDnsDomainStrategy": "Remote DNS Domain Strategy",
"directDnsAddress": "Direct DNS",
"directDnsDomainStrategy": "Direct DNS Domain Strategy",
"mixedPort": "Mixed Port",
"localDnsPort": "Local DNS Port",
"allowConnectionFromLan": "Allow Connection from LAN",
"tunImplementation": "TUN Implementation",
"mtu": "MTU",
"connectionTestUrl": "Connection Test URL",
"urlTestInterval": "URL Test Interval",
"enableClashApi": "Enable Clash API",
"clashApiPort": "Clash API Port",
"enableTun": "Enable TUN",
"setSystemProxy": "Set System Proxy",
"enableDnsRouting": "Enable DNS Routing",
"enableFakeDns": "Enable Fake DNS",
"bypassLan": "Bypass Lan",
"strictRoute": "Strict Route",
"enableTlsFragment": "Enable TLS Fragment",
"tlsFragmentSize": "TLS Fragment Size",
"tlsFragmentSleep": "TLS Fragment Sleep",
"enableTlsMixedSniCase": "Enable TLS Mixed SNI Case",
"enableTlsPadding": "Enable TLS Padding",
"tlsPaddingSize": "TLS Padding",
"enableMux": "Enable Mux",
"muxProtocol": "Mux Protocol",
"muxMaxStreams": "Max Concurrent Streams",
"enableWarp": "Enable WARP",
"warpDetourMode": "Detour Mode",
"warpDetourModes": {
"proxyOverWarp": "Detour proxies through WARP",
"warpOverProxy": "Detour WARP through proxies"
},
"warpLicenseKey": "License Key",
"warpCleanIp": "Clean IP",
"warpPort": "Port",
"warpNoise": "Noise Count",
"warpNoiseDelay": "Noise Delay"
} }
} }

View File

@@ -1,353 +1,353 @@
{ {
"general": { "general": {
"appTitle": "Hiddify", "appTitle": "Hiddify",
"reset": "Renicio", "reset": "Renicio",
"toggle": { "toggle": {
"enabled": "Activado", "enabled": "Activado",
"disabled": "Desactivado" "disabled": "Desactivado"
},
"state": {
"disable": "Desactivar"
},
"sort": "Clasificar",
"sortBy": "Ordenar por",
"addToClipboard": "Añadir al portapapeles",
"notSet": "No establecido",
"agree": "Aceptar",
"decline": "Rechazar",
"unknown": "Desconocido"
}, },
"intro": { "state": {
"termsAndPolicyCaution(rich)": "al continuar, aceptas ${tap(@:about.termsAndConditions)}", "disable": "Desactivar"
"start": "Comenzar"
}, },
"home": { "sort": "Clasificar",
"pageTitle": "Hogar", "sortBy": "Ordenar por",
"emptyProfilesMsg": "Comience agregando un perfil de suscripción", "addToClipboard": "Añadir al portapapeles",
"noActiveProfileMsg": "Elige un perfil", "notSet": "No establecido",
"connection": { "agree": "Aceptar",
"tapToConnect": "Toque para conectarse", "decline": "Rechazar",
"connecting": "Conectando", "unknown": "Desconocido"
"disconnecting": "Desconectando", },
"connected": "Conectado", "intro": {
"experimentalNotice": "Funciones experimentales en uso", "termsAndPolicyCaution(rich)": "al continuar, aceptas ${tap(@:about.termsAndConditions)}",
"experimentalNoticeMsg": "Ha habilitado algunas funciones experimentales que podrían afectar la calidad de la conexión y provocar errores inesperados. Siempre puede cambiar o restablecer estas opciones desde la página de opciones de configuración.", "start": "Comenzar"
"disableExperimentalNotice": "No volver a mostrar" },
} "home": {
"pageTitle": "Hogar",
"emptyProfilesMsg": "Comience agregando un perfil de suscripción",
"noActiveProfileMsg": "Elige un perfil"
},
"profile": {
"overviewPageTitle": "Perfiles",
"detailsPageTitle": "Perfil",
"activeProfileNameSemanticLabel": "Nombre del perfil activo: \"${name}\".",
"activeProfileBtnSemanticLabel": "Ver todos los perfiles.",
"nonActiveProfileBtnSemanticLabel": "Seleccione \"${name}\" como perfil activo.",
"subscription": {
"traffic": "Tráfico",
"updatedTimeAgo": "Actualizado ${timeago}",
"remainingDuration": "${duration} días restantes",
"remainingTrafficSemanticLabel": "${consumed} de ${total} tráfico consumido.",
"expired": "Caducado",
"noTraffic": "Fuera de cuota"
}, },
"profile": { "sortBy": {
"overviewPageTitle": "Perfiles", "lastUpdate": "Recientemente actualizado",
"detailsPageTitle": "Perfil", "name": "Alfabéticamente"
"activeProfileNameSemanticLabel": "Nombre del perfil activo: \"${name}\".",
"activeProfileBtnSemanticLabel": "Ver todos los perfiles.",
"nonActiveProfileBtnSemanticLabel": "Seleccione \"${name}\" como perfil activo.",
"subscription": {
"traffic": "Tráfico",
"updatedTimeAgo": "Actualizado ${timeago}",
"remainingDuration": "${duration} días restantes",
"remainingTrafficSemanticLabel": "${consumed} de ${total} tráfico consumido.",
"expired": "Caducado",
"noTraffic": "Fuera de cuota"
},
"sortBy": {
"lastUpdate": "Recientemente actualizado",
"name": "Alfabéticamente"
},
"add": {
"buttonText": "Nuevo perfil",
"shortBtnTxt": "Nuevo perfil",
"fromClipboard": "Agregar desde el portapapeles",
"scanQr": "Escanear código QR",
"qrScanner": {
"permissionDeniedError": "Permiso denegado",
"unexpectedError": "Algo salió mal",
"torchSemanticLabel": "Linterna",
"facingSemanticLabel": "Frente a la cámara"
},
"manually": "Entrada manual",
"addingProfileMsg": "Agregar perfil",
"failureMsg": "No se pudo agregar el perfil"
},
"update": {
"buttonTxt": "Actualizar",
"tooltip": "Actualización del perfil",
"updateSubscriptions": "Actualizar suscripciones",
"failureMsg": "No se pudo actualizar el perfil",
"successMsg": "Perfil actualizado con éxito",
"namedFailureMsg": "No se pudo actualizar \"${name}\"",
"namedSuccessMsg": "\"${name}\" actualizado exitosamente"
},
"share": {
"buttonText": "Compartir",
"exportToClipboardSuccess": "Exportado al portapapeles",
"exportSubLinkToClipboard": "Exportar enlace de suscripción al portapapeles",
"subLinkQrCode": "Código QR del enlace de suscripción",
"exportConfigToClipboard": "Exportar configuración al portapapeles",
"exportConfigToClipboardSuccess": "Configuración copiada al portapapeles"
},
"edit": {
"buttonTxt": "Editar",
"selectActiveTxt": "Seleccionar perfil activo"
},
"delete": {
"buttonTxt": "Borrar",
"confirmationMsg": "¿Eliminar perfil permanentemente?",
"successMsg": "Perfil eliminado exitosamente"
},
"save": {
"buttonText": "Ahorrar",
"successMsg": "Perfil guardado exitosamente",
"failureMsg": "No se pudo guardar el perfil"
},
"detailsForm": {
"nameLabel": "Nombre",
"nameHint": "Nombre de perfil",
"urlLabel": "URL",
"urlHint": "URL de configuración completa",
"emptyNameMsg": "Se requiere el nombre",
"invalidUrlMsg": "URL invalida",
"lastUpdate": "Última actualización",
"updateInterval": "Actualización automática",
"updateIntervalDialogTitle": "Intervalo de actualización automática (en horas)"
}
}, },
"proxies": { "add": {
"pageTitle": "Proxies", "buttonText": "Nuevo perfil",
"emptyProxiesMsg": "No proxies disponibles", "shortBtnTxt": "Nuevo perfil",
"delayTestTooltip": "Prueba de Restraso", "fromClipboard": "Agregar desde el portapapeles",
"sortTooltip": "Ordenar Proxies", "scanQr": "Escanear código QR",
"sortOptions": { "qrScanner": {
"unsorted": "Por Defecto", "permissionDeniedError": "Permiso denegado",
"name": "Alfabéticamente", "unexpectedError": "Algo salió mal",
"delay": "Por retraso" "torchSemanticLabel": "Linterna",
} "facingSemanticLabel": "Frente a la cámara"
},
"manually": "Entrada manual",
"addingProfileMsg": "Agregar perfil",
"failureMsg": "No se pudo agregar el perfil"
}, },
"logs": { "update": {
"pageTitle": "Registros", "buttonTxt": "Actualizar",
"filterHint": "Filtrar", "tooltip": "Actualización del perfil",
"allLevelsFilter": "Todo", "updateSubscriptions": "Actualizar suscripciones",
"shareCoreLogs": "Compartir registros principales", "failureMsg": "No se pudo actualizar el perfil",
"shareAppLogs": "Compartir registros de aplicaciones", "successMsg": "Perfil actualizado con éxito",
"pauseTooltip": "Pausa", "namedFailureMsg": "No se pudo actualizar \"${name}\"",
"resumeTooltip": "reanudar", "namedSuccessMsg": "\"${name}\" actualizado exitosamente"
"clearTooltip": "Claro"
}, },
"settings": { "share": {
"pageTitle": "Ajustes", "buttonText": "Compartir",
"requiresRestartMsg": "Para que esto surta efecto, reinicie la aplicación.", "exportToClipboardSuccess": "Exportado al portapapeles",
"experimental": "Experimental", "exportSubLinkToClipboard": "Exportar enlace de suscripción al portapapeles",
"experimentalMsg": "Las funciones con el indicador Experimental aún están en desarrollo y pueden causar problemas.", "subLinkQrCode": "Código QR del enlace de suscripción",
"general": { "exportConfigToClipboard": "Exportar configuración al portapapeles",
"sectionTitle": "General", "exportConfigToClipboardSuccess": "Configuración copiada al portapapeles"
"locale": "Idioma",
"region": "Región",
"regionMsg": "Ayuda a configurar opciones predeterminadas para omitir direcciones nacionales",
"regions": {
"ir": "Irán (ir)",
"cn": "China (CN)",
"ru": "Rusia (ru)",
"af": "Afganistán (af)",
"other": "Otro"
},
"themeMode": "Modo temático",
"themeModes": {
"system": "Seguir el tema del sistema",
"dark": "Modo Oscuro",
"light": "Modo Claro",
"black": "Modo Negro"
},
"enableAnalytics": "Habilitar análisis",
"enableAnalyticsMsg": "Dar permiso para recopilar análisis y enviar informes de fallos para mejorar la aplicación.",
"autoStart": "Inicie en el arranque",
"silentStart": "Inicio Silencioso",
"openWorkingDir": "Abrir directorio de trabajo",
"ignoreBatteryOptimizations": "Deshabilitar la optimización de la batería",
"ignoreBatteryOptimizationsMsg": "Elimine las restricciones para un rendimiento VPN óptimo",
"dynamicNotification": "Mostrar velocidad en la notificación"
},
"advanced": {
"sectionTitle": "Avanzado",
"debugMode": "Modo de depuración",
"debugModeMsg": "Reinicie la aplicación para aplicar este cambio.",
"memoryLimit": "Limite de memoria",
"memoryLimitMsg": "Habilítelo si experimenta errores de falta de memoria o fallas frecuentes de la aplicación",
"resetTunnel": "Restablecer perfil VPN"
},
"network": {
"perAppProxyPageTitle": "Proxy por aplicación",
"perAppProxyModes": {
"off": "Todo",
"offMsg": "Proxy en todas las aplicaciones",
"include": "Proxy",
"includeMsg": "Proxy solo en aplicaciones seleccionadas",
"exclude": "Bypass",
"excludeMsg": "No hacer proxy de aplicaciones seleccionadas"
},
"showSystemApps": "Mostrar aplicaciones del sistema",
"hideSystemApps": "Ocultar aplicaciones del sistema",
"clearSelection": "Selección clara"
},
"config": {
"resetBtn": "Restablecer opciones",
"serviceMode": "Modo de servicio",
"serviceModes": {
"proxy": "Proxy",
"systemProxy": "Sistema Proxy",
"tun": "VPN"
},
"section": {
"route": "Opciones de ruta",
"dns": "Opciones de DNS",
"inbound": "Opciones entrantes",
"mux": "Multiplexer",
"outbound": "Opciones de salida",
"tlsTricks": "Trucos TLS",
"warp": "WARP Options",
"misc": "Opciones varias"
},
"warpConsent": {
"title": "Consentimiento WARP de Cloudflare",
"description(rich)": "Cloudflare WARP es un proveedor de VPN WireGuard gratuito. Al habilitar esta opción, acepta los ${tos(Términos de servicio)} y ${privacy(Política de privacidad)} de Cloudflare WARP."
},
"pageTitle": "Opciones de configuración",
"logLevel": "Registro del Nivel",
"resolveDestination": "Resolver Destino",
"ipv6Mode": "Ruta IPv6",
"ipv6Modes": {
"disable": "Desactivar",
"enable": "Activar",
"prefer": "Preferido",
"only": "Exclusivo"
},
"remoteDnsAddress": "DNS Remoto",
"remoteDnsDomainStrategy": "Estrategia de dominio DNS remoto",
"directDnsAddress": "DNS Directo",
"directDnsDomainStrategy": "Estrategia de dominio DNS directo",
"mixedPort": "Puerto Mixto",
"localDnsPort": "Puerto DNS local",
"allowConnectionFromLan": "Permitir conexión desde LAN",
"tunImplementation": "Implementación de TUN",
"mtu": "MTU",
"connectionTestUrl": "URL de prueba de conexión",
"urlTestInterval": "URL Prueba de Intervalo",
"enableClashApi": "Habilitar API de choque",
"clashApiPort": "Puerto API de choque",
"enableTun": "Habilitar sintonización",
"setSystemProxy": "Establecer proxy del sistema",
"enableDnsRouting": "Habilitar enrutamiento DNS",
"enableFakeDns": "Habilitar DNS falso",
"bypassLan": "Omitir LAN",
"strictRoute": "Ruta estricta",
"enableTlsFragment": "Habilitar fragmento TLS",
"tlsFragmentSize": "Tamaño del fragmento TLS",
"tlsFragmentSleep": "Sueño de fragmento TLS",
"enableTlsMixedSniCase": "Habilitar caso SNI mixto TLS",
"enableTlsPadding": "Habilitar el relleno TLS",
"tlsPaddingSize": "Relleno TLS",
"enableMux": "Enable Mux",
"muxProtocol": "Mux Protocol",
"muxMaxStreams": "Max Concurrent Streams",
"enableWarp": "Enable WARP",
"warpDetourMode": "Detour Mode",
"warpDetourModes": {
"inbound": "Detour WARP through proxies",
"outbound": "Detour proxies through WARP"
},
"warpLicenseKey": "License Key",
"warpCleanIp": "Clean IP",
"warpPort": "Port",
"warpNoise": "Noise"
},
"geoAssets": {
"pageTitle": "Activos de enrutamiento",
"geoip": "Geoip",
"geosite": "Geosite",
"version": "Versión ${version}",
"fileMissing": "Archivo faltante",
"update": "Actualizar",
"download": "Descargar",
"failureMsg": "No se pudo actualizar el activo",
"successMsg": "Activo actualizado correctamente",
"addRecommended": "Agregar activos recomendados",
"missingGeoAssetsMsg": "Faltan los archivos de los recursos de enrutamiento seleccionados. Descárgalos o elige los existentes."
}
}, },
"about": { "edit": {
"pageTitle": "Acerca de", "buttonTxt": "Editar",
"version": "Versión", "selectActiveTxt": "Seleccionar perfil activo"
"sourceCode": "Código fuente",
"telegramChannel": "Canal de telegramas",
"checkForUpdate": "Buscar actualizaciones",
"privacyPolicy": "Política de privacidad",
"termsAndConditions": "Términos y condiciones"
}, },
"appUpdate": { "delete": {
"notAvailableMsg": "Ya estas usando la última versión.", "buttonTxt": "Borrar",
"dialogTitle": "Actualización disponible", "confirmationMsg": "¿Eliminar perfil permanentemente?",
"updateMsg": "Hay disponible una nueva versión de @:general.appTitle. ¿Te gustaría actualizar ahora?", "successMsg": "Perfil eliminado exitosamente"
"currentVersionLbl": "Versión actual",
"newVersionLbl": "Nueva versión",
"updateNowBtnTxt": "Actualizar ahora",
"laterBtnTxt": "Más tarde",
"ignoreBtnTxt": "Ignorar"
}, },
"tray": { "save": {
"dashboard": "Panel", "buttonText": "Ahorrar",
"quit": "Abandonar", "successMsg": "Perfil guardado exitosamente",
"open": "Abierto", "failureMsg": "No se pudo guardar el perfil"
"status": {
"connect": "Conectar",
"connecting": "Conectando",
"disconnect": "Desconectado",
"disconnecting": "Desconectando"
}
}, },
"failure": { "detailsForm": {
"unexpected": "Error inesperado", "nameLabel": "Nombre",
"clash": { "nameHint": "Nombre de perfil",
"unexpected": "Error inesperado", "urlLabel": "URL",
"core": "Error de choque ${reason}" "urlHint": "URL de configuración completa",
}, "emptyNameMsg": "Se requiere el nombre",
"singbox": { "invalidUrlMsg": "URL invalida",
"unexpected": "Error de servicio inesperado", "lastUpdate": "Última actualización",
"serviceNotRunning": "El servicio no está funcionando", "updateInterval": "Actualización automática",
"missingPrivilege": "Privilegio perdido", "updateIntervalDialogTitle": "Intervalo de actualización automática (en horas)"
"missingPrivilegeMsg": "El modo VPN requiere privilegios de administrador. Reinicie la aplicación como administrador o cambie el modo de servicio.",
"missingGeoAssets": "Recursos geográficos faltantes",
"missingGeoAssetsMsg": "Faltan recursos geográficos. considere cambiar el activo activo o descargar uno seleccionado en la configuración.",
"invalidConfigOptions": "Opciones de configuración no válidas",
"invalidConfig": "Configuración no válida",
"create": "Error de creación del servicio",
"start": "Error de inicio del servicio"
},
"connectivity": {
"unexpected": "Falla inesperada",
"missingVpnPermission": "Permiso VPN faltante",
"missingNotificationPermission": "Permiso de notificación faltante",
"core": "Error central"
},
"profiles": {
"unexpected": "Error Inesperado",
"notFound": "Perfil no encontrado",
"invalidConfig": "Configuracion Invalida",
"invalidUrl": "URL Invalido"
},
"connection": {
"unexpected": "Error de conexión inesperado",
"timeout": "El tiempo de conexión expiro",
"badResponse": "Mala respuesta",
"connectionError": "Error de conexión",
"badCertificate": "Certificado malo"
},
"geoAssets": {
"unexpected": "Error inesperado",
"notUpdate": "Actualización no disponible",
"activeNotFound": "Activo geográfico activo no encontrado"
}
},
"play": {
"title": "Hiddify Next (vista previa)",
"short_description": "Auto, SSH, VLESS, Vmess, Trojan, Reality, Sing-Box, Clash, Xray, Shadowsocks",
"full_description": "El objetivo clave de HiddifyNext es proporcionar un cliente de túnel seguro, fácil de usar y eficiente. Le permite enrutar todo el tráfico o el tráfico de aplicaciones seleccionadas a un servidor remoto de su elección, utilizando el permiso del servicio VPN.Nota: No proporcionamos ningún servidor; Los usuarios deben garantizar que sus actividades en línea permanezcan privadas mediante el uso de su propio servidor autohospedado o servidores confiables. Soportamos servidores con:- Enlace de suscripción normal a V2ray/Xray- Enlace de suscripción a Choque- Enlace de suscripción a Sing-Box¿Cuáles son nuestras características únicas? - Fácil de usar - Optimizado y Rápido - Seleccionar automáticamente LowestPing - Mostrar información de uso del usuario. - Importe fácilmente un subvínculo con un solo clic mediante enlaces profundos - Gratis y sin anuncios - Cambie fácilmente los subvínculos de usuario - más y másApoyo:- Todos los protocolos soportados por Sing-Box- VLESS + xtls realidad, visión- VMESS- troyano- Calcetines Shoadow- Realidad-V2ray-Histria2-TUIC-SSH- SombraTLSEl código fuente existe en https://github.com/hiddify/Hiddify-NextEl núcleo de la aplicación se basa en sing-box de código abierto.Descripción del permiso:- Servicio VPN: como el objetivo de esta aplicación es proporcionar un cliente de túnel seguro, fácil de usar y eficiente, necesitamos este permiso para poder enrutar el tráfico a través del túnel al servidor remoto.- CONSULTAR TODOS LOS PAQUETES: este permiso se utiliza para permitir a los usuarios incluir o excluir aplicaciones específicas para la tunelización.- RECIBIR ARRANQUE COMPLETADO: este permiso se puede habilitar o deshabilitar desde la configuración de la aplicación para activar esta aplicación al iniciar el dispositivo.- PUBLICAR NOTIFICACIONES: este permiso es esencial ya que empleamos un servicio en primer plano para garantizar el funcionamiento continuo del servicio VPN.- Esta aplicación está libre de publicidad. Los datos analíticos y de fallos solo se producen con el consentimiento explícito del usuario en el primer uso de la aplicación."
} }
} },
"proxies": {
"pageTitle": "Proxies",
"emptyProxiesMsg": "No proxies disponibles",
"delayTestTooltip": "Prueba de Restraso",
"sortTooltip": "Ordenar Proxies",
"sortOptions": {
"unsorted": "Por Defecto",
"name": "Alfabéticamente",
"delay": "Por retraso"
}
},
"logs": {
"pageTitle": "Registros",
"filterHint": "Filtrar",
"allLevelsFilter": "Todo",
"shareCoreLogs": "Compartir registros principales",
"shareAppLogs": "Compartir registros de aplicaciones",
"pauseTooltip": "Pausa",
"resumeTooltip": "reanudar",
"clearTooltip": "Claro"
},
"settings": {
"pageTitle": "Ajustes",
"requiresRestartMsg": "Para que esto surta efecto, reinicie la aplicación.",
"experimental": "Experimental",
"experimentalMsg": "Las funciones con el indicador Experimental aún están en desarrollo y pueden causar problemas.",
"general": {
"sectionTitle": "General",
"locale": "Idioma",
"region": "Región",
"regionMsg": "Ayuda a configurar opciones predeterminadas para omitir direcciones nacionales",
"regions": {
"ir": "Irán (ir)",
"cn": "China (CN)",
"ru": "Rusia (ru)",
"af": "Afganistán (af)",
"other": "Otro"
},
"themeMode": "Modo temático",
"themeModes": {
"system": "Seguir el tema del sistema",
"dark": "Modo Oscuro",
"light": "Modo Claro",
"black": "Modo Negro"
},
"enableAnalytics": "Habilitar análisis",
"enableAnalyticsMsg": "Dar permiso para recopilar análisis y enviar informes de fallos para mejorar la aplicación.",
"autoStart": "Inicie en el arranque",
"silentStart": "Inicio Silencioso",
"openWorkingDir": "Abrir directorio de trabajo",
"ignoreBatteryOptimizations": "Deshabilitar la optimización de la batería",
"ignoreBatteryOptimizationsMsg": "Elimine las restricciones para un rendimiento VPN óptimo",
"dynamicNotification": "Mostrar velocidad en la notificación"
},
"advanced": {
"sectionTitle": "Avanzado",
"debugMode": "Modo de depuración",
"debugModeMsg": "Reinicie la aplicación para aplicar este cambio.",
"memoryLimit": "Limite de memoria",
"memoryLimitMsg": "Habilítelo si experimenta errores de falta de memoria o fallas frecuentes de la aplicación",
"resetTunnel": "Restablecer perfil VPN"
},
"network": {
"perAppProxyPageTitle": "Proxy por aplicación",
"perAppProxyModes": {
"off": "Todo",
"offMsg": "Proxy en todas las aplicaciones",
"include": "Proxy",
"includeMsg": "Proxy solo en aplicaciones seleccionadas",
"exclude": "Bypass",
"excludeMsg": "No hacer proxy de aplicaciones seleccionadas"
},
"showSystemApps": "Mostrar aplicaciones del sistema",
"hideSystemApps": "Ocultar aplicaciones del sistema",
"clearSelection": "Selección clara"
},
"geoAssets": {
"pageTitle": "Activos de enrutamiento",
"geoip": "Geoip",
"geosite": "Geosite",
"version": "Versión ${version}",
"fileMissing": "Archivo faltante",
"update": "Actualizar",
"download": "Descargar",
"failureMsg": "No se pudo actualizar el activo",
"successMsg": "Activo actualizado correctamente",
"addRecommended": "Agregar activos recomendados",
"missingGeoAssetsMsg": "Faltan los archivos de los recursos de enrutamiento seleccionados. Descárgalos o elige los existentes."
}
},
"about": {
"pageTitle": "Acerca de",
"version": "Versión",
"sourceCode": "Código fuente",
"telegramChannel": "Canal de telegramas",
"checkForUpdate": "Buscar actualizaciones",
"privacyPolicy": "Política de privacidad",
"termsAndConditions": "Términos y condiciones"
},
"appUpdate": {
"notAvailableMsg": "Ya estas usando la última versión.",
"dialogTitle": "Actualización disponible",
"updateMsg": "Hay disponible una nueva versión de @:general.appTitle. ¿Te gustaría actualizar ahora?",
"currentVersionLbl": "Versión actual",
"newVersionLbl": "Nueva versión",
"updateNowBtnTxt": "Actualizar ahora",
"laterBtnTxt": "Más tarde",
"ignoreBtnTxt": "Ignorar"
},
"tray": {
"dashboard": "Panel",
"quit": "Abandonar",
"open": "Abierto",
"status": {
"connect": "Conectar",
"connecting": "Conectando",
"disconnect": "Desconectado",
"disconnecting": "Desconectando"
}
},
"failure": {
"unexpected": "Error inesperado",
"clash": {
"unexpected": "Error inesperado",
"core": "Error de choque ${reason}"
},
"singbox": {
"unexpected": "Error de servicio inesperado",
"serviceNotRunning": "El servicio no está funcionando",
"missingPrivilege": "Privilegio perdido",
"missingPrivilegeMsg": "El modo VPN requiere privilegios de administrador. Reinicie la aplicación como administrador o cambie el modo de servicio.",
"missingGeoAssets": "Recursos geográficos faltantes",
"missingGeoAssetsMsg": "Faltan recursos geográficos. considere cambiar el activo activo o descargar uno seleccionado en la configuración.",
"invalidConfigOptions": "Opciones de configuración no válidas",
"invalidConfig": "Configuración no válida",
"create": "Error de creación del servicio",
"start": "Error de inicio del servicio"
},
"connectivity": {
"unexpected": "Falla inesperada",
"missingVpnPermission": "Permiso VPN faltante",
"missingNotificationPermission": "Permiso de notificación faltante",
"core": "Error central"
},
"profiles": {
"unexpected": "Error Inesperado",
"notFound": "Perfil no encontrado",
"invalidConfig": "Configuracion Invalida",
"invalidUrl": "URL Invalido"
},
"connection": {
"unexpected": "Error de conexión inesperado",
"timeout": "El tiempo de conexión expiro",
"badResponse": "Mala respuesta",
"connectionError": "Error de conexión",
"badCertificate": "Certificado malo"
},
"geoAssets": {
"unexpected": "Error inesperado",
"notUpdate": "Actualización no disponible",
"activeNotFound": "Activo geográfico activo no encontrado"
}
},
"play": {
"title": "Hiddify Next (vista previa)",
"short_description": "Auto, SSH, VLESS, Vmess, Trojan, Reality, Sing-Box, Clash, Xray, Shadowsocks",
"full_description": "El objetivo clave de HiddifyNext es proporcionar un cliente de túnel seguro, fácil de usar y eficiente. Le permite enrutar todo el tráfico o el tráfico de aplicaciones seleccionadas a un servidor remoto de su elección, utilizando el permiso del servicio VPN.Nota: No proporcionamos ningún servidor; Los usuarios deben garantizar que sus actividades en línea permanezcan privadas mediante el uso de su propio servidor autohospedado o servidores confiables. Soportamos servidores con:- Enlace de suscripción normal a V2ray/Xray- Enlace de suscripción a Choque- Enlace de suscripción a Sing-Box¿Cuáles son nuestras características únicas? - Fácil de usar - Optimizado y Rápido - Seleccionar automáticamente LowestPing - Mostrar información de uso del usuario. - Importe fácilmente un subvínculo con un solo clic mediante enlaces profundos - Gratis y sin anuncios - Cambie fácilmente los subvínculos de usuario - más y másApoyo:- Todos los protocolos soportados por Sing-Box- VLESS + xtls realidad, visión- VMESS- troyano- Calcetines Shoadow- Realidad-V2ray-Histria2-TUIC-SSH- SombraTLSEl código fuente existe en https://github.com/hiddify/Hiddify-NextEl núcleo de la aplicación se basa en sing-box de código abierto.Descripción del permiso:- Servicio VPN: como el objetivo de esta aplicación es proporcionar un cliente de túnel seguro, fácil de usar y eficiente, necesitamos este permiso para poder enrutar el tráfico a través del túnel al servidor remoto.- CONSULTAR TODOS LOS PAQUETES: este permiso se utiliza para permitir a los usuarios incluir o excluir aplicaciones específicas para la tunelización.- RECIBIR ARRANQUE COMPLETADO: este permiso se puede habilitar o deshabilitar desde la configuración de la aplicación para activar esta aplicación al iniciar el dispositivo.- PUBLICAR NOTIFICACIONES: este permiso es esencial ya que empleamos un servicio en primer plano para garantizar el funcionamiento continuo del servicio VPN.- Esta aplicación está libre de publicidad. Los datos analíticos y de fallos solo se producen con el consentimiento explícito del usuario en el primer uso de la aplicación."
},
"connection": {
"tapToConnect": "Toque para conectarse",
"connecting": "Conectando",
"disconnecting": "Desconectando",
"connected": "Conectado",
"experimentalNotice": "Funciones experimentales en uso",
"experimentalNoticeMsg": "Ha habilitado algunas funciones experimentales que podrían afectar la calidad de la conexión y provocar errores inesperados. Siempre puede cambiar o restablecer estas opciones desde la página de opciones de configuración.",
"disableExperimentalNotice": "No volver a mostrar"
},
"config": {
"resetBtn": "Restablecer opciones",
"serviceMode": "Modo de servicio",
"serviceModes": {
"proxy": "Proxy",
"systemProxy": "Sistema Proxy",
"tun": "VPN"
},
"section": {
"route": "Opciones de ruta",
"dns": "Opciones de DNS",
"inbound": "Opciones entrantes",
"mux": "Multiplexer",
"outbound": "Opciones de salida",
"tlsTricks": "Trucos TLS",
"warp": "WARP Options",
"misc": "Opciones varias"
},
"warpConsent": {
"title": "Consentimiento WARP de Cloudflare",
"description(rich)": "Cloudflare WARP es un proveedor de VPN WireGuard gratuito. Al habilitar esta opción, acepta los ${tos(Términos de servicio)} y ${privacy(Política de privacidad)} de Cloudflare WARP."
},
"pageTitle": "Opciones de configuración",
"logLevel": "Registro del Nivel",
"resolveDestination": "Resolver Destino",
"ipv6Mode": "Ruta IPv6",
"ipv6Modes": {
"disable": "Desactivar",
"enable": "Activar",
"prefer": "Preferido",
"only": "Exclusivo"
},
"remoteDnsAddress": "DNS Remoto",
"remoteDnsDomainStrategy": "Estrategia de dominio DNS remoto",
"directDnsAddress": "DNS Directo",
"directDnsDomainStrategy": "Estrategia de dominio DNS directo",
"mixedPort": "Puerto Mixto",
"localDnsPort": "Puerto DNS local",
"allowConnectionFromLan": "Permitir conexión desde LAN",
"tunImplementation": "Implementación de TUN",
"mtu": "MTU",
"connectionTestUrl": "URL de prueba de conexión",
"urlTestInterval": "URL Prueba de Intervalo",
"enableClashApi": "Habilitar API de choque",
"clashApiPort": "Puerto API de choque",
"enableTun": "Habilitar sintonización",
"setSystemProxy": "Establecer proxy del sistema",
"enableDnsRouting": "Habilitar enrutamiento DNS",
"enableFakeDns": "Habilitar DNS falso",
"bypassLan": "Omitir LAN",
"strictRoute": "Ruta estricta",
"enableTlsFragment": "Habilitar fragmento TLS",
"tlsFragmentSize": "Tamaño del fragmento TLS",
"tlsFragmentSleep": "Sueño de fragmento TLS",
"enableTlsMixedSniCase": "Habilitar caso SNI mixto TLS",
"enableTlsPadding": "Habilitar el relleno TLS",
"tlsPaddingSize": "Relleno TLS",
"enableMux": "Enable Mux",
"muxProtocol": "Mux Protocol",
"muxMaxStreams": "Max Concurrent Streams",
"enableWarp": "Enable WARP",
"warpDetourMode": "Detour Mode",
"warpDetourModes": {
"inbound": "Detour WARP through proxies",
"outbound": "Detour proxies through WARP"
},
"warpLicenseKey": "License Key",
"warpCleanIp": "Clean IP",
"warpPort": "Port",
"warpNoise": "Noise"
}
}

View File

@@ -24,16 +24,7 @@
"home": { "home": {
"pageTitle": "خانه", "pageTitle": "خانه",
"emptyProfilesMsg": "با افزودن پروفایل شروع کنید", "emptyProfilesMsg": "با افزودن پروفایل شروع کنید",
"noActiveProfileMsg": "یک پروفایل انتخاب کنید", "noActiveProfileMsg": "یک پروفایل انتخاب کنید"
"connection": {
"tapToConnect": "برای اتصال ضربه بزنید",
"connecting": "در حال اتصال",
"disconnecting": "در حال قطع اتصال",
"connected": "متصل",
"experimentalNotice": "اخطار استفاده از ویژگی‌های آزمایشی",
"experimentalNoticeMsg": "برخی از ویژگی‌های آزمایشی را فعال کرده‌اید که ممکن است بر کیفیت اتصال تأثیر بگذارد و باعث خطاهای غیرمنتظره شود. همیشه می‌توانید این گزینه‌ها را از صفحه تنظیمات کانفیگ تغییر دهید یا بازنشانی کنید.",
"disableExperimentalNotice": "دیگر نشان نده"
}
}, },
"stats": { "stats": {
"trafficLive": "مصرف لحظه‌ای", "trafficLive": "مصرف لحظه‌ای",
@@ -193,77 +184,6 @@
"hideSystemApps": "مخفی کردن برنامه‌های سیستمی", "hideSystemApps": "مخفی کردن برنامه‌های سیستمی",
"clearSelection": "حذف انتخاب‌ها" "clearSelection": "حذف انتخاب‌ها"
}, },
"config": {
"resetBtn": "گزینه ها را بازنشانی کنید",
"serviceMode": "حالت سرویس",
"serviceModes": {
"proxy": "فقط سرویس پروکسی",
"systemProxy": "تنظیم پروکسی سیستم",
"tun": "VPN"
},
"section": {
"route": "تنظیمات مسیریاب",
"dns": "تنظیمات DNS",
"inbound": "تنظیمات ورودی",
"mux": "Multiplexer",
"outbound": "Outbound Options",
"tlsTricks": "TLS Tricks",
"warp": "WARP Options",
"misc": "تنظیمات متفرقه"
},
"warpConsent": {
"title": "رضایت Cloudflare WARP",
"description(rich)": "Cloudflare WARP یک ارائه دهنده رایگان WireGuard VPN است. با فعال کردن این گزینه، با ${tos(شرایط خدمات)} و ${privacy(خط‌مشی رازداری)} Cloudflare WARP موافقت می‌کنید."
},
"pageTitle": "تنظیمات کانفیگ",
"logLevel": "سطح لاگ",
"resolveDestination": "جایگذاری IP مقصد",
"ipv6Mode": "مسیریابی IPV6 در تونل",
"ipv6Modes": {
"disable": "غیرفعال",
"enable": "فعال",
"prefer": "ترجیح",
"only": "فقط"
},
"remoteDnsAddress": "DNS خارجی",
"remoteDnsDomainStrategy": "حالت DNS خارجی",
"directDnsAddress": "DNS مستقیم",
"directDnsDomainStrategy": "حالت DNS مستقیم",
"mixedPort": "پورت همه منظوره",
"localDnsPort": "پورت DNS داخلی",
"allowConnectionFromLan": "Allow Connection from LAN",
"tunImplementation": "مدل تونل",
"mtu": "سایز بسته‌ها",
"connectionTestUrl": "لینک تست اتصال",
"urlTestInterval": "زمان تست اتصال",
"enableClashApi": "فعالسازی کلش",
"clashApiPort": "پورت کلش",
"enableTun": "فعال سازی تونل",
"setSystemProxy": "تنظیم پروکسی سیستم",
"enableDnsRouting": "Enable DNS Routing",
"enableFakeDns": "Enable Fake DNS",
"bypassLan": "Bypass Lan",
"strictRoute": "Strict Route",
"enableTlsFragment": "Enable TLS Fragment",
"tlsFragmentSize": "TLS Fragment Size",
"tlsFragmentSleep": "TLS Fragment Sleep",
"enableTlsMixedSniCase": "Enable TLS Mixed SNI Case",
"enableTlsPadding": "Enable TLS Padding",
"tlsPaddingSize": "TLS Padding",
"enableMux": "Enable Mux",
"muxProtocol": "Mux Protocol",
"muxMaxStreams": "Max Concurrent Streams",
"enableWarp": "Enable WARP",
"warpDetourMode": "Detour Mode",
"warpDetourModes": {
"inbound": "Detour WARP through proxies",
"outbound": "Detour proxies through WARP"
},
"warpLicenseKey": "License Key",
"warpCleanIp": "Clean IP",
"warpPort": "Port",
"warpNoise": "Noise"
},
"geoAssets": { "geoAssets": {
"pageTitle": "فایل‌های مسیریابی", "pageTitle": "فایل‌های مسیریابی",
"geoip": "Geoip", "geoip": "Geoip",
@@ -355,5 +275,85 @@
"title": "هیدیفای نکست Hiddify", "title": "هیدیفای نکست Hiddify",
"short_description": "Auto, SSH, VLESS, Vmess, Trojan, Reality, Sing-Box, Clash, Xray, Shadowsocks", "short_description": "Auto, SSH, VLESS, Vmess, Trojan, Reality, Sing-Box, Clash, Xray, Shadowsocks",
"full_description": "هدف اصلی Hiddify ارائه یک کلاینت تونل زنی ایمن، کاربرپسند و کارآمد است. این به شما امکان می دهد تا با استفاده از مجوز VPN-Service، تمام ترافیک یا ترافیک برنامه انتخابی را به یک سرور راه دور مورد نظر خود هدایت کنید.\n\nتوجه: ما هیچ سروری ارائه نمی دهیم. کاربران موظفند با استفاده از سرورهای خود میزبان یا سرورهای مورد اعتماد، فعالیت‌های آنلاین خود را خصوصی نگه دارند.\n \nما از سرورهایی با موارد زیر پشتیبانی می کنیم:\n- لینک اشتراک V2ray/Xray معمولی\n- لینک اشتراک کلش\n- لینک اشتراک Sing-Box\n\nویژگی های منحصر به فرد ما چیست؟\n - کاربر پسند\n - بهینه و سریع\n - به طور خودکار LowestPing را انتخاب کنید\n - نمایش اطلاعات استفاده کاربر\n - به راحتی لینک فرعی را با یک کلیک با استفاده از دیپ لینک وارد کنید\n - رایگان و بدون تبلیغات\n - به راحتی پیوندهای فرعی کاربر را تغییر دهید\n - بیشتر و بیشتر\n\nحمایت کردن:\n- تمام پروتکل های پشتیبانی شده توسط Sing-Box\n- VLESS + xtls \n- VMESS\n- تروجان\n- ShoadowSocks\n- ریالیتی\n- V2ray\n- هیستریا 2\n- TUIC\n- SSH\n- ShadowTLS\n\n\nکد منبع در https://github.com/hiddify/Hiddify-Next وجود دارد\nهسته برنامه بر اساس sing-box منبع باز است.\n\nتوضیحات مجوز:\n- سرویس VPN: از آنجا که هدف این برنامه ارائه یک کلاینت تونل زنی ایمن، کاربر پسند و کارآمد است، ما به این مجوز نیاز داریم تا بتوانیم ترافیک را از طریق تونل به سرور راه دور هدایت کنیم.\n- QUERY ALL PACKAGES: این مجوز برای اجازه دادن به کاربران برای گنجاندن یا حذف برنامه های کاربردی خاص برای تونل زدن استفاده می شود.\n- دریافت بوت تکمیل شد: این مجوز را می توان از تنظیمات برنامه فعال یا غیرفعال کرد تا این برنامه پس از بوت شدن دستگاه فعال شود.\n- اعلان های ارسالی: این مجوز ضروری است زیرا ما از یک سرویس پیش زمینه برای اطمینان از عملکرد مداوم سرویس VPN استفاده می کنیم.\n- این برنامه بدون تبلیغات است. تجزیه و تحلیل و داده های اشکال فقط با رضایت صریح کاربر در اولین استفاده از برنامه اتفاق می افتد." "full_description": "هدف اصلی Hiddify ارائه یک کلاینت تونل زنی ایمن، کاربرپسند و کارآمد است. این به شما امکان می دهد تا با استفاده از مجوز VPN-Service، تمام ترافیک یا ترافیک برنامه انتخابی را به یک سرور راه دور مورد نظر خود هدایت کنید.\n\nتوجه: ما هیچ سروری ارائه نمی دهیم. کاربران موظفند با استفاده از سرورهای خود میزبان یا سرورهای مورد اعتماد، فعالیت‌های آنلاین خود را خصوصی نگه دارند.\n \nما از سرورهایی با موارد زیر پشتیبانی می کنیم:\n- لینک اشتراک V2ray/Xray معمولی\n- لینک اشتراک کلش\n- لینک اشتراک Sing-Box\n\nویژگی های منحصر به فرد ما چیست؟\n - کاربر پسند\n - بهینه و سریع\n - به طور خودکار LowestPing را انتخاب کنید\n - نمایش اطلاعات استفاده کاربر\n - به راحتی لینک فرعی را با یک کلیک با استفاده از دیپ لینک وارد کنید\n - رایگان و بدون تبلیغات\n - به راحتی پیوندهای فرعی کاربر را تغییر دهید\n - بیشتر و بیشتر\n\nحمایت کردن:\n- تمام پروتکل های پشتیبانی شده توسط Sing-Box\n- VLESS + xtls \n- VMESS\n- تروجان\n- ShoadowSocks\n- ریالیتی\n- V2ray\n- هیستریا 2\n- TUIC\n- SSH\n- ShadowTLS\n\n\nکد منبع در https://github.com/hiddify/Hiddify-Next وجود دارد\nهسته برنامه بر اساس sing-box منبع باز است.\n\nتوضیحات مجوز:\n- سرویس VPN: از آنجا که هدف این برنامه ارائه یک کلاینت تونل زنی ایمن، کاربر پسند و کارآمد است، ما به این مجوز نیاز داریم تا بتوانیم ترافیک را از طریق تونل به سرور راه دور هدایت کنیم.\n- QUERY ALL PACKAGES: این مجوز برای اجازه دادن به کاربران برای گنجاندن یا حذف برنامه های کاربردی خاص برای تونل زدن استفاده می شود.\n- دریافت بوت تکمیل شد: این مجوز را می توان از تنظیمات برنامه فعال یا غیرفعال کرد تا این برنامه پس از بوت شدن دستگاه فعال شود.\n- اعلان های ارسالی: این مجوز ضروری است زیرا ما از یک سرویس پیش زمینه برای اطمینان از عملکرد مداوم سرویس VPN استفاده می کنیم.\n- این برنامه بدون تبلیغات است. تجزیه و تحلیل و داده های اشکال فقط با رضایت صریح کاربر در اولین استفاده از برنامه اتفاق می افتد."
},
"connection": {
"tapToConnect": "برای اتصال ضربه بزنید",
"connecting": "در حال اتصال",
"disconnecting": "در حال قطع اتصال",
"connected": "متصل",
"experimentalNotice": "اخطار استفاده از ویژگی‌های آزمایشی",
"experimentalNoticeMsg": "برخی از ویژگی‌های آزمایشی را فعال کرده‌اید که ممکن است بر کیفیت اتصال تأثیر بگذارد و باعث خطاهای غیرمنتظره شود. همیشه می‌توانید این گزینه‌ها را از صفحه تنظیمات کانفیگ تغییر دهید یا بازنشانی کنید.",
"disableExperimentalNotice": "دیگر نشان نده"
},
"config": {
"resetBtn": "گزینه ها را بازنشانی کنید",
"serviceMode": "حالت سرویس",
"serviceModes": {
"proxy": "فقط سرویس پروکسی",
"systemProxy": "تنظیم پروکسی سیستم",
"tun": "VPN"
},
"section": {
"route": "تنظیمات مسیریاب",
"dns": "تنظیمات DNS",
"inbound": "تنظیمات ورودی",
"mux": "Multiplexer",
"outbound": "Outbound Options",
"tlsTricks": "TLS Tricks",
"warp": "WARP Options",
"misc": "تنظیمات متفرقه"
},
"warpConsent": {
"title": "رضایت Cloudflare WARP",
"description(rich)": "Cloudflare WARP یک ارائه دهنده رایگان WireGuard VPN است. با فعال کردن این گزینه، با ${tos(شرایط خدمات)} و ${privacy(خط‌مشی رازداری)} Cloudflare WARP موافقت می‌کنید."
},
"pageTitle": "تنظیمات کانفیگ",
"logLevel": "سطح لاگ",
"resolveDestination": "جایگذاری IP مقصد",
"ipv6Mode": "مسیریابی IPV6 در تونل",
"ipv6Modes": {
"disable": "غیرفعال",
"enable": "فعال",
"prefer": "ترجیح",
"only": "فقط"
},
"remoteDnsAddress": "DNS خارجی",
"remoteDnsDomainStrategy": "حالت DNS خارجی",
"directDnsAddress": "DNS مستقیم",
"directDnsDomainStrategy": "حالت DNS مستقیم",
"mixedPort": "پورت همه منظوره",
"localDnsPort": "پورت DNS داخلی",
"allowConnectionFromLan": "Allow Connection from LAN",
"tunImplementation": "مدل تونل",
"mtu": "سایز بسته‌ها",
"connectionTestUrl": "لینک تست اتصال",
"urlTestInterval": "زمان تست اتصال",
"enableClashApi": "فعالسازی کلش",
"clashApiPort": "پورت کلش",
"enableTun": "فعال سازی تونل",
"setSystemProxy": "تنظیم پروکسی سیستم",
"enableDnsRouting": "Enable DNS Routing",
"enableFakeDns": "Enable Fake DNS",
"bypassLan": "Bypass Lan",
"strictRoute": "Strict Route",
"enableTlsFragment": "Enable TLS Fragment",
"tlsFragmentSize": "TLS Fragment Size",
"tlsFragmentSleep": "TLS Fragment Sleep",
"enableTlsMixedSniCase": "Enable TLS Mixed SNI Case",
"enableTlsPadding": "Enable TLS Padding",
"tlsPaddingSize": "TLS Padding",
"enableMux": "Enable Mux",
"muxProtocol": "Mux Protocol",
"muxMaxStreams": "Max Concurrent Streams",
"enableWarp": "Enable WARP",
"warpDetourMode": "Detour Mode",
"warpDetourModes": {
"inbound": "Detour WARP through proxies",
"outbound": "Detour proxies through WARP"
},
"warpLicenseKey": "License Key",
"warpCleanIp": "Clean IP",
"warpPort": "Port",
"warpNoise": "Noise"
} }
} }

View File

@@ -26,16 +26,7 @@
"home": { "home": {
"pageTitle": "Inicio", "pageTitle": "Inicio",
"emptyProfilesMsg": "Comece adicionando um perfil de assinatura", "emptyProfilesMsg": "Comece adicionando um perfil de assinatura",
"noActiveProfileMsg": "Escolha um perfil", "noActiveProfileMsg": "Escolha um perfil"
"connection": {
"tapToConnect": "Toque para conectar",
"connecting": "Conectando",
"disconnecting": "Desconectando",
"connected": "Conectado",
"experimentalNotice": "Recursos experimentais em uso",
"experimentalNoticeMsg": "Você ativou alguns recursos experimentais que podem afetar a qualidade da conexão e causar erros inesperados. Você sempre pode alterar ou redefinir essas opções na página de opções de configuração.",
"disableExperimentalNotice": "Não mostrar novamente"
}
}, },
"stats": { "stats": {
"trafficLive": "Tráfego ao vivo", "trafficLive": "Tráfego ao vivo",
@@ -216,82 +207,6 @@
"hideSystemApps": "Ocultar aplicativos do sistema", "hideSystemApps": "Ocultar aplicativos do sistema",
"clearSelection": "Limpar seleção" "clearSelection": "Limpar seleção"
}, },
"config": {
"resetBtn": "Redefinir opções",
"serviceMode": "Modo de serviço",
"serviceModes": {
"proxy": "Somente serviço de proxy",
"systemProxy": "Definir proxy do sistema",
"tun": "VPN",
"tunService": "Serviço VPN"
},
"section": {
"route": "Opções de rota",
"dns": "Opções de DNS",
"inbound": "Opções de entrada",
"mux": "Multiplexador",
"outbound": "Opções de saída",
"tlsTricks": "Truques TLS",
"warp": "Opções de WARP",
"misc": "Opções diversas"
},
"warpConsent": {
"title": "Consentimento WARP da Cloudflare",
"description(rich)": "Cloudflare WARP é um provedor VPN WireGuard gratuito. Ao ativar esta opção, você concorda com os ${tos(Termos de Serviço)} e ${privacy(Política de Privacidade)} do WARP da Cloudflare."
},
"generateWarpConfig": "Gerar configuração WARP",
"missingWarpConfig": "Configuração WARP ausente",
"warpConfigGenerated": "Configuração WARP gerada",
"pageTitle": "Opções de configuração",
"logLevel": "Nível de registro",
"resolveDestination": "Resolver destino",
"ipv6Mode": "Rota IPv6",
"ipv6Modes": {
"disable": "Desabilitar",
"enable": "Habilitar",
"prefer": "Preferido",
"only": "Exclusivo"
},
"remoteDnsAddress": "DNS remoto",
"remoteDnsDomainStrategy": "Estratégia de Domínio DNS Remoto",
"directDnsAddress": "DNS direto",
"directDnsDomainStrategy": "Estratégia de Domínio DNS Direto",
"mixedPort": "Porta Mista",
"localDnsPort": "Porta DNS local",
"allowConnectionFromLan": "Permitir conexão da LAN",
"tunImplementation": "Implementação TUN",
"mtu": "MTU",
"connectionTestUrl": "URL de teste de conexão",
"urlTestInterval": "Intervalo de teste de URL",
"enableClashApi": "Ativar API Clash",
"clashApiPort": "Porta da API Clash",
"enableTun": "Ativar TUN",
"setSystemProxy": "Definir proxy do sistema",
"enableDnsRouting": "Habilitar roteamento DNS",
"enableFakeDns": "Habilitar DNS falso",
"bypassLan": "Ignorar LAN",
"strictRoute": "Rota Estrita",
"enableTlsFragment": "Habilitar fragmento TLS",
"tlsFragmentSize": "Tamanho do fragmento TLS",
"tlsFragmentSleep": "Suspensão do fragmento TLS",
"enableTlsMixedSniCase": "Habilitar caso SNI misto TLS",
"enableTlsPadding": "Habilitar preenchimento TLS",
"tlsPaddingSize": "Preenchimento TLS",
"enableMux": "Habilitar Mux",
"muxProtocol": "Protocolo Mux",
"muxMaxStreams": "Máximo de fluxos simultâneos",
"enableWarp": "Habilitar WARP",
"warpDetourMode": "Modo de desvio",
"warpDetourModes": {
"inbound": "Desvie o WARP através de proxies",
"outbound": "Desviar proxies através do WARP"
},
"warpLicenseKey": "Chave de licença",
"warpCleanIp": "Limpar IP",
"warpPort": "Porta",
"warpNoise": "Contagem de ruído",
"warpNoiseDelay": "Atraso de ruído"
},
"geoAssets": { "geoAssets": {
"pageTitle": "Ativos de roteamento", "pageTitle": "Ativos de roteamento",
"geoip": "GeoIP", "geoip": "GeoIP",
@@ -382,5 +297,90 @@
"play": { "play": {
"title": "Hiddify (Pré-visualização)", "title": "Hiddify (Pré-visualização)",
"short_description": "Auto, SSH, VLESS, Vmess, Trojan, Reality, Sing-Box, Clash, Xray, Shadowsocks" "short_description": "Auto, SSH, VLESS, Vmess, Trojan, Reality, Sing-Box, Clash, Xray, Shadowsocks"
},
"connection": {
"tapToConnect": "Toque para conectar",
"connecting": "Conectando",
"disconnecting": "Desconectando",
"connected": "Conectado",
"experimentalNotice": "Recursos experimentais em uso",
"experimentalNoticeMsg": "Você ativou alguns recursos experimentais que podem afetar a qualidade da conexão e causar erros inesperados. Você sempre pode alterar ou redefinir essas opções na página de opções de configuração.",
"disableExperimentalNotice": "Não mostrar novamente"
},
"config": {
"resetBtn": "Redefinir opções",
"serviceMode": "Modo de serviço",
"serviceModes": {
"proxy": "Somente serviço de proxy",
"systemProxy": "Definir proxy do sistema",
"tun": "VPN",
"tunService": "Serviço VPN"
},
"section": {
"route": "Opções de rota",
"dns": "Opções de DNS",
"inbound": "Opções de entrada",
"mux": "Multiplexador",
"outbound": "Opções de saída",
"tlsTricks": "Truques TLS",
"warp": "Opções de WARP",
"misc": "Opções diversas"
},
"warpConsent": {
"title": "Consentimento WARP da Cloudflare",
"description(rich)": "Cloudflare WARP é um provedor VPN WireGuard gratuito. Ao ativar esta opção, você concorda com os ${tos(Termos de Serviço)} e ${privacy(Política de Privacidade)} do WARP da Cloudflare."
},
"generateWarpConfig": "Gerar configuração WARP",
"missingWarpConfig": "Configuração WARP ausente",
"warpConfigGenerated": "Configuração WARP gerada",
"pageTitle": "Opções de configuração",
"logLevel": "Nível de registro",
"resolveDestination": "Resolver destino",
"ipv6Mode": "Rota IPv6",
"ipv6Modes": {
"disable": "Desabilitar",
"enable": "Habilitar",
"prefer": "Preferido",
"only": "Exclusivo"
},
"remoteDnsAddress": "DNS remoto",
"remoteDnsDomainStrategy": "Estratégia de Domínio DNS Remoto",
"directDnsAddress": "DNS direto",
"directDnsDomainStrategy": "Estratégia de Domínio DNS Direto",
"mixedPort": "Porta Mista",
"localDnsPort": "Porta DNS local",
"allowConnectionFromLan": "Permitir conexão da LAN",
"tunImplementation": "Implementação TUN",
"mtu": "MTU",
"connectionTestUrl": "URL de teste de conexão",
"urlTestInterval": "Intervalo de teste de URL",
"enableClashApi": "Ativar API Clash",
"clashApiPort": "Porta da API Clash",
"enableTun": "Ativar TUN",
"setSystemProxy": "Definir proxy do sistema",
"enableDnsRouting": "Habilitar roteamento DNS",
"enableFakeDns": "Habilitar DNS falso",
"bypassLan": "Ignorar LAN",
"strictRoute": "Rota Estrita",
"enableTlsFragment": "Habilitar fragmento TLS",
"tlsFragmentSize": "Tamanho do fragmento TLS",
"tlsFragmentSleep": "Suspensão do fragmento TLS",
"enableTlsMixedSniCase": "Habilitar caso SNI misto TLS",
"enableTlsPadding": "Habilitar preenchimento TLS",
"tlsPaddingSize": "Preenchimento TLS",
"enableMux": "Habilitar Mux",
"muxProtocol": "Protocolo Mux",
"muxMaxStreams": "Máximo de fluxos simultâneos",
"enableWarp": "Habilitar WARP",
"warpDetourMode": "Modo de desvio",
"warpDetourModes": {
"inbound": "Desvie o WARP através de proxies",
"outbound": "Desviar proxies através do WARP"
},
"warpLicenseKey": "Chave de licença",
"warpCleanIp": "Limpar IP",
"warpPort": "Porta",
"warpNoise": "Contagem de ruído",
"warpNoiseDelay": "Atraso de ruído"
} }
} }

View File

@@ -24,16 +24,7 @@
"home": { "home": {
"pageTitle": "Главная", "pageTitle": "Главная",
"emptyProfilesMsg": "Начните с добавления профиля подписки", "emptyProfilesMsg": "Начните с добавления профиля подписки",
"noActiveProfileMsg": "Выберите профиль", "noActiveProfileMsg": "Выберите профиль"
"connection": {
"tapToConnect": "Нажмите для подключения",
"connecting": "Подключение",
"disconnecting": "Отключение",
"connected": "Подключено",
"experimentalNotice": "Экспериментальные функции в использовании",
"experimentalNoticeMsg": "Вы включили некоторые экспериментальные функции, которые могут повлиять на качество соединения и вызвать непредвиденные ошибки. Вы всегда можете изменить или сбросить эти параметры на странице параметров конфигурации.",
"disableExperimentalNotice": "Больше не показывать"
}
}, },
"stats": { "stats": {
"trafficLive": "Текущий трафик", "trafficLive": "Текущий трафик",
@@ -193,77 +184,6 @@
"hideSystemApps": "Скрыть системные приложения", "hideSystemApps": "Скрыть системные приложения",
"clearSelection": "Очистить выбор" "clearSelection": "Очистить выбор"
}, },
"config": {
"resetBtn": "Сбросить параметры",
"serviceMode": "Режим работы",
"serviceModes": {
"proxy": "Прокси",
"systemProxy": "Системный прокси",
"tun": "VPN"
},
"section": {
"route": "Варианты маршрутизации",
"dns": "Параметры DNS",
"inbound": "Входящие параметры",
"mux": "Multiplexer",
"outbound": "Outbound Options",
"tlsTricks": "TLS Tricks",
"warp": "WARP Options",
"misc": "Разные параметры"
},
"warpConsent": {
"title": "Согласие Cloudflare WARP",
"description(rich)": "Cloudflare WARP — бесплатный провайдер WireGuard VPN. Включая эту опцию, вы соглашаетесь с ${tos(Условиями обслуживания)} и ${privacy(Политикой конфиденциальности)} Cloudflare WARP."
},
"pageTitle": "Параметры конфигурации",
"logLevel": "Подробность журналирования",
"resolveDestination": "Определять назначение",
"ipv6Mode": "Маршрутизация IPv6",
"ipv6Modes": {
"disable": "Отключено",
"enable": "Включено",
"prefer": "Предпочтительно",
"only": "Исключительно"
},
"remoteDnsAddress": "Удалённый DNS",
"remoteDnsDomainStrategy": "Стратегия удалённого домена DNS",
"directDnsAddress": "Прямой DNS",
"directDnsDomainStrategy": "Стратегия прямого домена DNS",
"mixedPort": "Смешанный порт",
"localDnsPort": "Локальный порт DNS",
"allowConnectionFromLan": "Allow Connection from LAN",
"tunImplementation": "Реализация TUN",
"mtu": "MTU",
"connectionTestUrl": "URL проверки подключения",
"urlTestInterval": "Интервал проверки URL",
"enableClashApi": "Использовать Clash API",
"clashApiPort": "Порт Clash API",
"enableTun": "Использовать TUN",
"setSystemProxy": "Использовать системный прокси",
"enableDnsRouting": "Enable DNS Routing",
"enableFakeDns": "Использовать поддельную DNS",
"bypassLan": "Обход локальной сети",
"strictRoute": "Строгая маршрутизация",
"enableTlsFragment": "Enable TLS Fragment",
"tlsFragmentSize": "TLS Fragment Size",
"tlsFragmentSleep": "TLS Fragment Sleep",
"enableTlsMixedSniCase": "Enable TLS Mixed SNI Case",
"enableTlsPadding": "Enable TLS Padding",
"tlsPaddingSize": "TLS Padding",
"enableMux": "Enable Mux",
"muxProtocol": "Mux Protocol",
"muxMaxStreams": "Max Concurrent Streams",
"enableWarp": "Enable WARP",
"warpDetourMode": "Detour Mode",
"warpDetourModes": {
"inbound": "Detour WARP through proxies",
"outbound": "Detour proxies through WARP"
},
"warpLicenseKey": "License Key",
"warpCleanIp": "Clean IP",
"warpPort": "Port",
"warpNoise": "Noise"
},
"geoAssets": { "geoAssets": {
"pageTitle": "Активы маршрутизации", "pageTitle": "Активы маршрутизации",
"geoip": "Geoip", "geoip": "Geoip",
@@ -355,5 +275,85 @@
"title": "Hiddify (Preview)", "title": "Hiddify (Preview)",
"short_description": "Автовыбор, SSH, VLESS, Vmess, Trojan, Reality, Sing-Box, Clash, Xray, Shadowsocks", "short_description": "Автовыбор, SSH, VLESS, Vmess, Trojan, Reality, Sing-Box, Clash, Xray, Shadowsocks",
"full_description": "Основная цель Hiddify — предоставить безопасный, удобный и эффективный клиент туннелирования. Он позволяет направлять весь трафик или трафик выбранного приложения на указанный Вами удалённый сервер.\nПримечание: мы не предоставляем серверы, пользователи должны сами обеспечивать конфиденциальность своих действий в Интернете, используя собственный сервер или доверенные серверы. Поддерживаются сервера с:— Обычной ссылка на подписку V2ray/Xray— Ссылкой на подписку Clash— Ссылко на подписку на SingBox\nВ чём уникальные особенности? — Удобство — Оптимизация и скорость — Автоматический выбор минимальной задержки — Отображение информации об использовании — Простой импорт ссылок одним щелчком мыши — Бесплатно и без рекламы — Простое переключение ссылок — …и много больше\nПоддерживаются:• Все протоколы, поддерживаемые Sing-Box• VLESS + xtls reality, vision• VMESS• Trojan• ShoadowSocks• Reality• V2ray• Hystria2• TUIC• SSH• ShadowTLS\nИсходный код доступен по адресу https://github.com/hiddify/Hiddify-Next.Ядро приложения основано на открытом исходном коде SingBox.\nОписание разрешений:— СЛУЖБА VPN: поскольку целью данного приложения является предоставление безопасного, удобного и эффективного клиента туннелирования, это разрешение необходимо, чтобы иметь возможность направлять трафик через туннель на удалённый сервер.— ЗАПРОС ВСЕХ ПАКЕТОВ: это разрешение позволяет добавлять или удалять определённые приложения из списка для туннелирования.— ИНФОРМИРОВАНИЕ О ЗАВЕРШЕНИИ ЗАГРУЗКИ: это разрешение можно включить или отключить в настройках приложения, чтобы (де)активировать запуск приложения при загрузке устройства.— ПОСТОЯННОЕ УВЕДОМЛЕНИЕ: это разрешение необходимо, так как используется приоритетная служба для обеспечения непрерывной работы VPN.— Приложение не содержит рекламы. Сбор аналитики и данных о сбоях происходят только с явного согласия пользователя при первом использовании приложения." "full_description": "Основная цель Hiddify — предоставить безопасный, удобный и эффективный клиент туннелирования. Он позволяет направлять весь трафик или трафик выбранного приложения на указанный Вами удалённый сервер.\nПримечание: мы не предоставляем серверы, пользователи должны сами обеспечивать конфиденциальность своих действий в Интернете, используя собственный сервер или доверенные серверы. Поддерживаются сервера с:— Обычной ссылка на подписку V2ray/Xray— Ссылкой на подписку Clash— Ссылко на подписку на SingBox\nВ чём уникальные особенности? — Удобство — Оптимизация и скорость — Автоматический выбор минимальной задержки — Отображение информации об использовании — Простой импорт ссылок одним щелчком мыши — Бесплатно и без рекламы — Простое переключение ссылок — …и много больше\nПоддерживаются:• Все протоколы, поддерживаемые Sing-Box• VLESS + xtls reality, vision• VMESS• Trojan• ShoadowSocks• Reality• V2ray• Hystria2• TUIC• SSH• ShadowTLS\nИсходный код доступен по адресу https://github.com/hiddify/Hiddify-Next.Ядро приложения основано на открытом исходном коде SingBox.\nОписание разрешений:— СЛУЖБА VPN: поскольку целью данного приложения является предоставление безопасного, удобного и эффективного клиента туннелирования, это разрешение необходимо, чтобы иметь возможность направлять трафик через туннель на удалённый сервер.— ЗАПРОС ВСЕХ ПАКЕТОВ: это разрешение позволяет добавлять или удалять определённые приложения из списка для туннелирования.— ИНФОРМИРОВАНИЕ О ЗАВЕРШЕНИИ ЗАГРУЗКИ: это разрешение можно включить или отключить в настройках приложения, чтобы (де)активировать запуск приложения при загрузке устройства.— ПОСТОЯННОЕ УВЕДОМЛЕНИЕ: это разрешение необходимо, так как используется приоритетная служба для обеспечения непрерывной работы VPN.— Приложение не содержит рекламы. Сбор аналитики и данных о сбоях происходят только с явного согласия пользователя при первом использовании приложения."
},
"connection": {
"tapToConnect": "Нажмите для подключения",
"connecting": "Подключение",
"disconnecting": "Отключение",
"connected": "Подключено",
"experimentalNotice": "Экспериментальные функции в использовании",
"experimentalNoticeMsg": "Вы включили некоторые экспериментальные функции, которые могут повлиять на качество соединения и вызвать непредвиденные ошибки. Вы всегда можете изменить или сбросить эти параметры на странице параметров конфигурации.",
"disableExperimentalNotice": "Больше не показывать"
},
"config": {
"resetBtn": "Сбросить параметры",
"serviceMode": "Режим работы",
"serviceModes": {
"proxy": "Прокси",
"systemProxy": "Системный прокси",
"tun": "VPN"
},
"section": {
"route": "Варианты маршрутизации",
"dns": "Параметры DNS",
"inbound": "Входящие параметры",
"mux": "Multiplexer",
"outbound": "Outbound Options",
"tlsTricks": "TLS Tricks",
"warp": "WARP Options",
"misc": "Разные параметры"
},
"warpConsent": {
"title": "Согласие Cloudflare WARP",
"description(rich)": "Cloudflare WARP — бесплатный провайдер WireGuard VPN. Включая эту опцию, вы соглашаетесь с ${tos(Условиями обслуживания)} и ${privacy(Политикой конфиденциальности)} Cloudflare WARP."
},
"pageTitle": "Параметры конфигурации",
"logLevel": "Подробность журналирования",
"resolveDestination": "Определять назначение",
"ipv6Mode": "Маршрутизация IPv6",
"ipv6Modes": {
"disable": "Отключено",
"enable": "Включено",
"prefer": "Предпочтительно",
"only": "Исключительно"
},
"remoteDnsAddress": "Удалённый DNS",
"remoteDnsDomainStrategy": "Стратегия удалённого домена DNS",
"directDnsAddress": "Прямой DNS",
"directDnsDomainStrategy": "Стратегия прямого домена DNS",
"mixedPort": "Смешанный порт",
"localDnsPort": "Локальный порт DNS",
"allowConnectionFromLan": "Allow Connection from LAN",
"tunImplementation": "Реализация TUN",
"mtu": "MTU",
"connectionTestUrl": "URL проверки подключения",
"urlTestInterval": "Интервал проверки URL",
"enableClashApi": "Использовать Clash API",
"clashApiPort": "Порт Clash API",
"enableTun": "Использовать TUN",
"setSystemProxy": "Использовать системный прокси",
"enableDnsRouting": "Enable DNS Routing",
"enableFakeDns": "Использовать поддельную DNS",
"bypassLan": "Обход локальной сети",
"strictRoute": "Строгая маршрутизация",
"enableTlsFragment": "Enable TLS Fragment",
"tlsFragmentSize": "TLS Fragment Size",
"tlsFragmentSleep": "TLS Fragment Sleep",
"enableTlsMixedSniCase": "Enable TLS Mixed SNI Case",
"enableTlsPadding": "Enable TLS Padding",
"tlsPaddingSize": "TLS Padding",
"enableMux": "Enable Mux",
"muxProtocol": "Mux Protocol",
"muxMaxStreams": "Max Concurrent Streams",
"enableWarp": "Enable WARP",
"warpDetourMode": "Detour Mode",
"warpDetourModes": {
"inbound": "Detour WARP through proxies",
"outbound": "Detour proxies through WARP"
},
"warpLicenseKey": "License Key",
"warpCleanIp": "Clean IP",
"warpPort": "Port",
"warpNoise": "Noise"
} }
} }

View File

@@ -24,16 +24,7 @@
"home": { "home": {
"pageTitle": "Ana Sayfa", "pageTitle": "Ana Sayfa",
"emptyProfilesMsg": "Aboneliği profili ekleyerek başlayın", "emptyProfilesMsg": "Aboneliği profili ekleyerek başlayın",
"noActiveProfileMsg": "Profil seçin", "noActiveProfileMsg": "Profil seçin"
"connection": {
"tapToConnect": "Bağlanmak için dokunun",
"connecting": "Bağlanıyor",
"disconnecting": "Bağlantı kesiliyor",
"connected": "Bağlandı",
"experimentalNotice": "Kullanımdaki Deneysel Özellikler",
"experimentalNoticeMsg": "Bağlantı kalitesini etkileyebilecek ve beklenmeyen hatalara neden olabilecek bazı deneysel özellikleri etkinleştirdiniz. Bu seçenekleri istediğiniz zaman Yapılandırma seçenekleri sayfasından değiştirebilir veya sıfırlayabilirsiniz.",
"disableExperimentalNotice": "Bir daha gösterme"
}
}, },
"stats": { "stats": {
"trafficLive": "Canlı Trafik", "trafficLive": "Canlı Trafik",
@@ -193,77 +184,6 @@
"hideSystemApps": "Sistem uygulamalarını gizle", "hideSystemApps": "Sistem uygulamalarını gizle",
"clearSelection": "Seçimi temizle" "clearSelection": "Seçimi temizle"
}, },
"config": {
"resetBtn": "Ayarları sıfırla",
"serviceMode": "Servis modu",
"serviceModes": {
"proxy": "Proxy",
"systemProxy": "Sistem Proxy",
"tun": "VPN"
},
"section": {
"route": "Rota Seçenekleri",
"dns": "DNS Seçenekleri",
"inbound": "Gelen Seçenekler",
"mux": "Multiplexer",
"outbound": "Outbound Options",
"tlsTricks": "TLS Tricks",
"warp": "WARP Options",
"misc": "Çeşitli Seçenekler"
},
"warpConsent": {
"title": "Cloudflare WARP Onayı",
"description(rich)": "Cloudflare WARP ücretsiz bir WireGuard VPN sağlayıcısıdır. Bu seçeneği etkinleştirerek Cloudflare WARP'ın ${tos(Hizmet Şartları)} ve ${privacy(Gizlilik Politikası)}'nı kabul etmiş olursunuz."
},
"pageTitle": "Yapılandırma Seçenekleri",
"logLevel": "Log Seviyesi",
"resolveDestination": "Hedefi Çöz",
"ipv6Mode": "IPv6 Rotası",
"ipv6Modes": {
"disable": "Devre dışı bırak",
"enable": "Etkinleştir",
"prefer": "Tercih edilen",
"only": "Özel"
},
"remoteDnsAddress": "Uzak DNS",
"remoteDnsDomainStrategy": "Uzak DNS Domain Stratejisi",
"directDnsAddress": "Doğrudan DNS",
"directDnsDomainStrategy": "Doğrudan DNS Domain Stratejisi",
"mixedPort": "Mixed Port",
"localDnsPort": "Yerel DNS Bağlantı Noktası",
"allowConnectionFromLan": "Allow Connection from LAN",
"tunImplementation": "TUN İmplementasyonu",
"mtu": "MTU",
"connectionTestUrl": "Bağlantı Testi URL'i",
"urlTestInterval": "URL Test Aralığı",
"enableClashApi": "Clash API'yi etkinleştir",
"clashApiPort": "Clash API Bağlantı Noktası",
"enableTun": "TUN'u etkinleştir",
"setSystemProxy": "Sistem Proxy'sini Ayarla",
"enableDnsRouting": "Enable DNS Routing",
"enableFakeDns": "Sahte DNS'yi Etkinleştir",
"bypassLan": "Lan'ı Atla",
"strictRoute": "Kesin Rota",
"enableTlsFragment": "Enable TLS Fragment",
"tlsFragmentSize": "TLS Fragment Size",
"tlsFragmentSleep": "TLS Fragment Sleep",
"enableTlsMixedSniCase": "Enable TLS Mixed SNI Case",
"enableTlsPadding": "Enable TLS Padding",
"tlsPaddingSize": "TLS Padding",
"enableMux": "Enable Mux",
"muxProtocol": "Mux Protocol",
"muxMaxStreams": "Max Concurrent Streams",
"enableWarp": "Enable WARP",
"warpDetourMode": "Detour Mode",
"warpDetourModes": {
"inbound": "Detour WARP through proxies",
"outbound": "Detour proxies through WARP"
},
"warpLicenseKey": "License Key",
"warpCleanIp": "Clean IP",
"warpPort": "Port",
"warpNoise": "Noise"
},
"geoAssets": { "geoAssets": {
"pageTitle": "Varlıkları Yönlendirme", "pageTitle": "Varlıkları Yönlendirme",
"geoip": "Geoip", "geoip": "Geoip",
@@ -355,5 +275,85 @@
"title": "Hiddify (Önizleme)", "title": "Hiddify (Önizleme)",
"short_description": "Otomatik, SSH, VLESS, Vmess, Trojan, Reality, Sing-Box, Clash, Xray, Shadowsocks", "short_description": "Otomatik, SSH, VLESS, Vmess, Trojan, Reality, Sing-Box, Clash, Xray, Shadowsocks",
"full_description": "Hiddify'in temel hedefi güvenli, kullanıcı dostu ve verimli bir tünel istemcisi sağlamaktır. VPN Hizmeti iznini kullanarak tüm trafiği veya seçilen uygulama trafiğini seçtiğiniz uzak bir sunucuya yönlendirmenizi sağlar. Not: Herhangi bir sunucu sağlamıyoruz; kullanıcıların kendi barındırılan sunucularını veya güvenilir sunucularını kullanarak çevrimiçi etkinliklerinin gizli kalmasını sağlamaları gerekir. Sunucuları aşağıdakilerle destekliyoruz: - Normal V2ray/Xray Abonelik Bağlantısı - Clash Abonelik Bağlantısı - Sing-Box Abonelik Bağlantısı Benzersiz özelliklerimiz nelerdir? - Kullanıcı Dostu - Optimize Edilmiş ve Hızlı - En Düşük Ping'i otomatik olarak seçin - Kullanıcı kullanım bilgilerini gösterin - Derin bağlantı kullanarak tek tıklamayla alt bağlantıyı kolayca içe aktarın - Ücretsiz ve ADS Yok - Kullanıcı alt bağlantılarını kolayca değiştirin - giderek daha fazla Destek: - Sing-Box tarafından desteklenen tüm Protokoller - VLESS + xtls gerçeklik, vizyon - VMESS - Trojan - ShoadowSocks - Reality - V2ray - Hystria2 - TUIC - SSH - ShadowTLS Kaynak kodu https://github.com/hiddify/Hiddify-Next adresinde mevcuttur. Uygulama çekirdeği açık tabanlıdır. kaynak şarkı kutusu. İzin Açıklaması: - VPN Hizmeti: Bu uygulamanın amacı güvenli, kullanıcı dostu ve verimli bir tünel istemcisi sağlamak olduğundan, trafiği tünel aracılığıyla uzak sunucuya yönlendirebilmek için bu izne ihtiyacımız var. - TÜM PAKETLERİ SORGULAYIN: Bu izin, kullanıcıların tünelleme için belirli uygulamaları dahil etmesine veya hariç tutmasına izin vermek için kullanılır. - ALMA ÖNYÜKLEME TAMAMLANDI: Bu izin, cihaz önyüklemesi sırasında bu uygulamayı etkinleştirmek için uygulama ayarlarından etkinleştirilebilir veya devre dışı bırakılabilir. - BİLDİRİMLER SONRASI: VPN hizmetinin sürekli çalışmasını sağlamak için bir ön plan hizmeti kullandığımız için bu izin önemlidir. - Bu uygulama reklam içermez. Analitik ve kilitlenme verileri yalnızca uygulamanın ilk kullanımında kullanıcının açık rızası ile gerçekleşir." "full_description": "Hiddify'in temel hedefi güvenli, kullanıcı dostu ve verimli bir tünel istemcisi sağlamaktır. VPN Hizmeti iznini kullanarak tüm trafiği veya seçilen uygulama trafiğini seçtiğiniz uzak bir sunucuya yönlendirmenizi sağlar. Not: Herhangi bir sunucu sağlamıyoruz; kullanıcıların kendi barındırılan sunucularını veya güvenilir sunucularını kullanarak çevrimiçi etkinliklerinin gizli kalmasını sağlamaları gerekir. Sunucuları aşağıdakilerle destekliyoruz: - Normal V2ray/Xray Abonelik Bağlantısı - Clash Abonelik Bağlantısı - Sing-Box Abonelik Bağlantısı Benzersiz özelliklerimiz nelerdir? - Kullanıcı Dostu - Optimize Edilmiş ve Hızlı - En Düşük Ping'i otomatik olarak seçin - Kullanıcı kullanım bilgilerini gösterin - Derin bağlantı kullanarak tek tıklamayla alt bağlantıyı kolayca içe aktarın - Ücretsiz ve ADS Yok - Kullanıcı alt bağlantılarını kolayca değiştirin - giderek daha fazla Destek: - Sing-Box tarafından desteklenen tüm Protokoller - VLESS + xtls gerçeklik, vizyon - VMESS - Trojan - ShoadowSocks - Reality - V2ray - Hystria2 - TUIC - SSH - ShadowTLS Kaynak kodu https://github.com/hiddify/Hiddify-Next adresinde mevcuttur. Uygulama çekirdeği açık tabanlıdır. kaynak şarkı kutusu. İzin Açıklaması: - VPN Hizmeti: Bu uygulamanın amacı güvenli, kullanıcı dostu ve verimli bir tünel istemcisi sağlamak olduğundan, trafiği tünel aracılığıyla uzak sunucuya yönlendirebilmek için bu izne ihtiyacımız var. - TÜM PAKETLERİ SORGULAYIN: Bu izin, kullanıcıların tünelleme için belirli uygulamaları dahil etmesine veya hariç tutmasına izin vermek için kullanılır. - ALMA ÖNYÜKLEME TAMAMLANDI: Bu izin, cihaz önyüklemesi sırasında bu uygulamayı etkinleştirmek için uygulama ayarlarından etkinleştirilebilir veya devre dışı bırakılabilir. - BİLDİRİMLER SONRASI: VPN hizmetinin sürekli çalışmasını sağlamak için bir ön plan hizmeti kullandığımız için bu izin önemlidir. - Bu uygulama reklam içermez. Analitik ve kilitlenme verileri yalnızca uygulamanın ilk kullanımında kullanıcının açık rızası ile gerçekleşir."
},
"connection": {
"tapToConnect": "Bağlanmak için dokunun",
"connecting": "Bağlanıyor",
"disconnecting": "Bağlantı kesiliyor",
"connected": "Bağlandı",
"experimentalNotice": "Kullanımdaki Deneysel Özellikler",
"experimentalNoticeMsg": "Bağlantı kalitesini etkileyebilecek ve beklenmeyen hatalara neden olabilecek bazı deneysel özellikleri etkinleştirdiniz. Bu seçenekleri istediğiniz zaman Yapılandırma seçenekleri sayfasından değiştirebilir veya sıfırlayabilirsiniz.",
"disableExperimentalNotice": "Bir daha gösterme"
},
"config": {
"resetBtn": "Ayarları sıfırla",
"serviceMode": "Servis modu",
"serviceModes": {
"proxy": "Proxy",
"systemProxy": "Sistem Proxy",
"tun": "VPN"
},
"section": {
"route": "Rota Seçenekleri",
"dns": "DNS Seçenekleri",
"inbound": "Gelen Seçenekler",
"mux": "Multiplexer",
"outbound": "Outbound Options",
"tlsTricks": "TLS Tricks",
"warp": "WARP Options",
"misc": "Çeşitli Seçenekler"
},
"warpConsent": {
"title": "Cloudflare WARP Onayı",
"description(rich)": "Cloudflare WARP ücretsiz bir WireGuard VPN sağlayıcısıdır. Bu seçeneği etkinleştirerek Cloudflare WARP'ın ${tos(Hizmet Şartları)} ve ${privacy(Gizlilik Politikası)}'nı kabul etmiş olursunuz."
},
"pageTitle": "Yapılandırma Seçenekleri",
"logLevel": "Log Seviyesi",
"resolveDestination": "Hedefi Çöz",
"ipv6Mode": "IPv6 Rotası",
"ipv6Modes": {
"disable": "Devre dışı bırak",
"enable": "Etkinleştir",
"prefer": "Tercih edilen",
"only": "Özel"
},
"remoteDnsAddress": "Uzak DNS",
"remoteDnsDomainStrategy": "Uzak DNS Domain Stratejisi",
"directDnsAddress": "Doğrudan DNS",
"directDnsDomainStrategy": "Doğrudan DNS Domain Stratejisi",
"mixedPort": "Mixed Port",
"localDnsPort": "Yerel DNS Bağlantı Noktası",
"allowConnectionFromLan": "Allow Connection from LAN",
"tunImplementation": "TUN İmplementasyonu",
"mtu": "MTU",
"connectionTestUrl": "Bağlantı Testi URL'i",
"urlTestInterval": "URL Test Aralığı",
"enableClashApi": "Clash API'yi etkinleştir",
"clashApiPort": "Clash API Bağlantı Noktası",
"enableTun": "TUN'u etkinleştir",
"setSystemProxy": "Sistem Proxy'sini Ayarla",
"enableDnsRouting": "Enable DNS Routing",
"enableFakeDns": "Sahte DNS'yi Etkinleştir",
"bypassLan": "Lan'ı Atla",
"strictRoute": "Kesin Rota",
"enableTlsFragment": "Enable TLS Fragment",
"tlsFragmentSize": "TLS Fragment Size",
"tlsFragmentSleep": "TLS Fragment Sleep",
"enableTlsMixedSniCase": "Enable TLS Mixed SNI Case",
"enableTlsPadding": "Enable TLS Padding",
"tlsPaddingSize": "TLS Padding",
"enableMux": "Enable Mux",
"muxProtocol": "Mux Protocol",
"muxMaxStreams": "Max Concurrent Streams",
"enableWarp": "Enable WARP",
"warpDetourMode": "Detour Mode",
"warpDetourModes": {
"inbound": "Detour WARP through proxies",
"outbound": "Detour proxies through WARP"
},
"warpLicenseKey": "License Key",
"warpCleanIp": "Clean IP",
"warpPort": "Port",
"warpNoise": "Noise"
} }
} }

View File

@@ -26,16 +26,7 @@
"home": { "home": {
"pageTitle": "主页", "pageTitle": "主页",
"emptyProfilesMsg": "首先添加订阅配置文件", "emptyProfilesMsg": "首先添加订阅配置文件",
"noActiveProfileMsg": "选择配置文件", "noActiveProfileMsg": "选择配置文件"
"connection": {
"tapToConnect": "点击连接",
"connecting": "正在连接",
"disconnecting": "正在断开连接",
"connected": "已连接",
"experimentalNotice": "使用中的实验功能",
"experimentalNoticeMsg": "您启用了一些实验性功能,这些功能可能会影响连接质量并导致意外错误。您始终可以从“配置选项”页面更改或重置这些选项。",
"disableExperimentalNotice": "不再显示"
}
}, },
"stats": { "stats": {
"trafficLive": "实时流量", "trafficLive": "实时流量",
@@ -216,82 +207,6 @@
"hideSystemApps": "隐藏系统应用程序", "hideSystemApps": "隐藏系统应用程序",
"clearSelection": "清空选项" "clearSelection": "清空选项"
}, },
"config": {
"resetBtn": "重置选项",
"serviceMode": "服务模式",
"serviceModes": {
"proxy": "仅代理",
"systemProxy": "系统代理",
"tun": "VPN",
"tunService": "VPN服务"
},
"section": {
"route": "路由选项",
"dns": "DNS 选项",
"inbound": "入站选项",
"mux": "复用器",
"outbound": "出站选项",
"tlsTricks": "TLS Tricks",
"warp": "WARP 选项",
"misc": "其他选项"
},
"warpConsent": {
"title": "Cloudflare WARP 同意",
"description(rich)": "Cloudflare WARP 是免费的 WireGuard VPN 提供商。启用此选项即表示您同意 Cloudflare WARP 的 ${tos(服务条款)} 和 ${privacy(隐私政策)}"
},
"generateWarpConfig": "生成WARP配置文件",
"missingWarpConfig": "WARP配置缺失",
"warpConfigGenerated": "WARP 配置已生成",
"pageTitle": "配置选项",
"logLevel": "日志级别",
"resolveDestination": "解析目标地址",
"ipv6Mode": "IPv6 路由",
"ipv6Modes": {
"disable": "禁用",
"enable": "启用",
"prefer": "首选",
"only": "仅"
},
"remoteDnsAddress": "远程 DNS",
"remoteDnsDomainStrategy": "远程 DNS 域名策略",
"directDnsAddress": "直连 DNS",
"directDnsDomainStrategy": "直连 DNS 域名策略",
"mixedPort": "混合端口",
"localDnsPort": "本地 DNS 端口",
"allowConnectionFromLan": "允许局域网连接",
"tunImplementation": "TUN 实现",
"mtu": "MTU",
"connectionTestUrl": "连接测试网址",
"urlTestInterval": "网址测试间隔",
"enableClashApi": "启用 Clash API",
"clashApiPort": "Clash API 端口",
"enableTun": "启用 TUN",
"setSystemProxy": "设置系统代理",
"enableDnsRouting": "启用 DNS 路由",
"enableFakeDns": "启用 Fake DNS",
"bypassLan": "绕过局域网",
"strictRoute": "严格路由",
"enableTlsFragment": "启用 TLS 数据分段",
"tlsFragmentSize": "TLS 分段大小",
"tlsFragmentSleep": "TLS 分段休眠",
"enableTlsMixedSniCase": "启用 TLS 混合 SNI 情形",
"enableTlsPadding": "启用 TLS 填充",
"tlsPaddingSize": "TLS 填充",
"enableMux": "启用Mux多路复用",
"muxProtocol": "Mux多路复用控制",
"muxMaxStreams": "Mux最大并发数",
"enableWarp": "启用 WARP",
"warpDetourMode": "链式代理",
"warpDetourModes": {
"inbound": "通过代理绕过 WARP",
"outbound": "通过 WARP 绕过代理"
},
"warpLicenseKey": "许可证密钥",
"warpCleanIp": "干净 IP",
"warpPort": "端口",
"warpNoise": "噪音",
"warpNoiseDelay": "噪音延迟"
},
"geoAssets": { "geoAssets": {
"pageTitle": "路由资源文件", "pageTitle": "路由资源文件",
"geoip": "Geoip", "geoip": "Geoip",
@@ -383,5 +298,90 @@
"title": "Hiddify预览", "title": "Hiddify预览",
"short_description": "自动SSH, VLESS, Vmess, Trojan, Reality, Sing-Box, Clash, Xray, Shadowsocks", "short_description": "自动SSH, VLESS, Vmess, Trojan, Reality, Sing-Box, Clash, Xray, Shadowsocks",
"full_description": "Hiddify 的主要目标是提供安全、用户友好且高效的隧道客户端。它使您能够利用 VPN 服务权限将所有流量或选定的应用程序流量路由到您选择的远程服务器。\n\n注我们不提供任何服务器用户需要使用自己托管的服务器或可信的服务器来确保您在线活动的私密性。\n \n我们支持以下类型的服务器\n- 普通 V2ray/Xray 订阅链接\n- Clash 订阅链接\n- Sing-Box 订阅链接\n\n我们的特色是什么\n\n- 用户友好\n- 优化和高速\n- 自动选择最低延迟\n- 显示用户使用信息\n- 通过一键链接轻松导入\n- 免费且无广告\n- 轻松切换线路\n- 等等\n\n支持\n- Sing-Box 支持的所有协议\n- VLESS + XTLS Reality、Vision 协议\n- VMESS\n- Trojan\n- Shoadowsocks\n- Reality\n- V2ray\n- Hystria2\n- TUIC\n- SSH\n- ShadowTLS\n\n\n源代码位于 https://github.com/hiddify/Hiddify-Next\n应用程序核心基于开源的 Sing-Box。\n\n权限说明\n\n- VPN 服务:由于此应用程序的目标是提供安全、用户友好和高效的隧道客户端,我们需要此权限以能够通过隧道将流量路由到远程服务器。\n获取应用程序列表此权限用于允许用户包括或排除特定应用程序以进行隧道传输。\n- 接收开机广播:可以从应用程序设置中启用或禁用此权限,以便在设备启动时激活此应用程序。\n- 发送通知:此权限是必需的,因为我们使用前台服务来确保 VPN 服务的持续运行。\n- 本应用程序没有广告。分析和崩溃数据仅在首次使用应用程序时经用户明确同意的情况下发生。" "full_description": "Hiddify 的主要目标是提供安全、用户友好且高效的隧道客户端。它使您能够利用 VPN 服务权限将所有流量或选定的应用程序流量路由到您选择的远程服务器。\n\n注我们不提供任何服务器用户需要使用自己托管的服务器或可信的服务器来确保您在线活动的私密性。\n \n我们支持以下类型的服务器\n- 普通 V2ray/Xray 订阅链接\n- Clash 订阅链接\n- Sing-Box 订阅链接\n\n我们的特色是什么\n\n- 用户友好\n- 优化和高速\n- 自动选择最低延迟\n- 显示用户使用信息\n- 通过一键链接轻松导入\n- 免费且无广告\n- 轻松切换线路\n- 等等\n\n支持\n- Sing-Box 支持的所有协议\n- VLESS + XTLS Reality、Vision 协议\n- VMESS\n- Trojan\n- Shoadowsocks\n- Reality\n- V2ray\n- Hystria2\n- TUIC\n- SSH\n- ShadowTLS\n\n\n源代码位于 https://github.com/hiddify/Hiddify-Next\n应用程序核心基于开源的 Sing-Box。\n\n权限说明\n\n- VPN 服务:由于此应用程序的目标是提供安全、用户友好和高效的隧道客户端,我们需要此权限以能够通过隧道将流量路由到远程服务器。\n获取应用程序列表此权限用于允许用户包括或排除特定应用程序以进行隧道传输。\n- 接收开机广播:可以从应用程序设置中启用或禁用此权限,以便在设备启动时激活此应用程序。\n- 发送通知:此权限是必需的,因为我们使用前台服务来确保 VPN 服务的持续运行。\n- 本应用程序没有广告。分析和崩溃数据仅在首次使用应用程序时经用户明确同意的情况下发生。"
},
"connection": {
"tapToConnect": "点击连接",
"connecting": "正在连接",
"disconnecting": "正在断开连接",
"connected": "已连接",
"experimentalNotice": "使用中的实验功能",
"experimentalNoticeMsg": "您启用了一些实验性功能,这些功能可能会影响连接质量并导致意外错误。您始终可以从“配置选项”页面更改或重置这些选项。",
"disableExperimentalNotice": "不再显示"
},
"config": {
"resetBtn": "重置选项",
"serviceMode": "服务模式",
"serviceModes": {
"proxy": "仅代理",
"systemProxy": "系统代理",
"tun": "VPN",
"tunService": "VPN服务"
},
"section": {
"route": "路由选项",
"dns": "DNS 选项",
"inbound": "入站选项",
"mux": "复用器",
"outbound": "出站选项",
"tlsTricks": "TLS Tricks",
"warp": "WARP 选项",
"misc": "其他选项"
},
"warpConsent": {
"title": "Cloudflare WARP 同意",
"description(rich)": "Cloudflare WARP 是免费的 WireGuard VPN 提供商。启用此选项即表示您同意 Cloudflare WARP 的 ${tos(服务条款)} 和 ${privacy(隐私政策)}"
},
"generateWarpConfig": "生成WARP配置文件",
"missingWarpConfig": "WARP配置缺失",
"warpConfigGenerated": "WARP 配置已生成",
"pageTitle": "配置选项",
"logLevel": "日志级别",
"resolveDestination": "解析目标地址",
"ipv6Mode": "IPv6 路由",
"ipv6Modes": {
"disable": "禁用",
"enable": "启用",
"prefer": "首选",
"only": "仅"
},
"remoteDnsAddress": "远程 DNS",
"remoteDnsDomainStrategy": "远程 DNS 域名策略",
"directDnsAddress": "直连 DNS",
"directDnsDomainStrategy": "直连 DNS 域名策略",
"mixedPort": "混合端口",
"localDnsPort": "本地 DNS 端口",
"allowConnectionFromLan": "允许局域网连接",
"tunImplementation": "TUN 实现",
"mtu": "MTU",
"connectionTestUrl": "连接测试网址",
"urlTestInterval": "网址测试间隔",
"enableClashApi": "启用 Clash API",
"clashApiPort": "Clash API 端口",
"enableTun": "启用 TUN",
"setSystemProxy": "设置系统代理",
"enableDnsRouting": "启用 DNS 路由",
"enableFakeDns": "启用 Fake DNS",
"bypassLan": "绕过局域网",
"strictRoute": "严格路由",
"enableTlsFragment": "启用 TLS 数据分段",
"tlsFragmentSize": "TLS 分段大小",
"tlsFragmentSleep": "TLS 分段休眠",
"enableTlsMixedSniCase": "启用 TLS 混合 SNI 情形",
"enableTlsPadding": "启用 TLS 填充",
"tlsPaddingSize": "TLS 填充",
"enableMux": "启用Mux多路复用",
"muxProtocol": "Mux多路复用控制",
"muxMaxStreams": "Mux最大并发数",
"enableWarp": "启用 WARP",
"warpDetourMode": "链式代理",
"warpDetourModes": {
"inbound": "通过代理绕过 WARP",
"outbound": "通过 WARP 绕过代理"
},
"warpLicenseKey": "许可证密钥",
"warpCleanIp": "干净 IP",
"warpPort": "端口",
"warpNoise": "噪音",
"warpNoiseDelay": "噪音延迟"
} }
} }

View File

@@ -20,16 +20,7 @@
"home": { "home": {
"pageTitle": "主頁", "pageTitle": "主頁",
"emptyProfilesMsg": "首先新增訂閱設定檔", "emptyProfilesMsg": "首先新增訂閱設定檔",
"noActiveProfileMsg": "選擇設定檔", "noActiveProfileMsg": "選擇設定檔"
"connection": {
"tapToConnect": "點擊以連接",
"connecting": "連接中",
"disconnecting": "斷連中",
"connected": "已連接",
"experimentalNotice": "使用中的實驗性功能",
"experimentalNoticeMsg": "您啟用了一些實驗性功能,這些功能可能會影響連線品質並導致意外錯誤。您始終可以從「配置選項」頁面變更或重設這些選項。",
"disableExperimentalNotice": "不再提示"
}
}, },
"stats": { "stats": {
"trafficLive": "即時流量", "trafficLive": "即時流量",
@@ -189,62 +180,6 @@
"hideSystemApps": "隱藏系統應用程式", "hideSystemApps": "隱藏系統應用程式",
"clearSelection": "清空選項" "clearSelection": "清空選項"
}, },
"config": {
"resetBtn": "重置選項",
"serviceMode": "服務模式",
"serviceModes": {
"proxy": "僅代理",
"systemProxy": "系統代理",
"tun": "VPN"
},
"section": {
"route": "路由選項",
"dns": "DNS 選項",
"inbound": "入站選項",
"mux": "復用器",
"outbound": "出站選項",
"tlsTricks": "TLS Tricks",
"misc": "其他選項"
},
"pageTitle": "配置選項",
"logLevel": "日誌等級",
"resolveDestination": "解析目標地址",
"ipv6Mode": "IPv6 路由",
"ipv6Modes": {
"disable": "停用",
"enable": "啟用",
"prefer": "首選",
"only": "僅"
},
"remoteDnsAddress": "遠端 DNS",
"remoteDnsDomainStrategy": "遠端 DNS 網域策略",
"directDnsAddress": "直連 DNS",
"directDnsDomainStrategy": "直連 DNS 網域策略",
"mixedPort": "混合連接埠",
"localDnsPort": "本地 DNS 連接埠",
"allowConnectionFromLan": "允許區域網路連接",
"tunImplementation": "TUN 實現",
"mtu": "MTU",
"connectionTestUrl": "連接測試網址",
"urlTestInterval": "URL 測試間隔",
"enableClashApi": "啟用 Clash API",
"clashApiPort": "Clash API 連接埠",
"enableTun": "啟用 TUN",
"setSystemProxy": "設定系統代理",
"enableDnsRouting": "啟用 DNS 路由",
"enableFakeDns": "啟用 Fake DNS",
"bypassLan": "繞過區域網路",
"strictRoute": "嚴格路由",
"enableTlsFragment": "啟用 TLS 分段",
"tlsFragmentSize": "TLS 分段大小",
"tlsFragmentSleep": "TLS 分段睡眠",
"enableTlsMixedSniCase": "啟用 TLS 混合 SNI 情況",
"enableTlsPadding": "啟用 TLS 填充",
"tlsPaddingSize": "TLS 填充",
"enableMux": "啟用復用器",
"muxProtocol": "復用器控制",
"muxMaxStreams": "最大並發數"
},
"geoAssets": { "geoAssets": {
"pageTitle": "路由資源文件", "pageTitle": "路由資源文件",
"geoip": "Geoip", "geoip": "Geoip",
@@ -336,5 +271,70 @@
"title": "Hiddify Next預覽", "title": "Hiddify Next預覽",
"short_description": "自動、SSH、VLESS、Vmess、Trojan、Reality、Sing-Box、Clash、Xray、Shadowsocks", "short_description": "自動、SSH、VLESS、Vmess、Trojan、Reality、Sing-Box、Clash、Xray、Shadowsocks",
"full_description": "HiddifyNext 的主要目標是提供安全、使用者友好且高效率的隧道用戶端。它使您能夠利用 VPN 服務權限將所有流量或選定的應用程式流量路由到您選擇的遠端伺服器。\n\n註我們不提供任何伺服器使用者需要使用自己的自託管伺服器或受信任的伺服器來確保其線上活動的隱私。\n\n我們透過以下方式支援伺服器\n - 普通 V2ray/Xray 訂閱連結\n - Clash 訂閱連結\n - Sing-Box 訂閱連結\n\n 我們的獨特功能是什麼?\n - 使用者友善\n - 最佳化且快速\n - 自動選擇最低延遲\n - 顯示使用者使用資訊\n - 使用一鍵連結輕鬆導入\n - 免費且無廣告\n - 輕鬆切換線路\n - 等等\n 支援:\n - Sing-Box 支援的所有協定 \n - VLESS + XTLS Reality、Vision 協定 \n - VMESS\n - Trojan\n - ShoadowSocks\n - Reality\n - V2ray\n - Hystria2\n - TUIC \n - SSH\n - ShadowTLS\n\n\n 原始碼位於 https://github.com/hiddify/Hiddify-Next\n 應用程式核心基於開源的 Sing-Box。\n\n權限說明\n\n - VPN 服務:由於此應用程式的目標是提供安全性、使用者友好且高效的隧道用戶端,因此我們需要此權限才能透過隧道將流量路由到遠端伺服器。\n - 獲取應用程式列表:此權限用於允許使用者包含或排除隧道的特定應用程式。\n - 接收啟動廣播:可以從應用程式設定中啟用或停用此權限,以在裝置啟動時啟動此應用程式。\n - 發送通知:此權限至關重要,因為我們使用前台服務來確保 VPN 服務的持續運作。\n - 該應用程式沒有廣告。分析和崩潰數據僅在用戶首次使用應用程式時明確同意的情況下才會出現。" "full_description": "HiddifyNext 的主要目標是提供安全、使用者友好且高效率的隧道用戶端。它使您能夠利用 VPN 服務權限將所有流量或選定的應用程式流量路由到您選擇的遠端伺服器。\n\n註我們不提供任何伺服器使用者需要使用自己的自託管伺服器或受信任的伺服器來確保其線上活動的隱私。\n\n我們透過以下方式支援伺服器\n - 普通 V2ray/Xray 訂閱連結\n - Clash 訂閱連結\n - Sing-Box 訂閱連結\n\n 我們的獨特功能是什麼?\n - 使用者友善\n - 最佳化且快速\n - 自動選擇最低延遲\n - 顯示使用者使用資訊\n - 使用一鍵連結輕鬆導入\n - 免費且無廣告\n - 輕鬆切換線路\n - 等等\n 支援:\n - Sing-Box 支援的所有協定 \n - VLESS + XTLS Reality、Vision 協定 \n - VMESS\n - Trojan\n - ShoadowSocks\n - Reality\n - V2ray\n - Hystria2\n - TUIC \n - SSH\n - ShadowTLS\n\n\n 原始碼位於 https://github.com/hiddify/Hiddify-Next\n 應用程式核心基於開源的 Sing-Box。\n\n權限說明\n\n - VPN 服務:由於此應用程式的目標是提供安全性、使用者友好且高效的隧道用戶端,因此我們需要此權限才能透過隧道將流量路由到遠端伺服器。\n - 獲取應用程式列表:此權限用於允許使用者包含或排除隧道的特定應用程式。\n - 接收啟動廣播:可以從應用程式設定中啟用或停用此權限,以在裝置啟動時啟動此應用程式。\n - 發送通知:此權限至關重要,因為我們使用前台服務來確保 VPN 服務的持續運作。\n - 該應用程式沒有廣告。分析和崩潰數據僅在用戶首次使用應用程式時明確同意的情況下才會出現。"
},
"connection": {
"tapToConnect": "點擊以連接",
"connecting": "連接中",
"disconnecting": "斷連中",
"connected": "已連接",
"experimentalNotice": "使用中的實驗性功能",
"experimentalNoticeMsg": "您啟用了一些實驗性功能,這些功能可能會影響連線品質並導致意外錯誤。您始終可以從「配置選項」頁面變更或重設這些選項。",
"disableExperimentalNotice": "不再提示"
},
"config": {
"resetBtn": "重置選項",
"serviceMode": "服務模式",
"serviceModes": {
"proxy": "僅代理",
"systemProxy": "系統代理",
"tun": "VPN"
},
"section": {
"route": "路由選項",
"dns": "DNS 選項",
"inbound": "入站選項",
"mux": "復用器",
"outbound": "出站選項",
"tlsTricks": "TLS Tricks",
"misc": "其他選項"
},
"pageTitle": "配置選項",
"logLevel": "日誌等級",
"resolveDestination": "解析目標地址",
"ipv6Mode": "IPv6 路由",
"ipv6Modes": {
"disable": "停用",
"enable": "啟用",
"prefer": "首選",
"only": "僅"
},
"remoteDnsAddress": "遠端 DNS",
"remoteDnsDomainStrategy": "遠端 DNS 網域策略",
"directDnsAddress": "直連 DNS",
"directDnsDomainStrategy": "直連 DNS 網域策略",
"mixedPort": "混合連接埠",
"localDnsPort": "本地 DNS 連接埠",
"allowConnectionFromLan": "允許區域網路連接",
"tunImplementation": "TUN 實現",
"mtu": "MTU",
"connectionTestUrl": "連接測試網址",
"urlTestInterval": "URL 測試間隔",
"enableClashApi": "啟用 Clash API",
"clashApiPort": "Clash API 連接埠",
"enableTun": "啟用 TUN",
"setSystemProxy": "設定系統代理",
"enableDnsRouting": "啟用 DNS 路由",
"enableFakeDns": "啟用 Fake DNS",
"bypassLan": "繞過區域網路",
"strictRoute": "嚴格路由",
"enableTlsFragment": "啟用 TLS 分段",
"tlsFragmentSize": "TLS 分段大小",
"tlsFragmentSleep": "TLS 分段睡眠",
"enableTlsMixedSniCase": "啟用 TLS 混合 SNI 情況",
"enableTlsPadding": "啟用 TLS 填充",
"tlsPaddingSize": "TLS 填充",
"enableMux": "啟用復用器",
"muxProtocol": "復用器控制",
"muxMaxStreams": "最大並發數"
} }
} }

View File

@@ -35,7 +35,7 @@ class AdaptiveRootScaffold extends HookConsumerWidget {
), ),
NavigationDestination( NavigationDestination(
icon: const Icon(FluentIcons.box_edit_20_filled), icon: const Icon(FluentIcons.box_edit_20_filled),
label: t.settings.config.pageTitle, label: t.config.pageTitle,
), ),
NavigationDestination( NavigationDestination(
icon: const Icon(FluentIcons.settings_20_filled), icon: const Icon(FluentIcons.settings_20_filled),

View File

@@ -25,7 +25,7 @@ sealed class ConfigOptionFailure with _$ConfigOptionFailure, Failure {
message: null, message: null,
), ),
MissingWarpConfigFailure() => ( MissingWarpConfigFailure() => (
type: t.settings.config.missingWarpConfig, type: t.config.missingWarpConfig,
message: null, message: null,
), ),
}; };

View File

@@ -76,7 +76,7 @@ class ConfigOptionsPage extends HookConsumerWidget {
shrinkWrap: true, shrinkWrap: true,
slivers: [ slivers: [
NestedAppBar( NestedAppBar(
title: Text(t.settings.config.pageTitle), title: Text(t.config.pageTitle),
actions: [ actions: [
PopupMenuButton( PopupMenuButton(
icon: Icon(AdaptiveIcon(context).more), icon: Icon(AdaptiveIcon(context).more),
@@ -129,7 +129,7 @@ class ConfigOptionsPage extends HookConsumerWidget {
child: Text(t.settings.importOptions), child: Text(t.settings.importOptions),
), ),
PopupMenuItem( PopupMenuItem(
child: Text(t.settings.config.resetBtn), child: Text(t.config.resetBtn),
onTap: () async { onTap: () async {
await ref await ref
.read(configOptionNotifierProvider.notifier) .read(configOptionNotifierProvider.notifier)
@@ -150,19 +150,19 @@ class ConfigOptionsPage extends HookConsumerWidget {
selected: ref.watch(ConfigOptions.logLevel), selected: ref.watch(ConfigOptions.logLevel),
preferences: ref.watch(ConfigOptions.logLevel.notifier), preferences: ref.watch(ConfigOptions.logLevel.notifier),
choices: LogLevel.choices, choices: LogLevel.choices,
title: t.settings.config.logLevel, title: t.config.logLevel,
presentChoice: (value) => value.name.toUpperCase(), presentChoice: (value) => value.name.toUpperCase(),
), ),
const SettingsDivider(), const SettingsDivider(),
SettingsSection(t.settings.config.section.route), SettingsSection(t.config.section.route),
SwitchListTile( SwitchListTile(
title: Text(experimental(t.settings.config.bypassLan)), title: Text(experimental(t.config.bypassLan)),
value: ref.watch(ConfigOptions.bypassLan), value: ref.watch(ConfigOptions.bypassLan),
onChanged: onChanged:
ref.watch(ConfigOptions.bypassLan.notifier).update, ref.watch(ConfigOptions.bypassLan.notifier).update,
), ),
SwitchListTile( SwitchListTile(
title: Text(t.settings.config.resolveDestination), title: Text(t.config.resolveDestination),
value: ref.watch(ConfigOptions.resolveDestination), value: ref.watch(ConfigOptions.resolveDestination),
onChanged: ref onChanged: ref
.watch(ConfigOptions.resolveDestination.notifier) .watch(ConfigOptions.resolveDestination.notifier)
@@ -172,50 +172,50 @@ class ConfigOptionsPage extends HookConsumerWidget {
selected: ref.watch(ConfigOptions.ipv6Mode), selected: ref.watch(ConfigOptions.ipv6Mode),
preferences: ref.watch(ConfigOptions.ipv6Mode.notifier), preferences: ref.watch(ConfigOptions.ipv6Mode.notifier),
choices: IPv6Mode.values, choices: IPv6Mode.values,
title: t.settings.config.ipv6Mode, title: t.config.ipv6Mode,
presentChoice: (value) => value.present(t), presentChoice: (value) => value.present(t),
), ),
const SettingsDivider(), const SettingsDivider(),
SettingsSection(t.settings.config.section.dns), SettingsSection(t.config.section.dns),
ValuePreferenceWidget( ValuePreferenceWidget(
value: ref.watch(ConfigOptions.remoteDnsAddress), value: ref.watch(ConfigOptions.remoteDnsAddress),
preferences: preferences:
ref.watch(ConfigOptions.remoteDnsAddress.notifier), ref.watch(ConfigOptions.remoteDnsAddress.notifier),
title: t.settings.config.remoteDnsAddress, title: t.config.remoteDnsAddress,
), ),
ChoicePreferenceWidget( ChoicePreferenceWidget(
selected: ref.watch(ConfigOptions.remoteDnsDomainStrategy), selected: ref.watch(ConfigOptions.remoteDnsDomainStrategy),
preferences: ref preferences: ref
.watch(ConfigOptions.remoteDnsDomainStrategy.notifier), .watch(ConfigOptions.remoteDnsDomainStrategy.notifier),
choices: DomainStrategy.values, choices: DomainStrategy.values,
title: t.settings.config.remoteDnsDomainStrategy, title: t.config.remoteDnsDomainStrategy,
presentChoice: (value) => value.displayName, presentChoice: (value) => value.displayName,
), ),
ValuePreferenceWidget( ValuePreferenceWidget(
value: ref.watch(ConfigOptions.directDnsAddress), value: ref.watch(ConfigOptions.directDnsAddress),
preferences: preferences:
ref.watch(ConfigOptions.directDnsAddress.notifier), ref.watch(ConfigOptions.directDnsAddress.notifier),
title: t.settings.config.directDnsAddress, title: t.config.directDnsAddress,
), ),
ChoicePreferenceWidget( ChoicePreferenceWidget(
selected: ref.watch(ConfigOptions.directDnsDomainStrategy), selected: ref.watch(ConfigOptions.directDnsDomainStrategy),
preferences: ref preferences: ref
.watch(ConfigOptions.directDnsDomainStrategy.notifier), .watch(ConfigOptions.directDnsDomainStrategy.notifier),
choices: DomainStrategy.values, choices: DomainStrategy.values,
title: t.settings.config.directDnsDomainStrategy, title: t.config.directDnsDomainStrategy,
presentChoice: (value) => value.displayName, presentChoice: (value) => value.displayName,
), ),
SwitchListTile( SwitchListTile(
title: Text(t.settings.config.enableDnsRouting), title: Text(t.config.enableDnsRouting),
value: ref.watch(ConfigOptions.enableDnsRouting), value: ref.watch(ConfigOptions.enableDnsRouting),
onChanged: ref onChanged: ref
.watch(ConfigOptions.enableDnsRouting.notifier) .watch(ConfigOptions.enableDnsRouting.notifier)
.update, .update,
), ),
const SettingsDivider(), const SettingsDivider(),
SettingsSection(experimental(t.settings.config.section.mux)), SettingsSection(experimental(t.config.section.mux)),
SwitchListTile( SwitchListTile(
title: Text(t.settings.config.enableMux), title: Text(t.config.enableMux),
value: ref.watch(ConfigOptions.enableMux), value: ref.watch(ConfigOptions.enableMux),
onChanged: onChanged:
ref.watch(ConfigOptions.enableMux.notifier).update, ref.watch(ConfigOptions.enableMux.notifier).update,
@@ -224,28 +224,28 @@ class ConfigOptionsPage extends HookConsumerWidget {
selected: ref.watch(ConfigOptions.muxProtocol), selected: ref.watch(ConfigOptions.muxProtocol),
preferences: ref.watch(ConfigOptions.muxProtocol.notifier), preferences: ref.watch(ConfigOptions.muxProtocol.notifier),
choices: MuxProtocol.values, choices: MuxProtocol.values,
title: t.settings.config.muxProtocol, title: t.config.muxProtocol,
presentChoice: (value) => value.name, presentChoice: (value) => value.name,
), ),
ValuePreferenceWidget( ValuePreferenceWidget(
value: ref.watch(ConfigOptions.muxMaxStreams), value: ref.watch(ConfigOptions.muxMaxStreams),
preferences: preferences:
ref.watch(ConfigOptions.muxMaxStreams.notifier), ref.watch(ConfigOptions.muxMaxStreams.notifier),
title: t.settings.config.muxMaxStreams, title: t.config.muxMaxStreams,
inputToValue: int.tryParse, inputToValue: int.tryParse,
digitsOnly: true, digitsOnly: true,
), ),
const SettingsDivider(), const SettingsDivider(),
SettingsSection(t.settings.config.section.inbound), SettingsSection(t.config.section.inbound),
ChoicePreferenceWidget( ChoicePreferenceWidget(
selected: ref.watch(ConfigOptions.serviceMode), selected: ref.watch(ConfigOptions.serviceMode),
preferences: ref.watch(ConfigOptions.serviceMode.notifier), preferences: ref.watch(ConfigOptions.serviceMode.notifier),
choices: ServiceMode.choices, choices: ServiceMode.choices,
title: t.settings.config.serviceMode, title: t.config.serviceMode,
presentChoice: (value) => value.present(t), presentChoice: (value) => value.present(t),
), ),
SwitchListTile( SwitchListTile(
title: Text(t.settings.config.strictRoute), title: Text(t.config.strictRoute),
value: ref.watch(ConfigOptions.strictRoute), value: ref.watch(ConfigOptions.strictRoute),
onChanged: onChanged:
ref.watch(ConfigOptions.strictRoute.notifier).update, ref.watch(ConfigOptions.strictRoute.notifier).update,
@@ -255,13 +255,13 @@ class ConfigOptionsPage extends HookConsumerWidget {
preferences: preferences:
ref.watch(ConfigOptions.tunImplementation.notifier), ref.watch(ConfigOptions.tunImplementation.notifier),
choices: TunImplementation.values, choices: TunImplementation.values,
title: t.settings.config.tunImplementation, title: t.config.tunImplementation,
presentChoice: (value) => value.name, presentChoice: (value) => value.name,
), ),
ValuePreferenceWidget( ValuePreferenceWidget(
value: ref.watch(ConfigOptions.mixedPort), value: ref.watch(ConfigOptions.mixedPort),
preferences: ref.watch(ConfigOptions.mixedPort.notifier), preferences: ref.watch(ConfigOptions.mixedPort.notifier),
title: t.settings.config.mixedPort, title: t.config.mixedPort,
inputToValue: int.tryParse, inputToValue: int.tryParse,
digitsOnly: true, digitsOnly: true,
validateInput: isPort, validateInput: isPort,
@@ -269,14 +269,14 @@ class ConfigOptionsPage extends HookConsumerWidget {
ValuePreferenceWidget( ValuePreferenceWidget(
value: ref.watch(ConfigOptions.localDnsPort), value: ref.watch(ConfigOptions.localDnsPort),
preferences: ref.watch(ConfigOptions.localDnsPort.notifier), preferences: ref.watch(ConfigOptions.localDnsPort.notifier),
title: t.settings.config.localDnsPort, title: t.config.localDnsPort,
inputToValue: int.tryParse, inputToValue: int.tryParse,
digitsOnly: true, digitsOnly: true,
validateInput: isPort, validateInput: isPort,
), ),
SwitchListTile( SwitchListTile(
title: Text( title: Text(
experimental(t.settings.config.allowConnectionFromLan), experimental(t.config.allowConnectionFromLan),
), ),
value: ref.watch(ConfigOptions.allowConnectionFromLan), value: ref.watch(ConfigOptions.allowConnectionFromLan),
onChanged: ref onChanged: ref
@@ -285,10 +285,10 @@ class ConfigOptionsPage extends HookConsumerWidget {
), ),
const SettingsDivider(), const SettingsDivider(),
SettingsSection( SettingsSection(
experimental(t.settings.config.section.tlsTricks), experimental(t.config.section.tlsTricks),
), ),
SwitchListTile( SwitchListTile(
title: Text(t.settings.config.enableTlsFragment), title: Text(t.config.enableTlsFragment),
value: ref.watch(ConfigOptions.enableTlsFragment), value: ref.watch(ConfigOptions.enableTlsFragment),
onChanged: ref onChanged: ref
.watch(ConfigOptions.enableTlsFragment.notifier) .watch(ConfigOptions.enableTlsFragment.notifier)
@@ -298,7 +298,7 @@ class ConfigOptionsPage extends HookConsumerWidget {
value: ref.watch(ConfigOptions.tlsFragmentSize), value: ref.watch(ConfigOptions.tlsFragmentSize),
preferences: preferences:
ref.watch(ConfigOptions.tlsFragmentSize.notifier), ref.watch(ConfigOptions.tlsFragmentSize.notifier),
title: t.settings.config.tlsFragmentSize, title: t.config.tlsFragmentSize,
inputToValue: OptionalRange.tryParse, inputToValue: OptionalRange.tryParse,
presentValue: (value) => value.present(t), presentValue: (value) => value.present(t),
formatInputValue: (value) => value.format(), formatInputValue: (value) => value.format(),
@@ -307,20 +307,20 @@ class ConfigOptionsPage extends HookConsumerWidget {
value: ref.watch(ConfigOptions.tlsFragmentSleep), value: ref.watch(ConfigOptions.tlsFragmentSleep),
preferences: preferences:
ref.watch(ConfigOptions.tlsFragmentSleep.notifier), ref.watch(ConfigOptions.tlsFragmentSleep.notifier),
title: t.settings.config.tlsFragmentSleep, title: t.config.tlsFragmentSleep,
inputToValue: OptionalRange.tryParse, inputToValue: OptionalRange.tryParse,
presentValue: (value) => value.present(t), presentValue: (value) => value.present(t),
formatInputValue: (value) => value.format(), formatInputValue: (value) => value.format(),
), ),
SwitchListTile( SwitchListTile(
title: Text(t.settings.config.enableTlsMixedSniCase), title: Text(t.config.enableTlsMixedSniCase),
value: ref.watch(ConfigOptions.enableTlsMixedSniCase), value: ref.watch(ConfigOptions.enableTlsMixedSniCase),
onChanged: ref onChanged: ref
.watch(ConfigOptions.enableTlsMixedSniCase.notifier) .watch(ConfigOptions.enableTlsMixedSniCase.notifier)
.update, .update,
), ),
SwitchListTile( SwitchListTile(
title: Text(t.settings.config.enableTlsPadding), title: Text(t.config.enableTlsPadding),
value: ref.watch(ConfigOptions.enableTlsPadding), value: ref.watch(ConfigOptions.enableTlsPadding),
onChanged: ref onChanged: ref
.watch(ConfigOptions.enableTlsPadding.notifier) .watch(ConfigOptions.enableTlsPadding.notifier)
@@ -330,24 +330,24 @@ class ConfigOptionsPage extends HookConsumerWidget {
value: ref.watch(ConfigOptions.tlsPaddingSize), value: ref.watch(ConfigOptions.tlsPaddingSize),
preferences: preferences:
ref.watch(ConfigOptions.tlsPaddingSize.notifier), ref.watch(ConfigOptions.tlsPaddingSize.notifier),
title: t.settings.config.tlsPaddingSize, title: t.config.tlsPaddingSize,
inputToValue: OptionalRange.tryParse, inputToValue: OptionalRange.tryParse,
presentValue: (value) => value.format(), presentValue: (value) => value.format(),
formatInputValue: (value) => value.format(), formatInputValue: (value) => value.format(),
), ),
const SettingsDivider(), const SettingsDivider(),
SettingsSection(experimental(t.settings.config.section.warp)), SettingsSection(experimental(t.config.section.warp)),
WarpOptionsTiles(key: ConfigOptionSection._warpKey), WarpOptionsTiles(key: ConfigOptionSection._warpKey),
const SettingsDivider(), const SettingsDivider(),
SettingsSection(t.settings.config.section.misc), SettingsSection(t.config.section.misc),
ValuePreferenceWidget( ValuePreferenceWidget(
value: ref.watch(ConfigOptions.connectionTestUrl), value: ref.watch(ConfigOptions.connectionTestUrl),
preferences: preferences:
ref.watch(ConfigOptions.connectionTestUrl.notifier), ref.watch(ConfigOptions.connectionTestUrl.notifier),
title: t.settings.config.connectionTestUrl, title: t.config.connectionTestUrl,
), ),
ListTile( ListTile(
title: Text(t.settings.config.urlTestInterval), title: Text(t.config.urlTestInterval),
subtitle: Text( subtitle: Text(
ref ref
.watch(ConfigOptions.urlTestInterval) .watch(ConfigOptions.urlTestInterval)
@@ -355,7 +355,7 @@ class ConfigOptionsPage extends HookConsumerWidget {
), ),
onTap: () async { onTap: () async {
final urlTestInterval = await SettingsSliderDialog( final urlTestInterval = await SettingsSliderDialog(
title: t.settings.config.urlTestInterval, title: t.config.urlTestInterval,
initialValue: ref initialValue: ref
.watch(ConfigOptions.urlTestInterval) .watch(ConfigOptions.urlTestInterval)
.inMinutes .inMinutes
@@ -379,7 +379,7 @@ class ConfigOptionsPage extends HookConsumerWidget {
ValuePreferenceWidget( ValuePreferenceWidget(
value: ref.watch(ConfigOptions.clashApiPort), value: ref.watch(ConfigOptions.clashApiPort),
preferences: ref.watch(ConfigOptions.clashApiPort.notifier), preferences: ref.watch(ConfigOptions.clashApiPort.notifier),
title: t.settings.config.clashApiPort, title: t.config.clashApiPort,
validateInput: isPort, validateInput: isPort,
digitsOnly: true, digitsOnly: true,
inputToValue: int.tryParse, inputToValue: int.tryParse,

View File

@@ -29,7 +29,7 @@ class WarpOptionsTiles extends HookConsumerWidget {
(previous, next) async { (previous, next) async {
if (next case AsyncData(value: final log) when log.isNotEmpty) { if (next case AsyncData(value: final log) when log.isNotEmpty) {
await CustomAlertDialog( await CustomAlertDialog(
title: t.settings.config.warpConfigGenerated, title: t.config.warpConfigGenerated,
message: log, message: log,
).show(context); ).show(context);
} }
@@ -39,7 +39,7 @@ class WarpOptionsTiles extends HookConsumerWidget {
return Column( return Column(
children: [ children: [
SwitchListTile( SwitchListTile(
title: Text(t.settings.config.enableWarp), title: Text(t.config.enableWarp),
value: enableWarp, value: enableWarp,
onChanged: (value) async { onChanged: (value) async {
if (!warpPrefaceCompleted) { if (!warpPrefaceCompleted) {
@@ -57,12 +57,12 @@ class WarpOptionsTiles extends HookConsumerWidget {
}, },
), ),
ListTile( ListTile(
title: Text(t.settings.config.generateWarpConfig), title: Text(t.config.generateWarpConfig),
subtitle: canChangeOptions subtitle: canChangeOptions
? switch (warpOptions.configGeneration) { ? switch (warpOptions.configGeneration) {
AsyncLoading() => const LinearProgressIndicator(), AsyncLoading() => const LinearProgressIndicator(),
AsyncError() => Text( AsyncError() => Text(
t.settings.config.missingWarpConfig, t.config.missingWarpConfig,
style: style:
TextStyle(color: Theme.of(context).colorScheme.error), TextStyle(color: Theme.of(context).colorScheme.error),
), ),
@@ -81,27 +81,27 @@ class WarpOptionsTiles extends HookConsumerWidget {
preferences: ref.watch(ConfigOptions.warpDetourMode.notifier), preferences: ref.watch(ConfigOptions.warpDetourMode.notifier),
enabled: canChangeOptions, enabled: canChangeOptions,
choices: WarpDetourMode.values, choices: WarpDetourMode.values,
title: t.settings.config.warpDetourMode, title: t.config.warpDetourMode,
presentChoice: (value) => value.present(t), presentChoice: (value) => value.present(t),
), ),
ValuePreferenceWidget( ValuePreferenceWidget(
value: ref.watch(ConfigOptions.warpLicenseKey), value: ref.watch(ConfigOptions.warpLicenseKey),
preferences: ref.watch(ConfigOptions.warpLicenseKey.notifier), preferences: ref.watch(ConfigOptions.warpLicenseKey.notifier),
enabled: canChangeOptions, enabled: canChangeOptions,
title: t.settings.config.warpLicenseKey, title: t.config.warpLicenseKey,
presentValue: (value) => value.isEmpty ? t.general.notSet : value, presentValue: (value) => value.isEmpty ? t.general.notSet : value,
), ),
ValuePreferenceWidget( ValuePreferenceWidget(
value: ref.watch(ConfigOptions.warpCleanIp), value: ref.watch(ConfigOptions.warpCleanIp),
preferences: ref.watch(ConfigOptions.warpCleanIp.notifier), preferences: ref.watch(ConfigOptions.warpCleanIp.notifier),
enabled: canChangeOptions, enabled: canChangeOptions,
title: t.settings.config.warpCleanIp, title: t.config.warpCleanIp,
), ),
ValuePreferenceWidget( ValuePreferenceWidget(
value: ref.watch(ConfigOptions.warpPort), value: ref.watch(ConfigOptions.warpPort),
preferences: ref.watch(ConfigOptions.warpPort.notifier), preferences: ref.watch(ConfigOptions.warpPort.notifier),
enabled: canChangeOptions, enabled: canChangeOptions,
title: t.settings.config.warpPort, title: t.config.warpPort,
inputToValue: int.tryParse, inputToValue: int.tryParse,
validateInput: isPort, validateInput: isPort,
digitsOnly: true, digitsOnly: true,
@@ -110,7 +110,7 @@ class WarpOptionsTiles extends HookConsumerWidget {
value: ref.watch(ConfigOptions.warpNoise), value: ref.watch(ConfigOptions.warpNoise),
preferences: ref.watch(ConfigOptions.warpNoise.notifier), preferences: ref.watch(ConfigOptions.warpNoise.notifier),
enabled: canChangeOptions, enabled: canChangeOptions,
title: t.settings.config.warpNoise, title: t.config.warpNoise,
inputToValue: (input) => inputToValue: (input) =>
OptionalRange.tryParse(input, allowEmpty: true), OptionalRange.tryParse(input, allowEmpty: true),
presentValue: (value) => value.present(t), presentValue: (value) => value.present(t),
@@ -120,7 +120,7 @@ class WarpOptionsTiles extends HookConsumerWidget {
value: ref.watch(ConfigOptions.warpNoiseDelay), value: ref.watch(ConfigOptions.warpNoiseDelay),
preferences: ref.watch(ConfigOptions.warpNoiseDelay.notifier), preferences: ref.watch(ConfigOptions.warpNoiseDelay.notifier),
enabled: canChangeOptions, enabled: canChangeOptions,
title: t.settings.config.warpNoiseDelay, title: t.config.warpNoiseDelay,
inputToValue: (input) => inputToValue: (input) =>
OptionalRange.tryParse(input, allowEmpty: true), OptionalRange.tryParse(input, allowEmpty: true),
presentValue: (value) => value.present(t), presentValue: (value) => value.present(t),
@@ -139,9 +139,9 @@ class WarpLicenseAgreementModal extends HookConsumerWidget {
final t = ref.watch(translationsProvider); final t = ref.watch(translationsProvider);
return AlertDialog( return AlertDialog(
title: Text(t.settings.config.warpConsent.title), title: Text(t.config.warpConsent.title),
content: Text.rich( content: Text.rich(
t.settings.config.warpConsent.description( t.config.warpConsent.description(
tos: (text) => TextSpan( tos: (text) => TextSpan(
text: text, text: text,
style: const TextStyle(color: Colors.blue), style: const TextStyle(color: Colors.blue),

View File

@@ -49,11 +49,11 @@ class QuickSettingsModal extends HookConsumerWidget {
SwitchListTile( SwitchListTile(
value: ref.watch(ConfigOptions.enableWarp), value: ref.watch(ConfigOptions.enableWarp),
onChanged: ref.watch(ConfigOptions.enableWarp.notifier).update, onChanged: ref.watch(ConfigOptions.enableWarp.notifier).update,
title: Text(t.settings.config.enableWarp), title: Text(t.config.enableWarp),
) )
else else
ListTile( ListTile(
title: Text(t.settings.config.setupWarp), title: Text(t.config.setupWarp),
trailing: const Icon(FluentIcons.chevron_right_24_regular), trailing: const Icon(FluentIcons.chevron_right_24_regular),
onTap: () => onTap: () =>
ConfigOptionsRoute(section: ConfigOptionSection.warp.name) ConfigOptionsRoute(section: ConfigOptionSection.warp.name)
@@ -63,15 +63,15 @@ class QuickSettingsModal extends HookConsumerWidget {
value: ref.watch(ConfigOptions.enableTlsFragment), value: ref.watch(ConfigOptions.enableTlsFragment),
onChanged: onChanged:
ref.watch(ConfigOptions.enableTlsFragment.notifier).update, ref.watch(ConfigOptions.enableTlsFragment.notifier).update,
title: Text(t.settings.config.enableTlsFragment), title: Text(t.config.enableTlsFragment),
), ),
SwitchListTile( SwitchListTile(
value: ref.watch(ConfigOptions.enableMux), value: ref.watch(ConfigOptions.enableMux),
onChanged: ref.watch(ConfigOptions.enableMux.notifier).update, onChanged: ref.watch(ConfigOptions.enableMux.notifier).update,
title: Text(t.settings.config.enableMux), title: Text(t.config.enableMux),
), ),
ListTile( ListTile(
title: Text(t.settings.config.allOptions), title: Text(t.config.allOptions),
trailing: const Icon(FluentIcons.chevron_right_24_regular), trailing: const Icon(FluentIcons.chevron_right_24_regular),
dense: true, dense: true,
onTap: () => const ConfigOptionsRoute().go(context), onTap: () => const ConfigOptionsRoute().go(context),

View File

@@ -33,9 +33,9 @@ sealed class ConnectionStatus with _$ConnectionStatus {
}; };
String present(TranslationsEn t) => switch (this) { String present(TranslationsEn t) => switch (this) {
Disconnected() => t.home.connection.tapToConnect, Disconnected() => t.connection.tapToConnect,
Connecting() => t.home.connection.connecting, Connecting() => t.connection.connecting,
Connected() => t.home.connection.connected, Connected() => t.connection.connected,
Disconnecting() => t.home.connection.disconnecting, Disconnecting() => t.connection.disconnecting,
}; };
} }

View File

@@ -27,8 +27,8 @@ class _ConnectionWrapperState extends ConsumerState<ConnectionWrapper>
if (next case AsyncData(value: true)) { if (next case AsyncData(value: true)) {
final t = ref.read(translationsProvider); final t = ref.read(translationsProvider);
ref.watch(inAppNotificationControllerProvider).showActionToast( ref.watch(inAppNotificationControllerProvider).showActionToast(
t.settings.config.reconnectMsg, t.connection.reconnectMsg,
actionText: t.settings.config.reconnectBtn, actionText: t.connection.reconnect,
callback: () async { callback: () async {
await ref await ref
.read(connectionNotifierProvider.notifier) .read(connectionNotifierProvider.notifier)

View File

@@ -32,7 +32,7 @@ class ExperimentalFeatureNoticeDialog extends HookConsumerWidget {
final disableNotice = ref.watch(disableExperimentalFeatureNoticeProvider); final disableNotice = ref.watch(disableExperimentalFeatureNoticeProvider);
return AlertDialog( return AlertDialog(
title: Text(t.home.connection.experimentalNotice), title: Text(t.connection.experimentalNotice),
content: SingleChildScrollView( content: SingleChildScrollView(
child: SizedBox( child: SizedBox(
width: 468, width: 468,
@@ -40,11 +40,11 @@ class ExperimentalFeatureNoticeDialog extends HookConsumerWidget {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text(t.home.connection.experimentalNoticeMsg), Text(t.connection.experimentalNoticeMsg),
const Gap(8), const Gap(8),
CheckboxListTile( CheckboxListTile(
value: disableNotice, value: disableNotice,
title: Text(t.home.connection.disableExperimentalNotice), title: Text(t.connection.disableExperimentalNotice),
secondary: const Icon(FluentIcons.eye_off_24_regular), secondary: const Icon(FluentIcons.eye_off_24_regular),
onChanged: (value) async => ref onChanged: (value) async => ref
.read(disableExperimentalFeatureNoticeProvider.notifier) .read(disableExperimentalFeatureNoticeProvider.notifier)
@@ -52,7 +52,7 @@ class ExperimentalFeatureNoticeDialog extends HookConsumerWidget {
dense: true, dense: true,
), ),
ListTile( ListTile(
title: Text(t.settings.config.pageTitle), title: Text(t.config.pageTitle),
leading: const Icon(FluentIcons.box_edit_24_regular), leading: const Icon(FluentIcons.box_edit_24_regular),
trailing: const Icon(FluentIcons.chevron_right_20_regular), trailing: const Icon(FluentIcons.chevron_right_20_regular),
onTap: () async { onTap: () async {
@@ -76,7 +76,7 @@ class ExperimentalFeatureNoticeDialog extends HookConsumerWidget {
), ),
TextButton( TextButton(
onPressed: () => Navigator.of(context).maybePop(true), onPressed: () => Navigator.of(context).maybePop(true),
child: Text(t.home.connection.connectAnyWay.toUpperCase()), child: Text(t.connection.connectAnyWay.toUpperCase()),
), ),
], ],
); );

View File

@@ -82,7 +82,7 @@ class ConnectionButton extends HookConsumerWidget {
}, },
label: switch (connectionStatus) { label: switch (connectionStatus) {
AsyncData(value: Connected()) when requiresReconnect == true => AsyncData(value: Connected()) when requiresReconnect == true =>
t.home.connection.reconnect, t.connection.reconnect,
AsyncData(value: final status) => status.present(t), AsyncData(value: final status) => status.present(t),
_ => "", _ => "",
}, },

View File

@@ -48,7 +48,7 @@ class HomePage extends HookConsumerWidget {
IconButton( IconButton(
onPressed: () => const QuickSettingsRoute().push(context), onPressed: () => const QuickSettingsRoute().push(context),
icon: const Icon(FluentIcons.options_24_filled), icon: const Icon(FluentIcons.options_24_filled),
tooltip: t.settings.config.quickSettings, tooltip: t.config.quickSettings,
), ),
IconButton( IconButton(
onPressed: () => const AddProfileRoute().push(context), onPressed: () => const AddProfileRoute().push(context),

View File

@@ -73,7 +73,7 @@ class SystemTrayNotifier extends _$SystemTrayNotifier with AppLogger {
}, },
), ),
MenuItem.submenu( MenuItem.submenu(
label: t.settings.config.serviceMode, label: t.config.serviceMode,
submenu: Menu( submenu: Menu(
items: [ items: [
...ServiceMode.values.map( ...ServiceMode.values.map(

View File

@@ -36,19 +36,19 @@ enum ServiceMode {
}; };
String present(TranslationsEn t) => switch (this) { String present(TranslationsEn t) => switch (this) {
proxy => t.settings.config.serviceModes.proxy, proxy => t.config.serviceModes.proxy,
systemProxy => t.settings.config.serviceModes.systemProxy, systemProxy => t.config.serviceModes.systemProxy,
tun => tun =>
"${t.settings.config.serviceModes.tun}${isExperimental ? " (${t.settings.experimental})" : ""}", "${t.config.serviceModes.tun}${isExperimental ? " (${t.settings.experimental})" : ""}",
tunService => tunService =>
"${t.settings.config.serviceModes.tunService}${isExperimental ? " (${t.settings.experimental})" : ""}", "${t.config.serviceModes.tunService}${isExperimental ? " (${t.settings.experimental})" : ""}",
}; };
String presentShort(TranslationsEn t) => switch (this) { String presentShort(TranslationsEn t) => switch (this) {
proxy => t.settings.config.shortServiceModes.proxy, proxy => t.config.shortServiceModes.proxy,
systemProxy => t.settings.config.shortServiceModes.systemProxy, systemProxy => t.config.shortServiceModes.systemProxy,
tun => t.settings.config.shortServiceModes.tun, tun => t.config.shortServiceModes.tun,
tunService => t.settings.config.shortServiceModes.tunService, tunService => t.config.shortServiceModes.tunService,
}; };
} }
@@ -64,10 +64,10 @@ enum IPv6Mode {
final String key; final String key;
String present(TranslationsEn t) => switch (this) { String present(TranslationsEn t) => switch (this) {
disable => t.settings.config.ipv6Modes.disable, disable => t.config.ipv6Modes.disable,
enable => t.settings.config.ipv6Modes.enable, enable => t.config.ipv6Modes.enable,
prefer => t.settings.config.ipv6Modes.prefer, prefer => t.config.ipv6Modes.prefer,
only => t.settings.config.ipv6Modes.only, only => t.config.ipv6Modes.only,
}; };
} }
@@ -111,7 +111,7 @@ enum WarpDetourMode {
final String key; final String key;
String present(TranslationsEn t) => switch (this) { String present(TranslationsEn t) => switch (this) {
proxyOverWarp => t.settings.config.warpDetourModes.proxyOverWarp, proxyOverWarp => t.config.warpDetourModes.proxyOverWarp,
warpOverProxy => t.settings.config.warpDetourModes.warpOverProxy, warpOverProxy => t.config.warpDetourModes.warpOverProxy,
}; };
} }