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
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; // 对应中文:未知语言
|
|
}
|
|
}
|
|
|