/** * dsh-worktable locale namespace(NS 'worktable'): * 侧边栏区块、视图菜单、管理项目、添加面板、快捷方式等全部文案。 * zh 为键集唯一来源;en 与 zh 键集完全对齐。 */ /** Simplified Chinese dictionary (the key-set source of truth). */ export const zh = { 'title': '工作台', 'rail.title': '工作台(展开侧边栏查看)', 'handle.title': '按住拖动位置 · 双击复位', 'handle.aria': '拖动工作台位置', 'menu.search': '搜索项目', 'menu.viewOptions': '设置', 'menu.add': '添加项目', 'search.placeholder': '搜索项目…', 'search.close': '关闭搜索', 'sort.label': '排序方式', 'sort.manual': '手动', 'sort.recent': '最近', 'menu.manage': '管理项目…', 'add.guideTitle': '接入新项目', 'add.guideBody': '工作台里的项目就是 DSH 插件——插件注册一张「工作台项目卡片」即自动入驻(协议见项目 PRD §5.3)。已安装但未入驻的插件需在插件代码里完成注册。', 'add.market': '浏览插件市场', 'add.shortcutTitle': '本地快捷方式', 'add.shortcutDesc': '把任意网址收进工作台,点击新标签打开(仅存本机)。', 'add.shortcutNamePh': '名称', 'add.shortcutIcon': '图标(emoji,可选)', 'add.shortcutHref': '链接(http/https)', 'add.shortcutAdd': '添加', 'add.shortcutInvalid': '请填写名称与合法的 http/https 链接', 'manage.title': '管理项目', 'manage.done': '完成', 'manage.renamePh': '显示名', 'manage.hide': '隐藏', 'manage.show': '显示', 'manage.removed': '已删除的项目', 'manage.readd': '重新添加', 'manage.deleteShortcut': '删除快捷方式', 'shortcut.badge': '本地', 'add.chooseLayout': '选择布局模式', 'add.layoutNamePh': '布局名称', 'add.layoutSave': '进入工作区', 'add.layoutInvalid': '请填写布局名称', 'manage.deleteLayout': '删除布局', 'manage.deleteProject': '删除项目', 'manage.changeView': '变更视图', 'viewPick.title': '选择新视图(内容窗自动迁入)', 'confirm.title': '删除项目', 'confirm.cancel': '取消', 'confirm.delete': '删除', 'confirm.layoutBody': '确定删除「{name}」?该工作区及其布局将被移除,此操作不可恢复。', 'confirm.shortcutBody': '确定删除快捷方式「{name}」?此操作不可恢复。', 'confirm.projectBody': '确定从工作台删除「{name}」?插件本身不会被卸载,「恢复默认」也不会复活它;之后可在设置里「已删除的项目」中重新添加。', 'pane.browser': '浏览器', 'pane.explorer': '资源管理器', 'pane.scm': '源代码管理', 'pane.tasks': '任务管理', 'pane.terminal': '终端', 'pane.custom': '自定义', 'custom.title': '自定义这个窗口', 'custom.hint': '发送后将自动新建一个会话,专门负责这个窗口的自定义设计。', 'custom.placeholder': '告诉 AI 你想让这个窗口做什么,例如:做一个展示我旅行足迹的时间线页面…', 'custom.project': '所属项目', 'custom.modeNew': '新建对话', 'custom.modeSend': '发送到会话', 'custom.session': '选择会话', 'custom.sessionCurrent': '(当前)', 'custom.hintSend': '内容将直接发送到你选择的会话(默认当前会话),用于讨论这个窗口的自定义设计。', 'custom.send': '发送并新建对话', 'custom.sendToSession': '发送到该会话', 'custom.sent': '已发送到会话', 'custom.done': '已新建专属对话', 'custom.doneHint': 'AI 正在新会话中为你设计这个窗口。关闭本标签即可返回窗口选择。', 'custom.fail': '创建对话失败', 'custom.group': '分组(工作区)', 'custom.groupNone': '未分组', 'custom.groupNew': '+ 新建一个分组…', 'custom.groupNewParent': '分组父目录', 'custom.groupNewName': '新分组名', 'custom.groupNewParentPh': '例如 E:\\AI_Workspace\\DeepseekHarness', 'custom.groupNewNamePh': '例如 MyProject(将新建此文件夹并注册为分组)', 'custom.groupNeedPath': '请填写分组父目录和新分组名', 'pane.wip': '开发中(后续版本接入)', 'pane.explorerNoCwd': '当前会话没有工作目录', 'pane.openLater': '该类型暂不支持预览', 'file.loading': '加载中…', 'file.fail': '文件读取失败', 'file.preview': '预览', 'file.edit': '编辑', 'file.save': '保存', 'file.saveFail': '保存失败', 'pane.gitNotRepo': '当前目录不是 git 仓库', 'pane.gitClean': '工作区干净', 'pane.jobsEmpty': '当前会话暂无后台任务', 'pane.termFail': '终端不可用(宿主缺少 node-pty/ws 或连接失败)', 'pane.closeTab': '关闭标签页', 'pane.jobsTitle': '后台任务', 'pane.subagents': '子代理', 'pane.subagentsEmpty': '当前会话暂无子代理', 'split.flip': '切换对话窗位置(左⇄右)', 'split.dragSwap': '拖动标题栏与其他窗交换位置', 'icons.title': '选择图标', 'icons.change': '更换图标', 'empty': '暂无项目', } satisfies Record /** The worktable namespace key union. */ export type WorktableKey = keyof typeof zh /** English dictionary, checked complete against the zh key set. */ export const en = { 'title': 'Worktable', 'rail.title': 'Worktable (expand sidebar to view)', 'handle.title': 'Drag to move · double-click to reset', 'handle.aria': 'Drag worktable position', 'menu.search': 'Search projects', 'menu.viewOptions': 'Settings', 'menu.add': 'Add project', 'search.placeholder': 'Search projects…', 'search.close': 'Close search', 'sort.label': 'Sort by', 'sort.manual': 'Manual', 'sort.recent': 'Recent', 'menu.manage': 'Manage projects…', 'add.guideTitle': 'Add a project', 'add.guideBody': 'Projects in the worktable are DSH plugins — a plugin joins by registering a worktable project card (protocol in the project PRD §5.3). Installed plugins that have not registered need to do so in their code.', 'add.market': 'Browse plugin marketplace', 'add.shortcutTitle': 'Local shortcut', 'add.shortcutDesc': 'Pin any URL into the worktable; opens in a new tab (stored locally only).', 'add.shortcutNamePh': 'Name', 'add.shortcutIcon': 'Icon (emoji, optional)', 'add.shortcutHref': 'URL (http/https)', 'add.shortcutAdd': 'Add', 'add.shortcutInvalid': 'Enter a name and a valid http/https URL', 'manage.title': 'Manage projects', 'manage.done': 'Done', 'manage.renamePh': 'Display name', 'manage.hide': 'Hide', 'manage.show': 'Show', 'manage.removed': 'Removed projects', 'manage.readd': 'Re-add', 'manage.deleteShortcut': 'Delete shortcut', 'shortcut.badge': 'Local', 'add.chooseLayout': 'Choose a layout', 'add.layoutNamePh': 'Layout name', 'add.layoutSave': 'Enter workspace', 'add.layoutInvalid': 'Enter a layout name', 'manage.deleteLayout': 'Delete layout', 'manage.deleteProject': 'Delete project', 'manage.changeView': 'Change layout', 'viewPick.title': 'Pick a new layout (panes migrate automatically)', 'confirm.title': 'Delete project', 'confirm.cancel': 'Cancel', 'confirm.delete': 'Delete', 'confirm.layoutBody': 'Delete "{name}"? Its workspace and layout will be removed. This cannot be undone.', 'confirm.shortcutBody': 'Delete shortcut "{name}"? This cannot be undone.', 'confirm.projectBody': 'Remove "{name}" from the worktable? The plugin stays installed; Reset defaults will NOT bring it back — re-add it later under Removed projects in Settings.', 'pane.browser': 'Browser', 'pane.explorer': 'Explorer', 'pane.scm': 'Source control', 'pane.tasks': 'Tasks', 'pane.terminal': 'Terminal', 'pane.custom': 'Custom', 'custom.title': 'Customize this pane', 'custom.hint': 'Sending will create a new conversation dedicated to designing this pane.', 'custom.placeholder': 'Tell the AI what you want this pane to do, e.g. a timeline page of my travels…', 'custom.project': 'Project', 'custom.modeNew': 'New conversation', 'custom.modeSend': 'Send to a conversation', 'custom.session': 'Conversation', 'custom.sessionCurrent': ' (current)', 'custom.hintSend': 'The content will be sent directly to the conversation you pick (current by default).', 'custom.send': 'Send & create conversation', 'custom.sendToSession': 'Send to this conversation', 'custom.sent': 'Sent to the conversation', 'custom.done': 'Conversation created', 'custom.doneHint': 'The AI is designing your pane in the new conversation. Close this tab to return to the pane picker.', 'custom.fail': 'Failed to create conversation', 'custom.group': 'Group (workspace)', 'custom.groupNone': 'Ungrouped', 'custom.groupNew': '+ Create a new group…', 'custom.groupNewParent': 'Group parent folder', 'custom.groupNewName': 'New group name', 'custom.groupNewParentPh': 'e.g. E:\\AI_Workspace\\DeepseekHarness', 'custom.groupNewNamePh': 'e.g. MyProject (folder will be created and registered)', 'custom.groupNeedPath': 'Fill in the parent folder and new group name', 'pane.wip': 'Coming in a later version', 'pane.explorerNoCwd': 'No working directory for the current session', 'pane.openLater': 'Preview not supported for this type', 'file.loading': 'Loading…', 'file.fail': 'Failed to read file', 'file.preview': 'Preview', 'file.edit': 'Edit', 'file.save': 'Save', 'file.saveFail': 'Save failed', 'pane.gitNotRepo': 'Not a git repository', 'pane.gitClean': 'Working tree clean', 'pane.jobsEmpty': 'No background jobs in the current session', 'pane.termFail': 'Terminal unavailable (host missing node-pty/ws, or connection failed)', 'pane.closeTab': 'Close tab', 'pane.jobsTitle': 'Background jobs', 'pane.subagents': 'Subagents', 'pane.subagentsEmpty': 'No subagents in the current session', 'split.flip': 'Flip chat side (left ⇄ right)', 'split.dragSwap': 'Drag the title bar to swap panes', 'icons.title': 'Pick an icon', 'icons.change': 'Change icon', 'empty': 'No projects yet', } satisfies Record /** Locale namespace id registered under ctx.locale. */ export const NS = 'worktable' declare module '@deepseek-ai/dsh-client-ui-slots' { interface LocaleNamespaceMap { /** The worktable sidebar copy. */ [NS]: WorktableKey } }