feat(ui): add locales and split catalogs

Adds Spanish, French, Russian, Japanese, and Simplified Chinese catalogs and wires supported locales into the i18n layer.
This commit is contained in:
Shantur Rathore
2026-01-26 12:56:26 +00:00
parent 5b1e21345f
commit feccbd13bd
89 changed files with 4531 additions and 30 deletions

View File

@@ -0,0 +1,6 @@
export const advancedSettingsMessages = {
"advancedSettings.title": "高级设置",
"advancedSettings.environmentVariables.title": "环境变量",
"advancedSettings.environmentVariables.subtitle": "每当启动新的 OpenCode 实例时应用",
"advancedSettings.actions.close": "关闭",
} as const

View File

@@ -0,0 +1,29 @@
export const appMessages = {
"app.launchError.title": "无法启动 OpenCode",
"app.launchError.description": "我们无法启动所选的 OpenCode 可执行文件。请查看下面的错误输出,或在“高级设置”中选择其他可执行文件。",
"app.launchError.binaryPathLabel": "可执行文件路径",
"app.launchError.errorOutputLabel": "错误输出",
"app.launchError.openAdvancedSettings": "打开高级设置",
"app.launchError.close": "关闭",
"app.launchError.closeTitle": "关闭 (Esc)",
"app.launchError.fallbackMessage": "启动工作区失败",
"app.stopInstance.confirmMessage": "停止 OpenCode 实例?这将停止服务器。",
"app.stopInstance.title": "停止实例",
"app.stopInstance.confirmLabel": "停止",
"app.stopInstance.cancelLabel": "继续运行",
"emptyState.logoAlt": "CodeNomad 徽标",
"emptyState.brandTitle": "CodeNomad",
"emptyState.tagline": "选择文件夹,开始与 AI 一起编码",
"emptyState.actions.selectFolder": "选择文件夹",
"emptyState.actions.selecting": "正在选择...",
"emptyState.keyboardShortcut": "键盘快捷键:{shortcut}",
"emptyState.examples": "示例:{example}",
"emptyState.multipleInstances": "同一个文件夹可以同时打开多个实例",
"releases.upgradeRequired.title": "需要升级",
"releases.upgradeRequired.message.withVersion": "更新到 CodeNomad {version} 以使用最新的 UI。",
"releases.upgradeRequired.message.noVersion": "更新 CodeNomad 以使用最新的 UI。",
"releases.upgradeRequired.action.getUpdate": "获取更新",
} as const

View File

@@ -0,0 +1,160 @@
export const commandMessages = {
"commandPalette.title": "命令面板",
"commandPalette.description": "搜索并执行命令",
"commandPalette.searchPlaceholder": "输入命令或搜索...",
"commandPalette.empty": "未找到与 \"{query}\" 匹配的命令",
"commandPalette.category.customCommands": "自定义命令",
"commandPalette.category.instance": "实例",
"commandPalette.category.session": "会话",
"commandPalette.category.agentModel": "智能体与模型",
"commandPalette.category.inputFocus": "输入与焦点",
"commandPalette.category.system": "系统",
"commandPalette.category.other": "其他",
"commands.newInstance.label": "新建实例",
"commands.newInstance.description": "打开文件夹选择器以创建新实例",
"commands.newInstance.keywords": "folder, project, workspace, 文件夹, 项目, 工作区",
"commands.closeInstance.label": "关闭实例",
"commands.closeInstance.description": "停止当前实例的服务器",
"commands.closeInstance.keywords": "stop, quit, close, 停止, 退出, 关闭",
"commands.nextInstance.label": "下一个实例",
"commands.nextInstance.description": "切换到下一个实例标签页",
"commands.nextInstance.keywords": "switch, navigate, 切换, 导航",
"commands.previousInstance.label": "上一个实例",
"commands.previousInstance.description": "切换到上一个实例标签页",
"commands.previousInstance.keywords": "switch, navigate, 切换, 导航",
"commands.newSession.label": "新建会话",
"commands.newSession.description": "创建新的父会话",
"commands.newSession.keywords": "create, start, 创建, 开始",
"commands.closeSession.label": "关闭会话",
"commands.closeSession.description": "关闭当前父会话",
"commands.closeSession.keywords": "close, stop, 关闭, 停止",
"commands.scrubSessions.label": "清理会话",
"commands.scrubSessions.description": "移除空会话、已完成主任务的子智能体会话,以及多余的分叉会话。",
"commands.scrubSessions.keywords": "cleanup, blank, empty, sessions, remove, delete, scrub, 清理, 空白, 会话, 删除, 整理",
"commands.instanceInfo.label": "实例信息",
"commands.instanceInfo.description": "打开实例概览以查看日志和状态",
"commands.instanceInfo.keywords": "info, logs, console, output, 信息, 日志, 控制台, 输出",
"commands.nextSession.label": "下一个会话",
"commands.nextSession.description": "切换到下一个会话标签页",
"commands.nextSession.keywords": "switch, navigate, 切换, 导航",
"commands.previousSession.label": "上一个会话",
"commands.previousSession.description": "切换到上一个会话标签页",
"commands.previousSession.keywords": "switch, navigate, 切换, 导航",
"commands.compactSession.label": "压缩会话",
"commands.compactSession.description": "总结并压缩当前会话",
"commands.compactSession.keywords": "summarize, compress, 总结, 压缩",
"commands.compactSession.errorFallback": "压缩会话失败",
"commands.compactSession.alert.title": "压缩失败",
"commands.compactSession.alert.message": "压缩失败:{message}",
"commands.undoLastMessage.label": "撤销上一条消息",
"commands.undoLastMessage.description": "回退上一条消息",
"commands.undoLastMessage.keywords": "revert, undo, 回退, 撤销",
"commands.undoLastMessage.none.title": "没有可撤销的操作",
"commands.undoLastMessage.none.message": "没有可撤销的内容",
"commands.undoLastMessage.failed.title": "撤销失败",
"commands.undoLastMessage.failed.message": "回退消息失败",
"commands.openModelSelector.label": "打开模型选择器",
"commands.openModelSelector.description": "选择其他模型",
"commands.openModelSelector.keywords": "model, llm, ai, 模型",
"commands.selectModelVariant.label": "选择模型变体",
"commands.selectModelVariant.description": "为当前模型选择思考强度",
"commands.selectModelVariant.keywords": "variant, thinking, reasoning, effort, 变体, 思考, 推理, 强度",
"commands.openAgentSelector.label": "打开智能体选择器",
"commands.openAgentSelector.description": "选择其他智能体",
"commands.openAgentSelector.keywords": "agent, mode, 智能体, 模式",
"commands.clearInput.label": "清空输入",
"commands.clearInput.description": "清空 prompt 输入框",
"commands.clearInput.keywords": "clear, reset, 清空, 重置",
"commands.thinkingBlocks.label.show": "显示思考块",
"commands.thinkingBlocks.label.hide": "隐藏思考块",
"commands.thinkingBlocks.description": "显示/隐藏 AI 思考过程",
"commands.thinkingBlocks.keywords": "thinking, reasoning, toggle, show, hide, 思考, 推理, 切换, 显示, 隐藏",
"commands.timelineToolCalls.label.show": "显示时间轴工具调用",
"commands.timelineToolCalls.label.hide": "隐藏时间轴工具调用",
"commands.timelineToolCalls.description": "切换消息时间轴中的工具调用条目",
"commands.timelineToolCalls.keywords": "timeline, tool, toggle, 时间轴, 工具, 切换",
"commands.common.expanded": "展开",
"commands.common.collapsed": "折叠",
"commands.common.visible": "可见",
"commands.common.hidden": "隐藏",
"commands.common.enabled": "启用",
"commands.common.disabled": "禁用",
"commands.thinkingBlocksDefault.label": "思考块默认 · {state}",
"commands.thinkingBlocksDefault.description": "切换思考块是否默认展开",
"commands.thinkingBlocksDefault.keywords": "thinking, reasoning, expand, collapse, default, 思考, 推理, 展开, 折叠, 默认",
"commands.diffViewSplit.label": "使用分栏 Diff 视图",
"commands.diffViewSplit.description": "并排显示工具调用的 diff",
"commands.diffViewSplit.keywords": "diff, split, view, 差异, 分栏, 视图",
"commands.diffViewUnified.label": "使用统一 Diff 视图",
"commands.diffViewUnified.description": "以内联方式显示工具调用的 diff",
"commands.diffViewUnified.keywords": "diff, unified, view, 差异, 统一, 视图",
"commands.toolOutputsDefault.label": "工具输出默认 · {state}",
"commands.toolOutputsDefault.description": "切换工具输出是否默认展开",
"commands.toolOutputsDefault.keywords": "tool, output, expand, collapse, 工具, 输出, 展开, 折叠",
"commands.diagnosticsDefault.label": "诊断默认 · {state}",
"commands.diagnosticsDefault.description": "切换诊断输出是否默认展开",
"commands.diagnosticsDefault.keywords": "diagnostics, expand, collapse, 诊断, 展开, 折叠",
"commands.tokenUsageDisplay.label": "Token 使用显示 · {state}",
"commands.tokenUsageDisplay.description": "显示或隐藏助手消息的 token 和费用统计",
"commands.tokenUsageDisplay.keywords": "token, usage, cost, stats, 令牌, 用量, 费用, 统计",
"commands.autoCleanupBlankSessions.label": "自动清理空白会话 · {state}",
"commands.autoCleanupBlankSessions.description": "在创建新会话时自动清理空白会话",
"commands.autoCleanupBlankSessions.keywords": "auto, cleanup, blank, sessions, toggle, 自动, 清理, 空白, 会话, 切换",
"commands.showHelp.label": "显示帮助",
"commands.showHelp.description": "显示键盘快捷键与帮助",
"commands.showHelp.keywords": "shortcuts, help, 快捷键, 帮助",
"commands.custom.argumentsPrompt.message": "/{name} 的参数",
"commands.custom.argumentsPrompt.title": "自定义命令",
"commands.custom.argumentsPrompt.inputLabel": "参数",
"commands.custom.argumentsPrompt.inputPlaceholder": "例如 foo bar",
"commands.custom.argumentsPrompt.confirmLabel": "运行",
"commands.custom.argumentsPrompt.cancelLabel": "取消",
"commands.custom.argumentsPrompt.openFailed.message": "无法打开参数输入框。",
"commands.custom.argumentsPrompt.openFailed.title": "命令参数",
"commands.custom.entries.descriptionFallback": "自定义命令",
"commands.custom.sessionRequired.message": "运行自定义命令前请先选择一个会话。",
"commands.custom.sessionRequired.title": "需要会话",
"commands.custom.runFailed.message": "运行自定义命令失败。请查看控制台了解详情。",
"commands.custom.runFailed.title": "命令失败",
"unifiedPicker.loading.searching": "正在搜索...",
"unifiedPicker.loading.loadingWorkspace": "正在加载工作区...",
"unifiedPicker.title.command": "选择命令",
"unifiedPicker.title.mention": "选择智能体或文件",
"unifiedPicker.empty": "未找到结果",
"unifiedPicker.sections.commands": "命令",
"unifiedPicker.sections.agents": "智能体",
"unifiedPicker.sections.files": "文件",
"unifiedPicker.badge.subagent": "子智能体",
"unifiedPicker.footer.navigate": "导航",
"unifiedPicker.footer.select": "选择",
"unifiedPicker.footer.close": "关闭",
} as const

View File

@@ -0,0 +1,16 @@
export const dialogMessages = {
"alertDialog.fallbackTitle.info": "提示",
"alertDialog.fallbackTitle.warning": "请确认",
"alertDialog.fallbackTitle.error": "出错了",
"alertDialog.actions.confirm": "确认",
"alertDialog.actions.run": "运行",
"alertDialog.actions.ok": "确定",
"alertDialog.actions.cancel": "取消",
"alertDialog.prompt.inputLabel": "输入",
"backgroundProcessOutputDialog.title": "后台输出",
"backgroundProcessOutputDialog.actions.close": "关闭",
"backgroundProcessOutputDialog.loading": "正在加载输出...",
"backgroundProcessOutputDialog.truncatedNotice": "为便于显示,输出已截断。",
"backgroundProcessOutputDialog.loadErrorFallback": "加载输出失败。",
} as const

View File

@@ -0,0 +1,43 @@
export const filesystemMessages = {
"directoryBrowser.defaultDescription": "浏览已配置的工作区根目录下的文件夹。",
"directoryBrowser.close": "关闭",
"directoryBrowser.currentFolder": "当前文件夹",
"directoryBrowser.selectCurrent": "选择当前",
"directoryBrowser.newFolder": "新建文件夹",
"directoryBrowser.creating": "正在创建…",
"directoryBrowser.loadingFolders": "正在加载文件夹…",
"directoryBrowser.noFolders": "没有可用的文件夹。",
"directoryBrowser.upOneLevel": "上一级",
"directoryBrowser.select": "选择",
"directoryBrowser.load.errorFallback": "无法加载文件系统",
"directoryBrowser.createFolder.promptMessage": "在当前目录中新建文件夹。",
"directoryBrowser.createFolder.title": "新建文件夹",
"directoryBrowser.createFolder.inputLabel": "文件夹名称",
"directoryBrowser.createFolder.inputPlaceholder": "例如 my-new-project",
"directoryBrowser.createFolder.confirmLabel": "创建",
"directoryBrowser.createFolder.cancelLabel": "取消",
"directoryBrowser.createFolder.invalidNameMessage": "请输入单个文件夹名称。",
"directoryBrowser.createFolder.invalidNameDetail": "文件夹名称不能包含斜杠、\"..\" 或 \"~\"。",
"directoryBrowser.createFolder.errorFallback": "无法创建文件夹",
"filesystemBrowser.descriptionFallback": "在已配置的工作区根目录下搜索路径。",
"filesystemBrowser.rootLabel": "根目录:{root}",
"filesystemBrowser.actions.close": "关闭",
"filesystemBrowser.actions.retry": "重试",
"filesystemBrowser.actions.select": "选择",
"filesystemBrowser.filterLabel": "筛选",
"filesystemBrowser.search.placeholder.directories": "搜索文件夹",
"filesystemBrowser.search.placeholder.files": "搜索文件",
"filesystemBrowser.currentFolder.label": "当前文件夹",
"filesystemBrowser.currentFolder.selectCurrent": "选择当前",
"filesystemBrowser.loading.filesystem": "文件系统",
"filesystemBrowser.loading.workspaceRoot": "工作区根目录",
"filesystemBrowser.loading.loadingWithPath": "正在加载 {path}…",
"filesystemBrowser.empty.noEntries": "未找到任何条目。",
"filesystemBrowser.navigation.upOneLevel": "上一级",
"filesystemBrowser.hints.navigate": "导航",
"filesystemBrowser.hints.select": "选择",
"filesystemBrowser.hints.close": "关闭",
"filesystemBrowser.errors.loadFilesystemFallback": "无法加载文件系统",
"filesystemBrowser.errors.openDirectoryFallback": "无法打开目录",
} as const

View File

@@ -0,0 +1,34 @@
export const folderSelectionMessages = {
"folderSelection.logoAlt": "CodeNomad 徽标",
"folderSelection.tagline": "选择文件夹,开始与 AI 一起编码",
"folderSelection.links.github": "CodeNomad 的 GitHub",
"folderSelection.links.githubStars": "CodeNomad GitHub Star 数",
"folderSelection.links.discord": "CodeNomad 的 Discord",
"folderSelection.empty.title": "没有最近的文件夹",
"folderSelection.empty.description": "浏览并选择文件夹以开始使用",
"folderSelection.recent.title": "最近的文件夹",
"folderSelection.recent.subtitle.one": "{count} 个文件夹可用",
"folderSelection.recent.subtitle.other": "{count} 个文件夹可用",
"folderSelection.recent.remove": "从最近列表移除",
"folderSelection.browse.title": "浏览文件夹",
"folderSelection.browse.subtitle": "选择你电脑上的任意文件夹",
"folderSelection.browse.button": "浏览文件夹",
"folderSelection.browse.buttonOpening": "正在打开...",
"folderSelection.advancedSettings": "高级设置",
"folderSelection.hints.navigate": "导航",
"folderSelection.hints.select": "选择",
"folderSelection.hints.remove": "移除",
"folderSelection.hints.browse": "浏览",
"folderSelection.loading.title": "正在启动实例...",
"folderSelection.loading.subtitle": "正在准备你的工作区,请稍候。",
"folderSelection.dialog.title": "选择工作区",
"folderSelection.dialog.description": "选择工作区以开始编码。",
} as const

View File

@@ -0,0 +1,36 @@
import { advancedSettingsMessages } from "./advancedSettings"
import { appMessages } from "./app"
import { commandMessages } from "./commands"
import { dialogMessages } from "./dialogs"
import { filesystemMessages } from "./filesystem"
import { folderSelectionMessages } from "./folderSelection"
import { instanceMessages } from "./instance"
import { loadingScreenMessages } from "./loadingScreen"
import { logMessages } from "./logs"
import { markdownMessages } from "./markdown"
import { messagingMessages } from "./messaging"
import { remoteAccessMessages } from "./remoteAccess"
import { sessionMessages } from "./session"
import { settingsMessages } from "./settings"
import { timeMessages } from "./time"
import { toolCallMessages } from "./toolCall"
import { mergeMessageParts } from "../merge"
export const zhHansMessages = mergeMessageParts(
folderSelectionMessages,
advancedSettingsMessages,
loadingScreenMessages,
timeMessages,
appMessages,
dialogMessages,
filesystemMessages,
instanceMessages,
logMessages,
sessionMessages,
messagingMessages,
toolCallMessages,
markdownMessages,
settingsMessages,
remoteAccessMessages,
commandMessages,
)

View File

@@ -0,0 +1,125 @@
export const instanceMessages = {
"instanceTabs.new.title": "新建实例 (Cmd/Ctrl+N)",
"instanceTabs.new.ariaLabel": "新建实例",
"instanceTabs.remote.title": "远程连接",
"instanceTabs.remote.ariaLabel": "远程连接",
"instanceInfo.title": "实例信息",
"instanceInfo.labels.folder": "文件夹",
"instanceInfo.labels.project": "项目",
"instanceInfo.labels.versionControl": "版本控制",
"instanceInfo.labels.opencodeVersion": "OpenCode 版本",
"instanceInfo.labels.binaryPath": "可执行文件路径",
"instanceInfo.labels.environmentVariables": "环境变量({count}",
"instanceInfo.loading": "正在加载...",
"instanceInfo.server.title": "服务器",
"instanceInfo.server.port": "端口:",
"instanceInfo.server.pid": "PID:",
"instanceInfo.server.status": "状态:",
"instanceTab.status.permission": "等待权限",
"instanceTab.status.compacting": "压缩中",
"instanceTab.status.working": "工作中",
"instanceTab.status.idle": "空闲",
"instanceTab.status.ariaLabel": "实例状态:{status}",
"instanceTab.actions.close.ariaLabel": "关闭实例",
"instanceShell.leftPanel.sessionsTitle": "会话",
"instanceShell.leftPanel.instanceInfo": "实例信息",
"instanceShell.leftDrawer.pin": "固定左侧抽屉",
"instanceShell.leftDrawer.unpin": "取消固定左侧抽屉",
"instanceShell.leftDrawer.toggle.pinned": "左侧抽屉已固定",
"instanceShell.leftDrawer.toggle.open": "打开左侧抽屉",
"instanceShell.leftDrawer.toggle.close": "关闭左侧抽屉",
"instanceShell.rightDrawer.pin": "固定右侧抽屉",
"instanceShell.rightDrawer.unpin": "取消固定右侧抽屉",
"instanceShell.rightDrawer.toggle.pinned": "右侧抽屉已固定",
"instanceShell.rightDrawer.toggle.open": "打开右侧抽屉",
"instanceShell.rightDrawer.toggle.close": "关闭右侧抽屉",
"instanceShell.metrics.usedLabel": "已用",
"instanceShell.metrics.availableLabel": "可用",
"instanceShell.commandPalette.openAriaLabel": "打开命令面板",
"instanceShell.commandPalette.button": "命令面板",
"instanceShell.connection.ariaLabel": "连接 {status}",
"instanceShell.connection.connected": "已连接",
"instanceShell.connection.connecting": "连接中...",
"instanceShell.connection.disconnected": "已断开",
"instanceShell.connection.unknown": "未知",
"instanceWelcome.shortcuts.newSession": "新建会话",
"instanceWelcome.empty.title": "没有历史会话",
"instanceWelcome.empty.description": "在下方创建新会话以开始使用",
"instanceWelcome.loading.title": "正在加载会话",
"instanceWelcome.loading.description": "正在获取你的历史会话...",
"instanceWelcome.resume.title": "继续会话",
"instanceWelcome.resume.subtitle.one": "{count} 个会话可用",
"instanceWelcome.resume.subtitle.other": "{count} 个会话可用",
"instanceWelcome.session.untitled": "未命名会话",
"instanceWelcome.new.title": "开始新会话",
"instanceWelcome.new.subtitle": "将自动沿用上一次的智能体/模型",
"instanceWelcome.new.createButton": "创建会话",
"instanceWelcome.overlay.close": "关闭",
"instanceWelcome.actions.viewInstanceInfo": "查看实例信息",
"instanceWelcome.actions.renameTitle": "重命名会话",
"instanceWelcome.actions.deleteTitle": "删除会话",
"instanceWelcome.hints.navigate": "导航",
"instanceWelcome.hints.jump": "跳转",
"instanceWelcome.hints.firstLast": "首/末",
"instanceWelcome.hints.resume": "继续",
"instanceWelcome.hints.delete": "删除",
"instanceWelcome.toasts.renameError": "无法重命名会话",
"instanceDisconnected.title": "实例已断开连接",
"instanceDisconnected.folderFallback": "此工作区",
"instanceDisconnected.reasonFallback": "服务器停止响应",
"instanceDisconnected.description": "{folder} 已无法访问。关闭此标签页以继续工作。",
"instanceDisconnected.details.title": "详情",
"instanceDisconnected.details.folderLabel": "文件夹:",
"instanceDisconnected.actions.closeInstance": "关闭实例",
"instanceShell.empty.title": "未选择会话",
"instanceShell.empty.description": "选择会话以查看消息",
"instanceShell.rightPanel.title": "状态面板",
"instanceShell.rightPanel.sections.plan": "计划",
"instanceShell.rightPanel.sections.backgroundProcesses": "后台 Shell",
"instanceShell.rightPanel.sections.mcp": "MCP 服务器",
"instanceShell.rightPanel.sections.lsp": "LSP 服务器",
"instanceShell.rightPanel.sections.plugins": "插件",
"instanceShell.plan.noSessionSelected": "选择会话以查看计划。",
"instanceShell.plan.empty": "暂无计划。",
"instanceShell.backgroundProcesses.empty": "没有后台进程。",
"instanceShell.backgroundProcesses.status": "状态:{status}",
"instanceShell.backgroundProcesses.output": "输出:{sizeKb}KB",
"instanceShell.backgroundProcesses.actions.output": "输出",
"instanceShell.backgroundProcesses.actions.stop": "停止",
"instanceShell.backgroundProcesses.actions.terminate": "终止",
"versionPill.appWithVersion": "应用 {version}",
"versionPill.ui": "UI",
"versionPill.uiWithVersion": "UI {version}",
"versionPill.source": " {source}",
"opencodeBinarySelector.title": "OpenCode 可执行文件",
"opencodeBinarySelector.subtitle": "选择 OpenCode 要运行的可执行文件",
"opencodeBinarySelector.customPath.placeholder": "输入 opencode 可执行文件路径…",
"opencodeBinarySelector.actions.add": "添加",
"opencodeBinarySelector.actions.browse": "浏览可执行文件…",
"opencodeBinarySelector.actions.removeTitle": "移除可执行文件",
"opencodeBinarySelector.badge.systemPath": "使用系统 PATH 中的可执行文件",
"opencodeBinarySelector.status.checkingVersions": "正在检查版本…",
"opencodeBinarySelector.status.checking": "正在检查…",
"opencodeBinarySelector.dialog.title": "选择 OpenCode 可执行文件",
"opencodeBinarySelector.dialog.description": "浏览 CLI 服务器暴露的文件。",
"opencodeBinarySelector.validation.invalidBinary": "无效的 OpenCode 可执行文件",
"opencodeBinarySelector.validation.alreadyValidating": "正在验证中",
"opencodeBinarySelector.display.systemPath": "{name}(系统 PATH",
"opencodeBinarySelector.versionLabel": "v{version}",
} as const

View File

@@ -0,0 +1,17 @@
export const loadingScreenMessages = {
"loadingScreen.logoAlt": "CodeNomad 徽标",
"loadingScreen.status.issue": "遇到问题",
"loadingScreen.actions.showAnother": "换一句",
"loadingScreen.errors.missingRoot": "未找到加载根元素",
"loadingScreen.phrases.neurons": "正在热身 AI 神经元…",
"loadingScreen.phrases.daydreaming": "正在劝 AI 别再走神…",
"loadingScreen.phrases.goggles": "正在擦亮 AI 的代码护目镜…",
"loadingScreen.phrases.reorganizingFiles": "正在请求 AI 别再帮你重排文件…",
"loadingScreen.phrases.coffee": "正在给 AI 加杯咖啡…",
"loadingScreen.phrases.nodeModules": "正在教 AI 别再删除 node_modules又一次…",
"loadingScreen.phrases.actNatural": "正在提醒 AI 在你到来前表现自然点…",
"loadingScreen.phrases.rewritingHistory": "正在请 AI 别再重写历史…",
"loadingScreen.phrases.stretch": "正在让 AI 在编码冲刺前伸个懒腰…",
"loadingScreen.phrases.keyboardControl": "正在说服 AI 把键盘控制权交给你…",
} as const

View File

@@ -0,0 +1,18 @@
export const logMessages = {
"logsView.title": "服务器日志",
"logsView.actions.show": "显示服务器日志",
"logsView.actions.hide": "隐藏服务器日志",
"logsView.envVars.title": "环境变量({count}",
"logsView.paused.title": "服务器日志已暂停",
"logsView.paused.description": "启用流式输出以查看 OpenCode 服务器活动。",
"logsView.empty.waiting": "正在等待服务器输出...",
"logsView.scrollToBottom": "滚动到底部",
"infoView.logs.title": "服务器日志",
"infoView.logs.actions.show": "显示服务器日志",
"infoView.logs.actions.hide": "隐藏服务器日志",
"infoView.logs.paused.title": "服务器日志已暂停",
"infoView.logs.paused.description": "启用流式输出以查看 OpenCode 服务器活动。",
"infoView.logs.empty.waiting": "正在等待服务器输出...",
"infoView.logs.scrollToBottom": "滚动到底部",
} as const

View File

@@ -0,0 +1,7 @@
export const markdownMessages = {
"markdown.codeBlock.copy.label": "复制",
"markdown.codeBlock.copy.copied": "已复制!",
"markdown.codeBlock.copy.failed": "失败",
"markdown.copy": "复制",
} as const

View File

@@ -0,0 +1,109 @@
export const messagingMessages = {
"messageListHeader.sidebar.openSessionListAriaLabel": "打开会话列表",
"messageListHeader.metrics.usedLabel": "已用",
"messageListHeader.metrics.availableLabel": "可用",
"messageListHeader.commandPalette.ariaLabel": "打开命令面板",
"messageListHeader.commandPalette.button": "命令面板",
"messageListHeader.connection.connected": "已连接",
"messageListHeader.connection.connecting": "连接中...",
"messageListHeader.connection.disconnected": "已断开",
"messageSection.empty.logoAlt": "CodeNomad 徽标",
"messageSection.empty.brandTitle": "CodeNomad",
"messageSection.empty.title": "开始对话",
"messageSection.empty.description": "在下方输入消息,或打开命令面板:",
"messageSection.empty.tips.commandPalette": "命令面板",
"messageSection.empty.tips.askAboutCodebase": "询问你的代码库",
"messageSection.empty.tips.attachFilesPrefix": "通过以下方式附加文件",
"messageSection.loading.messages": "正在加载消息...",
"messageSection.scroll.toFirstAriaLabel": "滚动到第一条消息",
"messageSection.scroll.toLatestAriaLabel": "滚动到最新消息",
"messageSection.quote.addAsQuote": "作为引用添加",
"messageSection.quote.addAsCode": "作为代码添加",
"messageTimeline.ariaLabel": "消息时间线",
"messageTimeline.segment.user.label": "你",
"messageTimeline.segment.assistant.label": "助手",
"messageTimeline.segment.compaction.label": "压缩",
"messageTimeline.tool.fallbackLabel": "工具调用",
"messageTimeline.tooltip.userFallback": "用户消息",
"messageTimeline.tooltip.assistantFallback": "助手回复",
"messageTimeline.tooltip.compaction.auto": "自动压缩",
"messageTimeline.tooltip.compaction.manual": "手动压缩",
"messageTimeline.text.filePrefix": "[文件] {filename}",
"messageTimeline.text.attachment": "附件",
"messageBlock.tool.header": "工具调用",
"messageBlock.tool.unknown": "未知",
"messageBlock.tool.goToSession.label": "前往会话",
"messageBlock.tool.goToSession.title": "前往会话",
"messageBlock.tool.goToSession.unavailableTitle": "会话尚不可用",
"messageBlock.compaction.ariaLabel": "会话压缩",
"messageBlock.compaction.autoLabel": "会话已自动压缩",
"messageBlock.compaction.manualLabel": "会话已由你压缩",
"messageBlock.usage.input": "输入",
"messageBlock.usage.output": "输出",
"messageBlock.usage.reasoning": "推理",
"messageBlock.usage.cacheRead": "缓存读取",
"messageBlock.usage.cacheWrite": "缓存写入",
"messageBlock.usage.cost": "费用",
"messageBlock.step.agentLabel": "智能体:{agent}",
"messageBlock.step.modelLabel": "模型:{model}",
"messageBlock.reasoning.thinkingLabel": "思考",
"messageBlock.reasoning.expandAriaLabel": "展开思考",
"messageBlock.reasoning.collapseAriaLabel": "折叠思考",
"messageBlock.reasoning.indicator.hide": "隐藏",
"messageBlock.reasoning.indicator.view": "查看",
"messageBlock.reasoning.detailsAriaLabel": "推理详情",
"codeBlockInline.actions.copy": "复制",
"codeBlockInline.actions.copied": "已复制!",
"messageItem.speaker.you": "你",
"messageItem.speaker.assistant": "助手",
"messageItem.actions.revert": "回退",
"messageItem.actions.revertTitle": "回退到这条消息",
"messageItem.actions.fork": "分叉",
"messageItem.actions.forkTitle": "从这条消息分叉",
"messageItem.actions.copy": "复制",
"messageItem.actions.copyTitle": "复制消息",
"messageItem.actions.copied": "已复制!",
"messageItem.status.queued": "排队中",
"messageItem.status.generating": "正在生成...",
"messageItem.status.sending": "正在发送...",
"messageItem.status.failedToSend": "消息发送失败",
"messageItem.attachment.defaultName": "附件",
"messageItem.attachment.downloadAriaLabel": "下载 {name}",
"messageItem.agentMeta.agentLabel": "智能体:{agent}",
"messageItem.agentMeta.modelLabel": "模型:{model}",
"messageItem.errors.authenticationFallback": "认证错误",
"messageItem.errors.outputLengthExceeded": "消息输出长度超限",
"messageItem.errors.requestAborted": "请求已中止",
"messageItem.errors.unknownFallback": "发生未知错误",
"attachmentChip.removeAriaLabel": "移除附件",
"expandButton.toggleAriaLabel": "切换聊天输入框高度",
"promptInput.placeholder.shell": "运行 shell 命令Esc 退出)...",
"promptInput.placeholder.default": "输入消息、@file、@agent或粘贴图片与文本...",
"promptInput.hints.shell.exit": "退出 shell 模式",
"promptInput.hints.shell.enable": "Shell 模式",
"promptInput.hints.commands": "命令",
"promptInput.history.previousAriaLabel": "上一条 prompt",
"promptInput.history.nextAriaLabel": "下一条 prompt",
"promptInput.overlay.newLine": "换行",
"promptInput.overlay.send": "发送",
"promptInput.overlay.filesAgents": "文件/智能体",
"promptInput.overlay.history": "历史",
"promptInput.overlay.attachments": "• 已附加 {count} 个文件",
"promptInput.overlay.shellModeActive": "Shell 模式已启用",
"promptInput.overlay.press": "按下",
"promptInput.overlay.againToAbort": "再次按下以中止会话",
"promptInput.stopSession.ariaLabel": "停止会话",
"promptInput.stopSession.title": "停止会话",
"promptInput.send.ariaLabel": "发送消息",
"promptInput.send.errorFallback": "发送消息失败",
"promptInput.send.errorTitle": "发送失败",
} as const

View File

@@ -0,0 +1,51 @@
export const remoteAccessMessages = {
"remoteAccess.eyebrow": "远程接管",
"remoteAccess.title": "远程连接到 CodeNomad",
"remoteAccess.subtitle": "使用下面的地址从其他设备打开 CodeNomad。",
"remoteAccess.close": "关闭远程访问",
"remoteAccess.refresh": "刷新",
"remoteAccess.sections.listeningMode.label": "监听模式",
"remoteAccess.sections.listeningMode.help": "通过绑定到所有接口或仅 localhost 来允许或限制远程接管。",
"remoteAccess.toggle.on": "开",
"remoteAccess.toggle.off": "关",
"remoteAccess.toggle.title": "允许其他 IP 连接",
"remoteAccess.toggle.caption.all": "绑定到 0.0.0.0",
"remoteAccess.toggle.caption.local": "绑定到 127.0.0.1",
"remoteAccess.toggle.note": "更改此项需要重启,并会暂时停止所有活动实例。服务器重启后再分享下方地址。",
"remoteAccess.listeningMode.restartConfirm.message": "重启以应用监听模式?这将停止所有正在运行的实例。",
"remoteAccess.listeningMode.restartConfirm.title.all": "对其他设备开放",
"remoteAccess.listeningMode.restartConfirm.title.local": "仅限此设备",
"remoteAccess.listeningMode.restartConfirm.confirmLabel": "立即重启",
"remoteAccess.listeningMode.restartConfirm.cancelLabel": "取消",
"remoteAccess.restart.errorManual": "无法自动重启。请手动重启应用以应用更改。",
"remoteAccess.sections.serverPassword.label": "服务器密码",
"remoteAccess.sections.serverPassword.help": "远程接管需要密码。设置一个易记的密码,以允许其他设备登录。",
"remoteAccess.authStatus.unavailable": "无法获取认证状态。",
"remoteAccess.username": "用户名:{username}",
"remoteAccess.password.status.set": "已为远程访问设置密码。",
"remoteAccess.password.status.unset": "尚未设置易记密码。设置后可允许远程接管登录。",
"remoteAccess.password.actions.cancel": "取消",
"remoteAccess.password.actions.change": "修改密码",
"remoteAccess.password.actions.set": "设置密码",
"remoteAccess.password.form.newPassword": "新密码",
"remoteAccess.password.form.confirmPassword": "确认密码",
"remoteAccess.password.form.placeholder": "至少 8 个字符",
"remoteAccess.password.error.tooShort": "密码至少需要 8 个字符。",
"remoteAccess.password.error.mismatch": "两次输入的密码不一致。",
"remoteAccess.password.save.saving": "正在保存…",
"remoteAccess.password.save.label": "保存密码",
"remoteAccess.sections.addresses.label": "可访问地址",
"remoteAccess.sections.addresses.help": "从另一台设备打开或扫描,以接管控制权。",
"remoteAccess.addresses.loading": "正在加载地址…",
"remoteAccess.addresses.none": "暂时没有可用地址。",
"remoteAccess.address.scope.network": "网络",
"remoteAccess.address.scope.loopback": "回环",
"remoteAccess.address.scope.internal": "内部",
"remoteAccess.address.open": "打开",
"remoteAccess.address.showQr": "显示二维码",
"remoteAccess.address.hideQr": "隐藏二维码",
"remoteAccess.address.qrAlt": "{url} 的二维码",
} as const

View File

