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 }}
/>
-
+ {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": "關閉面板",