/** * 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.folderParent': '项目文件夹', 'add.folderPick': '选择位置…', 'add.folderNone': '未选择(点右侧「选择位置…」在资源管理器窗口里挑一个文件夹)', 'add.folderRequired': '请先选择项目文件夹的位置', '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': '自定义', 'pane.anim': '动画', 'pane.animUrlPh': '粘贴动画站点地址后回车', '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': '请填写分组父目录和新分组名', 'bind.title': '绑定对话', 'bind.unbind': '解绑', 'bind.unbound': '未绑定对话', 'bind.titleUnbound': '绑定对话(未绑定 ○○):点击选择要跟随的对话', 'bind.titleBound': '已绑定对话(●●):点击更换或解绑', 'bind.tipUnbound': '未绑定对话:点击选择要跟随的对话', 'bind.tipDone': '(任务已完成,点击项目查看)', 'bind.tipNeed': '(需要你的决定,点击项目处理)', 'bind.folder': '项目文件夹', 'bind.folderChange': '更改', 'bind.folderNone': '未设置(建议设置:项目产出文件都会放进这里)', 'bind.tipBound': '已绑定对话:{name}', 'bind.hint': '一个项目只能绑定一个对话。选择后,打开该项目时右侧对话窗会自动切换过去;已绑定的项目不会因新建/发送对话而自动改绑。', 'customLayout.add': '自定义', 'customLayout.addTitle': '自定义一个布局(生成提示词)', 'customLayout.title': '自定义布局', 'customLayout.placeholder': '描述你想要的布局,例如:右侧竖长对话窗,左侧上下两个一样大的窗…', 'customLayout.copy': '复制提示词到剪贴板', 'customLayout.copied': '提示词已复制到剪贴板。去任意一个 DSH 对话里粘贴发送,对方的 dsh 就知道要做什么了。', 'customLayout.copyFail': '复制失败,请手动全选输入框内容复制。', 'custom.autoBound': '已自动把这个项目绑定到这个对话(卡片上的 ●● 按钮可更换或解绑)。', 'custom.keptBinding': '该项目已有绑定的对话,按规则未自动更改。', '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.folderParent': 'Project folder', 'add.folderPick': 'Choose…', 'add.folderNone': 'Not chosen (click Choose… to pick a folder in the explorer window)', 'add.folderRequired': 'Pick the project folder location first', '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', 'pane.anim': 'Animation', 'pane.animUrlPh': 'Paste the animation site URL and press Enter', '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', 'bind.title': 'Bind conversation', 'bind.unbind': 'Unbind', 'bind.unbound': 'No conversation bound', 'bind.titleUnbound': 'Bind conversation (unbound ○○): pick the conversation to follow', 'bind.titleBound': 'Conversation bound (●●): click to change or unbind', 'bind.tipUnbound': 'No conversation bound — click to pick one', 'bind.tipDone': ' (task completed — click the project to view)', 'bind.tipNeed': ' (needs your decision — click the project to handle)', 'bind.folder': 'Project folder', 'bind.folderChange': 'Change', 'bind.folderNone': 'Not set (recommended: project outputs go here)', 'bind.tipBound': 'Bound to: {name}', 'bind.hint': 'A project can bind exactly one conversation. When bound, opening the project switches the right chat pane to it; an existing binding is never auto-changed by creating/sending conversations.', 'customLayout.add': 'Custom', 'customLayout.addTitle': 'Customize a layout (generate a prompt)', 'customLayout.title': 'Custom layout', 'customLayout.placeholder': 'Describe the layout you want, e.g. a tall chat column on the right and two equal panes stacked on the left…', 'customLayout.copy': 'Copy prompt to clipboard', 'customLayout.copied': 'Prompt copied to clipboard. Paste it into any DSH conversation and send — that dsh will know what to do.', 'customLayout.copyFail': 'Copy failed — select the text above and copy it manually.', 'custom.autoBound': 'This project was auto-bound to this conversation (use the ●● button on its card to change or unbind).', 'custom.keptBinding': 'This project already has a bound conversation, so it was not auto-changed.', '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 } }