Showing
10 changed files
with
321 additions
and
268 deletions
| @@ -51,6 +51,10 @@ post_install do |installer| | @@ -51,6 +51,10 @@ post_install do |installer| | ||
| 51 | flutter_additional_ios_build_settings(target) | 51 | flutter_additional_ios_build_settings(target) |
| 52 | 52 | ||
| 53 | target.build_configurations.each do |config| | 53 | target.build_configurations.each do |config| |
| 54 | + # Force all pods to match the app's minimum deployment target, | ||
| 55 | + # fixing "ThinkingSDK requires a higher minimum iOS deployment version | ||
| 56 | + # than the plugin's reported minimum version" errors. | ||
| 57 | + config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '17.0' | ||
| 54 | config.build_settings['ENABLE_USER_SCRIPT_SANDBOXING'] = 'NO' | 58 | config.build_settings['ENABLE_USER_SCRIPT_SANDBOXING'] = 'NO' |
| 55 | # You can remove unused permissions here | 59 | # You can remove unused permissions here |
| 56 | # for more information: https://github.com/Baseflow/flutter-permission-handler/blob/main/permission_handler_apple/ios/Classes/PermissionHandlerEnums.h | 60 | # for more information: https://github.com/Baseflow/flutter-permission-handler/blob/main/permission_handler_apple/ios/Classes/PermissionHandlerEnums.h |
| @@ -34,24 +34,24 @@ PODS: | @@ -34,24 +34,24 @@ PODS: | ||
| 34 | - Flutter | 34 | - Flutter |
| 35 | - FlutterMacOS | 35 | - FlutterMacOS |
| 36 | - TAThirdParty (0.3.5) | 36 | - TAThirdParty (0.3.5) |
| 37 | - - thinking_analytics (3.3.2): | 37 | + - thinking_analytics (3.3.3): |
| 38 | - Flutter | 38 | - Flutter |
| 39 | - TAThirdParty (= 0.3.5) | 39 | - TAThirdParty (= 0.3.5) |
| 40 | - - ThinkingSDK (= 3.1.6) | ||
| 41 | - - ThinkingDataCore (1.2.3): | ||
| 42 | - - ThinkingDataCore/Main (= 1.2.3) | ||
| 43 | - - ThinkingDataCore/iOS (1.2.3) | ||
| 44 | - - ThinkingDataCore/Main (1.2.3): | 40 | + - ThinkingSDK (= 3.4.8) |
| 41 | + - ThinkingDataCore (1.3.5): | ||
| 42 | + - ThinkingDataCore/Main (= 1.3.5) | ||
| 43 | + - ThinkingDataCore/iOS (1.3.5) | ||
| 44 | + - ThinkingDataCore/Main (1.3.5): | ||
| 45 | - ThinkingDataCore/iOS | 45 | - ThinkingDataCore/iOS |
| 46 | - ThinkingDataCore/OSX | 46 | - ThinkingDataCore/OSX |
| 47 | - ThinkingDataCore/tvOS | 47 | - ThinkingDataCore/tvOS |
| 48 | - ThinkingDataCore/versionOS | 48 | - ThinkingDataCore/versionOS |
| 49 | - ThinkingDataCore/watchOS | 49 | - ThinkingDataCore/watchOS |
| 50 | - - ThinkingSDK (3.1.6): | ||
| 51 | - - ThinkingSDK/Main (= 3.1.6) | ||
| 52 | - - ThinkingSDK/iOS (3.1.6): | ||
| 53 | - - ThinkingDataCore (= 1.2.3) | ||
| 54 | - - ThinkingSDK/Main (3.1.6): | 50 | + - ThinkingSDK (3.4.8): |
| 51 | + - ThinkingSDK/Main (= 3.4.8) | ||
| 52 | + - ThinkingSDK/iOS (3.4.8): | ||
| 53 | + - ThinkingDataCore (= 1.3.5) | ||
| 54 | + - ThinkingSDK/Main (3.4.8): | ||
| 55 | - ThinkingSDK/iOS | 55 | - ThinkingSDK/iOS |
| 56 | - ThinkingSDK/OSX | 56 | - ThinkingSDK/OSX |
| 57 | - TOCropViewController (2.7.4) | 57 | - TOCropViewController (2.7.4) |
| @@ -126,13 +126,13 @@ SPEC CHECKSUMS: | @@ -126,13 +126,13 @@ SPEC CHECKSUMS: | ||
| 126 | shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 | 126 | shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 |
| 127 | sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 | 127 | sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 |
| 128 | TAThirdParty: 65db0235cd209237781535f19f9d0eef706156e5 | 128 | TAThirdParty: 65db0235cd209237781535f19f9d0eef706156e5 |
| 129 | - thinking_analytics: 07ba79674bc6813262e106d7c1ae6458d671e093 | ||
| 130 | - ThinkingDataCore: e87a6061d82d138d8b770d04cc84521547563884 | ||
| 131 | - ThinkingSDK: ccc9a8a901e2fb98a8e8b41e5084b8ab4a4c82ca | 129 | + thinking_analytics: 6f254c030da8dfc3409c08d91929b6ad89c415be |
| 130 | + ThinkingDataCore: 2bda656a0e68ad95542ab029450784d38ab50949 | ||
| 131 | + ThinkingSDK: 48c27bf8af8c2035f8fb80522add51f0b3c65284 | ||
| 132 | TOCropViewController: 80b8985ad794298fb69d3341de183f33d1853654 | 132 | TOCropViewController: 80b8985ad794298fb69d3341de183f33d1853654 |
| 133 | video_thumbnail: b637e0ad5f588ca9945f6e2c927f73a69a661140 | 133 | video_thumbnail: b637e0ad5f588ca9945f6e2c927f73a69a661140 |
| 134 | webview_flutter_wkwebview: 1821ceac936eba6f7984d89a9f3bcb4dea99ebb2 | 134 | webview_flutter_wkwebview: 1821ceac936eba6f7984d89a9f3bcb4dea99ebb2 |
| 135 | 135 | ||
| 136 | -PODFILE CHECKSUM: c36ebc7b37f7e0fe81fc21e1e8614dbc72dca7fa | 136 | +PODFILE CHECKSUM: 9846d4e0a8198893058beb0df941f3d2ecdcca2c |
| 137 | 137 | ||
| 138 | COCOAPODS: 1.16.2 | 138 | COCOAPODS: 1.16.2 |
| @@ -67,7 +67,10 @@ class LoginView extends GetView<LoginController> { | @@ -67,7 +67,10 @@ class LoginView extends GetView<LoginController> { | ||
| 67 | ), | 67 | ), |
| 68 | // Welcome texts | 68 | // Welcome texts |
| 69 | Positioned( | 69 | Positioned( |
| 70 | - bottom: bottom(253), | 70 | + bottom: bottom(controller.environmentConfig.region.value == |
| 71 | + AppRegion.china | ||
| 72 | + ? 253 | ||
| 73 | + : 273), | ||
| 71 | left: 0, | 74 | left: 0, |
| 72 | right: 0, | 75 | right: 0, |
| 73 | child: Column( | 76 | child: Column( |
| 1 | +import 'package:doublefeel_flutter/core/network/dio_client.dart'; | ||
| 1 | import 'package:doublefeel_flutter/pigeon/platform_api.g.dart'; | 2 | import 'package:doublefeel_flutter/pigeon/platform_api.g.dart'; |
| 2 | import 'package:flutter/foundation.dart'; | 3 | import 'package:flutter/foundation.dart'; |
| 4 | +import 'package:flutter/widgets.dart'; | ||
| 3 | import 'package:get/get.dart'; | 5 | import 'package:get/get.dart'; |
| 4 | 6 | ||
| 5 | import '../constants/app_const.dart'; | 7 | import '../constants/app_const.dart'; |
| @@ -19,9 +21,26 @@ class AppEnvironmentConfig { | @@ -19,9 +21,26 @@ class AppEnvironmentConfig { | ||
| 19 | Future<AppEnvironmentConfig> init() async { | 21 | Future<AppEnvironmentConfig> init() async { |
| 20 | environment.value = await _storage.readEnvironment(); | 22 | environment.value = await _storage.readEnvironment(); |
| 21 | _isNativeDebug = await _platformHostApi.isDebugEnvoriment(); | 23 | _isNativeDebug = await _platformHostApi.isDebugEnvoriment(); |
| 24 | + final stored = await _storage.readRegion(); | ||
| 25 | + if (stored == null) { | ||
| 26 | + final detected = _detectRegionFromLocale(); | ||
| 27 | + await setRegion(detected); | ||
| 28 | + } else { | ||
| 29 | + region.value = stored; | ||
| 30 | + } | ||
| 22 | return this; | 31 | return this; |
| 23 | } | 32 | } |
| 24 | 33 | ||
| 34 | + AppRegion _detectRegionFromLocale() { | ||
| 35 | + final country = WidgetsBinding | ||
| 36 | + .instance.platformDispatcher.locale.countryCode | ||
| 37 | + ?.toUpperCase(); | ||
| 38 | + return switch (country) { | ||
| 39 | + 'CN' => AppRegion.china, | ||
| 40 | + _ => AppRegion.global, | ||
| 41 | + }; | ||
| 42 | + } | ||
| 43 | + | ||
| 25 | Future<void> setEnvironment(AppEnvironment value) async { | 44 | Future<void> setEnvironment(AppEnvironment value) async { |
| 26 | environment.value = value; | 45 | environment.value = value; |
| 27 | await _storage.writeEnvironment(value); | 46 | await _storage.writeEnvironment(value); |
| @@ -30,7 +49,22 @@ class AppEnvironmentConfig { | @@ -30,7 +49,22 @@ class AppEnvironmentConfig { | ||
| 30 | bool _isNativeDebug = false; | 49 | bool _isNativeDebug = false; |
| 31 | 50 | ||
| 32 | bool get isDebug => kDebugMode || _isNativeDebug; | 51 | bool get isDebug => kDebugMode || _isNativeDebug; |
| 33 | - String get serverBaseUrl => resolveServerUrl(AppConst.serverBaseUrl); | 52 | + |
| 53 | + final Rx<AppRegion> region = AppRegion.global.obs; | ||
| 54 | + | ||
| 55 | + Future<void> setRegion(AppRegion value) async { | ||
| 56 | + region.value = value; | ||
| 57 | + await _storage.writeRegion(value); | ||
| 58 | + Get.find<DioClient>().refreshBaseUrl(); | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + String get serverBaseUrl { | ||
| 62 | + final regionUrl = switch (region.value) { | ||
| 63 | + AppRegion.china => AppConst.serverBaseUrl, | ||
| 64 | + AppRegion.global => AppConst.serverBaseUrlGlobal, | ||
| 65 | + }; | ||
| 66 | + return resolveServerUrl(regionUrl); | ||
| 67 | + } | ||
| 34 | 68 | ||
| 35 | String resolveServerUrl(String url) { | 69 | String resolveServerUrl(String url) { |
| 36 | return resolveServerUrlFor(environment.value, url); | 70 | return resolveServerUrlFor(environment.value, url); |
| @@ -64,3 +98,5 @@ class AppEnvironmentConfig { | @@ -64,3 +98,5 @@ class AppEnvironmentConfig { | ||
| 64 | 98 | ||
| 65 | static const environmentPrefsName = StorageConst.appEnvironmentPrefsName; | 99 | static const environmentPrefsName = StorageConst.appEnvironmentPrefsName; |
| 66 | } | 100 | } |
| 101 | + | ||
| 102 | +enum AppRegion { china, global } |
| @@ -3,6 +3,8 @@ abstract final class AppConst { | @@ -3,6 +3,8 @@ abstract final class AppConst { | ||
| 3 | static const String appName = 'DoubleFeel'; | 3 | static const String appName = 'DoubleFeel'; |
| 4 | 4 | ||
| 5 | static const String serverBaseUrl = 'https://api.doublefeel.cn'; | 5 | static const String serverBaseUrl = 'https://api.doublefeel.cn'; |
| 6 | + static const String serverBaseUrlGlobal = 'https://api.doublefeel.cn'; | ||
| 7 | + | ||
| 6 | static const String prefixXlabServerHost = 'xlab'; | 8 | static const String prefixXlabServerHost = 'xlab'; |
| 7 | static const String prefixDevServerHost = 'dev'; | 9 | static const String prefixDevServerHost = 'dev'; |
| 8 | 10 |
| @@ -3,7 +3,7 @@ abstract final class StorageConst { | @@ -3,7 +3,7 @@ abstract final class StorageConst { | ||
| 3 | static const String appEnvironmentPrefsName = | 3 | static const String appEnvironmentPrefsName = |
| 4 | 'double_feel_environment_config'; | 4 | 'double_feel_environment_config'; |
| 5 | static const String appEnvironmentKey = 'environment'; | 5 | static const String appEnvironmentKey = 'environment'; |
| 6 | - | 6 | + static const String appRegionKey = 'region'; |
| 7 | static const String appSettingsPrefsName = 'app_settings'; | 7 | static const String appSettingsPrefsName = 'app_settings'; |
| 8 | static const String termsAgreedKey = 'terms_agreed'; | 8 | static const String termsAgreedKey = 'terms_agreed'; |
| 9 | static const String lastLoginMethodKey = 'last_login_method'; | 9 | static const String lastLoginMethodKey = 'last_login_method'; |
| 1 | +import 'package:doublefeel_flutter/core/config/app_environment_config.dart'; | ||
| 1 | import 'package:shared_preferences/shared_preferences.dart'; | 2 | import 'package:shared_preferences/shared_preferences.dart'; |
| 2 | 3 | ||
| 3 | import '../../core/config/app_environment.dart'; | 4 | import '../../core/config/app_environment.dart'; |
| @@ -31,6 +32,18 @@ class LocalStorage { | @@ -31,6 +32,18 @@ class LocalStorage { | ||
| 31 | ); | 32 | ); |
| 32 | } | 33 | } |
| 33 | 34 | ||
| 35 | + Future<AppRegion?> readRegion() async { | ||
| 36 | + final ordinal = sharedPreferences.getInt(StorageConst.appRegionKey); | ||
| 37 | + if (ordinal == null) { | ||
| 38 | + return null; | ||
| 39 | + } | ||
| 40 | + return AppRegion.values[ordinal]; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + Future<void> writeRegion(AppRegion region) async { | ||
| 44 | + await sharedPreferences.setInt(StorageConst.appRegionKey, region.index); | ||
| 45 | + } | ||
| 46 | + | ||
| 34 | // ─── App Settings Storage ────────────────────────────────────────────────── | 47 | // ─── App Settings Storage ────────────────────────────────────────────────── |
| 35 | 48 | ||
| 36 | bool get termsAgreed => | 49 | bool get termsAgreed => |
| @@ -105,8 +105,8 @@ | @@ -105,8 +105,8 @@ | ||
| 105 | "phoneLoginCodeSentSuccess": "Code sent", | 105 | "phoneLoginCodeSentSuccess": "Code sent", |
| 106 | "phoneLoginInvalidCode": "Invalid verification code", | 106 | "phoneLoginInvalidCode": "Invalid verification code", |
| 107 | "todayHealthDataAuthTitle": "Syncing Health Data", | 107 | "todayHealthDataAuthTitle": "Syncing Health Data", |
| 108 | - "todayHealthDataAuthDescription": "DoubleFeel needs access to your Apple Health data to provide stress analysis, sleep insights, and health reminders. Please complete health data authorization. If already authorized, the first sync may take a few minutes.\nIf your Apple Watch hasn't been worn long enough, there may not be sufficient data yet. Please continue wearing your watch to complete data collection.", | ||
| 109 | - "todayHealthDataAuthAction": "Allow Health Access", | 108 | + "todayHealthDataAuthDescription": "DoubleFeel needs access to your Apple Health data to provide stress insights, Live Stress tracking, and health recommendations.\nIf you haven’t granted access, please allow permissions below. If you have already granted access, syncing your health data may take a few minutes. Please try again later.", |
| 109 | + "todayHealthDataAuthAction": "Continue", | ||
| 110 | "measureYourHrvNow": "How to take a measurement", | 110 | "measureYourHrvNow": "How to take a measurement", |
| 111 | "todayBottomSheetGotIt": "Got it", | 111 | "todayBottomSheetGotIt": "Got it", |
| 112 | "todayFaqTitle": "FAQ", | 112 | "todayFaqTitle": "FAQ", |
| @@ -119,9 +119,9 @@ | @@ -119,9 +119,9 @@ | ||
| 119 | "todayFaqLinkWatchFaceBlackScreen": "Why does the watch face turn black?", | 119 | "todayFaqLinkWatchFaceBlackScreen": "Why does the watch face turn black?", |
| 120 | "todayStressStatusTitle": "Overall stress status", | 120 | "todayStressStatusTitle": "Overall stress status", |
| 121 | "todayHrvPrincipleTitle": "How HRV is measured", | 121 | "todayHrvPrincipleTitle": "How HRV is measured", |
| 122 | - "todayRealtimeStressTitle": "How real-time stress works", | ||
| 123 | - "todayStressStatusOverload": "Stress overload", | ||
| 124 | - "todayStressStatusCaution": "Stress warning", | 122 | + "todayRealtimeStressTitle": "How Live Stress works", |
| 123 | + "todayStressStatusOverload": "Overload", | ||
| 124 | + "todayStressStatusCaution": "Pay Attention", | ||
| 125 | "todayStressStatusNormal": "Normal", | 125 | "todayStressStatusNormal": "Normal", |
| 126 | "todayStressStatusExcellent": "Excellent", | 126 | "todayStressStatusExcellent": "Excellent", |
| 127 | "todayStressStatusInsufficientData": "Insufficient data", | 127 | "todayStressStatusInsufficientData": "Insufficient data", |
| @@ -130,15 +130,15 @@ | @@ -130,15 +130,15 @@ | ||
| 130 | "todayStressStatusNormalDescription": "Your current body state is within your normal fluctuation range.", | 130 | "todayStressStatusNormalDescription": "Your current body state is within your normal fluctuation range.", |
| 131 | "todayStressStatusExcellentDescription": "Your current HRV is higher than your recent average, indicating better recovery and overall state.", | 131 | "todayStressStatusExcellentDescription": "Your current HRV is higher than your recent average, indicating better recovery and overall state.", |
| 132 | "todayStressStatusInsufficientDataDescription": "There is not enough available data to accurately assess your stress state yet.", | 132 | "todayStressStatusInsufficientDataDescription": "There is not enough available data to accurately assess your stress state yet.", |
| 133 | - "todayHrvMeasurementIntro": "Apple Watch measures HRV every 2-5 hours by default. If you want to measure it manually right now, follow these steps:", | ||
| 134 | - "todayHrvMeasurementStep1": "1. Wear your Apple Watch snugly, sit down, and stay calm", | ||
| 135 | - "todayHrvMeasurementStep2": "2. Open Mindfulness on Apple Watch and start Breathe", | ||
| 136 | - "todayHrvMeasurementStep3": "3. Keep breathing steadily and wait 1-3 minutes", | ||
| 137 | - "todayHrvMeasurementStep4": "4. After breathing is complete, lock and unlock your iPhone once", | ||
| 138 | - "todayHrvMeasurementStep5": "5. Wait about one minute. DoubleFeel will receive and display your data", | ||
| 139 | - "todayHrvMeasurementHint": "Tip: Data comes from Apple Watch. After measurement, there may be delays or data may not sync immediately. If this happens, measure again and wait for the data to be read.", | 133 | + "todayHrvMeasurementIntro": "Apple Watch measures HRV automatically every 2–5 hours. If you’d like to take a manual measurement, follow these steps:", |
| 134 | + "todayHrvMeasurementStep1": "1. Wear your Apple Watch, sit down, and stay relaxed.", | ||
| 135 | + "todayHrvMeasurementStep2": "2. Open the “Mindfulness” app on your Apple Watch and start a “Breathe” session.", | ||
| 136 | + "todayHrvMeasurementStep3": "3. Keep your breathing steady and wait for 1–3 minutes.", | ||
| 137 | + "todayHrvMeasurementStep4": "4. After the breathing session ends, lock your Apple Watch and unlock your iPhone once.", | ||
| 138 | + "todayHrvMeasurementStep5": "5. Wait about one minute. DoubleFeel will receive and display your data.", | ||
| 139 | + "todayHrvMeasurementHint": "Tip: Your data comes from Apple Watch. There may be a delay after measurement, or the data may not sync immediately. If this happens, please try measuring again and wait for the data to sync.", | ||
| 140 | "todayHrvMeasurementWarning": "Note: Health permissions must be enabled, and Low Power Mode must be turned off.", | 140 | "todayHrvMeasurementWarning": "Note: Health permissions must be enabled, and Low Power Mode must be turned off.", |
| 141 | - "todayStressStatusWhatTitle": "What is overall stress status?", | 141 | + "todayStressStatusWhatTitle": "What is Overall Stress Status?", |
| 142 | "todayStressStatusWhatDescription1": "DoubleFeel combines your HRV (heart rate variability), resting heart rate, and body-state changes from the past 30 days to assess your overall stress level.", | 142 | "todayStressStatusWhatDescription1": "DoubleFeel combines your HRV (heart rate variability), resting heart rate, and body-state changes from the past 30 days to assess your overall stress level.", |
| 143 | "todayStressStatusWhatDescription2": "Because HRV fluctuates with emotions, exercise, sleep, and fatigue, a single reading has limited value. We recommend focusing on your overall stress status across the day, which is more stable and useful. It helps you understand your body state and helps close contacts notice changes in time.", | 143 | "todayStressStatusWhatDescription2": "Because HRV fluctuates with emotions, exercise, sleep, and fatigue, a single reading has limited value. We recommend focusing on your overall stress status across the day, which is more stable and useful. It helps you understand your body state and helps close contacts notice changes in time.", |
| 144 | "todayStressStatusWhyHrvTitle": "Why use HRV (heart rate variability)?", | 144 | "todayStressStatusWhyHrvTitle": "Why use HRV (heart rate variability)?", |
| @@ -149,7 +149,7 @@ | @@ -149,7 +149,7 @@ | ||
| 149 | "todayStressStatusHrvChangesFast": "· HRV changes quickly, making it useful for short-term body-state changes.", | 149 | "todayStressStatusHrvChangesFast": "· HRV changes quickly, making it useful for short-term body-state changes.", |
| 150 | "todayStressStatusAppWatchDifferenceTitle": "How are stress statuses on the phone app and Apple Watch different?", | 150 | "todayStressStatusAppWatchDifferenceTitle": "How are stress statuses on the phone app and Apple Watch different?", |
| 151 | "todayStressStatusAppWatchDifferenceApp": "The phone app home page shows the day's overall stress status, combining HRV, resting heart rate, and overall trends.", | 151 | "todayStressStatusAppWatchDifferenceApp": "The phone app home page shows the day's overall stress status, combining HRV, resting heart rate, and overall trends.", |
| 152 | - "todayStressStatusAppWatchDifferenceWatch": "Apple Watch shows the most recent real-time stress status, which is better for quickly checking your current body changes.", | 152 | + "todayStressStatusAppWatchDifferenceWatch": "Apple Watch shows the most recent Live Stress status, which is better for quickly checking your current body changes.", |
| 153 | "todayStressStatusWaitingDataTitle": "Why does Waiting for data appear?", | 153 | "todayStressStatusWaitingDataTitle": "Why does Waiting for data appear?", |
| 154 | "todayStressStatusWaitingDataDescription1": "Waiting for data means the current amount of collected data is not enough to generate a reliable stress assessment.", | 154 | "todayStressStatusWaitingDataDescription1": "Waiting for data means the current amount of collected data is not enough to generate a reliable stress assessment.", |
| 155 | "todayStressStatusWaitingDataDescription2": "Please keep wearing your Apple Watch and wait for the system to collect data automatically.", | 155 | "todayStressStatusWaitingDataDescription2": "Please keep wearing your Apple Watch and wait for the system to collect data automatically.", |
| @@ -163,36 +163,36 @@ | @@ -163,36 +163,36 @@ | ||
| 163 | "todayHrvPrincipleHowMeasureDescription2": "DoubleFeel calculates HRV (heart rate variability) indicators based on this data to assess your body stress and recovery state.", | 163 | "todayHrvPrincipleHowMeasureDescription2": "DoubleFeel calculates HRV (heart rate variability) indicators based on this data to assess your body stress and recovery state.", |
| 164 | "todayHrvPrincipleHowMeasureDescription3": "HRV is sensitive to stress, fatigue, sleep, emotions, and recovery, so it helps us notice body-state changes earlier.", | 164 | "todayHrvPrincipleHowMeasureDescription3": "HRV is sensitive to stress, fatigue, sleep, emotions, and recovery, so it helps us notice body-state changes earlier.", |
| 165 | "todayHrvPrincipleHowMeasureDescription4": "To make results more accurate, DoubleFeel compares your current HRV state with your own 30-day average instead of comparing it directly with other people.", | 165 | "todayHrvPrincipleHowMeasureDescription4": "To make results more accurate, DoubleFeel compares your current HRV state with your own 30-day average instead of comparing it directly with other people.", |
| 166 | - "todayRealtimeStressWhatTitle": "What is real-time stress?", | ||
| 167 | - "todayRealtimeStressWhatDescription1": "Real-time stress is a body stress indicator dynamically generated by DoubleFeel based on your current HRV, heart rate state, and changes in your personal history.", | 166 | + "todayRealtimeStressWhatTitle": "What is Live Stress?", |
| 167 | + "todayRealtimeStressWhatDescription1": "Live Stress is a body stress indicator dynamically generated by DoubleFeel based on your current HRV, heart rate state, and changes in your personal history.", | ||
| 168 | "todayRealtimeStressWhatDescription2": "A higher stress value means your body state is deviating more from your usual baseline and may reflect fatigue, insufficient recovery, or high stress.", | 168 | "todayRealtimeStressWhatDescription2": "A higher stress value means your body state is deviating more from your usual baseline and may reflect fatigue, insufficient recovery, or high stress.", |
| 169 | "todayRealtimeStressWhatDescription3": "It helps you notice body changes faster and adjust rest, exercise, and daily rhythm in time.", | 169 | "todayRealtimeStressWhatDescription3": "It helps you notice body changes faster and adjust rest, exercise, and daily rhythm in time.", |
| 170 | - "todayRealtimeStressDivisionTitle": "How is real-time stress divided?", | ||
| 171 | - "todayRealtimeStressDivisionIntro": "Real-time stress is shown as a percentage:", | 170 | + "todayRealtimeStressDivisionTitle": "How is Live Stress Scored?", |
| 171 | + "todayRealtimeStressDivisionIntro": "Live stress is displayed as a percentage:", | ||
| 172 | "todayRealtimeStressExcellentRange": "Excellent: 1%-20%", | 172 | "todayRealtimeStressExcellentRange": "Excellent: 1%-20%", |
| 173 | "todayRealtimeStressNormalRange": "Normal: 21%-60%", | 173 | "todayRealtimeStressNormalRange": "Normal: 21%-60%", |
| 174 | - "todayRealtimeStressCautionRange": "Stress warning: 61%-80%", | ||
| 175 | - "todayRealtimeStressOverloadRange": "Stress overload: 81%-100%", | ||
| 176 | - "todayRealtimeStressExcellentDescription": "Your recovery state is good and you are generally relaxed.", | ||
| 177 | - "todayRealtimeStressNormalDescription": "Your body is within the normal fluctuation range.", | ||
| 178 | - "todayRealtimeStressCautionDescription": "Your body may be accumulating stress and needs proper rest and recovery.", | ||
| 179 | - "todayRealtimeStressOverloadDescription": "Your body stress is clearly high. Reduce load and pay attention to sleep and recovery.", | ||
| 180 | - "todayRealtimeStressDivisionBaseline": "These ranges are adjusted dynamically based on your personal baseline and should not be directly compared between users.", | ||
| 181 | - "todayRealtimeStressDivisionAwake": "Real-time stress mainly reflects body stress changes while awake.", | ||
| 182 | - "todayRealtimeStressLowBetterTitle": "Is lower real-time stress always better?", | 174 | + "todayRealtimeStressCautionRange": "Pay Attention: 61%-80%", |
| 175 | + "todayRealtimeStressOverloadRange": "Overload: 81%-100%", | ||
| 176 | + "todayRealtimeStressExcellentDescription": "Your body is in a good recovery state and feels more relaxed.", | ||
| 177 | + "todayRealtimeStressNormalDescription": "Your body is within a normal fluctuation range.", | ||
| 178 | + "todayRealtimeStressCautionDescription": "Your body may be accumulating stress. Consider taking breaks and recovering.", | ||
| 179 | + "todayRealtimeStressOverloadDescription": "Your body may be under significant stress. Consider reducing your workload and prioritizing sleep and recovery.", | ||
| 180 | + "todayRealtimeStressDivisionBaseline": "These ranges are adjusted based on your personal baseline and activity patterns. Results are not directly comparable between different users.", | ||
| 181 | + "todayRealtimeStressDivisionAwake": "Live Stress mainly reflects changes in your body’s stress level while you are awake.", | ||
| 182 | + "todayRealtimeStressLowBetterTitle": "Is lower Live Stress always better?", | ||
| 183 | "todayRealtimeStressLowBetterNo": "Not necessarily.", | 183 | "todayRealtimeStressLowBetterNo": "Not necessarily.", |
| 184 | "todayRealtimeStressLowBetterType": "Body stress can be normal or abnormal.", | 184 | "todayRealtimeStressLowBetterType": "Body stress can be normal or abnormal.", |
| 185 | "todayRealtimeStressLowBetterExample": "For example, real-time stress rising briefly during or after exercise is a normal recovery response. It can also rise temporarily during focused work or emotional excitement, which are normal body adjustments.", | 185 | "todayRealtimeStressLowBetterExample": "For example, real-time stress rising briefly during or after exercise is a normal recovery response. It can also rise temporarily during focused work or emotional excitement, which are normal body adjustments.", |
| 186 | "todayRealtimeStressLowBetterHighStress": "But if stress remains high while resting, sitting for a long time, or after poor sleep, it may indicate physical fatigue, mental stress, insufficient sleep recovery, incomplete exercise recovery, too much caffeine, alcohol, stimulants, or possible discomfort.", | 186 | "todayRealtimeStressLowBetterHighStress": "But if stress remains high while resting, sitting for a long time, or after poor sleep, it may indicate physical fatigue, mental stress, insufficient sleep recovery, incomplete exercise recovery, too much caffeine, alcohol, stimulants, or possible discomfort.", |
| 187 | "todayRealtimeStressLowBetterTrend": "DoubleFeel focuses more on your long-term trend than on a single fluctuation.", | 187 | "todayRealtimeStressLowBetterTrend": "DoubleFeel focuses more on your long-term trend than on a single fluctuation.", |
| 188 | - "todayRealtimeStressScenarioTitle": "When should HRV and real-time stress be used?", | 188 | + "todayRealtimeStressScenarioTitle": "When should HRV and Live Stress be used?", |
| 189 | "todayRealtimeStressScenarioHrvDefault": "With Apple Watch default settings, HRV updates every 2-5 hours.", | 189 | "todayRealtimeStressScenarioHrvDefault": "With Apple Watch default settings, HRV updates every 2-5 hours.", |
| 190 | "todayRealtimeStressScenarioRegionLimit": "In some regions, Apple Watch breathing features may be limited, which can affect HRV update frequency. Turning on breathing features may also consume more battery.", | 190 | "todayRealtimeStressScenarioRegionLimit": "In some regions, Apple Watch breathing features may be limited, which can affect HRV update frequency. Turning on breathing features may also consume more battery.", |
| 191 | - "todayRealtimeStressScenarioIntro": "To address the long interval between HRV updates, DoubleFeel designed real-time stress:", | ||
| 192 | - "todayRealtimeStressScenarioUpdateEvery6Min": "· Real-time stress updates every 6 minutes (Friend status updates rely on Apple Health sync and may experience brief delays due to system mechanisms. If your friend uses DoubleFeel frequently, their health status will be updated more promptly)", | 191 | + "todayRealtimeStressScenarioIntro": "To address the long interval between HRV updates, DoubleFeel designed Live Stress:", |
| 192 | + "todayRealtimeStressScenarioUpdateEvery6Min": "· Live Stress updates every 6 minutes (Friend status updates rely on Apple Health sync and may experience brief delays due to system mechanisms. If your friend uses DoubleFeel frequently, their health status will be updated more promptly)", | ||
| 193 | "todayRealtimeStressScenarioTimely": "· It can reflect body-state changes more promptly", | 193 | "todayRealtimeStressScenarioTimely": "· It can reflect body-state changes more promptly", |
| 194 | - "todayRealtimeStressScenarioConsistentTrend": "· In most cases, the real-time stress trend is consistent with the HRV trend", | ||
| 195 | - "todayRealtimeStressScenarioSummary": "This lets users see long-term HRV trends while also using real-time stress as a short-term body-state reference.", | 194 | + "todayRealtimeStressScenarioConsistentTrend": "· In most cases, the Live Stress trend is consistent with the HRV trend", |
| 195 | + "todayRealtimeStressScenarioSummary": "This lets users see long-term HRV trends while also using Live Stress as a short-term body-state reference.", | ||
| 196 | "todayFaqNoDataTitle": "What if the app or watch face has no data?", | 196 | "todayFaqNoDataTitle": "What if the app or watch face has no data?", |
| 197 | "todayFaqNoDataDescription1": "1. Confirm that Apple Watch is on watchOS 10.0 or above and iPhone is on iOS 14 or above. You can check system versions in About.", | 197 | "todayFaqNoDataDescription1": "1. Confirm that Apple Watch is on watchOS 10.0 or above and iPhone is on iOS 14 or above. You can check system versions in About.", |
| 198 | "todayFaqNoDataDescription2": "2. Confirm all permissions are enabled: iPhone Health > Sharing > Apps > DoubleFeel > Turn On All Permissions.", | 198 | "todayFaqNoDataDescription2": "2. Confirm all permissions are enabled: iPhone Health > Sharing > Apps > DoubleFeel > Turn On All Permissions.", |
| @@ -225,19 +225,19 @@ | @@ -225,19 +225,19 @@ | ||
| 225 | "today": "Today", | 225 | "today": "Today", |
| 226 | "yesterday": "Yesterday", | 226 | "yesterday": "Yesterday", |
| 227 | "backToToday": "Back to Today", | 227 | "backToToday": "Back to Today", |
| 228 | - "redeemOffer": "Redeem Offer", | 228 | + "redeemOffer": "Claim Offer", |
| 229 | "allPlans": "All Plans", | 229 | "allPlans": "All Plans", |
| 230 | - "clickToAddTheHrvThemedWatchFace": "Click to add the HRV-themed watch face", | ||
| 231 | - "stayOnTopOfYourHealthFluctuations": "Stay on top of your health fluctuations", | ||
| 232 | - "addACloseContact": "Add a close contact", | ||
| 233 | - "oneMorePersonLookingOutForYourHealth": "One more person looking out for your health", | ||
| 234 | - "addAFriend": "Add a friend", | ||
| 235 | - "averageHrvForTheDay": "Average HRV for the day", | ||
| 236 | - "restingHeartRate": "Resting heart rate", | ||
| 237 | - "todaySHrvTrend": "Today's HRV Trend", | 230 | + "clickToAddTheHrvThemedWatchFace": "Add HRV Watch Face", |
| 231 | + "stayOnTopOfYourHealthFluctuations": "Stay on top of your health", | ||
| 232 | + "addACloseContact": "Add a Close Contact", | ||
| 233 | + "oneMorePersonLookingOutForYourHealth": "Have someone care about your health", | ||
| 234 | + "addAFriend": "Add", | ||
| 235 | + "averageHrvForTheDay": "Avg. Hrv", | ||
| 236 | + "restingHeartRate": "RHR", | ||
| 237 | + "todaySHrvTrend": "HRV Trend", | ||
| 238 | "more": "More", | 238 | "more": "More", |
| 239 | "noDataAvailableForToday": "No data available for today", | 239 | "noDataAvailableForToday": "No data available for today", |
| 240 | - "realTimePressure": "Real-time pressure", | 240 | + "realTimePressure": "Live Stress", |
| 241 | "accountInformation": "Account Information", | 241 | "accountInformation": "Account Information", |
| 242 | "help": "Help", | 242 | "help": "Help", |
| 243 | "changeNickname": "Change Nickname", | 243 | "changeNickname": "Change Nickname", |
| @@ -259,33 +259,33 @@ | @@ -259,33 +259,33 @@ | ||
| 259 | "mobilePhoneNumber": "Mobile phone number", | 259 | "mobilePhoneNumber": "Mobile phone number", |
| 260 | "logOut": "Log Out", | 260 | "logOut": "Log Out", |
| 261 | "confirmLogoutPrompt": "Are you sure you want to log out?", | 261 | "confirmLogoutPrompt": "Are you sure you want to log out?", |
| 262 | - "confirmLogout": "Log Out", | 262 | + "confirmLogout": "Yes, I’m sure", |
| 263 | "loggedOutSuccessfully": "Logged out successfully", | 263 | "loggedOutSuccessfully": "Logged out successfully", |
| 264 | "accountDeletedSuccessfully": "Account deleted successfully", | 264 | "accountDeletedSuccessfully": "Account deleted successfully", |
| 265 | - "deleteAccountWarningTitle": "Once deleted, the account cannot be recovered! Please proceed with caution.", | ||
| 266 | - "deleteAccountWarningPrompt": "Note: Deleting the account will remove all information in this account, including but not limited to\npersonal profile, mood records, and statistical data.", | ||
| 267 | - "deleteAccountWarningNote1": "Note 1: Your health data will be saved in Apple Health, and we will not delete data from Apple Health.", | ||
| 268 | - "deleteAccountWarningNote2": "Note 2: Deleting the account will not affect your subscription status in the App Store. If you need to cancel the subscription, please cancel it manually in the App Store -> Profile -> Subscriptions.", | ||
| 269 | - "confirmDeletion": "Confirm Deletion", | ||
| 270 | - "iLlThinkAboutItSomeMore": "I'll think about it some more.", | 265 | + "deleteAccountWarningTitle": "Account deletion cannot be undone. Please proceed carefully.", |
| 266 | + "deleteAccountWarningPrompt": "1. Deleting your account will permanently remove all your data, including health records, statistics, and account information.", | ||
| 267 | + "deleteAccountWarningNote1": "2. To protect your privacy, we cannot recover deleted accounts or data.", | ||
| 268 | + "deleteAccountWarningNote2": "3. If you have an active subscription through the App Store, please cancel it in App Store → Subscriptions before deleting your account.", | ||
| 269 | + "confirmDeletion": "Delete Account", | ||
| 270 | + "iLlThinkAboutItSomeMore": "Keep My Account", | ||
| 271 | "sleep": "Sleep", | 271 | "sleep": "Sleep", |
| 272 | - "viewSleepReport": "View Sleep Report", | 272 | + "viewSleepReport": "View Details", |
| 273 | "duration": "Duration", | 273 | "duration": "Duration", |
| 274 | "quality": "Quality", | 274 | "quality": "Quality", |
| 275 | - "averageHeartRate": "Average heart rate", | 275 | + "averageHeartRate": "Avg HR", |
| 276 | "fitness": "Fitness", | 276 | "fitness": "Fitness", |
| 277 | - "viewFitnessReport": "View Fitness Report", | ||
| 278 | - "event": "Event", | 277 | + "viewFitnessReport": "View Details", |
| 278 | + "event": "Move", | ||
| 279 | "exercise": "Exercise", | 279 | "exercise": "Exercise", |
| 280 | - "standing": "Standing", | ||
| 281 | - "dailyActions": "Daily Actions", | ||
| 282 | - "trendHrvHeartRate": "HRV", | 280 | + "standing": "Stand", |
| 281 | + "dailyActions": "Actions", | ||
| 282 | + "trendHrvHeartRate": "HRV & HR", | ||
| 283 | "trendActivityBurn": "Activity", | 283 | "trendActivityBurn": "Activity", |
| 284 | "trendSleepReport": "Sleep", | 284 | "trendSleepReport": "Sleep", |
| 285 | - "reportPeriodDay": "Day", | ||
| 286 | - "reportPeriodWeek": "Week", | ||
| 287 | - "reportPeriodMonth": "Month", | ||
| 288 | - "reportPeriodYear": "Year", | 285 | + "reportPeriodDay": "D", |
| 286 | + "reportPeriodWeek": "W", | ||
| 287 | + "reportPeriodMonth": "M", | ||
| 288 | + "reportPeriodYear": "Y", | ||
| 289 | "reportDateYear": "{year}", | 289 | "reportDateYear": "{year}", |
| 290 | "reportDateMonth": "Month {month}", | 290 | "reportDateMonth": "Month {month}", |
| 291 | "reportDateMonthDay": "{month}/{day}", | 291 | "reportDateMonthDay": "{month}/{day}", |
| @@ -295,7 +295,7 @@ | @@ -295,7 +295,7 @@ | ||
| 295 | "reportDatePickerYearOption": "{year}", | 295 | "reportDatePickerYearOption": "{year}", |
| 296 | "reportDatePickerMonthOption": "{month}", | 296 | "reportDatePickerMonthOption": "{month}", |
| 297 | "reportDatePickerDayOption": "{day}", | 297 | "reportDatePickerDayOption": "{day}", |
| 298 | - "reportWaitingForData": "Waiting for data", | 298 | + "reportWaitingForData": "Waiting for Data", |
| 299 | "reportWaitingForOtherData": "Waiting for their data", | 299 | "reportWaitingForOtherData": "Waiting for their data", |
| 300 | "reportNoData": "No data", | 300 | "reportNoData": "No data", |
| 301 | "reportNoDataToday": "No data for today", | 301 | "reportNoDataToday": "No data for today", |
| @@ -350,7 +350,7 @@ | @@ -350,7 +350,7 @@ | ||
| 350 | "hrvSameAsLastMonth": "Same as last month", | 350 | "hrvSameAsLastMonth": "Same as last month", |
| 351 | "hrvMoreDaysThanLastMonth": "{count} more days than last month", | 351 | "hrvMoreDaysThanLastMonth": "{count} more days than last month", |
| 352 | "hrvFewerDaysThanLastMonth": "{count} fewer days than last month", | 352 | "hrvFewerDaysThanLastMonth": "{count} fewer days than last month", |
| 353 | - "hrvUnlockNow": "Unlock Now", | 353 | + "hrvUnlockNow": "Unlock", |
| 354 | "hrvTrendTitle": "HRV Trend", | 354 | "hrvTrendTitle": "HRV Trend", |
| 355 | "hrvPeriodAverage": "This {period} average", | 355 | "hrvPeriodAverage": "This {period} average", |
| 356 | "hrvComparedPreviousPeriod": "vs previous {period}", | 356 | "hrvComparedPreviousPeriod": "vs previous {period}", |
| @@ -416,8 +416,8 @@ | @@ -416,8 +416,8 @@ | ||
| 416 | "sleepQualityExcellentRange": ">85 pts", | 416 | "sleepQualityExcellentRange": ">85 pts", |
| 417 | "friendsAddCloseContactDescription": "Add a close contact so someone else can look out for your health", | 417 | "friendsAddCloseContactDescription": "Add a close contact so someone else can look out for your health", |
| 418 | "friendsLimitReached": "You can add up to 10 friends", | 418 | "friendsLimitReached": "You can add up to 10 friends", |
| 419 | - "friendsAddCloseContact": "Add a close contact", | ||
| 420 | - "friendsAddCloseContactWithCount": "Add a close contact ({count}/{max})", | 419 | + "friendsAddCloseContact": "Add Loved One", |
| 420 | + "friendsAddCloseContactWithCount": "Add Loved One ({count}/{max})", | ||
| 421 | "friendsMe": "Me", | 421 | "friendsMe": "Me", |
| 422 | "friendsRemarkedDisplayName": "{remark} ({name})", | 422 | "friendsRemarkedDisplayName": "{remark} ({name})", |
| 423 | "friendsRemarkSuffix": " ({remark})", | 423 | "friendsRemarkSuffix": " ({remark})", |
| @@ -434,11 +434,11 @@ | @@ -434,11 +434,11 @@ | ||
| 434 | "friendsSleepQualityNormal": "Slept well", | 434 | "friendsSleepQualityNormal": "Slept well", |
| 435 | "friendsSleepQualityAttention": "Slept poorly", | 435 | "friendsSleepQualityAttention": "Slept poorly", |
| 436 | "friendsRemove": "Remove", | 436 | "friendsRemove": "Remove", |
| 437 | - "friendsEditRemark": "Edit nickname", | ||
| 438 | - "friendsShowOnWatchFace": "Show on watch", | ||
| 439 | - "friendsShownOnWatchFace": "Shown on watch", | 437 | + "friendsEditRemark": "Edit Note", |
| 438 | + "friendsShowOnWatchFace": "Show on Watch", | ||
| 439 | + "friendsShownOnWatchFace": "Shown on Watch", | ||
| 440 | "friendsSelect": "Select a friend", | 440 | "friendsSelect": "Select a friend", |
| 441 | - "friendsSelectAndSync": "Select and sync to watch", | 441 | + "friendsSelectAndSync": "Select and sync to Watch", |
| 442 | "friendsBack": "Back", | 442 | "friendsBack": "Back", |
| 443 | "friendsTrendTitle": "{name}'s Trends", | 443 | "friendsTrendTitle": "{name}'s Trends", |
| 444 | "friendsAddAction": "Add", | 444 | "friendsAddAction": "Add", |
| @@ -450,21 +450,21 @@ | @@ -450,21 +450,21 @@ | ||
| 450 | "friendsPromptIdNotFoundMessage": "This ID doesn't exist. Check it and try again.", | 450 | "friendsPromptIdNotFoundMessage": "This ID doesn't exist. Check it and try again.", |
| 451 | "friendsPromptAlreadyFriendMessage": "You're already close contacts.", | 451 | "friendsPromptAlreadyFriendMessage": "You're already close contacts.", |
| 452 | "friendsPromptSelfIdMessage": "Enter your close contact's ID.", | 452 | "friendsPromptSelfIdMessage": "Enter your close contact's ID.", |
| 453 | - "friendsEditRemarkTitle": "Edit friend nickname", | ||
| 454 | - "friendsEditRemarkHint": "Enter a nickname", | 453 | + "friendsEditRemarkTitle": "Edit Note", |
| 454 | + "friendsEditRemarkHint": "Enter a note", | ||
| 455 | "friendsSave": "Save", | 455 | "friendsSave": "Save", |
| 456 | - "friendsDeleteConfirmTitle": "Remove {name} from your friends?", | ||
| 457 | - "friendsDeleteConfirmMessage": "You will no longer be able to view their mood or health status.", | 456 | + "friendsDeleteConfirmTitle": "Remove this friend?", |
| 457 | + "friendsDeleteConfirmMessage": "You’ll no longer receive their wellness updates after removal.", | ||
| 458 | "friendsDeleteConfirmAction": "Remove", | 458 | "friendsDeleteConfirmAction": "Remove", |
| 459 | "privacySettingsTitle": "Privacy Settings", | 459 | "privacySettingsTitle": "Privacy Settings", |
| 460 | - "privacySettingsDisableAddById": "Don't allow others to add me by ID", | 460 | + "privacySettingsDisableAddById": "Block Friend Requests", |
| 461 | "privacySettingsShowRealtimeStress": "Show real-time stress", | 461 | "privacySettingsShowRealtimeStress": "Show real-time stress", |
| 462 | - "premiumActivatedTitle": "DoubleFeel Pro is now active", | 462 | + "premiumActivatedTitle": "Congratulations! You’re now a DoubleFeel Pro member.", |
| 463 | "premiumActivatedDescription": "You can now monitor stress, sleep, and HRV in real time, build healthier habits, and share health updates with close contacts so the people who matter can stay informed.", | 463 | "premiumActivatedDescription": "You can now monitor stress, sleep, and HRV in real time, build healthier habits, and share health updates with close contacts so the people who matter can stay informed.", |
| 464 | "premiumActivatedContinue": "Continue", | 464 | "premiumActivatedContinue": "Continue", |
| 465 | - "purchaseHeroTitle": "Unlock Pro for more timely care", | ||
| 466 | - "purchaseBenefitsTitle": "Enjoy all premium benefits", | ||
| 467 | - "purchaseUnlockNow": "Unlock Now", | 465 | + "purchaseHeroTitle": "Unlock Pro, Care Better", |
| 466 | + "purchaseBenefitsTitle": "Unlock All Pro Benefits", | ||
| 467 | + "purchaseUnlockNow": "Unlock", | ||
| 468 | "purchaseRestore": "Restore", | 468 | "purchaseRestore": "Restore", |
| 469 | "purchaseTermsOfService": "Terms of Service", | 469 | "purchaseTermsOfService": "Terms of Service", |
| 470 | "purchasePrivacyPolicy": "Privacy Policy", | 470 | "purchasePrivacyPolicy": "Privacy Policy", |
| @@ -483,15 +483,15 @@ | @@ -483,15 +483,15 @@ | ||
| 483 | "purchaseApplePaymentCancelled": "The user cancelled the payment.", | 483 | "purchaseApplePaymentCancelled": "The user cancelled the payment.", |
| 484 | "purchaseApplePaymentVerificationFailed": "Payment verification failed.", | 484 | "purchaseApplePaymentVerificationFailed": "Payment verification failed.", |
| 485 | "purchaseApplePaymentFailed": "Unknown error.", | 485 | "purchaseApplePaymentFailed": "Unknown error.", |
| 486 | - "purchaseBenefitRealtimeStress": "Real-time stress monitoring", | ||
| 487 | - "purchaseBenefitStressTrends": "Weekly, monthly, and yearly stress trends", | ||
| 488 | - "purchaseBenefitActivityTrends": "Weekly, monthly, and yearly activity trends", | ||
| 489 | - "purchaseBenefitSleepReports": "Weekly, monthly, and yearly sleep reports", | ||
| 490 | - "purchaseBenefitHealthSync": "Real-time health data sync", | ||
| 491 | - "purchaseBenefitContactNotifications": "Real-time health updates for close contacts", | ||
| 492 | - "purchaseBenefitCustomWatchFace": "Exclusive custom watch faces", | 486 | + "purchaseBenefitRealtimeStress": "Live Stress Monitoring", |
| 487 | + "purchaseBenefitStressTrends": "Daily / Monthly / Yearly HRV Trends", | ||
| 488 | + "purchaseBenefitActivityTrends": "Daily / Monthly / Yearly Activity Trends", | ||
| 489 | + "purchaseBenefitSleepReports": "Daily / Monthly / Yearly Sleep Reports", | ||
| 490 | + "purchaseBenefitHealthSync": "Real-Time Health Data Sync", | ||
| 491 | + "purchaseBenefitContactNotifications": "Real-Time Health Updates to Loved Ones", | ||
| 492 | + "purchaseBenefitCustomWatchFace": "Exclusive Custom Watch Faces", | ||
| 493 | "purchaseBenefitSleepAnalysis": "Sleep analysis", | 493 | "purchaseBenefitSleepAnalysis": "Sleep analysis", |
| 494 | - "purchaseBenefitFutureFeatures": "Free access to future premium features", | 494 | + "purchaseBenefitFutureFeatures": "More Pro Benefits Coming Soon", |
| 495 | "purchaseNotesTitle": "Notes", | 495 | "purchaseNotesTitle": "Notes", |
| 496 | "purchaseNoteSubscription": "After you confirm and pay, the subscription will renew automatically through your iTunes account. Your Apple account will be charged within 24 hours before the current period ends, and the subscription will renew for another period. To cancel, turn off auto-renewal in your iTunes/Apple ID subscription settings at least 24 hours before the current period ends.\n\nDoubleFeel Pro is a virtual product. Purchases are non-refundable except through the App Store refund process. Tap ", | 496 | "purchaseNoteSubscription": "After you confirm and pay, the subscription will renew automatically through your iTunes account. Your Apple account will be charged within 24 hours before the current period ends, and the subscription will renew for another period. To cancel, turn off auto-renewal in your iTunes/Apple ID subscription settings at least 24 hours before the current period ends.\n\nDoubleFeel Pro is a virtual product. Purchases are non-refundable except through the App Store refund process. Tap ", |
| 497 | "purchaseLinkLearnMore": "Learn More", | 497 | "purchaseLinkLearnMore": "Learn More", |
| @@ -531,33 +531,33 @@ | @@ -531,33 +531,33 @@ | ||
| 531 | "refundHelpDescription": "If you have questions about refunds or experience payment errors, duplicate charges, or a missing order, contact DoubleFeel Support and we will do our best to assist.", | 531 | "refundHelpDescription": "If you have questions about refunds or experience payment errors, duplicate charges, or a missing order, contact DoubleFeel Support and we will do our best to assist.", |
| 532 | "refundFaqTitle": "DoubleFeel FAQs", | 532 | "refundFaqTitle": "DoubleFeel FAQs", |
| 533 | "appReviewPromptTitle": "Enjoying DoubleFeel?", | 533 | "appReviewPromptTitle": "Enjoying DoubleFeel?", |
| 534 | - "appReviewPromptMessage": "Hi! Is DoubleFeel helping you better understand\nyour stress and sleep? 💜", | 534 | + "appReviewPromptMessage": "We'd love to know if DoubleFeel is helping you better understand your stress and sleep. 💜", |
| 535 | "appReviewPromptLikeActionEmoji": "😍", | 535 | "appReviewPromptLikeActionEmoji": "😍", |
| 536 | "appReviewPromptLikeAction": "Love it", | 536 | "appReviewPromptLikeAction": "Love it", |
| 537 | - "appReviewPromptFeedbackAction": "I have feedback", | ||
| 538 | - "appReviewFeedbackTitle": "We're sorry DoubleFeel didn't give you\na good experience", | ||
| 539 | - "appReviewFeedbackMessage": "Would you tell us what went wrong?\nYour feedback helps us improve the stress and health experience. 💜", | 537 | + "appReviewPromptFeedbackAction": "Not Really", |
| 538 | + "appReviewFeedbackTitle": "Sorry DoubleFeel Didn't Meet Your Expectations", | ||
| 539 | + "appReviewFeedbackMessage": "Tell us what happened and how we can improve. Your feedback helps make DoubleFeel better for everyone. 💜", | ||
| 540 | "appReviewFeedbackSendAction": "Send Feedback", | 540 | "appReviewFeedbackSendAction": "Send Feedback", |
| 541 | "appReviewFeedbackLaterAction": "Maybe Later", | 541 | "appReviewFeedbackLaterAction": "Maybe Later", |
| 542 | "appReviewIllustrationPlaceholder": "Illustration Placeholder", | 542 | "appReviewIllustrationPlaceholder": "Illustration Placeholder", |
| 543 | "overallStressLevelToday": "Overall Stress Level Today", | 543 | "overallStressLevelToday": "Overall Stress Level Today", |
| 544 | "stressLevelsOnThatDay": "Stress Levels on That Day", | 544 | "stressLevelsOnThatDay": "Stress Levels on That Day", |
| 545 | "noPressureDataAvailableAtThisTime": "No pressure data available at this time", | 545 | "noPressureDataAvailableAtThisTime": "No pressure data available at this time", |
| 546 | - "membersCanViewTheCompleteData": "Members can view the complete data", | ||
| 547 | - "unlockNow": "Unlock Now", | 546 | + "membersCanViewTheCompleteData": "Unlock Pro to view", |
| 547 | + "unlockNow": "Unlock", | ||
| 548 | "pressureOverload": "Pressure Overload", | 548 | "pressureOverload": "Pressure Overload", |
| 549 | "beMindfulOfStress": "Be Aware of Stress", | 549 | "beMindfulOfStress": "Be Aware of Stress", |
| 550 | "statusNormal": "Status: Normal", | 550 | "statusNormal": "Status: Normal", |
| 551 | "inExcellentCondition": "In excellent condition", | 551 | "inExcellentCondition": "In excellent condition", |
| 552 | "waitingForData": "Waiting for data", | 552 | "waitingForData": "Waiting for data", |
| 553 | "pressure": "Pressure", | 553 | "pressure": "Pressure", |
| 554 | - "mostRecent": "Most recent", | 554 | + "mostRecent": "Latest Reading", |
| 555 | "theDayBeforeYesterday": "The day before yesterday", | 555 | "theDayBeforeYesterday": "The day before yesterday", |
| 556 | "uploadPhotos": "Upload Photos", | 556 | "uploadPhotos": "Upload Photos", |
| 557 | "filming": "Filming", | 557 | "filming": "Filming", |
| 558 | "unlockTheProVersion": "Unlock the Pro Version", | 558 | "unlockTheProVersion": "Unlock the Pro Version", |
| 559 | "embarkOnAJourneyOfStressAwarenessAndWellnessSupport": "Embark on a Journey of Stress Awareness and Wellness Support", | 559 | "embarkOnAJourneyOfStressAwarenessAndWellnessSupport": "Embark on a Journey of Stress Awareness and Wellness Support", |
| 560 | - "sharePartnerCodeTemplate": "My friend ID: {inviteCode}. Hey ❤️ Come and use DoubleFeel with me! It helps us care for each other—track stress and sleep, view HRV and body status, and stay updated on each other's health in real-time. Come join me 👉 https://apps.apple.com/cn/app/doublefeel-%E5%8F%8C%E4%BA%BA%E6%83%85%E7%BB%AA%E5%85%B1%E4%BA%ABhrv%E5%8E%8B%E5%8A%9B%E6%B0%B4%E5%B9%B3%E8%87%AA%E6%B5%8B%E7%9D%A1%E7%9C%A0%E8%AE%B0%E5%BD%95/id6747254434", | 560 | + "sharePartnerCodeTemplate": "My friend ID: {inviteCode}. Hey❤! Come and use DoubleFeel with me! It helps us care for each other—track stress and sleep, view HRV and body status, and stay updated on each other's health in real-time. Come join me 👉 https://apps.apple.com/cn/app/doublefeel-%E5%8F%8C%E4%BA%BA%E6%83%85%E7%BB%AA%E5%85%B1%E4%BA%ABhrv%E5%8E%8B%E5%8A%9B%E6%B0%B4%E5%B9%B3%E8%87%AA%E6%B5%8B%E7%9D%A1%E7%9C%A0%E8%AE%B0%E5%BD%95/id6747254434", |
| 561 | "@sharePartnerCodeTemplate": { | 561 | "@sharePartnerCodeTemplate": { |
| 562 | "description": "Share partner code template", | 562 | "description": "Share partner code template", |
| 563 | "placeholders": { | 563 | "placeholders": { |
| @@ -566,13 +566,13 @@ | @@ -566,13 +566,13 @@ | ||
| 566 | } | 566 | } |
| 567 | } | 567 | } |
| 568 | }, | 568 | }, |
| 569 | - "bindPartnerIdNotExistTitle": "ID does not exist", | ||
| 570 | - "bindPartnerIdNotExistMessage": "This ID does not exist. Please check and try again", | 569 | + "bindPartnerIdNotExistTitle": "User not found", |
| 570 | + "bindPartnerIdNotExistMessage": "This user ID doesn’t exist. Please check and try again.", | ||
| 571 | "bindPartnerDialogGotIt": "Got it", | 571 | "bindPartnerDialogGotIt": "Got it", |
| 572 | - "bindPartnerAddFailedTitle": "Failed to add", | ||
| 573 | - "bindPartnerAddFailedMessage": "This user does not allow adding friends, cannot add them", | ||
| 574 | - "bindPartnerAlreadyFriendTitle": "They are already your friend", | ||
| 575 | - "bindPartnerAlreadyFriendMessage": "Please do not add again", | 572 | + "bindPartnerAddFailedTitle": "Unable to add friend", |
| 573 | + "bindPartnerAddFailedMessage": "This user doesn’t allow friend requests.", | ||
| 574 | + "bindPartnerAlreadyFriendTitle": "You’re already friends", | ||
| 575 | + "bindPartnerAlreadyFriendMessage": "No need to add them again", | ||
| 576 | "friendStatusTitle": "{remarkName}'s Status", | 576 | "friendStatusTitle": "{remarkName}'s Status", |
| 577 | "@friendStatusTitle": { | 577 | "@friendStatusTitle": { |
| 578 | "description": "Friend status title", | 578 | "description": "Friend status title", |
| @@ -582,10 +582,10 @@ | @@ -582,10 +582,10 @@ | ||
| 582 | } | 582 | } |
| 583 | } | 583 | } |
| 584 | }, | 584 | }, |
| 585 | - "annualMemberDiscounts": "Annual Member Discounts", | ||
| 586 | - "specialOffers": "Special Offers", | ||
| 587 | - "currentPrice": "Current Price", | ||
| 588 | - "originalPrice": "Original price {price}", | 585 | + "annualMemberDiscounts": "Special Offer", |
| 586 | + "specialOffers": "OFF", | ||
| 587 | + "currentPrice": "Now", | ||
| 588 | + "originalPrice": "Was {price}", | ||
| 589 | "@originalPrice": { | 589 | "@originalPrice": { |
| 590 | "description": "Original price label", | 590 | "description": "Original price label", |
| 591 | "placeholders": { | 591 | "placeholders": { |
| @@ -594,11 +594,11 @@ | @@ -594,11 +594,11 @@ | ||
| 594 | } | 594 | } |
| 595 | } | 595 | } |
| 596 | }, | 596 | }, |
| 597 | - "freeRedemptionOffer": "Free Redemption Offer", | 597 | + "freeRedemptionOffer": "Claim now", |
| 598 | "cellPhoneNumber": "Cell phone number", | 598 | "cellPhoneNumber": "Cell phone number", |
| 599 | "todayOnWeeklyCalendar": "today", | 599 | "todayOnWeeklyCalendar": "today", |
| 600 | - "hrvTrendForThatDay": "HRV Trend for That Day", | ||
| 601 | - "todaySAverageHrv": "Today's Average HRV", | 600 | + "hrvTrendForThatDay": "Avg. Hrv", |
| 601 | + "todaySAverageHrv": "Avg. Hrv Today", | ||
| 602 | "helpNoDataReason1": "1. Ensure your Apple Watch is on watchOS 10.0+ and iPhone is on iOS 14+. The system version can be checked in [Settings] -> [General] -> [About].", | 602 | "helpNoDataReason1": "1. Ensure your Apple Watch is on watchOS 10.0+ and iPhone is on iOS 14+. The system version can be checked in [Settings] -> [General] -> [About].", |
| 603 | "helpNoDataReason2": "2. Confirm if all permissions are enabled: iPhone [Health] -> [Sharing] -> [Apps] -> [DoubleFeel] -> [Turn On All].", | 603 | "helpNoDataReason2": "2. Confirm if all permissions are enabled: iPhone [Health] -> [Sharing] -> [Apps] -> [DoubleFeel] -> [Turn On All].", |
| 604 | "helpNoDataReason3": "3. Confirm if devices are in power-saving mode, low battery status, or if the watch is not worn snugly, as these conditions affect watch data collection.", | 604 | "helpNoDataReason3": "3. Confirm if devices are in power-saving mode, low battery status, or if the watch is not worn snugly, as these conditions affect watch data collection.", |
| @@ -613,7 +613,7 @@ | @@ -613,7 +613,7 @@ | ||
| 613 | "noHealthDataError2Body": "DoubleFeel requires access to Apple Health data to provide stress stats, alerts, and recommendations. If not authorized, some features may not work properly.\n\nRest assured, all health data is only stored locally and will not be uploaded.\n\nTo enable permissions, follow the prompt and select Allow All -> Health -> DoubleFeel in iOS Settings.", | 613 | "noHealthDataError2Body": "DoubleFeel requires access to Apple Health data to provide stress stats, alerts, and recommendations. If not authorized, some features may not work properly.\n\nRest assured, all health data is only stored locally and will not be uploaded.\n\nTo enable permissions, follow the prompt and select Allow All -> Health -> DoubleFeel in iOS Settings.", |
| 614 | "noHealthDataError3Title": "Error 3: System Issue", | 614 | "noHealthDataError3Title": "Error 3: System Issue", |
| 615 | "noHealthDataError3Body": "Based on user feedback, we found two reasons why HRV or heart rate data might be missing:\n\n1. Apple Watch not connected\n · If your Apple Watch has not been worn for a long time, heart rate data may not be collected.\n · Please check iOS Health App -> 'My Watch' to confirm if recent heart rate data was recorded while wearing the Apple Watch.\n · If not, please try wearing your Apple Watch for data collection and turn on the heart rate feature supported by Apple.\n\n2. Heart rate or HRV data missing in the past 30 days\n · Open iOS Health App -> Browse -> 'Heart Rate' or 'HRV' -> 'No Data Found' to confirm if it's missing.\n · If data is missing, please wear the watch again, restart your iPhone and Apple Watch, then open DoubleFeel again.", | 615 | "noHealthDataError3Body": "Based on user feedback, we found two reasons why HRV or heart rate data might be missing:\n\n1. Apple Watch not connected\n · If your Apple Watch has not been worn for a long time, heart rate data may not be collected.\n · Please check iOS Health App -> 'My Watch' to confirm if recent heart rate data was recorded while wearing the Apple Watch.\n · If not, please try wearing your Apple Watch for data collection and turn on the heart rate feature supported by Apple.\n\n2. Heart rate or HRV data missing in the past 30 days\n · Open iOS Health App -> Browse -> 'Heart Rate' or 'HRV' -> 'No Data Found' to confirm if it's missing.\n · If data is missing, please wear the watch again, restart your iPhone and Apple Watch, then open DoubleFeel again.", |
| 616 | - "noHealthDataGoToSettings": "Go to Settings", | 616 | + "noHealthDataGoToSettings": "Enable Now", |
| 617 | "watchThemeDefaultTheme": "Default Theme", | 617 | "watchThemeDefaultTheme": "Default Theme", |
| 618 | "watchThemeNoWatchTitle": "Apple Watch Not Found", | 618 | "watchThemeNoWatchTitle": "Apple Watch Not Found", |
| 619 | "watchThemeNoWatchMessage": "Pair an Apple Watch and try again", | 619 | "watchThemeNoWatchMessage": "Pair an Apple Watch and try again", |
| @@ -621,17 +621,17 @@ | @@ -621,17 +621,17 @@ | ||
| 621 | "watchThemeSelectFriend": "Select Friend", | 621 | "watchThemeSelectFriend": "Select Friend", |
| 622 | "watchThemeSelectAndSync": "Select and Sync to Watch", | 622 | "watchThemeSelectAndSync": "Select and Sync to Watch", |
| 623 | "watchThemeCustomTheme": "Custom Themes", | 623 | "watchThemeCustomTheme": "Custom Themes", |
| 624 | - "watchThemeCustomDescription": "Capture every mood with your creativity and make a watch face that's uniquely yours.", | ||
| 625 | - "watchThemeCreateTheme": "Create Theme", | 624 | + "watchThemeCustomDescription": "Turn your emotions into a watch face that's uniquely yours. ⭐", |
| 625 | + "watchThemeCreateTheme": "Create a Theme", | ||
| 626 | "watchThemeOfficialTheme": "Official Themes", | 626 | "watchThemeOfficialTheme": "Official Themes", |
| 627 | "watchThemeRenameStatus": "Rename Status", | 627 | "watchThemeRenameStatus": "Rename Status", |
| 628 | "watchThemeEnterNickname": "Enter a name", | 628 | "watchThemeEnterNickname": "Enter a name", |
| 629 | "watchThemeSave": "Save", | 629 | "watchThemeSave": "Save", |
| 630 | "watchThemeContentUnavailable": "This content is unavailable. Try another one.", | 630 | "watchThemeContentUnavailable": "This content is unavailable. Try another one.", |
| 631 | - "watchThemeDialPreview": "Watch Face Preview", | 631 | + "watchThemeDialPreview": "Watch Preview", |
| 632 | "watchThemeSwitchFriend": "Switch Friend", | 632 | "watchThemeSwitchFriend": "Switch Friend", |
| 633 | "watchThemeStatusPreview": "Status Preview", | 633 | "watchThemeStatusPreview": "Status Preview", |
| 634 | - "watchThemeAddWatchFace": "Add Watch Face", | 634 | + "watchThemeAddWatchFace": "Add to Watch", |
| 635 | "watchThemeInUse": "In Use", | 635 | "watchThemeInUse": "In Use", |
| 636 | "watchThemeUseNow": "Use Now", | 636 | "watchThemeUseNow": "Use Now", |
| 637 | "watchThemeSyncIntro": "Open the DoubleFeel app on your Apple Watch, then tap Next below.", | 637 | "watchThemeSyncIntro": "Open the DoubleFeel app on your Apple Watch, then tap Next below.", |
| @@ -647,7 +647,7 @@ | @@ -647,7 +647,7 @@ | ||
| 647 | } | 647 | } |
| 648 | } | 648 | } |
| 649 | }, | 649 | }, |
| 650 | - "watchThemePreview": "Preview", | 650 | + "watchThemePreview": "Watch Themes", |
| 651 | "watchThemeDelete": "Delete", | 651 | "watchThemeDelete": "Delete", |
| 652 | "watchThemePageTitle": "Watch Themes", | 652 | "watchThemePageTitle": "Watch Themes", |
| 653 | "watchThemeImagesOnly": "Images only", | 653 | "watchThemeImagesOnly": "Images only", |
| @@ -343,10 +343,10 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -343,10 +343,10 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 343 | 343 | ||
| 344 | @override | 344 | @override |
| 345 | String get todayHealthDataAuthDescription => | 345 | String get todayHealthDataAuthDescription => |
| 346 | - 'DoubleFeel needs access to your Apple Health data to provide stress analysis, sleep insights, and health reminders. Please complete health data authorization. If already authorized, the first sync may take a few minutes.\nIf your Apple Watch hasn\'t been worn long enough, there may not be sufficient data yet. Please continue wearing your watch to complete data collection.'; | 346 | + 'DoubleFeel needs access to your Apple Health data to provide stress insights, Live Stress tracking, and health recommendations.\nIf you haven’t granted access, please allow permissions below. If you have already granted access, syncing your health data may take a few minutes. Please try again later.'; |
| 347 | 347 | ||
| 348 | @override | 348 | @override |
| 349 | - String get todayHealthDataAuthAction => 'Allow Health Access'; | 349 | + String get todayHealthDataAuthAction => 'Continue'; |
| 350 | 350 | ||
| 351 | @override | 351 | @override |
| 352 | String get measureYourHrvNow => 'How to take a measurement'; | 352 | String get measureYourHrvNow => 'How to take a measurement'; |
| @@ -390,13 +390,13 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -390,13 +390,13 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 390 | String get todayHrvPrincipleTitle => 'How HRV is measured'; | 390 | String get todayHrvPrincipleTitle => 'How HRV is measured'; |
| 391 | 391 | ||
| 392 | @override | 392 | @override |
| 393 | - String get todayRealtimeStressTitle => 'How real-time stress works'; | 393 | + String get todayRealtimeStressTitle => 'How Live Stress works'; |
| 394 | 394 | ||
| 395 | @override | 395 | @override |
| 396 | - String get todayStressStatusOverload => 'Stress overload'; | 396 | + String get todayStressStatusOverload => 'Overload'; |
| 397 | 397 | ||
| 398 | @override | 398 | @override |
| 399 | - String get todayStressStatusCaution => 'Stress warning'; | 399 | + String get todayStressStatusCaution => 'Pay Attention'; |
| 400 | 400 | ||
| 401 | @override | 401 | @override |
| 402 | String get todayStressStatusNormal => 'Normal'; | 402 | String get todayStressStatusNormal => 'Normal'; |
| @@ -429,38 +429,38 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -429,38 +429,38 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 429 | 429 | ||
| 430 | @override | 430 | @override |
| 431 | String get todayHrvMeasurementIntro => | 431 | String get todayHrvMeasurementIntro => |
| 432 | - 'Apple Watch measures HRV every 2-5 hours by default. If you want to measure it manually right now, follow these steps:'; | 432 | + 'Apple Watch measures HRV automatically every 2–5 hours. If you’d like to take a manual measurement, follow these steps:'; |
| 433 | 433 | ||
| 434 | @override | 434 | @override |
| 435 | String get todayHrvMeasurementStep1 => | 435 | String get todayHrvMeasurementStep1 => |
| 436 | - '1. Wear your Apple Watch snugly, sit down, and stay calm'; | 436 | + '1. Wear your Apple Watch, sit down, and stay relaxed.'; |
| 437 | 437 | ||
| 438 | @override | 438 | @override |
| 439 | String get todayHrvMeasurementStep2 => | 439 | String get todayHrvMeasurementStep2 => |
| 440 | - '2. Open Mindfulness on Apple Watch and start Breathe'; | 440 | + '2. Open the “Mindfulness” app on your Apple Watch and start a “Breathe” session.'; |
| 441 | 441 | ||
| 442 | @override | 442 | @override |
| 443 | String get todayHrvMeasurementStep3 => | 443 | String get todayHrvMeasurementStep3 => |
| 444 | - '3. Keep breathing steadily and wait 1-3 minutes'; | 444 | + '3. Keep your breathing steady and wait for 1–3 minutes.'; |
| 445 | 445 | ||
| 446 | @override | 446 | @override |
| 447 | String get todayHrvMeasurementStep4 => | 447 | String get todayHrvMeasurementStep4 => |
| 448 | - '4. After breathing is complete, lock and unlock your iPhone once'; | 448 | + '4. After the breathing session ends, lock your Apple Watch and unlock your iPhone once.'; |
| 449 | 449 | ||
| 450 | @override | 450 | @override |
| 451 | String get todayHrvMeasurementStep5 => | 451 | String get todayHrvMeasurementStep5 => |
| 452 | - '5. Wait about one minute. DoubleFeel will receive and display your data'; | 452 | + '5. Wait about one minute. DoubleFeel will receive and display your data.'; |
| 453 | 453 | ||
| 454 | @override | 454 | @override |
| 455 | String get todayHrvMeasurementHint => | 455 | String get todayHrvMeasurementHint => |
| 456 | - 'Tip: Data comes from Apple Watch. After measurement, there may be delays or data may not sync immediately. If this happens, measure again and wait for the data to be read.'; | 456 | + 'Tip: Your data comes from Apple Watch. There may be a delay after measurement, or the data may not sync immediately. If this happens, please try measuring again and wait for the data to sync.'; |
| 457 | 457 | ||
| 458 | @override | 458 | @override |
| 459 | String get todayHrvMeasurementWarning => | 459 | String get todayHrvMeasurementWarning => |
| 460 | 'Note: Health permissions must be enabled, and Low Power Mode must be turned off.'; | 460 | 'Note: Health permissions must be enabled, and Low Power Mode must be turned off.'; |
| 461 | 461 | ||
| 462 | @override | 462 | @override |
| 463 | - String get todayStressStatusWhatTitle => 'What is overall stress status?'; | 463 | + String get todayStressStatusWhatTitle => 'What is Overall Stress Status?'; |
| 464 | 464 | ||
| 465 | @override | 465 | @override |
| 466 | String get todayStressStatusWhatDescription1 => | 466 | String get todayStressStatusWhatDescription1 => |
| @@ -503,7 +503,7 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -503,7 +503,7 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 503 | 503 | ||
| 504 | @override | 504 | @override |
| 505 | String get todayStressStatusAppWatchDifferenceWatch => | 505 | String get todayStressStatusAppWatchDifferenceWatch => |
| 506 | - 'Apple Watch shows the most recent real-time stress status, which is better for quickly checking your current body changes.'; | 506 | + 'Apple Watch shows the most recent Live Stress status, which is better for quickly checking your current body changes.'; |
| 507 | 507 | ||
| 508 | @override | 508 | @override |
| 509 | String get todayStressStatusWaitingDataTitle => | 509 | String get todayStressStatusWaitingDataTitle => |
| @@ -557,11 +557,11 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -557,11 +557,11 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 557 | 'To make results more accurate, DoubleFeel compares your current HRV state with your own 30-day average instead of comparing it directly with other people.'; | 557 | 'To make results more accurate, DoubleFeel compares your current HRV state with your own 30-day average instead of comparing it directly with other people.'; |
| 558 | 558 | ||
| 559 | @override | 559 | @override |
| 560 | - String get todayRealtimeStressWhatTitle => 'What is real-time stress?'; | 560 | + String get todayRealtimeStressWhatTitle => 'What is Live Stress?'; |
| 561 | 561 | ||
| 562 | @override | 562 | @override |
| 563 | String get todayRealtimeStressWhatDescription1 => | 563 | String get todayRealtimeStressWhatDescription1 => |
| 564 | - 'Real-time stress is a body stress indicator dynamically generated by DoubleFeel based on your current HRV, heart rate state, and changes in your personal history.'; | 564 | + 'Live Stress is a body stress indicator dynamically generated by DoubleFeel based on your current HRV, heart rate state, and changes in your personal history.'; |
| 565 | 565 | ||
| 566 | @override | 566 | @override |
| 567 | String get todayRealtimeStressWhatDescription2 => | 567 | String get todayRealtimeStressWhatDescription2 => |
| @@ -572,12 +572,11 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -572,12 +572,11 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 572 | 'It helps you notice body changes faster and adjust rest, exercise, and daily rhythm in time.'; | 572 | 'It helps you notice body changes faster and adjust rest, exercise, and daily rhythm in time.'; |
| 573 | 573 | ||
| 574 | @override | 574 | @override |
| 575 | - String get todayRealtimeStressDivisionTitle => | ||
| 576 | - 'How is real-time stress divided?'; | 575 | + String get todayRealtimeStressDivisionTitle => 'How is Live Stress Scored?'; |
| 577 | 576 | ||
| 578 | @override | 577 | @override |
| 579 | String get todayRealtimeStressDivisionIntro => | 578 | String get todayRealtimeStressDivisionIntro => |
| 580 | - 'Real-time stress is shown as a percentage:'; | 579 | + 'Live stress is displayed as a percentage:'; |
| 581 | 580 | ||
| 582 | @override | 581 | @override |
| 583 | String get todayRealtimeStressExcellentRange => 'Excellent: 1%-20%'; | 582 | String get todayRealtimeStressExcellentRange => 'Excellent: 1%-20%'; |
| @@ -586,38 +585,38 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -586,38 +585,38 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 586 | String get todayRealtimeStressNormalRange => 'Normal: 21%-60%'; | 585 | String get todayRealtimeStressNormalRange => 'Normal: 21%-60%'; |
| 587 | 586 | ||
| 588 | @override | 587 | @override |
| 589 | - String get todayRealtimeStressCautionRange => 'Stress warning: 61%-80%'; | 588 | + String get todayRealtimeStressCautionRange => 'Pay Attention: 61%-80%'; |
| 590 | 589 | ||
| 591 | @override | 590 | @override |
| 592 | - String get todayRealtimeStressOverloadRange => 'Stress overload: 81%-100%'; | 591 | + String get todayRealtimeStressOverloadRange => 'Overload: 81%-100%'; |
| 593 | 592 | ||
| 594 | @override | 593 | @override |
| 595 | String get todayRealtimeStressExcellentDescription => | 594 | String get todayRealtimeStressExcellentDescription => |
| 596 | - 'Your recovery state is good and you are generally relaxed.'; | 595 | + 'Your body is in a good recovery state and feels more relaxed.'; |
| 597 | 596 | ||
| 598 | @override | 597 | @override |
| 599 | String get todayRealtimeStressNormalDescription => | 598 | String get todayRealtimeStressNormalDescription => |
| 600 | - 'Your body is within the normal fluctuation range.'; | 599 | + 'Your body is within a normal fluctuation range.'; |
| 601 | 600 | ||
| 602 | @override | 601 | @override |
| 603 | String get todayRealtimeStressCautionDescription => | 602 | String get todayRealtimeStressCautionDescription => |
| 604 | - 'Your body may be accumulating stress and needs proper rest and recovery.'; | 603 | + 'Your body may be accumulating stress. Consider taking breaks and recovering.'; |
| 605 | 604 | ||
| 606 | @override | 605 | @override |
| 607 | String get todayRealtimeStressOverloadDescription => | 606 | String get todayRealtimeStressOverloadDescription => |
| 608 | - 'Your body stress is clearly high. Reduce load and pay attention to sleep and recovery.'; | 607 | + 'Your body may be under significant stress. Consider reducing your workload and prioritizing sleep and recovery.'; |
| 609 | 608 | ||
| 610 | @override | 609 | @override |
| 611 | String get todayRealtimeStressDivisionBaseline => | 610 | String get todayRealtimeStressDivisionBaseline => |
| 612 | - 'These ranges are adjusted dynamically based on your personal baseline and should not be directly compared between users.'; | 611 | + 'These ranges are adjusted based on your personal baseline and activity patterns. Results are not directly comparable between different users.'; |
| 613 | 612 | ||
| 614 | @override | 613 | @override |
| 615 | String get todayRealtimeStressDivisionAwake => | 614 | String get todayRealtimeStressDivisionAwake => |
| 616 | - 'Real-time stress mainly reflects body stress changes while awake.'; | 615 | + 'Live Stress mainly reflects changes in your body’s stress level while you are awake.'; |
| 617 | 616 | ||
| 618 | @override | 617 | @override |
| 619 | String get todayRealtimeStressLowBetterTitle => | 618 | String get todayRealtimeStressLowBetterTitle => |
| 620 | - 'Is lower real-time stress always better?'; | 619 | + 'Is lower Live Stress always better?'; |
| 621 | 620 | ||
| 622 | @override | 621 | @override |
| 623 | String get todayRealtimeStressLowBetterNo => 'Not necessarily.'; | 622 | String get todayRealtimeStressLowBetterNo => 'Not necessarily.'; |
| @@ -640,7 +639,7 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -640,7 +639,7 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 640 | 639 | ||
| 641 | @override | 640 | @override |
| 642 | String get todayRealtimeStressScenarioTitle => | 641 | String get todayRealtimeStressScenarioTitle => |
| 643 | - 'When should HRV and real-time stress be used?'; | 642 | + 'When should HRV and Live Stress be used?'; |
| 644 | 643 | ||
| 645 | @override | 644 | @override |
| 646 | String get todayRealtimeStressScenarioHrvDefault => | 645 | String get todayRealtimeStressScenarioHrvDefault => |
| @@ -652,11 +651,11 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -652,11 +651,11 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 652 | 651 | ||
| 653 | @override | 652 | @override |
| 654 | String get todayRealtimeStressScenarioIntro => | 653 | String get todayRealtimeStressScenarioIntro => |
| 655 | - 'To address the long interval between HRV updates, DoubleFeel designed real-time stress:'; | 654 | + 'To address the long interval between HRV updates, DoubleFeel designed Live Stress:'; |
| 656 | 655 | ||
| 657 | @override | 656 | @override |
| 658 | String get todayRealtimeStressScenarioUpdateEvery6Min => | 657 | String get todayRealtimeStressScenarioUpdateEvery6Min => |
| 659 | - '· Real-time stress updates every 6 minutes (Friend status updates rely on Apple Health sync and may experience brief delays due to system mechanisms. If your friend uses DoubleFeel frequently, their health status will be updated more promptly)'; | 658 | + '· Live Stress updates every 6 minutes (Friend status updates rely on Apple Health sync and may experience brief delays due to system mechanisms. If your friend uses DoubleFeel frequently, their health status will be updated more promptly)'; |
| 660 | 659 | ||
| 661 | @override | 660 | @override |
| 662 | String get todayRealtimeStressScenarioTimely => | 661 | String get todayRealtimeStressScenarioTimely => |
| @@ -664,11 +663,11 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -664,11 +663,11 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 664 | 663 | ||
| 665 | @override | 664 | @override |
| 666 | String get todayRealtimeStressScenarioConsistentTrend => | 665 | String get todayRealtimeStressScenarioConsistentTrend => |
| 667 | - '· In most cases, the real-time stress trend is consistent with the HRV trend'; | 666 | + '· In most cases, the Live Stress trend is consistent with the HRV trend'; |
| 668 | 667 | ||
| 669 | @override | 668 | @override |
| 670 | String get todayRealtimeStressScenarioSummary => | 669 | String get todayRealtimeStressScenarioSummary => |
| 671 | - 'This lets users see long-term HRV trends while also using real-time stress as a short-term body-state reference.'; | 670 | + 'This lets users see long-term HRV trends while also using Live Stress as a short-term body-state reference.'; |
| 672 | 671 | ||
| 673 | @override | 672 | @override |
| 674 | String get todayFaqNoDataTitle => | 673 | String get todayFaqNoDataTitle => |
| @@ -792,37 +791,35 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -792,37 +791,35 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 792 | String get backToToday => 'Back to Today'; | 791 | String get backToToday => 'Back to Today'; |
| 793 | 792 | ||
| 794 | @override | 793 | @override |
| 795 | - String get redeemOffer => 'Redeem Offer'; | 794 | + String get redeemOffer => 'Claim Offer'; |
| 796 | 795 | ||
| 797 | @override | 796 | @override |
| 798 | String get allPlans => 'All Plans'; | 797 | String get allPlans => 'All Plans'; |
| 799 | 798 | ||
| 800 | @override | 799 | @override |
| 801 | - String get clickToAddTheHrvThemedWatchFace => | ||
| 802 | - 'Click to add the HRV-themed watch face'; | 800 | + String get clickToAddTheHrvThemedWatchFace => 'Add HRV Watch Face'; |
| 803 | 801 | ||
| 804 | @override | 802 | @override |
| 805 | - String get stayOnTopOfYourHealthFluctuations => | ||
| 806 | - 'Stay on top of your health fluctuations'; | 803 | + String get stayOnTopOfYourHealthFluctuations => 'Stay on top of your health'; |
| 807 | 804 | ||
| 808 | @override | 805 | @override |
| 809 | - String get addACloseContact => 'Add a close contact'; | 806 | + String get addACloseContact => 'Add a Close Contact'; |
| 810 | 807 | ||
| 811 | @override | 808 | @override |
| 812 | String get oneMorePersonLookingOutForYourHealth => | 809 | String get oneMorePersonLookingOutForYourHealth => |
| 813 | - 'One more person looking out for your health'; | 810 | + 'Have someone care about your health'; |
| 814 | 811 | ||
| 815 | @override | 812 | @override |
| 816 | - String get addAFriend => 'Add a friend'; | 813 | + String get addAFriend => 'Add'; |
| 817 | 814 | ||
| 818 | @override | 815 | @override |
| 819 | - String get averageHrvForTheDay => 'Average HRV for the day'; | 816 | + String get averageHrvForTheDay => 'Avg. Hrv'; |
| 820 | 817 | ||
| 821 | @override | 818 | @override |
| 822 | - String get restingHeartRate => 'Resting heart rate'; | 819 | + String get restingHeartRate => 'RHR'; |
| 823 | 820 | ||
| 824 | @override | 821 | @override |
| 825 | - String get todaySHrvTrend => 'Today\'s HRV Trend'; | 822 | + String get todaySHrvTrend => 'HRV Trend'; |
| 826 | 823 | ||
| 827 | @override | 824 | @override |
| 828 | String get more => 'More'; | 825 | String get more => 'More'; |
| @@ -831,7 +828,7 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -831,7 +828,7 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 831 | String get noDataAvailableForToday => 'No data available for today'; | 828 | String get noDataAvailableForToday => 'No data available for today'; |
| 832 | 829 | ||
| 833 | @override | 830 | @override |
| 834 | - String get realTimePressure => 'Real-time pressure'; | 831 | + String get realTimePressure => 'Live Stress'; |
| 835 | 832 | ||
| 836 | @override | 833 | @override |
| 837 | String get accountInformation => 'Account Information'; | 834 | String get accountInformation => 'Account Information'; |
| @@ -900,7 +897,7 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -900,7 +897,7 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 900 | String get confirmLogoutPrompt => 'Are you sure you want to log out?'; | 897 | String get confirmLogoutPrompt => 'Are you sure you want to log out?'; |
| 901 | 898 | ||
| 902 | @override | 899 | @override |
| 903 | - String get confirmLogout => 'Log Out'; | 900 | + String get confirmLogout => 'Yes, I’m sure'; |
| 904 | 901 | ||
| 905 | @override | 902 | @override |
| 906 | String get loggedOutSuccessfully => 'Logged out successfully'; | 903 | String get loggedOutSuccessfully => 'Logged out successfully'; |
| @@ -910,31 +907,31 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -910,31 +907,31 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 910 | 907 | ||
| 911 | @override | 908 | @override |
| 912 | String get deleteAccountWarningTitle => | 909 | String get deleteAccountWarningTitle => |
| 913 | - 'Once deleted, the account cannot be recovered! Please proceed with caution.'; | 910 | + 'Account deletion cannot be undone. Please proceed carefully.'; |
| 914 | 911 | ||
| 915 | @override | 912 | @override |
| 916 | String get deleteAccountWarningPrompt => | 913 | String get deleteAccountWarningPrompt => |
| 917 | - 'Note: Deleting the account will remove all information in this account, including but not limited to\npersonal profile, mood records, and statistical data.'; | 914 | + '1. Deleting your account will permanently remove all your data, including health records, statistics, and account information.'; |
| 918 | 915 | ||
| 919 | @override | 916 | @override |
| 920 | String get deleteAccountWarningNote1 => | 917 | String get deleteAccountWarningNote1 => |
| 921 | - 'Note 1: Your health data will be saved in Apple Health, and we will not delete data from Apple Health.'; | 918 | + '2. To protect your privacy, we cannot recover deleted accounts or data.'; |
| 922 | 919 | ||
| 923 | @override | 920 | @override |
| 924 | String get deleteAccountWarningNote2 => | 921 | String get deleteAccountWarningNote2 => |
| 925 | - 'Note 2: Deleting the account will not affect your subscription status in the App Store. If you need to cancel the subscription, please cancel it manually in the App Store -> Profile -> Subscriptions.'; | 922 | + '3. If you have an active subscription through the App Store, please cancel it in App Store → Subscriptions before deleting your account.'; |
| 926 | 923 | ||
| 927 | @override | 924 | @override |
| 928 | - String get confirmDeletion => 'Confirm Deletion'; | 925 | + String get confirmDeletion => 'Delete Account'; |
| 929 | 926 | ||
| 930 | @override | 927 | @override |
| 931 | - String get iLlThinkAboutItSomeMore => 'I\'ll think about it some more.'; | 928 | + String get iLlThinkAboutItSomeMore => 'Keep My Account'; |
| 932 | 929 | ||
| 933 | @override | 930 | @override |
| 934 | String get sleep => 'Sleep'; | 931 | String get sleep => 'Sleep'; |
| 935 | 932 | ||
| 936 | @override | 933 | @override |
| 937 | - String get viewSleepReport => 'View Sleep Report'; | 934 | + String get viewSleepReport => 'View Details'; |
| 938 | 935 | ||
| 939 | @override | 936 | @override |
| 940 | String get duration => 'Duration'; | 937 | String get duration => 'Duration'; |
| @@ -943,28 +940,28 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -943,28 +940,28 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 943 | String get quality => 'Quality'; | 940 | String get quality => 'Quality'; |
| 944 | 941 | ||
| 945 | @override | 942 | @override |
| 946 | - String get averageHeartRate => 'Average heart rate'; | 943 | + String get averageHeartRate => 'Avg HR'; |
| 947 | 944 | ||
| 948 | @override | 945 | @override |
| 949 | String get fitness => 'Fitness'; | 946 | String get fitness => 'Fitness'; |
| 950 | 947 | ||
| 951 | @override | 948 | @override |
| 952 | - String get viewFitnessReport => 'View Fitness Report'; | 949 | + String get viewFitnessReport => 'View Details'; |
| 953 | 950 | ||
| 954 | @override | 951 | @override |
| 955 | - String get event => 'Event'; | 952 | + String get event => 'Move'; |
| 956 | 953 | ||
| 957 | @override | 954 | @override |
| 958 | String get exercise => 'Exercise'; | 955 | String get exercise => 'Exercise'; |
| 959 | 956 | ||
| 960 | @override | 957 | @override |
| 961 | - String get standing => 'Standing'; | 958 | + String get standing => 'Stand'; |
| 962 | 959 | ||
| 963 | @override | 960 | @override |
| 964 | - String get dailyActions => 'Daily Actions'; | 961 | + String get dailyActions => 'Actions'; |
| 965 | 962 | ||
| 966 | @override | 963 | @override |
| 967 | - String get trendHrvHeartRate => 'HRV'; | 964 | + String get trendHrvHeartRate => 'HRV & HR'; |
| 968 | 965 | ||
| 969 | @override | 966 | @override |
| 970 | String get trendActivityBurn => 'Activity'; | 967 | String get trendActivityBurn => 'Activity'; |
| @@ -973,16 +970,16 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -973,16 +970,16 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 973 | String get trendSleepReport => 'Sleep'; | 970 | String get trendSleepReport => 'Sleep'; |
| 974 | 971 | ||
| 975 | @override | 972 | @override |
| 976 | - String get reportPeriodDay => 'Day'; | 973 | + String get reportPeriodDay => 'D'; |
| 977 | 974 | ||
| 978 | @override | 975 | @override |
| 979 | - String get reportPeriodWeek => 'Week'; | 976 | + String get reportPeriodWeek => 'W'; |
| 980 | 977 | ||
| 981 | @override | 978 | @override |
| 982 | - String get reportPeriodMonth => 'Month'; | 979 | + String get reportPeriodMonth => 'M'; |
| 983 | 980 | ||
| 984 | @override | 981 | @override |
| 985 | - String get reportPeriodYear => 'Year'; | 982 | + String get reportPeriodYear => 'Y'; |
| 986 | 983 | ||
| 987 | @override | 984 | @override |
| 988 | String reportDateYear(int year) { | 985 | String reportDateYear(int year) { |
| @@ -1026,7 +1023,7 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -1026,7 +1023,7 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 1026 | } | 1023 | } |
| 1027 | 1024 | ||
| 1028 | @override | 1025 | @override |
| 1029 | - String get reportWaitingForData => 'Waiting for data'; | 1026 | + String get reportWaitingForData => 'Waiting for Data'; |
| 1030 | 1027 | ||
| 1031 | @override | 1028 | @override |
| 1032 | String get reportWaitingForOtherData => 'Waiting for their data'; | 1029 | String get reportWaitingForOtherData => 'Waiting for their data'; |
| @@ -1207,7 +1204,7 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -1207,7 +1204,7 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 1207 | } | 1204 | } |
| 1208 | 1205 | ||
| 1209 | @override | 1206 | @override |
| 1210 | - String get hrvUnlockNow => 'Unlock Now'; | 1207 | + String get hrvUnlockNow => 'Unlock'; |
| 1211 | 1208 | ||
| 1212 | @override | 1209 | @override |
| 1213 | String get hrvTrendTitle => 'HRV Trend'; | 1210 | String get hrvTrendTitle => 'HRV Trend'; |
| @@ -1438,11 +1435,11 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -1438,11 +1435,11 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 1438 | String get friendsLimitReached => 'You can add up to 10 friends'; | 1435 | String get friendsLimitReached => 'You can add up to 10 friends'; |
| 1439 | 1436 | ||
| 1440 | @override | 1437 | @override |
| 1441 | - String get friendsAddCloseContact => 'Add a close contact'; | 1438 | + String get friendsAddCloseContact => 'Add Loved One'; |
| 1442 | 1439 | ||
| 1443 | @override | 1440 | @override |
| 1444 | String friendsAddCloseContactWithCount(int count, int max) { | 1441 | String friendsAddCloseContactWithCount(int count, int max) { |
| 1445 | - return 'Add a close contact ($count/$max)'; | 1442 | + return 'Add Loved One ($count/$max)'; |
| 1446 | } | 1443 | } |
| 1447 | 1444 | ||
| 1448 | @override | 1445 | @override |
| @@ -1506,19 +1503,19 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -1506,19 +1503,19 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 1506 | String get friendsRemove => 'Remove'; | 1503 | String get friendsRemove => 'Remove'; |
| 1507 | 1504 | ||
| 1508 | @override | 1505 | @override |
| 1509 | - String get friendsEditRemark => 'Edit nickname'; | 1506 | + String get friendsEditRemark => 'Edit Note'; |
| 1510 | 1507 | ||
| 1511 | @override | 1508 | @override |
| 1512 | - String get friendsShowOnWatchFace => 'Show on watch'; | 1509 | + String get friendsShowOnWatchFace => 'Show on Watch'; |
| 1513 | 1510 | ||
| 1514 | @override | 1511 | @override |
| 1515 | - String get friendsShownOnWatchFace => 'Shown on watch'; | 1512 | + String get friendsShownOnWatchFace => 'Shown on Watch'; |
| 1516 | 1513 | ||
| 1517 | @override | 1514 | @override |
| 1518 | String get friendsSelect => 'Select a friend'; | 1515 | String get friendsSelect => 'Select a friend'; |
| 1519 | 1516 | ||
| 1520 | @override | 1517 | @override |
| 1521 | - String get friendsSelectAndSync => 'Select and sync to watch'; | 1518 | + String get friendsSelectAndSync => 'Select and sync to Watch'; |
| 1522 | 1519 | ||
| 1523 | @override | 1520 | @override |
| 1524 | String get friendsBack => 'Back'; | 1521 | String get friendsBack => 'Back'; |
| @@ -1558,22 +1555,22 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -1558,22 +1555,22 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 1558 | String get friendsPromptSelfIdMessage => 'Enter your close contact\'s ID.'; | 1555 | String get friendsPromptSelfIdMessage => 'Enter your close contact\'s ID.'; |
| 1559 | 1556 | ||
| 1560 | @override | 1557 | @override |
| 1561 | - String get friendsEditRemarkTitle => 'Edit friend nickname'; | 1558 | + String get friendsEditRemarkTitle => 'Edit Note'; |
| 1562 | 1559 | ||
| 1563 | @override | 1560 | @override |
| 1564 | - String get friendsEditRemarkHint => 'Enter a nickname'; | 1561 | + String get friendsEditRemarkHint => 'Enter a note'; |
| 1565 | 1562 | ||
| 1566 | @override | 1563 | @override |
| 1567 | String get friendsSave => 'Save'; | 1564 | String get friendsSave => 'Save'; |
| 1568 | 1565 | ||
| 1569 | @override | 1566 | @override |
| 1570 | String friendsDeleteConfirmTitle(String name) { | 1567 | String friendsDeleteConfirmTitle(String name) { |
| 1571 | - return 'Remove $name from your friends?'; | 1568 | + return 'Remove this friend?'; |
| 1572 | } | 1569 | } |
| 1573 | 1570 | ||
| 1574 | @override | 1571 | @override |
| 1575 | String get friendsDeleteConfirmMessage => | 1572 | String get friendsDeleteConfirmMessage => |
| 1576 | - 'You will no longer be able to view their mood or health status.'; | 1573 | + 'You’ll no longer receive their wellness updates after removal.'; |
| 1577 | 1574 | ||
| 1578 | @override | 1575 | @override |
| 1579 | String get friendsDeleteConfirmAction => 'Remove'; | 1576 | String get friendsDeleteConfirmAction => 'Remove'; |
| @@ -1582,14 +1579,14 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -1582,14 +1579,14 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 1582 | String get privacySettingsTitle => 'Privacy Settings'; | 1579 | String get privacySettingsTitle => 'Privacy Settings'; |
| 1583 | 1580 | ||
| 1584 | @override | 1581 | @override |
| 1585 | - String get privacySettingsDisableAddById => | ||
| 1586 | - 'Don\'t allow others to add me by ID'; | 1582 | + String get privacySettingsDisableAddById => 'Block Friend Requests'; |
| 1587 | 1583 | ||
| 1588 | @override | 1584 | @override |
| 1589 | String get privacySettingsShowRealtimeStress => 'Show real-time stress'; | 1585 | String get privacySettingsShowRealtimeStress => 'Show real-time stress'; |
| 1590 | 1586 | ||
| 1591 | @override | 1587 | @override |
| 1592 | - String get premiumActivatedTitle => 'DoubleFeel Pro is now active'; | 1588 | + String get premiumActivatedTitle => |
| 1589 | + 'Congratulations! You’re now a DoubleFeel Pro member.'; | ||
| 1593 | 1590 | ||
| 1594 | @override | 1591 | @override |
| 1595 | String get premiumActivatedDescription => | 1592 | String get premiumActivatedDescription => |
| @@ -1599,13 +1596,13 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -1599,13 +1596,13 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 1599 | String get premiumActivatedContinue => 'Continue'; | 1596 | String get premiumActivatedContinue => 'Continue'; |
| 1600 | 1597 | ||
| 1601 | @override | 1598 | @override |
| 1602 | - String get purchaseHeroTitle => 'Unlock Pro for more timely care'; | 1599 | + String get purchaseHeroTitle => 'Unlock Pro, Care Better'; |
| 1603 | 1600 | ||
| 1604 | @override | 1601 | @override |
| 1605 | - String get purchaseBenefitsTitle => 'Enjoy all premium benefits'; | 1602 | + String get purchaseBenefitsTitle => 'Unlock All Pro Benefits'; |
| 1606 | 1603 | ||
| 1607 | @override | 1604 | @override |
| 1608 | - String get purchaseUnlockNow => 'Unlock Now'; | 1605 | + String get purchaseUnlockNow => 'Unlock'; |
| 1609 | 1606 | ||
| 1610 | @override | 1607 | @override |
| 1611 | String get purchaseRestore => 'Restore'; | 1608 | String get purchaseRestore => 'Restore'; |
| @@ -1668,36 +1665,35 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -1668,36 +1665,35 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 1668 | String get purchaseApplePaymentFailed => 'Unknown error.'; | 1665 | String get purchaseApplePaymentFailed => 'Unknown error.'; |
| 1669 | 1666 | ||
| 1670 | @override | 1667 | @override |
| 1671 | - String get purchaseBenefitRealtimeStress => 'Real-time stress monitoring'; | 1668 | + String get purchaseBenefitRealtimeStress => 'Live Stress Monitoring'; |
| 1672 | 1669 | ||
| 1673 | @override | 1670 | @override |
| 1674 | String get purchaseBenefitStressTrends => | 1671 | String get purchaseBenefitStressTrends => |
| 1675 | - 'Weekly, monthly, and yearly stress trends'; | 1672 | + 'Daily / Monthly / Yearly HRV Trends'; |
| 1676 | 1673 | ||
| 1677 | @override | 1674 | @override |
| 1678 | String get purchaseBenefitActivityTrends => | 1675 | String get purchaseBenefitActivityTrends => |
| 1679 | - 'Weekly, monthly, and yearly activity trends'; | 1676 | + 'Daily / Monthly / Yearly Activity Trends'; |
| 1680 | 1677 | ||
| 1681 | @override | 1678 | @override |
| 1682 | String get purchaseBenefitSleepReports => | 1679 | String get purchaseBenefitSleepReports => |
| 1683 | - 'Weekly, monthly, and yearly sleep reports'; | 1680 | + 'Daily / Monthly / Yearly Sleep Reports'; |
| 1684 | 1681 | ||
| 1685 | @override | 1682 | @override |
| 1686 | - String get purchaseBenefitHealthSync => 'Real-time health data sync'; | 1683 | + String get purchaseBenefitHealthSync => 'Real-Time Health Data Sync'; |
| 1687 | 1684 | ||
| 1688 | @override | 1685 | @override |
| 1689 | String get purchaseBenefitContactNotifications => | 1686 | String get purchaseBenefitContactNotifications => |
| 1690 | - 'Real-time health updates for close contacts'; | 1687 | + 'Real-Time Health Updates to Loved Ones'; |
| 1691 | 1688 | ||
| 1692 | @override | 1689 | @override |
| 1693 | - String get purchaseBenefitCustomWatchFace => 'Exclusive custom watch faces'; | 1690 | + String get purchaseBenefitCustomWatchFace => 'Exclusive Custom Watch Faces'; |
| 1694 | 1691 | ||
| 1695 | @override | 1692 | @override |
| 1696 | String get purchaseBenefitSleepAnalysis => 'Sleep analysis'; | 1693 | String get purchaseBenefitSleepAnalysis => 'Sleep analysis'; |
| 1697 | 1694 | ||
| 1698 | @override | 1695 | @override |
| 1699 | - String get purchaseBenefitFutureFeatures => | ||
| 1700 | - 'Free access to future premium features'; | 1696 | + String get purchaseBenefitFutureFeatures => 'More Pro Benefits Coming Soon'; |
| 1701 | 1697 | ||
| 1702 | @override | 1698 | @override |
| 1703 | String get purchaseNotesTitle => 'Notes'; | 1699 | String get purchaseNotesTitle => 'Notes'; |
| @@ -1843,7 +1839,7 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -1843,7 +1839,7 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 1843 | 1839 | ||
| 1844 | @override | 1840 | @override |
| 1845 | String get appReviewPromptMessage => | 1841 | String get appReviewPromptMessage => |
| 1846 | - 'Hi! Is DoubleFeel helping you better understand\nyour stress and sleep? 💜'; | 1842 | + 'We\'d love to know if DoubleFeel is helping you better understand your stress and sleep. 💜'; |
| 1847 | 1843 | ||
| 1848 | @override | 1844 | @override |
| 1849 | String get appReviewPromptLikeActionEmoji => '😍'; | 1845 | String get appReviewPromptLikeActionEmoji => '😍'; |
| @@ -1852,15 +1848,15 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -1852,15 +1848,15 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 1852 | String get appReviewPromptLikeAction => 'Love it'; | 1848 | String get appReviewPromptLikeAction => 'Love it'; |
| 1853 | 1849 | ||
| 1854 | @override | 1850 | @override |
| 1855 | - String get appReviewPromptFeedbackAction => 'I have feedback'; | 1851 | + String get appReviewPromptFeedbackAction => 'Not Really'; |
| 1856 | 1852 | ||
| 1857 | @override | 1853 | @override |
| 1858 | String get appReviewFeedbackTitle => | 1854 | String get appReviewFeedbackTitle => |
| 1859 | - 'We\'re sorry DoubleFeel didn\'t give you\na good experience'; | 1855 | + 'Sorry DoubleFeel Didn\'t Meet Your Expectations'; |
| 1860 | 1856 | ||
| 1861 | @override | 1857 | @override |
| 1862 | String get appReviewFeedbackMessage => | 1858 | String get appReviewFeedbackMessage => |
| 1863 | - 'Would you tell us what went wrong?\nYour feedback helps us improve the stress and health experience. 💜'; | 1859 | + 'Tell us what happened and how we can improve. Your feedback helps make DoubleFeel better for everyone. 💜'; |
| 1864 | 1860 | ||
| 1865 | @override | 1861 | @override |
| 1866 | String get appReviewFeedbackSendAction => 'Send Feedback'; | 1862 | String get appReviewFeedbackSendAction => 'Send Feedback'; |
| @@ -1882,11 +1878,10 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -1882,11 +1878,10 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 1882 | 'No pressure data available at this time'; | 1878 | 'No pressure data available at this time'; |
| 1883 | 1879 | ||
| 1884 | @override | 1880 | @override |
| 1885 | - String get membersCanViewTheCompleteData => | ||
| 1886 | - 'Members can view the complete data'; | 1881 | + String get membersCanViewTheCompleteData => 'Unlock Pro to view'; |
| 1887 | 1882 | ||
| 1888 | @override | 1883 | @override |
| 1889 | - String get unlockNow => 'Unlock Now'; | 1884 | + String get unlockNow => 'Unlock'; |
| 1890 | 1885 | ||
| 1891 | @override | 1886 | @override |
| 1892 | String get pressureOverload => 'Pressure Overload'; | 1887 | String get pressureOverload => 'Pressure Overload'; |
| @@ -1907,7 +1902,7 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -1907,7 +1902,7 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 1907 | String get pressure => 'Pressure'; | 1902 | String get pressure => 'Pressure'; |
| 1908 | 1903 | ||
| 1909 | @override | 1904 | @override |
| 1910 | - String get mostRecent => 'Most recent'; | 1905 | + String get mostRecent => 'Latest Reading'; |
| 1911 | 1906 | ||
| 1912 | @override | 1907 | @override |
| 1913 | String get theDayBeforeYesterday => 'The day before yesterday'; | 1908 | String get theDayBeforeYesterday => 'The day before yesterday'; |
| @@ -1927,31 +1922,31 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -1927,31 +1922,31 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 1927 | 1922 | ||
| 1928 | @override | 1923 | @override |
| 1929 | String sharePartnerCodeTemplate(String inviteCode) { | 1924 | String sharePartnerCodeTemplate(String inviteCode) { |
| 1930 | - return 'My friend ID: $inviteCode. Hey ❤️ Come and use DoubleFeel with me! It helps us care for each other—track stress and sleep, view HRV and body status, and stay updated on each other\'s health in real-time. Come join me 👉 https://apps.apple.com/cn/app/doublefeel-%E5%8F%8C%E4%BA%BA%E6%83%85%E7%BB%AA%E5%85%B1%E4%BA%ABhrv%E5%8E%8B%E5%8A%9B%E6%B0%B4%E5%B9%B3%E8%87%AA%E6%B5%8B%E7%9D%A1%E7%9C%A0%E8%AE%B0%E5%BD%95/id6747254434'; | 1925 | + return 'My friend ID: $inviteCode. Hey❤! Come and use DoubleFeel with me! It helps us care for each other—track stress and sleep, view HRV and body status, and stay updated on each other\'s health in real-time. Come join me 👉 https://apps.apple.com/cn/app/doublefeel-%E5%8F%8C%E4%BA%BA%E6%83%85%E7%BB%AA%E5%85%B1%E4%BA%ABhrv%E5%8E%8B%E5%8A%9B%E6%B0%B4%E5%B9%B3%E8%87%AA%E6%B5%8B%E7%9D%A1%E7%9C%A0%E8%AE%B0%E5%BD%95/id6747254434'; |
| 1931 | } | 1926 | } |
| 1932 | 1927 | ||
| 1933 | @override | 1928 | @override |
| 1934 | - String get bindPartnerIdNotExistTitle => 'ID does not exist'; | 1929 | + String get bindPartnerIdNotExistTitle => 'User not found'; |
| 1935 | 1930 | ||
| 1936 | @override | 1931 | @override |
| 1937 | String get bindPartnerIdNotExistMessage => | 1932 | String get bindPartnerIdNotExistMessage => |
| 1938 | - 'This ID does not exist. Please check and try again'; | 1933 | + 'This user ID doesn’t exist. Please check and try again.'; |
| 1939 | 1934 | ||
| 1940 | @override | 1935 | @override |
| 1941 | String get bindPartnerDialogGotIt => 'Got it'; | 1936 | String get bindPartnerDialogGotIt => 'Got it'; |
| 1942 | 1937 | ||
| 1943 | @override | 1938 | @override |
| 1944 | - String get bindPartnerAddFailedTitle => 'Failed to add'; | 1939 | + String get bindPartnerAddFailedTitle => 'Unable to add friend'; |
| 1945 | 1940 | ||
| 1946 | @override | 1941 | @override |
| 1947 | String get bindPartnerAddFailedMessage => | 1942 | String get bindPartnerAddFailedMessage => |
| 1948 | - 'This user does not allow adding friends, cannot add them'; | 1943 | + 'This user doesn’t allow friend requests.'; |
| 1949 | 1944 | ||
| 1950 | @override | 1945 | @override |
| 1951 | - String get bindPartnerAlreadyFriendTitle => 'They are already your friend'; | 1946 | + String get bindPartnerAlreadyFriendTitle => 'You’re already friends'; |
| 1952 | 1947 | ||
| 1953 | @override | 1948 | @override |
| 1954 | - String get bindPartnerAlreadyFriendMessage => 'Please do not add again'; | 1949 | + String get bindPartnerAlreadyFriendMessage => 'No need to add them again'; |
| 1955 | 1950 | ||
| 1956 | @override | 1951 | @override |
| 1957 | String friendStatusTitle(String remarkName) { | 1952 | String friendStatusTitle(String remarkName) { |
| @@ -1959,21 +1954,21 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -1959,21 +1954,21 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 1959 | } | 1954 | } |
| 1960 | 1955 | ||
| 1961 | @override | 1956 | @override |
| 1962 | - String get annualMemberDiscounts => 'Annual Member Discounts'; | 1957 | + String get annualMemberDiscounts => 'Special Offer'; |
| 1963 | 1958 | ||
| 1964 | @override | 1959 | @override |
| 1965 | - String get specialOffers => 'Special Offers'; | 1960 | + String get specialOffers => 'OFF'; |
| 1966 | 1961 | ||
| 1967 | @override | 1962 | @override |
| 1968 | - String get currentPrice => 'Current Price'; | 1963 | + String get currentPrice => 'Now'; |
| 1969 | 1964 | ||
| 1970 | @override | 1965 | @override |
| 1971 | String originalPrice(String price) { | 1966 | String originalPrice(String price) { |
| 1972 | - return 'Original price $price'; | 1967 | + return 'Was $price'; |
| 1973 | } | 1968 | } |
| 1974 | 1969 | ||
| 1975 | @override | 1970 | @override |
| 1976 | - String get freeRedemptionOffer => 'Free Redemption Offer'; | 1971 | + String get freeRedemptionOffer => 'Claim now'; |
| 1977 | 1972 | ||
| 1978 | @override | 1973 | @override |
| 1979 | String get cellPhoneNumber => 'Cell phone number'; | 1974 | String get cellPhoneNumber => 'Cell phone number'; |
| @@ -1982,10 +1977,10 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -1982,10 +1977,10 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 1982 | String get todayOnWeeklyCalendar => 'today'; | 1977 | String get todayOnWeeklyCalendar => 'today'; |
| 1983 | 1978 | ||
| 1984 | @override | 1979 | @override |
| 1985 | - String get hrvTrendForThatDay => 'HRV Trend for That Day'; | 1980 | + String get hrvTrendForThatDay => 'Avg. Hrv'; |
| 1986 | 1981 | ||
| 1987 | @override | 1982 | @override |
| 1988 | - String get todaySAverageHrv => 'Today\'s Average HRV'; | 1983 | + String get todaySAverageHrv => 'Avg. Hrv Today'; |
| 1989 | 1984 | ||
| 1990 | @override | 1985 | @override |
| 1991 | String get helpNoDataReason1 => | 1986 | String get helpNoDataReason1 => |
| @@ -2039,7 +2034,7 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -2039,7 +2034,7 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 2039 | 'Based on user feedback, we found two reasons why HRV or heart rate data might be missing:\n\n1. Apple Watch not connected\n · If your Apple Watch has not been worn for a long time, heart rate data may not be collected.\n · Please check iOS Health App -> \'My Watch\' to confirm if recent heart rate data was recorded while wearing the Apple Watch.\n · If not, please try wearing your Apple Watch for data collection and turn on the heart rate feature supported by Apple.\n\n2. Heart rate or HRV data missing in the past 30 days\n · Open iOS Health App -> Browse -> \'Heart Rate\' or \'HRV\' -> \'No Data Found\' to confirm if it\'s missing.\n · If data is missing, please wear the watch again, restart your iPhone and Apple Watch, then open DoubleFeel again.'; | 2034 | 'Based on user feedback, we found two reasons why HRV or heart rate data might be missing:\n\n1. Apple Watch not connected\n · If your Apple Watch has not been worn for a long time, heart rate data may not be collected.\n · Please check iOS Health App -> \'My Watch\' to confirm if recent heart rate data was recorded while wearing the Apple Watch.\n · If not, please try wearing your Apple Watch for data collection and turn on the heart rate feature supported by Apple.\n\n2. Heart rate or HRV data missing in the past 30 days\n · Open iOS Health App -> Browse -> \'Heart Rate\' or \'HRV\' -> \'No Data Found\' to confirm if it\'s missing.\n · If data is missing, please wear the watch again, restart your iPhone and Apple Watch, then open DoubleFeel again.'; |
| 2040 | 2035 | ||
| 2041 | @override | 2036 | @override |
| 2042 | - String get noHealthDataGoToSettings => 'Go to Settings'; | 2037 | + String get noHealthDataGoToSettings => 'Enable Now'; |
| 2043 | 2038 | ||
| 2044 | @override | 2039 | @override |
| 2045 | String get watchThemeDefaultTheme => 'Default Theme'; | 2040 | String get watchThemeDefaultTheme => 'Default Theme'; |
| @@ -2064,10 +2059,10 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -2064,10 +2059,10 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 2064 | 2059 | ||
| 2065 | @override | 2060 | @override |
| 2066 | String get watchThemeCustomDescription => | 2061 | String get watchThemeCustomDescription => |
| 2067 | - 'Capture every mood with your creativity and make a watch face that\'s uniquely yours.'; | 2062 | + 'Turn your emotions into a watch face that\'s uniquely yours. ⭐'; |
| 2068 | 2063 | ||
| 2069 | @override | 2064 | @override |
| 2070 | - String get watchThemeCreateTheme => 'Create Theme'; | 2065 | + String get watchThemeCreateTheme => 'Create a Theme'; |
| 2071 | 2066 | ||
| 2072 | @override | 2067 | @override |
| 2073 | String get watchThemeOfficialTheme => 'Official Themes'; | 2068 | String get watchThemeOfficialTheme => 'Official Themes'; |
| @@ -2086,7 +2081,7 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -2086,7 +2081,7 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 2086 | 'This content is unavailable. Try another one.'; | 2081 | 'This content is unavailable. Try another one.'; |
| 2087 | 2082 | ||
| 2088 | @override | 2083 | @override |
| 2089 | - String get watchThemeDialPreview => 'Watch Face Preview'; | 2084 | + String get watchThemeDialPreview => 'Watch Preview'; |
| 2090 | 2085 | ||
| 2091 | @override | 2086 | @override |
| 2092 | String get watchThemeSwitchFriend => 'Switch Friend'; | 2087 | String get watchThemeSwitchFriend => 'Switch Friend'; |
| @@ -2095,7 +2090,7 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -2095,7 +2090,7 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 2095 | String get watchThemeStatusPreview => 'Status Preview'; | 2090 | String get watchThemeStatusPreview => 'Status Preview'; |
| 2096 | 2091 | ||
| 2097 | @override | 2092 | @override |
| 2098 | - String get watchThemeAddWatchFace => 'Add Watch Face'; | 2093 | + String get watchThemeAddWatchFace => 'Add to Watch'; |
| 2099 | 2094 | ||
| 2100 | @override | 2095 | @override |
| 2101 | String get watchThemeInUse => 'In Use'; | 2096 | String get watchThemeInUse => 'In Use'; |
| @@ -2125,7 +2120,7 @@ class AppLocalizationsEn extends AppLocalizations { | @@ -2125,7 +2120,7 @@ class AppLocalizationsEn extends AppLocalizations { | ||
| 2125 | } | 2120 | } |
| 2126 | 2121 | ||
| 2127 | @override | 2122 | @override |
| 2128 | - String get watchThemePreview => 'Preview'; | 2123 | + String get watchThemePreview => 'Watch Themes'; |
| 2129 | 2124 | ||
| 2130 | @override | 2125 | @override |
| 2131 | String get watchThemeDelete => 'Delete'; | 2126 | String get watchThemeDelete => 'Delete'; |
| @@ -804,10 +804,10 @@ packages: | @@ -804,10 +804,10 @@ packages: | ||
| 804 | dependency: transitive | 804 | dependency: transitive |
| 805 | description: | 805 | description: |
| 806 | name: posix | 806 | name: posix |
| 807 | - sha256: "185ef7606574f789b40f289c233efa52e96dead518aed988e040a10737febb07" | 807 | + sha256: bc1bad54ad2b735816e31f8d4600cfde6c7839975085ddfbca48b6c9f7c4044e |
| 808 | url: "https://pub.dev" | 808 | url: "https://pub.dev" |
| 809 | source: hosted | 809 | source: hosted |
| 810 | - version: "6.5.0" | 810 | + version: "6.5.2" |
| 811 | pretty_dio_logger: | 811 | pretty_dio_logger: |
| 812 | dependency: "direct main" | 812 | dependency: "direct main" |
| 813 | description: | 813 | description: |
| @@ -974,26 +974,26 @@ packages: | @@ -974,26 +974,26 @@ packages: | ||
| 974 | dependency: transitive | 974 | dependency: transitive |
| 975 | description: | 975 | description: |
| 976 | name: sqflite_android | 976 | name: sqflite_android |
| 977 | - sha256: "881e28efdcc9950fd8e9bb42713dcf1103e62a2e7168f23c9338d82db13dec40" | 977 | + sha256: "78f489aab276260cdd26676d2169446c7ecd3484bbd5fead4ca14f3ed4dd9ee3" |
| 978 | url: "https://pub.dev" | 978 | url: "https://pub.dev" |
| 979 | source: hosted | 979 | source: hosted |
| 980 | - version: "2.4.2+3" | 980 | + version: "2.4.0" |
| 981 | sqflite_common: | 981 | sqflite_common: |
| 982 | dependency: transitive | 982 | dependency: transitive |
| 983 | description: | 983 | description: |
| 984 | name: sqflite_common | 984 | name: sqflite_common |
| 985 | - sha256: "1581ffbf7a0e333b380d6a30737d78516b826cb35beb7fb0bf8a3ea0c678b465" | 985 | + sha256: "761b9740ecbd4d3e66b8916d784e581861fd3c3553eda85e167bc49fdb68f709" |
| 986 | url: "https://pub.dev" | 986 | url: "https://pub.dev" |
| 987 | source: hosted | 987 | source: hosted |
| 988 | - version: "2.5.8" | 988 | + version: "2.5.4+6" |
| 989 | sqflite_darwin: | 989 | sqflite_darwin: |
| 990 | dependency: transitive | 990 | dependency: transitive |
| 991 | description: | 991 | description: |
| 992 | name: sqflite_darwin | 992 | name: sqflite_darwin |
| 993 | - sha256: "279832e5cde3fe99e8571879498c9211f3ca6391b0d818df4e17d9fff5c6ccb3" | 993 | + sha256: "22adfd9a2c7d634041e96d6241e6e1c8138ca6817018afc5d443fef91dcefa9c" |
| 994 | url: "https://pub.dev" | 994 | url: "https://pub.dev" |
| 995 | source: hosted | 995 | source: hosted |
| 996 | - version: "2.4.2" | 996 | + version: "2.4.1+1" |
| 997 | sqflite_ohos: | 997 | sqflite_ohos: |
| 998 | dependency: transitive | 998 | dependency: transitive |
| 999 | description: | 999 | description: |
| @@ -1055,10 +1055,10 @@ packages: | @@ -1055,10 +1055,10 @@ packages: | ||
| 1055 | dependency: "direct main" | 1055 | dependency: "direct main" |
| 1056 | description: | 1056 | description: |
| 1057 | name: table_calendar | 1057 | name: table_calendar |
| 1058 | - sha256: "0c0c6219878b363a2d5f40c7afb159d845f253d061dc3c822aa0d5fe0f721982" | 1058 | + sha256: f276347cad425ef837a41e8d9ad43f3ee7d59227aa4c36d7430607a5a18fa3b3 |
| 1059 | url: "https://pub.dev" | 1059 | url: "https://pub.dev" |
| 1060 | source: hosted | 1060 | source: hosted |
| 1061 | - version: "3.2.0" | 1061 | + version: "3.2.1" |
| 1062 | term_glyph: | 1062 | term_glyph: |
| 1063 | dependency: transitive | 1063 | dependency: transitive |
| 1064 | description: | 1064 | description: |
| @@ -1079,10 +1079,10 @@ packages: | @@ -1079,10 +1079,10 @@ packages: | ||
| 1079 | dependency: "direct main" | 1079 | dependency: "direct main" |
| 1080 | description: | 1080 | description: |
| 1081 | name: thinking_analytics | 1081 | name: thinking_analytics |
| 1082 | - sha256: "0ef269a8469ff5795f581505e34af67af3d6ef9be1ce9ce80ca2269694ebb282" | 1082 | + sha256: b01cac0b5482e71c1d75c44c77d27f427662cc65a77b7bc3c8b49617d7a01e02 |
| 1083 | url: "https://pub.dev" | 1083 | url: "https://pub.dev" |
| 1084 | source: hosted | 1084 | source: hosted |
| 1085 | - version: "3.3.2" | 1085 | + version: "3.3.3" |
| 1086 | timing: | 1086 | timing: |
| 1087 | dependency: transitive | 1087 | dependency: transitive |
| 1088 | description: | 1088 | description: |
| @@ -1103,10 +1103,10 @@ packages: | @@ -1103,10 +1103,10 @@ packages: | ||
| 1103 | dependency: transitive | 1103 | dependency: transitive |
| 1104 | description: | 1104 | description: |
| 1105 | name: url_launcher_linux | 1105 | name: url_launcher_linux |
| 1106 | - sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" | 1106 | + sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a |
| 1107 | url: "https://pub.dev" | 1107 | url: "https://pub.dev" |
| 1108 | source: hosted | 1108 | source: hosted |
| 1109 | - version: "3.2.1" | 1109 | + version: "3.2.2" |
| 1110 | url_launcher_platform_interface: | 1110 | url_launcher_platform_interface: |
| 1111 | dependency: transitive | 1111 | dependency: transitive |
| 1112 | description: | 1112 | description: |
| @@ -1119,18 +1119,18 @@ packages: | @@ -1119,18 +1119,18 @@ packages: | ||
| 1119 | dependency: transitive | 1119 | dependency: transitive |
| 1120 | description: | 1120 | description: |
| 1121 | name: url_launcher_web | 1121 | name: url_launcher_web |
| 1122 | - sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" | 1122 | + sha256: "85c81589622fbc87c1c683aaea164d3604a7777495a79d91e39ffcdec39ddb34" |
| 1123 | url: "https://pub.dev" | 1123 | url: "https://pub.dev" |
| 1124 | source: hosted | 1124 | source: hosted |
| 1125 | - version: "2.4.1" | 1125 | + version: "2.4.3" |
| 1126 | url_launcher_windows: | 1126 | url_launcher_windows: |
| 1127 | dependency: transitive | 1127 | dependency: transitive |
| 1128 | description: | 1128 | description: |
| 1129 | name: url_launcher_windows | 1129 | name: url_launcher_windows |
| 1130 | - sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77" | 1130 | + sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f" |
| 1131 | url: "https://pub.dev" | 1131 | url: "https://pub.dev" |
| 1132 | source: hosted | 1132 | source: hosted |
| 1133 | - version: "3.1.4" | 1133 | + version: "3.1.5" |
| 1134 | uuid: | 1134 | uuid: |
| 1135 | dependency: transitive | 1135 | dependency: transitive |
| 1136 | description: | 1136 | description: |
| @@ -1244,10 +1244,10 @@ packages: | @@ -1244,10 +1244,10 @@ packages: | ||
| 1244 | dependency: transitive | 1244 | dependency: transitive |
| 1245 | description: | 1245 | description: |
| 1246 | name: win32 | 1246 | name: win32 |
| 1247 | - sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e | 1247 | + sha256: "329edf97fdd893e0f1e3b9e88d6a0e627128cc17cc316a8d67fda8f1451178ba" |
| 1248 | url: "https://pub.dev" | 1248 | url: "https://pub.dev" |
| 1249 | source: hosted | 1249 | source: hosted |
| 1250 | - version: "5.10.1" | 1250 | + version: "5.13.0" |
| 1251 | xdg_directories: | 1251 | xdg_directories: |
| 1252 | dependency: transitive | 1252 | dependency: transitive |
| 1253 | description: | 1253 | description: |
-
Please register or login to post a comment