mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-31 15:45:23 +00:00
* fix(sso): send the PKCE verifier for GitHub login (#1534) * fix(remote-desktop): clip cursor overflow without disabling zoom (#1535) * test(remote-desktop): preserve sessions beyond one hour (#1536) * fix(hosts): expose controls for overflowing editor tabs (#1537) * fix(hosts): expose controls for overflowing editor tabs * test(hosts): mock resize observation in admin panel tests * fix(status): skip TCP probes while host sessions are active (#1538) * fix(database): batch session activity persistence (#1539) * docs(api): describe cookie and API key authentication (#1540) * fix(snippets): repair missing note column on SQLite upgrades (#1541) * fix(docker): retain stored SSH credential association (#1543) * fix(file-manager): render transfer toasts without plugin hooks (#1546) * feat(hosts): keep compact row actions inline (#1547) * fix(auth): allow retrying unavailable second-factor interfaces (#1549) * fix(auth): reject unresolved legacy identity provisioning (#1550) * fix(desktop): ship the plugin SDK inside Mac App Store builds (#1551) * fix(tmux): pass full session info to the terminal's session picker (#1552) The tmux.sessions service reduced detected sessions to bare names, but the picker reads session.name, so every entry rendered blank and selecting one sent an empty name, which created a new session instead of attaching. * fix(ssh): read force keyboard-interactive as a boolean when resolving hosts (#1553) The column holds the text "true"/"false", and the resolver passed it through as-is. The string "false" is truthy, so the password provider treated every saved host as forced keyboard-interactive and left the password out. Jump hops are built straight from the resolved host, so a password hop whose server doesn't offer keyboard-interactive failed with "All configured authentication methods failed". * fix(database): batch database saves for bulk host writes (#1554) * fix(database): yield to the event loop between database saves Each SQLite save serializes and encrypts the whole database into new buffers, which V8 only releases once the event loop turns. Boot migrations and bulk host import write plugin settings per host and per key in an awaited loop, so hundreds of full copies piled up and the container ran out of memory. * fix(database): save once per bulk host write instead of once per row On SQLite every repository write force-saves the whole database. Boot plugin data migrations, host defaults materialization and the bulk host routes write one row per host per setting, so they serialized and encrypted the full database hundreds of times in a row. DatabaseSaveTrigger.batched wraps a function so force saves made while it runs collapse into a single save when it finishes. Nested scopes fold into the outer one, and work that outlives its scope saves normally. * feat(hosts): add instance-wide predefined tag suggestions (#1548) * feat(hosts): add shared predefined tag suggestions * style(hosts): format tag catalog routes * test(database): advance fake timers past the save yield (#1555) * 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 * fix: 2.8 oidc accounts unable to sign in after upgrading (#1381) * fix: plugins losing the saved ssh login when copying a host (#1391) * fix: fleets, proxmox and automations not getting the host sudo password * fix: host imports running a defaults pass and metrics restart per host (#1384) * fix: high cpu from status probes and full database saves on every sample (#1300) * fix: user data export freezing the server (#1393) * fix: op:// secret references rejected as ssh keys on credentials (#1394) * fix: slow file deletes from the trash lookups on every delete (#1390) * fix: add openapi docs and error handling to host tag routes * test: compare download stream buffers directly so it stops timing out * chore: drop em dash from host row comment * chore: update release notes for 2.9.1 * fix: restore space to add host tags and redesign predefined tags editor * fix: host key silently accepted when the host is missing from the database (#1397) * fix: clearer host login failed status label and fix its translations (#1396) * chore: add host key and status label fixes to release notes * fix: sso and ldap provider dialogs overflowing the screen and using mismatched toggles * chore: increment ver * fix(audit): store plugin entries with no acting user as a null user_id (#1556) Plugin audit entries written outside a request used the literal "system" as user_id. That column references users.id, so the insert was refused (Postgres logs it as an FK violation) and the entry was silently dropped. Write null instead and keep "system" / plugin:<id> in username. * chore: add sso/ldap dialog and audit log fixes to release notes * fix: tunnels and host settings missing from shared hosts on desktop * fix: remote desktop logins missing from shared hosts on desktop * fix: simplify host status to online/offline and keep it live without a refresh * chore: sync Crowdin translations for 2.9.1 --------- Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
316 lines
11 KiB
JSON
316 lines
11 KiB
JSON
{
|
||
"nav": {
|
||
"hostMetrics": "主机指标"
|
||
},
|
||
"hostMetrics": {
|
||
"cpu": "CPU",
|
||
"memory": "内存",
|
||
"disk": "磁盘",
|
||
"network": "网络",
|
||
"uptime": "运行时间",
|
||
"processes": "进程",
|
||
"available": "可用",
|
||
"free": "空闲",
|
||
"connecting": "连接中...",
|
||
"connectionFailed": "连接服务器失败",
|
||
"naCpus": "N/A CPU",
|
||
"cpuCores_one": "{{count}} 核心",
|
||
"cpuCores_other": "{{count}} 核心",
|
||
"cpuUsage": "CPU 使用率",
|
||
"memoryUsage": "内存使用率",
|
||
"diskUsage": "磁盘使用率",
|
||
"selectFilesystem": "选择文件系统",
|
||
"temperature": "温度",
|
||
"highestTemperature": "最高温度",
|
||
"primaryTemperatureSensor": "主传感器",
|
||
"gpu": {
|
||
"title": "GPU",
|
||
"noDevice": "未检测到NVIDIA GPU。请安装NVIDIA驱动程序(它提供nvidia-smi)以查看GPU指标。",
|
||
"driver": "司机 {{version}}",
|
||
"utilization": "利用率",
|
||
"memory": "显存",
|
||
"temperature": "温度",
|
||
"power": "力量",
|
||
"fan": "扇子",
|
||
"processes": "GPU 进程",
|
||
"noProcesses": "没有进程正在使用 GPU"
|
||
},
|
||
"failedToFetchHostConfig": "获取主机配置失败",
|
||
"serverOffline": "服务器离线",
|
||
"cannotFetchMetrics": "无法从离线服务器获取指标",
|
||
"totpFailed": "TOTP 验证失败",
|
||
"noneAuthNotSupported": "主机指标不支持 'none' 认证类型。",
|
||
"noHostSelected": "未选择主机",
|
||
"load": "负载",
|
||
"systemInfo": "系统信息",
|
||
"hostname": "主机名",
|
||
"operatingSystem": "操作系统",
|
||
"kernel": "内核",
|
||
"seconds": "秒",
|
||
"networkInterfaces": "网络接口",
|
||
"noInterfacesFound": "未找到网络接口",
|
||
"noProcessesFound": "未找到进程",
|
||
"processesTotal": "总计",
|
||
"processesRunning": "运行中",
|
||
"loginStats": "SSH 登录统计",
|
||
"noRecentLoginData": "无最近登录数据",
|
||
"ports": {
|
||
"title": "监听端口",
|
||
"protocol": "协议",
|
||
"port": "端口",
|
||
"address": "地址",
|
||
"process": "进程",
|
||
"search": "搜索端口...",
|
||
"allProtocols": "全部",
|
||
"noData": "无监听端口数据"
|
||
},
|
||
"firewall": {
|
||
"title": "防火墙",
|
||
"inactive": "未激活",
|
||
"policy": "策略",
|
||
"rules": "规则",
|
||
"noRules": "该链中无规则",
|
||
"noData": "无可用防火墙数据",
|
||
"action": "操作",
|
||
"protocol": "协议",
|
||
"port": "端口",
|
||
"source": "来源",
|
||
"anywhere": "任意",
|
||
"chains": "链"
|
||
},
|
||
"loadAvg": "平均负载",
|
||
"swap": "交换空间",
|
||
"architecture": "架构",
|
||
"refresh": "刷新",
|
||
"retry": "重试",
|
||
"customize": "自定义布局",
|
||
"reset": "重置",
|
||
"tabLive": "实时",
|
||
"editModeInstructions": "拖动卡片可重新排序,拖动底部边缘可调整大小,使用宽度按钮可更改卡片的跨度。在下方添加或移除卡片。",
|
||
"managers": {
|
||
"services": "服务",
|
||
"processInspector": "进程查看器",
|
||
"logViewer": "日志查看器",
|
||
"cron": "定时任务",
|
||
"packages": "软件包",
|
||
"ssl": "SSL证书",
|
||
"firewall": "防火墙",
|
||
"users": "用户与权限",
|
||
"healthCheck": "健康检查",
|
||
"diskBreakdown": "磁盘详情",
|
||
"systemdTimers": "计时器",
|
||
"topMemory": "按内存占用排行",
|
||
"noData": "无数据",
|
||
"sudoHint": "在主机编辑器中为此主机设置 sudo 密码以启用特权操作。",
|
||
"filter": "筛选...",
|
||
"start": "启动",
|
||
"stop": "停止",
|
||
"restart": "重启",
|
||
"actionDone": "{{name}} 已更新",
|
||
"actionFailed": "操作失败",
|
||
"signalSent": "信号已发送至 PID {{pid}}",
|
||
"killHint": "单击:终止 (SIGTERM)。右键单击:强制终止 (SIGKILL)。",
|
||
"working": "处理中...",
|
||
"update": "更新",
|
||
"upgradeAll": "全部升级",
|
||
"allUpToDate": "所有内容均为最新",
|
||
"save": "保存",
|
||
"command": "命令",
|
||
"enabled": "已启用",
|
||
"cronSaved": "定时任务已更新",
|
||
"clients": "客户端",
|
||
"dryRun": "试运行",
|
||
"renew": "续期",
|
||
"noAcmeClient": "此主机上未找到 ACME 客户端 (certbot 或 acme.sh)。",
|
||
"addInputRule": "添加 INPUT 规则",
|
||
"firewallWarning": "更改仅在运行时有效,需持久化保存。小心不要将自己锁定在外。",
|
||
"ruleApplied": "规则已应用",
|
||
"invalidPort": "请输入有效端口 (1-65535)",
|
||
"newUsername": "新用户名",
|
||
"addUser": "添加",
|
||
"deleteUser": "删除用户",
|
||
"noHealthChecks": "尚未配置健康检查。",
|
||
"follow": "跟踪",
|
||
"noLogData": "无日志输出。",
|
||
"tree": "树形",
|
||
"enableDisable": "启用/禁用开机自启",
|
||
"grantSudo": "授予 sudo",
|
||
"revokeSudo": "撤销 sudo",
|
||
"sslIssueCert": "签发证书",
|
||
"sslExpired": "已过期",
|
||
"sslInDays": "{{days}} 天后",
|
||
"sslNeedDomain": "至少输入一个域名",
|
||
"sslIssued": "证书已签发",
|
||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||
"sslHttpStandalone": "HTTP (独立模式)",
|
||
"sslHttpWebroot": "HTTP (webroot)",
|
||
"sslDns": "DNS",
|
||
"sslDnsProvider": "DNS 提供商 (如 cloudflare)",
|
||
"sslIssueHint": "DNS 提供商凭据必须已在主机上配置。",
|
||
"sslRevoke": "吊销证书",
|
||
"sslRevoked": "证书已吊销",
|
||
"sslRevokeConfirm": "吊销并删除证书 \"{{name}}\"?此操作无法撤销。",
|
||
"healthRun": "运行",
|
||
"healthName": "名称",
|
||
"healthTarget": "主机 / 地址",
|
||
"healthAddCheck": "添加检查",
|
||
"healthSaved": "健康检查已保存",
|
||
"healthMissingFields": "每个检查都需要名称和目标",
|
||
"logFile": "文件",
|
||
"logUnit": "单元",
|
||
"logCustomPath": "自定义路径 (位于 /var/log 下,可选)",
|
||
"logGrep": "过滤行...",
|
||
"firewallPersist": "持久化规则",
|
||
"firewallPersisted": "防火墙规则已持久化",
|
||
"wireguard": "WireGuard",
|
||
"wgNotInstalled": "此主机未安装 WireGuard",
|
||
"wgNoInterfaces": "未配置 WireGuard 接口",
|
||
"wgInterfaceUp": "启用",
|
||
"wgInterfaceDown": "停用",
|
||
"wgBringingUp": "正在启用 {{name}}...",
|
||
"wgBringingDown": "正在停用 {{name}}...",
|
||
"wgInterfaceUpDone": "{{name}} 已启用",
|
||
"wgInterfaceDownDone": "{{name}} 已停用",
|
||
"wgListenPort": "端口",
|
||
"wgPublicKey": "公钥",
|
||
"wgEndpoint": "对端",
|
||
"wgAllowedIPs": "允许的 IP",
|
||
"wgLastHandshake": "上次握手",
|
||
"wgHandshakeNever": "从未",
|
||
"wgTransfer": "传输",
|
||
"wgNoPeers": "没有对手"
|
||
}
|
||
},
|
||
"metricsHistory": {
|
||
"title": "指标历史",
|
||
"historySuffix": "历史",
|
||
"cpuMemoryDisk": "CPU / 内存 / 磁盘",
|
||
"network": "网络",
|
||
"download": "RX",
|
||
"upload": "TX",
|
||
"noData": "此时间范围内没有可用的历史数据。",
|
||
"custom": "自定义",
|
||
"to": "至",
|
||
"apply": "应用",
|
||
"viewHistory": "查看历史"
|
||
},
|
||
"hosts": {
|
||
"tabHostMetrics": "主机指标",
|
||
"metricsCollectionLabel": "指标收集",
|
||
"enableMetricsLabel": "启用指标",
|
||
"enableMetricsDesc": "从此主机收集 CPU、RAM、磁盘和其他指标",
|
||
"useGlobalMetrics": "使用全局间隔",
|
||
"useGlobalMetricsDesc": "使用服务器范围的指标间隔覆盖",
|
||
"metricsIntervalS": "指标间隔(秒)",
|
||
"metricsIntervalDesc2": "指标快照之间的秒数",
|
||
"excludedMountsLabel": "排除的挂载点",
|
||
"monitoredMountsLabel": "自定义监控路径",
|
||
"monitoredMountsDesc": "添加未作为单独挂载点公开的路径,包括绑定挂载的 Home Assistant 路径,例如 /config。",
|
||
"monitoredMountPathPlaceholder": "路径(/config,/mnt/data)",
|
||
"monitoredMountLabelPlaceholder": "标签(可选)",
|
||
"addMonitoredMount": "添加路径",
|
||
"excludedMountsDesc": "隐藏此主机磁盘使用情况和警报中的特定挂载点或文件系统类型(例如 nfs、cifs)。",
|
||
"excludedMountsPlaceholder": "挂载路径(/mnt/nas)或文件系统类型(nfs、cifs)",
|
||
"excludedMountsEmpty": "未排除任何挂载点。显示所有检测到的文件系统。",
|
||
"addExcludedMount": "添加",
|
||
"visibleWidgets": "可见小部件",
|
||
"widgetsMovedToHostMetrics": "卡片现在可在“主机指标”选项卡中直接添加、排列和调整大小。打开此主机的“主机指标”,使用“自定义”选择要显示的卡片。",
|
||
"hostNotFound": "未找到主机",
|
||
"loadingHost": "正在加载主机..."
|
||
},
|
||
"onboarding": {
|
||
"feature_metrics": "指标与告警",
|
||
"feature_metrics_desc": "跟踪 CPU、内存和磁盘的运行情况,并在它们出现故障时发出告警。"
|
||
},
|
||
"admin": {
|
||
"metricsHistoryRetention": "指标历史保留",
|
||
"metricsHistoryRetentionRange": "1 到 90 天",
|
||
"days": "天"
|
||
},
|
||
"homepage": {
|
||
"noData": "暂无数据",
|
||
"showCurrentValue": "显示当前值",
|
||
"chartMetric": "指标",
|
||
"metricRange": "范围",
|
||
"host": "主机",
|
||
"loading": "加载中...",
|
||
"metricCpu": "CPU",
|
||
"metricDisk": "磁盘",
|
||
"metricHostname": "主机名",
|
||
"metricKernel": "内核",
|
||
"metricMemory": "内存",
|
||
"metricNetwork": "网络",
|
||
"metricOs": "操作系统",
|
||
"metricProcesses": "进程",
|
||
"metricProcessesRunning": "运行中",
|
||
"metricProcessesTotal": "总数",
|
||
"metricUptime": "运行时间",
|
||
"metricsNotAvailable": "指标不可用",
|
||
"noHostSelected": "未选择主机",
|
||
"selectHost": "选择主机..."
|
||
},
|
||
"terminalStatus": {
|
||
"unavailable": "实时统计数据不可用"
|
||
},
|
||
"dashboard": {
|
||
"cpu": "CPU",
|
||
"ram": "内存"
|
||
},
|
||
"dashboardTab": {
|
||
"disk": "磁盘"
|
||
},
|
||
"terminal": {
|
||
"connected": "已连接"
|
||
},
|
||
"permissions": {
|
||
"use": {
|
||
"title": "使用主机指标",
|
||
"description": "查看主机指标并使用您可以访问的主机上的主机管理器(服务、软件包、防火墙等)。"
|
||
}
|
||
},
|
||
"settings": {
|
||
"admin": {
|
||
"metricsInterval": {
|
||
"label": "指标间隔(秒)",
|
||
"description": "除非主机自行设置间隔,否则将对正在查看的主机进行采样的频率。"
|
||
},
|
||
"historyRetentionDays": {
|
||
"label": "历史数据保留时间(天)",
|
||
"description": "历史图表中的指标样本保留多长时间?"
|
||
},
|
||
"enabledForNewHosts": {
|
||
"label": "新主机指标",
|
||
"description": "新主机是否默认开启指标收集功能。"
|
||
}
|
||
},
|
||
"user": {
|
||
"temperatureUnit": {
|
||
"label": "温度单位",
|
||
"description": "主机指标中如何显示温度。",
|
||
"celsius": "摄氏度",
|
||
"fahrenheit": "华氏度"
|
||
}
|
||
},
|
||
"host": {
|
||
"metricsEnabled": {
|
||
"label": "收集指标"
|
||
},
|
||
"metricsInterval": {
|
||
"label": "指标间隔(秒)"
|
||
},
|
||
"enabledWidgets": {
|
||
"label": "已启用的小部件"
|
||
},
|
||
"excludedMounts": {
|
||
"label": "排除的安装点"
|
||
},
|
||
"monitoredMounts": {
|
||
"label": "监控路径"
|
||
}
|
||
}
|
||
},
|
||
"plugin": {
|
||
"name": "Host Metrics"
|
||
}
|
||
}
|