适配多国语音
authorxue <2144439972@qq.com>
Mon, 22 Jun 2026 02:50:52 +0000 (10:50 +0800)
committerxue <2144439972@qq.com>
Mon, 22 Jun 2026 02:50:52 +0000 (10:50 +0800)
33 files changed:
code/sdk/application/wearable/n9/nativeapp/nativelauncher/include/ui_resource_string.h
code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/include/BPMeasureResultView.h
code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPAbnormalView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPCalibFirstDoneView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPCalibSecondDoneView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPCalibStopView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPCalibratingView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPEntryView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPHistoryView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPInstructionView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPMeasureResultView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPMeasuringView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPValueConfirmView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPValueInputView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/ecg/src/ECGAbnormalView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/ecg/src/ECGEntryView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/ecg/src/ECGHistoryView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/ecg/src/ECGInstructionView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/ecg/src/ECGMeasureCompleteView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/ecg/src/ECGMeasureResultView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/ecg/src/ECGMeasuringView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/ecg/src/ECGModel.cpp
code/sdk/files/n9/fs/user/res/font/en.lang
code/sdk/files/n9/fs/user/res/font/ui_resource_string.h
code/sdk/files/n9/fs/user/res/font/zh.lang
tools/language_tool/Language_xml/input_list_en.txt
tools/language_tool/Language_xml/input_list_zh.txt
tools/language_tool/Language_xml/language_custom.xlsx
tools/language_tool/Language_xml/language_en.xml
tools/language_tool/Language_xml/language_zh.xml
tools/language_tool/font/en.lang
tools/language_tool/font/ui_resource_string.h
tools/language_tool/font/zh.lang

index fb3489c..e95e27d 100644 (file)
@@ -741,7 +741,86 @@ enum UIResourceTextId : uint16_t {
     STR_STRESS_WARNING = 728,\r
     STR_STRESS_NORMAL = 729,\r
     STR_STRESS_EXCELLENT = 730,\r
-    STR_MAX_ID = 731,\r
+    STR_HRV_LAST_NIGHT_AVG  = 731,\r
+    STR_HRV_BASELINE  = 732,\r
+    STR_HRV_7DAY_AVG  = 733,\r
+    STR_HRV_BALANCED  = 734,\r
+    STR_HRV_UNBALANCED  = 735,\r
+    STR_HRV_TOO_LOW  = 736,\r
+    STR_BP_MEAS_SUCCESS = 737,\r
+    STR_BP_NORMAL_RANGE = 738,\r
+    STR_BP_ELEVATED_ATTN = 739,\r
+    STR_BP_CALIB_EXPIRED = 740,\r
+    STR_BP_INPUT_METER_VALUE = 741,\r
+    STR_BP_CONFIRM_INPUT = 742,\r
+    STR_BP_SBP_GT_DBP = 743,\r
+    STR_BP_MODIFY = 744,\r
+    STR_BP_MEAS_GUIDE = 745,\r
+    STR_BP_MEASURE_NOW = 746,\r
+    STR_BP_PREMEASURE_NOTE = 747,\r
+    STR_BP_TREND_REF_ONLY = 748,\r
+    STR_BP_COMPLETE_CALIB_FIRST = 749,\r
+    STR_BP_NOT_CALIBRATED = 750,\r
+    STR_BP_CALIB_EXPIRING_D = 751,\r
+    STR_BP_INSTR_SEAT = 752,\r
+    STR_BP_INSTR_WEAR = 753,\r
+    STR_BP_INSTR_BELT_LOOSE = 754,\r
+    STR_BP_INSTR_CALIB1 = 755,\r
+    STR_BP_INSTR_CALIB2 = 756,\r
+    STR_BP_START = 757,\r
+    STR_BP_ABORT_MEAS = 758,\r
+    STR_BP_ABORT_CALIB = 759,\r
+    STR_BP_ABORT_MEAS_NOTE = 760,\r
+    STR_BP_ABORT_CALIB_NOTE = 761,\r
+    STR_BP_CALIB_ROUND1 = 762,\r
+    STR_BP_CALIB_ROUND2 = 763,\r
+    STR_BP_KEEP_STILL = 764,\r
+    STR_BP_VALID_UNTIL = 765,\r
+    STR_BP_VALID_UNTIL_NA = 766,\r
+    STR_BP_CALIB_UPLOADED = 767,\r
+    STR_BP_ROUND1_DONE = 768,\r
+    STR_BP_ROUND2_PREP = 769,\r
+    STR_BP_FOLLOW_HINT = 770,\r
+    STR_BP_NEED_CALIB_FIRST = 771,\r
+    STR_BP_PREP_SPHYGM = 772,\r
+    STR_BP_TIP = 773,\r
+    STR_BP_ARM_MOVED = 774,\r
+    STR_BP_WEAK_SIGNAL = 775,\r
+    STR_BP_DIFF_TOO_LARGE = 776,\r
+    STR_BP_DIFF_LARGE_NOTE = 777,\r
+    STR_BP_RESULT_REF = 778,\r
+    STR_BP_NOT_MEDICAL = 779,\r
+    STR_BP_AGREE_CONTINUE = 780,\r
+    STR_BP_LATEST_RECORD = 781,\r
+    STR_BP_VIEW_HISTORY = 782,\r
+    STR_BP_RECENT_RECORD = 783,\r
+    STR_BP_APP_FULL_RECORD = 784,\r
+    STR_BP_WATCH_RECENT_ONLY = 785,\r
+    STR_BP_NO_MEAS_RECORD = 786,\r
+    STR_BP_EMPTY_HIST_HINT = 787,\r
+    STR_ECG_MEAS_TITLE = 788,\r
+    STR_ECG_ENTRY_NOTE = 789,\r
+    STR_ECG_DISCLAIMER = 790,\r
+    STR_ECG_CONSULT_DOC = 791,\r
+    STR_ECG_FINGER_ELECTRODE = 792,\r
+    STR_ECG_KEEP_FINGER_STILL = 793,\r
+    STR_ECG_FINGER_CONTACT = 794,\r
+    STR_ECG_ANALYZING = 795,\r
+    STR_ECG_CONTACT_ABNORMAL = 796,\r
+    STR_ECG_EXIT = 797,\r
+    STR_ECG_VIEW_ALL = 798,\r
+    STR_ECG_MEAS_RECORD = 799,\r
+    STR_ECG_SINUS_RHYTHM = 800,\r
+    STR_ECG_AFIB_POSSIBLE = 801,\r
+    STR_ECG_INCONCLUSIVE = 802,\r
+    STR_ECG_AFIB = 803,\r
+    STR_ECG_HR_TOO_LOW = 804,\r
+    STR_ECG_HR_TOO_HIGH = 805,\r
+    STR_ECG_IRREGULAR = 806,\r
+    STR_ECG_SIGNAL_INCONCLUSIVE = 807,\r
+    STR_ECG_BPM_FORMAT = 808,\r
+    STR_ECG_BPM_NA = 809,\r
+    STR_MAX_ID = 810,\r
 }; // UIResourceTextId\r
 
 enum FontLanguageId : uint8_t {
index 955ca06..1309cea 100644 (file)
@@ -26,7 +26,7 @@ private:
   static std::string FormatMeasureTime();
 
   UIViewGroup *group_{nullptr};
-  UILabel *titleLabel_{nullptr};
+  UILabelExt *titleLabel_{nullptr};
   UILabel *timeLabel_{nullptr};
   UILabelExt *statusLabel_{nullptr};
   UIImageView *hlineTop_{nullptr};
index feab500..c4c502a 100644 (file)
@@ -38,8 +38,8 @@ void BPAbnormalView::ApplyAbnormalType(BPAbnormalType type) {
       RetryButton_ == nullptr) {
     return;
   }
-  titleLabel_->SetText("请根据提示进行操作");
-  noteLabel_->SetText("请根据提示进行操作");
+  titleLabel_->SetTextId(STR_BP_FOLLOW_HINT);
+  noteLabel_->SetTextId(STR_BP_FOLLOW_HINT);
   if (imageView_ != nullptr) {
     imageView_->SetSrc(BLOOD_PATH_NOTE);
     imageView_->SetVisible(true);
@@ -49,43 +49,43 @@ void BPAbnormalView::ApplyAbnormalType(BPAbnormalType type) {
   CancelButton_->Resize(170, 90);
   CancelButton_->SetPosition(58, 320);
   RetryButton_->SetPosition(238, 320);
-  CancelButton_->SetText("取消");
-  RetryButton_->SetText("重新校准");
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_CANCEL); CancelButton_->SetText(_uiStrTmp.GetText()); } while(0);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_RECALIBRATE); RetryButton_->SetText(_uiStrTmp.GetText()); } while(0);
   CancelButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
   RetryButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xffff5a36);
 
   switch (type) {
     case BP_ABNORMAL_TYPE_NOT_CALIBRATED:
-      titleLabel_->SetText("需先完成校准");
-      noteLabel_->SetText("请准备传统血压计\n约需5分钟");
-      CancelButton_->SetText("稍后");
-      RetryButton_->SetText("开始校准");
+      titleLabel_->SetTextId(STR_BP_NEED_CALIB_FIRST);
+      noteLabel_->SetTextId(STR_BP_PREP_SPHYGM);
+      do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_LATER); CancelButton_->SetText(_uiStrTmp.GetText()); } while(0);
+      do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_START_CAL); RetryButton_->SetText(_uiStrTmp.GetText()); } while(0);
       break;
     case BP_ABNORMAL_TYPE_ARM_MOVE:
-      titleLabel_->SetText("提示");
-      noteLabel_->SetText("检测到手臂移动\n请保持静止后重试");
+      titleLabel_->SetTextId(STR_BP_TIP);
+      noteLabel_->SetTextId(STR_BP_ARM_MOVED);
       RetryButton_->SetViewId(BP_CLICK_RETRY);
-      RetryButton_->SetText("重试");
+      do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_RETRY); RetryButton_->SetText(_uiStrTmp.GetText()); } while(0);
       break;
     case BP_ABNORMAL_TYPE_MEASURE_TIMEOUT:
-      titleLabel_->SetText("提示");
+      titleLabel_->SetTextId(STR_BP_TIP);
       if (imageView_ != nullptr) {
         imageView_->SetSrc(BLOOD_PATH_MEASURE_TIMEOUT);
       }
-      noteLabel_->SetText("未能获取有效信号\n请调整佩戴后重试");
+      noteLabel_->SetTextId(STR_BP_WEAK_SIGNAL);
       RetryButton_->SetViewId(BP_CLICK_RETRY);
-      RetryButton_->SetText("重试");
+      do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_RETRY); RetryButton_->SetText(_uiStrTmp.GetText()); } while(0);
       break;
     case BP_ABNORMAL_TYPE_CALIBRATION_DIFFERENCE_TOO_LARGE:
-      titleLabel_->SetText("两次偏差过大");
-      noteLabel_->SetText("检测到两次偏差较大\n建议重新校准");
+      titleLabel_->SetTextId(STR_BP_DIFF_TOO_LARGE);
+      noteLabel_->SetTextId(STR_BP_DIFF_LARGE_NOTE);
       break;
     case BP_ABNORMAL_TYPE_DISCLAIMER:
-      titleLabel_->SetText("测量结果仅供参考");
-      noteLabel_->SetText("不可替代专业医疗诊断\n如有健康疑虑,请咨询医生");
+      titleLabel_->SetTextId(STR_BP_RESULT_REF);
+      noteLabel_->SetTextId(STR_BP_NOT_MEDICAL);
       RetryButton_->SetVisible(false);
       CancelButton_->SetViewId(BP_CLICK_DISCLAIMER_ACCEPT);
-      CancelButton_->SetText("同意并继续");
+      do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_AGREE_CONTINUE); CancelButton_->SetText(_uiStrTmp.GetText()); } while(0);
       CancelButton_->Resize(280, 90);
       CancelButton_->SetPosition(93, 320);
       CancelButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xffff5a36);
