src/docs/flow-main-translation.md
STranslate/ViewModels/MainWindowViewModel.cs
OnInputTextChanged():自动翻译防抖入口。TranslateAsync():主翻译命令。SingleTranslateAsync() / SingleTransBackAsync():单服务执行。ExecuteTranslateAsync():缓存优先 + 实时翻译编排。STranslate/Helpers/LanguageDetector.cs
GetLanguageAsync():源语种判定与目标语种推导。STranslate/Core/SqlService.cs
GetDataAsync() / InsertOrUpdateDataAsync():历史缓存读取与落盘。OnInputTextChanged(value):
Settings.AutoTranslate == false 直接返回。DebounceExecutor 按 Settings.AutoTranslateDelayMs 延迟执行 TranslateCommand。TranslateAsync() 执行前先取消防抖队列,重置已启用服务的结果对象。ExecuteTranslateAsync(checkCacheFirst):
ExecMode == Automatic 的服务。(InputText, SourceLang, TargetLang) 查询 SqlService。LanguageDetector.GetLanguageAsync() 获取最终 source/target。SemaphoreSlim 并发执行服务:
ITranslatePlugin 走主翻译,按需执行自动回译。IDictionaryPlugin 走词典查询路径。PopulateResultsFromCacheAsync() 遍历目标服务。TransResult / TransBackResult。DictionaryResult。SingleTranslateAsync(service) 先查当前输入历史。IDictionaryPlugin:执行 ExecuteDictAsync(),失败即返回。ITranslatePlugin:识别语种后执行 ExecuteAsync(),按配置追加 ExecuteBackAsync()。Settings.CopyAfterTranslationNotAutomatic 为真时,手动执行完成立即复制结果。Settings.CopyAfterTranslation 支持第 N 个自动服务或最后一个自动服务。Settings.HistoryLimit > 0 时使用 SQLite;否则仅使用内存 _recentTexts 缓存最近输入。Service.Options
ExecMode:自动/手动执行。AutoBackTranslation:自动回译开关。HistoryModel / HistoryData
RawData 序列化所有服务结果(翻译、回译、词典)。TranslateResult / DictionaryResult
AutoTranslate、AutoTranslateDelayMsCopyAfterTranslation、CopyAfterTranslationNotAutomaticHistoryLimitSTranslate/ViewModels/MainWindowViewModel.csSTranslate/Helpers/LanguageDetector.csSTranslate/Core/SqlService.csSTranslate/Services/TranslateService.csSTranslate.Plugin/ITranslatePlugin.csExecuteAsync 返回后、历史入库前处理。OnInputTextChanged 与 Settings.AutoTranslateDelayMs。HistoryModel.HasData() 与 PopulateResultsFromCacheAsync(),避免只改 UI 层。TranslateAsync() 内 CopyAfterTranslation 分支,并同步枚举定义与设置页。