From 43232d11c7a582d0d236bae85e15b8ef722c3bc6 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Mon, 7 Jul 2025 08:34:30 +0800 Subject: [PATCH] =?UTF-8?q?refactor(translation):=20=E5=B0=86=E7=A1=AC?= =?UTF-8?q?=E7=BC=96=E7=A0=81=E6=96=87=E6=9C=AC=E6=9B=BF=E6=8D=A2=E4=B8=BA?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E7=BF=BB=E8=AF=91=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改翻译历史、详情、列表和主视图中的硬编码文本为对应的翻译键 - 在中文翻译文件中添加缺失的翻译项 - 统一使用国际化方案管理界面文本 --- lib/core/translations/language/zh_cn.dart | 47 ++++++++++++++++++- .../views/translation_detail_view.dart | 40 ++++++++-------- .../views/translation_history_view.dart | 8 ++-- .../views/translation_list_view.dart | 28 +++++------ .../translation/views/translation_view.dart | 10 ++-- 5 files changed, 88 insertions(+), 45 deletions(-) diff --git a/lib/core/translations/language/zh_cn.dart b/lib/core/translations/language/zh_cn.dart index 43063954b..f0fa8b085 100644 --- a/lib/core/translations/language/zh_cn.dart +++ b/lib/core/translations/language/zh_cn.dart @@ -364,11 +364,54 @@ const Map zhCN = { "healthAdvisorWelcome": "您好,我是吴小江,很高兴能为您提供多功能AI聊天。我将用专业知识帮助您。请问有什么问题想咨询吗?", "healthAdvisorVoiceWelcome": "我在这里!", - // 翻译历史 + // 翻译模块 + // 翻译主页 (translation_view.dart) + "translationHistory": "翻译历史", + "enableRecording": "是否开启录音", + "viewAudioFiles": "查看录音文件", + "headsetUser": "耳机用户", + "phoneUser": "手机用户", + + // 翻译历史页 (translation_history_view.dart) "noTranslationHistory": "暂无历史记录", "clearHistory": "清除历史记录", "clearHistoryConfirm": "确定要清除所有翻译历史记录吗?此操作无法撤销。", - "translationHistory": "翻译历史", + "unknownLanguage": "未知语言", + "deleteSessionRecord": "删除会话记录", + "deleteSessionConfirm": "确定要删除该会话的所有翻译记录吗?此操作无法撤销。", + + // 翻译录音文件列表页 (translation_list_view.dart) + "translateAudioFiles": "翻译录音文件", + "noAudioFiles": "暂无音频文件", + "calculating": "计算中...", + "playing": "播放中...", + "paused": "已暂停", + "clickToPlay": "点击播放", + "rename": "重命名", + "smartTranscription": "智能转写", + "renameAudioFile": "重命名音频文件", + "enterNewFileName": "请输入新的文件名", + + // 翻译详情页 (translation_detail_view.dart) + "originalRecord": "原始记录", + "recordSummary": "记录摘要", + "clickToGenerateSummary": "点击下方按钮生成会话摘要", + "summaryContent": "摘要内容", + "copied": "已复制", + "summaryCopiledToClipboard": "摘要已复制到剪贴板", + "extractSummary": "提取摘要", + "summaryGenerated": "已生成摘要", + "generating": "生成中...", + "regenerate": "重新生成", + "summaryTimeoutMessage": "生成摘要请求超时,可能是网络问题或服务器繁忙。", + "deleteTranslationRecord": "删除翻译记录", + "deleteTranslationConfirm": "确定要删除这条翻译记录吗?此操作无法撤销。", + "originalText": "原文", + "translatedText": "译文", + "sessionSummary": "会话摘要", + "cannotShare": "无法分享", + "generateSummaryFirst": "请先生成摘要", + "translationSessionRecord": "翻译会话记录", //用户反馈页 "feedback": "用户反馈", diff --git a/lib/modules/translation/views/translation_detail_view.dart b/lib/modules/translation/views/translation_detail_view.dart index 52ad53397..fe0105f51 100644 --- a/lib/modules/translation/views/translation_detail_view.dart +++ b/lib/modules/translation/views/translation_detail_view.dart @@ -102,7 +102,7 @@ class TranslationDetailView extends GetView { children: [ Expanded( child: Obx(() => _buildTabButton( - title: '原始记录', + title: 'originalRecord'.tr, // 原始记录 isSelected: controller.selectedTabIndex.value == 0, onTap: () => controller.switchTab(0), isDarkMode: isDarkMode, @@ -112,7 +112,7 @@ class TranslationDetailView extends GetView { // SizedBox(width: 12.w), // Expanded( // child: Obx(() => _buildTabButton( - // title: '记录摘要', + // title: 'recordSummary'.tr, // 记录摘要 // isSelected: controller.selectedTabIndex.value == 1, // onTap: () => controller.switchTab(1), // isDarkMode: isDarkMode, @@ -361,7 +361,7 @@ class TranslationDetailView extends GetView { padding: EdgeInsets.all(24.r), child: Center( child: Text( - '点击下方按钮生成会话摘要', + 'clickToGenerateSummary'.tr, // 点击下方按钮生成会话摘要 style: TextStyle( fontSize: 15.sp, color: isDarkMode ? Colors.grey[400] : Colors.grey[600], @@ -384,7 +384,7 @@ class TranslationDetailView extends GetView { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - '摘要内容', + 'summaryContent'.tr, // 摘要内容 style: TextStyle( fontSize: 16.sp, fontWeight: FontWeight.bold, @@ -459,8 +459,8 @@ class TranslationDetailView extends GetView { void _copySummaryToClipboard() { Clipboard.setData(ClipboardData(text: controller.summaryResult.value)); Get.snackbar( - '已复制', - '摘要已复制到剪贴板', + 'copied'.tr, // 已复制 + 'summaryCopiledToClipboard'.tr, // 摘要已复制到剪贴板 snackPosition: SnackPosition.BOTTOM, duration: Duration(seconds: 2), ); @@ -490,7 +490,7 @@ class TranslationDetailView extends GetView { child: controller.isGeneratingSummary.value ? _buildGeneratingIndicator(isDarkMode) : Text( - controller.summaryResult.value.isEmpty ? '提取摘要' : '已生成摘要', + controller.summaryResult.value.isEmpty ? 'extractSummary'.tr : 'summaryGenerated'.tr, // 提取摘要 : 已生成摘要 style: TextStyle( fontSize: 16.sp, fontWeight: FontWeight.w600, @@ -515,7 +515,7 @@ class TranslationDetailView extends GetView { ), SizedBox(width: 12.w), Text( - '生成中...', + 'generating'.tr, // 生成中... style: TextStyle( fontSize: 16.sp, fontWeight: FontWeight.w600, @@ -545,7 +545,7 @@ class TranslationDetailView extends GetView { ), ), child: Text( - '重新生成', + 'regenerate'.tr, // 重新生成 style: TextStyle( fontSize: 16.sp, fontWeight: FontWeight.w600, @@ -570,14 +570,14 @@ class TranslationDetailView extends GetView { Get.dialog( AlertDialog( title: Text( - '请求超时', + 'requestTimeout'.tr, // 请求超时 style: TextStyle( fontSize: 18.sp, fontWeight: FontWeight.bold, ), ), content: Text( - '生成摘要请求超时,可能是网络问题或服务器繁忙。', + 'summaryTimeoutMessage'.tr, // 生成摘要请求超时,可能是网络问题或服务器繁忙。 style: TextStyle( fontSize: 16.sp, ), @@ -586,7 +586,7 @@ class TranslationDetailView extends GetView { TextButton( onPressed: () => Get.back(), child: Text( - '取消', + 'cancel'.tr, // 取消 style: TextStyle( fontSize: 16.sp, color: Colors.grey[700], @@ -600,7 +600,7 @@ class TranslationDetailView extends GetView { controller.retryExtractSummaryWithExtendedTimeout(text); }, child: Text( - '重试', + 'retry'.tr, // 重试 style: TextStyle( fontSize: 16.sp, color: Colors.blue, @@ -624,7 +624,7 @@ class TranslationDetailView extends GetView { AlertDialog( backgroundColor: isDarkMode ? AppColors.cardBackground : Colors.white, title: Text( - '删除翻译记录', + 'deleteTranslationRecord'.tr, // 删除翻译记录 style: TextStyle( fontSize: 18.sp, fontWeight: FontWeight.bold, @@ -636,7 +636,7 @@ class TranslationDetailView extends GetView { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - '确定要删除这条翻译记录吗?此操作无法撤销。', + 'deleteTranslationConfirm'.tr, // 确定要删除这条翻译记录吗?此操作无法撤销。 style: TextStyle( fontSize: 16.sp, color: isDarkMode ? Colors.grey[300] : Colors.black87, @@ -720,15 +720,15 @@ class TranslationDetailView extends GetView { // 分享原始记录 final String sourceText = _getCombinedSourceText(); final String translatedText = _getCombinedTranslatedText(); - shareText = '原文:\n$sourceText\n\n译文:\n$translatedText'; + shareText = '${'originalText'.tr}:\n$sourceText\n\n${'translatedText'.tr}:\n$translatedText'; // 原文:译文: } else { // 分享摘要 if (controller.summaryResult.value.isNotEmpty) { - shareText = '会话摘要:\n${controller.summaryResult.value}'; + shareText = '${'sessionSummary'.tr}:\n${controller.summaryResult.value}'; // 会话摘要: } else { Get.snackbar( - '无法分享', - '请先生成摘要', + 'cannotShare'.tr, // 无法分享 + 'generateSummaryFirst'.tr, // 请先生成摘要 snackPosition: SnackPosition.BOTTOM, duration: Duration(seconds: 2), ); @@ -739,7 +739,7 @@ class TranslationDetailView extends GetView { // 调用系统分享 Share.share( shareText, - subject: '翻译会话记录 - ${DateFormat('yyyy-MM-dd HH:mm').format(controller.currentItem.timestamp)}', + subject: '${'translationSessionRecord'.tr} - ${DateFormat('yyyy-MM-dd HH:mm').format(controller.currentItem.timestamp)}', // 翻译会话记录 ); } } \ No newline at end of file diff --git a/lib/modules/translation/views/translation_history_view.dart b/lib/modules/translation/views/translation_history_view.dart index 44733c576..52b35faca 100644 --- a/lib/modules/translation/views/translation_history_view.dart +++ b/lib/modules/translation/views/translation_history_view.dart @@ -238,8 +238,8 @@ class TranslationHistoryView extends GetView { final languageManager = Get.find(); // 获取源语言和目标语言的中文名称 - final sourceName = languageManager.getChineseNameByAsrCode(item.sourceLanguageCode) ?? '未知语言'; - final targetName = languageManager.getChineseNameByAsrCode(item.targetLanguageCode) ?? '未知语言'; + final sourceName = languageManager.getChineseNameByAsrCode(item.sourceLanguageCode) ?? 'unknownLanguage'.tr; // 未知语言 + final targetName = languageManager.getChineseNameByAsrCode(item.targetLanguageCode) ?? 'unknownLanguage'.tr; // 未知语言 // 使用双向箭头符号表示翻译方向 return '$sourceName ⇄ $targetName'; @@ -253,7 +253,7 @@ class TranslationHistoryView extends GetView { AlertDialog( backgroundColor: isDarkMode ? AppColors.cardBackground : Colors.white, title: Text( - '删除会话记录', + 'deleteSessionRecord'.tr, // 删除会话记录 style: TextStyle( fontSize: 18.sp, fontWeight: FontWeight.bold, @@ -261,7 +261,7 @@ class TranslationHistoryView extends GetView { ), ), content: Text( - '确定要删除该会话的所有翻译记录吗?此操作无法撤销。', + 'deleteSessionConfirm'.tr, // 确定要删除该会话的所有翻译记录吗?此操作无法撤销。 style: TextStyle( fontSize: 16.sp, color: isDarkMode ? Colors.grey[300] : Colors.black87, diff --git a/lib/modules/translation/views/translation_list_view.dart b/lib/modules/translation/views/translation_list_view.dart index dd13b7521..d559a8d8e 100644 --- a/lib/modules/translation/views/translation_list_view.dart +++ b/lib/modules/translation/views/translation_list_view.dart @@ -37,7 +37,7 @@ class TranslationListView extends GetView { onPressed: () => Get.back(), ), title: Text( - "翻译录音文件", // + "translateAudioFiles".tr, // 翻译录音文件 style: TextStyle( fontSize: 17.sp, fontWeight: FontWeight.w600, @@ -52,7 +52,7 @@ class TranslationListView extends GetView { return Obx(() { final fileList = controller.files; // 不要 toList() if (fileList.isEmpty) { - return Center(child: Text('暂无音频文件')); + return Center(child: Text('noAudioFiles'.tr)); // 暂无音频文件 } return ListView.builder( @@ -75,17 +75,17 @@ class TranslationListView extends GetView { return FutureBuilder( future: controller.getAudioDuration(file.path), builder: (context, snapshot) { - String durationText = "计算中..."; + String durationText = "calculating".tr; // 计算中... if (snapshot.hasData) { final duration = snapshot.data!; if (duration.inSeconds > 0) { durationText = "${duration.inMinutes}:${(duration.inSeconds % 60).toString().padLeft(2, '0')}"; } else { - durationText = "未知"; + durationText = "unknown".tr; // 未知 } } else if (snapshot.hasError) { - durationText = "错误"; + durationText = "error".tr; // 错误 } return GestureDetector( onLongPressStart: (details) { @@ -216,8 +216,8 @@ class TranslationListView extends GetView { // 播放状态文本 Text( isCurrentFile - ? (isPlaying ? '播放中...' : '已暂停') - : '点击播放', + ? (isPlaying ? 'playing'.tr : 'paused'.tr) // 播放中... : 已暂停 + : 'clickToPlay'.tr, // 点击播放 style: TextStyle( color: Colors.blue, fontSize: 10.sp, @@ -269,7 +269,7 @@ class TranslationListView extends GetView { size: 20.w, color: isDarkMode ? Colors.white : Colors.black87, ), - '重命名', + 'rename'.tr, // 重命名 isDarkMode ? Colors.white : Colors.black87, () { // 弹出重命名输入框 @@ -282,7 +282,7 @@ class TranslationListView extends GetView { size: 20.w, color: isDarkMode ? Colors.white : Colors.black87, ), - '智能转写', + 'smartTranscription'.tr, // 智能转写 isDarkMode ? Colors.white : Colors.black87, () { Get.toNamed(Routes.meeting, arguments: { @@ -296,7 +296,7 @@ class TranslationListView extends GetView { size: 20.w, color: isDarkMode ? Colors.red[700] : Colors.red, ), - '删除', + 'delete'.tr, // 删除 isDarkMode ? Colors.red[700]! : Colors.red, () { file.delete(); @@ -358,7 +358,7 @@ class TranslationListView extends GetView { mainAxisSize: MainAxisSize.min, children: [ Text( - '重命名音频文件', + 'renameAudioFile'.tr, // 重命名音频文件 style: TextStyle( color: isDarkMode ? Colors.white : Colors.black87, fontSize: 16.sp, @@ -390,7 +390,7 @@ class TranslationListView extends GetView { fontSize: 16.sp, ), decoration: InputDecoration( - hintText: '请输入新的文件名', + hintText: 'enterNewFileName'.tr, // 请输入新的文件名 hintStyle: TextStyle( color: isDarkMode ? Colors.white70 : Colors.black54, fontSize: 16.sp, @@ -422,7 +422,7 @@ class TranslationListView extends GetView { borderRadius: BorderRadius.circular(12.w), ), child: Text( - '取消', + 'cancel'.tr, // 取消 style: TextStyle( fontSize: 14.sp, color: isDarkMode ? AppColors.primary : Colors.blue, @@ -455,7 +455,7 @@ class TranslationListView extends GetView { borderRadius: BorderRadius.circular(12.w), ), child: Text( - '确认', + 'confirm'.tr, // 确认 style: TextStyle( color: Colors.white, fontSize: 14.sp, diff --git a/lib/modules/translation/views/translation_view.dart b/lib/modules/translation/views/translation_view.dart index 239f5d823..1cd6779e3 100644 --- a/lib/modules/translation/views/translation_view.dart +++ b/lib/modules/translation/views/translation_view.dart @@ -154,7 +154,7 @@ class TranslationView extends GetView { size: 24.sp, ), onPressed: controller.toggleisRecord, - tooltip: '是否开启录音', + tooltip: 'enableRecording'.tr, // 是否开启录音 ), IconButton( icon: Icon( @@ -167,7 +167,7 @@ class TranslationView extends GetView { Get.toNamed(Routes.translationList); controller.setupScrollListener(); }, - tooltip: '查看录音文件', + tooltip: 'viewAudioFiles'.tr, // 查看录音文件 ), // 添加历史记录按钮 IconButton( @@ -180,7 +180,7 @@ class TranslationView extends GetView { await controller.stopAll(); Get.toNamed(Routes.translationHistory); }, - tooltip: '翻译历史', + tooltip: 'translationHistory'.tr, // 翻译历史 ), ], ); @@ -428,7 +428,7 @@ class TranslationView extends GetView { speakerId: 1, activeSpeaker: controller.activeSpeaker.value, icon: Icons.headset, // 耳机图标 - label: "耳机用户", + label: "headsetUser".tr, // 耳机用户 ), SizedBox(width: 40.w), // 手机图标按钮 (说话者2) @@ -437,7 +437,7 @@ class TranslationView extends GetView { speakerId: 2, activeSpeaker: controller.activeSpeaker.value, icon: Icons.phone_android, // 手机图标 - label: "手机用户", + label: "phoneUser".tr, // 手机用户 ), ], );