the panel names the earlier migration missed (181 -> 171)

Terminal's metas are in index.tsx and the migration globbed index.ts, so its three
translatable names were never keyed. Found by diffing the remainder against
FileBrowser rather than by reading the glob.

The product names — Tmux, Neovim, Claude Code, Minesweeper, SendOff, and the three
system-monitor scopes, which name bTop, pm2 and docker themselves — carry
i18n-exempt markers now. They were correct as plain strings but the scanner counted
them, so the area could not have reached zero either way.

Everything outside FileBrowser is now thrown Errors only.
This commit is contained in:
2026-08-23 15:48:45 +00:00
parent 4466ac93c3
commit a36fa356ae
6 changed files with 17 additions and 5 deletions
@@ -9,5 +9,6 @@ export { RfbClient } from './rfb';
// rather than a vendored noVNC, because we control the server and need two encodings out of ten.
export const appRegistryMetas: AppRegistryMeta[] = [
// i18n-exempt: product name
{ key: 'minesweeper', name: 'Minesweeper', icon: Bomb, component: MinesweeperPanel },
];
@@ -6,5 +6,6 @@ export { SendOffPanel } from './SendOffPanel';
export { useSendOff, useSendOffSenders, useSendOffTargets } from './useSendOff';
export const appRegistryMetas: AppRegistryMeta[] = [
// i18n-exempt: product name
{ key: 'sendoff', name: 'SendOff', icon: Send, component: SendOffPanel },
];
@@ -6,9 +6,13 @@ import { useParams } from 'react-router';
// on whatever you last clicked in some other tab.
export type MonitorScope = 'btop' | 'pm2' | 'docker';
// Each label names the tool the scope shows, so all three are product names and stay as they are.
export const SCOPES: { id: MonitorScope; label: string }[] = [
// i18n-exempt: product names — bTop, pm2 and docker are the tools themselves
{ id: 'btop', label: 'bTop' },
// i18n-exempt: product names — bTop, pm2 and docker are the tools themselves
{ id: 'pm2', label: 'pm2 processes' },
// i18n-exempt: product names — bTop, pm2 and docker are the tools themselves
{ id: 'docker', label: 'dockers' },
];
@@ -5,6 +5,7 @@ import { HostTerminalWrapper } from './HostTerminalWrapper';
import { CommandTerminalWrapper } from './CommandTerminalWrapper';
import { TerminalHeader, HostTerminalHeader, TmuxHeader, NvimHeader, ClaudeCodeHeader } from './Headers';
import { RunningShells } from './RunningShells';
import { panelName } from '../../locales';
export { TerminalView, type TerminalViewProps, type TerminalConnectionState } from './Terminal';
@@ -40,7 +41,7 @@ const ClaudeCodeWrapper = ({ panelId }: { panelId: string }) => (
export const appRegistryMetas: AppRegistryMeta[] = [
{
key: 'officerdev/terminal',
name: 'Terminal',
name: panelName('panelName.terminal'),
icon: TerminalSquare,
component: TerminalWrapper,
header: TerminalHeader,
@@ -48,7 +49,7 @@ export const appRegistryMetas: AppRegistryMeta[] = [
},
{
key: 'officerdev/terminal-host',
name: 'Host Terminal',
name: panelName('panelName.hostTerminal'),
icon: Monitor,
component: HostTerminalWrapper,
header: HostTerminalHeader,
@@ -57,6 +58,7 @@ export const appRegistryMetas: AppRegistryMeta[] = [
},
{
key: 'officerdev/tmux',
// i18n-exempt: product name
name: 'Tmux',
icon: Columns2,
component: TmuxWrapper,
@@ -65,6 +67,7 @@ export const appRegistryMetas: AppRegistryMeta[] = [
},
{
key: 'officerdev/nvim',
// i18n-exempt: product name
name: 'Neovim',
icon: PenLine,
component: NvimWrapper,
@@ -73,12 +76,13 @@ export const appRegistryMetas: AppRegistryMeta[] = [
},
{
key: 'officerdev/running-shells',
name: 'Running Shells',
name: panelName('panelName.runningShells'),
icon: ListTree,
component: RunningShells,
},
{
key: 'officerdev/claude-code',
// i18n-exempt: product name
name: 'Claude Code',
icon: Sparkles,
component: ClaudeCodeWrapper,
@@ -72,7 +72,8 @@
"name": "Name",
"status": "Status",
"mem": "Mem",
"uptime": "Uptime"
"uptime": "Uptime",
"scopeDockers": "dockers"
},
"codeEditor": {
"closeFile": "Close {{name}}",
@@ -72,7 +72,8 @@
"name": "Nome",
"status": "Estado",
"mem": "Mem",
"uptime": "Tempo ativo"
"uptime": "Tempo ativo",
"scopeDockers": "dockers"
},
"codeEditor": {
"closeFile": "Fechar {{name}}",