From 93b2bfef69e87d80d27c2057d7a245616d189a53 Mon Sep 17 00:00:00 2001 From: Syngnat Date: Thu, 23 Jul 2026 10:23:14 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(settings):=20=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E6=9B=B4=E6=96=B0=E9=80=9A=E9=81=93=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=E4=B8=8E=E6=8E=A7=E4=BB=B6=E5=AF=B9=E9=BD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 按 latest 和 dev 通道显示对应的稳定版或开发版说明 - 统一更新通道与检查间隔控件宽度及右侧对齐 - 补充六种语言文案和设置中心回归测试 --- frontend/src/App.css | 17 ++++++++++++++++- frontend/src/App.settings-center.test.ts | 19 +++++++++++++++++++ frontend/src/App.tsx | 7 +++++-- frontend/src/i18n/catalog.test.ts | 16 ++++++++++++++++ shared/i18n/de-DE.json | 3 ++- shared/i18n/en-US.json | 3 ++- shared/i18n/ja-JP.json | 3 ++- shared/i18n/ru-RU.json | 3 ++- shared/i18n/zh-CN.json | 3 ++- shared/i18n/zh-TW.json | 3 ++- 10 files changed, 68 insertions(+), 9 deletions(-) diff --git a/frontend/src/App.css b/frontend/src/App.css index e9e09ffa..69bd862b 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -1389,7 +1389,14 @@ body[data-theme='dark'] .gonavi-ai-mcp-disclosure > summary:hover { } } +body .gonavi-about-pane { + --gn-about-update-control-width: 200px; +} + body .gonavi-about-update-channel.ant-segmented.ant-segmented { + width: var(--gn-about-update-control-width); + max-width: 100%; + justify-self: end; height: var(--gn-control-height, 32px) !important; padding: 2px !important; border: 1px solid rgba(15, 23, 42, 0.10) !important; @@ -1398,17 +1405,25 @@ body .gonavi-about-update-channel.ant-segmented.ant-segmented { box-shadow: none !important; } +body .gonavi-about-auto-check-interval.ant-select { + width: var(--gn-about-update-control-width); + max-width: 100%; + justify-self: end; +} + body .gonavi-about-update-channel .ant-segmented-group { gap: 3px; } body .gonavi-about-update-channel .ant-segmented-item { + flex: 1 1 0; + min-width: 0; border-radius: 4px !important; } body .gonavi-about-update-channel .ant-segmented-item-label { min-height: calc(var(--gn-control-height, 32px) - 4px) !important; - padding: 0 10px !important; + padding: 0 8px !important; color: rgba(15, 23, 42, 0.62) !important; font-size: var(--gn-font-size-sm, 12px) !important; font-weight: 600 !important; diff --git a/frontend/src/App.settings-center.test.ts b/frontend/src/App.settings-center.test.ts index 876b162d..2aba19ae 100644 --- a/frontend/src/App.settings-center.test.ts +++ b/frontend/src/App.settings-center.test.ts @@ -259,11 +259,30 @@ describe('settings center layout', () => { expect(appSource).toContain("[t('app.about.version.package_type'), t(`app.about.package_type.${packageType}`)]"); expect(appSource).toContain('className="gonavi-about-update-channel"'); expect(appSource).toContain('', autoCheckIntervalSelectStart), + ); + expect(autoCheckIntervalSelectStart).toBeGreaterThan(-1); + expect(autoCheckIntervalSelectSource).not.toContain("width: '100%'"); + expect(appCssSource).toMatch(/\.gonavi-about-auto-check-interval\.ant-select\s*\{[^}]*width:\s*var\(--gn-about-update-control-width\);/s); + expect(appCssSource).toMatch(/\.gonavi-about-auto-check-interval\.ant-select\s*\{[^}]*max-width:\s*100%;/s); + expect(appCssSource).toMatch(/\.gonavi-about-auto-check-interval\.ant-select\s*\{[^}]*justify-self:\s*end;/s); expect(appSource).toContain('checked={autoCheckForUpdates}'); expect(appSource).toContain('setAutoCheckForUpdates(checked)'); expect(appSource).toContain('setAutoCheckForUpdatesIntervalMinutes(Number(value))'); diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 3b334359..ddd1c1c1 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -5046,7 +5046,11 @@ function App() { style={{ flexShrink: 0 }} /> -
{t('app.about.version_update.channel_hint')}
+
+ {updateChannel === 'dev' + ? t('app.about.version_update.channel_hint.dev') + : t('app.about.version_update.channel_hint.latest')} +
{t('app.about.field.auto_check_updates')}
@@ -5070,7 +5074,6 @@ function App() { : t('app.about.auto_check_interval.minutes', { minutes }), }))} onChange={(value) => setAutoCheckForUpdatesIntervalMinutes(Number(value))} - style={{ width: '100%' }} />
{t('app.about.version_update.auto_check_hint')}
diff --git a/frontend/src/i18n/catalog.test.ts b/frontend/src/i18n/catalog.test.ts index 4647239f..a5364ad2 100644 --- a/frontend/src/i18n/catalog.test.ts +++ b/frontend/src/i18n/catalog.test.ts @@ -151,6 +151,22 @@ describe("i18n catalog", () => { } }); + it("keeps latest and dev update channel descriptions distinct", () => { + const latestHintKey = "app.about.version_update.channel_hint.latest"; + const devHintKey = "app.about.version_update.channel_hint.dev"; + + for (const language of SUPPORTED_LANGUAGES) { + expect(catalogs[language]).toHaveProperty(latestHintKey); + expect(catalogs[language]).toHaveProperty(devHintKey); + expect(catalogs[language][latestHintKey]).toBeTruthy(); + expect(catalogs[language][devHintKey]).toBeTruthy(); + expect(catalogs[language][latestHintKey]).not.toBe(catalogs[language][devHintKey]); + } + + expect(catalogs["zh-CN"][latestHintKey]).toBe("接收最新的稳定版本"); + expect(catalogs["zh-CN"][devHintKey]).toBe("接收最新的开发版本"); + }); + it("includes App shell keys required by every supported language", () => { const appShellKeys = [ "app.tools.title", diff --git a/shared/i18n/de-DE.json b/shared/i18n/de-DE.json index 09a8ba8c..22347aa4 100644 --- a/shared/i18n/de-DE.json +++ b/shared/i18n/de-DE.json @@ -2502,7 +2502,8 @@ "app.about.version_update.available": "Update verfügbar", "app.about.version_update.auto_check_disabled_hint": "Wenn deaktiviert, werden Updates nur über die manuelle Aktion „Nach Updates suchen“ geprüft", "app.about.version_update.auto_check_hint": "Beim Start und im gewählten Intervall im Hintergrund nach Updates suchen", - "app.about.version_update.channel_hint": "Neueste Entwicklungsversion erhalten", + "app.about.version_update.channel_hint.dev": "Neueste Entwicklungsversion erhalten", + "app.about.version_update.channel_hint.latest": "Neueste stabile Version erhalten", "app.about.version_update.title": "Version und Updates", "app.about.version_update.up_to_date": "Auf dem neuesten Stand", "app.ai_panel.action.close": "Panel schließen", diff --git a/shared/i18n/en-US.json b/shared/i18n/en-US.json index e70f9eab..83ad8ca3 100644 --- a/shared/i18n/en-US.json +++ b/shared/i18n/en-US.json @@ -2502,7 +2502,8 @@ "app.about.version_update.available": "Update available", "app.about.version_update.auto_check_disabled_hint": "When off, updates are only checked via the manual Check for Updates action", "app.about.version_update.auto_check_hint": "Check for updates in the background on startup and at the selected interval", - "app.about.version_update.channel_hint": "Receive the latest development build", + "app.about.version_update.channel_hint.dev": "Receive the latest development build", + "app.about.version_update.channel_hint.latest": "Receive the latest stable release", "app.about.version_update.title": "Version and Updates", "app.about.version_update.up_to_date": "Up to date", "app.ai_panel.action.close": "Close Panel", diff --git a/shared/i18n/ja-JP.json b/shared/i18n/ja-JP.json index 6bbd72fd..632fad0a 100644 --- a/shared/i18n/ja-JP.json +++ b/shared/i18n/ja-JP.json @@ -2502,7 +2502,8 @@ "app.about.version_update.available": "利用可能な更新があります", "app.about.version_update.auto_check_disabled_hint": "オフの場合、手動の「更新を確認」でのみ新バージョンを取得します", "app.about.version_update.auto_check_hint": "起動後にバックグラウンドで確認し、設定した間隔で繰り返し確認します", - "app.about.version_update.channel_hint": "最新の開発版を受け取る", + "app.about.version_update.channel_hint.dev": "最新の開発版を受け取る", + "app.about.version_update.channel_hint.latest": "最新の安定版を受け取る", "app.about.version_update.title": "バージョンと更新", "app.about.version_update.up_to_date": "最新です", "app.ai_panel.action.close": "パネルを閉じる", diff --git a/shared/i18n/ru-RU.json b/shared/i18n/ru-RU.json index f42adc58..b20954e1 100644 --- a/shared/i18n/ru-RU.json +++ b/shared/i18n/ru-RU.json @@ -2502,7 +2502,8 @@ "app.about.version_update.available": "Доступно обновление", "app.about.version_update.auto_check_disabled_hint": "При отключении обновления проверяются только вручную через «Проверить обновления»", "app.about.version_update.auto_check_hint": "Проверять обновления в фоне при запуске и с выбранным интервалом", - "app.about.version_update.channel_hint": "Получать последнюю dev-версию", + "app.about.version_update.channel_hint.dev": "Получать последнюю dev-версию", + "app.about.version_update.channel_hint.latest": "Получать последнюю стабильную версию", "app.about.version_update.title": "Версия и обновления", "app.about.version_update.up_to_date": "Актуально", "app.ai_panel.action.close": "Закрыть панель", diff --git a/shared/i18n/zh-CN.json b/shared/i18n/zh-CN.json index 2545bb08..9ff35793 100644 --- a/shared/i18n/zh-CN.json +++ b/shared/i18n/zh-CN.json @@ -2502,7 +2502,8 @@ "app.about.version_update.available": "有可用更新", "app.about.version_update.auto_check_disabled_hint": "关闭后仅可通过手动「检查更新」获取新版本", "app.about.version_update.auto_check_hint": "启动后在后台检查,并按设定间隔重复检查", - "app.about.version_update.channel_hint": "接收最新的开发版本", + "app.about.version_update.channel_hint.dev": "接收最新的开发版本", + "app.about.version_update.channel_hint.latest": "接收最新的稳定版本", "app.about.version_update.title": "版本与更新", "app.about.version_update.up_to_date": "当前已是最新", "app.ai_panel.action.close": "关闭面板", diff --git a/shared/i18n/zh-TW.json b/shared/i18n/zh-TW.json index a512ca1c..eb1877f8 100644 --- a/shared/i18n/zh-TW.json +++ b/shared/i18n/zh-TW.json @@ -2502,7 +2502,8 @@ "app.about.version_update.available": "有可用更新", "app.about.version_update.auto_check_disabled_hint": "關閉後僅可透過手動「檢查更新」取得新版本", "app.about.version_update.auto_check_hint": "啟動後在背景檢查,並依設定間隔重複檢查", - "app.about.version_update.channel_hint": "接收最新的開發版本", + "app.about.version_update.channel_hint.dev": "接收最新的開發版本", + "app.about.version_update.channel_hint.latest": "接收最新的穩定版本", "app.about.version_update.title": "版本與更新", "app.about.version_update.up_to_date": "目前已是最新", "app.ai_panel.action.close": "關閉面板",