@@ -100,13 +100,13 @@ void BPAbnormalView::UpdateForType(BPAbnormalType type) { ApplyAbnormalType(type
 UIViewGroup *BPAbnormalView::InitView(BPAbnormalType type) {
   group_ = new UIViewGroup();
   group_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
-  InitLabel(titleLabel_, 83, 50, 300, 35, "bp_abnormal_title", "请根据提示进行操作",
+  InitLabel(titleLabel_, 83, 50, 300, 35, "bp_abnormal_title", "",
             DEFAULT_VECTOR_FONT_FILENAME, 30);
   InitImageView(imageView_, 193, 120, 80, 80, "bp_abnormal_image", BLOOD_PATH_NOTE);
-  InitLabel(noteLabel_, 53, 200, 360, 100, "bp_abnormal_note", "请根据提示进行操作",
+  InitLabel(noteLabel_, 53, 200, 360, 100, "bp_abnormal_note", "",
             DEFAULT_VECTOR_FONT_FILENAME, 24);
-  InitLabelButton(CancelButton_, 58, 320, 170, 90, BP_CLICK_EXIT, "取消", 26);
-  InitLabelButton(RetryButton_, 238, 320, 170, 90, BP_CLICK_RECALIBRATE, "重新校准", 26);
+  InitLabelButton(CancelButton_, 58, 320, 170, 90, BP_CLICK_EXIT, "", 26);
+  InitLabelButton(RetryButton_, 238, 320, 170, 90, BP_CLICK_RECALIBRATE, "", 26);
   RetryButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xffff5a36);
 
   ApplyAbnormalType(type);
index 1c2fa5d..a8af92c 100644 (file)
@@ -1,6 +1,7 @@
 #include "bloodpressure/include/BPCalibFirstDoneView.h"
 #include "bloodpressure/include/BPMainPresenter.h"
 #include "bloodpressure/include/BPViewClickIds.h"
+#include "ui_resource_string.h"
 #include "uicomponents/UIComponents.h"
 
 namespace OHOS {
@@ -63,17 +64,19 @@ UIViewGroup *BPCalibFirstDoneView::InitView() {
   group_ = new UIViewGroup();
   group_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
   InitImageView(imageView_, 114, 50, 32, 32, "bp_first_done_image", BLOOD_PATH_FIRST_DONE);
-  InitLabel(titleLabel_, 114 + 32 + 8, 50, 230, 35, "bp_first_done_title", "第1轮校准完成",
+  InitLabel(titleLabel_, 114 + 32 + 8, 50, 230, 35, "bp_first_done_title", "",
             DEFAULT_VECTOR_FONT_FILENAME, 30);
+  titleLabel_->SetTextId(STR_BP_ROUND1_DONE);
   InitProgressBar();
-  InitLabel(noteLabel_, 83, 178, 300, 105, "bp_first_done_note",
-            "请准备开始第2轮校准\n请再次使用传统血压计\n测量同一只手",
+  InitLabel(noteLabel_, 83, 178, 300, 105, "bp_first_done_note", "",
             DEFAULT_VECTOR_FONT_FILENAME, 30);
+  noteLabel_->SetTextId(STR_BP_ROUND2_PREP);
   noteLabel_->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xb2));
   noteLabel_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
   noteLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
-  InitLabelButton(RetryButton_, 93, 330, 280, 90, BP_CLICK_FIRST_CALIB_DONE, "确定", 30);
+  InitLabelButton(RetryButton_, 93, 330, 280, 90, BP_CLICK_FIRST_CALIB_DONE, "", 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_OK); RetryButton_->SetText(_uiStrTmp.GetText()); } while(0);
   RetryButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff0176ff);
   RetryButton_->SetOnClickListener(static_cast<UIView::OnClickListener *>(BPMainPresenter::GetInstance()));
   group_->Add(imageView_);
index 4f1f52f..249f5e1 100644 (file)
@@ -4,6 +4,7 @@
 #include "bloodpressure/include/BPModel.h"
 #include "bloodpressure/include/BPViewClickIds.h"
 #include "securec.h"
+#include "ui_resource_string.h"
 #include "uicomponents/UIComponents.h"
 
 namespace OHOS {
@@ -39,13 +40,14 @@ void BPCalibSecondDoneView::UpdateExpiryText() {
   }
   BPModel *model = BPModel::GetInstance();
   if (model == nullptr) {
-    timeLabel_->SetText("有效期至:----");
+    timeLabel_->SetTextId(STR_BP_VALID_UNTIL_NA);
     return;
   }
   char textBuf[48] = {0};
-  if (sprintf_s(textBuf, sizeof(textBuf), "有效期至:%s",
+  std::string fmt = ([]() { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_VALID_UNTIL); return std::string(_uiStrTmp.GetText()); }());
+  if (sprintf_s(textBuf, sizeof(textBuf), fmt.c_str(),
                 model->GetCalibrationExpiryDateText().c_str()) < 0) {
-    timeLabel_->SetText("有效期至:----");
+    timeLabel_->SetTextId(STR_BP_VALID_UNTIL_NA);
     return;
   }
   timeLabel_->SetText(textBuf);
@@ -55,18 +57,22 @@ UIViewGroup *BPCalibSecondDoneView::InitView() {
   group_ = new UIViewGroup();
   group_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
   InitImageView(imageView_, 193, 141, 80, 80, "bp_second_done_image", BLOOD_PATH_SUCC);
-  InitLabel(titleLabel_, 0, 50, 466, 35, "bp_second_done_title", "校准完成",
+  InitLabel(titleLabel_, 0, 50, 466, 35, "bp_second_done_title", "",
             DEFAULT_VECTOR_FONT_FILENAME, 30);
+  titleLabel_->SetTextId(STR_CALIBRATION_DONE);
   titleLabel_->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));
 
-  InitLabel(timeLabel_, 0, 90, 466, 28, "bp_second_done_time", "有效期至:----",
+  InitLabel(timeLabel_, 0, 90, 466, 28, "bp_second_done_time", "",
             DEFAULT_VECTOR_FONT_FILENAME, 24);
-  InitLabel(noteLabel_, 0, 141 + 80 + 24, 466, 105, "bp_second_done_note",
-            "校准结果已上传\n30天后可重新校准", DEFAULT_VECTOR_FONT_FILENAME, 30);
+  timeLabel_->SetTextId(STR_BP_VALID_UNTIL_NA);
+  InitLabel(noteLabel_, 0, 141 + 80 + 24, 466, 105, "bp_second_done_note", "",
+            DEFAULT_VECTOR_FONT_FILENAME, 30);
+  noteLabel_->SetTextId(STR_BP_CALIB_UPLOADED);
   noteLabel_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
   noteLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
-  InitLabelButton(confirmButton_, 93, 340, 280, 90, BP_CLICK_SECOND_CALIB_DONE, "确定", 30);
+  InitLabelButton(confirmButton_, 93, 340, 280, 90, BP_CLICK_SECOND_CALIB_DONE, "", 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_OK); confirmButton_->SetText(_uiStrTmp.GetText()); } while(0);
   confirmButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff0176ff);
   confirmButton_->SetOnClickListener(static_cast<UIView::OnClickListener *>(BPMainPresenter::GetInstance()));
   group_->Add(imageView_);
index d1d8879..26b0ba5 100644 (file)
@@ -2,6 +2,7 @@
 #include "bloodpressure/include/BPMainPresenter.h"
 #include "bloodpressure/include/BPViewClickIds.h"
 #include "UiConfig.h"
+#include "ui_resource_string.h"
 #include "uicomponents/UIComponents.h"
 #include "wearable_log.h"
 
@@ -39,11 +40,10 @@ BPCalibStopView *BPCalibStopView::GetInstance() { return g_instance; }
 
 void BPCalibStopView::UpdateForMode(bool isMeasure) {
   if (titleLabel_ != nullptr) {
-    titleLabel_->SetText(isMeasure ? "中止测量" : "中止校准");
+    titleLabel_->SetTextId(isMeasure ? STR_BP_ABORT_MEAS : STR_BP_ABORT_CALIB);
   }
   if (noteLabel_ != nullptr) {
-    noteLabel_->SetText(isMeasure ? "是否中止当前血压测量\n本次测量将取消"
-                                  : "是否中止当前血压校准\n本次校准数据将丢弃");
+    noteLabel_->SetTextId(isMeasure ? STR_BP_ABORT_MEAS_NOTE : STR_BP_ABORT_CALIB_NOTE);
   }
 }
 
@@ -72,13 +72,15 @@ UIViewGroup *BPCalibStopView::InitView() {
   }
   group_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
 
-  InitLabel(titleLabel_, 83, 50, 300, 35, "bp_calib_stop_title", "中止校准",
+  InitLabel(titleLabel_, 83, 50, 300, 35, "bp_calib_stop_title", "",
             DEFAULT_VECTOR_FONT_FILENAME, 30);
+  titleLabel_->SetTextId(STR_BP_ABORT_CALIB);
   titleLabel_->SetStyle(STYLE_TEXT_COLOR, 0xffff5a36);
   titleLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
-  InitLabel(noteLabel_, 53, 167, 360, 70, "bp_calib_stop_note",
-            "是否中止当前血压校准\n本次校准数据将丢弃", DEFAULT_VECTOR_FONT_FILENAME, 30);
+  InitLabel(noteLabel_, 53, 167, 360, 70, "bp_calib_stop_note", "",
+            DEFAULT_VECTOR_FONT_FILENAME, 30);
+  noteLabel_->SetTextId(STR_BP_ABORT_CALIB_NOTE);
   noteLabel_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
   noteLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
index bd606d1..2a8710f 100644 (file)
@@ -92,8 +92,7 @@ void BPCalibratingView::UpdateRound(uint8_t round) {
   if (statusLabel_ == nullptr) {
     return;
   }
-  const char *text = (round == 2) ? "第2轮校准中" : "第1轮校准中";
-  statusLabel_->SetText(text);
+  statusLabel_->SetTextId(round == 2 ? STR_BP_CALIB_ROUND2 : STR_BP_CALIB_ROUND1);
 }
 
 void BPCalibratingView::UpdateTimeText(int seconds) {
@@ -118,7 +117,8 @@ UIViewGroup *BPCalibratingView::InitView() {
 
   InitCircleProgress();
 
-  InitLabelDefault(statusLabel_, 0, 50, 466, 40, "bp_calib_status", "第1轮校准中", 30);
+  InitLabelDefault(statusLabel_, 0, 50, 466, 40, "bp_calib_status", "", 30);
+  statusLabel_->SetTextId(STR_BP_CALIB_ROUND1);
   statusLabel_->SetTextColor(Color::GetColorFromRGBA(
       (BP_STATUS_COLOR >> 16) & 0xFF, (BP_STATUS_COLOR >> 8) & 0xFF, BP_STATUS_COLOR & 0xFF, 0xFF));
   statusLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
@@ -143,8 +143,9 @@ UIViewGroup *BPCalibratingView::InitView() {
   percentSign_->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
   percentSign_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 34);
 
-  InitLabel(hintLabel_, 83, 278, 300, 40, "bp_calib_hint", "请保持静止",
+  InitLabel(hintLabel_, 83, 278, 300, 40, "bp_calib_hint", "",
             DEFAULT_VECTOR_FONT_FILENAME, 30);
+  hintLabel_->SetTextId(STR_BP_KEEP_STILL);
   hintLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
   group_->Add(progressBgImage_);
index cbb9828..8dc3300 100644 (file)
@@ -144,7 +144,8 @@ void BPEntryView::InitCalibExpiringSoonBar() {
   }
 
   char textBuf[48] = {0};
-  if (sprintf_s(textBuf, sizeof(textBuf), "校准即将过期·剩%d天", daysLeft) < 0) {
+  std::string fmt = ([]() { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_CALIB_EXPIRING_D); return std::string(_uiStrTmp.GetText()); }());
+  if (sprintf_s(textBuf, sizeof(textBuf), fmt.c_str(), daysLeft) < 0) {
     return;
   }
 
@@ -211,7 +212,7 @@ void BPEntryView::InitNoCalibratedBar() {
 
   calibWarnLabel_->SetPosition(159 + 26 + 12 + 8, 101+8, 90,35);
   calibWarnLabel_->SetViewId("bp_calib_warn_label");
-  calibWarnLabel_->SetText("未校准");
+  calibWarnLabel_->SetTextId(STR_BP_NOT_CALIBRATED);
   calibWarnLabel_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
   calibWarnLabel_->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff));
   calibWarnLabel_->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
@@ -224,13 +225,17 @@ void BPEntryView::InitNoCalibratedBar() {
 
 void BPEntryView::InitCalibratedView() {
   //初始化已校准视图
-  InitUILabel(titleLabel_, 0, 50, 466, 35, "bp_entry_title", "血压测量",
+  InitUILabel(titleLabel_, 0, 50, 466, 35, "bp_entry_title", "",
                DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_CHECK); titleLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   InitCalibExpiringSoonBar();
-  InitUILabel(instructionLabel_, 0, 198, 466, 90, "bp_instruction_label", "测量前30分钟\n请避免剧烈运动、咖啡和烟酒",
+  InitUILabel(instructionLabel_, 0, 198, 466, 90, "bp_instruction_label", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
-  InitLabelButton(instructionButton_, 58, 320, 170, 90, BP_CLICK_INSTRUCTION, "测量说明", 26);
-  InitLabelButton(measureButton_, 58+170+10, 320, 170, 90, BP_CLICK_MEASURE, "马上测量", 26);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_PREMEASURE_NOTE); instructionLabel_->SetText(_uiStrTmp.GetText()); } while(0);
+  InitLabelButton(instructionButton_, 58, 320, 170, 90, BP_CLICK_INSTRUCTION, "", 26);
+  InitLabelButton(measureButton_, 58+170+10, 320, 170, 90, BP_CLICK_MEASURE, "", 26);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_MEAS_GUIDE); instructionButton_->SetText(_uiStrTmp.GetText()); } while(0);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_MEASURE_NOW); measureButton_->SetText(_uiStrTmp.GetText()); } while(0);
   measureButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff0176ff);
   group_->Add(titleLabel_);
   group_->Add(instructionLabel_);
@@ -243,14 +248,18 @@ void BPEntryView::InitCalibratedView() {
 
 void BPEntryView::InitCalibrationExpiredView() {
   //初始化校准已过期视图
-  InitUILabel(titleLabel_, 0, 50, 466, 35, "bp_entry_title", "校准已过期",
+  InitUILabel(titleLabel_, 0, 50, 466, 35, "bp_entry_title", "",
     DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_CALIB_EXPIRED); titleLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   titleLabel_->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff));
   InitImageView(imageView_, 193, 120, 80, 80, "bp_calibration_expired_image", BLOOD_PATH_CALIBRATION_EXPIRED);
-  InitUILabel(instructionLabel_, 53, 230, 360, 90, "bp_instruction_label", "继续测量的数据仅供\n趋势参考",
+  InitUILabel(instructionLabel_, 53, 230, 360, 90, "bp_instruction_label", "",
    DEFAULT_VECTOR_FONT_FILENAME, 30);
-  InitLabelButton(instructionButton_, 58, 320, 170, 90, BP_CLICK_MEASURE, "马上测量", 26);
-  InitLabelButton(measureButton_, 238, 320, 170, 90, BP_CLICK_RECALIBRATE, "重新校准", 26);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_TREND_REF_ONLY); instructionLabel_->SetText(_uiStrTmp.GetText()); } while(0);
+  InitLabelButton(instructionButton_, 58, 320, 170, 90, BP_CLICK_MEASURE, "", 26);
+  InitLabelButton(measureButton_, 238, 320, 170, 90, BP_CLICK_RECALIBRATE, "", 26);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_MEASURE_NOW); instructionButton_->SetText(_uiStrTmp.GetText()); } while(0);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_RECALIBRATE); measureButton_->SetText(_uiStrTmp.GetText()); } while(0);
   measureButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xffff5a36);
   auto *listener = static_cast<UIView::OnClickListener *>(BPMainPresenter::GetInstance());
   instructionButton_->SetOnClickListener(listener);
@@ -264,12 +273,15 @@ void BPEntryView::InitCalibrationExpiredView() {
 
 void BPEntryView::InitNotCalibratedView() {
   //初始化未校准视图
-  InitUILabel(titleLabel_, 0, 50, 466, 35, "bp_entry_title", "血压测量",
+  InitUILabel(titleLabel_, 0, 50, 466, 35, "bp_entry_title", "",
     DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_CHECK); titleLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   InitNoCalibratedBar();
-  InitUILabel(instructionLabel_, 33, 152, 400, 162, "bp_instruction_label", "请先完成校准",
+  InitUILabel(instructionLabel_, 33, 152, 400, 162, "bp_instruction_label", "",
     DEFAULT_VECTOR_FONT_FILENAME, 30);
-  InitLabelButton(measureButton_, 93, 320, 280, 90, BP_CLICK_MEASURE, "开始校准", 26);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_COMPLETE_CALIB_FIRST); instructionLabel_->SetText(_uiStrTmp.GetText()); } while(0);
+  InitLabelButton(measureButton_, 93, 320, 280, 90, BP_CLICK_MEASURE, "", 26);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_START_CAL); measureButton_->SetText(_uiStrTmp.GetText()); } while(0);
   measureButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff0176ff);
   measureButton_->SetOnClickListener(static_cast<UIView::OnClickListener *>(BPMainPresenter::GetInstance()));
   group_->Add(titleLabel_);
