diff --git a/src/components/SettingsPanel.test.tsx b/src/components/SettingsPanel.test.tsx
index 633834eb..907234e8 100644
--- a/src/components/SettingsPanel.test.tsx
+++ b/src/components/SettingsPanel.test.tsx
@@ -70,6 +70,24 @@ describe('SettingsPanel', () => {
expect(screen.getByText('Sync & Updates')).toBeInTheDocument()
})
+ it('updates the draft language when stored settings finish loading', () => {
+ const { rerender } = render(
+
+ )
+
+ rerender(
+
+ )
+
+ expect(screen.getByText('设置')).toBeInTheDocument()
+ expect(screen.queryByText('Settings')).not.toBeInTheDocument()
+ })
+
it('calls onSave with stable defaults on save', () => {
render(
diff --git a/src/components/SettingsPanel.tsx b/src/components/SettingsPanel.tsx
index 3b6f8548..d16a1e0d 100644
--- a/src/components/SettingsPanel.tsx
+++ b/src/components/SettingsPanel.tsx
@@ -248,6 +248,10 @@ function SettingsPanelInner({
const draftLocale = resolveEffectiveLocale(draft.uiLanguage, [systemLocale])
const t = createTranslator(draftLocale)
+ useEffect(() => {
+ setDraft(createSettingsDraft(settings, explicitOrganizationEnabled))
+ }, [explicitOrganizationEnabled, settings])
+
useEffect(() => {
const timer = setTimeout(() => {
const focusTarget = panelRef.current?.querySelector('[data-settings-autofocus="true"]')