You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.8 KiB

import 'package:get/get.dart';
import '../../../data/services/language_manager.dart';
/// 翻译项模型
/// 表示一条翻译记录的完整信息
class TranslationItem {
String sourceText;
String translatedText;
String sourceLanguageCode;
String targetLanguageCode;
final DateTime timestamp;
String sessionId;
final bool isFirstInSession;
bool isIntermediate; // 是否为中间结果
String utteranceId; // AST 事件的 utteranceId,用于匹配同一句话的识别和翻译
String serviceId; // AST 服务 ID(A=己方, B=对方)
bool isFinalResultReceived; // 是否已收到最终识别结果
bool isTranslationResultReceived; // 是否已收到最终翻译结果
TranslationItem({
required this.sourceText,
required this.translatedText,
required this.sourceLanguageCode,
required this.targetLanguageCode,
required this.timestamp,
required this.sessionId,
this.isFirstInSession = false,
this.isIntermediate = false,
this.utteranceId = '',
this.serviceId = '',
this.isFinalResultReceived = false,
this.isTranslationResultReceived = false,
});
/// 从JSON创建TranslationItem实例
factory TranslationItem.fromJson(Map<String, dynamic> json) {
DateTime timestamp;
try {
timestamp = DateTime.parse(json['timestamp']);
} catch (e) {
timestamp = DateTime.now();
}
return TranslationItem(
sourceText: json['sourceText'] ?? '',
translatedText: json['translatedText'] ?? '',
sourceLanguageCode: json['sourceLanguageCode'] ?? 'zh-CN',
targetLanguageCode: json['targetLanguageCode'] ?? 'en-US',
timestamp: timestamp,
sessionId:
json['sessionId'] ?? DateTime.now().millisecondsSinceEpoch.toString(),
isFirstInSession: json['isFirstInSession'] ?? false,
isIntermediate: false, // 从存储加载的都是最终结果
);
}
/// 转换为JSON格式
Map<String, dynamic> toJson() {
return {
'sourceText': sourceText,
'translatedText': translatedText,
'sourceLanguageCode': sourceLanguageCode,
'targetLanguageCode': targetLanguageCode,
'timestamp': timestamp.toIso8601String(),
'sessionId': sessionId,
'isFirstInSession': isFirstInSession,
// 不保存isIntermediate,因为存储的都是最终结果
};
}
/// 获取源语言的中文名称
String get sourceLanguageName {
final languageManager = Get.find<LanguageManager>();
return languageManager.getChineseNameByAsrCode(sourceLanguageCode) ??
'meetingUnknownLanguage'.tr; // 对应中文:未知语言
}
/// 获取目标语言的中文名称
String get targetLanguageName {
final languageManager = Get.find<LanguageManager>();
return languageManager.getChineseNameByAsrCode(targetLanguageCode) ??
'meetingUnknownLanguage'.tr; // 对应中文:未知语言
}
}