src/docs/config-storage-history.md
STranslate/Core/Settings.cs
STranslate/Core/ServiceSettings.cs
STranslate/Core/StorageBase.cs
STranslate/Core/AppStorage.cs
SettingsDirectory/{TypeName}.json。STranslate/Core/PluginStorage.cs
PluginSettingsDirectory/{serviceId}.json。STranslate/Core/DataLocation.cs
STranslate/Core/SqlService.cs
STranslate/Helpers/HistoryCsvHelper.cs
STranslate/ViewModels/Pages/HistoryViewModel.cs
AppStorage<T>.Load() 读取:Settings、HotkeySettings、ServiceSettings。SetStorage() 后,Settings.PropertyChanged 会自动触发:
StorageBase.Save() 采用临时文件 + 原子替换,降低写入中断导致损坏的风险。StorageBase.Load() 遇到 JSON 异常时回退 .bak,再失败则使用默认对象。App 在 Load() 前检查 Settings.json、HotkeySettings.json、ServiceSettings.json 是否都不存在;都不存在才在主窗口创建前自动打开向导。向导跳过、关闭或完成时保存三类配置,生成文件后后续启动不再自动弹出。首页语言选择直接绑定 Settings.Language,沿用现有语言切换和保存行为。DataLocation.PortableDataLocationInUse() 判断程序目录下是否存在便携目录。PortableDataPath。RoamingDataPath(%AppData%/STranslate)。CacheDirectory/history.db。SqlService.InitializeDB() 创建 History 表。
PRAGMA table_info(History) 检查并补齐 EffectiveSourceLang / EffectiveTargetLang 列。InsertOrUpdateDataAsync(history, count):
(SourceText, SourceLang, TargetLang) 命中则更新,否则插入。HistoryModel.RawData 负责将 List<HistoryData> 与 JSON 字段互转;HistoryData.ServiceDisplayName 保留服务显示名快照。HistoryModel.EffectiveSourceLang / EffectiveTargetLang 保存自动识别后实际参与翻译的语言。ExportHistoryAsync() 只导出选中项,导出后清空选择。SqlService.GetDataAsync() 读取全部历史,不依赖当前分页加载状态。HistoryCsvHelper.BuildCsv() 输出 UTF-8 with BOM CSV,列结构为基础字段 + 动态翻译引擎列:
Auto 且存在有效语言时,导出和历史页统一显示为 Auto(有效语言)。SqlService.DeleteAllDataAsync() 后清空当前 UI 集合。Settings
TextSeparatorHandleType、TextSeparatorHandleScopes、SelectedTextFetchTimeoutMs、CrosswordFetchFailedFallbackTarget。MainWindowMaxHeightRatio、ShowImageTranslateItemInNotifyIconMenu、ImageTranslateWindowMode。ServiceSettings
TranSvcDatas/OcrSvcDatas/TtsSvcDatas/VocabularySvcDatas。ReplaceSvcID/ImageTranslateSvcID/ImageTranslateOcrSvcID。ProxySettings 与 BackupSettings
HistoryModel / HistoryData
EffectiveSourceLang / EffectiveTargetLang:自动识别后的实际语言快照。ServiceDisplayName:服务显示名快照,导出和历史页展示优先使用。STranslate/Core/Settings.csSTranslate/Core/ServiceSettings.csSTranslate/Core/StorageBase.csSTranslate/Core/AppStorage.csSTranslate/Core/PluginStorage.csSTranslate/Core/DataLocation.csSTranslate/Core/SqlService.csSTranslate/Helpers/HistoryCsvHelper.csSTranslate/ViewModels/Pages/HistoryViewModel.csSTranslate/Converters/HistoryLanguageDisplayConverter.csSTranslate/Converters/HistoryServiceDisplayNameConverter.csSTranslate/Core/ProxySettings.csSTranslate/Core/BackupSettings.csSettings 或 ServiceSettings 增加属性。HandlePropertyChanged 分支。StorageBase,避免在业务层重复实现备份恢复。DataLocation,并验证升级流程中的 TmpConfigDirectory 回迁逻辑。SqlService.InitializeDB() 补迁移逻辑;修改 HistoryData 时需确认 RawData 兼容旧版本 JSON。HistoryCsvHelper,保持历史页展示与导出语言/服务名解析一致。