index d421629..beb5931 100644 (file)
@@ -6,6 +6,7 @@
 #include "color.h"
 #include "common/image_cache_manager.h"
 #include "common/screen.h"
+#include "ui_resource_string.h"
 #include "uicomponents/UIComponents.h"
 #include "wearable_log.h"
 
@@ -214,8 +215,9 @@ void BPHistoryView::InitRecentPage() {
   recentPage_->SetOnDragListener(
       static_cast<UIView::OnDragListener *>(BPMainPresenter::GetInstance()));
 
-  InitUILabel(recentTitleLabel_, 0, 50, 466, 35, "bp_recent_title", "最新记录",
+  InitUILabel(recentTitleLabel_, 0, 50, 466, 35, "bp_recent_title", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_LATEST_RECORD); recentTitleLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   recentTitleLabel_->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));
   recentTitleLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
@@ -243,10 +245,12 @@ void BPHistoryView::InitRecentPage() {
     recentVlineMid_->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
   }
 
-  InitLabel(recentSbpTitle_, 0, 158 + 30 + 5, 233, 35, "bp_recent_sbp_title", "收缩压",
+  InitLabel(recentSbpTitle_, 0, 158 + 30 + 5, 233, 35, "bp_recent_sbp_title", "",
             DEFAULT_VECTOR_FONT_FILENAME, 30);
-  InitLabel(recentDbpTitle_, 233, 158 + 30 + 5, 233, 35, "bp_recent_dbp_title", "舒张压",
+  InitLabel(recentDbpTitle_, 233, 158 + 30 + 5, 233, 35, "bp_recent_dbp_title", "",
             DEFAULT_VECTOR_FONT_FILENAME, 30);
+  recentSbpTitle_->SetTextId(STR_SBP);
+  recentDbpTitle_->SetTextId(STR_DBP);
   recentSbpTitle_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
   recentDbpTitle_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
   recentSbpTitle_->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xff));
@@ -269,7 +273,8 @@ void BPHistoryView::InitRecentPage() {
   recentDbpUnit_->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));
 
   InitLabelButton(historyButton_, BP_HISTORY_BTN_X, BP_HISTORY_BTN_Y, BP_HISTORY_BTN_W, BP_HISTORY_BTN_H,
-                  BP_CLICK_VIEW_HISTORY, "查看历史", 30);
+                  BP_CLICK_VIEW_HISTORY, "", 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_VIEW_HISTORY); historyButton_->SetText(_uiStrTmp.GetText()); } while(0);
   historyButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
   historyButton_->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED);
   historyButton_->SetStyle(STYLE_BORDER_RADIUS, 45);
@@ -333,8 +338,9 @@ UIViewGroup *BPHistoryView::CreateRecordPage(const BPRecord &record, size_t inde
   UILabel *sbpUnit = nullptr;
   UILabel *dbpUnit = nullptr;
 
-  InitUILabel(titleLabel, 0, 50, 466, 35, "bp_history_record_title", index == 0 ? "最新记录" : "最近记录",
+  InitUILabel(titleLabel, 0, 50, 466, 35, "bp_history_record_title", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(index == 0 ? STR_BP_LATEST_RECORD : STR_BP_RECENT_RECORD); titleLabel->SetText(_uiStrTmp.GetText()); } while(0);
   if (index == 0) {
     titleLabel->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));
   } else {
@@ -367,10 +373,12 @@ UIViewGroup *BPHistoryView::CreateRecordPage(const BPRecord &record, size_t inde
     vlineMid->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
   }
 
-  InitLabel(sbpTitle, 0, 158 + 30 + 5, 233, 35, "bp_history_sbp_title", "收缩压",
+  InitLabel(sbpTitle, 0, 158 + 30 + 5, 233, 35, "bp_history_sbp_title", "",
             DEFAULT_VECTOR_FONT_FILENAME, 30);
-  InitLabel(dbpTitle, 233, 158 + 30 + 5, 233, 35, "bp_history_dbp_title", "舒张压",
+  InitLabel(dbpTitle, 233, 158 + 30 + 5, 233, 35, "bp_history_dbp_title", "",
             DEFAULT_VECTOR_FONT_FILENAME, 30);
+  sbpTitle->SetTextId(STR_SBP);
+  dbpTitle->SetTextId(STR_DBP);
   sbpTitle->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
   dbpTitle->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
   sbpTitle->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xff));
@@ -432,22 +440,26 @@ UIViewGroup *BPHistoryView::CreateTipPage() {
   UILabel *hintLine2 = nullptr;
   UILabelButton *tipOkButton = nullptr;
 
-  InitUILabel(titleLabel, 0, 50, 466, 35, "bp_history_tip_title", "提示",
+  InitUILabel(titleLabel, 0, 50, 466, 35, "bp_history_tip_title", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_TIP); titleLabel->SetText(_uiStrTmp.GetText()); } while(0);
   titleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
   InitImageView(phoneIcon, 193, 120, 80, 80, "bp_history_tip_phone", BP_PHONE_IMAGE);
 
-  InitUILabel(hintLine1, 53, 240, 360, 35, "bp_history_tip_hint1", "在APP中查看完整血压记录",
+  InitUILabel(hintLine1, 53, 240, 360, 35, "bp_history_tip_hint1", "",
               DEFAULT_VECTOR_FONT_FILENAME, 28);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_APP_FULL_RECORD); hintLine1->SetText(_uiStrTmp.GetText()); } while(0);
   hintLine1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
-  InitUILabel(hintLine2, 53, 280, 360, 35, "bp_history_tip_hint2", "手表仅保留最近记录",
+  InitUILabel(hintLine2, 53, 280, 360, 35, "bp_history_tip_hint2", "",
               DEFAULT_VECTOR_FONT_FILENAME, 28);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_WATCH_RECENT_ONLY); hintLine2->SetText(_uiStrTmp.GetText()); } while(0);
   hintLine2->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
   InitLabelButton(tipOkButton, BP_HISTORY_BTN_X, BP_HISTORY_BTN_Y, BP_HISTORY_BTN_W, BP_HISTORY_BTN_H,
-                  BP_CLICK_HISTORY_TIP_OK, "知道了", 30);
+                  BP_CLICK_HISTORY_TIP_OK, "", 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_KONW); tipOkButton->SetText(_uiStrTmp.GetText()); } while(0);
   tipOkButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
   tipOkButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED);
   tipOkButton->SetStyle(STYLE_BORDER_RADIUS, 45);
@@ -505,18 +517,21 @@ void BPHistoryView::InitEmptyPage() {
   emptyPage_->SetOnDragListener(
       static_cast<UIView::OnDragListener *>(BPMainPresenter::GetInstance()));
 
-  InitUILabel(emptyTitleLabel_, 0, 50, 466, 35, "bp_history_empty_title", "暂无测量记录",
+  InitUILabel(emptyTitleLabel_, 0, 50, 466, 35, "bp_history_empty_title", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_NO_MEAS_RECORD); emptyTitleLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   emptyTitleLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
   InitImageView(emptyImage_, 174, 120, 80, 80, "bp_history_empty_image", BP_NO_RECORD_IMAGE);
 
-  InitUILabel(emptyHintLabel_, 53, 260, 360, 70, "bp_history_empty_hint",
-              "完成一次测量后\n可在这里查看记录", DEFAULT_VECTOR_FONT_FILENAME, 28);
+  InitUILabel(emptyHintLabel_, 53, 260, 360, 70, "bp_history_empty_hint", "",
+              DEFAULT_VECTOR_FONT_FILENAME, 28);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_EMPTY_HIST_HINT); emptyHintLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   emptyHintLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
   emptyHintLabel_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
 
-  InitLabelButton(startMeasureButton_, 93, 330, 280, 90, BP_CLICK_MEASURE, "开始测量", 30);
+  InitLabelButton(startMeasureButton_, 93, 330, 280, 90, BP_CLICK_MEASURE, "", 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_START_MEAS); startMeasureButton_->SetText(_uiStrTmp.GetText()); } while(0);
   startMeasureButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff0176ff);
   startMeasureButton_->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff0176ff, UIButton::PRESSED);
   startMeasureButton_->SetStyle(STYLE_BORDER_RADIUS, 45);
index 5ed2c97..de8ac9e 100644 (file)
@@ -4,6 +4,7 @@
 #include "bloodpressure/include/BPViewClickIds.h"
 #include "UiConfig.h"
 #include "common/screen.h"
+#include "ui_resource_string.h"
 #include "uicomponents/UIComponents.h"
 #include "wearable_log.h"
 
@@ -66,30 +67,30 @@ void BPInstructionView::ApplyInstructionContent(BPInstructionType type) { //应
   measureButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff0176ff);
   switch (type) {
     case BP_INSTRUCTION_TYPE_SEAT:
-      instructionLabel_->SetText("双脚着地,端坐在椅子上\n双手手背朝上,手臂平放在桌子上");
+      do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_INSTR_SEAT); instructionLabel_->SetText(_uiStrTmp.GetText()); } while(0);
       instructionLabel_->SetPosition(8, 230, 450, 70);
-      measureButton_->SetText("开始测量");
+      do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_START_MEAS); measureButton_->SetText(_uiStrTmp.GetText()); } while(0);
       break;
     case BP_INSTRUCTION_TYPE_WEAR:
-      instructionLabel_->SetText("手表和手腕之间仅限一指距离\n偏紧佩戴手表");
+      do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_INSTR_WEAR); instructionLabel_->SetText(_uiStrTmp.GetText()); } while(0);
       instructionLabel_->SetPosition(38, 230, 390, 70);
-      measureButton_->SetText("开始测量");
+      do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_START_MEAS); measureButton_->SetText(_uiStrTmp.GetText()); } while(0);
       break;
     case BP_INSTRUCTION_TYPE_BELT_LOOSE:
-      instructionLabel_->SetText("表带过松\n请调整松紧后重试");
+      do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_INSTR_BELT_LOOSE); instructionLabel_->SetText(_uiStrTmp.GetText()); } while(0);
       instructionLabel_->SetPosition(113, 230, 240, 70);
-      measureButton_->SetText("重新测量");
+      do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_RE_MEAS); measureButton_->SetText(_uiStrTmp.GetText()); } while(0);
       measureButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xffff5a36);
       break;
     case BP_INSTRUCTION_TYPE_FIRST:
-      instructionLabel_->SetText("坐姿端正,手臂平放桌面\n手表与心脏同高");
+      do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_INSTR_CALIB1); instructionLabel_->SetText(_uiStrTmp.GetText()); } while(0);
       instructionLabel_->SetPosition(68, 230, 330, 70);
-      measureButton_->SetText("开始校准");
+      do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_START_CAL); measureButton_->SetText(_uiStrTmp.GetText()); } while(0);
       break;
     case BP_INSTRUCTION_TYPE_SECOND:
-      instructionLabel_->SetText("测量同一只手,保持相同姿势\n准备完成后开始校准");
+      do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_INSTR_CALIB2); instructionLabel_->SetText(_uiStrTmp.GetText()); } while(0);
       instructionLabel_->SetPosition(38, 230, 390, 70);
-      measureButton_->SetText("开始校准");
+      do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_START_CAL); measureButton_->SetText(_uiStrTmp.GetText()); } while(0);
       break;
     default:
       break;
@@ -211,8 +212,10 @@ UIViewGroup *BPInstructionView::InitView(BPInstructionType type) {
               DEFAULT_VECTOR_FONT_FILENAME, 30);
   instructionLabel_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
   instructionLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
-  InitLabelButton(backButton_, 58, 320, 170, 90, BP_CLICK_INSTRUCTION_BACK, "取消", 26);
-  InitLabelButton(measureButton_, 238, 320, 170, 90, BP_CLICK_MEASURE, "开始", 26);
+  InitLabelButton(backButton_, 58, 320, 170, 90, BP_CLICK_INSTRUCTION_BACK, "", 26);
+  InitLabelButton(measureButton_, 238, 320, 170, 90, BP_CLICK_MEASURE, "", 26);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_CANCEL); backButton_->SetText(_uiStrTmp.GetText()); } while(0);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_START); measureButton_->SetText(_uiStrTmp.GetText()); } while(0);
   measureButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff0176ff);
 
   auto *clickListener = static_cast<UIView::OnClickListener *>(BPMainPresenter::GetInstance());
index 15cb2ab..c3083ce 100644 (file)
@@ -5,6 +5,7 @@
 #include "UiConfig.h"
 #include "color.h"
 #include "securec.h"
+#include "ui_resource_string.h"
 #include "uicomponents/UIComponents.h"
 #include <ctime>
 
