Commit cb157457139ed23aa0b7cbf4f3c1f4a318ad27d9

Authored by 常守达
1 parent 1e225e34

feat(l10n): 语言国际化及配置

@@ -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: