From 58aaac2b6d6666d76aaea3d0dad91a544f7a33dd Mon Sep 17 00:00:00 2001 From: iambocai Date: Wed, 17 Jul 2024 18:31:31 +0800 Subject: [PATCH] feat(i18n): Add Chinese language pack support This commit adds Chinese translations for the application, including localization strings for modules such as workflows, scheduling, date pickers, namespaces, error types, data encoding, batch operations, general vocabulary, Nexus, and workers. It also updates the internationalization configuration to include a Chinese language option. --- src/lib/i18n/locales/index.ts | 2 + src/lib/i18n/locales/zh/batch.ts | 23 +++ src/lib/i18n/locales/zh/common.ts | 172 +++++++++++++++++ src/lib/i18n/locales/zh/data-encoder.ts | 30 +++ src/lib/i18n/locales/zh/date-picker.ts | 6 + src/lib/i18n/locales/zh/events.ts | 69 +++++++ src/lib/i18n/locales/zh/index.ts | 27 +++ src/lib/i18n/locales/zh/namespaces.ts | 28 +++ src/lib/i18n/locales/zh/nexus.ts | 43 +++++ src/lib/i18n/locales/zh/schedules.ts | 93 +++++++++ src/lib/i18n/locales/zh/typed-errors.ts | 193 +++++++++++++++++++ src/lib/i18n/locales/zh/workers.ts | 25 +++ src/lib/i18n/locales/zh/workflows.ts | 239 ++++++++++++++++++++++++ 13 files changed, 950 insertions(+) create mode 100644 src/lib/i18n/locales/zh/batch.ts create mode 100644 src/lib/i18n/locales/zh/common.ts create mode 100644 src/lib/i18n/locales/zh/data-encoder.ts create mode 100644 src/lib/i18n/locales/zh/date-picker.ts create mode 100644 src/lib/i18n/locales/zh/events.ts create mode 100644 src/lib/i18n/locales/zh/index.ts create mode 100644 src/lib/i18n/locales/zh/namespaces.ts create mode 100644 src/lib/i18n/locales/zh/nexus.ts create mode 100644 src/lib/i18n/locales/zh/schedules.ts create mode 100644 src/lib/i18n/locales/zh/typed-errors.ts create mode 100644 src/lib/i18n/locales/zh/workers.ts create mode 100644 src/lib/i18n/locales/zh/workflows.ts diff --git a/src/lib/i18n/locales/index.ts b/src/lib/i18n/locales/index.ts index f30cdaa14..30ae79a02 100644 --- a/src/lib/i18n/locales/index.ts +++ b/src/lib/i18n/locales/index.ts @@ -1,5 +1,7 @@ import { EN, English } from './en'; +import { Chinese, ZH } from './zh'; export default { [EN]: English, + [ZH]: Chinese, }; diff --git a/src/lib/i18n/locales/zh/batch.ts b/src/lib/i18n/locales/zh/batch.ts new file mode 100644 index 000000000..c90fecb14 --- /dev/null +++ b/src/lib/i18n/locales/zh/batch.ts @@ -0,0 +1,23 @@ +export const Namespace = 'batch' as const; + +export const Strings = { + 'nav-title': '批处理', + 'list-page-title': '批处理操作列表', + 'describe-page-title': '批处理操作', + 'empty-state-title': '无批处理操作', + 'back-link': '返回批处理操作列表', + 'operation-type': '操作类型', + details: '操作详情', + identity: '标识符', + 'total-operations': '操作总数', + 'operations-failed': '{{ count, number }} 失败', + 'operations-succeeded': '{{ count, number }} 成功', + 'operations-progress': '{{ percent }}% 完成', + results: '操作结果', + 'max-concurrent-alert-title': '达到批处理操作并发数上限', + 'max-concurrent-alert-description': + '只允许一个正在进行的批处理操作。如果你试图在当前已有一个批处理操作正在运行时创建一个新的批处理操作,它将会失败。', + 'job-id-input-hint': + '工作ID必须是唯一的。如果留空,将使用随机生成的UUID。', + 'job-id-input-error': '工作ID必须只包含URL安全字符。', +} as const; diff --git a/src/lib/i18n/locales/zh/common.ts b/src/lib/i18n/locales/zh/common.ts new file mode 100644 index 000000000..44cacfa6a --- /dev/null +++ b/src/lib/i18n/locales/zh/common.ts @@ -0,0 +1,172 @@ +export const Namespace = 'common' as const; + +export const Strings = { + loading: '加载中...', + filtering: '过滤中', + 'unknown-error': '出现了一个未知的错误。', + search: '搜索', + apply: '应用', + remove: '移除', + query: '查询', + ago: '前', + 'all-time': 'All Time', + custom: '自定义', + 'start-time': '开始时间', + 'end-time': '结束时间', + 'close-time': '关闭时间', + relative: '相对时间', + utc: 'UTC', + local: '本地时间', + cancel: '取消', + 'clear-all': '清除所有', + 'clear-all-capitalized': '清除所有', + 'ante-meridiem': '上午', + 'post-meridiem': '下午', + ascending: '升序', + descending: '降序', + start: '开始', + end: '结束', + true: '真', + false: '假', + after: '之后', + before: '之前', + between: '介于', + 'in-last': '结尾', + 'starts-with': '开头', + equals: '等于', + 'greater-than': '大于', + 'greater-than-or-equal-to': '大于等于', + 'less-than': '小于', + 'less-than-or-equal-to': '小于等于', + is: '是', + 'is-not': '不是', + all: '所有', + submit: '提交', + reason: '原因', + 'reason-placeholder': '请输入原因', + confirm: '确认', + summary: '概述', + scheduled: '已调度', + 'show-all': '展示所有', + 'date-and-time': '日期和时间', + event: '事件', + 'collapse-all': '折叠所有', + 'expand-all': '展开所有', + id: 'ID', + yes: '是', + no: '否', + maybe: '可能', + refresh: '刷新', + 'error-occurred': '出错了', + save: '保存', + 'workflow-type': '流程类型', + 'workflow-id': '流程ID', + 'run-id': '运行ID', + 'task-queue': '任务队列', + preview: '预览', + status: '状态', + created: '创建时间: {{created}}', + 'last-updated': '最后更新: {{updated}}', + edit: '编辑', + delete: '删除', + view: '查看', + memo: '备注', + notes: '说明', + add: '添加', + 'from-now': 'from now', + 'hours-abbreviated': '时', + 'minutes-abbreviated': '分', + 'seconds-abbreviated': '秒', + days: '天', + 'number-input-placeholder': '请输入一个数字', + enter: 'Enter', + 'no-results': '无结果', + 'type-or-paste-in': '输入或粘贴', + 'per-page': '每页', + 'next-page': '下一页', + 'previous-page': '上一页', + 'go-to-page': '到第 {{page}} 页', + 'next-row': '下一行', + 'previous-row': '上一行', + today: '今日', + close: '关闭', + deprecated: '已弃用', + namespaces: '空间', + cluster: '集群', + 'codec-server': '编解码服务器', + workflows: '流程', + 'workflows-plural_one': '流程', + 'workflows-plural_other': '流程', + schedules: '日程', + 'schedules-plural_one': '{{ count }} 日程', + 'schedules-plural_other': '{{ count }} 日程', + archive: '归档', + import: '导入', + feedback: '反馈', + 'log-out': '登出', + details: '详情', + unknown: '未知', + key: 'Key', + type: '类型', + disabled: '已禁用', + enabled: '已启用', + primary: '首要', + previous: '上一个', + next: '下一个', + name: '名字', + version: '版本', + main: 'Main', + 'select-all': '选中所有', + absolute: '绝对时间', + 'copy-icon-title': '点击复制内容', + 'copy-success-icon-title': '内容已复制到剪贴板', + 'filter-workflows': '过滤流程', + 'event-category-filter-label': '打开事件类型过滤菜单', + 'event-date-filter-label': '打开事件日期过滤菜单', + 'date-time-menu-label': '打开时间格式化菜单', + 'workflow-filter-label': '打开{{attribute}}过滤菜单', + 'workflow-status-filter-label': '打开执行状态过滤菜单', + 'clear-input-button-label': '清除输入', + 'keyboard-shortcuts': '快捷键', + 'close-keyboard-shortcuts': '关闭快捷键', + none: '无', + 'user-profile': '用户信息', + 'arrow-key-up': '向上箭头', + 'arrow-key-down': '向下箭头', + 'arrow-key-left': '向左箭头', + 'arrow-key-right': '向右箭头', + on: '开', + off: '关', + labs: '实验室', + experimental: '实验性功能', + timezone: '时区 {{ timezone }}', + 'time-unit': '时间单位', + 'time-format': '时间格式', + 'time-range': '时间区间', + 'based-on-time-preface': '基于', + 'download-json': '下载JSON', + 'skip-nav': '跳转到主要内容区', + timeline: '时间线', + 'equal-to': '等于', + 'not-equal-to': '不等于', + 'encode-failed': '数据编码失败', + 'decode-failed': '数据解码失败', + 'job-id': 'Job ID', + 'auto-refresh': '自动刷新', + 'auto-refresh-tooltip': '{{ interval }} 秒后刷新页面', + 'view-more': '查看更多...', + 'view-all-runs': '查看所有运行', + 'more-options': '更多选项', + download: '下载', + duration: '持续时间', + 'search-attributes': '搜索属性', + 'history-size-bytes': '历史大小 (字节)', + 'execution-details': '执行详情', + day: '白天模式', + night: '夜间模式', + docs: '文档', + 'upload-error': '文件上传出错', + description: '描述', + active: '活跃', + inactive: '不活跃', +} as const; diff --git a/src/lib/i18n/locales/zh/data-encoder.ts b/src/lib/i18n/locales/zh/data-encoder.ts new file mode 100644 index 000000000..0d8b13ef1 --- /dev/null +++ b/src/lib/i18n/locales/zh/data-encoder.ts @@ -0,0 +1,30 @@ +export const Namespace = 'data-encoder' as const; + +export const Strings = { + 'codec-server': '编解码服务器', + 'endpoint-title': '编解码服务器浏览器端点', + 'endpoint-description': + '为此浏览器输入一个编解码服务器端点。这将在您的浏览器中存储,并且只有您才能访问。', + 'endpoint-placeholder': '在此粘贴您的端点', + 'pass-access-token-label': '传递用户访问令牌', + 'include-cross-origin-credentials-label': '包含跨源凭据', + 'include-cross-origin-credentials-warning': + '警告:预飞行检查将被执行,如果配置不正确可能导致解码失败。', + 'port-title': 'tctl插件端口', + 'port-info': '如果两者都设置,将使用编解码服务器端点。', + 'access-token-https-error': + '如果传递访问令牌,端点必须是以https://开头', + 'prefix-error': '端点必须以http:// 或 https:// 开头', + 'codec-server-description-prefix': '', + 'codec-server-description-suffix': + '用于编解码您的数据。编解码服务器端点可以在{{level}}级别上设置,或者在您的浏览器中单独本地设置。', + 'browser-override-description': + '使用我的浏览器设置并忽略{{level}}级别的设置。', + 'no-browser-override-description': + '使用{{level}}级别的设置,如果可用的话。', + 'codec-server-configured': '编解码服务器已配置', + 'codec-server-error': '无法连接到编解码服务器', + 'codec-server-success': '编解码服务器成功转换内容', + 'configure-codec-server': '配置编解码服务器', + 'encode-error': '编解码服务器编码失败', +} as const; diff --git a/src/lib/i18n/locales/zh/date-picker.ts b/src/lib/i18n/locales/zh/date-picker.ts new file mode 100644 index 000000000..15f7cb717 --- /dev/null +++ b/src/lib/i18n/locales/zh/date-picker.ts @@ -0,0 +1,6 @@ +export const Namespace = 'date-picker' as const; + +export const Strings = { + 'next-month': '下一月', + 'previous-month': '上一月', +} as const; diff --git a/src/lib/i18n/locales/zh/events.ts b/src/lib/i18n/locales/zh/events.ts new file mode 100644 index 000000000..cd425b466 --- /dev/null +++ b/src/lib/i18n/locales/zh/events.ts @@ -0,0 +1,69 @@ +export const Namespace = 'events' as const; + +export const Strings = { + 'empty-state-title': '无匹配事件', + 'empty-state-description': '没有找到与您的筛选条件或所选视图相匹配的事件。调整您的筛选条件或视图以查看您的事件。', + 'group-empty-state-title': '未找到事件组', + 'sort-ascending': '按升序排序 1-9', + 'sort-descending': '按降序排序 9-1', + 'date-and-time': '日期与时间', + 'show-elapsed-time': '显示经过时间和持续时间', + 'event-type': '事件类型', + 'workflow-events': '流程事件', + category: { + all: '全部', + activity: '活动', + 'child-workflow': '子流程', + command: '命令', + 'local-activity': '本地活动', + marker: '标记', + nexus: '枢纽', + signal: '信号', + timer: '计时器', + update: '更新', + workflow: '流程', + }, + 'attribute-group': { + activity: '活动属性', + parent: '父级', + 'retry-policy': '重试策略', + schedule: '调度', + 'search-attributes': '搜索属性', + summary: '摘要', + 'task-queue': '任务队列', + workflow: '流程属性', + }, + 'event-group': '{{eventName}} 相关的事件', + 'error-event': '错误事件', + 'import-event-history': '导入事件历史记录', + 'import-event-history-file-upload': '选择要上传的事件历史记录JSON文件', + 'event-history-view': '事件历史记录视图', + 'api-history-link': '在Github中查看', + 'history-expected-formats': '预期的JSON格式', + 'event-history-import-error': '无法从JSON创建事件历史记录', + 'event-history-load-error': '无法解析JSON', + 'event-classification-label': '事件分类', + 'event-classification': { + unspecified: '未指定', + scheduled: '已安排', + open: '打开状态', + new: '新建', + started: '已启动', + initiated: '已初始化', + running: '运行中', + completed: '已完成', + fired: '触发', + cancelrequested: '取消请求', + timedout: '超时', + signaled: '已发送信号', + canceled: '已取消', + failed: '失败', + terminated: '终止', + }, + 'decode-event-history': '解码事件历史记录', + encoded: '已编码', + decoded: '已解码', + 'decoded-description': '编解码服务器已解码并base64编码', + readable: '人类可读', + 'readable-description': '编解码服务器已解码并base64解码', +} as const; diff --git a/src/lib/i18n/locales/zh/index.ts b/src/lib/i18n/locales/zh/index.ts new file mode 100644 index 000000000..189d6efef --- /dev/null +++ b/src/lib/i18n/locales/zh/index.ts @@ -0,0 +1,27 @@ +import * as Batch from './batch'; +import * as Common from './common'; +import * as DataEncoder from './data-encoder'; +import * as DatePicker from './date-picker'; +import * as Events from './events'; +import * as Namespaces from './namespaces'; +import * as Nexus from './nexus'; +import * as Schedules from './schedules'; +import * as TypedErrors from './typed-errors'; +import * as Workers from './workers'; +import * as Workflows from './workflows'; + +export const ZH = 'zh' as const; + +export const Chinese = { + [Batch.Namespace]: Batch.Strings, + [Common.Namespace]: Common.Strings, + [DatePicker.Namespace]: DatePicker.Strings, + [Workflows.Namespace]: Workflows.Strings, + [TypedErrors.Namespace]: TypedErrors.Strings, + [Events.Namespace]: Events.Strings, + [Schedules.Namespace]: Schedules.Strings, + [DataEncoder.Namespace]: DataEncoder.Strings, + [Namespaces.Namespace]: Namespaces.Strings, + [Nexus.Namespace]: Nexus.Strings, + [Workers.Namespace]: Workers.Strings, +} as const; diff --git a/src/lib/i18n/locales/zh/namespaces.ts b/src/lib/i18n/locales/zh/namespaces.ts new file mode 100644 index 000000000..30a20dbf4 --- /dev/null +++ b/src/lib/i18n/locales/zh/namespaces.ts @@ -0,0 +1,28 @@ +export const Namespace = 'namespaces' as const; + +export const Strings = { + 'namespace-select-header': '选择空间', + 'namespace-select-empty-state': '无空间', + 'namespace-label': '选择空间', + 'namespaces-empty-state-title': '未找到空间', + 'namespaces-empty-state-content': + '您没有权限访问任何空间。请联系管理员寻求帮助。', + namespace: '空间', + versions: '版本', + owner: 'Owner', + global: '全局', + 'retention-period': '保留期限', + 'history-archival': '历史归档', + 'visibility-archival': '可见性归档', + 'failover-version': '故障转移版本', + clusters: '集群', + 'client-actions': '客户端操作', + 'signal-workflow': '信号流程', + 'unauthorized-namespace-error': '您没有权限访问此空间。', + 'select-namespace-welcome': '欢迎来到Temporal', + 'select-namespace': '请选择一个空间开始。', + 'search-namespaces': '搜索空间', + 'select-namespace-empty-state': + '没有空间。联系您的管理员以创建一个。', + 'back-to-namespaces': '返回空间列表', +} as const; diff --git a/src/lib/i18n/locales/zh/nexus.ts b/src/lib/i18n/locales/zh/nexus.ts new file mode 100644 index 000000000..6025b0dc1 --- /dev/null +++ b/src/lib/i18n/locales/zh/nexus.ts @@ -0,0 +1,43 @@ +export const Namespace = 'nexus' as const; + +export const Strings = { + nexus: '枢纽', + 'nexus-endpoint': '枢纽端点 | {{id}}', + endpoint: '端点', + endpoints: '枢纽端点', + 'all-endpoints': '所有端点', + 'my-endpoints': '我的端点', + 'back-to-endpoints': '返回枢纽端点列表', + 'back-to-endpoint': '返回枢纽端点详情', + 'create-endpoint': '创建枢纽端点', + 'endpoint-name': '端点名称', + 'endpoint-name-placeholder': '枢纽端点必须拥有唯一的名字', + 'select-endpoint': '选择一个端点', + 'task-queue-placeholder': '请输入一个任务队列', + 'endpoint-alias': '端点别名', + target: '目标', + 'target-description': + '指定Worker将轮询的目标空间和任务队列。', + 'target-namespace': '目标空间', + 'select-namespace': '选择一个空间', + 'nexus-description': + '添加链接至您的仓库或说明,以帮助账户中的其他用户使用这个端点。', + 'description-placeholder': + '// 提供一个readme,让用户了解如何使用这个端点', + handler: '处理器', + 'delete-endpoint': '删除端点', + 'delete-modal-title': '确认删除枢纽端点?', + 'delete-modal-confirmation': + '您确定要删除{{endpoint}}吗?任何调用该端点的工作流都将遭遇失败。', + 'delete-modal-confirmation-label': + '输入“DELETE {{endpoint}}"以删除此端点。', + 'endpoint-name-hint': + '端点名称必须以A-Z、a-z或_开头,并且只能包含A-Z、a-z、0-9或_字符', + 'access-policy': '访问策略', + 'allowed-caller-namespaces': '允许调用者空间', + 'allowed-caller-namespaces-description': + '指定允许调用目标空间以使用此端点的空间(s)。', + 'select-namespaces': '选择空间(s)', + 'selected-namespaces_one': '{{count}}个空间被选中', + 'selected-namespaces_other': '{{count}}个空间被选中' +} as const; diff --git a/src/lib/i18n/locales/zh/schedules.ts b/src/lib/i18n/locales/zh/schedules.ts new file mode 100644 index 000000000..2c3e8f336 --- /dev/null +++ b/src/lib/i18n/locales/zh/schedules.ts @@ -0,0 +1,93 @@ +export const Namespace = 'schedules' as const; + +export const Strings = { + edit: '编辑日程', + create: '创建日程', + editing: '正在编辑日程...', + creating: '正在创建日程...', + 'back-to-schedule': '返回日程', + 'back-to-schedules': '返回日程列表', + name: '日程名称', + schedule: '日程', + frequency: '频率', + 'schedule-spec': '日程规格', + 'schedule-input': '日程输入', + 'empty-state-title': '未找到日程', + 'empty-state-description': '尝试不同的搜索', + 'error-message-fetching': '获取日程时出错', + 'recent-runs': '最近运行', + 'recent-runs-empty-state-title': '无最近运行', + 'upcoming-runs': '即将运行', + loading: '加载日程...', + deleting: '删除日程...', + 'delete-schedule-error': '无法删除日程。{{error}}', + pause: '暂停', + unpause: '恢复', + 'schedule-actions': '日程操作', + 'pause-modal-title': '暂停日程?', + 'pause-modal-confirmation': '确认要暂停 {{schedule}} 吗?', + 'pause-reason': '请输入暂停日程的原因。', + 'unpause-modal-title': '恢复日程?', + 'unpause-modal-confirmation': '确认要恢复 {{schedule}} 吗?', + 'unpause-reason': '请输入恢复日程的原因。', + trigger: '立即触发', + backfill: '回填', + 'more-options': '更多选项', + 'trigger-modal-title': '立即触发', + 'trigger-unspecified-title': '使用策略', + 'trigger-unspecified-description': '使用日程的重叠策略。', + 'trigger-skip-title': '跳过', + 'trigger-skip-description': + '当前流程完成后,考虑接下来发生的时间之后安排的下一个实例。', + 'trigger-buffer-one-title': '缓冲一个', + 'trigger-buffer-one-description': + '当前流程完成后再次启动流程,但是仅缓冲一个启动。如果在流程运行期间又安排了启动,且已有流程被缓冲,则仅第一个流程会在运行中的流程完成后开始。', + 'trigger-buffer-all-title': '缓冲所有', + 'trigger-buffer-all-description': + '缓冲任意数量的流程顺序启动,从运行中的流程完成后立即开始。', + 'trigger-cancel-other-title': '取消其他', + 'trigger-cancel-other-description': + '如果还有其他流程正在运行,取消它。前一个流程完成取消后,启动新流程。', + 'trigger-terminate-other-title': '终止其他', + 'trigger-terminate-other-description': + '如果还有其他流程正在运行,终止它并立即启动新流程。', + 'trigger-allow-all-title': '允许所有', + 'trigger-allow-all-description': + '启动任意数量的同时流程。最后的完成结果和最后一次失败不可用,因为流程不是连续的。', + 'delete-modal-title': '删除日程?', + 'delete-modal-confirmation': '确认要删除 {{schedule}} 吗?', + 'advanced-settings': '高级设置', + 'start-time': '日程开始时间:', + 'end-time': '日程结束时间:', + jitter: '抖动:', + 'exclusion-calendar': '排除日历:', + 'remaining-actions': '剩余动作:', + 'overlap-policy': '重叠策略:', + 'recurring-dates-heading': '重复日期', + 'recurring-dates-description': + '选择日程始终运行的具体日期。', + 'recurring-days-heading': '重复天数', + 'recurring-days-description': + '选择每周的哪一天此日程将始终运行。', + 'time-view-heading': '时间', + 'time-view-description': + '指定此日程运行的时间(UTC)。默认情况下,如果留空,日程将在00:00 UTC运行。', + 'interval-view-heading': '重复时间', + 'interval-view-description': + '指定此日程运行的时间间隔(例如每5分钟)。', + 'offset-heading': '偏移量', + 'offset-unit': '偏移单位', + 'offset-description': + '指定此日程运行时的时间偏移量(例如小时后的15分钟)。', + 'cron-view-title': '字符串', + 'cron-view-description': + '写入或粘贴cron字符串以生成日程。', + 'error-title': '错误消息', + 'name-label': '名称*', + 'workflow-id-label': '流程ID*', + 'workflow-type-label': '流程类型*', + 'task-queue-label': '任务队列*', + 'getting-started-docs-link-preface': '前往', + 'getting-started-docs-link': '文档', + 'getting-started-cli-link-preface': '或参考', +} as const; diff --git a/src/lib/i18n/locales/zh/typed-errors.ts b/src/lib/i18n/locales/zh/typed-errors.ts new file mode 100644 index 000000000..7dc2f8d78 --- /dev/null +++ b/src/lib/i18n/locales/zh/typed-errors.ts @@ -0,0 +1,193 @@ +export const Namespace = 'typed-errors'; + +export const Strings = { + 'link-preface': '了解更多关于', + Unspecified: { + title: '未指定', + description: '流程任务失败。请参阅错误详情。', + }, + UnhandledCommand: { + title: '未处理的命令', + description: + '由于自上次流程任务开始以来有新的可用事件,流程任务失败。已经安排了一个重试流程任务,并有机会处理那些新事件。', + }, + BadScheduleActivityAttributes: { + title: '错误的日程活动属性', + description: + '由于缺少或不正确的日程活动属性,流程任务失败。', + }, + BadRequestCancelActivityAttributes: { + title: '错误的请求取消活动属性', + description: + '由于请求取消活动属性不当,流程任务失败。一项活动被排定以取消,但是从未设置预定事件ID。', + }, + BadStartTimerAttributes: { + title: '错误的启动计时器属性', + description: + '由于预定事件缺少计时器ID,流程任务失败。', + }, + BadCancelTimerAttributes: { + title: '错误的取消计时器属性', + description: + '尝试取消计时器时因计时器ID未设置而使流程任务失败。', + }, + BadRecordMarkerAttributes: { + title: '错误的记录标记属性', + description: + '由于缺少或无效标记名称,流程任务失败。', + }, + BadCompleteWorkflowExecutionAttributes: { + title: '错误的流程执行完成属性', + description: + '由于在完成流程执行上未设置属性而使流程任务失败。', + }, + BadFailWorkflowExecutionAttributes: { + title: '错误的流程执行失败属性', + description: + '由于未设置失败流程执行属性或发生故障而使流程任务失败。', + }, + BadCancelWorkflowExecutionAttributes: { + title: '错误的流程执行取消属性', + description: + '由于在取消流程执行上未设置属性而使流程任务失败。', + }, + BadRequestCancelExternalAttributes: { + title: '错误的请求取消外部属性', + description: + '由于请求取消外部流程上有无效属性,流程任务失败。请检查故障消息以获取更多详细信息。', + }, + BadContinueAsNewAttributes: { + title: '错误的新继续属性', + description: + '由于未能在继续为新属性上验证而使流程任务失败。请检查故障消息以获取更多详细信息。', + }, + StartTimerDuplicateId: { + title: '启动计时器重复ID', + description: + '由于具有给定计时器ID的计时器已经启动,因此流程任务失败。', + }, + ResetStickyTaskQueue: { + title: '重置粘滞任务队列', + description: + '由于需要重置粘滞任务队列而使流程任务失败。系统将自动重试。', + }, + WorkflowWorkerUnhandledFailure: { + title: '流程Worker未处理的故障', + description: + '流程任务因来自流程代码的未处理故障而失败。', + action: '确定性约束', + link: 'https://docs.temporal.io/workflows/#deterministic-constraints', + }, + WorkflowTaskHeartbeatError: { + title: '流程任务心跳错误', + description: + '在执行长周期本地活动期间,流程任务未能发送心跳。这些本地活动将在下一次流程任务尝试时重新执行。如果此错误持续存在,则这些本地活动将反复运行直至流程超时为止。', + }, + BadSignalWorkflowExecutionAttributes: { + title: '错误的流程执行信号属性', + description: + '流程任务未能验证用于信号流程执行的属性。请检查故障消息以获取更多详细信息。', + }, + BadStartChildExecutionAttributes: { + title: '错误的孩子执行启动属性', + description: + '流程任务未能验证用于开始子流程执行所需的属性。请检查故障消息以获取更多详细信息。', + }, + ForceCloseCommand: { + title: '强制关闭命令', + description: + '流程任务被迫关闭。如果错误可恢复,则将安排重试。', + }, + FailoverCloseCommand: { + title: '故障转移关闭命令', + description: + '由于空间故障转移而迫使流程任务关闭。将自动安排重试。', + }, + BadSignalInputSize: { + title: '错误的信号输入大小', + description: + '有效载荷已超过信号上的可用输入大小。', + }, + ResetWorkflow: { + title: '重置流程', + description: + '系统使此流程任务失败。如果为此流程请求了重置,请检查新流程的进度;否则重置此流程。', + }, + BadBinary: { + title: '错误的二进制文件', + description: + '系统使此流程任务失败,因为此Worker部署被标记为不良二进制文件。', + }, + ScheduleActivityDuplicateId: { + title: '日程活动ID重复', + description: + '由于活动ID已经在使用中,流程任务失败,请检查您是否在您的流程中指定了相同的活动ID。', + }, + BadSearchAttributes: { + title: '错误的搜索属性', + description: + '搜索属性要么缺失要么值超过限制。这可能导致流程任务继续重试而不会成功。', + action: '配置搜索属性', + link: 'https://docs.temporal.io/visibility#search-attribute', + }, + NonDeterministicError: { + title: '非确定性错误', + description: + '非确定性错误导致流程任务失败。这通常意味着流程代码进行了非向后兼容变更而没有适当的版本分支。', + }, + BadModifyWorkflowPropertiesAttributes: { + title: '修改流程属性错误属性', + description: + '在上插备注的ModifyWorkflowProperty上验证属性时,流程任务失败。请检查故障消息以获取更多详细信息。', + }, + PendingChildWorkflowsLimitExceeded: { + title: '待处理子流程数超限', + description: + '待处理子流程的容量已达到。流程任务失败以防任何更多子流程被添加。', + }, + PendingActivitiesLimitExceeded: { + title: '待处理活动数超限', + description: + '待处理活动的容量已到达。流程任务失败以防创建另一项活动。', + }, + PendingSignalsLimitExceeded: { + title: '待处理信号数超限', + description: + '从此流程发送待处理信号的容量已达到。', + }, + PendingRequestCancelLimitExceeded: { + title: '待处理请求取消数超限', + description: + '待处理请求取消其他流程的容量已达到。', + }, + BadUpdateWorkflowExecutionMessage: { + title: '错误更新', + description: + '一个流程执行尝试在接收更新之前完成。', + }, + UnhandledUpdate: { + title: '未处理更新', + description: + '当Worker上正在处理流程任务时,Temporal服务器收到了一个流程更新。', + }, + BadScheduleNexusOperationAttributes: { + title: '错误的日程枢纽操作属性', + description: + '一个流程任务带着无效的ScheduleNexusOperation命令完成。', + }, + PendingNexusOperationsLimitExceeded: { + title: '待处理枢纽操作数超限', + description: + '一个流程任务完成时请求调度枢纽操作超过服务器配置的限制。', + }, + BadRequestCancelNexusOperationAttributes: { + title: '错误请求取消枢纽操作属性', + description: + '一个流程任务带着无效的RequestCancelNexusOperation命令完成。', + }, + FeatureDisabled: { + title: '功能禁用', + description: + '一个流程任务完成请求服务器上禁用的功能(无论是在整个系统范围内还是典型地针对流程的空间)。请检查流程任务故障消息以获取更多信息。', + } +} as const; diff --git a/src/lib/i18n/locales/zh/workers.ts b/src/lib/i18n/locales/zh/workers.ts new file mode 100644 index 000000000..3cd272bf4 --- /dev/null +++ b/src/lib/i18n/locales/zh/workers.ts @@ -0,0 +1,25 @@ +export const Namespace = 'workers' as const; + +export const Strings = { + workers: 'Workers', + version: '版本', + versioning: '版本控制', + retirability: '可退役能力', + buildId: '构建ID', + 'assignment-rules': '分配规则', + 'redirect-rules': '重定向规则', + default: '默认', + overall: '总体', + 'compatible-build-ids': '兼容构建ID', + 'version-sets': '版本集', + 'no-version-sets-found': '找不到版本集', + 'no-assignment-rules-found': '找不到分配规则', + 'no-redirect-rules-found': '找不到重定向规则', + 'show-inactive-assignment-rules': '显示非活跃分配规则', + 'last-used-version': '最后使用的版本', + 'next-version': '下一版本', + 'ready-to-be-retired': '准备退役', + 'max-version-sets-title': '兼容版本集的数量已达上限', + 'max-version-sets-description': + '您可以通过动态配置属性limit.versionCompatibleSetsPerQueue增加兼容版本集的数量。' +} as const; diff --git a/src/lib/i18n/locales/zh/workflows.ts b/src/lib/i18n/locales/zh/workflows.ts new file mode 100644 index 000000000..fd76ea1db --- /dev/null +++ b/src/lib/i18n/locales/zh/workflows.ts @@ -0,0 +1,239 @@ +export const Namespace = 'workflows' as const; + +export const Strings = { + 'loading-workflows': '正在加载流程', + 'recent-workflows': '近期流程', + 'recent-workflows-link': '查看近期流程', + 'workflows-count_one': '{{count, number}}个流程', + 'workflows-count_other': '{{count, number}}个流程', + 'workflows-error-querying': + '查询流程时发生了错误。', + 'filtered-workflows-count': + '从{{total, number}}个流程中过滤出{{filtered, number}}个', + terminate: '终止', + 'batch-terminate-modal-title': '批量终止流程', + 'batch-cancel-modal-title': '批量取消流程', + 'batch-reset-modal-title': '批量重置流程', + 'workflow-action-reason-placeholder': '在Web界面执行了 {{action}}', + 'workflow-action-reason-placeholder-with-email': + '{{email}} 在Web界面执行了 {{action}}', + 'batch-operation-confirmation-all': + '您确定要对符合以下查询的所有流程执行 {{action}} 操作吗?此操作无法撤销。', + 'batch-operation-count-disclaimer': + '注意:实际受影响的流程数量是在点击 "{{action}}" 的时刻,符合此查询的所有运行中的流程总数。', + 'batch-confirmation_one': + '您确定要对一个运行中的流程执行 {{action}} 操作吗?', + 'batch-confirmation_other': + '您确定要对 {{count, number}} 个运行中的流程执行 {{action}} 操作吗?', + 'batch-reset-confirmation_one': + '您确定要重置一个流程吗?', + 'batch-reset-confirmation_other': + '您确定要重置 {{count, number}} 个流程吗?', + 'batch-operation-confirmation-input-hint': + '如果您提供了自定义理由,“{{placeholder}}”将附加在其后面。如果您省略理由,则使用占位符。', + 'batch-terminate-all-success': + '批量终止请求正在后台处理中。', + 'batch-cancel-all-success': + '批量取消请求正在后台处理中。', + 'batch-reset-all-success': + '批量重置请求正在后台处理中。', + 'configure-workflows': '配置流程列表', + 'open-configure-workflows': '打开流程列表配置', + 'close-configure-workflows': '关闭流程列表配置', + 'configure-workflows-description': '添加 (<1>)、重新排列 (<2>) 或删除 (<3>) 流程属性列以个性化流程列表表单。', + 'all-statuses': '所有状态', + running: '运行中', + 'timed-out': '超时', + completed: '已完成', + failed: '失败', + 'contd-as-new': '新开继续', + 'continued-as-new': '新开继续', + terminated: '已终止', + canceled: '已取消', + paused: '暂停', + reset: '重置', + signal: '发送信号', + 'n-selected': '已选择 {{count, number}} 个', + 'all-selected': '共选择了 {{count, number}} 个。', + 'select-all-leading': '或 ', + 'select-all': '全选 {{count, number}} 个流程', + 'select-all-trailing': ' 符合您的查询', + 'request-cancellation': '取消运行', + 'back-to-workflows': '返回流程列表', + input: '输入', + 'initial-input': '初始输入', + 'example-input': '示例输入', + 'input-and-results': '输入和结果', + 'continued-as-new-with-input': '续作为新带输入', + results: '结果', + 'event-history-view': '事件历史视图', + 'event-history': '事件历史', + history: '历史', + 'full-history': '完整历史', + compact: '紧凑模式', + json: 'JSON 格式', + download: '下载', + 'workflow-actions': '流程操作', + 'reset-disabled-unauthorized': + '重置流程未启用,请联系管理员寻求协助。', + 'reset-disabled-pending-children': + '不能重置有待处理子工作的流程。', + 'reset-disabled-no-events': + '不能重置没有 WorkflowTaskStarted、WorkflowTaskCompleted 或 WorkflowTaskTimedOut 事件的流程。', + 'signal-disabled': + '向流程发送信号的功能未启用,请联系管理员寻求协助。', + 'terminate-disabled': + '终止流程的功能未启用,请联系管理员寻求协助。', + 'terminate-success': '流程已终止。', + 'cancel-success': '流程已取消。', + 'signal-success': '已向流程发送信号。', + 'reset-modal-title': '重置流程', + 'reset-event-radio-group-description': '选择一个事件进行重置', + 'reset-reapply-type-label': + '重新应用发生在重置点之后的信号', + 'cancel-modal-title': '取消流程', + 'cancel-modal-confirmation': + '您确定要取消此流程吗?此操作无法撤销。', + 'terminate-modal-title': '终止流程', + 'terminate-modal-confirmation': + '您确定要终止此流程吗?此操作无法撤销。', + 'signal-modal-title': '发送信号', + 'signal-name-label': '信号名称', + 'signal-payload-input-label': '输入', + 'signal-payload-input-label-hint': '(只支持单一JSON负载)', + 'cancel-request-sent': '取消请求已发送', + 'cancel-request-sent-description': + '取消此流程执行的请求已被发送。如果流程使用取消API,它将在下一次可用机会时取消。', + 'reset-success-alert-title': '此流程已被重置', + 'reset-success-alert-description': + '您可以在这里找到由此产生的流程执行:<1>此处。', + 'history-tab': '历史', + 'workflow-history': '流程历史', + 'workers-tab': 'Workers', + 'pending-activities-tab': '待处理活动', + 'call-stack-tab': '调用堆栈', + 'queries-tab': '查询', + 'metadata-tab': '元数据', + 'workflow-404-title': '这不是你要找的流程', + 'workflow-error-title': + '我们遇到技术困难,在检索此流程时出现问题', + 'workflow-error-no-workers-title': '无Worker运行', + 'workflow-error-no-workers-description': + '没有Worker在 {{taskQueue}} 任务队列上轮询。', + 'workflow-error-no-compatible-workers-title': '无兼容Worker运行', + 'workflow-error-no-compatible-workers-description': + '没有任何兼容Worker在 {{taskQueue}} 任务队列上轮询。', + 'state-transitions': '状态转换', + 'start-and-close-time': '开始和结束时间', + relationships: '关系', + parents_zero: '0 父项', + parents_one: '1 父项', + 'pending-children_one': '1 待处理子项', + 'pending-children_other': '{{count}} 待处理子项', + children_one: '1 子项', + children_other: '{{count}} 子项', + 'show-children': '显示子流程', + first: '{{count}} 首个', + previous: '{{count}} 上一个', + next: '{{count}} 下一个', + 'no-relationships': '此流程没有任何关系', + 'parent-id': '父流程ID', + 'parent-run-id': '父运行ID', + 'parent-workflow': '父流程', + 'first-execution': '首次执行', + 'previous-execution': '上次执行', + 'next-execution': '下次执行', + 'child-id': '子流程ID', + 'child-run-id': '子运行ID', + 'pending-activities': '待处理活动', + 'pending-activities-canceled': '待处理活动已被取消。', + 'activity-type': '活动类型', + 'last-heartbeat': '最后心跳', + attempt: '尝试次数', + 'attempts-left': '剩余尝试次数', + 'next-retry': '下次重试', + expiration: '到期时间', + 'heartbeat-details': '心跳细节', + 'last-failure': '上次失败', + 'last-accessed': '上次访问', + 'workflow-task-handler': '流程任务处理器', + 'activity-handler': '活动处理器', + 'workers-empty-state': '未发现Worker', + 'call-stack-empty-state': '未发现调用堆栈', + 'no-workers-failure-message': + '如果没有运行Worker,这将失败。', + 'no-workers-running-message': + '请确保至少有一个Worker正在运行。', + 'call-stack-alert': + '这是一个调用堆栈,显示每个位置等待的流程代码的位置。', + 'call-stack-at': '调用堆栈位于', + 'call-stack-link-preface': '使用以命令启用', + 'call-stack-link': '调用堆栈', + 'call-stack-link-postface': ', 在 {{taskQueue}} 任务队列上运行Worker。', + 'json-formatting': 'JSON 格式化', + 'query-type': '查询类型', + 'pending-activities-empty-state': '无待处理活动', + 'activity-id': '活动ID', + details: '详情', + 'maximum-attempts': '最大尝试次数', + 'retry-expiration': '重试过期时间', + state: '状态', + 'last-started-time': '上次启动时间', + 'scheduled-time': '计划时间', + 'last-worker-identity': '上次WorkerID', + unlimited: '无限', + 'no-expiration': '无过期时间', + 'no-retry': '无重试', + filter: '筛选条件', + 'view-search-input': '显示搜索输入框', + 'select-time': '选择时间', + 'search-placeholder': '请输入查询语句', + 'child-workflows': '子流程', + 'retry-workflows': '重新尝试流程', + 'workflow-name': '流程名称', + 'filter-by': '按 {{workflowName}} 类型筛选', + 'select-all-workflows': '选择所有流程', + 'select-workflow': '选择流程 {{workflow}}', + 'empty-state-title': '未找到流程', + 'empty-state-description': + '如果您设置了筛选条件,请尝试调整它们。否则,请检查语法并重试。', + 'remove-filter-label': '移除 {{attribute}} 筛选条件', + 'remove-keyword-label': '移除 {{keyword}} 关键词', + 'move-column-up-label': '将 {{column}} 列上移', + 'move-column-down-label': '将 {{column}} 列下移', + 'add-column-label': '添加 {{column}} 列', + 'remove-column-label': '移除 {{column}} 列', + 'pin-column-label': '固定 {{column}} 列', + 'unpin-column-label': '解除固定 {{column}} 列', + 'all-headings-in-view': '所有可用标题都在视图中', + 'no-headings-in-view': '视图中无标题', + 'archived-workflows': '归档的流程', + archival: '归档', + 'workflow-query-empty-state-title': '无结果', + 'workflow-query-empty-state-preface': + '对于所应用的筛选条件,没有找到结果。', + 'workflow-query-empty-state-postface': + '尝试调整或清除筛选条件,以便看到在此空间上运行的流程。', + 'workflow-query-error-state': '在筛选流程时出现错误。', + 'workflow-empty-state-title': '此空间中无运行中的流程', + 'workflow-empty-state-description': + '您可以在Web界面填充示例流程。您可以在以下位置找到完整的可执行代码样例:', + 'visibility-disabled-archival': + '此空间目前启用了事件归档,但未启用可见记录归档。', + 'archival-link-preface': '运行此命令以启用', + 'archival-link': '可见记录归档', + 'archival-disabled-title': + '此空间目前尚未启用归档', + 'archival-disabled-details': + '运行此命令以启用事件归档', + 'archival-empty-state-description': + '未找到可见记录的归档。', + 'basic-search': '基本搜索', + 'advanced-search': '高级搜索', + 'time-range': '时间范围', + 'pending-activities-link': '显示所有待处理活动', + 'duration-filter-placeholder': + '例如:"2h45m"、"hh:mm:ss" 或 "1000" 纳秒', + 'start-workflow': '启动流程', + 'start-workflow-like-this-one': '以相同配置启动流程' +} as const;