@@ -104,11 +105,11 @@ void BPMeasureResultView::InitDividerLines() {
 //应用正常布局
 void BPMeasureResultView::ApplyNormalLayout() {
   if (titleLabel_ != nullptr) {
-    titleLabel_->SetText("测量成功");
+    titleLabel_->SetTextId(STR_BP_MEAS_SUCCESS);
     titleLabel_->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));
   }
   if (statusLabel_ != nullptr) {
-    statusLabel_->SetText("血压处于正常范围");
+    statusLabel_->SetTextId(STR_BP_NORMAL_RANGE);
     statusLabel_->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));
   }
   if (sbpValue_ != nullptr) {
@@ -122,11 +123,11 @@ void BPMeasureResultView::ApplyNormalLayout() {
 //应用偏高布局
 void BPMeasureResultView::ApplyHighLayout() {
   if (titleLabel_ != nullptr) {
-    titleLabel_->SetText("测量成功");
+    titleLabel_->SetTextId(STR_BP_MEAS_SUCCESS);
     titleLabel_->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff));
   }
   if (statusLabel_ != nullptr) {
-    statusLabel_->SetText("血压偏高,请关注");
+    statusLabel_->SetTextId(STR_BP_ELEVATED_ATTN);
     statusLabel_->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff));
   }
   if (sbpValue_ != nullptr) {
@@ -140,10 +141,10 @@ void BPMeasureResultView::ApplyHighLayout() {
 //应用校准过期布局
 void BPMeasureResultView::ApplyCalibExpiredLayout() {
   if (titleLabel_ != nullptr) {
-    titleLabel_->SetText("测量成功");
+    titleLabel_->SetTextId(STR_BP_MEAS_SUCCESS);
   }
   if (statusLabel_ != nullptr) {
-    statusLabel_->SetText("校准已过期");
+    statusLabel_->SetTextId(STR_BP_CALIB_EXPIRED);
     statusLabel_->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff));
   }
 
@@ -176,7 +177,7 @@ UIViewGroup *BPMeasureResultView::InitView() {
   group_ = new UIViewGroup();
   group_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
 
-  InitUILabel(titleLabel_, 0, 50, 466, 35, "bp_result_title", "测量成功",
+  InitLabelExt(titleLabel_, 0, 50, 466, 35, "bp_result_title", STR_BP_MEAS_SUCCESS,
                DEFAULT_VECTOR_FONT_FILENAME, 30);
   titleLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
@@ -187,10 +188,12 @@ UIViewGroup *BPMeasureResultView::InitView() {
 
   InitDividerLines();
 
-  InitLabel(sbpTitle_, 0, 158 + 30 + 5, 233, 35, "bp_result_sbp_title", "收缩压",
+  InitLabel(sbpTitle_, 0, 158 + 30 + 5, 233, 35, "bp_result_sbp_title", "",
             DEFAULT_VECTOR_FONT_FILENAME, 30);
-  InitLabel(dbpTitle_, 233, 158 + 30 + 5, 233, 35, "bp_result_dbp_title", "舒张压",
+  InitLabel(dbpTitle_, 233, 158 + 30 + 5, 233, 35, "bp_result_dbp_title", "",
             DEFAULT_VECTOR_FONT_FILENAME, 30);
+  sbpTitle_->SetTextId(STR_SBP);
+  dbpTitle_->SetTextId(STR_DBP);
   sbpTitle_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
   dbpTitle_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
   sbpTitle_->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xff));
@@ -212,15 +215,16 @@ UIViewGroup *BPMeasureResultView::InitView() {
   sbpUnit_->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));
   dbpUnit_->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));
 
-  InitLabel(statusLabel_, 0, 322, 466, 35, "bp_result_status", "血压处于正常范围",
+  InitLabel(statusLabel_, 0, 322, 466, 35, "bp_result_status", "",
             DEFAULT_VECTOR_FONT_FILENAME, 30);
+  statusLabel_->SetTextId(STR_BP_NORMAL_RANGE);
   statusLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
   confirmButton_ = new UILabelButtonExt();
   if (confirmButton_ != nullptr) {
     confirmButton_->SetPosition(0, 366, 466, 100);
     confirmButton_->SetViewId(BP_CLICK_CONFIRM);
-    confirmButton_->SetText("确定");
+    confirmButton_->SetTextId(STR_OK);
     confirmButton_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
     confirmButton_->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xff));
     confirmButton_->SetImageSrc(PNG_BUTTON_466x100_IMAGE, PNG_BUTTON_466x100_IMAGE);
index 5e141fe..ac95365 100644 (file)
@@ -1,6 +1,7 @@
 #include "bloodpressure/include/BPMeasuringView.h"
 #include "common/image_cache_manager.h"
 #include "securec.h"
+#include "ui_resource_string.h"
 #include "uicomponents/UIComponents.h"
 #include "wearable_log.h"
 
@@ -140,7 +141,8 @@ UIViewGroup *BPMeasuringView::InitView() {
     group_->Add(animatorView_);
   }
   InitUILabel(noteLabel_, 0, BP_MEASURING_ANIM_Y + BP_MEASURING_ANIM_H + 20, 466, 35,
-              "bp_measuring_note", "请保持静止", DEFAULT_VECTOR_FONT_FILENAME, 30);
+              "bp_measuring_note", "", DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_KEEP_STILL); noteLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   group_->Add(noteLabel_);
   return group_;
 }
index 15e2f82..8067a6d 100644 (file)
@@ -84,21 +84,24 @@ void BPValueConfirmView::InitActionButtons() {
   auto *listener = static_cast<UIView::OnClickListener *>(BPMainPresenter::GetInstance());
 
   InitLabelButton(modifyButton_, BP_CONFIRM_BTN_LEFT_X, BP_CONFIRM_BTN_Y, BP_CONFIRM_BTN_W,
-                  BP_CONFIRM_BTN_H, BP_CLICK_STOP, "修改", 26);
+                  BP_CONFIRM_BTN_H, BP_CLICK_STOP, "", 26);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_MODIFY); modifyButton_->SetText(_uiStrTmp.GetText()); } while(0);
   modifyButton_->SetStyle(STYLE_BACKGROUND_COLOR, BP_COLOR_BTN_GREY);
   modifyButton_->SetStyleForState(STYLE_BACKGROUND_COLOR, BP_COLOR_BTN_GREY, UIButton::PRESSED);
   modifyButton_->SetStyle(STYLE_BORDER_RADIUS, 45);
   modifyButton_->SetOnClickListener(listener);
 
   InitLabelButton(startCalibButton_, BP_CONFIRM_BTN_RIGHT_X, BP_CONFIRM_BTN_Y, BP_CONFIRM_BTN_W,
-                  BP_CONFIRM_BTN_H, BP_CLICK_VALUE_CONFIRM, "开始校准", 26);
+                  BP_CONFIRM_BTN_H, BP_CLICK_VALUE_CONFIRM, "", 26);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_START_CAL); startCalibButton_->SetText(_uiStrTmp.GetText()); } while(0);
   startCalibButton_->SetStyle(STYLE_BACKGROUND_COLOR, BP_COLOR_BTN_BLUE);
   startCalibButton_->SetStyleForState(STYLE_BACKGROUND_COLOR, BP_COLOR_BTN_BLUE, UIButton::PRESSED);
   startCalibButton_->SetStyle(STYLE_BORDER_RADIUS, 45);
   startCalibButton_->SetOnClickListener(listener);
 
   InitLabelButton(errorOkButton_, BP_CONFIRM_ERROR_OK_X, 330, BP_CONFIRM_ERROR_OK_W,
-                  BP_CONFIRM_BTN_H, BP_CLICK_VALUE_ERROR_OK, "确定", 30);
+                  BP_CONFIRM_BTN_H, BP_CLICK_VALUE_ERROR_OK, "", 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_OK); errorOkButton_->SetText(_uiStrTmp.GetText()); } while(0);
   errorOkButton_->SetStyle(STYLE_BACKGROUND_COLOR, BP_COLOR_BTN_ORANGE);
   errorOkButton_->SetStyleForState(STYLE_BACKGROUND_COLOR, BP_COLOR_BTN_ORANGE, UIButton::PRESSED);
   errorOkButton_->SetStyle(STYLE_BORDER_RADIUS, 45);
@@ -187,24 +190,24 @@ UIViewGroup *BPValueConfirmView::InitView() {
   }
   group_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
 
