此前左右两侧会把对侧已选的那项从列表里删掉(excludeLanguage),看起来像那个 语言没了。语音翻译(同传/面对面/音视频)不再传这个参数,选中对侧语言时由 controller 对调来避免源=目标。文本/图片翻译仍走排除——它们的源语言有「自动 检测」,对调会把这个非法值挪进目标语言。 - 对调实现体拆出 _swapLanguagesInner,不包 _runLanguageSwitch:撞上对侧时是 在已经排队进来的那次切换里调它,再包一层会等自己前面那条链,死锁。 - RecentLanguages(GetStorage)记最近选过的语言并置顶,源/目标各一份列表。 「自动检测」不是语言,不记。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>