@@ -0,0 +1,67 @@
export const sessionMessages = {
"sessionPicker.title": "OpenCode • {folder}",
"sessionPicker.empty.noPrevious": "没有历史会话",
"sessionPicker.resume.title": "继续会话({count}",
"sessionPicker.session.untitled": "未命名",
"sessionPicker.divider.or": "或",
"sessionPicker.new.title": "开始新会话:",
"sessionPicker.agents.loading": "正在加载智能体...",
"sessionPicker.actions.creating": "正在创建...",
"sessionPicker.actions.createSession": "创建会话",
"sessionPicker.actions.cancel": "取消",
"sessionList.header.title": "会话",
"sessionList.session.untitled": "未命名",
"sessionList.status.working": "工作中",
"sessionList.status.compacting": "压缩中",
"sessionList.status.idle": "空闲",
"sessionList.status.needsPermission": "需要权限",
"sessionList.status.needsInput": "需要输入",
"sessionList.expand.collapseAriaLabel": "折叠会话",
"sessionList.expand.expandAriaLabel": "展开会话",
"sessionList.expand.collapseTitle": "折叠",
"sessionList.expand.expandTitle": "展开",
"sessionList.actions.copyId.ariaLabel": "复制会话 ID",
"sessionList.actions.copyId.title": "复制会话 ID",
"sessionList.actions.rename.ariaLabel": "重命名会话",
"sessionList.actions.rename.title": "重命名会话",
"sessionList.actions.delete.ariaLabel": "删除会话",
"sessionList.actions.delete.title": "删除会话",
"sessionList.copyId.success": "已复制会话 ID",
"sessionList.copyId.error": "无法复制会话 ID",
"sessionList.delete.error": "无法删除会话",
"sessionList.rename.error": "无法重命名会话",
"sessionRenameDialog.title": "重命名会话",
"sessionRenameDialog.description.withLabel": "更新“{label}”的标题。",
"sessionRenameDialog.description.default": "为此会话设置新标题。",
"sessionRenameDialog.input.label": "会话名称",
"sessionRenameDialog.input.placeholder": "输入会话名称",
"sessionRenameDialog.actions.cancel": "取消",
"sessionRenameDialog.actions.rename": "重命名",
"sessionRenameDialog.actions.renaming": "正在重命名…",
"sessionView.fallback.sessionNotFound": "未找到会话",
"sessionView.alerts.abortFailed.message": "停止会话失败",
"sessionView.alerts.abortFailed.title": "停止失败",
"sessionView.alerts.revertFailed.message": "回退到消息失败",
"sessionView.alerts.revertFailed.title": "回退失败",
"sessionView.alerts.forkFailed.message": "分叉会话失败",
"sessionView.alerts.forkFailed.title": "分叉失败",
"sessionView.attachments.expandPastedTextAriaLabel": "展开粘贴的文本",
"sessionView.attachments.insertPastedTextTitle": "插入粘贴的文本",
"sessionView.attachments.removeAriaLabel": "移除附件",
"sessionEvents.sessionCompactedToast": "会话 {label} 已被压缩",
"sessionEvents.sessionError.unknown": "未知错误",
"sessionEvents.sessionError.title": "会话错误",
"sessionEvents.sessionError.message": "错误:{message}",
"sessionState.cleanup.deepConfirm.message": "此清理可能较慢,并且可能删除你并不想删除的会话。确定要继续吗?",
"sessionState.cleanup.deepConfirm.title": "深度清理会话",
"sessionState.cleanup.deepConfirm.detail": "深度清理会话将删除所有没有消息的会话、移除已完成的子智能体会话,并清除会话中未使用的分叉。",
"sessionState.cleanup.deepConfirm.confirmLabel": "继续",
"sessionState.cleanup.deepConfirm.cancelLabel": "取消",
"sessionState.cleanup.toast.one": "已清理 {count} 个空白会话",
"sessionState.cleanup.toast.other": "已清理 {count} 个空白会话",
} as const

View File

@@ -0,0 +1,54 @@
export const settingsMessages = {
"instanceServiceStatus.sections.lsp": "LSP 服务器",
"instanceServiceStatus.sections.mcp": "MCP 服务器",
"instanceServiceStatus.sections.plugins": "插件",
"instanceServiceStatus.lsp.loading": "正在加载 LSP 服务器...",
"instanceServiceStatus.lsp.empty": "未检测到 LSP 服务器。",
"instanceServiceStatus.lsp.status.connected": "已连接",
"instanceServiceStatus.lsp.status.error": "错误",
"instanceServiceStatus.mcp.loading": "正在加载 MCP 服务器...",
"instanceServiceStatus.mcp.empty": "未检测到 MCP 服务器。",
"instanceServiceStatus.mcp.toggleAriaLabel": "切换 {name} MCP 服务器",
"instanceServiceStatus.plugins.loading": "正在加载插件...",
"instanceServiceStatus.plugins.empty": "未配置插件。",
"permissionBanner.pendingRequests.one": "{count} 个待处理请求",
"permissionBanner.pendingRequests.other": "{count} 个待处理请求",
"permissionBanner.detail.permission.one": "{count} 项权限",
"permissionBanner.detail.permission.other": "{count} 项权限",
"permissionBanner.detail.question.one": "{count} 个问题",
"permissionBanner.detail.question.other": "{count} 个问题",
"permissionBanner.detail.wrapper": " {detail}",
"agentSelector.placeholder": "选择智能体...",
"agentSelector.badge.subagent": "子智能体",
"agentSelector.none": "无",
"agentSelector.trigger.primary": "智能体:{agent}",
"modelSelector.placeholder.search": "搜索模型...",
"modelSelector.none": "无",
"modelSelector.trigger.primary": "模型:{model}",
"thinkingSelector.variant.default": "默认",
"thinkingSelector.label": "思考:{variant}",
"envEditor.title": "环境变量",
"envEditor.count.one": "{count} 个变量)",
"envEditor.count.other": "{count} 个变量)",
"envEditor.fields.name.placeholder": "变量名",
"envEditor.fields.name.readOnlyTitle": "变量名(只读)",
"envEditor.fields.value.placeholder": "变量值",
"envEditor.actions.remove.title": "移除变量",
"envEditor.actions.add.title": "添加变量",
"envEditor.empty": "未配置环境变量。在上方添加变量以自定义 OpenCode 环境。",
"envEditor.help": "启动实例时,这些变量将在 OpenCode 环境中可用。",
"contextUsagePanel.headings.tokens": "Tokens",
"contextUsagePanel.headings.context": "上下文",
"contextUsagePanel.labels.input": "输入",
"contextUsagePanel.labels.output": "输出",
"contextUsagePanel.labels.cost": "费用",
"contextUsagePanel.labels.used": "已用",
"contextUsagePanel.labels.available": "可用",
"contextUsagePanel.unavailable": "--",
} as const

View File

@@ -0,0 +1,6 @@
export const timeMessages = {
"time.relative.justNow": "刚刚",
"time.relative.daysAgoShort": "{count} 天前",
"time.relative.hoursAgoShort": "{count} 小时前",
"time.relative.minutesAgoShort": "{count} 分钟前",
} as const

View File

