mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-30 07:05:24 +00:00
fix(i18n): complete Simplified Chinese core and plugin translations (#1542)
* fix(i18n): complete Chinese onboarding and navigation labels * fix(i18n): translate remaining Chinese core and plugin interfaces * fix(i18n): translate host editor tab overflow controls * fix(i18n): use consistent Chinese fleet terminology * fix(i18n): localize hardcoded controls and plugin views * fix(i18n): translate built-in homepage widget catalog * test(homepage): follow translated timezone placeholder * fix(i18n): translate plugin-provided homepage widgets * fix(i18n): localize feature settings section titles
This commit is contained in:
1 parent
13f5736d8f
commit
0214a81e5d
78 files changed
+2423
-1833
No files matched your search
@@ -207,5 +207,19 @@
|
||||
"remove": "Remove schedule",
|
||||
"loadFailed": "Could not refresh maintenance status. Changes are disabled until it can be loaded.",
|
||||
"loading": "Loading maintenance status…"
|
||||
},
|
||||
"ui": {
|
||||
"sidebar": {
|
||||
"automations": {
|
||||
"options": {
|
||||
"connect": "connect",
|
||||
"disconnect": "disconnect",
|
||||
"offline": "offline",
|
||||
"online": "online",
|
||||
"failing": "failing",
|
||||
"recovered": "recovered"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,110 +1,110 @@
|
||||
{
|
||||
"permissions": {
|
||||
"view": {
|
||||
"title": "View automations",
|
||||
"description": "See the automations and their history."
|
||||
"title": "查看自动化",
|
||||
"description": "查看自动化及其执行历史。"
|
||||
},
|
||||
"create": {
|
||||
"title": "Create automations",
|
||||
"description": "Add new automations."
|
||||
"title": "创建自动化",
|
||||
"description": "添加新的自动化。"
|
||||
},
|
||||
"edit": {
|
||||
"title": "Edit automations",
|
||||
"description": "Change existing automations."
|
||||
"title": "编辑自动化",
|
||||
"description": "修改现有自动化。"
|
||||
},
|
||||
"delete": {
|
||||
"title": "Delete automations",
|
||||
"description": "Remove automations."
|
||||
"title": "删除自动化",
|
||||
"description": "移除自动化。"
|
||||
},
|
||||
"run": {
|
||||
"title": "Run automations",
|
||||
"description": "Trigger an automation by hand."
|
||||
"title": "运行自动化",
|
||||
"description": "手动触发自动化。"
|
||||
}
|
||||
},
|
||||
"newUi": {
|
||||
"sidebar": {
|
||||
"automations": {
|
||||
"title": "Automations",
|
||||
"tabAutomations": "Automations",
|
||||
"title": "自动化",
|
||||
"tabAutomations": "自动化",
|
||||
"tabRuns": "运行记录",
|
||||
"tabChannels": "通道",
|
||||
"createAutomation": "New Automation",
|
||||
"backToAutomations": "Back to Automations",
|
||||
"createTitle": "New Automation",
|
||||
"editTitle": "Edit Automation",
|
||||
"empty": "No automations yet. Create one to react to a metric, a schedule, or an event.",
|
||||
"createAutomation": "新建自动化",
|
||||
"backToAutomations": "返回自动化",
|
||||
"createTitle": "新建自动化",
|
||||
"editTitle": "编辑自动化",
|
||||
"empty": "暂无自动化。创建自动化以响应指标、计划或事件。",
|
||||
"emptyRuns": "暂无运行记录。",
|
||||
"channelsHint": "Channels are set up in Alerts",
|
||||
"noChannelsHint": "The alert always goes to your inbox. Add channels in Alerts to also send it somewhere else.",
|
||||
"channelsHint": "渠道在“告警”中设置",
|
||||
"noChannelsHint": "告警始终会发送到收件箱。在“告警”中添加渠道后,也可发送到其他位置。",
|
||||
"nameLabel": "名称",
|
||||
"namePlaceholder": "e.g., Clean up /data when it fills",
|
||||
"namePlaceholder": "例如:/data 空间不足时自动清理",
|
||||
"nameRequired": "名称为必填项",
|
||||
"descriptionLabel": "描述",
|
||||
"descriptionPlaceholder": "可选描述",
|
||||
"enabledLabel": "已启用",
|
||||
"concurrencyLabel": "If it is already running",
|
||||
"concurrencyHint": "What to do when this is triggered again before the last run has finished.",
|
||||
"concurrencyLabel": "已有任务运行时",
|
||||
"concurrencyHint": "上次运行尚未结束时再次触发的处理方式。",
|
||||
"concurrency": {
|
||||
"skip": "Skip the new run",
|
||||
"skip": "跳过本次运行",
|
||||
"queue": "稍等会再运行",
|
||||
"allow": "Run both at once"
|
||||
"allow": "同时运行两个任务"
|
||||
},
|
||||
"save": "保存",
|
||||
"created": "自动化已创建",
|
||||
"updated": "自动化已保存",
|
||||
"deleted": "自动化已删除",
|
||||
"deleteConfirm": "Delete this automation? Its run history is deleted too.",
|
||||
"runNow": "Run now",
|
||||
"testRun": "Test run",
|
||||
"testRunHint": "Runs every step but does not touch anything outside Termix.",
|
||||
"runStarted": "Run started",
|
||||
"runFinished": "Run finished: {{status}}",
|
||||
"deleteConfirm": "删除此自动化?其运行历史也会一并删除。",
|
||||
"runNow": "立即运行",
|
||||
"testRun": "测试运行",
|
||||
"testRunHint": "执行每个步骤,但不会修改 Termix 之外的任何内容。",
|
||||
"runStarted": "已开始运行",
|
||||
"runFinished": "运行结束:{{status}}",
|
||||
"trigger": "触发器",
|
||||
"steps": "Steps",
|
||||
"addStep": "Add step",
|
||||
"removeStep": "Remove step",
|
||||
"moveUp": "Move up",
|
||||
"moveDown": "Move down",
|
||||
"noSteps": "No steps yet. Add one to say what should happen.",
|
||||
"webhookTokenTitle": "Webhook URL",
|
||||
"webhookTokenDescription": "This is shown once. Save it now, it cannot be retrieved later.",
|
||||
"steps": "步骤",
|
||||
"addStep": "添加步骤",
|
||||
"removeStep": "移除步骤",
|
||||
"moveUp": "上移",
|
||||
"moveDown": "下移",
|
||||
"noSteps": "暂无步骤。添加步骤以定义要执行的操作。",
|
||||
"webhookTokenTitle": "Webhook 地址",
|
||||
"webhookTokenDescription": "此内容仅显示一次,请立即保存,之后无法再次获取。",
|
||||
"copy": "复制",
|
||||
"copied": "已复制",
|
||||
"viewJson": "JSON",
|
||||
"viewBuilder": "构建器",
|
||||
"viewGraph": "Graph",
|
||||
"viewGraph": "流程图",
|
||||
"lastRun": "上次运行",
|
||||
"never": "从未",
|
||||
"duration": "{{seconds}}s",
|
||||
"duration": "{{seconds}} 秒",
|
||||
"stepOutput": "输出",
|
||||
"stepError": "错误",
|
||||
"dryRunBadge": "Test run",
|
||||
"dryRunBadge": "测试运行",
|
||||
"hostSelector": {
|
||||
"trigger": "Triggering host",
|
||||
"host": "Specific host",
|
||||
"fleet": "Fleet",
|
||||
"trigger": "触发事件的主机",
|
||||
"host": "指定主机",
|
||||
"fleet": "主机组",
|
||||
"all": "所有主机"
|
||||
},
|
||||
"triggerKinds": {
|
||||
"metric_threshold": "Metric threshold",
|
||||
"metric_threshold": "指标阈值",
|
||||
"host_status": "主机上线或离线",
|
||||
"health_check": "Health check changes",
|
||||
"schedule": "On a schedule",
|
||||
"docker_event": "Container event",
|
||||
"health_check": "健康检查状态变化",
|
||||
"schedule": "按计划运行",
|
||||
"docker_event": "容器事件",
|
||||
"internal_event": "Termix 事件",
|
||||
"webhook": "Incoming webhook"
|
||||
"webhook": "接收 Webhook"
|
||||
},
|
||||
"stepTypes": {
|
||||
"notify": "Send an alert",
|
||||
"http": "Call a URL",
|
||||
"run_snippet": "Run a snippet",
|
||||
"run_command": "Run a command",
|
||||
"docker": "Control a container",
|
||||
"tunnel": "Control a tunnel",
|
||||
"wol": "Wake a host",
|
||||
"wait": "Wait",
|
||||
"set_var": "Set a variable",
|
||||
"if": "If / otherwise",
|
||||
"notify": "发送告警",
|
||||
"http": "请求 URL",
|
||||
"run_snippet": "执行代码片段",
|
||||
"run_command": "执行命令",
|
||||
"docker": "控制容器",
|
||||
"tunnel": "控制隧道",
|
||||
"wol": "唤醒主机",
|
||||
"wait": "等待",
|
||||
"set_var": "设置变量",
|
||||
"if": "如果 / 否则",
|
||||
"run_automation": "运行另一个自动化程序",
|
||||
"stop": "停止"
|
||||
},
|
||||
@@ -112,52 +112,52 @@
|
||||
"running": "运行中",
|
||||
"success": "成功",
|
||||
"failed": "失败",
|
||||
"timeout": "Timed out",
|
||||
"skipped": "Skipped",
|
||||
"timeout": "已超时",
|
||||
"skipped": "已跳过",
|
||||
"cancelled": "已取消"
|
||||
},
|
||||
"fields": {
|
||||
"host": "主机",
|
||||
"metric": "指标",
|
||||
"mount": "挂载点",
|
||||
"operator": "Is",
|
||||
"operator": "等于",
|
||||
"value": "值",
|
||||
"forSeconds": "Sustained for (seconds)",
|
||||
"forSeconds": "持续时间(秒)",
|
||||
"cooldown": "冷却时间(分钟)",
|
||||
"cron": "Cron 表达式",
|
||||
"intervalSeconds": "Every (seconds)",
|
||||
"timezone": "Time zone",
|
||||
"timezoneServer": "Server time",
|
||||
"timezoneHint": "Cron times are read in this zone. Does not apply to interval schedules.",
|
||||
"container": "Container",
|
||||
"intervalSeconds": "间隔(秒)",
|
||||
"timezone": "时区",
|
||||
"timezoneServer": "服务器时间",
|
||||
"timezoneHint": "Cron 时间按此时区解释,不适用于按间隔运行的计划。",
|
||||
"container": "容器",
|
||||
"command": "命令",
|
||||
"url": "URL",
|
||||
"method": "Method",
|
||||
"method": "请求方法",
|
||||
"body": "请求体",
|
||||
"channels": "Also send to",
|
||||
"channels": "同时发送至",
|
||||
"title": "标题",
|
||||
"message": "消息",
|
||||
"snippet": "Snippet",
|
||||
"seconds": "Seconds",
|
||||
"conditionLeftPlaceholder": "Value to check",
|
||||
"conditionRightPlaceholder": "Compare against",
|
||||
"snippet": "代码片段",
|
||||
"seconds": "秒",
|
||||
"conditionLeftPlaceholder": "待检查的值",
|
||||
"conditionRightPlaceholder": "比较目标值",
|
||||
"variableName": "变量名",
|
||||
"variableValue": "值",
|
||||
"elevated": "Run with sudo",
|
||||
"onError": "If this fails",
|
||||
"allowPrivateNetwork": "Allow local network addresses",
|
||||
"allowPrivateNetworkHint": "Needed for a self-hosted service on your LAN. Off by default to prevent requests to internal addresses."
|
||||
"elevated": "使用 sudo 执行",
|
||||
"onError": "失败时",
|
||||
"allowPrivateNetwork": "允许局域网地址",
|
||||
"allowPrivateNetworkHint": "访问局域网内的自托管服务时需要开启。默认关闭,以防止请求内部地址。"
|
||||
},
|
||||
"onError": {
|
||||
"stop": "停止运行",
|
||||
"continue": "Carry on"
|
||||
"continue": "继续执行"
|
||||
},
|
||||
"needsPlugin": "Needs {{plugin}}",
|
||||
"needsPluginHint": "This automation is skipped until the feature it needs is available again.",
|
||||
"needsPlugin": "需要 {{plugin}}",
|
||||
"needsPluginHint": "在所需功能恢复可用之前,此自动化将被跳过。",
|
||||
"offBadge": "关闭",
|
||||
"docsLink": "查看文档",
|
||||
"ago": {
|
||||
"seconds": "{{count}}s ago",
|
||||
"seconds": "{{count}} 秒前",
|
||||
"minutes": "{{count}} 分钟前",
|
||||
"hours": "{{count}} 小时前",
|
||||
"days": "{{count}} 天前"
|
||||
@@ -166,46 +166,60 @@
|
||||
}
|
||||
},
|
||||
"nav": {
|
||||
"automations": "Automations"
|
||||
"automations": "自动化"
|
||||
},
|
||||
"onboarding": {
|
||||
"feature_automations": "Automations",
|
||||
"feature_automations": "自动化",
|
||||
"feature_automations_desc": "触发特定事件时自动执行任务,并接收通知。"
|
||||
},
|
||||
"maintenance": {
|
||||
"title": "维护中",
|
||||
"description": "Pause host status, health, metric, container and tunnel-disconnection automations while work is in progress. Monitoring, manual runs and scheduled automations continue.",
|
||||
"denied": "You do not have permission to view maintenance.",
|
||||
"sharedReadOnly": "This host was shared with you. Only its owner can change maintenance.",
|
||||
"failed": "Maintenance could not be updated.",
|
||||
"active": "Maintenance active",
|
||||
"estimated": "Estimated completion",
|
||||
"noAutoEnd": "The estimate does not end maintenance. End it explicitly when the work is complete.",
|
||||
"endConfirm": "End maintenance and resume event-triggered automations for this host?",
|
||||
"confirmEnd": "Confirm end",
|
||||
"description": "维护期间暂停由主机状态、健康检查、指标、容器和隧道断开事件触发的自动化。监控、手动执行和定时自动化继续运行。",
|
||||
"denied": "你没有查看维护信息的权限。",
|
||||
"sharedReadOnly": "此主机由他人共享给你,只有所有者才能修改维护设置。",
|
||||
"failed": "无法更新维护设置。",
|
||||
"active": "维护中",
|
||||
"estimated": "预计完成时间",
|
||||
"noAutoEnd": "预计时间不会自动结束维护,请在工作完成后手动结束。",
|
||||
"endConfirm": "结束维护并恢复此主机的事件触发自动化?",
|
||||
"confirmEnd": "确认结束",
|
||||
"cancel": "取消",
|
||||
"end": "End maintenance",
|
||||
"end": "结束维护",
|
||||
"action": "操作",
|
||||
"startNow": "Start now",
|
||||
"schedule": "Schedule for later",
|
||||
"reason": "Reason",
|
||||
"startUtc": "First start (UTC)",
|
||||
"repeat": "Repeat",
|
||||
"once": "Once",
|
||||
"weekly": "Weekly",
|
||||
"monthly": "Monthly",
|
||||
"utcHelp": "Schedules use UTC throughout the year. Monthly schedules skip months without the selected day. Planned windows cannot overlap; overrunning maintenance continues across later windows.",
|
||||
"duration": "Estimated duration (minutes)",
|
||||
"grace": "Grace period (minutes)",
|
||||
"notify": "Notify once if still offline after the estimate plus grace period",
|
||||
"addSchedule": "Add schedule",
|
||||
"schedules": "Schedules",
|
||||
"noSchedules": "No maintenance schedules.",
|
||||
"completed": "Already started",
|
||||
"minutes_one": "{{count}} minute",
|
||||
"minutes_other": "{{count}} minutes",
|
||||
"remove": "Remove schedule",
|
||||
"loadFailed": "Could not refresh maintenance status. Changes are disabled until it can be loaded.",
|
||||
"loading": "Loading maintenance status…"
|
||||
"startNow": "立即开始",
|
||||
"schedule": "安排稍后执行",
|
||||
"reason": "原因",
|
||||
"startUtc": "首次开始时间(UTC)",
|
||||
"repeat": "重复",
|
||||
"once": "仅一次",
|
||||
"weekly": "每周",
|
||||
"monthly": "每月",
|
||||
"utcHelp": "计划全年使用 UTC。每月计划会跳过没有指定日期的月份。计划窗口不能重叠;超时未结束的维护会持续到后续窗口。",
|
||||
"duration": "预计时长(分钟)",
|
||||
"grace": "宽限期(分钟)",
|
||||
"notify": "预计完成时间加宽限期后仍离线时,发送一次通知",
|
||||
"addSchedule": "添加计划",
|
||||
"schedules": "计划",
|
||||
"noSchedules": "暂无维护计划。",
|
||||
"completed": "已开始",
|
||||
"minutes_one": "{{count}} 分钟",
|
||||
"minutes_other": "{{count}} 分钟",
|
||||
"remove": "移除计划",
|
||||
"loadFailed": "无法刷新维护状态,在成功加载之前无法更改设置。",
|
||||
"loading": "正在加载维护状态……"
|
||||
},
|
||||
"ui": {
|
||||
"sidebar": {
|
||||
"automations": {
|
||||
"options": {
|
||||
"connect": "连接",
|
||||
"disconnect": "断开连接",
|
||||
"offline": "离线",
|
||||
"online": "在线",
|
||||
"failing": "故障",
|
||||
"recovered": "已恢复"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -368,8 +368,12 @@ export function StepBlock({
|
||||
<SelectValue />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="connect">connect</SelectItem>
|
||||
<SelectItem value="disconnect">disconnect</SelectItem>
|
||||
<SelectItem value="connect">
|
||||
{t("ui.sidebar.automations.options.connect")}
|
||||
</SelectItem>
|
||||
<SelectItem value="disconnect">
|
||||
{t("ui.sidebar.automations.options.disconnect")}
|
||||
</SelectItem>
|
||||
</SelectContent>
|
||||
</Select>
|
||||
<Input
|
||||
|
||||
@@ -250,13 +250,21 @@ export function TriggerCard({
|
||||
<SelectContent>
|
||||
{trigger.kind === "host_status" ? (
|
||||
<>
|
||||
<SelectItem value="offline">offline</SelectItem>
|
||||
<SelectItem value="online">online</SelectItem>
|
||||
<SelectItem value="offline">
|
||||
{t("ui.sidebar.automations.options.offline")}
|
||||
</SelectItem>
|
||||
<SelectItem value="online">
|
||||
{t("ui.sidebar.automations.options.online")}
|
||||
</SelectItem>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<SelectItem value="failing">failing</SelectItem>
|
||||
<SelectItem value="recovered">recovered</SelectItem>
|
||||
<SelectItem value="failing">
|
||||
{t("ui.sidebar.automations.options.failing")}
|
||||
</SelectItem>
|
||||
<SelectItem value="recovered">
|
||||
{t("ui.sidebar.automations.options.recovered")}
|
||||
</SelectItem>
|
||||
</>
|
||||
)}
|
||||
</SelectContent>
|
||||
|
||||
Reference in new issue
Block a user