-  InitLabelExt(titleLabel_, 83, 50, 300, 35, "bp_value_confirm_title", STR_CONFIRM,
+  InitLabelExt(titleLabel_, 83, 50, 300, 35, "bp_value_confirm_title", STR_BP_CONFIRM_INPUT,
                DEFAULT_VECTOR_FONT_FILENAME, 28);
-  titleLabel_->SetText("确认输入值");
   titleLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
-  InitLabelExt(errorLabel_, 53, 88, 360, 32, "bp_value_confirm_error", STR_CONFIRM,
+  InitLabelExt(errorLabel_, 53, 88, 360, 32, "bp_value_confirm_error", STR_BP_SBP_GT_DBP,
                DEFAULT_VECTOR_FONT_FILENAME, 22);
-  errorLabel_->SetText("收缩压应大于舒张压");
   errorLabel_->SetTextColor(Color::GetColorFromRGBA(0xff, 0x44, 0x44, 0xff));
   errorLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
   errorLabel_->SetVisible(false);
 
   InitDividerLines();
 
-  InitLabel(sbpTitle_, BP_CONFIRM_BTN_LEFT_X, 140, BP_CONFIRM_BTN_W, 30, "bp_confirm_sbp_title", "收缩压",
+  InitLabel(sbpTitle_, BP_CONFIRM_BTN_LEFT_X, 140, BP_CONFIRM_BTN_W, 30, "bp_confirm_sbp_title", "",
             DEFAULT_VECTOR_FONT_FILENAME, 22);
-  InitLabel(dbpTitle_, BP_CONFIRM_BTN_RIGHT_X, 140, BP_CONFIRM_BTN_W, 30, "bp_confirm_dbp_title", "舒张压",
+  InitLabel(dbpTitle_, BP_CONFIRM_BTN_RIGHT_X, 140, BP_CONFIRM_BTN_W, 30, "bp_confirm_dbp_title", "",
             DEFAULT_VECTOR_FONT_FILENAME, 22);
+  sbpTitle_->SetTextId(STR_SBP);
+  dbpTitle_->SetTextId(STR_DBP);
   sbpTitle_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
   dbpTitle_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
index fa755f4..76ab750 100644 (file)
@@ -101,16 +101,19 @@ UIViewGroup *BPValueInputView::InitView() {
   group_ = new UIViewGroup();
   group_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
 
-  InitLabel(titleLabel_, 128, 50, 210, 35, "bp_value_input_title", "输入血压计值",
+  InitLabel(titleLabel_, 128, 50, 210, 35, "bp_value_input_title", "",
             DEFAULT_VECTOR_FONT_FILENAME, 30);
+  titleLabel_->SetTextId(STR_BP_INPUT_METER_VALUE);
   InitBpPicker(sbpPicker_, BP_SBP_PICKER_X, BP_PICKER_Y, BP_SBP_PICKER_W, BP_PICKER_H,
                "bp_sbp_picker", SBP_MIN, SBP_MAX);
   InitBpPicker(dbpPicker_, BP_DBP_PICKER_X, BP_PICKER_Y, BP_DBP_PICKER_W, BP_PICKER_H,
                "bp_dbp_picker", DBP_MIN, DBP_MAX);
-  InitLabel(sbpLabel_, 114, BP_UNIT_LABEL_Y, 60, 23, "bp_sbp_unit", "收缩压",
+  InitLabel(sbpLabel_, 114, BP_UNIT_LABEL_Y, 60, 23, "bp_sbp_unit", "",
             DEFAULT_VECTOR_FONT_FILENAME, 20);
-  InitLabel(dbpLabel_, 292, BP_UNIT_LABEL_Y, 60, 23, "bp_dbp_unit", "舒张压",
+  InitLabel(dbpLabel_, 292, BP_UNIT_LABEL_Y, 60, 23, "bp_dbp_unit", "",
             DEFAULT_VECTOR_FONT_FILENAME, 20);
+  sbpLabel_->SetTextId(STR_SBP);
+  dbpLabel_->SetTextId(STR_DBP);
   sbpLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
   dbpLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
index dc2b818..07ce0f4 100644 (file)
@@ -1,5 +1,6 @@
 #include "ecg/include/ECGAbnormalView.h"
 #include "ecg/include/ECGMainPresenter.h"
+#include "ui_resource_string.h"
 #include "uicomponents/UIComponents.h"
 
 namespace OHOS {
@@ -33,16 +34,20 @@ UIViewGroup *ECGAbnormalView::InitView() {
   group_ = new UIViewGroup();
   group_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
 
-  InitUILabel(titleLabel_, 83, 50, 300, 35, "ecg_abnormal_title", "提示",
+  InitUILabel(titleLabel_, 83, 50, 300, 35, "ecg_abnormal_title", "",
             DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_TIP); titleLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   InitImageView(iconView_, 193, 120, 80, 80, "ecg_abnormal_icon", ECG_PATH_ABNORMAL);
-  InitUILabel(noteLabel_, 53, 210, 360, 90, "ecg_abnormal_note",
-            "接触异常,请确保手指\n触摸电极后重试", DEFAULT_VECTOR_FONT_FILENAME, 26);
+  InitUILabel(noteLabel_, 53, 210, 360, 90, "ecg_abnormal_note", "",
+            DEFAULT_VECTOR_FONT_FILENAME, 26);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_CONTACT_ABNORMAL); noteLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   noteLabel_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
   noteLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
-  InitLabelButton(exitButton_, 58, 320, 170, 90, ECG_CLICK_EXIT, "退出", 26);
-  InitLabelButton(retryButton_, 238, 320, 170, 90, ECG_CLICK_RETRY, "重试", 26);
+  InitLabelButton(exitButton_, 58, 320, 170, 90, ECG_CLICK_EXIT, "", 26);
+  InitLabelButton(retryButton_, 238, 320, 170, 90, ECG_CLICK_RETRY, "", 26);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_EXIT); exitButton_->SetText(_uiStrTmp.GetText()); } while(0);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_RETRY); retryButton_->SetText(_uiStrTmp.GetText()); } while(0);
   exitButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
   retryButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xffff5a36);
 
index 54fa503..4391bc8 100644 (file)
@@ -1,6 +1,7 @@
 #include "ecg/include/ECGEntryView.h"
 #include "ecg/include/ECGMainPresenter.h"
 #include "ecg/include/ECGModel.h"
+#include "ui_resource_string.h"
 #include "uicomponents/UIComponents.h"
 #include "wearable_log.h"
 
@@ -86,16 +87,19 @@ void ECGEntryView::InitPageIndicator() {
 
 
 void ECGEntryView::InitEntryView() {
-  InitUILabel(titleLabel_, 0, 50, 466, 35, "ecg_entry_title", "ECG测量",
+  InitUILabel(titleLabel_, 0, 50, 466, 35, "ecg_entry_title", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_MEAS_TITLE); titleLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   titleLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
-  InitUILabel(noteLabel_, 0, 216, 466, 35, "ecg_entry_note", "保持指尖清洁湿润",
+  InitUILabel(noteLabel_, 0, 216, 466, 35, "ecg_entry_note", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_ENTRY_NOTE); noteLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   noteLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
 
-  InitLabelButton(measureButton_, 93, 320, 280, 90, ECG_CLICK_MEASURE, "开始测量", 30);
+  InitLabelButton(measureButton_, 93, 320, 280, 90, ECG_CLICK_MEASURE, "", 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_START_MEAS); measureButton_->SetText(_uiStrTmp.GetText()); } while(0);
   measureButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff0176ff);
   measureButton_->SetStyle(STYLE_BORDER_RADIUS, 100);
   measureButton_->SetOnClickListener(static_cast<UIView::OnClickListener *>(ECGMainPresenter::GetInstance()));
index 0c17670..ba083f2 100644 (file)
@@ -1,6 +1,8 @@
 #include "ecg/include/ECGHistoryView.h"
 #include "ecg/include/ECGMainPresenter.h"
 #include "ecg/include/ECGModel.h"
+#include "securec.h"
+#include "ui_resource_string.h"
 #include "uicomponents/UIComponents.h"
 #include "wearable_log.h"
 
@@ -154,15 +156,18 @@ void ECGHistoryView::InitEmptyPage() {
   emptyPage_->SetTouchable(true);
   emptyPage_->SetOnDragListener(static_cast<UIView::OnDragListener *>(ECGMainPresenter::GetInstance()));
 
-  InitUILabel(emptyTitleLabel_, 0, 50, 466, 35, "ecg_history_empty_title", "暂无测量记录",
+  InitUILabel(emptyTitleLabel_, 0, 50, 466, 35, "ecg_history_empty_title", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_NO_MEAS_RECORD); emptyTitleLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   emptyTitleLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
-  InitImageView(emptyImage_, 193, 120, 80, 80, "ecg_history_empty_image", ECG_NO_RECORD_IMAGE);
-  InitUILabel(emptyHintLabel_, 53, 260, 360, 70, "ecg_history_empty_hint",
-              "完成一次测量后\n可在这里查看记录", DEFAULT_VECTOR_FONT_FILENAME, 28);
+  InitImageView(emptyImage_, 174, 120, 80, 80, "ecg_history_empty_image", ECG_NO_RECORD_IMAGE);
+  InitUILabel(emptyHintLabel_, 53, 260, 360, 70, "ecg_history_empty_hint", "",
+              DEFAULT_VECTOR_FONT_FILENAME, 28);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_EMPTY_HIST_HINT); emptyHintLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   emptyHintLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
   emptyHintLabel_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
-  InitLabelButton(startMeasureButton_, 93, 320, 280, 90, ECG_CLICK_MEASURE, "开始测量", 30);
+  InitLabelButton(startMeasureButton_, 93, 330, 280, 90, ECG_CLICK_MEASURE, "", 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_START_MEAS); startMeasureButton_->SetText(_uiStrTmp.GetText()); } while(0);
   startMeasureButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff0176ff);
   startMeasureButton_->SetStyle(STYLE_BORDER_RADIUS, 100);
   startMeasureButton_->SetOnClickListener(
@@ -184,8 +189,9 @@ void ECGHistoryView::InitRecentPage() {
   recentPage_->SetTouchable(true);
   recentPage_->SetOnDragListener(static_cast<UIView::OnDragListener *>(ECGMainPresenter::GetInstance()));
 
-  InitUILabel(recentTitle_, 0, 50, 466, 35, "ecg_recent_title", "最近记录",
+  InitUILabel(recentTitle_, 0, 50, 466, 35, "ecg_recent_title", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_RECENT_RECORD); recentTitle_->SetText(_uiStrTmp.GetText()); } while(0);
   recentTitle_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
   InitUILabel(recentTime_, 0, 93, 466, 33, "ecg_recent_time", "--",
@@ -205,11 +211,13 @@ void ECGHistoryView::InitRecentPage() {
   recentBpm_->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
 
   InitUILabel(recentBpmUnit_, ECG_RECENT_BPM_X + ECG_RECENT_BPM_W_TWO_DIGIT + ECG_RECENT_BPM_UNIT_GAP,
-              ECG_RECENT_BPM_UNIT_Y, 72, 30, "ecg_recent_bpm_unit", "次/分", DEFAULT_VECTOR_FONT_FILENAME, 30);
+              ECG_RECENT_BPM_UNIT_Y, 72, 30, "ecg_recent_bpm_unit", "", DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_TIMES_PER_MIN); recentBpmUnit_->SetText(_uiStrTmp.GetText()); } while(0);
   recentBpmUnit_->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));
   recentBpmUnit_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
-  InitLabelButton(viewAllButton_, 93, 320, 280, 90, ECG_CLICK_VIEW_ALL, "查看全部", 28);
+  InitLabelButton(viewAllButton_, 93, 320, 280, 90, ECG_CLICK_VIEW_ALL, "", 28);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_VIEW_ALL); viewAllButton_->SetText(_uiStrTmp.GetText()); } while(0);
   viewAllButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
   viewAllButton_->SetStyle(STYLE_BORDER_RADIUS, 100);
   viewAllButton_->SetOnClickListener(static_cast<UIView::OnClickListener *>(ECGMainPresenter::GetInstance()));
@@ -233,8 +241,9 @@ void ECGHistoryView::InitListPage() {
   listPage_->SetTouchable(true);
   listPage_->SetOnDragListener(static_cast<UIView::OnDragListener *>(ECGMainPresenter::GetInstance()));
 
-  InitUILabel(listTitle_, 0, 50, 466, 35, "ecg_list_title", "测量记录",
+  InitUILabel(listTitle_, 0, 50, 466, 35, "ecg_list_title", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_MEAS_RECORD); listTitle_->SetText(_uiStrTmp.GetText()); } while(0);
   listTitle_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
   scrollView_ = new UIScrollView();
@@ -313,7 +322,16 @@ void ECGHistoryView::RebuildList() {
     resultLabel->SetTextColor(model->GetAfibResultColor(rec.afibResult));
 
     UILabel *bpmLabel = nullptr;
-    std::string bpmStr = rec.bpm > 0 ? (std::to_string(rec.bpm) + " 次/分") : "-- 次/分";
+    std::string bpmStr;
+    if (rec.bpm > 0) {
+      char bpmBuf[32] = {0};
+      std::string fmt = ([]() { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_BPM_FORMAT); return std::string(_uiStrTmp.GetText()); }());
+      if (sprintf_s(bpmBuf, sizeof(bpmBuf), fmt.c_str(), rec.bpm) >= 0) {
+        bpmStr = bpmBuf;
+      }
+    } else {
+      bpmStr = ([]() { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_BPM_NA); return std::string(_uiStrTmp.GetText()); }());
+    }
     InitUILabel(bpmLabel, ECG_HISTORY_CARD_MARGIN + 40 + 38 + 8 + 8 + 120, y + 36 + 5, 119, 35, "ecg_list_bpm",
                 bpmStr.c_str(), DEFAULT_VECTOR_FONT_FILENAME, 28);
     bpmLabel->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
index 35f1354..259e6cc 100644 (file)
@@ -1,6 +1,7 @@
 #include "ecg/include/ECGInstructionView.h"
 #include "ecg/include/ECGMainPresenter.h"
 #include "ecg/include/ECGViewClickIds.h"
+#include "ui_resource_string.h"
 #include "uicomponents/UIComponents.h"
 
 namespace OHOS {
@@ -39,14 +40,17 @@ void ECGInstructionView::ClearContent() {
 
 void ECGInstructionView::InitDisclaimer() {
   InitImageView(imageView_, 193, 50, 80, 80, "ecg_disclaimer", ECG_PATH_DISCLAIMER);
-  InitUILabel(contentLabel_, 50, 147, 366, 70, "ecg_disclaimer_content",
-              "ECG 测量结果仅供健康参考\n不可替代专业医疗诊断", DEFAULT_VECTOR_FONT_FILENAME, 30);
+  InitUILabel(contentLabel_, 50, 147, 366, 70, "ecg_disclaimer_content", "",
+              DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_DISCLAIMER); contentLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   contentLabel_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
   contentLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
-  InitUILabel(noteLabel_, 0, 248, 466, 35, "ecg_disclaimer_note", "如有心脏相关疑虑,请咨询医生",
+  InitUILabel(noteLabel_, 0, 248, 466, 35, "ecg_disclaimer_note", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_CONSULT_DOC); noteLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   noteLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
-  InitLabelButton(agreeButton_, 93, 320, 280, 90, ECG_CLICK_DISCLAIMER_ACCEPT, "同意并继续", 26);
+  InitLabelButton(agreeButton_, 93, 320, 280, 90, ECG_CLICK_DISCLAIMER_ACCEPT, "", 26);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_AGREE_CONTINUE); agreeButton_->SetText(_uiStrTmp.GetText()); } while(0);
   agreeButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff0176ff);
   agreeButton_->SetStyle(STYLE_BORDER_RADIUS, 100);
 
@@ -62,12 +66,14 @@ void ECGInstructionView::InitDisclaimer() {
 }
 
 void ECGInstructionView::InitWaitContact() {
-  InitUILabel(titleLabel_, 0, 50, 466, 35, "ecg_wait_contact_title", "ECG测量",
+  InitUILabel(titleLabel_, 0, 50, 466, 35, "ecg_wait_contact_title", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_MEAS_TITLE); titleLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   titleLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
   InitImageView(imageView_, 55, 95, 360, 300, "ecg_wait_contact", ECG_PATH_WAIT_CONTACT);
-  InitUILabel(contentLabel_, 0, 401, 466, 30, "ecg_wait_contact_content", "将手指放在电极上",
+  InitUILabel(contentLabel_, 0, 401, 466, 30, "ecg_wait_contact_content", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_FINGER_ELECTRODE); contentLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   contentLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
   auto *dragListener = static_cast<UIView::OnDragListener *>(ECGMainPresenter::GetInstance());
@@ -79,12 +85,14 @@ void ECGInstructionView::InitWaitContact() {
 }
 
 void ECGInstructionView::InitContactGood() {
-  InitUILabel(titleLabel_, 0, 50, 466, 35, "ecg_contact_good_title", "ECG测量",
+  InitUILabel(titleLabel_, 0, 50, 466, 35, "ecg_contact_good_title", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_MEAS_TITLE); titleLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   titleLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
   InitImageView(imageView_, 55, 95, 360, 300, "ecg_contact_good", ECG_PATH_CONTACT_GOOD);
-  InitUILabel(contentLabel_, 0, 401, 466, 30, "ecg_contact_good_content", "保持手指不动",
+  InitUILabel(contentLabel_, 0, 401, 466, 30, "ecg_contact_good_content", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_KEEP_FINGER_STILL); contentLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   contentLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
   auto *dragListener = static_cast<UIView::OnDragListener *>(ECGMainPresenter::GetInstance());
index 23feedb..7661448 100644 (file)
@@ -1,5 +1,6 @@
 #include "ecg/include/ECGMeasureCompleteView.h"
 #include "common/image_cache_manager.h"
+#include "ui_resource_string.h"
 #include "uicomponents/UIComponents.h"
 #include "wearable_log.h"
 
@@ -135,7 +136,8 @@ UIViewGroup *ECGMeasureCompleteView::InitView() {
     group_->Add(animatorView_);
   }
   InitUILabel(noteLabel_, 0, ECG_COMPLETE_ANIM_Y + ECG_COMPLETE_ANIM_H + 20, 466, 35,
-              "ecg_complete_note", "正在分析数据...", DEFAULT_VECTOR_FONT_FILENAME, 30);
+              "ecg_complete_note", "", DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_ANALYZING); noteLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   noteLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
   group_->Add(noteLabel_);
   return group_;
index 641223c..041d14e 100644 (file)
@@ -3,6 +3,7 @@
 #include "ecg/include/ECGModel.h"
 #include "ecg/include/ECGEntryView.h"
 #include "ecg/include/ECGViewClickIds.h"
+#include "ui_resource_string.h"
 #include "uicomponents/UIComponents.h"
 
 namespace OHOS {
@@ -100,21 +101,25 @@ UIViewGroup *ECGMeasureResultView::InitView() {
   bpmValueLabel_->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
 
   InitUILabel(bpmUnitLabel_, ECG_BPM_X + ECG_BPM_W_TWO_DIGIT + ECG_BPM_UNIT_GAP, ECG_BPM_UNIT_Y, 72, 30,
-              "ecg_result_bpm_unit", "次/分", DEFAULT_VECTOR_FONT_FILENAME, 30);
+              "ecg_result_bpm_unit", "", DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_TIMES_PER_MIN); bpmUnitLabel_->SetText(_uiStrTmp.GetText()); } while(0);
 
   bpmUnitLabel_->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));
   bpmUnitLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
-  InitUILabel(resultLabel_, 0, 50, 466, 35, "ecg_result_type", "窦性心律",
+  InitUILabel(resultLabel_, 0, 50, 466, 35, "ecg_result_type", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_SINUS_RHYTHM); resultLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   resultLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
-  InitUILabel(noteLabel_, 0, 412, 466, 35, "ecg_result_note", "测量结果仅供参考",
+  InitUILabel(noteLabel_, 0, 412, 466, 35, "ecg_result_note", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_BP_RESULT_REF); noteLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   noteLabel_->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));
   noteLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
-  InitLabelButton(confirmButton_, 93, 304, 280, 90, ECG_CLICK_CONFIRM, "重新测量", 30);
+  InitLabelButton(confirmButton_, 93, 304, 280, 90, ECG_CLICK_CONFIRM, "", 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_RE_MEAS); confirmButton_->SetText(_uiStrTmp.GetText()); } while(0);
   confirmButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
   confirmButton_->SetStyle(STYLE_BORDER_RADIUS, 45);
   confirmButton_->SetOnClickListener(static_cast<UIView::OnClickListener *>(ECGMainPresenter::GetInstance()));
index 8388910..e39b2d6 100644 (file)
@@ -1,6 +1,7 @@
 #include "ecg/include/ECGMeasuringView.h"
 #include "ecg/include/ECGMainPresenter.h"
 #include "ecg/include/ECGViewClickIds.h"
+#include "ui_resource_string.h"
 #include "uicomponents/UIComponents.h"
 #include "wearable_log.h"
 
@@ -185,8 +186,9 @@ UIViewGroup *ECGMeasuringView::InitView() {
   group_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
   group_->SetOnDragListener(static_cast<UIView::OnDragListener *>(ECGMainPresenter::GetInstance()));
 
-  InitUILabel(titleLabel_, 0, 50, 466, 35, "ecg_measuring_title", "ECG",
+  InitUILabel(titleLabel_, 0, 50, 466, 35, "ecg_measuring_title", "",
               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG); titleLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   titleLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
   InitChart();
@@ -198,8 +200,9 @@ UIViewGroup *ECGMeasuringView::InitView() {
               DEFAULT_VECTOR_FONT_FILENAME, 40);
   countdownLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
-  InitUILabel(hintLabel_, 53, 360, 360, 35, "ecg_measuring_hint",
-              "请保持手指接触电极", DEFAULT_VECTOR_FONT_FILENAME, 26);
+  InitUILabel(hintLabel_, 53, 360, 360, 35, "ecg_measuring_hint", "",
+              DEFAULT_VECTOR_FONT_FILENAME, 26);
+  do { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_FINGER_CONTACT); hintLabel_->SetText(_uiStrTmp.GetText()); } while(0);
   hintLabel_->SetTextColor(Color::GetColorFromRGBA(0xff, 0x3a, 0x3a, 0xff));
   hintLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
index 684167a..31fc5a2 100644 (file)
@@ -1,7 +1,9 @@
 #include "ecg/include/ECGModel.h"
+#include "components/ui_label_ext.h"
 #include "custom_utils.h"
 #include "kv_store.h"
 #include "securec.h"
+#include "ui_resource_string.h"
 #include "wearable_log.h"
 #include <cstdio>
 #include <ctime>
@@ -158,19 +160,19 @@ ECGResultType ECGModel::MapAfibToResultType(uint8_t afibResult) const {
 std::string ECGModel::GetAfibResultText(uint8_t afibResult) const {
   switch (afibResult) {
     case 0:
-      return "窦性心律";
+      return ([]() { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_SINUS_RHYTHM); return std::string(_uiStrTmp.GetText()); }());
     case 1:
-      return "不确定(不规则)";
+      return ([]() { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_IRREGULAR); return std::string(_uiStrTmp.GetText()); }());
     case 2:
-      return "可能房颤";
+      return ([]() { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_AFIB_POSSIBLE); return std::string(_uiStrTmp.GetText()); }());
     case 3:
-      return "不确定(信号/特征)";
+      return ([]() { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_SIGNAL_INCONCLUSIVE); return std::string(_uiStrTmp.GetText()); }());
     case 4:
-      return "心率过低";
+      return ([]() { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_HR_TOO_LOW); return std::string(_uiStrTmp.GetText()); }());
     case 5:
-      return "心率过高";
+      return ([]() { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_HR_TOO_HIGH); return std::string(_uiStrTmp.GetText()); }());
     default:
-      return "不确定";
+      return ([]() { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_INCONCLUSIVE); return std::string(_uiStrTmp.GetText()); }());
   }
 }
 
@@ -181,12 +183,12 @@ ColorType ECGModel::GetAfibResultColor(uint8_t afibResult) const {
 std::string ECGModel::GetResultText(ECGResultType type) const {
   switch (type) {
     case ECGResultType::SINUS_RHYTHM:
-      return "窦性心律";
+      return ([]() { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_SINUS_RHYTHM); return std::string(_uiStrTmp.GetText()); }());
     case ECGResultType::ATRIAL_FIBRILLATION:
-      return "可能房颤";
+      return ([]() { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_AFIB_POSSIBLE); return std::string(_uiStrTmp.GetText()); }());
     case ECGResultType::INCONCLUSIVE:
     default:
-      return "不确定";
+      return ([]() { UILabelExt _uiStrTmp; _uiStrTmp.SetTextId(STR_ECG_INCONCLUSIVE); return std::string(_uiStrTmp.GetText()); }());
   }
 }
 
index c64b00b..3d34309 100644 (file)
Binary files a/code/sdk/files/n9/fs/user/res/font/en.lang and b/code/sdk/files/n9/fs/user/res/font/en.lang differ
index fb3489c..e95e27d 100644 (file)
@@ -741,7 +741,86 @@ enum UIResourceTextId : uint16_t {
     STR_STRESS_WARNING = 728,\r
     STR_STRESS_NORMAL = 729,\r
     STR_STRESS_EXCELLENT = 730,\r
-    STR_MAX_ID = 731,\r
+    STR_HRV_LAST_NIGHT_AVG  = 731,\r
+    STR_HRV_BASELINE  = 732,\r
+    STR_HRV_7DAY_AVG  = 733,\r
+    STR_HRV_BALANCED  = 734,\r
+    STR_HRV_UNBALANCED  = 735,\r
+    STR_HRV_TOO_LOW  = 736,\r
+    STR_BP_MEAS_SUCCESS = 737,\r
+    STR_BP_NORMAL_RANGE = 738,\r
+    STR_BP_ELEVATED_ATTN = 739,\r
+    STR_BP_CALIB_EXPIRED = 740,\r
+    STR_BP_INPUT_METER_VALUE = 741,\r
+    STR_BP_CONFIRM_INPUT = 742,\r
+    STR_BP_SBP_GT_DBP = 743,\r
+    STR_BP_MODIFY = 744,\r
+    STR_BP_MEAS_GUIDE = 745,\r
+    STR_BP_MEASURE_NOW = 746,\r
+    STR_BP_PREMEASURE_NOTE = 747,\r
+    STR_BP_TREND_REF_ONLY = 748,\r
+    STR_BP_COMPLETE_CALIB_FIRST = 749,\r
+    STR_BP_NOT_CALIBRATED = 750,\r
+    STR_BP_CALIB_EXPIRING_D = 751,\r
+    STR_BP_INSTR_SEAT = 752,\r
+    STR_BP_INSTR_WEAR = 753,\r
+    STR_BP_INSTR_BELT_LOOSE = 754,\r
+    STR_BP_INSTR_CALIB1 = 755,\r
+    STR_BP_INSTR_CALIB2 = 756,\r
+    STR_BP_START = 757,\r
+    STR_BP_ABORT_MEAS = 758,\r
+    STR_BP_ABORT_CALIB = 759,\r
+    STR_BP_ABORT_MEAS_NOTE = 760,\r
+    STR_BP_ABORT_CALIB_NOTE = 761,\r
+    STR_BP_CALIB_ROUND1 = 762,\r
+    STR_BP_CALIB_ROUND2 = 763,\r
+    STR_BP_KEEP_STILL = 764,\r
+    STR_BP_VALID_UNTIL = 765,\r
+    STR_BP_VALID_UNTIL_NA = 766,\r
+    STR_BP_CALIB_UPLOADED = 767,\r
+    STR_BP_ROUND1_DONE = 768,\r
+    STR_BP_ROUND2_PREP = 769,\r
+    STR_BP_FOLLOW_HINT = 770,\r
+    STR_BP_NEED_CALIB_FIRST = 771,\r
+    STR_BP_PREP_SPHYGM = 772,\r
+    STR_BP_TIP = 773,\r
+    STR_BP_ARM_MOVED = 774,\r
+    STR_BP_WEAK_SIGNAL = 775,\r
+    STR_BP_DIFF_TOO_LARGE = 776,\r
+    STR_BP_DIFF_LARGE_NOTE = 777,\r
+    STR_BP_RESULT_REF = 778,\r
+    STR_BP_NOT_MEDICAL = 779,\r
+    STR_BP_AGREE_CONTINUE = 780,\r
+    STR_BP_LATEST_RECORD = 781,\r
+    STR_BP_VIEW_HISTORY = 782,\r
+    STR_BP_RECENT_RECORD = 783,\r
+    STR_BP_APP_FULL_RECORD = 784,\r
+    STR_BP_WATCH_RECENT_ONLY = 785,\r
+    STR_BP_NO_MEAS_RECORD = 786,\r
+    STR_BP_EMPTY_HIST_HINT = 787,\r
+    STR_ECG_MEAS_TITLE = 788,\r
+    STR_ECG_ENTRY_NOTE = 789,\r
+    STR_ECG_DISCLAIMER = 790,\r
+    STR_ECG_CONSULT_DOC = 791,\r
+    STR_ECG_FINGER_ELECTRODE = 792,\r
+    STR_ECG_KEEP_FINGER_STILL = 793,\r
+    STR_ECG_FINGER_CONTACT = 794,\r
+    STR_ECG_ANALYZING = 795,\r
+    STR_ECG_CONTACT_ABNORMAL = 796,\r
+    STR_ECG_EXIT = 797,\r
+    STR_ECG_VIEW_ALL = 798,\r
+    STR_ECG_MEAS_RECORD = 799,\r
+    STR_ECG_SINUS_RHYTHM = 800,\r
+    STR_ECG_AFIB_POSSIBLE = 801,\r
+    STR_ECG_INCONCLUSIVE = 802,\r
+    STR_ECG_AFIB = 803,\r
+    STR_ECG_HR_TOO_LOW = 804,\r
+    STR_ECG_HR_TOO_HIGH = 805,\r
+    STR_ECG_IRREGULAR = 806,\r
+    STR_ECG_SIGNAL_INCONCLUSIVE = 807,\r
+    STR_ECG_BPM_FORMAT = 808,\r
+    STR_ECG_BPM_NA = 809,\r
+    STR_MAX_ID = 810,\r
 }; // UIResourceTextId\r
 
 enum FontLanguageId : uint8_t {
index 7f75354..a38db97 100644 (file)
Binary files a/code/sdk/files/n9/fs/user/res/font/zh.lang and b/code/sdk/files/n9/fs/user/res/font/zh.lang differ
index a340900..3d4f8e1 100644 (file)
@@ -736,4 +736,77 @@ STR_HRV_BASELINE $Baseline:65-85ms
 STR_HRV_7DAY_AVG $7-Day Average HRV\r
 STR_HRV_BALANCED $Balanced\r
 STR_HRV_UNBALANCED $Unbalanced\r
-STR_HRV_TOO_LOW $Too Low
\ No newline at end of file
+STR_HRV_TOO_LOW $Too Low\r
+STR_BP_MEAS_SUCCESS$Measurement successful\r
+STR_BP_NORMAL_RANGE$Blood pressure is in the normal range\r
+STR_BP_ELEVATED_ATTN$Blood pressure is elevated, please pay attention\r
+STR_BP_CALIB_EXPIRED$Calibration expired\r
+STR_BP_INPUT_METER_VALUE$Enter cuff reading\r
+STR_BP_CONFIRM_INPUT$Confirm entered values\r
+STR_BP_SBP_GT_DBP$Systolic pressure should be higher than diastolic\r
+STR_BP_MODIFY$Edit\r
+STR_BP_MEAS_GUIDE$Measurement guide\r
+STR_BP_MEASURE_NOW$Measure now\r
+STR_BP_PREMEASURE_NOTE$Avoid strenuous exercise, coffee,and smoking 30 minutes before measuring\r
+STR_BP_TREND_REF_ONLY$Continued readings are fortrend reference only\r
+STR_BP_COMPLETE_CALIB_FIRST$Please complete calibration first\r
+STR_BP_NOT_CALIBRATED$Not calibrated\r
+STR_BP_CALIB_EXPIRING_D$Calibration expiring in %d days\r
+STR_BP_INSTR_SEAT$Sit upright with both feet on the floor.Place both forearms on the table, palms up.\r
+STR_BP_INSTR_WEAR$Leave one finger width between watch and wrist.Wear the watch snugly.\r
+STR_BP_INSTR_BELT_LOOSE$Watch band is too loose.Adjust tightness and try again.\r
+STR_BP_INSTR_CALIB1$Sit upright with your arm on the table.Keep the watch at heart level.\r
+STR_BP_INSTR_CALIB2$Measure the same arm in the same posture.Start calibration when ready.\r
+STR_BP_START$Start\r
+STR_BP_ABORT_MEAS$Stop measurement\r
+STR_BP_ABORT_CALIB$Stop calibration\r
+STR_BP_ABORT_MEAS_NOTE$Stop the current blood pressure measurement?This session will be canceled.\r
+STR_BP_ABORT_CALIB_NOTE$Stop the current calibration?This calibration data will be discarded.\r
+STR_BP_CALIB_ROUND1$Calibration round 1\r
+STR_BP_CALIB_ROUND2$Calibration round 2\r
+STR_BP_KEEP_STILL$Please keep still\r
+STR_BP_VALID_UNTIL$Valid until: %s\r
+STR_BP_VALID_UNTIL_NA$Valid until: ----\r
+STR_BP_CALIB_UPLOADED$Calibration result uploaded.Recalibrate after 30 days.\r
+STR_BP_ROUND1_DONE$Round 1 calibration complete\r
+STR_BP_ROUND2_PREP$Prepare for round 2 calibration.Measure the same arm againwith a traditional cuff.\r
+STR_BP_FOLLOW_HINT$Please follow the instructions\r
+STR_BP_NEED_CALIB_FIRST$Calibration required first\r
+STR_BP_PREP_SPHYGM$Prepare a traditional blood pressure monitor.It takes about 5 minutes.\r
+STR_BP_TIP$Notice\r
+STR_BP_ARM_MOVED$Arm movement detected.Keep still and try again.\r
+STR_BP_WEAK_SIGNAL$No valid signal detected.Adjust wearing and try again.\r
+STR_BP_DIFF_TOO_LARGE$Two readings differ too much\r
+STR_BP_DIFF_LARGE_NOTE$Large difference detected between two readings.Recalibration is recommended.\r
+STR_BP_RESULT_REF$Results are for reference only\r
+STR_BP_NOT_MEDICAL$Not a substitute for professional diagnosis.Consult a doctor if you have concerns.\r
+STR_BP_AGREE_CONTINUE$Agree and continue\r
+STR_BP_LATEST_RECORD$Latest record\r
+STR_BP_VIEW_HISTORY$View history\r
+STR_BP_RECENT_RECORD$Recent record\r
+STR_BP_APP_FULL_RECORD$View full blood pressure history in the app\r
+STR_BP_WATCH_RECENT_ONLY$Watch keeps recent records only\r
+STR_BP_NO_MEAS_RECORD$No measurement records\r
+STR_BP_EMPTY_HIST_HINT$After your first measurement,you can view records here\r
+STR_ECG_MEAS_TITLE$ECG measurement\r
+STR_ECG_ENTRY_NOTE$Keep fingertips clean and moist\r
+STR_ECG_DISCLAIMER$ECG results are for health reference onlyand cannot replace professional diagnosis\r
+STR_ECG_CONSULT_DOC$Consult a doctor if you have heart-related concerns\r
+STR_ECG_FINGER_ELECTRODE$Place your finger on the electrode\r
+STR_ECG_KEEP_FINGER_STILL$Keep your finger still\r
+STR_ECG_FINGER_CONTACT$Keep your finger on the electrode\r
+STR_ECG_ANALYZING$Analyzing data...\r
+STR_ECG_CONTACT_ABNORMAL$Contact error. Make sure your fingertouches the electrode and retry.\r
+STR_ECG_EXIT$Exit\r
+STR_ECG_VIEW_ALL$View all\r
+STR_ECG_MEAS_RECORD$Measurement records\r
+STR_ECG_SINUS_RHYTHM$Sinus rhythm\r
+STR_ECG_AFIB_POSSIBLE$Possible atrial fibrillation\r
+STR_ECG_INCONCLUSIVE$Inconclusive\r
+STR_ECG_AFIB$Atrial fibrillation\r
+STR_ECG_HR_TOO_LOW$Heart rate too low\r
+STR_ECG_HR_TOO_HIGH$Heart rate too high\r
+STR_ECG_IRREGULAR$Inconclusive (irregular)\r
+STR_ECG_SIGNAL_INCONCLUSIVE$Inconclusive (signal/feature)\r
+STR_ECG_BPM_FORMAT$%d bpm\r
+STR_ECG_BPM_NA$-- bpm
\ No newline at end of file
index 0e59039..0bdd05d 100644 (file)
@@ -621,7 +621,7 @@ STR_HEART_AVAILABLE$暂无检测数据
 STR_HEART_JUST$XX次/分 刚刚检测\r
 STR_HEART_MIN_AGO$XX次/分 XX分钟前\r
 STR_HEART_HOUR_AGO$XX次/分 超过一个小时前\r
-STR_RECORDS_20$注:只保留最近20条通话记录\n在通话记录上长按可删除\r
+STR_RECORDS_20$注:只保留最近20条通话记录在通话记录上长按可删除\r
 STR_RECORDS_NOTE$是否永久删除该条记录\r
 STR_RECORDS_DELETE$删除记录\r
 STR_NEW_INCOM$新来电\r
@@ -736,4 +736,77 @@ STR_HRV_BASELINE $基准线65-85ms
 STR_HRV_7DAY_AVG $7天平均 HRV\r
 STR_HRV_BALANCED $平衡\r
 STR_HRV_UNBALANCED $不平衡\r
-STR_HRV_TOO_LOW $过低
\ No newline at end of file
+STR_HRV_TOO_LOW $过低\r
+STR_BP_MEAS_SUCCESS$测量成功\r
+STR_BP_NORMAL_RANGE$血压处于正常范围\r
+STR_BP_ELEVATED_ATTN$血压偏高,请关注\r
+STR_BP_CALIB_EXPIRED$校准已过期\r
+STR_BP_INPUT_METER_VALUE$输入血压计值\r
+STR_BP_CONFIRM_INPUT$确认输入值\r
+STR_BP_SBP_GT_DBP$收缩压应大于舒张压\r
+STR_BP_MODIFY$修改\r
+STR_BP_MEAS_GUIDE$测量说明\r
+STR_BP_MEASURE_NOW$马上测量\r
+STR_BP_PREMEASURE_NOTE$测量前30分钟请避免剧烈运动、咖啡和烟酒\r
+STR_BP_TREND_REF_ONLY$继续测量的数据仅供趋势参考\r
+STR_BP_COMPLETE_CALIB_FIRST$请先完成校准\r
+STR_BP_NOT_CALIBRATED$未校准\r
+STR_BP_CALIB_EXPIRING_D$校准即将过期·剩%d天\r
+STR_BP_INSTR_SEAT$双脚着地,端坐在椅子上双手手背朝上,手臂平放在桌子上\r
+STR_BP_INSTR_WEAR$手表和手腕之间仅限一指距离偏紧佩戴手表\r
+STR_BP_INSTR_BELT_LOOSE$表带过松请调整松紧后重试\r
+STR_BP_INSTR_CALIB1$坐姿端正,手臂平放桌面手表与心脏同高\r
+STR_BP_INSTR_CALIB2$测量同一只手,保持相同姿势准备完成后开始校准\r
+STR_BP_START$开始\r
+STR_BP_ABORT_MEAS$中止测量\r
+STR_BP_ABORT_CALIB$中止校准\r
+STR_BP_ABORT_MEAS_NOTE$是否中止当前血压测量本次测量将取消\r
+STR_BP_ABORT_CALIB_NOTE$是否中止当前血压校准本次校准数据将丢弃\r
+STR_BP_CALIB_ROUND1$第1轮校准中\r
+STR_BP_CALIB_ROUND2$第2轮校准中\r
+STR_BP_KEEP_STILL$请保持静止\r
+STR_BP_VALID_UNTIL$有效期至:%s\r
+STR_BP_VALID_UNTIL_NA$有效期至:----\r
+STR_BP_CALIB_UPLOADED$校准结果已上传30天后可重新校准\r
+STR_BP_ROUND1_DONE$第1轮校准完成\r
+STR_BP_ROUND2_PREP$请准备开始第2轮校准请再次使用传统血压计测量同一只手\r
+STR_BP_FOLLOW_HINT$请根据提示进行操作\r
+STR_BP_NEED_CALIB_FIRST$需先完成校准\r
+STR_BP_PREP_SPHYGM$请准备传统血压计约需5分钟\r
+STR_BP_TIP$提示\r
+STR_BP_ARM_MOVED$检测到手臂移动请保持静止后重试\r
+STR_BP_WEAK_SIGNAL$未能获取有效信号请调整佩戴后重试\r
+STR_BP_DIFF_TOO_LARGE$两次偏差过大\r
+STR_BP_DIFF_LARGE_NOTE$检测到两次偏差较大建议重新校准\r
+STR_BP_RESULT_REF$测量结果仅供参考\r
+STR_BP_NOT_MEDICAL$不可替代专业医疗诊断如有健康疑虑,请咨询医生\r
+STR_BP_AGREE_CONTINUE$同意并继续\r
+STR_BP_LATEST_RECORD$最新记录\r
+STR_BP_VIEW_HISTORY$查看历史\r
+STR_BP_RECENT_RECORD$最近记录\r
+STR_BP_APP_FULL_RECORD$在APP中查看完整血压记录\r
+STR_BP_WATCH_RECENT_ONLY$手表仅保留最近记录\r
+STR_BP_NO_MEAS_RECORD$暂无测量记录\r
+STR_BP_EMPTY_HIST_HINT$完成一次测量后可在这里查看记录\r
+STR_ECG_MEAS_TITLE$ECG测量\r
+STR_ECG_ENTRY_NOTE$保持指尖清洁湿润\r
+STR_ECG_DISCLAIMER$ECG 测量结果仅供健康参考不可替代专业医疗诊断\r
+STR_ECG_CONSULT_DOC$如有心脏相关疑虑,请咨询医生\r
+STR_ECG_FINGER_ELECTRODE$将手指放在电极上\r
+STR_ECG_KEEP_FINGER_STILL$保持手指不动\r
+STR_ECG_FINGER_CONTACT$请保持手指接触电极\r
+STR_ECG_ANALYZING$正在分析数据...\r
+STR_ECG_CONTACT_ABNORMAL$接触异常,请确保手指触摸电极后重试\r
+STR_ECG_EXIT$退出\r
+STR_ECG_VIEW_ALL$查看全部\r
+STR_ECG_MEAS_RECORD$测量记录\r
+STR_ECG_SINUS_RHYTHM$窦性心律\r
+STR_ECG_AFIB_POSSIBLE$可能房颤\r
+STR_ECG_INCONCLUSIVE$不确定\r
+STR_ECG_AFIB$房颤\r
+STR_ECG_HR_TOO_LOW$心率过低\r
+STR_ECG_HR_TOO_HIGH$心率过高\r
+STR_ECG_IRREGULAR$不确定(不规则)\r
+STR_ECG_SIGNAL_INCONCLUSIVE$不确定(信号/特征)\r
+STR_ECG_BPM_FORMAT$%d 次/分\r
+STR_ECG_BPM_NA$-- 次/分
\ No newline at end of file
index 0849ea3..7d66e7e 100644 (file)
Binary files a/tools/language_tool/Language_xml/language_custom.xlsx and b/tools/language_tool/Language_xml/language_custom.xlsx differ
index 27a0c35..e96f839 100644 (file)
        <lanstr id="STR_HRV_BALANCED " value="Balanced"/>
        <lanstr id="STR_HRV_UNBALANCED " value="Unbalanced"/>
        <lanstr id="STR_HRV_TOO_LOW " value="Too Low"/>
+       <lanstr id="STR_BP_MEAS_SUCCESS" value="Measurement successful"/>
+       <lanstr id="STR_BP_NORMAL_RANGE" value="Blood pressure is in the normal range"/>
+       <lanstr id="STR_BP_ELEVATED_ATTN" value="Blood pressure is elevated, please pay attention"/>
+       <lanstr id="STR_BP_CALIB_EXPIRED" value="Calibration expired"/>
+       <lanstr id="STR_BP_INPUT_METER_VALUE" value="Enter cuff reading"/>
+       <lanstr id="STR_BP_CONFIRM_INPUT" value="Confirm entered values"/>
+       <lanstr id="STR_BP_SBP_GT_DBP" value="Systolic pressure should be higher than diastolic"/>
+       <lanstr id="STR_BP_MODIFY" value="Edit"/>
+       <lanstr id="STR_BP_MEAS_GUIDE" value="Measurement guide"/>
+       <lanstr id="STR_BP_MEASURE_NOW" value="Measure now"/>
+       <lanstr id="STR_BP_PREMEASURE_NOTE" value="Avoid strenuous exercise, coffee,and smoking 30 minutes before measuring"/>
+       <lanstr id="STR_BP_TREND_REF_ONLY" value="Continued readings are fortrend reference only"/>
+       <lanstr id="STR_BP_COMPLETE_CALIB_FIRST" value="Please complete calibration first"/>
+       <lanstr id="STR_BP_NOT_CALIBRATED" value="Not calibrated"/>
+       <lanstr id="STR_BP_CALIB_EXPIRING_D" value="Calibration expiring in %d days"/>
+       <lanstr id="STR_BP_INSTR_SEAT" value="Sit upright with both feet on the floor.Place both forearms on the table, palms up."/>
+       <lanstr id="STR_BP_INSTR_WEAR" value="Leave one finger width between watch and wrist.Wear the watch snugly."/>
+       <lanstr id="STR_BP_INSTR_BELT_LOOSE" value="Watch band is too loose.Adjust tightness and try again."/>
+       <lanstr id="STR_BP_INSTR_CALIB1" value="Sit upright with your arm on the table.Keep the watch at heart level."/>
+       <lanstr id="STR_BP_INSTR_CALIB2" value="Measure the same arm in the same posture.Start calibration when ready."/>
+       <lanstr id="STR_BP_START" value="Start"/>
+       <lanstr id="STR_BP_ABORT_MEAS" value="Stop measurement"/>
+       <lanstr id="STR_BP_ABORT_CALIB" value="Stop calibration"/>
+       <lanstr id="STR_BP_ABORT_MEAS_NOTE" value="Stop the current blood pressure measurement?This session will be canceled."/>
+       <lanstr id="STR_BP_ABORT_CALIB_NOTE" value="Stop the current calibration?This calibration data will be discarded."/>
+       <lanstr id="STR_BP_CALIB_ROUND1" value="Calibration round 1"/>
+       <lanstr id="STR_BP_CALIB_ROUND2" value="Calibration round 2"/>
+       <lanstr id="STR_BP_KEEP_STILL" value="Please keep still"/>
+       <lanstr id="STR_BP_VALID_UNTIL" value="Valid until: %s"/>
+       <lanstr id="STR_BP_VALID_UNTIL_NA" value="Valid until: ----"/>
+       <lanstr id="STR_BP_CALIB_UPLOADED" value="Calibration result uploaded.Recalibrate after 30 days."/>
+       <lanstr id="STR_BP_ROUND1_DONE" value="Round 1 calibration complete"/>
+       <lanstr id="STR_BP_ROUND2_PREP" value="Prepare for round 2 calibration.Measure the same arm againwith a traditional cuff."/>
+       <lanstr id="STR_BP_FOLLOW_HINT" value="Please follow the instructions"/>
+       <lanstr id="STR_BP_NEED_CALIB_FIRST" value="Calibration required first"/>
+       <lanstr id="STR_BP_PREP_SPHYGM" value="Prepare a traditional blood pressure monitor.It takes about 5 minutes."/>
+       <lanstr id="STR_BP_TIP" value="Notice"/>
+       <lanstr id="STR_BP_ARM_MOVED" value="Arm movement detected.Keep still and try again."/>
+       <lanstr id="STR_BP_WEAK_SIGNAL" value="No valid signal detected.Adjust wearing and try again."/>
+       <lanstr id="STR_BP_DIFF_TOO_LARGE" value="Two readings differ too much"/>
+       <lanstr id="STR_BP_DIFF_LARGE_NOTE" value="Large difference detected between two readings.Recalibration is recommended."/>
+       <lanstr id="STR_BP_RESULT_REF" value="Results are for reference only"/>
+       <lanstr id="STR_BP_NOT_MEDICAL" value="Not a substitute for professional diagnosis.Consult a doctor if you have concerns."/>
+       <lanstr id="STR_BP_AGREE_CONTINUE" value="Agree and continue"/>
+       <lanstr id="STR_BP_LATEST_RECORD" value="Latest record"/>
+       <lanstr id="STR_BP_VIEW_HISTORY" value="View history"/>
+       <lanstr id="STR_BP_RECENT_RECORD" value="Recent record"/>
+       <lanstr id="STR_BP_APP_FULL_RECORD" value="View full blood pressure history in the app"/>
+       <lanstr id="STR_BP_WATCH_RECENT_ONLY" value="Watch keeps recent records only"/>
+       <lanstr id="STR_BP_NO_MEAS_RECORD" value="No measurement records"/>
+       <lanstr id="STR_BP_EMPTY_HIST_HINT" value="After your first measurement,you can view records here"/>
+       <lanstr id="STR_ECG_MEAS_TITLE" value="ECG measurement"/>
+       <lanstr id="STR_ECG_ENTRY_NOTE" value="Keep fingertips clean and moist"/>
+       <lanstr id="STR_ECG_DISCLAIMER" value="ECG results are for health reference onlyand cannot replace professional diagnosis"/>
+       <lanstr id="STR_ECG_CONSULT_DOC" value="Consult a doctor if you have heart-related concerns"/>
+       <lanstr id="STR_ECG_FINGER_ELECTRODE" value="Place your finger on the electrode"/>
+       <lanstr id="STR_ECG_KEEP_FINGER_STILL" value="Keep your finger still"/>
+       <lanstr id="STR_ECG_FINGER_CONTACT" value="Keep your finger on the electrode"/>
+       <lanstr id="STR_ECG_ANALYZING" value="Analyzing data..."/>
+       <lanstr id="STR_ECG_CONTACT_ABNORMAL" value="Contact error. Make sure your fingertouches the electrode and retry."/>
+       <lanstr id="STR_ECG_EXIT" value="Exit"/>
+       <lanstr id="STR_ECG_VIEW_ALL" value="View all"/>
+       <lanstr id="STR_ECG_MEAS_RECORD" value="Measurement records"/>
+       <lanstr id="STR_ECG_SINUS_RHYTHM" value="Sinus rhythm"/>
+       <lanstr id="STR_ECG_AFIB_POSSIBLE" value="Possible atrial fibrillation"/>
+       <lanstr id="STR_ECG_INCONCLUSIVE" value="Inconclusive"/>
+       <lanstr id="STR_ECG_AFIB" value="Atrial fibrillation"/>
+       <lanstr id="STR_ECG_HR_TOO_LOW" value="Heart rate too low"/>
+       <lanstr id="STR_ECG_HR_TOO_HIGH" value="Heart rate too high"/>
+       <lanstr id="STR_ECG_IRREGULAR" value="Inconclusive (irregular)"/>
+       <lanstr id="STR_ECG_SIGNAL_INCONCLUSIVE" value="Inconclusive (signal/feature)"/>
+       <lanstr id="STR_ECG_BPM_FORMAT" value="%d bpm"/>
+       <lanstr id="STR_ECG_BPM_NA" value="-- bpm"/>
 </language>
index 8a1e0b3..14382e6 100644 (file)
        <lanstr id="STR_HEART_JUST" value="XX次/分 刚刚检测"/>
        <lanstr id="STR_HEART_MIN_AGO" value="XX次/分 XX分钟前"/>
        <lanstr id="STR_HEART_HOUR_AGO" value="XX次/分 超过一个小时前"/>
-       <lanstr id="STR_RECORDS_20" value="注:只保留最近20条通话记录\n在通话记录上长按可删除"/>
+       <lanstr id="STR_RECORDS_20" value="注:只保留最近20条通话记录在通话记录上长按可删除"/>
        <lanstr id="STR_RECORDS_NOTE" value="是否永久删除该条记录"/>
        <lanstr id="STR_RECORDS_DELETE" value="删除记录"/>
        <lanstr id="STR_NEW_INCOM" value="新来电"/>
        <lanstr id="STR_HRV_BALANCED " value="平衡"/>
        <lanstr id="STR_HRV_UNBALANCED " value="不平衡"/>
        <lanstr id="STR_HRV_TOO_LOW " value="过低"/>
+       <lanstr id="STR_BP_MEAS_SUCCESS" value="测量成功"/>
+       <lanstr id="STR_BP_NORMAL_RANGE" value="血压处于正常范围"/>
+       <lanstr id="STR_BP_ELEVATED_ATTN" value="血压偏高,请关注"/>
+       <lanstr id="STR_BP_CALIB_EXPIRED" value="校准已过期"/>
+       <lanstr id="STR_BP_INPUT_METER_VALUE" value="输入血压计值"/>
+       <lanstr id="STR_BP_CONFIRM_INPUT" value="确认输入值"/>
+       <lanstr id="STR_BP_SBP_GT_DBP" value="收缩压应大于舒张压"/>
+       <lanstr id="STR_BP_MODIFY" value="修改"/>
+       <lanstr id="STR_BP_MEAS_GUIDE" value="测量说明"/>
+       <lanstr id="STR_BP_MEASURE_NOW" value="马上测量"/>
+       <lanstr id="STR_BP_PREMEASURE_NOTE" value="测量前30分钟请避免剧烈运动、咖啡和烟酒"/>
+       <lanstr id="STR_BP_TREND_REF_ONLY" value="继续测量的数据仅供趋势参考"/>
+       <lanstr id="STR_BP_COMPLETE_CALIB_FIRST" value="请先完成校准"/>
+       <lanstr id="STR_BP_NOT_CALIBRATED" value="未校准"/>
+       <lanstr id="STR_BP_CALIB_EXPIRING_D" value="校准即将过期·剩%d天"/>
+       <lanstr id="STR_BP_INSTR_SEAT" value="双脚着地,端坐在椅子上双手手背朝上,手臂平放在桌子上"/>
+       <lanstr id="STR_BP_INSTR_WEAR" value="手表和手腕之间仅限一指距离偏紧佩戴手表"/>
+       <lanstr id="STR_BP_INSTR_BELT_LOOSE" value="表带过松请调整松紧后重试"/>
+       <lanstr id="STR_BP_INSTR_CALIB1" value="坐姿端正,手臂平放桌面手表与心脏同高"/>
+       <lanstr id="STR_BP_INSTR_CALIB2" value="测量同一只手,保持相同姿势准备完成后开始校准"/>
+       <lanstr id="STR_BP_START" value="开始"/>
+       <lanstr id="STR_BP_ABORT_MEAS" value="中止测量"/>
+       <lanstr id="STR_BP_ABORT_CALIB" value="中止校准"/>
+       <lanstr id="STR_BP_ABORT_MEAS_NOTE" value="是否中止当前血压测量本次测量将取消"/>
+       <lanstr id="STR_BP_ABORT_CALIB_NOTE" value="是否中止当前血压校准本次校准数据将丢弃"/>
+       <lanstr id="STR_BP_CALIB_ROUND1" value="第1轮校准中"/>
+       <lanstr id="STR_BP_CALIB_ROUND2" value="第2轮校准中"/>
+       <lanstr id="STR_BP_KEEP_STILL" value="请保持静止"/>
+       <lanstr id="STR_BP_VALID_UNTIL" value="有效期至:%s"/>
+       <lanstr id="STR_BP_VALID_UNTIL_NA" value="有效期至:----"/>
+       <lanstr id="STR_BP_CALIB_UPLOADED" value="校准结果已上传30天后可重新校准"/>
+       <lanstr id="STR_BP_ROUND1_DONE" value="第1轮校准完成"/>
+       <lanstr id="STR_BP_ROUND2_PREP" value="请准备开始第2轮校准请再次使用传统血压计测量同一只手"/>
+       <lanstr id="STR_BP_FOLLOW_HINT" value="请根据提示进行操作"/>
+       <lanstr id="STR_BP_NEED_CALIB_FIRST" value="需先完成校准"/>
+       <lanstr id="STR_BP_PREP_SPHYGM" value="请准备传统血压计约需5分钟"/>
+       <lanstr id="STR_BP_TIP" value="提示"/>
+       <lanstr id="STR_BP_ARM_MOVED" value="检测到手臂移动请保持静止后重试"/>
+       <lanstr id="STR_BP_WEAK_SIGNAL" value="未能获取有效信号请调整佩戴后重试"/>
+       <lanstr id="STR_BP_DIFF_TOO_LARGE" value="两次偏差过大"/>
+       <lanstr id="STR_BP_DIFF_LARGE_NOTE" value="检测到两次偏差较大建议重新校准"/>
+       <lanstr id="STR_BP_RESULT_REF" value="测量结果仅供参考"/>
+       <lanstr id="STR_BP_NOT_MEDICAL" value="不可替代专业医疗诊断如有健康疑虑,请咨询医生"/>
+       <lanstr id="STR_BP_AGREE_CONTINUE" value="同意并继续"/>
+       <lanstr id="STR_BP_LATEST_RECORD" value="最新记录"/>
+       <lanstr id="STR_BP_VIEW_HISTORY" value="查看历史"/>
+       <lanstr id="STR_BP_RECENT_RECORD" value="最近记录"/>
+       <lanstr id="STR_BP_APP_FULL_RECORD" value="在APP中查看完整血压记录"/>
+       <lanstr id="STR_BP_WATCH_RECENT_ONLY" value="手表仅保留最近记录"/>
+       <lanstr id="STR_BP_NO_MEAS_RECORD" value="暂无测量记录"/>
+       <lanstr id="STR_BP_EMPTY_HIST_HINT" value="完成一次测量后可在这里查看记录"/>
+       <lanstr id="STR_ECG_MEAS_TITLE" value="ECG测量"/>
+       <lanstr id="STR_ECG_ENTRY_NOTE" value="保持指尖清洁湿润"/>
+       <lanstr id="STR_ECG_DISCLAIMER" value="ECG 测量结果仅供健康参考不可替代专业医疗诊断"/>
+       <lanstr id="STR_ECG_CONSULT_DOC" value="如有心脏相关疑虑,请咨询医生"/>
+       <lanstr id="STR_ECG_FINGER_ELECTRODE" value="将手指放在电极上"/>
+       <lanstr id="STR_ECG_KEEP_FINGER_STILL" value="保持手指不动"/>
+       <lanstr id="STR_ECG_FINGER_CONTACT" value="请保持手指接触电极"/>
+       <lanstr id="STR_ECG_ANALYZING" value="正在分析数据..."/>
+       <lanstr id="STR_ECG_CONTACT_ABNORMAL" value="接触异常,请确保手指触摸电极后重试"/>
+       <lanstr id="STR_ECG_EXIT" value="退出"/>
+       <lanstr id="STR_ECG_VIEW_ALL" value="查看全部"/>
+       <lanstr id="STR_ECG_MEAS_RECORD" value="测量记录"/>
+       <lanstr id="STR_ECG_SINUS_RHYTHM" value="窦性心律"/>
+       <lanstr id="STR_ECG_AFIB_POSSIBLE" value="可能房颤"/>
+       <lanstr id="STR_ECG_INCONCLUSIVE" value="不确定"/>
+       <lanstr id="STR_ECG_AFIB" value="房颤"/>
+       <lanstr id="STR_ECG_HR_TOO_LOW" value="心率过低"/>
+       <lanstr id="STR_ECG_HR_TOO_HIGH" value="心率过高"/>
+       <lanstr id="STR_ECG_IRREGULAR" value="不确定(不规则)"/>
+       <lanstr id="STR_ECG_SIGNAL_INCONCLUSIVE" value="不确定(信号/特征)"/>
+       <lanstr id="STR_ECG_BPM_FORMAT" value="%d 次/分"/>
+       <lanstr id="STR_ECG_BPM_NA" value="-- 次/分"/>
 </language>
index b5e97ad..3d34309 100644 (file)
Binary files a/tools/language_tool/font/en.lang and b/tools/language_tool/font/en.lang differ
index c95ddaa..e95e27d 100644 (file)
@@ -747,7 +747,80 @@ enum UIResourceTextId : uint16_t {
     STR_HRV_BALANCED  = 734,\r
     STR_HRV_UNBALANCED  = 735,\r
     STR_HRV_TOO_LOW  = 736,\r
-    STR_MAX_ID = 737,\r
+    STR_BP_MEAS_SUCCESS = 737,\r
+    STR_BP_NORMAL_RANGE = 738,\r
+    STR_BP_ELEVATED_ATTN = 739,\r
+    STR_BP_CALIB_EXPIRED = 740,\r
+    STR_BP_INPUT_METER_VALUE = 741,\r
+    STR_BP_CONFIRM_INPUT = 742,\r
+    STR_BP_SBP_GT_DBP = 743,\r
+    STR_BP_MODIFY = 744,\r
+    STR_BP_MEAS_GUIDE = 745,\r
+    STR_BP_MEASURE_NOW = 746,\r
+    STR_BP_PREMEASURE_NOTE = 747,\r
+    STR_BP_TREND_REF_ONLY = 748,\r
+    STR_BP_COMPLETE_CALIB_FIRST = 749,\r
+    STR_BP_NOT_CALIBRATED = 750,\r
+    STR_BP_CALIB_EXPIRING_D = 751,\r
+    STR_BP_INSTR_SEAT = 752,\r
+    STR_BP_INSTR_WEAR = 753,\r
+    STR_BP_INSTR_BELT_LOOSE = 754,\r
+    STR_BP_INSTR_CALIB1 = 755,\r
+    STR_BP_INSTR_CALIB2 = 756,\r
+    STR_BP_START = 757,\r
+    STR_BP_ABORT_MEAS = 758,\r
+    STR_BP_ABORT_CALIB = 759,\r
+    STR_BP_ABORT_MEAS_NOTE = 760,\r
+    STR_BP_ABORT_CALIB_NOTE = 761,\r
+    STR_BP_CALIB_ROUND1 = 762,\r
+    STR_BP_CALIB_ROUND2 = 763,\r
+    STR_BP_KEEP_STILL = 764,\r
+    STR_BP_VALID_UNTIL = 765,\r
+    STR_BP_VALID_UNTIL_NA = 766,\r
+    STR_BP_CALIB_UPLOADED = 767,\r
+    STR_BP_ROUND1_DONE = 768,\r
+    STR_BP_ROUND2_PREP = 769,\r
+    STR_BP_FOLLOW_HINT = 770,\r
+    STR_BP_NEED_CALIB_FIRST = 771,\r
+    STR_BP_PREP_SPHYGM = 772,\r
+    STR_BP_TIP = 773,\r
+    STR_BP_ARM_MOVED = 774,\r
+    STR_BP_WEAK_SIGNAL = 775,\r
+    STR_BP_DIFF_TOO_LARGE = 776,\r
+    STR_BP_DIFF_LARGE_NOTE = 777,\r
+    STR_BP_RESULT_REF = 778,\r
+    STR_BP_NOT_MEDICAL = 779,\r
+    STR_BP_AGREE_CONTINUE = 780,\r
+    STR_BP_LATEST_RECORD = 781,\r
+    STR_BP_VIEW_HISTORY = 782,\r
+    STR_BP_RECENT_RECORD = 783,\r
+    STR_BP_APP_FULL_RECORD = 784,\r
+    STR_BP_WATCH_RECENT_ONLY = 785,\r
+    STR_BP_NO_MEAS_RECORD = 786,\r
+    STR_BP_EMPTY_HIST_HINT = 787,\r
+    STR_ECG_MEAS_TITLE = 788,\r
+    STR_ECG_ENTRY_NOTE = 789,\r
+    STR_ECG_DISCLAIMER = 790,\r
+    STR_ECG_CONSULT_DOC = 791,\r
+    STR_ECG_FINGER_ELECTRODE = 792,\r
+    STR_ECG_KEEP_FINGER_STILL = 793,\r
+    STR_ECG_FINGER_CONTACT = 794,\r
+    STR_ECG_ANALYZING = 795,\r
+    STR_ECG_CONTACT_ABNORMAL = 796,\r
+    STR_ECG_EXIT = 797,\r
+    STR_ECG_VIEW_ALL = 798,\r
+    STR_ECG_MEAS_RECORD = 799,\r
+    STR_ECG_SINUS_RHYTHM = 800,\r
+    STR_ECG_AFIB_POSSIBLE = 801,\r
+    STR_ECG_INCONCLUSIVE = 802,\r
+    STR_ECG_AFIB = 803,\r
+    STR_ECG_HR_TOO_LOW = 804,\r
+    STR_ECG_HR_TOO_HIGH = 805,\r
+    STR_ECG_IRREGULAR = 806,\r
+    STR_ECG_SIGNAL_INCONCLUSIVE = 807,\r
+    STR_ECG_BPM_FORMAT = 808,\r
+    STR_ECG_BPM_NA = 809,\r
+    STR_MAX_ID = 810,\r
 }; // UIResourceTextId\r
 
 enum FontLanguageId : uint8_t {
index 67a43c0..a38db97 100644 (file)
Binary files a/tools/language_tool/font/zh.lang and b/tools/language_tool/font/zh.lang differ