281 lines
14 KiB
TypeScript
281 lines
14 KiB
TypeScript
/**
|
||
* 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.refresh': '刷新',
|
||
'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.tipBusy': '(对话正在处理任务…)',
|
||
'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<string, string>
|
||
|
||
/** 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': '"{name}" will be removed from the worktable permanently (the conversation and project files are kept).',
|
||
'pane.browser': 'Browser',
|
||
'pane.explorer': 'Explorer',
|
||
'pane.scm': 'Source control',
|
||
'pane.tasks': 'Tasks',
|
||
'pane.terminal': 'Terminal',
|
||
'pane.custom': 'Custom',
|
||
'pane.anim': 'Animation',
|
||
'pane.refresh': 'Refresh',
|
||
'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.tipBusy': ' (conversation is working on the task…)',
|
||
'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<WorktableKey, string>
|
||
|
||
/** 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
|
||
}
|
||
}
|