From 4b8ea0f375947903acde1952ed3acc13b0361add Mon Sep 17 00:00:00 2001 From: problematicconsumer Date: Sun, 18 Feb 2024 18:24:42 +0330 Subject: [PATCH 1/5] Add more haptic feedback --- lib/core/haptic/haptic_service.dart | 6 ++++++ .../connection/notifier/connection_notifier.dart | 11 +++++++++++ .../profile/overview/profiles_overview_notifier.dart | 2 ++ lib/features/proxy/active/ip_widget.dart | 6 ++++++ 4 files changed, 25 insertions(+) diff --git a/lib/core/haptic/haptic_service.dart b/lib/core/haptic/haptic_service.dart index 2015a1a7..99e8d39a 100644 --- a/lib/core/haptic/haptic_service.dart +++ b/lib/core/haptic/haptic_service.dart @@ -32,4 +32,10 @@ class HapticService extends _$HapticService { await HapticFeedback.mediumImpact(); } } + + Future heavyImpact() async { + if (state) { + await HapticFeedback.heavyImpact(); + } + } } diff --git a/lib/features/connection/notifier/connection_notifier.dart b/lib/features/connection/notifier/connection_notifier.dart index 9111bb62..0c44a0e4 100644 --- a/lib/features/connection/notifier/connection_notifier.dart +++ b/lib/features/connection/notifier/connection_notifier.dart @@ -25,6 +25,17 @@ class ConnectionNotifier extends _$ConnectionNotifier with AppLogger { }).run(); } + ref.listenSelf( + (previous, next) async { + if (previous == next) return; + if (previous case AsyncData(:final value) when !value.isConnected) { + if (next case AsyncData(value: final Connected _)) { + await ref.read(hapticServiceProvider.notifier).heavyImpact(); + } + } + }, + ); + ref.listen( activeProfileProvider.select((value) => value.asData?.value), (previous, next) async { diff --git a/lib/features/profile/overview/profiles_overview_notifier.dart b/lib/features/profile/overview/profiles_overview_notifier.dart index 7dcc68d4..2839c196 100644 --- a/lib/features/profile/overview/profiles_overview_notifier.dart +++ b/lib/features/profile/overview/profiles_overview_notifier.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:flutter/services.dart'; import 'package:fpdart/fpdart.dart'; +import 'package:hiddify/core/haptic/haptic_service.dart'; import 'package:hiddify/features/profile/data/profile_data_providers.dart'; import 'package:hiddify/features/profile/data/profile_repository.dart'; import 'package:hiddify/features/profile/model/profile_entity.dart'; @@ -46,6 +47,7 @@ class ProfilesOverviewNotifier extends _$ProfilesOverviewNotifier Future selectActiveProfile(String id) async { loggy.debug('changing active profile to: [$id]'); + await ref.read(hapticServiceProvider.notifier).lightImpact(); return _profilesRepo.setAsActive(id).getOrElse((err) { loggy.warning('failed to set [$id] as active profile', err); throw err; diff --git a/lib/features/proxy/active/ip_widget.dart b/lib/features/proxy/active/ip_widget.dart index f16d0c1f..40b4431a 100644 --- a/lib/features/proxy/active/ip_widget.dart +++ b/lib/features/proxy/active/ip_widget.dart @@ -1,5 +1,6 @@ import 'package:circle_flags/circle_flags.dart'; import 'package:flutter/material.dart'; +import 'package:hiddify/core/haptic/haptic_service.dart'; import 'package:hiddify/core/localization/translations.dart'; import 'package:hiddify/core/utils/ip_utils.dart'; import 'package:hiddify/utils/riverpod_utils.dart'; @@ -7,6 +8,11 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; final _showIp = StateProvider.autoDispose((ref) { ref.disposeDelay(const Duration(seconds: 20)); + ref.listenSelf((previous, next) { + if (previous == false && next == true) { + ref.read(hapticServiceProvider.notifier).mediumImpact(); + } + }); return false; }); From 8ac1d07d400f8f225f9b07752386734f0064b755 Mon Sep 17 00:00:00 2001 From: problematicconsumer Date: Sun, 18 Feb 2024 18:41:16 +0330 Subject: [PATCH 2/5] release: version 0.16.0-dev --- CHANGELOG.md | 4 +++- dependencies.properties | 2 +- ios/Runner.xcodeproj/project.pbxproj | 12 ++++++------ libcore | 2 +- pubspec.yaml | 2 +- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 72a9dde6..44478ba3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## Unreleased +## [0.16.0.dev] - 2023-2-18 ### New Features and Improvements @@ -16,6 +16,7 @@ - Changed in-app icons (using [Fluent UI System Icons](https://github.com/microsoft/fluentui-system-icons)) - Redesigned navigation flow, separating config options - Added haptic feedback +- Added detailed subscription info in profile edit page - Added Chinese Taiwan language. [PR#410](https://github.com/hiddify/hiddify-next/pull/410) by [junlin03](https://github.com/junlin03) and [PR#491](https://github.com/hiddify/hiddify-next/pull/491) by [kouhe3](https://github.com/kouhe3) - Added Japanese Readme. [PR#371](https://github.com/hiddify/hiddify-next/pull/371) by [Ikko Eltociear Ashimine](https://github.com/eltociear) @@ -277,6 +278,7 @@ - Fixed localization mistakes in Russian. [PR#95](https://github.com/hiddify/hiddify-next/pull/95) by [solokot](https://github.com/solokot) - Fixed localization mistakes in Russian. [PR#74](https://github.com/hiddify/hiddify-next/pull/74) by [Elshad Guseynov](https://github.com/lifeindarkside) +[0.16.0.dev]: https://github.com/hiddify/hiddify-next/releases/tag/v0.16.0.dev [0.14.1.dev]: https://github.com/hiddify/hiddify-next/releases/tag/v0.14.1.dev [0.14.0.dev]: https://github.com/hiddify/hiddify-next/releases/tag/v0.14.0.dev [0.13.6]: https://github.com/hiddify/hiddify-next/releases/tag/v0.13.6 diff --git a/dependencies.properties b/dependencies.properties index 498a39d5..23d866de 100644 --- a/dependencies.properties +++ b/dependencies.properties @@ -1 +1 @@ -core.version=0.15.15 \ No newline at end of file +core.version=0.16.0 \ No newline at end of file diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 0d107fa8..3102bf95 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -751,7 +751,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_ENTITLEMENTS = SingBoxPacketTunnel/SingBoxPacketTunnel.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1515; + CURRENT_PROJECT_VERSION = 1600; ENABLE_USER_SCRIPT_SANDBOXING = YES; EXCLUDED_ARCHS = armv7; GCC_C_LANGUAGE_STANDARD = gnu17; @@ -770,7 +770,7 @@ "@executable_path/libcore/", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MARKETING_VERSION = 0.15.15; + MARKETING_VERSION = 0.16.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; OTHER_LDFLAGS = "-lresolv"; @@ -802,7 +802,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_ENTITLEMENTS = SingBoxPacketTunnel/SingBoxPacketTunnel.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1515; + CURRENT_PROJECT_VERSION = 1600; ENABLE_USER_SCRIPT_SANDBOXING = YES; EXCLUDED_ARCHS = armv7; GCC_C_LANGUAGE_STANDARD = gnu17; @@ -821,7 +821,7 @@ "@executable_path/libcore/", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MARKETING_VERSION = 0.15.15; + MARKETING_VERSION = 0.16.0; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = "-lresolv"; @@ -851,7 +851,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_ENTITLEMENTS = SingBoxPacketTunnel/SingBoxPacketTunnel.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1515; + CURRENT_PROJECT_VERSION = 1600; ENABLE_USER_SCRIPT_SANDBOXING = YES; EXCLUDED_ARCHS = armv7; GCC_C_LANGUAGE_STANDARD = gnu17; @@ -870,7 +870,7 @@ "@executable_path/libcore/", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MARKETING_VERSION = 0.15.15; + MARKETING_VERSION = 0.16.0; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = "-lresolv"; diff --git a/libcore b/libcore index 6672cd81..6c65b739 160000 --- a/libcore +++ b/libcore @@ -1 +1 @@ -Subproject commit 6672cd810420cf20a8eae54adf5c64195d152895 +Subproject commit 6c65b73981189658f9ddc409eecbf6f6471b8477 diff --git a/pubspec.yaml b/pubspec.yaml index 766b92b7..282a863b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: hiddify description: Cross Platform Multi Protocol Proxy Frontend. publish_to: "none" -version: 0.15.15+1515 +version: 0.16.0+1600 environment: sdk: ">=3.2.0 <4.0.0" From 458e58de81658b4ddbadcee5af84113187691170 Mon Sep 17 00:00:00 2001 From: problematicconsumer Date: Sun, 18 Feb 2024 18:58:03 +0330 Subject: [PATCH 3/5] Fix build --- .github/workflows/build.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ec2e56e4..2034f049 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -92,9 +92,6 @@ jobs: make ${{ matrix.platform }}-prepare tree - - name: Test - run: flutter test - - name: Setup Android Signing Properties if: startsWith(matrix.platform,'android') run: | From 95126859d9f9ae9e20fec2b52082fce415cffbf2 Mon Sep 17 00:00:00 2001 From: nya-main <108107785+nya-main@users.noreply.github.com> Date: Mon, 19 Feb 2024 19:13:41 +0800 Subject: [PATCH 4/5] inlang: update translations --- assets/translations/strings_es.i18n.json | 12 ++--- assets/translations/strings_fa.i18n.json | 10 ++-- assets/translations/strings_ru.i18n.json | 10 ++-- assets/translations/strings_tr.i18n.json | 10 ++-- assets/translations/strings_zh-CN.i18n.json | 52 +++++++++++++++------ 5 files changed, 60 insertions(+), 34 deletions(-) diff --git a/assets/translations/strings_es.i18n.json b/assets/translations/strings_es.i18n.json index 19da9ba6..41cda74d 100644 --- a/assets/translations/strings_es.i18n.json +++ b/assets/translations/strings_es.i18n.json @@ -1,7 +1,7 @@ { "general": { - "reset": "Renicio", "appTitle": "Hiddify", + "reset": "Renicio", "toggle": { "enabled": "Activado", "disabled": "Desactivado" @@ -211,6 +211,10 @@ "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", @@ -258,11 +262,7 @@ "warpLicenseKey": "License Key", "warpCleanIp": "Clean IP", "warpPort": "Port", - "warpNoise": "Noise", - "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." - } + "warpNoise": "Noise" }, "geoAssets": { "pageTitle": "Activos de enrutamiento", diff --git a/assets/translations/strings_fa.i18n.json b/assets/translations/strings_fa.i18n.json index 1b6876ce..bdbd5ba1 100644 --- a/assets/translations/strings_fa.i18n.json +++ b/assets/translations/strings_fa.i18n.json @@ -211,6 +211,10 @@ "warp": "WARP Options", "misc": "تنظیمات متفرقه" }, + "warpConsent": { + "title": "رضایت Cloudflare WARP", + "description(rich)": "Cloudflare WARP یک ارائه دهنده رایگان WireGuard VPN است. با فعال کردن این گزینه، با ${tos(شرایط خدمات)} و ${privacy(خط‌مشی رازداری)} Cloudflare WARP موافقت می‌کنید." + }, "pageTitle": "تنظیمات کانفیگ", "logLevel": "سطح لاگ", "resolveDestination": "جایگذاری IP مقصد", @@ -258,11 +262,7 @@ "warpLicenseKey": "License Key", "warpCleanIp": "Clean IP", "warpPort": "Port", - "warpNoise": "Noise", - "warpConsent": { - "title": "رضایت Cloudflare WARP", - "description(rich)": "Cloudflare WARP یک ارائه دهنده رایگان WireGuard VPN است. با فعال کردن این گزینه، با ${tos(شرایط خدمات)} و ${privacy(خط‌مشی رازداری)} Cloudflare WARP موافقت می‌کنید." - } + "warpNoise": "Noise" }, "geoAssets": { "pageTitle": "فایل‌های مسیریابی", diff --git a/assets/translations/strings_ru.i18n.json b/assets/translations/strings_ru.i18n.json index 8479023f..2141fdee 100644 --- a/assets/translations/strings_ru.i18n.json +++ b/assets/translations/strings_ru.i18n.json @@ -211,6 +211,10 @@ "warp": "WARP Options", "misc": "Разные параметры" }, + "warpConsent": { + "title": "Согласие Cloudflare WARP", + "description(rich)": "Cloudflare WARP — бесплатный провайдер WireGuard VPN. Включая эту опцию, вы соглашаетесь с ${tos(Условиями обслуживания)} и ${privacy(Политикой конфиденциальности)} Cloudflare WARP." + }, "pageTitle": "Параметры конфигурации", "logLevel": "Подробность журналирования", "resolveDestination": "Определять назначение", @@ -258,11 +262,7 @@ "warpLicenseKey": "License Key", "warpCleanIp": "Clean IP", "warpPort": "Port", - "warpNoise": "Noise", - "warpConsent": { - "title": "Согласие Cloudflare WARP", - "description(rich)": "Cloudflare WARP — бесплатный провайдер WireGuard VPN. Включая эту опцию, вы соглашаетесь с ${tos(Условиями обслуживания)} и ${privacy(Политикой конфиденциальности)} Cloudflare WARP." - } + "warpNoise": "Noise" }, "geoAssets": { "pageTitle": "Активы маршрутизации", diff --git a/assets/translations/strings_tr.i18n.json b/assets/translations/strings_tr.i18n.json index bc196c12..5b4773c4 100644 --- a/assets/translations/strings_tr.i18n.json +++ b/assets/translations/strings_tr.i18n.json @@ -211,6 +211,10 @@ "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", @@ -258,11 +262,7 @@ "warpLicenseKey": "License Key", "warpCleanIp": "Clean IP", "warpPort": "Port", - "warpNoise": "Noise", - "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." - } + "warpNoise": "Noise" }, "geoAssets": { "pageTitle": "Varlıkları Yönlendirme", diff --git a/assets/translations/strings_zh-CN.i18n.json b/assets/translations/strings_zh-CN.i18n.json index 2c565f89..4638d9b9 100644 --- a/assets/translations/strings_zh-CN.i18n.json +++ b/assets/translations/strings_zh-CN.i18n.json @@ -15,7 +15,9 @@ "notSet": "没有设置", "agree": "同意", "decline": "衰退", - "unknown": "未知" + "unknown": "未知", + "hidden": "隐藏", + "timeout": "超时" }, "intro": { "termsAndPolicyCaution(rich)": "继续即表示您同意 ${tap(@:about.termsAndConditions)}", @@ -38,7 +40,8 @@ "traffic": "实时流量", "trafficTotal": "总流量", "uplink": "上行", - "downlink": "下行" + "downlink": "下行", + "connection": "连接" } }, "profile": { @@ -53,7 +56,11 @@ "remainingDuration": "剩余 ${duration} 天", "remainingTrafficSemanticLabel": "已使用 ${consumed} 流量,共 ${total} 流量。", "expired": "已过期", - "noTraffic": "超出配额" + "noTraffic": "超出配额", + "upload": "上传", + "download": "下载", + "total": "总流量", + "expireDate": "过期时间" }, "sortBy": { "lastUpdate": "最近更新", @@ -122,10 +129,26 @@ "emptyProxiesMsg": "没有可用的代理", "delayTestTooltip": "测试延迟", "sortTooltip": "对代理进行排序", + "checkIp": "检查IP", + "unknownIp": "未知IP", "sortOptions": { "unsorted": "默认", "name": "按字母顺序", "delay": "按延迟顺序" + }, + "activeProxySemanticLabel": "活动proxy", + "delaySemantics": { + "result": "延迟: ${delay}ms", + "timeout": "延迟测试超时", + "testing": "延迟: 测试中..." + }, + "ipInfoSemantics": { + "address": "IP地址", + "country": "国家" + }, + "statsSemantics": { + "speed": "速度", + "totalTransferred": "总流量" } }, "logs": { @@ -169,7 +192,8 @@ "openWorkingDir": "打开工作目录", "ignoreBatteryOptimizations": "禁用电池优化", "ignoreBatteryOptimizationsMsg": "消除限制以获得最佳 VPN 性能", - "dynamicNotification": "在通知中显示速度" + "dynamicNotification": "在通知中显示速度", + "autoIpCheck": "自动检查连接IP" }, "advanced": { "sectionTitle": "高级选项", @@ -199,7 +223,8 @@ "serviceModes": { "proxy": "仅代理", "systemProxy": "系统代理", - "tun": "VPN" + "tun": "VPN", + "tunService": "VPN服务" }, "section": { "route": "路由选项", @@ -208,10 +233,15 @@ "mux": "复用器", "outbound": "出站选项", "tlsTricks": "TLS Tricks", - "misc": "其他选项", - "warp": "WARP 选项" - + "warp": "WARP 选项", + "misc": "其他选项" }, + "warpConsent": { + "title": "Cloudflare WARP 同意", + "description(rich)": "Cloudflare WARP 是免费的 WireGuard VPN 提供商。启用此选项即表示您同意 Cloudflare WARP 的 ${tos(服务条款)} 和 ${privacy(隐私政策)}" + }, + "generateWarpConfig": "生成WARP配置", + "missingWarpConfig": "WARP配置缺失", "pageTitle": "配置选项", "logLevel": "日志级别", "resolveDestination": "解析目标地址", @@ -259,11 +289,7 @@ "warpLicenseKey": "许可证密钥", "warpCleanIp": "干净 IP", "warpPort": "端口", - "warpNoise": "噪音", - "warpConsent": { - "title": "Cloudflare WARP 同意", - "description(rich)": "Cloudflare WARP 是免费的 WireGuard VPN 提供商。启用此选项即表示您同意 Cloudflare WARP 的 ${tos(服务条款)} 和 ${privacy(隐私政策)}" - } + "warpNoise": "噪音" }, "geoAssets": { "pageTitle": "路由资源文件", From 4048027fd21e84886ebec621e4e432644718e852 Mon Sep 17 00:00:00 2001 From: KintaMiao <45995071+KintaMiao@users.noreply.github.com> Date: Tue, 20 Feb 2024 01:04:54 +0800 Subject: [PATCH 5/5] inlang: update translations --- assets/translations/strings_es.i18n.json | 12 ++--- assets/translations/strings_fa.i18n.json | 10 ++-- assets/translations/strings_ru.i18n.json | 10 ++-- assets/translations/strings_tr.i18n.json | 10 ++-- assets/translations/strings_zh-CN.i18n.json | 53 ++++++++++++++++----- 5 files changed, 61 insertions(+), 34 deletions(-) diff --git a/assets/translations/strings_es.i18n.json b/assets/translations/strings_es.i18n.json index 19da9ba6..41cda74d 100644 --- a/assets/translations/strings_es.i18n.json +++ b/assets/translations/strings_es.i18n.json @@ -1,7 +1,7 @@ { "general": { - "reset": "Renicio", "appTitle": "Hiddify", + "reset": "Renicio", "toggle": { "enabled": "Activado", "disabled": "Desactivado" @@ -211,6 +211,10 @@ "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", @@ -258,11 +262,7 @@ "warpLicenseKey": "License Key", "warpCleanIp": "Clean IP", "warpPort": "Port", - "warpNoise": "Noise", - "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." - } + "warpNoise": "Noise" }, "geoAssets": { "pageTitle": "Activos de enrutamiento", diff --git a/assets/translations/strings_fa.i18n.json b/assets/translations/strings_fa.i18n.json index 1b6876ce..bdbd5ba1 100644 --- a/assets/translations/strings_fa.i18n.json +++ b/assets/translations/strings_fa.i18n.json @@ -211,6 +211,10 @@ "warp": "WARP Options", "misc": "تنظیمات متفرقه" }, + "warpConsent": { + "title": "رضایت Cloudflare WARP", + "description(rich)": "Cloudflare WARP یک ارائه دهنده رایگان WireGuard VPN است. با فعال کردن این گزینه، با ${tos(شرایط خدمات)} و ${privacy(خط‌مشی رازداری)} Cloudflare WARP موافقت می‌کنید." + }, "pageTitle": "تنظیمات کانفیگ", "logLevel": "سطح لاگ", "resolveDestination": "جایگذاری IP مقصد", @@ -258,11 +262,7 @@ "warpLicenseKey": "License Key", "warpCleanIp": "Clean IP", "warpPort": "Port", - "warpNoise": "Noise", - "warpConsent": { - "title": "رضایت Cloudflare WARP", - "description(rich)": "Cloudflare WARP یک ارائه دهنده رایگان WireGuard VPN است. با فعال کردن این گزینه، با ${tos(شرایط خدمات)} و ${privacy(خط‌مشی رازداری)} Cloudflare WARP موافقت می‌کنید." - } + "warpNoise": "Noise" }, "geoAssets": { "pageTitle": "فایل‌های مسیریابی", diff --git a/assets/translations/strings_ru.i18n.json b/assets/translations/strings_ru.i18n.json index 8479023f..2141fdee 100644 --- a/assets/translations/strings_ru.i18n.json +++ b/assets/translations/strings_ru.i18n.json @@ -211,6 +211,10 @@ "warp": "WARP Options", "misc": "Разные параметры" }, + "warpConsent": { + "title": "Согласие Cloudflare WARP", + "description(rich)": "Cloudflare WARP — бесплатный провайдер WireGuard VPN. Включая эту опцию, вы соглашаетесь с ${tos(Условиями обслуживания)} и ${privacy(Политикой конфиденциальности)} Cloudflare WARP." + }, "pageTitle": "Параметры конфигурации", "logLevel": "Подробность журналирования", "resolveDestination": "Определять назначение", @@ -258,11 +262,7 @@ "warpLicenseKey": "License Key", "warpCleanIp": "Clean IP", "warpPort": "Port", - "warpNoise": "Noise", - "warpConsent": { - "title": "Согласие Cloudflare WARP", - "description(rich)": "Cloudflare WARP — бесплатный провайдер WireGuard VPN. Включая эту опцию, вы соглашаетесь с ${tos(Условиями обслуживания)} и ${privacy(Политикой конфиденциальности)} Cloudflare WARP." - } + "warpNoise": "Noise" }, "geoAssets": { "pageTitle": "Активы маршрутизации", diff --git a/assets/translations/strings_tr.i18n.json b/assets/translations/strings_tr.i18n.json index bc196c12..5b4773c4 100644 --- a/assets/translations/strings_tr.i18n.json +++ b/assets/translations/strings_tr.i18n.json @@ -211,6 +211,10 @@ "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", @@ -258,11 +262,7 @@ "warpLicenseKey": "License Key", "warpCleanIp": "Clean IP", "warpPort": "Port", - "warpNoise": "Noise", - "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." - } + "warpNoise": "Noise" }, "geoAssets": { "pageTitle": "Varlıkları Yönlendirme", diff --git a/assets/translations/strings_zh-CN.i18n.json b/assets/translations/strings_zh-CN.i18n.json index 2c565f89..1c101492 100644 --- a/assets/translations/strings_zh-CN.i18n.json +++ b/assets/translations/strings_zh-CN.i18n.json @@ -15,7 +15,9 @@ "notSet": "没有设置", "agree": "同意", "decline": "衰退", - "unknown": "未知" + "unknown": "未知", + "hidden": "隐藏", + "timeout": "超时" }, "intro": { "termsAndPolicyCaution(rich)": "继续即表示您同意 ${tap(@:about.termsAndConditions)}", @@ -38,7 +40,8 @@ "traffic": "实时流量", "trafficTotal": "总流量", "uplink": "上行", - "downlink": "下行" + "downlink": "下行", + "connection": "连接" } }, "profile": { @@ -53,7 +56,11 @@ "remainingDuration": "剩余 ${duration} 天", "remainingTrafficSemanticLabel": "已使用 ${consumed} 流量,共 ${total} 流量。", "expired": "已过期", - "noTraffic": "超出配额" + "noTraffic": "超出配额", + "upload": "上传", + "download": "下载", + "total": "总流量", + "expireDate": "到期时间" }, "sortBy": { "lastUpdate": "最近更新", @@ -122,10 +129,26 @@ "emptyProxiesMsg": "没有可用的代理", "delayTestTooltip": "测试延迟", "sortTooltip": "对代理进行排序", + "checkIp": "检测IP地址", + "unknownIp": "未知的IP", "sortOptions": { "unsorted": "默认", "name": "按字母顺序", "delay": "按延迟顺序" + }, + "activeProxySemanticLabel": "活跃的代理", + "delaySemantics": { + "result": "延迟:${delay}ms", + "timeout": "延迟测试超时", + "testing": "正在测试延迟" + }, + "ipInfoSemantics": { + "address": "IP地址", + "country": "国家" + }, + "statsSemantics": { + "speed": "速度", + "totalTransferred": "总传输量" } }, "logs": { @@ -169,7 +192,9 @@ "openWorkingDir": "打开工作目录", "ignoreBatteryOptimizations": "禁用电池优化", "ignoreBatteryOptimizationsMsg": "消除限制以获得最佳 VPN 性能", - "dynamicNotification": "在通知中显示速度" + "dynamicNotification": "在通知中显示速度", + "hapticFeedback": "触觉反馈", + "autoIpCheck": "自动检查连接的 IP" }, "advanced": { "sectionTitle": "高级选项", @@ -199,7 +224,8 @@ "serviceModes": { "proxy": "仅代理", "systemProxy": "系统代理", - "tun": "VPN" + "tun": "VPN", + "tunService": "VPN服务" }, "section": { "route": "路由选项", @@ -208,10 +234,15 @@ "mux": "复用器", "outbound": "出站选项", "tlsTricks": "TLS Tricks", - "misc": "其他选项", - "warp": "WARP 选项" - + "warp": "WARP 选项", + "misc": "其他选项" }, + "warpConsent": { + "title": "Cloudflare WARP 同意", + "description(rich)": "Cloudflare WARP 是免费的 WireGuard VPN 提供商。启用此选项即表示您同意 Cloudflare WARP 的 ${tos(服务条款)} 和 ${privacy(隐私政策)}" + }, + "generateWarpConfig": "生成WARP配置文件", + "missingWarpConfig": "WARP配置缺失", "pageTitle": "配置选项", "logLevel": "日志级别", "resolveDestination": "解析目标地址", @@ -259,11 +290,7 @@ "warpLicenseKey": "许可证密钥", "warpCleanIp": "干净 IP", "warpPort": "端口", - "warpNoise": "噪音", - "warpConsent": { - "title": "Cloudflare WARP 同意", - "description(rich)": "Cloudflare WARP 是免费的 WireGuard VPN 提供商。启用此选项即表示您同意 Cloudflare WARP 的 ${tos(服务条款)} 和 ${privacy(隐私政策)}" - } + "warpNoise": "噪音" }, "geoAssets": { "pageTitle": "路由资源文件",