@@ -0,0 +1,121 @@
export const toolCallMessages = {
"toolCall.pending.waitingToRun": "等待运行...",
"toolCall.error.label": "错误:",
"toolCall.diff.label": "Diff",
"toolCall.diff.label.withPath": "Diff · {path}",
"toolCall.diff.viewMode.ariaLabel": "Diff 视图模式",
"toolCall.diff.viewMode.split": "分栏",
"toolCall.diff.viewMode.unified": "统一",
"toolCall.diagnostics.title": "诊断",
"toolCall.diagnostics.ariaLabel": "诊断",
"toolCall.diagnostics.ariaLabel.withLabel": "诊断 {label}",
"toolCall.diagnostics.severity.error.short": "ERR",
"toolCall.diagnostics.severity.warning.short": "WARN",
"toolCall.diagnostics.severity.info.short": "INFO",
"toolCall.renderer.toolName.shell": "Shell",
"toolCall.renderer.toolName.fetch": "Fetch",
"toolCall.renderer.toolName.invalid": "无效",
"toolCall.renderer.toolName.plan": "计划",
"toolCall.renderer.toolName.applyPatch": "应用补丁",
"toolCall.renderer.action.working": "处理中...",
"toolCall.renderer.action.writingCommand": "正在编写命令...",
"toolCall.renderer.action.preparingEdit": "正在准备编辑...",
"toolCall.renderer.action.readingFile": "正在读取文件...",
"toolCall.renderer.action.preparingWrite": "正在准备写入...",
"toolCall.renderer.action.preparingPatch": "正在准备补丁...",
"toolCall.renderer.action.planning": "正在规划...",
"toolCall.renderer.action.fetchingFromWeb": "正在从网络获取...",
"toolCall.renderer.action.findingFiles": "正在查找文件...",
"toolCall.renderer.action.searchingContent": "正在搜索内容...",
"toolCall.renderer.action.listingDirectory": "正在列出目录...",
"toolCall.renderer.bash.title.timeout": "超时:{timeout}",
"toolCall.renderer.read.detail.offset": "偏移:{offset}",
"toolCall.renderer.read.detail.limit": "限制:{limit}",
"toolCall.renderer.todo.empty": "暂无计划项。",
"toolCall.renderer.todo.status.pending": "待处理",
"toolCall.renderer.todo.status.inProgress": "进行中",
"toolCall.renderer.todo.status.completed": "已完成",
"toolCall.renderer.todo.status.cancelled": "已取消",
"toolCall.renderer.todo.title.plan": "计划",
"toolCall.renderer.todo.title.creating": "正在创建计划",
"toolCall.renderer.todo.title.completing": "正在完成计划",
"toolCall.renderer.todo.title.updating": "正在更新计划",
"toolCall.permission.status.required": "需要权限",
"toolCall.permission.status.queued": "权限已排队",
"toolCall.permission.requestedDiff.label": "请求的 Diff",
"toolCall.permission.requestedDiff.withPath": "请求的 Diff · {path}",
"toolCall.permission.queuedText": "正在等待更早的权限响应。",
"toolCall.permission.actions.allowOnce": "仅允许一次",
"toolCall.permission.actions.alwaysAllow": "始终允许",
"toolCall.permission.actions.deny": "拒绝",
"toolCall.permission.shortcuts.allowOnce": "仅允许一次",
"toolCall.permission.shortcuts.alwaysAllow": "始终允许",
"toolCall.permission.shortcuts.deny": "拒绝",
"toolCall.permission.errors.unableToUpdate": "无法更新权限",
"permissionApproval.title": "请求",
"permissionApproval.empty": "暂无待处理请求。",
"permissionApproval.kind.permission": "权限",
"permissionApproval.kind.question": "问题",
"permissionApproval.questionCount.one": "{count} 个问题",
"permissionApproval.questionCount.other": "{count} 个问题",
"permissionApproval.status.active": "活动",
"permissionApproval.actions.closeAriaLabel": "关闭",
"permissionApproval.actions.goToSession": "前往会话",
"permissionApproval.actions.loadingSession": "正在加载…",
"permissionApproval.actions.loadSession": "加载会话",
"permissionApproval.actions.allowOnce": "仅允许一次",
"permissionApproval.actions.alwaysAllow": "始终允许",
"permissionApproval.actions.deny": "拒绝",
"permissionApproval.fallbackHint": "加载会话以查看更多信息。",
"permissionApproval.errors.unableToUpdatePermission": "无法更新权限",
"toolCall.question.status.required": "需要回答问题",
"toolCall.question.status.queued": "问题已排队",
"toolCall.question.status.questions": "问题",
"toolCall.question.action.awaitingAnswers": "等待回答...",
"toolCall.question.title.questions": "问题",
"toolCall.question.title.askingQuestions": "正在提问",
"toolCall.question.type.one": "问题",
"toolCall.question.type.other": "问题",
"toolCall.question.number": "Q{number}:",
"toolCall.question.multiple": "多个",
"toolCall.question.custom.title": "输入自定义答案",
"toolCall.question.custom.label": "自定义答案",
"toolCall.question.custom.placeholder": "输入你的答案",
"toolCall.question.actions.submit": "提交",
"toolCall.question.actions.dismiss": "忽略",
"toolCall.question.shortcuts.submit": "提交",
"toolCall.question.shortcuts.dismiss": "忽略",
"toolCall.question.queuedText": "正在等待更早的响应。",
"toolCall.question.validation.answerAll": "请先回答所有问题再提交。",
"toolCall.question.errors.unableToReply": "无法回复",
"toolCall.question.errors.unableToDismiss": "无法忽略",
"toolCall.task.action.delegating": "正在委派...",
"toolCall.task.sections.prompt": "Prompt",
"toolCall.task.sections.steps": "步骤",
"toolCall.task.sections.output": "输出",
"toolCall.task.steps.count": "{count} 个步骤",
"toolCall.task.meta.agentModel": "智能体:{agent} • 模型:{model}",
"toolCall.task.meta.agent": "智能体:{agent}",
"toolCall.task.meta.model": "模型:{model}",
"toolCall.status.pending": "待处理",
"toolCall.status.running": "运行中",
"toolCall.status.completed": "已完成",
"toolCall.status.error": "错误",
"toolCall.status.unknown": "未知",
"toolCall.applyPatch.action.preparing": "正在准备 apply_patch...",
"toolCall.applyPatch.title.withFileCount.one": "{tool}{count} 个文件)",
"toolCall.applyPatch.title.withFileCount.other": "{tool}{count} 个文件)",
"toolCall.applyPatch.fileFallback": "文件 {number}",
} as const