From f404062321ecdc7c350bee16073b3e74cd3c25ae Mon Sep 17 00:00:00 2001 From: Stefan Ernst <24554551+stefan-ernst@users.noreply.github.com> Date: Sat, 7 Nov 2026 22:29:28 +0100 Subject: [PATCH] fix(i18n): correct Simplified Chinese (zh-CN) locale mistranslations (WI-2037) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix machine-translation artifacts across the zh-CN locale: domain-term mistranslations (board, runner, passkey, model, profile, grant, cohort, mermaid, Notion, blocker, system clock, ...), garbled and incomplete sentences, grammar and word-order errors, and terminology drift. Also translate the sections that were still rendering English through the adminOperations fallback (board controls, canned responses, diagnostics, system import, SCM settings, workspace templates, security settings, system catalog permissions, email templates, forms, portal drafts, channel form settings) and normalize 工作流 / 工作区 / 运行器 / 经办人 / 转换 terminology across the catalog. --- frontend/src/lib/locales/zh-CN/actions.js | 2 +- frontend/src/lib/locales/zh-CN/admin.js | 94 ++--- .../src/lib/locales/zh-CN/adminOperations.js | 334 +++++++++++++++++- frontend/src/lib/locales/zh-CN/analytics.js | 18 +- frontend/src/lib/locales/zh-CN/auth.js | 6 +- frontend/src/lib/locales/zh-CN/backfill.js | 22 +- frontend/src/lib/locales/zh-CN/channels.js | 122 +++---- frontend/src/lib/locales/zh-CN/dashboard.js | 2 +- frontend/src/lib/locales/zh-CN/misc.js | 22 +- frontend/src/lib/locales/zh-CN/navigation.js | 10 +- frontend/src/lib/locales/zh-CN/pages.js | 8 +- frontend/src/lib/locales/zh-CN/quality.js | 12 +- .../src/lib/locales/zh-CN/supplemental.js | 170 ++++----- frontend/src/lib/locales/zh-CN/testing.js | 14 +- frontend/src/lib/locales/zh-CN/ui.js | 4 +- frontend/src/lib/locales/zh-CN/workflows.js | 14 +- frontend/src/lib/locales/zh-CN/workspace.js | 22 +- frontend/src/lib/locales/zh-CN/zammad.js | 4 +- 18 files changed, 600 insertions(+), 280 deletions(-) diff --git a/frontend/src/lib/locales/zh-CN/actions.js b/frontend/src/lib/locales/zh-CN/actions.js index 132e4d098..21878f655 100644 --- a/frontend/src/lib/locales/zh-CN/actions.js +++ b/frontend/src/lib/locales/zh-CN/actions.js @@ -1,7 +1,7 @@ export default { actions: { title: '操作', - description: '使用基于规则的行动自动化工作流', + description: '使用基于规则的操作自动化工作流', create: '创建操作', createFirst: '创建您的第一个操作', noActions: '暂无操作', diff --git a/frontend/src/lib/locales/zh-CN/admin.js b/frontend/src/lib/locales/zh-CN/admin.js index 8954809d9..a775d89b1 100644 --- a/frontend/src/lib/locales/zh-CN/admin.js +++ b/frontend/src/lib/locales/zh-CN/admin.js @@ -35,7 +35,7 @@ export default { usersAccess: '用户和权限', communication: '沟通', assetManagement: '资产管理', - system: 'System', + system: '系统', }, adminItems: { customFields: { title: '自定义字段', description: '管理自定义字段定义' }, @@ -46,8 +46,8 @@ export default { configurationSets: { title: '配置集', description: '管理配置集' }, statuses: { title: '状态', description: '管理状态分类和单独状态' }, workflows: { title: '工作流', description: '设计和管理工作流转换' }, - conditionSets: { title: 'Condition Sets', description: 'Define conditions that restrict workflow transitions' }, - approvalSets: { title: 'Approval Sets', description: 'Multi-step approvals that gate transitions out of a status' }, + conditionSets: { title: '条件集', description: '定义限制工作流转换的条件' }, + approvalSets: { title: '批准集', description: '控制状态转换的多步骤批准' }, scmProviders: { title: 'SCM 提供商', description: '配置 GitHub、GitLab、Gitea 和 Bitbucket 集成' }, systemImport: { title: '系统导入', description: '从外部系统导入数据' }, linkTypes: { title: '链接类型', description: '管理事项之间的链接类型' }, @@ -70,7 +70,7 @@ export default { agentTemplates: { title: '智能体模板', description: '覆盖 Agent Studio 创建目录:模板名称、配置类型和说明' }, workItemStaleness: { title: '质量指标', description: '配置多久未活动的工作项会被视为长期无活动' }, actionCapabilities: { title: '操作能力', description: '管理用于自动化操作节点的 Docker 环境、HTTP 客户端和 LLM 连接' }, - diagnostics: { title: 'Diagnostics', description: 'System health: server clock, action failures, and other operational signals' }, + diagnostics: { title: '诊断', description: '系统运行状况:服务器时钟、操作失败和其他操作信号' }, }, attachments: { title: '附件设置', @@ -530,24 +530,24 @@ export default { footerNote: '已连接账户用于以您的名义创建分支和拉取请求。每位用户必须连接自己的账户以确保正确的归属。', }, emailTemplates: { - title: 'Email Templates', - subtitle: 'Customize the subject and body of transactional emails sent by Windshift.', - loading: 'Loading…', - empty: 'No email templates found.', - template: 'Template', - description: 'Description', - status: 'Status', - actions: 'Actions', - active: 'Active', - inactive: 'Inactive', - edit: 'Edit', - editTitle: 'Edit: {name}', - editFallbackTitle: 'Edit template', - subject: 'Subject', - htmlBody: 'HTML body', - textBody: 'Plain-text body', - adminNotes: 'Description (admin notes)', - activeHint: 'Active (uncheck to fall back to the built-in default)', + title: '电子邮件模板', + subtitle: '自定义 Windshift 发送的事务电子邮件的主题和正文。', + loading: '加载中…', + empty: '未找到电子邮件模板。', + template: '模板', + description: '描述', + status: '状态', + actions: '操作', + active: '启用', + inactive: '停用', + edit: '编辑', + editTitle: '编辑:{name}', + editFallbackTitle: '编辑模板', + subject: '主题', + htmlBody: 'HTML 正文', + textBody: '纯文本正文', + adminNotes: '描述(管理员注释)', + activeHint: '启用(取消选中以回退到内置默认值)', localeLabel: "语言", defaultLocale: "默认(所有语言)", translationHint: "您正在编辑此语言的版本。其他语言使用默认模板。", @@ -556,26 +556,26 @@ export default { translationDeleted: "翻译已删除", translationSaveFailed: "保存翻译失败:{error}", translationDeleteFailed: "删除翻译失败:{error}", - availableVariables: 'Available variables', + availableVariables: '可用变量', syntaxHint: - "Templates use Go's html/template syntax. Use {open} .Field {close} for values and {open} range .Items {close}…{open} end {close} to iterate.", - preview: 'Preview', - previewLoading: 'Rendering…', - previewTitle: 'Preview', - previewSubject: 'Subject:', - plainTextVersion: 'Plain-text version', - save: 'Save', - cancel: 'Cancel', - saved: 'Email template saved', - loadFailed: 'Failed to load email templates: {error}', - saveFailed: 'Failed to save: {error}', - previewFailed: 'Preview failed: {error}', + "模板使用 Go 的 html/template 语法。使用 {open} .Field {close} 作为值,并使用 {open} range .Items {close}…{open} end {close} 进行迭代。", + preview: '预览', + previewLoading: '正在渲染…', + previewTitle: '预览', + previewSubject: '主题:', + plainTextVersion: '纯文本版本', + save: '保存', + cancel: '取消', + saved: '电子邮件模板已保存', + loadFailed: '加载电子邮件模板失败:{error}', + saveFailed: '保存失败:{error}', + previewFailed: '预览失败:{error}', labels: { - magic_link: 'Portal magic-link sign-in', - email_verification: 'Email address verification', - invitation: 'New user invitation', - notification_batch: 'Batched notifications', - portal_reply: 'Portal customer reply', + magic_link: '门户免密登录链接', + email_verification: '电子邮件地址验证', + invitation: '新用户邀请', + notification_batch: '批量通知', + portal_reply: '门户客户回复', approval_requested: '门户审批请求', intake_confirmation: '邮件提交回执', }, @@ -602,14 +602,14 @@ export default { descriptionPlaceholder: '此关系类型的可选描述', empty: '未找到链接类型。创建第一个类型以启用事项关系。', defaults: { - tests: { name: '测试', description: '测试用例测试工作事项' }, - implements: { name: '实现', description: '工作事项实现另一个工作事项' }, - dependsOn: { name: '依赖于', description: '工作事项依赖于另一个工作事项' }, + tests: { name: '测试', description: '测试用例测试工作项' }, + implements: { name: '实现', description: '工作项实现另一个工作项' }, + dependsOn: { name: '依赖于', description: '工作项依赖于另一个工作项' }, relatesTo: { name: '关联到', description: '通用双向关系' }, linksTo: { name: '链接到', description: '通用定向链接' }, - duplicates: { name: '重复', description: '工作事项是另一个事项的重复项' }, + duplicates: { name: '重复', description: '工作项是另一个事项的重复项' }, childOf: { name: '子项属于', description: '替代层级关系' }, - page: { name: '页面', description: '工作事项引用知识页面' }, + page: { name: '页面', description: '工作项引用知识页面' }, }, }, statusCategories: { @@ -856,8 +856,8 @@ export default { readOnlyNote: '工作区角色是系统定义的,无法编辑。它们作为参考以了解每个角色可用的权限。', addCustom: 'Add custom role', addCustomTitle: 'New custom role', - labelOnlyBadge: 'Label-only', - permissionBearingBadge: 'Permission-bearing', + labelOnlyBadge: '仅标签', + permissionBearingBadge: '含权限', labelOnlyNotice: 'Custom roles are label-only today. They can be used to route approvals but cannot grant permissions yet.', cannotDeleteSystem: 'System roles cannot be deleted.', deleteConfirm: 'Delete this custom role? Members will lose this label assignment.', diff --git a/frontend/src/lib/locales/zh-CN/adminOperations.js b/frontend/src/lib/locales/zh-CN/adminOperations.js index 4fef945be..358b7495b 100644 --- a/frontend/src/lib/locales/zh-CN/adminOperations.js +++ b/frontend/src/lib/locales/zh-CN/adminOperations.js @@ -4,14 +4,14 @@ export default withEnglishAdminOperations({ settings: { adminOperations: { tabs: { capabilities: '功能', credentials: '凭据', runnerPools: '运行器池' }, agentTemplates: { - title: '智能体模板', subtitle: '覆盖 Agent Studio 创建目录:模板名称、配置类型和说明', addTemplate: '添加模板', empty: '尚未配置覆盖项。Agent Studio 将使用内置默认值。', startFromNew: '从头开始(新建自定义模板)', loadFailed: '无法加载智能体模板:{error}', templateKeyRequired: '必须填写模板键', nameRequired: '必须填写名称', saveFailed: '保存失败:{error}', deleteMessage: '确定删除“{name}”的覆盖项吗?这将恢复默认模板。', editOverride: '编辑模板覆盖项', addOverride: '添加模板覆盖项', startFromDefault: '从默认模板开始', startFromPlaceholder: '覆盖内置模板或创建新模板', startFromHelp: '选择默认模板会用您的修改覆盖它;“从头开始”会创建全新模板。', builtInOverride: '此覆盖项将替换内置模板“{name}”。', namePlaceholder: '例如:软件工程师', instructionsPlaceholder: '此模板的系统提示词或角色设定', + title: '智能体模板', subtitle: '覆盖 Agent Studio 创建目录:模板名称、配置类型和说明', addTemplate: '添加模板', empty: '尚未配置覆盖项。Agent Studio 将使用内置默认值。', startFromNew: '从头开始(新建自定义模板)', loadFailed: '无法加载智能体模板:{error}', templateKeyRequired: '必须填写模板键', nameRequired: '必须填写名称', saveFailed: '保存失败:{error}', deleteMessage: '确定删除“{name}”的覆盖项吗?这将恢复默认模板。', editOverride: '编辑模板覆盖项', addOverride: '添加模板覆盖项', startFromDefault: '从默认模板开始', startFromPlaceholder: '覆盖内置模板或创建新模板', startFromHelp: '选择默认模板会用您的修改覆盖它;“从头开始”会创建全新模板。', builtInOverride: '此覆盖项将替换内置模板“{name}”。', namePlaceholder: '例如:软件工程师', instructionsPlaceholder: '此模板的系统提示词或角色设定', standard: '标准', coding: '编码', key: '键', profileType: '角色类型', templateKey: '模板键', templateKeyPlaceholder: '例如 software_engineer', instructions: '说明', }, llmConnections: { - title: 'AI 连接', subtitle: '配置用于智能功能的 AI 模型提供商', addConnection: '添加连接', empty: '尚未配置 AI 连接。', addFirst: '添加第一个连接', referenced: '已被启用的功能引用', visionTitle: '此模型可以分析工作项中的图片', noVisionTitle: '此模型仅处理文本,无法查看图片', addTitle: '添加 AI 连接', editTitle: '编辑 AI 连接', disableWarning: '禁用此连接会使依赖它的 LLM 操作功能在运行时失效。', disableWarningHelp: '引用方:{capabilities}。这些功能仍显示为已启用,但会持续失败,直到重新启用连接或改用其他连接。', namePlaceholder: '例如:OpenRouter Claude Sonnet', selectProvider: '选择提供商…', keyConfigured: '密钥已配置(留空可保留)', enterApiKey: '输入 API 密钥', searchModels: '搜索模型或输入 ID…', typeModelId: '输入模型 ID 或点击刷新', supportsImages: '支持图片输入', lastAttemptFailed: '上次尝试失败:{error}', enterBaseUrlHelp: '输入基础 URL 以获取模型,或直接手动输入模型 ID。', noCachedModels: '没有缓存模型。点击刷新从 {provider} 获取,或手动输入模型 ID。', selectModel: '选择模型…', providerConfig: '提供商配置(JSON)', providerConfigHelp: '可选的顶层字段会合并到提供商请求中。Windshift 的现有字段优先。', visionAuto: '自动(根据模型检测)', visionOn: '开启(强制图片模式)', visionOff: '关闭(强制纯文本)', visionHelp: '控制编码智能体能否向模型发送图片。自动模式使用已知模型能力;本地或自定义模型可手动覆盖。', maxOutputTokens: '最大输出 token 数', maxOutputTokensPlaceholder: '例如 65536', maxOutputTokensHelp: '覆盖模型目录中为此连接设置的输出 token 上限。留空则使用模型默认值。超过模型实际上限的值会被提供商拒绝,因此仅在确认模型支持时才调高。', rateHint: '每 100 万令牌 {prompt}/{completion}', refreshedNow: '刚刚刷新', refreshedMinutes: '{count} 分钟前刷新', refreshedHours: '{count} 小时前刷新', refreshedDays: '{count} 天前刷新', modelsFetched: '已从 {provider} 获取 {count} 个模型', refreshFailed: '无法刷新模型', loadFailed: '无法加载 AI 连接', oneCapability: '1 个已启用操作功能:{name}', manyCapabilities: '{count} 个已启用操作功能:{names}', deleteTitle: '删除 AI 连接', deleteMessage: '确定删除 {name} 吗?此操作无法撤销。', deleteImpact: '此连接被 {capabilities} 引用。相关功能将停止工作。', deleted: 'AI 连接已删除', deleteFailed: '无法删除连接', configObject: '提供商配置必须是 JSON 对象', configJson: '提供商配置必须是有效的 JSON', created: 'AI 连接已创建', createFailed: '无法创建连接', updated: 'AI 连接已更新', updateFailed: '无法更新连接', testPassed: '连接测试通过', testFailed: '连接测试失败', + title: 'AI 连接', subtitle: '配置用于智能功能的 AI 模型提供商', addConnection: '添加连接', empty: '尚未配置 AI 连接。', addFirst: '添加第一个连接', referenced: '已被启用的功能引用', visionTitle: '此模型可以分析工作项中的图片', noVisionTitle: '此模型仅处理文本,无法查看图片', addTitle: '添加 AI 连接', editTitle: '编辑 AI 连接', disableWarning: '禁用此连接会使依赖它的 LLM 操作功能在运行时失效。', disableWarningHelp: '引用方:{capabilities}。这些功能仍显示为已启用,但会持续失败,直到重新启用连接或改用其他连接。', namePlaceholder: '例如:OpenRouter Claude Sonnet', selectProvider: '选择提供商…', keyConfigured: '密钥已配置(留空可保留)', enterApiKey: '输入 API 密钥', searchModels: '搜索模型或输入 ID…', typeModelId: '输入模型 ID 或点击刷新', supportsImages: '支持图片输入', lastAttemptFailed: '上次尝试失败:{error}', enterBaseUrlHelp: '输入基础 URL 以获取模型,或直接手动输入模型 ID。', noCachedModels: '没有缓存模型。点击刷新从 {provider} 获取,或手动输入模型 ID。', selectModel: '选择模型…', providerConfig: '提供商配置(JSON)', providerConfigHelp: '可选的顶层字段会合并到提供商请求中。Windshift 的现有字段优先。', visionAuto: '自动(根据模型检测)', visionOn: '开启(强制图片模式)', visionOff: '关闭(强制纯文本)', visionHelp: '控制编码智能体能否向模型发送图片。自动模式使用已知模型能力;本地或自定义模型可手动覆盖。', maxOutputTokens: '最大输出 token 数', maxOutputTokensPlaceholder: '例如 65536', maxOutputTokensHelp: '覆盖模型目录中为此连接设置的输出 token 上限。留空则使用模型默认值。超过模型实际上限的值会被提供商拒绝,因此仅在确认模型支持时才调高。', rateHint: '每 100 万令牌 {prompt}/{completion}', refreshedNow: '刚刚刷新', refreshedMinutes: '{count} 分钟前刷新', refreshedHours: '{count} 小时前刷新', refreshedDays: '{count} 天前刷新', modelsFetched: '已从 {provider} 获取 {count} 个模型', refreshFailed: '无法刷新模型', loadFailed: '无法加载 AI 连接', oneCapability: '1 个已启用操作功能:{name}', manyCapabilities: '{count} 个已启用操作功能:{names}', deleteTitle: '删除 AI 连接', deleteMessage: '确定删除 {name} 吗?此操作无法撤销。', deleteImpact: '此连接被 {capabilities} 引用。相关功能将停止工作。', deleted: 'AI 连接已删除', deleteFailed: '无法删除连接', configObject: '提供商配置必须是 JSON 对象', configJson: '提供商配置必须是有效的 JSON', created: 'AI 连接已创建', createFailed: '无法创建连接', updated: 'AI 连接已更新', updateFailed: '无法更新连接', testPassed: '连接测试通过', testFailed: '连接测试失败', provider: '提供商', model: '模型', default: '默认', vision: '视觉', noVision: '无视觉', testConnection: '测试连接', baseUrl: '基础 URL', apiKey: 'API 密钥', textOnly: '仅文本', cachedCount: '已缓存 {count} 个', refreshing: '正在刷新…', visionSupport: '视觉支持', defaultConnection: '默认连接', neverRefreshed: '从未刷新', connectionSuccessful: '连接成功', }, - actionCapabilities: { availableAll: '所有工作区均可用', availableAllHelp: '任何工作区的操作都可以引用此功能。', restrict: '限制到指定工作区', restrictHelp: '只有下方选择的工作区可以引用此功能。', noWorkspaces: '没有可用的工作区。', useCredential: '使用身份验证凭据', globalCredentialHelp: '全局功能只能引用全局凭据。', workspaceCredentialHelp: '工作区功能可以引用全局凭据或已为其工作区授权的凭据。', scheme: '方案(仅 Bearer 令牌)', additionalHeaders: '其他机密请求头', addSecretHeader: '添加机密请求头', additionalHeadersHelp: '适用于需要多个机密请求头的 API。每一行都会在请求时解析凭据。', defaultHeadersHelp: '仅限非机密请求头。身份验证令牌应在下方配置。' }, - actionCredentials: { title: '操作凭据', subtitle: '供 HTTP 功能引用的加密 API 令牌。机密值只能写入,保存后无法读回。', add: '添加凭据', addFirst: '添加第一个凭据', empty: '尚无凭据。', basicAuth: '基本认证(用户名:密码)', customHeader: '自定义请求头值', loadFailed: '无法加载操作凭据', nameSecretRequired: '名称和机密值均为必填项', workspaceRequired: '请至少选择一个工作区,或允许所有工作区使用。', created: '凭据已创建({prefix})', createFailed: '无法创建凭据', updateFailed: '无法更新凭据', rotated: '机密值已替换({prefix})', rotateFailed: '无法替换机密值', deleteMessage: '删除 {name}?仍引用它的功能将在运行时失败。', deleteFailed: '无法删除凭据', storedSecret: '已存储,绝不会完整显示', availableAll: '所有工作区均可用', availableAllHelp: '任何工作区都可以使用此凭据。', restrict: '限制到指定工作区', restrictHelp: '只有下方选择的工作区可以使用此凭据。', noWorkspaces: '没有可用的工作区。', secretPlaceholder: '输入令牌、API 密钥或用户名:密码', secretHelp: '以加密方式存储,不会再次显示;需要时可替换。', metadata: '元数据(JSON,可选)', metadataHelp: '仅限非机密元数据。token、secret、password 等键会被拒绝。', storedRotate: '已存储({prefix})— 使用“替换”设置新值。', rotateTitle: '替换机密值 — {name}', rotateHelp: '输入新的机密值。旧值会立即被替换且无法恢复。' }, - runnerPools: { title: '运行器池', subtitle: '执行编码智能体任务的远程运行器池。创建注册令牌即可添加运行器主机。', empty: '没有运行器池', emptyDescription: '先创建池,再创建注册令牌以连接运行器主机。', registrationTokens: '注册令牌 — {name}', noTokens: '尚无令牌', runnersForPool: '运行器 — {name}', noRunners: '尚未注册运行器', newPoolTitle: '新建运行器池', maxConcurrentRuns: '最大并发运行数', zeroUnlimited: '0 = 无限制', availableAll: '所有工作区均可用', mintTitle: '创建注册令牌', expiresHours: '有效期(小时)', zeroNeverExpires: '0 = 永不过期(撤销后停用)', addHostTitle: '添加运行器主机', installHelp: '在运行器主机上执行此命令。它会使用服务器 URL、匹配的镜像标签和新令牌安装并启动运行器容器。', manualPrefix: '改为手动设置?将令牌设为', setTokenPrefix: '将令牌设为', tokenOnce: '并配置到运行器主机。令牌仅显示一次,之后无法再次获取。', loadFailed: '无法加载运行器池', tokensLoadFailed: '无法加载令牌', runnersLoadFailed: '无法加载运行器实例', created: '运行器池已创建', createFailed: '无法创建运行器池', mintFailed: '无法创建令牌', revokeTokenTitle: '撤销注册令牌', revokeTokenMessage: '撤销令牌 {prefix}…?运行器将无法再用它注册。', revokeTokenFailed: '无法撤销令牌', revokeRunnerMessage: '移除运行器 {name}?它必须重新注册才能再次加入。', revokeRunnerFailed: '无法移除运行器', copied: '已复制到剪贴板', copyFailed: '复制失败,请手动选择并复制' }, + actionCapabilities: { availableAll: '所有工作区均可用', availableAllHelp: '任何工作区的操作都可以引用此功能。', restrict: '限制到指定工作区', restrictHelp: '只有下方选择的工作区可以引用此功能。', noWorkspaces: '没有可用的工作区。', useCredential: '使用身份验证凭据', globalCredentialHelp: '全局功能只能引用全局凭据。', workspaceCredentialHelp: '工作区功能可以引用全局凭据或已为其工作区授权的凭据。', scheme: '方案(仅 Bearer 令牌)', additionalHeaders: '其他机密请求头', addSecretHeader: '添加机密请求头', additionalHeadersHelp: '适用于需要多个机密请求头的 API。每一行都会在请求时解析凭据。', defaultHeadersHelp: '仅限非机密请求头。身份验证令牌应在下方配置。', workspaceScope: '工作区范围', credential: '凭据', headerName: '请求头名称' }, + actionCredentials: { title: '操作凭据', subtitle: '供 HTTP 功能引用的加密 API 令牌。机密值只能写入,保存后无法读回。', add: '添加凭据', addFirst: '添加第一个凭据', empty: '尚无凭据。', basicAuth: '基本认证(用户名:密码)', customHeader: '自定义请求头值', loadFailed: '无法加载操作凭据', nameSecretRequired: '名称和机密值均为必填项', workspaceRequired: '请至少选择一个工作区,或允许所有工作区使用。', created: '凭据已创建({prefix})', createFailed: '无法创建凭据', updateFailed: '无法更新凭据', rotated: '机密值已替换({prefix})', rotateFailed: '无法替换机密值', deleteMessage: '删除 {name}?仍引用它的功能将在运行时失败。', deleteFailed: '无法删除凭据', storedSecret: '已存储,绝不会完整显示', availableAll: '所有工作区均可用', availableAllHelp: '任何工作区都可以使用此凭据。', restrict: '限制到指定工作区', restrictHelp: '只有下方选择的工作区可以使用此凭据。', noWorkspaces: '没有可用的工作区。', secretPlaceholder: '输入令牌、API 密钥或用户名:密码', secretHelp: '以加密方式存储,不会再次显示;需要时可替换。', metadata: '元数据(JSON,可选)', metadataHelp: '仅限非机密元数据。token、secret、password 等键会被拒绝。', storedRotate: '已存储({prefix})— 使用“替换”设置新值。', rotateTitle: '替换机密值 — {name}', rotateHelp: '输入新的机密值。旧值会立即被替换且无法恢复。', bearerToken: 'Bearer 令牌', apiKey: 'API 密钥', masked: '已掩码', updated: '凭据已更新', secret: '机密值', scope: '范围', noSecret: '无机密值', allWorkspaces: '所有工作区', workspaceCount: '工作区:{count}', rotateSecret: '替换机密值', workspaceScope: '工作区范围', edit: '编辑凭据', newSecret: '新机密值', rotate: '替换', deleteTitle: '删除凭据', deleted: '凭据已删除' }, + runnerPools: { title: '运行器池', subtitle: '执行编码智能体任务的远程运行器池。创建注册令牌即可添加运行器主机;请参阅 RUNNER 设置文档。', empty: '没有运行器池', emptyDescription: '先创建池,再创建注册令牌以连接运行器主机。', registrationTokens: '注册令牌 — {name}', noTokens: '尚无令牌', runnersForPool: '运行器 — {name}', noRunners: '尚未注册运行器', newPoolTitle: '新建运行器池', maxConcurrentRuns: '最大并发运行数', zeroUnlimited: '0 = 无限制', availableAll: '所有工作区均可用', mintTitle: '创建注册令牌', expiresHours: '有效期(小时)', zeroNeverExpires: '0 = 永不过期(撤销后停用)', addHostTitle: '添加运行器主机', installHelp: '在运行器主机上执行此命令。它会使用服务器 URL、匹配的镜像标签和新令牌安装并启动运行器容器。', manualPrefix: '改为手动设置?将令牌设为', setTokenPrefix: '将令牌设为', tokenOnce: '并配置到运行器主机。令牌仅显示一次,之后无法再次获取。', loadFailed: '无法加载运行器池', tokensLoadFailed: '无法加载令牌', runnersLoadFailed: '无法加载运行器实例', created: '运行器池已创建', createFailed: '无法创建运行器池', mintFailed: '无法创建令牌', revokeTokenTitle: '撤销注册令牌', revokeTokenMessage: '撤销令牌 {prefix}…?运行器将无法再用它注册。', revokeTokenFailed: '无法撤销令牌', revokeRunnerMessage: '移除运行器 {name}?它必须重新注册才能再次加入。', revokeRunnerFailed: '无法移除运行器', copied: '已复制到剪贴板', copyFailed: '复制失败,请手动选择并复制', pool: '池', maxConcurrent: '最大并发数', token: '令牌', expires: '过期时间', runner: '运行器', registered: '已注册', lastHeartbeat: '最后心跳', unlimited: '无限制', mintToken: '创建令牌', never: '从不', revokeToken: '撤销令牌', revokeRunner: '移除运行器', newPool: '新建池', createPool: '创建池', descriptionOptional: '描述(可选)', revoked: '已撤销', expired: '已过期', active: '活跃', online: '在线', stale: '长期无活动', unknown: '未知', runnerRevoked: '运行器已移除', revokeRunnerTitle: '移除运行器', revoke: '撤销', tokenRevoked: '令牌已撤销' }, } }, workspaceMembers: { invalidWorkspace: '工作区无效。', loadFailed: '无法加载工作区成员。', addMemberFailed: '无法添加成员:{error}', addGroupFailed: '无法添加用户组:{error}', @@ -30,11 +30,331 @@ export default withEnglishAdminOperations({ }, integrations: { directions: { outbound: '出站', inbound: '入站', outboundDescription: 'Windshift 主动连接的应用。添加 OAuth 凭据以读取 Notion 或 Confluence 等外部服务的数据。', inboundDescription: '代表用户连接 Windshift 的应用。只需注册一次第三方应用,用户随后通过 OAuth 2.0 和 PKCE 授权。' }, - providers: { loadFailed: '无法加载集成提供商', saveFailed: '无法保存提供商', deleteMessage: '这会删除集成提供商并断开所有用户的连接。', deleteFailed: '无法删除提供商', namePlaceholder: '我的 Notion 集成' }, - oauthClients: { title: 'OAuth 客户端', subtitle: '注册使用 OAuth 2.0 和 PKCE 授权 Windshift 用户并创建用户级 API 令牌的第三方应用。', empty: '尚未注册 OAuth 客户端', emptyDescription: '点击“注册客户端”添加第三方应用。', loadFailed: '无法加载 OAuth 客户端', updated: 'OAuth 客户端已更新', publicCreated: '公共 OAuth 客户端已创建', saveFailed: '无法保存 OAuth 客户端', rotateTitle: '替换“{name}”的机密值?', rotateMessage: '旧机密值会立即失效。现有令牌可继续使用至过期;后续使用旧机密值的令牌交换会失败。', rotateFailed: '无法替换机密值', deleteMessage: '为此客户端签发的所有访问和刷新令牌都会立即撤销。已连接用户需要重新连接。', deleted: 'OAuth 客户端已删除', deleteFailed: '无法删除 OAuth 客户端', scopeHelp: '签发的访问令牌是用户级 Windshift API 令牌。它继承请求用户的权限,并受所选范围限制。', redirectCount: '重定向 URI:{count}', rotateSecret: '替换客户端机密值', editTitle: '编辑 OAuth 客户端', registerTitle: '注册 OAuth 客户端', confidential: '机密客户端(服务器到服务器,有机密值)', public: '公共客户端(仅 PKCE,无机密值)', clientTypeHelp: '机密客户端在服务器端存储 client_secret。公共客户端每次交换令牌都必须使用 PKCE。', redirectHelp: '每行输入一个 URI。授权请求中的 redirect_uri 必须与其中一个完全匹配。', copySecretNow: '立即复制此机密值', secretWarning: '客户端机密值只显示一次。Windshift 仅存储其 bcrypt 哈希,请在关闭前复制;如果丢失,请替换它。' }, + providers: { loadFailed: '无法加载集成提供商', saveFailed: '无法保存提供商', deleteMessage: '这会删除集成提供商并断开所有用户的连接。', deleteFailed: '无法删除提供商', namePlaceholder: '我的 Notion 集成', updated: '提供商已更新', created: '提供商已创建', deleteTitle: '删除“{name}”?', deleted: '提供商已删除', oauthConfigured: 'OAuth 已配置', slug: '标识' }, + oauthClients: { title: 'OAuth 客户端', subtitle: '注册使用 OAuth 2.0 和 PKCE 授权 Windshift 用户并创建用户级 API 令牌的第三方应用。', empty: '尚未注册 OAuth 客户端', emptyDescription: '点击“注册客户端”添加第三方应用。', loadFailed: '无法加载 OAuth 客户端', updated: 'OAuth 客户端已更新', publicCreated: '公共 OAuth 客户端已创建', saveFailed: '无法保存 OAuth 客户端', rotateTitle: '替换“{name}”的机密值?', rotateMessage: '旧机密值会立即失效。现有令牌可继续使用至过期;后续使用旧机密值的令牌交换会失败。', rotateFailed: '无法替换机密值', deleteTitle: '删除“{name}”?', deleteMessage: '为此客户端签发的所有访问和刷新令牌都会立即撤销。已连接用户需要重新连接。', deleted: 'OAuth 客户端已删除', deleteFailed: '无法删除 OAuth 客户端', scopeHelp: '签发的访问令牌是用户级 Windshift API 令牌。它继承请求用户的权限,并受所选范围限制。', redirectCount: '重定向 URI:{count}', rotateSecret: '替换客户端机密值', editTitle: '编辑 OAuth 客户端', registerTitle: '注册 OAuth 客户端', confidential: '机密客户端(服务器到服务器,有机密值)', public: '公共客户端(仅 PKCE,无机密值)', clientTypeHelp: '机密客户端在服务器端存储 client_secret。公共客户端每次交换令牌都必须使用 PKCE。', redirectHelp: '每行输入一个 URI。授权请求中的 redirect_uri 必须与其中一个完全匹配。', copySecretNow: '立即复制此机密值', secretWarning: '客户端机密值只显示一次。Windshift 仅存储其 bcrypt 哈希,请在关闭前复制;如果丢失,请替换它。', template: '模板', oauthCallback: 'OAuth 回调', registerClient: '注册客户端', clientId: '客户端 ID', clientSecret: '客户端密钥', secretSet: '已设置机密值', secretMissing: '缺少机密值', deleteClient: '删除客户端', displayName: '显示名称', displayNamePlaceholder: '例如 Docmost', slug: '标识', clientType: '客户端类型', redirectUris: '重定向 URI', allowedScopes: '允许的范围', register: '注册', scopeCount: '范围:{count}' }, }, systemCatalog: { statuses: { open: '待处理', inProgress: '进行中', done: '已完成' }, statusCategories: { toDo: '待办', inProgress: '进行中', done: '已完成' }, + permissions: { + system_admin: { name: '系统管理员', description: '完整的系统管理访问权限' }, + workspace_create: { name: '创建工作区', description: '可以创建新工作区' }, + milestone_create: { name: '管理全局里程碑', description: '可以创建和管理在所有工作区可见的全局里程碑' }, + iteration_manage: { name: '管理全局迭代', description: '可以创建和管理在所有工作区可见的全局迭代' }, + user_list: { name: '列出用户', description: '可以查看用户目录' }, + asset_manage: { name: '管理资源集', description: '可以创建和管理资源集' }, + customers_manage: { name: '管理客户', description: '可以管理客户组织和门户客户' }, + project_manage: { name: '管理时间项目', description: '可以管理所有时间项目和工时记录' }, + workspace_admin: { name: '管理工作区', description: '对工作区的完整管理访问权限,包括设置和配置' }, + item_view: { name: '查看工作区和事项', description: '可以查看工作区和工作项' }, + item_create: { name: '创建事项', description: '可以在工作区中创建工作项' }, + item_edit: { name: '编辑事项', description: '可以在工作区中编辑工作项' }, + item_delete: { name: '删除事项', description: '可以在工作区中删除工作项' }, + item_comment: { name: '添加评论并编辑自己的评论', description: '可以添加评论并编辑自己的评论' }, + comment_edit_others: { name: '编辑他人的评论', description: '可以编辑其他用户创建的评论' }, + test_view: { name: '查看测试', description: '可以查看测试用例、测试运行和测试结果' }, + test_execute: { name: '执行测试', description: '可以执行测试运行并记录测试结果' }, + test_manage: { name: '管理测试', description: '可以创建、编辑和删除测试用例、测试集和文件夹' }, + action_manage: { name: '管理操作', description: '可以创建、编辑、删除和执行工作区操作' }, + action_credential_manage: { name: '管理操作凭据', description: '可以创建、替换和删除工作区范围的操作凭据' }, + action_set_actor: { name: '设置操作执行者', description: '可以以其他用户身份运行操作,包括跨工作区' }, + teams_manage: { name: '管理团队', description: '可以创建、编辑和删除团队' }, + public_board_manage: { name: '管理公开看板', description: '可以将集合设为公开并配置公开看板共享' }, + }, + }, + boardControls: { + groupBy: '分组依据', + groupByValue: '分组依据:{name}', + sortBy: '排序依据', + sortBubble: '排序:气泡', + rankMode: '排名模式', + rankModeDescription: '手动拖放排序', + bubbleMode: '气泡模式', + bubbleModeDescription: '最近活跃的卡片会浮到顶部', + rightmostColumn: '最右侧列', + noSwimlanes: '无泳道', + noSwimlanesDescription: '将所有事项显示为普通卡片', + hideColumnSwimlanes: '隐藏 {name} 泳道', + groupOutsideColumnWithType: '仅在 {column} 之外对 {type} 事项分组', + groupOutsideColumn: '仅在 {column} 之外对事项分组', + hiddenCount: '已隐藏 {count} 个', + useAsSwimlanes: '将这些事项用作泳道', + milestoneSwimlanes: '里程碑泳道', + milestoneSwimlanesDescription: '按里程碑对卡片分组', + configureMilestones: '配置里程碑泳道', + configureMilestonesDescription: '选择全局里程碑和已完成里程碑', + showCompletedMilestones: '显示已完成的里程碑', + showCompletedMilestonesHint: '已隐藏的已完成里程碑上的卡片仍会显示在统一的已完成里程碑泳道中。', + showOpenFromCompletedMilestones: '显示已完成里程碑中的未解决事项', + showOpenFromCompletedMilestonesHint: '将仍分配给已完成或已取消里程碑的未解决事项集中到专用泳道,以便将其移到正确的里程碑。', + openFromCompletedMilestones: '已完成里程碑中的未解决事项', + globalMilestones: '全局里程碑', + globalMilestonesSelected: '已选择 {count} 个', + globalMilestonesHint: '全局里程碑在所有工作区之间共享;只有选中的里程碑会保留空泳道。带有卡片的里程碑始终显示。', + noGlobalMilestones: '没有可用的全局里程碑。', + completedMilestones: '已完成的里程碑', + milestoneSwimlanesSaved: '里程碑泳道设置已保存', + completedLabel: '已完成:{value}', + completedAll: '显示全部', + completedAllDescription: '加载所有已完成事项', + completedLastDay: '最近一天', + completedLastDayDescription: '最近 24 小时内有活动的已完成事项', + completedLastWeek: '最近一周', + completedLastWeekDescription: '最近 7 天内有活动的已完成事项', + completedLimit: '限制为', + completedLimitDescription: '仅加载最新的已完成事项', + completedNone: '隐藏已完成', + completedNoneDescription: '不在此看板加载已完成工作', + completedLatestFifty: '最近 50 项', + completedCustom: '自定义', + completedVisibilitySaved: '已完成工作可见性已保存', + }, + systemImport: { + title: '系统导入', + subtitle: '从 Jira Cloud 和其他外部系统导入数据', + newImport: '新建导入', + savedConnections: '已保存的连接', + savedConnectionsDescription: '管理用于导入数据的 Jira Cloud 连接。', + noConnections: '尚无已保存的连接。开始导入即可连接 Jira Cloud。', + lastUsed: '上次使用', + deleteConnection: '移除连接', + deleteConnectionMessage: '移除此连接?导入的数据和导入历史将保留。此操作无法撤销。', + connectionDeleted: '连接已移除', + updateToken: '更新令牌', + updateTokenTitle: '更新 Jira 连接', + updateTokenDescription: '替换已存储的凭据。Windshift 会在保存前用 Jira 验证新令牌。', + connectionUpdated: '连接已更新', + importHistory: '导入历史', + importHistoryDescription: '以往导入的状态和结果', + noImports: '尚无导入。开始导入即可在此查看其历史。', + instance: '实例', + scope: '范围', + started: '开始时间', + completed: '已完成', + projects: '项目', + workspaceCount: '{count} 个工作区', + workspaceCount_one: '{count} 个工作区', + workspaceCount_other: '{count} 个工作区', + itemCount: '{count} 个事项', + itemCount_one: '{count} 个事项', + itemCount_other: '{count} 个事项', + statuses: { completed: '已完成', running: '运行中', failed: '失败', data_deleted: '数据已删除', queued: '已排队' }, + phases: { initializing: '正在初始化', importing_project: '正在导入项目', completed: '已完成', running: '运行中' }, + scopes: { workItems: '工作项' }, + deleteData: '删除数据', + unavailable: '不可用', + removeFromList: '从列表中移除', + importRemovedFromHistory: '已从历史中移除导入记录', + dataDeleted: '已删除导入的 Jira 数据。您可以重新运行导入。', + deleteImportedTitle: '删除导入的 Jira 数据', + deleteWarningTitle: '这可能会删除多个 Windshift 工作区。', + deleteWarningDescription: 'Windshift 将删除此 Jira 导入记录的所有内容,包括映射的工作区、事项、评论、附件、链接、里程碑和导入元数据。此操作无法撤销。', + jobId: '作业 ID', + importedScope: '已导入的数据', + workspacesToRemove: '可能被删除的工作区', + typeJobId: '输入作业 ID 以确认删除', + deleteImportedData: '删除导入的数据', + }, + scmSettings: { + title: '源代码管理', + subtitle: '连接 SCM 提供商并将仓库链接到此工作区', + availableProviders: '可用的提供商', + connectedProviders: '已连接的提供商', + connected: '已连接', + connect: '连接', + reconnect: '重新连接', + noProviders: '未配置 SCM 提供商', + noProvidersDescription: '请系统管理员在管理面板中配置 SCM 提供商。', + noRepositories: '尚未链接仓库', + linkRepositories: '链接仓库', + repositoryCount: '{count} 个仓库', + repositoryCount_one: '{count} 个仓库', + repositoryCount_other: '{count} 个仓库', + repositorySettings: '仓库设置', + tagPattern: '标签模式', + branchPattern: '分支模式', + tags: '标签', + branches: '分支', + patternsHelp: '这些通配模式驱动里程碑自动化。匹配的标签会推进里程碑;匹配的分支会创建规划里程碑。', + repoSettingsSaved: '仓库设置已保存', + repoSettingsSaveFailed: '无法保存仓库设置', + loadFailed: '无法加载 SCM 设置', + oauthFailed: '无法启动 OAuth 重新连接', + oauthConnected: '源代码管理账户已连接', + oauthFailedCallback: '源代码管理连接失败', + connectedTo: '已连接到 {name}', + connectFailed: '无法连接提供商', + disconnectMessage: '断开 {name}?这也会取消链接所有仓库。', + disconnectedFrom: '已断开与 {name} 的连接', + disconnectFailed: '无法断开提供商', + linkedRepositories: '已链接 {count} 个仓库', + linkedRepositories_one: '已链接 {count} 个仓库', + linkedRepositories_other: '已链接 {count} 个仓库', + unlinkMessage: '取消链接 {name}?', + unlinkedRepository: '已取消链接 {name}', + unlinkFailed: '无法取消链接仓库', + gitlabWebhook: 'GitLab Webhook', + webhookHelp: '将回调 URL 和密钥添加到 GitLab 项目 Webhook。支持 push、tag、合并请求、note 和 release 事件。', + configureWebhook: '生成 Webhook 详情', + rotateWebhookSecret: '替换密钥', + webhookSecretOnce: '请立即复制此密钥,之后将不再显示。', + webhookSecretRotated: '已生成 GitLab Webhook 密钥', + webhookLoadFailed: '无法加载 GitLab Webhook 设置', + webhookRotateFailed: '无法生成 GitLab Webhook 密钥', + }, + workspaceTemplates: { + title: '工作项模板', + subtitle: '用于新事项的可复用描述。创建事项时可以选择模板,也可以将模板分配给事项类型。', + newTemplate: '新建模板', + editTemplate: '编辑模板', + empty: '暂无模板', + emptyDescription: '创建模板以让新事项具有一致的结构。', + modeLabel: '模式', + mode: { selectable: '可选 — 创建事项时可用', mandatory: '强制 — 应用于一个事项类型' }, + modeValue: { selectable: '可选', mandatory: '强制' }, + itemTypes: '事项类型', + allTypes: '所有类型', + allItemTypes: '所有事项类型', + selectItemType: '选择事项类型', + targetTypesOptional: '事项类型(可选;留空表示全部)', + targetTypeRequired: '事项类型(恰好选择一个)', + descriptionBody: '描述(Markdown)', + bodyPlaceholder: '## 复现步骤\n\n1. …', + mandatoryTypeError: '强制模板必须恰好针对一个事项类型。', + createTemplate: '创建模板', + deleteTemplate: '删除模板', + deleteTitle: '删除模板?', + deleteMessage: '删除“{name}”?创建新事项时将不再提供此模板。现有事项不会改变。', + loadFailed: '无法加载模板', + saveFailed: '无法保存模板', + deleteFailed: '无法删除模板', + created: '模板已创建', + updated: '模板已更新', + deleted: '模板已删除', + }, + cannedResponses: { + title: '预设回复', + subtitle: '可复用的回复片段,支持客服插入到评论中。私密片段保持内部可见,绝不会发送给门户客户。', + new: '新建预设回复', + edit: '编辑预设回复', + empty: '暂无预设回复', + emptyDescription: '创建一个片段,让客服一键回答常见问题。', + visibility: '可见性', + used: '已使用', + public: '公开', + private: '私密(内部备注)', + privateSnippet: '私密片段(自动化绝不会将其发送给客户)', + body: '正文(Markdown)', + bodyPlaceholder: '您好 {{requester.name}},\n\n感谢您的来信……', + variablesHint: '变量:{{requester.name}}、{{ticket.key}}、{{ticket.title}}、{{agent.name}}', + insertResponse: '插入预设回复', + searchPlaceholder: '搜索预设回复', + noneMatching: '没有匹配的预设回复', + deleteTitle: '删除预设回复?', + deleteMessage: '删除“{name}”?客服将无法再插入它。', + delete: '删除预设回复', + loadFailed: '无法加载预设回复', + saveFailed: '无法保存预设回复', + deleteFailed: '无法删除预设回复', + created: '预设回复已创建', + updated: '预设回复已更新', + deleted: '预设回复已删除', + }, + securitySettings: { + agentUpdateFailed: '无法更新代理安全设置', + policySaveFailed: '无法保存认证策略', + workspaceAgents: '工作区管理的代理', + workspaceAgentsDescription: '允许工作区管理员创建由其工作区拥有的代理服务账户。禁用后,现有账户仍然可用。', + userAgents: '用户管理的代理', + userAgentsDescription: '允许用户在其个人资料中创建代理并为其签发 API 令牌。代理始终继承其所有者的权限。', + maxAgentsPerUser: '每位用户的代理上限', + maxAgentsDescription: '设为 0 可阻止用户创建个人代理。最大值为 1000。', + centralizedUsers: '集中式代理服务账户', + centralizedUsersDescription: '允许工作区管理员将编码代理运行绑定到已批准的集中式服务账户。', + centralizedUsersWarning: '每次绑定都会记录到审计日志。请仅批准用于共享自动化的账户。', + authenticationPolicy: '登录策略', + authenticationPolicyDescription: '选择用户登录 Windshift 的方式。', + authenticationMethod: '登录方式', + previewMode: '预览模式', + previewModeDescription: '显示策略警告,但不阻止登录。', + userStatistics: '用户统计', + totalUsers: '用户总数', + withPasskey: '已配置通行密钥', + withoutPasskey: '未配置通行密钥', + ssoUsers: 'SSO 用户', + systemAdmins: '系统管理员', + affectedUsers: '受影响用户:{count}', + admin: '管理员', + policyActive: '策略已强制执行', + policyActiveDescription: '不符合所选要求的用户可能无法登录。', + adminFallbackShort: '紧急管理员后备登录当前已启用。', + fallbackEnabled: '管理员后备登录已启用', + fallbackEnabledDescription: '当主要登录方式不可用时,系统管理员仍可使用密码登录。', + disableFallback: '重启服务器时不要使用', + fallbackDisabled: '管理员后备登录已禁用', + fallbackDisabledDescription: '所选策略同样适用于系统管理员。要启用紧急访问,请使用以下参数启动服务器:', + enableFallback: '使用以下参数启动服务器:', + requiresSso: '请先配置 SSO', + notRecommendedWithSso: '配置 SSO 后不可用', + enableCentralizedTitle: '启用集中式服务账户?', + enableCentralizedMessage: '工作区管理员将能够将编码代理运行绑定到下方已批准的服务账户。', + disableCentralizedTitle: '禁用集中式服务账户?', + disableCentralizedMessage: '新的绑定将被阻止。现有批准会保留但不再生效。', + reasonLabel: '原因(保存到审计日志)', + reasonPlaceholder: '您为什么要更改此设置?', + policy: { + password: '仅密码', + passwordDescription: '标准密码认证。', + passwordOrSso: '密码或 SSO', + passwordOrSsoDescription: '用户可以使用密码或通过已配置的 SSO 提供商登录。', + passwordPasskey: '密码 + 通行密钥作为第二因素', + passwordPasskeyDescription: '要求先输入密码,再验证已注册的通行密钥。', + passkeyOnly: '仅通行密钥', + passkeyOnlyDescription: '要求使用已注册的通行密钥;日常登录不能使用密码。', + ssoRequired: '仅 SSO', + ssoRequiredDescription: '要求用户通过已配置的 SSO 提供商登录。', + }, + allowlist: { + title: '已批准的集中式服务账户', + disabledHint: '批准会被保存,但在启用上方设置之前不会生效。您可以提前准备。', + empty: '尚未批准任何账户。在下方添加一个,即可供工作区管理员使用。', + user: '服务账户', + workspace: '工作区', + scope: '可用范围', + reason: '原因', + reasonLogged: '原因(保存到审计日志)', + reasonExample: '例如:acme-agent 的试点上线', + pickUser: '选择服务账户', + anyWorkspace: '任何工作区', + userNumber: '用户 #{id}', + workspaceNumber: '工作区 #{id}', + add: '批准账户', + remove: '撤销批准', + removeFor: '撤销对 {name} 的批准', + removeTitle: '撤销此批准?', + removeMessage: '这将撤销对 {name} 的批准。工作区管理员将无法再在所选范围内使用此账户。', + removeReason: '您为什么要撤销此批准?', + loadFailed: '无法加载已批准的服务账户', + addFailed: '无法批准该服务账户', + removeFailed: '无法撤销批准', + }, + }, + diagnostics: { + title: '诊断', + subtitle: '来自运行中系统的运行信号。可以在不更改硬性安全限制的情况下调整警告阈值。', + groups: { overview: '概览', automation: '自动化', data: '数据', infrastructure: '基础设施' }, + tabs: { + clock: '服务器时钟', actions: '操作执行', webhooks: 'Webhook 投递', schedulers: '后台作业', + recurrence: '重复', domainEvents: '领域事件', fracIndex: '小数索引', runnerPools: '运行器池', + databasePools: '数据库连接池', cacheMemory: '缓存内存', scmConnections: 'SCM 连接', + }, + clock: { + title: '服务器时钟', + subtitle: '将 API 响应中的 HTTP Date 标头与浏览器时钟进行比较。最近五个样本的滚动中位数用于校正显示的时间戳,并在偏移超过阈值时发出警告。', + currentOffset: '当前偏移', driftStatus: '漂移状态', samplesCollected: '已采集样本', driftThreshold: '漂移阈值', + recentSamples: '最近样本', autoRefresh: '最新优先 · 每 2 秒刷新一次', when: '时间', clientTime: '客户端时间(UTC)', serverTime: '服务器时间(UTC)', offset: '偏移', + noSamples: '尚无样本。API 请求完成后会自动记录样本。', noSamplesShort: '尚无样本', overThreshold: '超过阈值', withinThreshold: '在阈值内', inSync: '已同步', + ahead: '快 {value}', behind: '慢 {value}', minutesSeconds: '{minutes} 分 {seconds} 秒', seconds: '{seconds} 秒', minutesShort: '{count} 分', secondsShort: '{count} 秒', zeroSeconds: '0 秒', signedSeconds: '{value} 秒', justNow: '刚刚', secondsAgo: '{count} 秒前', minutesSecondsAgo: '{minutes} 分 {seconds} 秒前', + }, }, }); diff --git a/frontend/src/lib/locales/zh-CN/analytics.js b/frontend/src/lib/locales/zh-CN/analytics.js index c34ea16df..ede7e1c65 100644 --- a/frontend/src/lib/locales/zh-CN/analytics.js +++ b/frontend/src/lib/locales/zh-CN/analytics.js @@ -33,12 +33,12 @@ export default { }, scope: { summary: '{items} 个当前项目 · {from}–{to}', - currentWorkspace: '当前工作区队列', + currentWorkspace: '当前工作区群组', currentWorkspaceNote: '日期范围适用于流量和交付图表;健康状况和工龄为当前快照。历史图表使用今天位于此工作区的项目,不包括已移动或已删除的项目。', - currentCollection: '当前集合队列', + currentCollection: '当前集合群组', currentCollectionNote: - '日期范围适用于流量和交付图表;健康状况和工龄为当前快照。历史图表使用今天符合此集合条件的项目。更改集合可能会改变分析队列。', + '日期范围适用于流量和交付图表;健康状况和停留时长为当前快照。历史图表使用今天符合此集合条件的工作项。更改集合可能会改变分析群组。', }, health: { title: '需要关注', @@ -53,7 +53,7 @@ export default { attentionItems: '待检查项目', item: '项目', status: '状态', - age: '已存在时间', + age: '停留时长', signals: '信号', flags: { overdue: '已逾期', @@ -72,17 +72,17 @@ export default { net: '净变化', average: '平均每周完成', period: '周期', - definition: '完成是指项目首次转换到已完成状态。', + definition: '完成是指工作项首次转换到已完成状态。', }, aging: { - title: '在制工作老化', + title: '进行中工作项停留时长', description: '当前未完成项目已经打开了多长时间。', total: '活动项目', - median: '中位时间', + median: '中位停留时长', p85: '第 85 百分位', ageBand: '时间范围', itemCount: '项目数', - byStatus: '按状态查看时间', + byStatus: '按状态统计停留时长', oldest: '最早的未完成项目', status: '状态', noActive: '此范围内没有未完成工作。', @@ -108,7 +108,7 @@ export default { duration: '交付时间', missingHistory_one: '由于缺少完成历史,已排除 1 个当前已完成项目。', missingHistory_other: '由于缺少完成历史,已排除 {count} 个当前已完成项目。', - definition: '从项目创建到首次转换到已完成状态。之后重新打开不会更改此值。', + definition: '从工作项创建到首次转换到已完成状态的时间。之后重新打开不会更改此值。', }, dataTable: { show: '查看数据表', diff --git a/frontend/src/lib/locales/zh-CN/auth.js b/frontend/src/lib/locales/zh-CN/auth.js index 3edc15918..c57109b16 100644 --- a/frontend/src/lib/locales/zh-CN/auth.js +++ b/frontend/src/lib/locales/zh-CN/auth.js @@ -25,7 +25,7 @@ export default { accountLocked: '账户已被锁定,请联系支持。', twoFactor: '双因素认证', enterCode: '输入验证码', - resendCode: '重新发送', + resendCode: '重新发送验证码', verificationSent: '验证码已发送到您的电子邮件', sso: '单点登录', continueWith: '使用 {provider} 继续', @@ -79,8 +79,8 @@ export default { cannotDeleteSelf: '不能删除自己的账户', activateUser: '激活用户', deactivateUser: '停用用户', - activeLabel: '激活', - activeHint: '未激活的用户无法登录。您稍后可以从行菜单启用该账户。', + activeLabel: '已启用', + activeHint: '已停用的用户无法登录。您稍后可以从行菜单重新启用该账户。', confirmDelete: '确定要删除 {name} 吗?此操作无法撤销。', confirmActivate: '确定要激活 {name} 吗?该用户将可以访问系统。', confirmDeactivate: '确定要停用 {name} 吗?该用户将无法再访问系统。', diff --git a/frontend/src/lib/locales/zh-CN/backfill.js b/frontend/src/lib/locales/zh-CN/backfill.js index ca5b435d1..6160d5731 100644 --- a/frontend/src/lib/locales/zh-CN/backfill.js +++ b/frontend/src/lib/locales/zh-CN/backfill.js @@ -59,7 +59,7 @@ export default { }, "assets": { "availableOnPortals": "在门户中可用", - "availableOnPortalsDesc": "让门户访客通过引用该资产集的门户报告进行查看。", + "availableOnPortalsDesc": "让门户访客通过引用该资产集的门户报告查看其中的资产。", }, "channel": { "autoAppendOpenTickets": "通过电子邮件继续未关闭的工单", @@ -163,7 +163,7 @@ export default { "bulkSelected": "已选择 {count} 项", "bulkSelectHint": "选择事项以应用批量操作", "bulkSetStatus": "移动到", - "bulkSetAssignee": "负责人", + "bulkSetAssignee": "经办人", "bulkSetPriority": "优先级", "bulkLabels": "标签", "bulkLabelsHint": "为 {count} 个所选事项添加或移除标签", @@ -197,7 +197,7 @@ export default { "cardCreatedSuccess": "卡片已创建", "collectionFiltersReason": "集合筛选条件", "combinedBoardMoveUnsupported": "请分别更改泳道和状态。", - "mapSwimlaneAssignee": "负责人", + "mapSwimlaneAssignee": "经办人", "mapSwimlaneDimension": "卡片分组依据", "mapSwimlaneIteration": "迭代", "mapSwimlaneMilestone": "里程碑", @@ -229,7 +229,7 @@ export default { "editLevel": "编辑级别", "failedToLoad": "加载联系人级别失败。", "failedToSave": "保存联系人级别失败。", - "namePlaceholder": "例如:经理、账单、查看者", + "namePlaceholder": "例如:经理、计费、查看者", "nameRequired": "联系人级别名称为必填项。", "noLevels": "还没有联系人级别", "subtitle": "管理用于组织内请求共享的门户联系人级别", @@ -284,9 +284,9 @@ export default { "storyPointsEmpty": "尚未分配未完成的故事点", "storyPointsLoadError": "无法加载故事点摘要", }, - "there": "你好", + "there": "朋友", "widgetContent": { - "assignedEmpty": "当前没有分配给你的内容", + "assignedEmpty": "当前没有分配给你的事项", "assignedLoadError": "无法加载分配给你的事项", "briefingUnavailable": "你的每日简报当前不可用。它需要 AI 集成;如果你刚刚配置了一个,请稍后重试。", "createWorkspace": "创建一个", @@ -478,7 +478,7 @@ export default { "aiSuggested": "AI", "aiSuggestionsTemporary": "AI 建议为临时内容,不会保存到工单。", "mergeIntoThisTicket": "合并到此处", - "selectAssignee": "选择负责人", + "selectAssignee": "选择经办人", "selectTeam": "选择团队", "setProject": "选择项目", "sla": { @@ -694,7 +694,7 @@ export default { "content": "内容", "driftRows": "{count} 行偏差", "empty": "此服务器不附带内置包。", - "failed": "包未能干净地应用", + "failed": "包未能顺利应用", "loadFailed": "加载内置包失败", "loading": "正在加载包…", "newWorkspaceName": "新工作区名称", @@ -875,7 +875,7 @@ export default { "longBreak": "长休息", "longBreakHelper": "完成一个周期后的分钟数", "project": "项目", - "projectHelper": "来自此工作区服务器的活动时间项目", + "projectHelper": "此工作区服务器上的活跃时间项目", "saveError": "保存设置失败:{error}", "saveSettings": "保存设置", "selectProject": "选择项目...", @@ -943,14 +943,14 @@ export default { "loadErrorTitle": "无法加载代理", "loading": "正在加载工作区代理…", "modelUnavailable": "模型不可用", - "noMatchesDescription": "尝试其他名称、标识、用途或配置文件类型。", + "noMatchesDescription": "尝试其他名称、标识、用途或角色类型。", "noMatchesTitle": "没有匹配的代理", "ownedBy": "归 {name} 所有", "searchPlaceholder": "搜索代理", "standardInteraction": "分配、提及和工作区聊天", "subtitle": "此工作区中可用的专家", "title": "代理", - "viewProfileVersion": "查看配置文件 · 版本 {version}", + "viewProfileVersion": "查看个人资料 · 版本 {version}", }, "identities": { "centralizedService": "集中式服务身份", diff --git a/frontend/src/lib/locales/zh-CN/channels.js b/frontend/src/lib/locales/zh-CN/channels.js index 6f595fe27..282b4ccc9 100644 --- a/frontend/src/lib/locales/zh-CN/channels.js +++ b/frontend/src/lib/locales/zh-CN/channels.js @@ -24,7 +24,7 @@ export default { verifyEmailDescription: '我们已向您的邮箱发送了验证链接。点击链接以完成账户设置。', verificationEmailSent: '验证邮件已发送!', sending: '发送中...', - resendEmail: '重新发送', + resendEmail: '重新发送邮件', failedToSendVerification: '发送验证邮件失败', error: '错误', filters: { @@ -78,7 +78,7 @@ export default { webhook: 'Webhook', email: '电子邮件', smtp: 'SMTP', - form: 'Form', + form: '表单', categories: '分类', category: '分类', allChannels: '所有渠道', @@ -204,28 +204,28 @@ export default { intakeLastUID: '最新 UID {uid}', intakeRateLimited: '已暂缓 {count} 封', intakeSendConfirmation: '发送提交回执', - intakeSendConfirmationHint: '向发件人发送请求已收到的确认邮件。当此收件箱关联门户时,回执会包含门户链接。', + intakeSendConfirmationHint: '向发件人发送请求已收到的确认邮件。当此接收关联门户时,回执会包含门户链接。', intakeImportExistingMail: '导入现有邮件', intakeImportExistingMailHint: '首次轮询时导入邮箱中已有的邮件,而不是从新邮件开始。保持关闭可避免将邮箱历史变成工单。', intakeConfirmationOn: '回执已开启', // Form Channel Configuration - openForm: 'Open Form', - formConfiguration: 'Form Configuration', - formSlug: 'Form Slug', - formSlugHelp: 'URL-friendly identifier', - formSlugRequired: 'Form slug is required', - formUrl: 'Form URL', - formTheme: 'Theme', - formBrandColor: 'Brand Color', - formLogoUrl: 'Logo URL', - formSuccessMessage: 'Default Success Message', - formSuccessMessagePlaceholder: 'Thank you for your submission!', - formRedirectUrl: 'Redirect URL', - formRedirectUrlHelp: 'Redirect users to this URL after successful submission (optional)', - enableForm: 'Enable Form Channel', - formIsActive: 'Form channel is active and accepting submissions', - formIsInactive: 'Form channel is currently disabled', + openForm: '打开表单', + formConfiguration: '公开页面', + formSlug: '公开 URL', + formSlugHelp: '用于分享链接', + formSlugRequired: '表单标识为必填项', + formUrl: '表单 URL', + formTheme: '主题', + formBrandColor: '品牌颜色', + formLogoUrl: '标志 URL', + formSuccessMessage: '默认成功消息', + formSuccessMessagePlaceholder: '感谢您的提交!', + formRedirectUrl: '重定向 URL', + formRedirectUrlHelp: '成功提交后将用户重定向到此 URL(可选)', + enableForm: '启用表单渠道', + formIsActive: '表单渠道处于活动状态并接受提交', + formIsInactive: '表单渠道当前已禁用', comingSoon: '{type} 渠道的配置即将推出', lastActivity: '最后活动', items: '事项', @@ -358,23 +358,23 @@ export default { signIn: '登录', signOut: '登出', myRequests: '我的请求', - myDrafts: 'Drafts', + myDrafts: '草稿', backToPortal: '返回门户', guestUser: '访客', notSignedIn: '未登录', - draftsTitle: 'Your drafts', - draftsSubtitle: 'Pick up where you left off.', - draftsEmpty: 'No drafts yet. Start a request and your progress will be saved automatically.', - draftStepProgress: 'Step {current}', - draftUpdatedAgo: 'Updated {time}', - draftUntitled: 'Untitled draft', - draftResume: 'Resume', - draftDelete: 'Delete draft', - draftDeleteConfirm: 'Delete this draft? This cannot be undone.', - draftResumeBanner: 'Resuming saved draft.', - draftStartFresh: 'Start fresh', - draftSaving: 'Saving draft…', - draftSaved: 'Draft saved', + draftsTitle: '您的草稿', + draftsSubtitle: '从上次停下的地方继续。', + draftsEmpty: '还没有草稿。启动请求,您的进度将自动保存。', + draftStepProgress: '第 {current} 步', + draftUpdatedAgo: '更新于 {time}', + draftUntitled: '无标题草稿', + draftResume: '继续', + draftDelete: '删除草稿', + draftDeleteConfirm: '删除此草稿?此操作无法撤销。', + draftResumeBanner: '正在恢复已保存的草稿。', + draftStartFresh: '重新开始', + draftSaving: '正在保存草稿…', + draftSaved: '草稿已保存', addLink: '添加链接', addSection: '添加区域', noContentSections: '尚未配置内容区域。', @@ -537,39 +537,39 @@ export default { createsItemType: '创建事项类型', selectItemType: '选择事项类型', builder: { - title: 'Form Builder', - availableFields: 'Available Fields', - searchFields: 'Search fields...', - addField: 'Add Field', - noFieldsAvailable: 'No fields available', - dropFieldsHere: 'Drop fields here to build your form', - dragFromPalette: 'Drag fields from the right panel or click + to add', - required: 'Required', - optional: 'Optional', - noForms: 'No forms configured yet', - addFormHint: 'Create request types for this channel to start building forms', - editFields: 'Edit Fields', - backToFields: 'Back to Fields', + title: '表单构建器', + availableFields: '可用字段', + searchFields: '搜索字段...', + addField: '添加字段', + noFieldsAvailable: '无可用字段', + dropFieldsHere: '将字段拖放到此处以构建表单', + dragFromPalette: '从右侧面板拖动字段或单击 + 添加', + required: '必填', + optional: '可选', + noForms: '尚未配置表单', + addFormHint: '创建第一个表单并选择其响应的去向。', + editFields: '编辑字段', + backToFields: '返回字段', }, settings: { - title: 'Form Settings', - requireAuth: 'Require authentication', + title: '表单设置', + requireAuth: '需要身份验证', allowAttachments: '允许附件', - submitButton: 'Submit Button Text', - successMessage: 'Success Message', - successMessagePlaceholder: 'Thank you for your submission!', - redirectUrl: 'Redirect URL', + submitButton: '提交按钮文本', + successMessage: '成功消息', + successMessagePlaceholder: '感谢您的提交!', + redirectUrl: '重定向 URL', }, integration: { - title: 'Integration', - hostedUrl: 'Hosted URL', - iframe: 'iframe Embed', - jsWidget: 'JS Widget', - copyCode: 'Copy Code', - copied: 'Copied!', - openInNewTab: 'Open in new tab', - widthLabel: 'Width', - heightLabel: 'Height', + title: '集成', + hostedUrl: '分享链接', + iframe: 'iframe 嵌入', + jsWidget: 'JS 小组件', + copyCode: '复制代码', + copied: '已复制!', + openInNewTab: '在新标签页中打开', + widthLabel: '宽度', + heightLabel: '高度', }, }, hub: { diff --git a/frontend/src/lib/locales/zh-CN/dashboard.js b/frontend/src/lib/locales/zh-CN/dashboard.js index d053464c1..a7947608b 100644 --- a/frontend/src/lib/locales/zh-CN/dashboard.js +++ b/frontend/src/lib/locales/zh-CN/dashboard.js @@ -41,7 +41,7 @@ export default { }, savedSearch: { name: '已保存的搜索', - description: '显示已保存集合中的工作事项', + description: '显示已保存集合中的工作项', }, assignedToMe: { name: '分配给我的', diff --git a/frontend/src/lib/locales/zh-CN/misc.js b/frontend/src/lib/locales/zh-CN/misc.js index 0e6ef75b4..97e044b8e 100644 --- a/frontend/src/lib/locales/zh-CN/misc.js +++ b/frontend/src/lib/locales/zh-CN/misc.js @@ -19,7 +19,7 @@ export default { deploymentType: { cloud: 'Jira Cloud', cloudDesc: '*.atlassian.net', - datacenter: 'Data Center', + datacenter: '数据中心', datacenterDesc: '自托管', }, form: { @@ -402,11 +402,11 @@ export default { linkedPage: '关联了页面', unlinkedPage: '取消关联了页面', commentedOn: '评论了', - changedItemStatus: '将', + changedItemStatus: '更改了以下事项的状态:', fromTo: '的状态从 {from} 更改为 {to}', - added: '将', + added: '添加了', toMilestone: '添加到里程碑', - removed: '将', + removed: '移除了', fromMilestone: '从里程碑中移除', }, }, @@ -439,7 +439,7 @@ export default { editCategory: '编辑分类', noCategories: '无分类', noCategoriesDesc: '创建分类以组织您的资产。', - parentCategory: '父分类', + parentCategory: '父级分类', noParent: '无父级(根层级)', assignRole: '分配角色', everyoneRole: '所有人角色', @@ -476,7 +476,7 @@ export default { noPersonalWorkspace: '未找到个人工作区', taskTitlePlaceholder: '任务标题...', noTasksYet: '暂无任务', - noOpenTasks: '无开放任务', + noOpenTasks: '无未完成任务', markIncomplete: '标记为未完成', markComplete: '标记为已完成', openTask: '打开任务', @@ -650,7 +650,7 @@ export default { cancelled: '已取消', newChildItem: '新建子项', new: '新建', - issueTitle: '问题标题', + issueTitle: '事项标题', milestoneName: '里程碑名称', workspaceName: '{type} 名称', workspaceKeyPlaceholder: '工作区键(如 PROJ、TEAM)', @@ -678,7 +678,7 @@ export default { parent: '父事项', fillRequiredFields: '请填写必填字段:', selectWorkspaceFirst: '请先选择工作区', - createdPartialError: '条目已创建,但完成失败:{error}。再次点击“创建”重试。', + createdPartialError: '事项已创建,但完成失败:{error}。再次点击“创建”重试。', create: '创建', }, @@ -733,7 +733,7 @@ export default { branches: '分支', commits: '提交', smartCommitsTitle: '处理智能提交', - smartCommitsDescription: '合并时,应用拉取请求正文和提交消息中发现的 "#comment …" 和 "#<状态>" 指令。', + smartCommitsDescription: '合并时,应用拉取请求正文和提交消息中发现的 "#comment …" 和 "#<转换标识>" 指令。', smartCommitsWarningTitle: '将接受未验证的提交者邮箱', smartCommitsWarningBody: '智能提交操作以与提交者 git 邮箱匹配的用户身份运行。Git 不会验证该字段,任何人都可以将其设置为任意值。请仅对您信任每一次合并的仓库启用此功能。', smartCommitsUpdateFailed: '更新智能提交设置失败', @@ -761,12 +761,12 @@ export default { failedToUploadAvatar: '上传头像失败', }, transitionScreen: { - title: '转场界面', + title: '转换界面', moveTo: '移动到 {status}', comment: '评论', commentPlaceholder: '添加评论(可选)', confirm: '移动', - failed: '无法完成转场。', + failed: '无法完成转换。', missingFields: '请填写必填字段以继续:', }, }; diff --git a/frontend/src/lib/locales/zh-CN/navigation.js b/frontend/src/lib/locales/zh-CN/navigation.js index 61c2761dc..ecf4694b3 100644 --- a/frontend/src/lib/locales/zh-CN/navigation.js +++ b/frontend/src/lib/locales/zh-CN/navigation.js @@ -37,7 +37,7 @@ export default { }, commandPalette: { - searchPlaceholder: '搜索一切...', + searchPlaceholder: '搜索所有内容...', noCommandsFound: '未找到命令', toSelect: '选择', toNavigate: '导航', @@ -122,7 +122,7 @@ export default { recentItems: '最近事项', myTasks: '我的任务', assignedToMe: '分配给我', - openTasks: '开放任务', + openTasks: '未完成任务', overdueItems: '逾期事项', upcomingDeadlines: '即将到期', activeIterations: '活跃迭代', @@ -133,14 +133,14 @@ export default { iterationTimelinesHint: '迭代时间线将显示在此处', noUpcomingDeadlines: '无即将到期事项', dueDatesHint: '有截止日期的事项将显示在此处', - noOpenTasks: '没有分配给您的开放任务', + noOpenTasks: '没有分配给您的未完成任务', allCaughtUp: '您已全部处理完毕!', noOverdueItems: '无逾期事项', loadingRecentItems: '加载最近事项中...', loadingTasks: '加载您的任务中...', loadingOverdueItems: '加载逾期事项中...', workItemStatusOverview: '工作项状态概览', - statusOpen: '开放', + statusOpen: '待处理', statusInProgress: '进行中', statusClosed: '已关闭', quickActions: '快捷操作', @@ -197,7 +197,7 @@ export default { title: '关于 Windshift', subtitle: '为现代团队设计的综合工作管理平台', whatIs: '什么是 Windshift?', - description: 'Windshift 是一款强大的工作管理应用,将项目跟踪、测试管理、时间跟踪和团队协作整合到一个统一的平台中。使用现代技术构建,专为灵活性而设计,适应您团队独特的工作流程。', + description: 'Windshift 是一款强大的工作管理应用,将项目跟踪、测试管理、时间跟踪和团队协作整合到一个统一的平台中。使用现代技术构建,专为灵活性而设计,适应您团队独特的工作流。', keyFeatures: '核心功能', projectManagement: '项目管理', projectManagementDesc: '使用自定义字段、工作流和状态跟踪分层组织工作项。', diff --git a/frontend/src/lib/locales/zh-CN/pages.js b/frontend/src/lib/locales/zh-CN/pages.js index 82df72939..3cb7d6909 100644 --- a/frontend/src/lib/locales/zh-CN/pages.js +++ b/frontend/src/lib/locales/zh-CN/pages.js @@ -58,7 +58,7 @@ export default { "canvasComfortable": "使用易读宽度画布", "errorLoadTree": "加载页面失败", "errorLoadPage": "加载页面失败", - "errorSave": "加载失败保存", + "errorSave": "保存失败", "errorCreate": "无法创建页面", "errorArchive": "无法存档", "discardTitle": "放弃未保存的更改?", @@ -89,7 +89,7 @@ export default { "moveWorkspacePlaceholder": "选择工作区…", "moveParentLabel": "父页面", "moveSearchPlaceholder": "搜索页面...", - "moveRoot": "工作空间根目录", + "moveRoot": "工作区根目录", "moveCrossWorkspaceSummary": "此子树中的页面数:{count}。", "moveCrossWorkspacePolicy": "保留同名标签。显式权限、工作项链接和代理技能引用将被移除。", "moveButton": "移动", @@ -105,11 +105,11 @@ export default { "permsExplicitGrants": "显式授权", "permsEmptyGrantsTitle": "此页面上没有显式授权。", "permsEmptyGrantsDescription": "继承和工作区角色仍然适用。", - "permsColumnPrincipal": "校长", + "permsColumnPrincipal": "主体", "permsColumnLevel": "级别", "permsRemove": "删除", "permsRemoveTitle": "删除权限?", - "permsRemoveMessage": "该补助金将从页面中删除。您可以稍后重新添加。", + "permsRemoveMessage": "该授权将从页面中移除。您可以稍后重新添加。", "permsRemoveConfirm": "删除", "permsRemoveCancel": "取消", "permsClose": "关闭", diff --git a/frontend/src/lib/locales/zh-CN/quality.js b/frontend/src/lib/locales/zh-CN/quality.js index 98f1eff6f..9e5b8c23c 100644 --- a/frontend/src/lib/locales/zh-CN/quality.js +++ b/frontend/src/lib/locales/zh-CN/quality.js @@ -34,20 +34,20 @@ export default { "pickers": { "noItemsFound": "未找到工作项", "noItemsAvailable": "无可用工作项", - "agentOffline": "代理离线 — 其跑步者池中没有实时跑步者;分配的工作项将排队" + "agentOffline": "代理离线 — 其运行器池中没有在线运行器;分配的工作项将排队" }, "widgets": { "recentItems": { "loadingText": "正在加载最近的工作项...", "emptyTitle": "没有最近的工作项", - "emptySubtitle": "将显示最近查看的工作项此处", + "emptySubtitle": "最近查看的工作项将显示在此处", "loadError": "无法加载最近的工作项" } }, "commandPalette": { "commands": { "assets": { - "description": "管理资产集和工作项" + "description": "管理资产集和资产" } }, "recentlyViewed": { @@ -73,7 +73,7 @@ export default { "scope": { "summary": "{items} 当前工作项 · {from}–{to}", "currentWorkspaceNote": "日期范围适用于流量和交付图表;健康状况和工龄为当前快照。历史图表使用今天位于此工作区的工作项,不包括已移动或已删除的工作项。", - "currentCollectionNote": "日期范围适用于流量和交付图表;健康状况和工龄为当前快照。历史图表使用今天符合此集合条件的工作项。更改集合可能会改变分析队列。" + "currentCollectionNote": "日期范围适用于流量和交付图表;健康状况和停留时长为当前快照。历史图表使用今天符合此集合条件的工作项。更改集合可能会改变分析群组。" }, "health": { "attentionItems": "待检查工作项", @@ -93,7 +93,7 @@ export default { "analyzed": "已完成工作项", "missingHistory_one": "由于缺少完成历史,已排除 1 个当前已完成工作项。", "missingHistory_other": "由于缺少完成历史,已排除 {count} 个当前已完成工作项。", - "definition": "从工作项创建到首次转换到已完成状态。之后重新打开不会更改此值。", + "definition": "从工作项创建到首次转换到已完成状态的时间。之后重新打开不会更改此值。", "missingHistory": "{count} 当前完成的工作项已被排除,因为缺少完成历史记录。" }, "insufficientData": { @@ -104,7 +104,7 @@ export default { "pages": { "workItemsButton": "工作项", "workItemsAria": "显示链接的工作项", - "workItemsEmpty": "无工作项链接还在这里" + "workItemsEmpty": "尚无工作项链接到此" }, "recurrence": { "emptyDesc": "当工作项配置了重复计划时,重复规则将显示在此处。", diff --git a/frontend/src/lib/locales/zh-CN/supplemental.js b/frontend/src/lib/locales/zh-CN/supplemental.js index d66d3de12..90cefb090 100644 --- a/frontend/src/lib/locales/zh-CN/supplemental.js +++ b/frontend/src/lib/locales/zh-CN/supplemental.js @@ -27,7 +27,7 @@ export default { "noCapabilitiesForWorkspace": "此工作区中没有可用的功能。请管理员配置一个。", "configureRequest": "配置 HTTP 请求...", "configureExtract": "配置 AI 提取...", - "selectModelAndTools": "选择型号和工具...", + "selectModelAndTools": "选择模型和工具...", "httpCapability": "HTTP 客户端功能", "httpMethod": "方法", "urlTemplate": "URL 模板", @@ -40,11 +40,11 @@ export default { "dockerCapability": "Docker 环境", "timeoutSecs": "超时(秒)", "llmCapability": "LLM 连接", - "model": "型号", + "model": "模型", "tools": "工具", "aiPrompt": "提示", "aiExtractPromptPlaceholder": "从输入中提取结构化数据。具体说明要提取的内容。", - "systemPrompt": "系统提示符", + "systemPrompt": "系统提示", "systemPromptPlaceholder": "你是一个得力助手。使用工具...", "inputField": "输入字段", "inputFieldPlaceholder": "用于读取输入的变量名称", @@ -54,7 +54,7 @@ export default { "outputFieldPlaceholder": "用于将输出写入的变量名称", "outputSchema": "输出 JSON 架构", "agentTools": "工具", - "agentToolsHint": "HTTP 客户端功能代理可能会打电话。仅列出此工作区范围内的功能。", + "agentToolsHint": "代理可以调用的 HTTP 客户端功能。仅列出此工作区范围内的功能。", "noToolsAvailable": "此工作区没有可用的 HTTP 客户端功能。", "maxSteps": "最大迭代次数" }, @@ -120,8 +120,8 @@ export default { } }, "channel": { - "channelConfigCorrupted": "通道配置已损坏,无法安全编辑。请联系管理员。", - "portalSlugInvalid": "Slug 必须是 1–40 个小写字母、数字或连字符,并且不能以连字符开头或结尾,也不能包含连续的连字符。", + "channelConfigCorrupted": "渠道配置已损坏,无法安全编辑。请联系管理员。", + "portalSlugInvalid": "标识必须是 1–40 个小写字母、数字或连字符,并且不能以连字符开头或结尾,也不能包含连续的连字符。", "portalAllowedDomainsInvalid": "一个或多个允许的域无效(例如“acme.com”)。", "portalRegistration": "客户访问", "portalRegistrationMode": "注册模式", @@ -137,20 +137,20 @@ export default { "enableSmtp": "启用 SMTP", "smtpIsActive": "SMTP 处于活动状态", "smtpIsInactive": "SMTP 当前已禁用", - "failedToLoad": "无法加载频道", + "failedToLoad": "无法加载渠道", "microsoftOrGoogle": "Microsoft 365 或 Google", "workspaceFieldResolution": "工作区字段解析", - "formSlugRequired": "需要表单别名", - "formSlugInvalid": "别名必须是 1–40 个小写字母、数字或连字符,并且不能以连字符开头或结尾,也不能包含连续的连字符。", + "formSlugRequired": "表单标识为必填项", + "formSlugInvalid": "标识必须是 1–40 个小写字母、数字或连字符,并且不能以连字符开头或结尾,也不能包含连续的连字符。", "formBrandColorInvalid": "品牌颜色必须是 6 位十六进制代码(例如 #14b8a6)。", "formLogoUrlInvalid": "徽标 URL 必须是有效的 http(s) URL。", "formRedirectUrlInvalid": "重定向 URL 必须是有效的 http(s) URL。", "formSuccessMessage": "默认成功消息", "formSuccessMessagePlaceholder": "感谢您的提交!", "formRedirectUrlHelp": "成功提交后将用户重定向到此 URL(可选)", - "enableForm": "启用表单通道", - "formIsActive": "表单通道处于活动状态并接受提交", - "formIsInactive": "表单通道当前已禁用", + "enableForm": "启用表单渠道", + "formIsActive": "表单渠道处于活动状态并接受提交", + "formIsInactive": "表单渠道当前已禁用", "emailLog": { "noResults": "未找到电子邮件日志条目" } @@ -159,7 +159,7 @@ export default { "selectWorkspace": "选择工作区", "workspaceFieldResolution": "工作区字段解析", "bindingLocked": "创建后固定。如需更改,请删除并重新创建请求类型。", - "notFound": "找不到门户", + "notFound": "未找到门户", "createAssetReport": "创建资产报告", "editAssetReport": "编辑资产报告", "addAssetReportSubtitle": "将新资产报告添加到您的门户", @@ -182,7 +182,7 @@ export default { "qlQueryFormHint": "使用 ${field_identifier} 标记来引用表单提交的值。", "runMode": "运行模式", "runModeDirect": "直接表", - "runModeDirectHint": "将结果内联显示为节中的全角表。", + "runModeDirectHint": "将结果以内嵌方式显示为分区中的全宽表格。", "runModeForm": "表单请求", "runModeFormHint": "像请求类型一样启动:用户填写表单,然后显示结果。", "formConfiguration": "表单配置", @@ -196,9 +196,9 @@ export default { "assetReportFieldsAfterCreate": "创建后,使用报告卡上的“配置字段”来选择表单中显示的字段。", "runReport": "运行报告", "failedToRunReport": "无法运行报告", - "fieldRequired": "{field} 是必需的", + "fieldRequired": "{field} 为必填项", "noFieldsConfigured": "尚未配置表单字段。使用报告卡上的“配置字段”来添加一些字段。", - "resultsCount": "{total} 结果", + "resultsCount": "{total} 条结果", "editCriteria": "编辑条件", "noAssetsFound": "没有资产符合条件。", "noFormFieldsConfigured": "此报告尚未配置表单字段。", @@ -206,23 +206,23 @@ export default { "draftsEmpty": "还没有草稿。启动请求,您的进度将自动保存。", "draftDeleteConfirm": "删除此草稿吗?此操作无法撤消。", "draftResumeBanner": "正在恢复保存的草稿。", - "signInWithPasskey": "使用密钥", - "orSignInWithEmail": "登录或使用电子邮件", - "profileAndSecurity": "配置文件和安全性", - "profileTitle": "配置文件", + "signInWithPasskey": "使用通行密钥登录", + "orSignInWithEmail": "或使用电子邮件登录", + "profileAndSecurity": "个人资料和安全", + "profileTitle": "个人资料", languageTitle: "语言", languageSubtitle: "选择此门户和您收到的邮件的语言。", languageLabel: "语言", languageSaved: "语言已更新", "profileSubtitle": "管理您登录此门户的方式。", "profileSection": "帐户", - "passkeysTitle": "密钥", + "passkeysTitle": "通行密钥", "passkeysSubtitle": "无需电子邮件链接即可更快、更安全地登录。", "passkeysUnsupported": "您的浏览器不支持密钥。使用最新版本的 Chrome、Safari、Edge 或 Firefox。", - "addPasskey": "添加密钥", - "addPasskeyTitle": "添加密钥", + "addPasskey": "添加通行密钥", + "addPasskeyTitle": "添加通行密钥", "addPasskeyHint": "为该设备指定一个名称,以便您稍后识别。", - "passkeyName": "密钥名称", + "passkeyName": "通行密钥名称", "passkeyAdded": "已添加", "passkeyLastUsed": "最后使用", "noPasskeys": "尚无密钥。", @@ -243,7 +243,7 @@ export default { "dropFieldsHere": "将字段拖放到此处以构建表单", "dragFromPalette": "从右侧面板拖动字段或单击 + 添加", "noForms": "尚未配置表单", - "addFormHint": "为此渠道创建请求类型以开始构建表单", + "addFormHint": "创建第一个表单并选择其响应的去向。", "backToFields": "返回字段" }, "settings": { @@ -264,7 +264,7 @@ export default { "dismiss": "关闭", "error": "错误", "notFound": "未找到", - "workspace": "工作空间" + "workspace": "工作区" }, "errors": { "failedToCreate": "无法创建", @@ -301,7 +301,7 @@ export default { "title": "集成", "linkPage": "链接页面", "searchPages": "搜索页面...", - "noLinksYet": "否已链接页面", + "noLinksYet": "尚未链接任何页面", "connectAccount": "连接您的帐户", "connectToLink": "连接到链接页面", "connect": "连接", @@ -325,7 +325,7 @@ export default { "callbackUrl": "回调 URL", "callbackUrlHint": "将此 URL 复制到集成应用程序设置", "providerConfig": "提供商配置 (JSON)", - "notion": "概念", + "notion": "Notion", "noProviders": "未配置集成提供程序", "selectProvider": "选择提供程序", "page": "页面", @@ -347,7 +347,7 @@ export default { "commands": { "adminConditionSets": { "label": "条件集", - "description": "定义限制工作流程转换的条件" + "description": "定义限制工作流转换的条件" } } }, @@ -360,23 +360,23 @@ export default { "noItemTypesAvailable": "无可用项目类型", "notCovered": "未涵盖", "selectPlanAndName": "选择测试计划并输入名称", - "totalRequirements": "总要求", - "labelsAssigned_one": "已分配 {count} 标签", - "labelsAssigned_other": "已分配 {count} 标签", - "testStepsConfigured_one": "{count} 配置测试步骤", - "testStepsConfigured_other": "已配置 {count} 测试步骤", - "assignedTestCases_one": "{count} 已分配测试用例", - "assignedTestCases_other": "{count} 测试用例分配", - "runsCount_one": "{count} 运行", + "totalRequirements": "需求总数", + "labelsAssigned_one": "已分配 {count} 个标签", + "labelsAssigned_other": "已分配 {count} 个标签", + "testStepsConfigured_one": "已配置 {count} 个测试步骤", + "testStepsConfigured_other": "已配置 {count} 个测试步骤", + "assignedTestCases_one": "已分配 {count} 个测试用例", + "assignedTestCases_other": "已分配 {count} 个测试用例", + "runsCount_one": "{count} 次运行", "runsCount_other": "{count} 运行", - "stepsNotExecuted_one": "{count} 步骤未单独执行", - "stepsNotExecuted_other": "{count} 步骤未单独执行" + "stepsNotExecuted_one": "{count} 个步骤未单独执行", + "stepsNotExecuted_other": "{count} 个步骤未单独执行" }, "pickers": { "startTypingToSearch": "开始输入搜索...", "searchPages": "搜索页面...", - "agentOnline": "代理在线 — 实时跑步者将拾取分配的物品", - "agentOffline": "代理离线 — 其跑步者池中没有实时跑步者;分配的项目将排队", + "agentOnline": "代理在线 — 在线运行器将拾取分配的工作项", + "agentOffline": "代理离线 — 其运行器池中没有实时运行器;分配的项目将排队", "agentLocal": "代理在此服务器上运行", "agentUnbound": "此工作区中没有代理绑定 - 分配不会启动运行", "labelCommaNotAllowed": "标签名称不能包含逗号", @@ -397,14 +397,14 @@ export default { "diagramSaveError": "无法保存图", "mermaidRendering": "渲染图", "mermaidParseError": "Mermaid 解析错误", - "mermaidEmpty": "空美人鱼块" + "mermaidEmpty": "空的 Mermaid 块" }, "dialogs": { "alerts": { "shutdownFailed": "无法关闭应用程序", "stopTimerFailed": "无法停止计时器", - "statusInUseByTransitions_one": "无法删除“{name}”,因为它用于 {count} 工作流程转换。要删除此状态,请转至工作流程管理,删除使用此状态的所有转换,然后再次尝试删除该状态。", - "statusInUseByTransitions_other": "无法删除“{name}”,因为它用于 {count} 工作流转换。要删除此状态,请转至工作流程管理,删除使用此状态的所有转换,然后再次尝试删除该状态。" + "statusInUseByTransitions_one": "无法删除“{name}”,因为它用于 {count} 工作流转换。要删除此状态,请转至工作流管理,删除使用此状态的所有转换,然后再次尝试删除该状态。", + "statusInUseByTransitions_other": "无法删除“{name}”,因为它用于 {count} 工作流转换。要删除此状态,请转至工作流管理,删除使用此状态的所有转换,然后再次尝试删除该状态。" } }, "components": { @@ -422,7 +422,7 @@ export default { "title": "完成图表" }, "createdChart": { - "title": "已创建图表" + "title": "创建情况图表" }, "recentItems": { "loadingText": "正在加载最近的项目...", @@ -445,13 +445,13 @@ export default { "endCondition": "结束", "never": "从不", "onDate": "日期", - "afterOccurrences": "发生后", - "occurrences": "事件", - "preview": "即将发生的事件", + "afterOccurrences": "达到此次数后", + "occurrences": "发生次数", + "preview": "即将发生的重复", "previewLoading": "正在加载预览...", "previewError": "无法加载预览", "copySettings": "从模板复制", - "copyAssignee": "复制受让人", + "copyAssignee": "复制经办人", "copyPriority": "复制优先级", "copyCustomFields": "复制自定义字段", "copyDescription": "复制说明", @@ -460,7 +460,7 @@ export default { "active": "活动", "inactive": "非活动", "instances": "生成的实例", - "instanceCount": "{count} 实例", + "instanceCount": "{count} 个实例", "forceGenerate": "立即生成", "generating": "正在生成...", "generated": "生成 {count} 实例", @@ -505,11 +505,11 @@ export default { "licenses": "许可证" }, "screens": { - "screens": "{count} 屏幕" + "screens": "{count} 个屏幕" }, "conditionSets": { "title": "条件集", - "subtitle": "定义限制工作流程转换的条件", + "subtitle": "定义限制工作流转换的条件", "add": "添加条件集", "new": "新条件集", "empty": "无条件集", @@ -517,22 +517,22 @@ export default { "createFirst": "创建条件集", "searchPlaceholder": "搜索条件集...", "noMatchingResults": "没有与您的搜索匹配的条件集。", - "workflow": "工作流程", + "workflow": "工作流", "transitions": "转换", "general": "常规", "name": "名称", "namePlaceholder": "例如,开发人员限制", "description": "描述", "descriptionPlaceholder": "此条件集的可选描述", - "detailDesc": "配置限制特定工作流程转换的条件", + "detailDesc": "配置限制特定工作流转换的条件", "backToList": "返回条件集", - "selectWorkflow": "选择工作流程...", - "selectWorkflowFirst": "选择工作流程以启用条件集选择。", - "workflowLocked": "工作流程创建后无法更改。", - "workflowRequired": "需要工作流程。", - "nameRequired": "姓名为必填项。", - "changeWorkflow": "更改工作流程", - "changeWorkflowConfirm": "更改工作流程将删除所有现有转换条件。继续?", + "selectWorkflow": "选择工作流...", + "selectWorkflowFirst": "选择工作流以启用条件集选择。", + "workflowLocked": "工作流创建后无法更改。", + "workflowRequired": "需要工作流。", + "nameRequired": "名称为必填项。", + "changeWorkflow": "更改工作流", + "changeWorkflowConfirm": "更改工作流将删除所有现有转换条件。继续?", "transitionConditions": "转换条件", "transitionConditionsDesc": "向特定转换添加条件以限制谁可以执行这些转换。", "unconditionedTransitions": "无条件转换", @@ -558,7 +558,7 @@ export default { "scriptRefIfSet": "如果设置", "scriptRefGlobals": "全局变量", "scriptRefItemProps": "项目属性", - "noTransitions": "此工作流没有转换。首先设计工作流程。", + "noTransitions": "此工作流没有转换。首先设计工作流。", "userEvaluated": "用户", "againstRole": "角色", "againstGroup": "组", @@ -584,7 +584,7 @@ export default { "createFirst": "创建批准集", "searchPlaceholder": "搜索批准集...", "noMatchingResults": "没有批准集与您的搜索匹配。", - "workflow": "工作流程", + "workflow": "工作流", "statuses": "状态", "general": "常规", "name": "名称", @@ -593,10 +593,10 @@ export default { "descriptionPlaceholder": "此批准集的可选描述", "detailDesc": "配置状态绑定的多步骤批准。", "backToList": "返回审批集", - "selectWorkflow": "选择工作流程...", - "workflowLocked": "工作流程创建后无法更改。", - "workflowRequired": "需要工作流程。", - "nameRequired": "姓名为必填项。", + "selectWorkflow": "选择工作流...", + "workflowLocked": "工作流创建后无法更改。", + "workflowRequired": "需要工作流。", + "nameRequired": "名称为必填项。", "setStatuses": "批准状态", "setStatusesDesc": "当项目进入其中一种状态时,将打开批准请求。用户无法再直接调用配置的批准/拒绝转换 - 只有批准引擎驱动它们。", "addStatus": "添加批准状态", @@ -608,7 +608,7 @@ export default { "selectTransition": "选择转换...", "transitionsMustExitStatus": "批准和拒绝转换必须源自配置的状态。", "transitionsMustDiffer": "批准和拒绝转换必须不同。", - "stepMode": "步进模式", + "stepMode": "步骤模式", "stepModeSequential": "顺序", "stepModeParallel": "并行", "stepModeSequentialDesc": "步骤依次运行。每个步骤仅在前一个步骤获得批准后才打开。", @@ -631,15 +631,15 @@ export default { "rejectionRequiresQuorum": "需要法定人数才能失败", "approverSource": "审批者来源", "approverSourceCreator": "项目的创建者", - "approverSourceAssignee": "当前受让人", + "approverSourceAssignee": "当前经办人", "approverSourceCurrentUser": "触发审批的人", "approverSourceUser": "特定用户", "approverSourceRegularField": "常规字段(assignee_id、creator_id,...)", "approverSourceCustomField": "自定义字段(用户输入)", - "approverSourceRole": "工作空间角色", + "approverSourceRole": "工作区角色", "approverSourceGroup": "组", "approverFieldIdentifier": "字段标识符", - "approverFieldIdentifierHelp": "白名单字段:assignee_id、创建者_id、记者_id。", + "approverFieldIdentifierHelp": "白名单字段:assignee_id、creator_id、reporter_id。", "approverFieldId": "自定义字段", "approverRole": "角色", "approverGroup": "组", @@ -653,22 +653,22 @@ export default { "onLeaveKeep": "保留审批者", "onLeaveKeepDesc": "将它们留在池中。尽管原始审批者不在,但仍必须做出回复。", "fallbackTitle": "如果审批者无法决定", - "fallbackDesc": "这两条规则形成一个后备链。第一个处理计划休假的批准者;二是休假处理失败或没有及时做出决定时的安全网。", - "fallbackConnector": "如果上述休假规则产生空池(无替代,或跳过耗尽池),则立即触发升级,而不是等待计时器。", + "fallbackDesc": "这两条规则构成一个后备链:第一条处理计划休假的审批人,第二条则在休假处理失败或未及时做出决定时作为安全网。", + "fallbackConnector": "如果上述休假规则产生空池(无替代,或跳过耗尽池),则立即触发升级,而不是等待定时器。", "escalation": "当没有及时做出决定时", "escalationDisabled": "不升级", "escalationDisabledDesc": "无限期等待。该步骤永远不会自动解决;管理员必须干预。", - "escalationActionReassignDesc": "将步骤移交给其他人、角色或组。每次链接超时后重新准备,直到 max_escalations。", - "escalationActionSkipStepDesc": "标记已批准的步骤并让请求继续沿着链向下。", + "escalationActionReassignDesc": "将步骤移交给其他人、角色或组。每次链式超时后重新触发,直到 max_escalations。", + "escalationActionSkipStepDesc": "将该步骤标记为已批准,并让请求继续沿审批链向下进行。", "escalationActionAutoRejectDesc": "拒绝请求并触发配置的拒绝转换。", - "escalationAfterHours": "在(小时)后升级", + "escalationAfterHours": "超过(小时)后升级", "escalationAction": "升级时", "escalationActionReassign": "重新分配给目标", "escalationActionSkipStep": "跳过该步骤(视为已批准)", "escalationActionAutoReject": "自动拒绝请求", "escalationTarget": "升级目标", "maxEscalations": "最大升级(空白 = 无限制)", - "chainedNote": "使用重新分配时,escalation_due_at 在每次超时后重新准备直至达到此上限。", + "chainedNote": "使用重新分配时,escalation_due_at 在每次超时后重新触发,直至达到此上限。", "overrideWarningTitle": "注意:此转换也由条件控制", "overrideWarningBody": "当批准引擎触发转换时,由批准驱动的转换条件将被悄悄绕过。对于直接用户尝试,条件仍然有效(无论如何批准都会阻止)。为了避免出现意外,请考虑删除这些条件或将它们移至进入转换。", "overrideWarningLearnMore": "请参阅受影响的条件规则", @@ -677,14 +677,14 @@ export default { }, "workspaces": { "customers": { - "customerCount": "{count} 客户" + "customerCount": "{count} 位客户" } }, "items": { "agentLog": "代理日志", "agentLogEmpty": "尚未为此项目运行代理", - "agentLogTriggeredBy": "由", - "agentLogWaiting": "触发 等待输出...", + "agentLogTriggeredBy": "触发者:", + "agentLogWaiting": "等待输出...", "agentRunSingular": "运行", "agentRunPlural": "运行", "agentRerunLabel": "重新运行代理", @@ -749,7 +749,7 @@ export default { "builderDisabled": "Builder 已禁用 — 手动 CQL 处于活动状态", "builderDisabledDesc": "单击查询栏中的“重置为构建器”以重新启用这些字段。", "builderRecoveryDropped": "查询的某些部分(例如 NOT、OR 组或不受支持的字段)无法重建并被删除。", - "publicBoard": "公共板", + "publicBoard": "公开看板", "publish": "发布", "publicBoardSharing": { "title": "共享公开板", @@ -770,11 +770,11 @@ export default { }, "milestoneLaneHiddenCompletedHint": "已完成里程碑上的卡片", "milestoneLaneOpenFromCompletedHint": "已完成里程碑中的未解决事项", - "transition_failed": "状态转换失败。董事会已经刷新。", + "transition_failed": "状态转换失败。看板已刷新。", "manual_sort_unavailable_title": "无法手动排序", "manual_sort_unavailable": "切换到排名模式以手动排列卡片。", - "blockersCount": "{count} 阻止程序", - "blockingCount": "{count} 阻止" + "blockersCount": "{count} 个阻塞项", + "blockingCount": "{count} 个阻塞中" }, "workspaceSettings": { "tabs": { @@ -795,6 +795,6 @@ export default { } }, "issueSync": { - "workflowBypassWarning": "同步的 GitHub 状态覆盖工作流程规则。问题同步所做的状态更改可以跳过转换、条件、验证器和批准。" + "workflowBypassWarning": "同步的 GitHub 状态覆盖工作流规则。问题同步所做的状态更改可以跳过转换、条件、验证器和批准。" } }; diff --git a/frontend/src/lib/locales/zh-CN/testing.js b/frontend/src/lib/locales/zh-CN/testing.js index 89cf4f263..632bb2711 100644 --- a/frontend/src/lib/locales/zh-CN/testing.js +++ b/frontend/src/lib/locales/zh-CN/testing.js @@ -47,13 +47,13 @@ export default { skip: '跳过', actualResultPlaceholder: '实际发生了什么?', notesPlaceholder: '附加备注或观察...', - linkIssue: '关联问题', + linkIssue: '关联事项', linked: '已关联', stepFailedNoIssue: '此步骤失败但未关联问题。', linkExistingItem: '关联现有事项', searchItemsToLink: '搜索要关联的事项...', or: '或', - createNewIssue: '创建新问题', + createNewIssue: '创建新事项', nextStep: '下一步', noTestSteps: '无测试步骤', noTestStepsDescription: '此测试用例尚未定义任何步骤。您可以添加步骤使其可执行。', @@ -101,7 +101,7 @@ export default { closeLabelsModal: '关闭标签弹窗', searchExistingLabels: '搜索现有标签', searchLabelsPlaceholder: '搜索标签...', - cantFindLabel: '找不到需要的标签?', + cantFindLabel: '找不到所需内容?', newLabel: '新标签', createNewLabel: '创建新标签', enterLabelName: '输入标签名称...', @@ -213,10 +213,10 @@ export default { allItemTypes: '所有事项类型', testSetsSubtitle: '将测试用例组织为可执行的计划', selectMilestone: '选择里程碑...', - setName: '计划名称', + setName: '测试集名称', setNamePlaceholder: '例如,Sprint 5 测试计划', - createSet: '创建计划', - deleteTestSet: '删除测试计划', + createSet: '创建测试集', + deleteTestSet: '删除测试集', deleteSetConfirm: '确定要删除「{name}」吗?', noTestPlansYet: '暂无测试计划', createTestPlanToOrganize: '创建测试计划以组织和执行测试用例。', @@ -320,7 +320,7 @@ export default { expectedResult: '预期结果', recentExecutions: '近期执行', noExecutions: '此测试用例未在任何近期的测试运行中执行过。', - set: '计划', + set: '测试集', template: '模板', backToItem: '返回事项', }, diff --git a/frontend/src/lib/locales/zh-CN/ui.js b/frontend/src/lib/locales/zh-CN/ui.js index df98dd0ba..933b1de8a 100644 --- a/frontend/src/lib/locales/zh-CN/ui.js +++ b/frontend/src/lib/locales/zh-CN/ui.js @@ -323,9 +323,9 @@ export default { defaultWidth: '默认:{width}/{columns} 宽度', widthQuarter: '四分之一', widthThird: '三分之一', - widthHalf: '半', + widthHalf: '一半', widthTwoThirds: '三分之二', - widthFull: '满', + widthFull: '全宽', resizeAriaLabel: '调整小部件大小', resizeColumnsValue: '{count} / {total} 列', rowCount: '行数', diff --git a/frontend/src/lib/locales/zh-CN/workflows.js b/frontend/src/lib/locales/zh-CN/workflows.js index 6d18d3ca7..d1b88212b 100644 --- a/frontend/src/lib/locales/zh-CN/workflows.js +++ b/frontend/src/lib/locales/zh-CN/workflows.js @@ -103,7 +103,7 @@ export default { connectByDragging: '通过从连接点拖动来连接状态', saveWorkflow: '保存工作流', failedToSaveDesign: '保存工作流设计失败', - failedToSaveScreen: '保存转场界面失败', + failedToSaveScreen: '保存转换界面失败', initialStatus: '初始状态', setAsInitialStatus: '设为初始状态', initial: '初始', @@ -187,9 +187,9 @@ export default { createCategory: '创建分类', }, workflowInspector: { - subtitle: '转场设置', + subtitle: '转换设置', screen: '界面', - noScreen: '此转场未绑定界面。', + noScreen: '此转换未绑定界面。', chooseScreen: '选择界面…', changeScreen: '更换界面…', unbind: '取消绑定', @@ -197,13 +197,13 @@ export default { newScreenPlaceholder: '新界面名称', createAndBind: '创建并绑定', createHeading: '创建新界面', - createHint: '创建一个空界面,绑定到此转场,并打开字段编辑器。', + createHint: '创建一个空界面,绑定到此转换,并打开字段编辑器。', editFields: '编辑字段', editFieldsTitle: '界面字段 — {name}', - screenSaved: '转场界面已保存', + screenSaved: '转换界面已保存', screenStaged: '界面将在保存工作流时绑定', - pendingHint: '此转场尚未保存。界面将在保存工作流时绑定。', - screenSaveFailed: '无法保存转场界面', + pendingHint: '此转换尚未保存。界面将在保存工作流时绑定。', + screenSaveFailed: '无法保存转换界面', screenCreateFailed: '无法创建界面', }, }; diff --git a/frontend/src/lib/locales/zh-CN/workspace.js b/frontend/src/lib/locales/zh-CN/workspace.js index cf817ee29..327599151 100644 --- a/frontend/src/lib/locales/zh-CN/workspace.js +++ b/frontend/src/lib/locales/zh-CN/workspace.js @@ -6,7 +6,7 @@ export default { template: '模板', restricted: '受限', visibility: '可见性', - open: '开放', + open: '未完成', workspaces_one: '{count} 个工作区', workspaces_other: '{count} 个工作区', createWorkspace: '创建工作区', @@ -236,22 +236,22 @@ export default { itemHasChildrenSingular: '此事项有 1 个子事项。', deleteAllOption: '删除全部({count} 项)', deleteAllDescription: '永久删除此事项及其所有后代', - reparentOption: '重新分配子项', + reparentOption: '更改子项的父项', reparentDescription: '将子项移至此事项的父项,然后仅删除此事项', typeToConfirm: '输入「{title}」以确认删除', confirmationPlaceholder: '输入标题以确认...', deleteAllItems: '删除全部事项', - reparentAndDelete: '重新分配并删除', - reparentFailed: '重新分配子项失败', + reparentAndDelete: '更改父项并删除', + reparentFailed: '更改子项父项失败', cascadeDeleteFailed: '删除事项树失败', deletedItemsCount: '已删除 {count} 项', - reparentedAndDeleted: '子项已重新分配,事项已删除', + reparentedAndDeleted: '已更改子项父项并删除事项', selectNewParent: '选择子项的新父项', selectNewParentPlaceholder: '选择父事项...', makeRootItem: '设为根事项(无父项)', reparentLevelHint: '仅显示同一层级的事项', noOtherItemsAtLevel: '此层级没有其他事项 - 选择「设为根事项」或从上方选择', - reparentToGrandparent: '子项将移至祖父事项', + reparentToGrandparent: '子项将移至上一级父项', childrenWillBecomeRoot: '子项将成为根事项', failedToUpdateWatchStatus: '更新关注状态失败', copyWorkItem: '复制工作项', @@ -436,8 +436,8 @@ export default { collections: { itemTypeLaneHint: '{type}泳道', - itemTypeLaneUnassignedHint: '没有{type}父项的条目', - itemTypeLaneUnassignedVisibleHint: '没有可见{type}父项的条目', + itemTypeLaneUnassignedHint: '没有{type}父项的事项', + itemTypeLaneUnassignedVisibleHint: '没有可见{type}父项的事项', milestoneLaneHint: '里程碑泳道', milestoneLaneUnassignedHint: '没有里程碑的条目', milestoneLaneConfirmTitle: '移除里程碑分配?', @@ -584,7 +584,7 @@ export default { boardSummary: '已显示 {itemCount} 个工作项,分布在 {columnCount} 列', allItems: '全部事项', // Board card dependency hover summary - blockedBy: '被阻塞', + blockedBy: '被以下事项阻塞', blocking: '阻塞中', blockersCount_one: '{count} 个阻塞', blockersCount_other: '{count} 个阻塞', @@ -629,8 +629,8 @@ export default { workspaceKeyPlaceholder: '例如,DEV、TEST、PROD', workspaceKeyHelp: '用于事项前缀(如 DEV-123)。仅限大写字母和数字。', workspaceKeyImmutable: '用于事项前缀(如 DEV-123)。创建后不可更改。', - workspaceKeyPersonalHint: '用于事项前缀(如 P1-12)。个人工作空间可以更改它,事项键会随之变化。', - invalidWorkspaceKey: '工作空间键必须为 2-10 个字母或数字(A-Z、0-9)。', + workspaceKeyPersonalHint: '用于事项前缀(如 P1-12)。个人工作区可以更改它,事项键会随之变化。', + invalidWorkspaceKey: '工作区键必须为 2-10 个字母或数字(A-Z、0-9)。', description: '描述', descriptionPlaceholder: '此工作区的可选描述', defaultTimeProject: '默认时间跟踪项目', diff --git a/frontend/src/lib/locales/zh-CN/zammad.js b/frontend/src/lib/locales/zh-CN/zammad.js index 74c513851..7326ef2e4 100644 --- a/frontend/src/lib/locales/zh-CN/zammad.js +++ b/frontend/src/lib/locales/zh-CN/zammad.js @@ -15,10 +15,10 @@ export default { zammad: { correlationFieldHint: '请在 Zammad 工单中创建此文本字段,以便重试时找到已创建的工单。', completionStatus: 'Windshift 完成状态', noAutomaticCompletion: '不自动完成', closedStates: 'Zammad 已关闭状态', closedStateIds: 'Zammad 已关闭状态 ID', allWorkspaces: '允许所有工作区', allowedWorkspaces: '允许的工作区', tickets: 'Zammad 工单', noTickets: '尚未链接 Zammad 工单', - createTicket: '创建 Zammad 工单', createTicketConfirm: '条目标题和描述将作为内部备注发送到此 Zammad 连接。请确认目标群组。', connection: '连接', group: '群组', status: '状态', owner: '负责人', unassignedOwner: '未分配', unknown: '未知', notSynced: '尚未同步', leaveUnchanged: '保持不变', + createTicket: '创建 Zammad 工单', createTicketConfirm: '事项标题和描述将作为内部备注发送到此 Zammad 连接。请确认目标群组。', connection: '连接', group: '群组', status: '状态', owner: '负责人', unassignedOwner: '未分配', unknown: '未知', notSynced: '尚未同步', leaveUnchanged: '保持不变', connectionUnavailable: '一个或多个 Zammad 连接需要授权,暂时不能用于工单操作。', loadLinksFailed: '无法加载 Zammad 工单链接', loadMetadataFailed: '无法加载 Zammad 群组和状态', loadOwnersFailed: '无法加载 Zammad 负责人', ticketCreated: '已创建 Zammad 工单', ticketCreationStarted: 'Zammad 工单创建已在进行中', ticketCreationInProgress: '工单正在创建。关联工单后才可以刷新。', ticketCreateFailed: '无法创建 Zammad 工单', linkExistingTicket: '关联现有工单', linkExistingTicketConfirm: '通过工单编号关联现有的 Zammad 工单。', ticketNumberLabel: '工单编号', ticketNumberPlaceholder: '例如,12345', ticketLinked: '已关联 Zammad 工单', ticketLinkFailed: '无法关联 Zammad 工单', editTicket: '编辑 Zammad 工单', ticketUpdated: '已更新 Zammad 工单', ticketUpdateFailed: '无法更新 Zammad 工单', ticketRefreshed: '已刷新 Zammad 工单状态', - ticketRefreshFailed: '无法刷新 Zammad 工单', retrySync: '重试同步', refreshTicket: '刷新工单状态', syncFailedNoTicket: '同步失败。关联 Zammad 工单后才可以刷新。', creationUncertainNoTicket: '工单创建结果不确定。请检查 Zammad,并在需要时通过编号关联现有工单。', removeTicketLink: '移除关联', removeTicketLinkConfirm: '将移除与 Zammad #{number} 的关联及 Windshift 关联字段。Zammad 工单本身不会被删除。', ticketLinkRemoved: '已移除 Zammad 工单关联', ticketLinkRemoveFailed: '无法移除 Zammad 工单关联', ticketNumber: 'Zammad #{number}', lastSynced: '同步于 {time}', returnLinkResolving: '正在打开关联的 Windshift 条目...', returnLinkFailed: '无法打开关联的 Windshift 条目。该条目可能已不存在,或者你没有访问权限。', + ticketRefreshFailed: '无法刷新 Zammad 工单', retrySync: '重试同步', refreshTicket: '刷新工单状态', syncFailedNoTicket: '同步失败。关联 Zammad 工单后才可以刷新。', creationUncertainNoTicket: '工单创建结果不确定。请检查 Zammad,并在需要时通过编号关联现有工单。', removeTicketLink: '移除关联', removeTicketLinkConfirm: '将移除与 Zammad #{number} 的关联及 Windshift 关联字段。Zammad 工单本身不会被删除。', ticketLinkRemoved: '已移除 Zammad 工单关联', ticketLinkRemoveFailed: '无法移除 Zammad 工单关联', ticketNumber: 'Zammad #{number}', lastSynced: '同步于 {time}', returnLinkResolving: '正在打开关联的 Windshift 事项...', returnLinkFailed: '无法打开关联的 Windshift 事项。该事项可能已不存在,或者你没有访问权限。', syncState: { pending: '等待创建工单', creating: '正在创建工单', linked: '工单已链接', sync_failed: '同步失败', creation_uncertain: '创建结果不确定;重试只会查找现有工单' }, } };