refactor(i18n): route command + settings manifest labels through the catalog (T-462)

Apply the manifest-i18n foundation across every extension: each
CommandContribution (45, command-palette + menu) gains titleKey + i18nNamespace,
and each SettingsCategory/section/field/option gains its key — with the English
text added to the owning extension's catalog. The settings renderer
(settings_category_view + settings_modal) threads the category's i18nNamespace
down and resolves every label/help/option through it; new catalogs created for
view, cli-install, keybindings-ui. No en_US behaviour change — the command
palette, menus, and settings panel now localize from the catalog (D-21).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-19 10:20:19 +02:00
co-authored by Claude Opus 4.8
parent 198c8b18b5
commit 37fa255a63
28 changed files with 419 additions and 72 deletions
+83 -8
View File
@@ -16,13 +16,30 @@ class DefaultLayoutExtension extends ClideExtension {
@override
List<ContributionPoint> get contributions => [
_preset ?? classicPreset(),
CommandContribution(id: 'layout.reset', command: 'layout.reset', title: 'Layout: Reset to Classic', run: _reset),
CommandContribution(id: 'palette.toggle', command: 'palette.toggle', title: 'Command Palette', defaultBinding: 'ctrl+shift+p', run: _togglePalette),
CommandContribution(
id: 'layout.reset',
command: 'layout.reset',
title: 'Layout: Reset to Classic',
titleKey: 'command.reset',
i18nNamespace: id,
run: _reset,
),
CommandContribution(
id: 'palette.toggle',
command: 'palette.toggle',
title: 'Command Palette',
titleKey: 'command.palette.toggle',
i18nNamespace: id,
defaultBinding: 'ctrl+shift+p',
run: _togglePalette,
),
// Collapse toggles (D-051, D-054)
CommandContribution(
id: 'sidebar.collapse',
command: 'sidebar.collapse',
title: 'Toggle Sidebar Collapse',
titleKey: 'command.sidebar.collapse',
i18nNamespace: id,
defaultBinding: 'ctrl+shift+1',
run: _collapseSidebar,
),
@@ -30,19 +47,55 @@ class DefaultLayoutExtension extends ClideExtension {
id: 'context.collapse',
command: 'context.collapse',
title: 'Toggle Context Panel Collapse',
titleKey: 'command.context.collapse',
i18nNamespace: id,
defaultBinding: 'ctrl+shift+3',
run: _collapseContext,
),
// Panel focus (D-054)
CommandContribution(id: 'panel.focus.left', command: 'panel.focus.left', title: 'Focus Left Panel', defaultBinding: 'ctrl+1', run: _focusLeft),
CommandContribution(id: 'panel.focus.middle', command: 'panel.focus.middle', title: 'Focus Middle Panel', defaultBinding: 'ctrl+2', run: _focusMiddle),
CommandContribution(id: 'panel.focus.right', command: 'panel.focus.right', title: 'Focus Right Panel', defaultBinding: 'ctrl+3', run: _focusRight),
CommandContribution(
id: 'panel.focus.left',
command: 'panel.focus.left',
title: 'Focus Left Panel',
titleKey: 'command.panel.focus.left',
i18nNamespace: id,
defaultBinding: 'ctrl+1',
run: _focusLeft,
),
CommandContribution(
id: 'panel.focus.middle',
command: 'panel.focus.middle',
title: 'Focus Middle Panel',
titleKey: 'command.panel.focus.middle',
i18nNamespace: id,
defaultBinding: 'ctrl+2',
run: _focusMiddle,
),
CommandContribution(
id: 'panel.focus.right',
command: 'panel.focus.right',
title: 'Focus Right Panel',
titleKey: 'command.panel.focus.right',
i18nNamespace: id,
defaultBinding: 'ctrl+3',
run: _focusRight,
),
// Focus mode (D-052, D-054)
CommandContribution(id: 'panel.focusMode', command: 'panel.focusMode', title: 'Toggle Focus Mode', defaultBinding: 'ctrl+.', run: _toggleFocusMode),
CommandContribution(
id: 'panel.focusMode',
command: 'panel.focusMode',
title: 'Toggle Focus Mode',
titleKey: 'command.panel.focusMode',
i18nNamespace: id,
defaultBinding: 'ctrl+.',
run: _toggleFocusMode,
),
CommandContribution(
id: 'panel.focusMode.exit',
command: 'panel.focusMode.exit',
title: 'Exit Focus Mode',
titleKey: 'command.panel.focusMode.exit',
i18nNamespace: id,
defaultBinding: 'escape',
// Stand down in Vim insert/visual mode so Esc returns to normal
// mode instead of closing the editor (T-257). Symmetric with
@@ -51,8 +104,24 @@ class DefaultLayoutExtension extends ClideExtension {
run: _exitFocusMode,
),
// Editor split (D-049, D-054)
CommandContribution(id: 'editor.open', command: 'editor.open', title: 'Open Editor', defaultBinding: 'ctrl+e', run: _openEditor),
CommandContribution(id: 'editor.close', command: 'editor.close', title: 'Close Editor', defaultBinding: 'ctrl+w', run: _closeEditor),
CommandContribution(
id: 'editor.open',
command: 'editor.open',
title: 'Open Editor',
titleKey: 'command.editor.open',
i18nNamespace: id,
defaultBinding: 'ctrl+e',
run: _openEditor,
),
CommandContribution(
id: 'editor.close',
command: 'editor.close',
title: 'Close Editor',
titleKey: 'command.editor.close',
i18nNamespace: id,
defaultBinding: 'ctrl+w',
run: _closeEditor,
),
// Workspace tab cycling (T-405). Preset-neutral ctrl+pagedown/up across every
// preset; the vim preset additionally binds gt/gT to these (T-405 part 2,
// once a global multi-chord matcher lands — see T-404).
@@ -60,6 +129,8 @@ class DefaultLayoutExtension extends ClideExtension {
id: 'workspace.tab.next',
command: 'workspace.tab.next',
title: 'Next Workspace Tab',
titleKey: 'command.workspace.tab.next',
i18nNamespace: id,
defaultBinding: 'ctrl+pagedown',
run: _nextWorkspaceTab,
),
@@ -67,6 +138,8 @@ class DefaultLayoutExtension extends ClideExtension {
id: 'workspace.tab.previous',
command: 'workspace.tab.previous',
title: 'Previous Workspace Tab',
titleKey: 'command.workspace.tab.previous',
i18nNamespace: id,
defaultBinding: 'ctrl+pageup',
run: _prevWorkspaceTab,
),
@@ -76,6 +149,8 @@ class DefaultLayoutExtension extends ClideExtension {
id: 'sidebar.section.${i + 1}',
command: 'sidebar.section.${i + 1}',
title: 'Sidebar: Section ${i + 1}',
titleKey: 'command.sidebar.section.${i + 1}',
i18nNamespace: id,
defaultBinding: 'alt+${i + 1}',
run: (args) => _switchSidebarSection(i),
),