Files
orisys-app/apps/autocal/config/locales/zh_CN.json
T
ykcheungab 570daae68f autocal: 新增单位与换算页(默认锁定)及轴页报警与事件日志
- 设备设置新增“单位与换算”页:显示各轴 UNITS、读回值、脉冲/mm 换算与核对状态;
  默认锁定,点击“修改”后才可编辑,应用前弹窗确认,旋转轴偏离标定值时额外警告
- 轴调试页:脉冲当量改为只读并提供入口;新增报警与事件日志(报警、使能、
  回零、读取失败、单位不符等)及单位核对摘要
- 新增 motion/unit_report.py、motion/events.py 及对应测试
2026-10-19 10:15:07 +08:00

979 lines
51 KiB
JSON
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"app": {
"title": "Orisys AutoCal 标定台控制",
"about_title": "关于 Orisys AutoCal",
"about_body": "Orisys AutoCal — 五轴标定台内部控制器\n版本: {app_version}\n共享库: {shared_version} (API {api_version})\n\nQt 绑定: {binding}\n控制器库: {dll_dir}\n偏好文件: {prefs_path}\n\n仅供内部使用。",
"internal_notice": "内部工具:不随客户安装包发布。"
},
"brand": {
"name": "ORISYS",
"detail": "叠动科技"
},
"menu": {
"file": "文件",
"device_setup": "设备设置…",
"open_bas": "下载 BAS 初始化程序…",
"reveal_config": "在资源管理器中显示配置…",
"quit": "退出",
"view": "视图",
"theme": "主题",
"theme_dark": "深色",
"theme_light": "浅色",
"language": "语言",
"lang_zh": "简体中文",
"lang_en": "English",
"show_diagnostics": "诊断信息",
"tabs": "工作区",
"outputs": "输出目录",
"help": "帮助",
"about": "关于 AutoCal"
},
"setup": {
"open": "设备设置",
"title": "设备设置",
"hint": "连接与总线初始化每次开机只需确认一次,因此收进这里;顶栏状态条持续显示结果,设置窗口可以一直开着。",
"tab_connection": "连接",
"tab_bus": "总线初始化",
"tab_axes": "轴映射",
"axes_hint": "总线只报告轴号,不报告它推的是哪个方向。这里的对应关系来自实际接线,运动前必须完整且不重复。",
"role_x": "X(工作台)",
"role_y": "Y(工作台)",
"role_z": "Z(压轴)",
"role_yaw": "yaw(回转)",
"role_pitch": "pitch(俯仰)",
"role_axis": "驱动器",
"axes_duplicate": "同一驱动器被分配给多个方向:{detail}",
"tab_press": "压轴零位",
"press_hint": "解算给出的是接触点在台面原点平面之上的几何高度(mm);驱动器收到的是它自己的坐标,从它自己的机械零位算起。两者只差一个实机测量值。没有标定之前,执行动作会保持压轴不动,而不会把几何高度当成控制器目标直接下发。",
"press_zero": "零点(压头触到台面原点平面时的读数)",
"press_rising": "坐标增大时压头上升",
"press_calibrated": "已在本机测量并确认",
"press_set": "已标定:压轴目标 = 零点 ± 接触高度。",
"press_unset": "未标定:执行动作会保持压轴不动。",
"close": "关闭",
"chip_hint": "点击打开设备设置 — {name}",
"tab_units": "单位与换算"
},
"move": {
"execute": "执行动作",
"execute_hint": "把选中点解算出的位姿送到平台:回转、俯仰、工作台 X/Y、压轴 Z 同时移动。",
"stop": "停止",
"stop_hint": "立即停止所有轴(与顶栏「全部停止」相同)。",
"return_initial": "回初始位",
"return_hint": "回转、俯仰、压轴 Z 回到 0。工作台停在初始位置:X 为 0 mm,Y 为 0 mm。",
"confirm_title": "确认运动",
"confirm_execute": "将同时移动:\n\n{steps}\n\n请确认仿真与机床一致。",
"confirm_return": "将同时移回零点:\n\n{steps}\n\n请确认机床上没有干涉。",
"hold_note": "不动作:{roles}(这些轴保持现状,不参与本次动作)",
"cancelled": "已取消,未发出任何运动",
"confirm_check": "移动前确认",
"confirm_hint": "取消勾选后,执行动作与回初始位将直接发出(停止不受影响)。",
"no_point": "未选中标定点,无法执行",
"busy": "已有运动在执行",
"refused": "运动被拒绝",
"done": "运动完成",
"failed": "运动失败",
"stopped": "已停止,后续动作已取消"
},
"connection": {
"title": "连接控制器",
"mode": "连接方式",
"mode_eth": "以太网",
"mode_com": "串口",
"mode_pci": "PCI 卡",
"mode_local": "本地/仿真",
"mode_demo": "演示 (无硬件)",
"ip": "IP",
"scan": "IP 扫描",
"com": "串口号",
"card": "卡号",
"local_string": "连接参数",
"open": "连接",
"close": "断开连接",
"status": "状态",
"state_open": "已连接",
"state_closed": "未连接",
"state_connecting": "连接中…",
"source": "库路径",
"no_more": "连接方式『{mode}』暂未提供。"
},
"bus": {
"title": "总线初始化",
"bas_path": "BAS 文件",
"choose": "选择 BAS…",
"download": "下载并初始化",
"reinit": "重新初始化",
"type": "总线类型",
"type_ecat": "EtherCAT",
"type_rtex": "RTEX",
"type_unknown": "未知",
"state": "初始化状态",
"state_pending": "未完成",
"state_running": "正在初始化…",
"state_ok": "初始化成功",
"state_unverified": "未确认初始化",
"unverified_hint": "控制器保留了上次的总线初始化标志,本次开机尚未重新扫描;如无法运动,请先下载 BAS 文件并重新初始化。",
"state_failed": "初始化失败",
"state_timeout": "初始化超时",
"nodes": "节点数量",
"axes": "轴数量",
"downloaded": "文件已下载,控制器将延时扫描总线",
"dialog_title": "选择 BAS 文件"
},
"axes": {
"title": "轴运动",
"axis": "轴号",
"enable": "使能",
"enable_on": "已使能",
"enable_off": "未使能",
"atype": "轴类型",
"units": "脉冲当量",
"speed": "速度",
"accel": "加速度",
"dpos": "命令位置",
"mpos": "反馈位置",
"dpos_mm": "命令位置 (mm)",
"mpos_mm": "反馈位置 (mm)",
"status": "轴状态",
"motion": "运动状态",
"motion_word": "运动",
"idle": "停止",
"moving": "运动中",
"position_pair": "{value} ({mm} mm)",
"enable_all": "全部使能",
"disable_all": "全部关闭使能",
"clear_alarm_all": "清除全部报警",
"detail": "选中轴 {axis}: 轴类型 {atype} · 加速度 {accel} · 反馈 {mpos} ({mpos_mm} mm) · 轴状态 {status} · {home}",
"detail_none": "选中轴 {axis}: 尚无数据(未连接或未初始化)",
"home_status": "回零状态",
"home_ok": "回零完成",
"home_pending": "回零未完成",
"home_running": "回零中",
"jog_fwd": "正转",
"jog_rev": "反转",
"stop_all": "全部停止",
"stop": "停止",
"target": "目标位置",
"move_abs": "绝对定位",
"move_rel": "相对运动",
"home_mode": "回零模式",
"home_high": "回零高速",
"home_low": "回零低速",
"home_offset": "回零偏移",
"clear_alarm": "清除报警",
"apply": "应用参数",
"home": "启动回零",
"controls": "操作",
"mm_derived_tip": "毫米值由脉冲当量换算得出,是显示值,不是标定长度。",
"enabled_count": "已使能 {on}/{total} 轴",
"units_open": "单位与换算…",
"units_locked_tip": "单位已锁定,这里只读。到“设备设置 → 单位与换算”点“修改”才能更改。",
"events_title": "报警与事件",
"events_clear": "清空记录",
"events_empty": "暂无事件。报警、使能、回零、读取失败和单位不一致发生变化时,会记录在这里。",
"ev_connected": "控制器已连接",
"ev_disconnected": "控制器已断开",
"ev_alarm_on": "轴 {axis} 报警",
"ev_alarm_off": "轴 {axis} 报警已解除",
"ev_enabled": "轴 {axis} 已使能",
"ev_disabled": "轴 {axis} 已关闭使能",
"ev_read_failed": "轴 {axis} 读取失败:{detail}",
"ev_read_ok": "轴 {axis} 读取恢复",
"ev_home_started": "轴 {axis} 开始回零",
"ev_home_done": "轴 {axis} 回零完成",
"ev_home_incomplete": "轴 {axis} 回零结束,但未报告完成",
"ev_units_mismatch": "轴 {axis} UNITS 不一致:配置 {expected},读回 {observed}",
"ev_units_ok": "轴 {axis} UNITS 已一致"
},
"busdata": {
"title": "总线数据交互",
"group": "总线数据 (SDO / RTEX)",
"ecat": "EtherCAT (SDO)",
"rtex": "RTEX",
"node": "节点号",
"index": "对象字典",
"subindex": "子编号",
"type": "数据类型",
"value": "数据",
"read": "读",
"write": "写",
"axis": "轴号",
"parameter": "参数地址",
"last_result": "最近一次: {text}",
"not_available": "当前总线不支持该操作",
"read_ok": "读取成功: {value}",
"write_ok": "写入成功"
},
"status": {
"motion": "运动控制",
"ready": "就绪",
"poll_ok": "状态刷新正常",
"poll_paused": "状态刷新已暂停",
"poll_stalled": "状态刷新中断",
"last_error": "最近错误",
"none": "无",
"refused": "操作被拒绝",
"done": "完成",
"failed": "失败",
"pause": "暂停刷新",
"resume": "继续刷新",
"paused": "已暂停状态刷新",
"alarm_short": "报警",
"axes_enabled": "已使能 {on}/{total} 轴",
"health_none": "刷新 —",
"health_age": "刷新 {ms} ms 前",
"health_paused": "刷新已暂停",
"poll_every": "刷新间隔 {ms} ms"
},
"run": {
"title": "运行",
"phase_idle": "空闲",
"phase_dry_run": "干跑中",
"phase_running": "运行中",
"phase_paused": "已暂停",
"phase_done": "已完成",
"phase_failed": "失败",
"step_of": "第 {done}/{total} 点",
"no_steps": "尚未生成标定点",
"elapsed_only": "已用 {elapsed}",
"elapsed_remaining": "已用 {elapsed} · 预计剩余 {remaining}",
"run": "运行",
"pause": "暂停",
"abort": "中止",
"abort_stopped": "已中止运行并停止全部轴。",
"not_implemented": "运行器属于 P7 阶段,尚未实现;中止随时可用。"
},
"readout": {
"title": "轴状态"
},
"workspace": {
"tab_axes": "轴调试",
"tab_sequence": "测试序列",
"tab_finger": "几何与安装",
"tab_sensor": "标定采集",
"tab_records": "标定记录",
"not_built": "尚未实现",
"reserved_sensor": "传感器连接、实时图像与力曲线将在此显示:设备与信号源选择、预览、以及和 Studio 类似的曲线视图(占用空间更小)。"
},
"source": {
"kind": "输入来源",
"kind_video": "视频文件",
"kind_camera": "实时相机",
"video": "Finger 视频",
"camera_index": "相机编号",
"config": "传感器配置",
"browse": "选择…",
"start": "启动输入",
"stop": "停止",
"idle": "请选择输入来源和 sensor.json",
"no_frame": "等待处理后的画面",
"preview_only": "先在选择测点页确定 U/V,再在此检查实时二维 UV 图像并开始试验记录。",
"choose_video": "选择 Finger 视频",
"choose_config": "选择 sensor.json",
"video_filter": "视频文件 (*.mp4 *.avi *.mov *.mkv);;所有文件 (*)",
"missing_input": "请选择存在的 sensor.json;视频模式还需选择视频文件",
"opening": "正在打开输入…",
"running": "正在处理画面",
"stopping": "正在停止…",
"stopped": "已停止",
"finished": "视频播放完毕",
"disconnected": "相机连接中断",
"failed": "采集失败,请检查输入来源",
"error": "采集或处理失败:{detail}",
"basis_replay": "本次解码",
"basis_camera": "相机接收",
"basis_unknown": "读取时间(来源未确认)",
"frame": "帧 {frame} · 源帧 {source_frame} · {basis} {time} · 丢帧 {dropped}"
},
"calibration": {
"sensor_model": "产品型号",
"sensor_sn": "传感器 SN",
"output": "保存目录",
"site_view": "选择测点",
"live_view": "实时二维 UV 图像",
"uv": "U / V (px)",
"position": "网格坐标",
"levels": "加载档位 (N)",
"hold": "每档保持时间",
"hold_tip": "到达目标力并确认后倒计时;到时结束该档保持窗口并提示下一档,录像持续。计时不代表已验证稳定。",
"reference": "人工参考力 (N)",
"start": "开始本次试验",
"start_tip": "在本场标定下新建一次测点试验,连续记录初始零载、加载、卸载和恢复。不会移动平台。",
"confirm": "已到目标力,开始保持",
"confirm_tip": "达到当前目标并填写实际参考力后点击。保持期间不要换档;倒计时结束后再按提示调整。",
"finish": "完成本次试验",
"finish_tip": "初始零载及全部加载、卸载保持完成后停止录像,检查并保存本次结果。",
"abort": "提前结束(保留未完成数据)",
"abort_tip": "立即结束本次试验并保留未完成数据。重试创建新的 trial,仍归入本场标定。",
"load": "加载",
"unload": "卸载",
"next_step": "当前目标:{branch} {load:g} N;到达后填写实际参考力并开始保持",
"before_start": "先选测点并启动输入,再开始试验;先记录初始零载",
"ready_to_finish": "所有保持窗口已完成,请完成本次试验",
"no_step": "无待确认档位",
"progress": "进度 {done}/{total} · {status}",
"source_state": "输入:{status} · 帧 {frame} · 采集丢帧 {dropped}",
"replay_note": "视频重放仅用于调试;本次人工参考力不能与原实验时间同步。",
"idle": "未开始",
"recording": "录制中",
"closing": "正在写盘",
"complete": "已完成",
"incomplete": "未完成",
"result": "{status}:{path}",
"incomplete_result": "本次录制未完成;已写入的数据在:{path}",
"error": "操作失败:{detail}",
"invalid_site": "请先选择有效的 UV 测点",
"start_input": "请先启动相机或视频输入",
"reference_required": "请输入实际参考力",
"output_required": "请选择保存目录",
"zero": "初始零载",
"holding": "正在保持:{branch} {load:g} N · 剩余 {seconds:.1f} s;请勿换档",
"close_session": "结束本场标定",
"close_session_tip": "关闭包含多个测点和重复试验的会话;有未完成试验则保留未完成状态。之后开始试验会新建一场。",
"session_none": "尚未建立本场标定;首次开始试验时创建。",
"session_active": "本场标定:{sites} 个测点 · {trials} 次试验\n{path}",
"session_closed": "本场标定已结束({status}):{path}",
"close_before_mapping": "请先结束本场标定,再更换 UV 映射或导出包",
"path": "本次路径 (N):{path}",
"invalid_levels": "请输入严格递增的加载档位,每档大于 0 且不超过 30 N"
},
"multipoint": {
"tab": "02 多点采集",
"hint": "测点直接用标定采集「选择测点」里点中的位置。添加时会用法向解出平台姿态,使该点法向朝上。点「对齐法向」会先询问再移动五个轴;未连接控制器时不会动,原因写在本页下方。模拟采集不移动平台。砝码参考由人工填写。六维力参考记录三个分量,再按你填写的旋转投影到刀具轴,不会把某一轴直接当成法向。换点前确认压头已脱离。",
"site_id": "测点编号",
"coordinates": "位置 X / Y / Z",
"levels": "该点加载档位 (N),不含空载",
"hold": "保持时间",
"repeats": "重复次数",
"frame": "坐标所在坐标系",
"frame_placeholder": "填写坐标系名称,程序不解释、不换算",
"min_force": "最小力 (N)",
"min_placeholder": "空着表示 0;空载基线总会记录",
"max_force": "最大力 (N)",
"force_placeholder": "必须填写,程序不预设",
"force_required": "请填写最大力,程序不会替你假设",
"add": "添加测点",
"update": "更新所选",
"remove": "删除所选",
"up": "上移",
"down": "下移",
"align": "对齐法向",
"reacquire": "补采所选",
"source": "参考力来源",
"source_weight": "砝码",
"source_wrench": "六维力",
"fx": "Fx",
"fy": "Fy",
"fz": "Fz",
"rotation": "力传感器到刀具的旋转",
"rotation_placeholder": "9 个数,行优先。不填不能计算法向力",
"reference": "实测参考力 (N)",
"simulate": "模拟采集",
"start": "开始采集",
"confirm": "已到目标力,开始保持",
"liftoff": "确认压头已脱离传感器",
"remeasure": "重测本档",
"remeasure_ready": "这一档已作废,进度停在同一档。接上传感器,等曲线回到断线前靠近零的位置,人工参考力填这一档的力,再点「已到目标力,开始保持」。",
"stop": "停止并保留数据",
"stopped_reason": "操作员停止",
"finger_busy": "单点试验进行中,请先结束再开始多点采集",
"camera_required": "开始采集前请先启动相机或视频输入。没有图像时用模拟采集,模拟不会打开相机,也不会移动平台。",
"liftoff_wait": "上一点已卸载。下一点是 {site}。先抬起接触头,再点「对齐法向」并确认,平台才移到这个点、法向朝上。到位后再点「确认压头已脱离传感器」。程序不会自动移动。总进度 {done}/{total}",
"progress": "测点 {site}({site_index}/{site_count})· {branch} {load:g} N · 重复 {repeat}/{repeats} · 总进度 {done}/{total} · 剩余 {seconds:.1f} s",
"idle": "尚未开始。先在「选择测点」里点一个位置,再添加测点,然后模拟采集或开始采集。",
"pose": "求解姿态:工作台 X {x:.3f} mm,Y {y:.3f} mm,yaw {yaw:.3f}°,pitch {pitch:.3f}°,Z {z:.3f} mm,残差 {residual:.3f}°。点「对齐法向」后才会询问并移动平台。",
"no_pose": "这个测点还没有法向。请在「选择测点」里点一个有效位置,再点「添加测点」或「更新所选」。",
"no_map": "请先载入传感器导出包,让「选择测点」出现曲面。",
"no_solver": "姿态求解还没有接上。",
"align_select": "请先在左边表里点中要去的测点,再点「对齐法向」。",
"align_busy": "这一轮还在采集:等它结束再对准其它测点,中途移动平台会让这次记录作废。",
"pose_refused": "这个点的姿态不能执行:{reason}",
"point_moved": "这个点记录的坐标与当前映射不符(相差 {mm} mm)。请重新在「选择测点」里取这个点并确认,不要用旧记录移动平台。",
"normal_moved": "这个点记录的法向与当前映射不符(相差 {deg}°)。请重新在「选择测点」里取这个点并确认。",
"point_unmapped": "这个点没有可用的来源坐标(既没有 UV 映射,也不是传感器坐标)。请重新在「选择测点」里取这个点。",
"no_finger": "手指调试页面还没有接上。",
"no_finger_points": "手指调试里还没有选点。",
"branch_baseline": "空载",
"branch_load": "加载",
"branch_unload": "卸载",
"mesh_required": "请先在右侧用 U/V 选出测点,出现网格坐标后再添加。",
"right_confirm": "这一档用右侧:砝码填写人工参考力;六维力填写左侧 Fx、Fy、Fz。然后点「已到目标力,开始保持」。",
"save": "保存状态:{status}\n{path}",
"save_idle": "尚未保存",
"save_writing": "正在写入",
"save_kept": "已停止,已经采集的数据保留在目录中",
"save_done": "本场已完成",
"col_id": "编号",
"col_x": "X",
"col_y": "Y",
"col_z": "Z",
"col_levels": "档位 (N)",
"col_hold": "保持 (s)",
"col_repeats": "重复",
"col_done": "完成",
"capture": "录像:{status} · 帧 {frames} · 丢帧 {dropped} · {reason}",
"capture_idle": "未就绪",
"capture_recording": "录制中",
"capture_closing": "收尾中",
"capture_complete": "完整",
"capture_incomplete": "证据不完整",
"capture_reason_restarted": "图像来源已重启",
"capture_reason_zero_frames": "没有写入任何帧",
"capture_reason_write_error": "写盘失败",
"capture_reason_video_missing": "没有录像帧",
"capture_reason_video_undecodable": "录像无法解码",
"capture_reason_dropped": "队列丢帧",
"capture_reason_segments": "录像分段数不符",
"capture_reason_timeout": "收尾超时",
"capture_wait": "录像未就绪,暂时不能确认保持"
},
"finger": {
"title": "几何与安装",
"bundle_path": "导出包",
"load": "载入导出包…",
"reset_view": "复位视角",
"initial_view": "初始视角",
"textured": "UV 贴图:{name}",
"untextured": "无 UV 贴图:当前显示的是着色布局图。",
"texture_missing": "未找到贴图 {path}:当前显示的是着色布局图。",
"flat_title": "展开平面图(点击选点)",
"readout_title": "读数",
"preview_title": "三维预览",
"select_hint": "在展开图上点击一点以试算该点的姿态。",
"no_bundle": "尚未载入导出包。",
"no_surface": "像素 ({x}, {y}) 不在传感面上(UV 空隙)。",
"row_sensor_point": "传感器坐标 (mm)",
"row_sensor_normal": "曲面法向",
"row_platform_point": "平台坐标 (mm)",
"row_pose": "位姿 X / Y / yaw / pitch",
"row_branch": "所选姿态与理由",
"row_table_move": "工作台移动 X / Y",
"row_press": "压轴目标",
"row_residual": "对齐残差",
"row_match": "点位匹配",
"match_none": "先在展开图上选一个点",
"match_offline": "未连接平台",
"match_value": "选择 X {sx} Y {sy} mm,回转 {syaw}°,俯仰 {spitch}°。实际 X {ax} Y {ay} mm,回转 {ayaw}°,俯仰 {apitch}°。差 X {dx} Y {dy} mm,回转 {dyaw}°,俯仰 {dpitch}°",
"row_frames": "坐标映射",
"branch_none": "—",
"branch_value": "{reason}(本解合计 {travel}°,另一精确解 {other}°)",
"branch_only": "唯一精确解",
"branch_alignment": "残差最小",
"branch_in_range": "行程内",
"branch_upright": "传感面仍朝上",
"branch_smallest": "转动量最小",
"branch_crown": "已朝上,只平移",
"press_unset": "未标定零位:本动作保持压轴不动(在 设备设置 → 压轴零位 填入实测零位)",
"press_target": "{target} mm(几何接触高度 {height} mm)",
"tool_xy": "刀具 X / Y",
"tool_hint": "刀具在工作台坐标系中的位置。每个测点的工作台移动都相对这个位置计算。",
"sensor_xy": "传感器 X / Y",
"sensor_zy": "传感器 Z / yaw",
"setup_hint": "传感器在转台零位时相对工作台原点的实际安装位姿:X/Y/Z 平移与绕 Z 的偏摆。Z 为安装板厚度,当前安装台是 8 mm。",
"edit_not_a_number": "该单元格需要数字,已保留原值。",
"residual_value": "{residual}° — {verdict}",
"reachable": "该点法向可与 Z 轴对齐",
"unreachable": "该点法向无法与 Z 轴对齐(受 yaw 行程限制)",
"reach_summary": "曲面可对齐顶点 {aligned}/{vertices}({share}%),最差 {worst}°",
"preview_legend": "颜色含义:绿→红=表面对齐残差;红/绿/蓝三色轴=工作台 X/Y/Z(位于原点);黄色直线=刀具轴(+Z 目标方向,位置即刀具 X/Y);橙色圆点=工作台原点;黄色方框=传感器安装基面(高度=传感器 Z,含安装板);青色线=规划路径(先转台圆弧、后工作台直线);紫圈=转台当前姿态,浅紫圈=动作结束时的姿态,与不动的方格网对比即可看出整个变换;红点=表中选中点;白点+蓝线=取点接触点及其法向。",
"preview_legend_short": "绿→红=对齐残差 · 红/绿/蓝=工作台 X/Y/Z · 黄线=刀具轴(+Z) · 橙点=原点 · 黄框=安装基面 · 青线=规划路径 · 紫圈=转台姿态 · 白点=接触点",
"show_axes": "显示运动轴",
"show_table": "显示转台原点平面",
"show_trajectory": "显示刀具路径",
"path_summary": "规划路径:行程 {reach} mm;绕转台原点的圆弧半径 {radius} mm。",
"landing": "落点 X/Y {x} {y} mm",
"tool_at": "刀具 X/Y {x} {y} mm",
"landing_on_tool": "✓ 已对准",
"landing_off_tool": "✗ 未对准(差 {gap} mm)",
"preview_legend_table": "灰细线=两个旋转轴(穿过同一个原点);转台坐标系固定不动,传感器随动作相对它移动。",
"sim_play": "播放动作",
"sim_stop": "停止",
"sim_hint": "播放该点的求解动作:先由转台把法向转到工具轴上,再由 XY 工作台移动。请先取点。",
"preview_no_gl": "无 OpenGL 上下文:{error}",
"preview_draw_failed": "绘制失败:{error}",
"preview_solve_failed": "求解失败:{error}",
"loaded": "已载入导出包:{vertices} 顶点 · {triangles} 三角面 · {extent} mm · 每单位 {scale} mm",
"load_failed": "载入失败: {error}",
"picked": "已选点:残差 {residual}° · yaw {yaw}° · pitch {pitch}°"
},
"sequence": {
"title": "测试序列设计",
"profile_title": "标定点生成",
"preview_title": "预览",
"validation_title": "校验",
"points_title": "标定点列表",
"field_mode": "曲面模式",
"field_name": "序列名称",
"field_note": "备注",
"field_pitch": "点距 (mm)",
"field_margin": "边界余量 (mm)",
"field_radius": "曲面半径 (mm)",
"field_clear_height": "安全高度 (mm)",
"field_approach_speed": "进给速度 (mm/s)",
"field_press_speed": "下压速度 (mm/s)",
"field_press_depth": "下压深度 (mm)",
"field_dwell": "保压 (s)",
"field_settle": "稳定窗口 (s)",
"field_repeats": "重复次数",
"field_order": "遍历顺序",
"mode_flat": "平面",
"mode_curved": "曲面",
"order_row": "按行",
"order_serpentine": "蛇形",
"order_distance": "按距离",
"preview_placeholder": "三维预览:传感器表面 · 标定点 · 遍历顺序\n(仿真阶段实现)",
"preview_hint": "生成后可在此检查点是否落在曲面上、是否在行程内、接触能否被确认。",
"validation_pending": "尚未生成标定点。",
"check_on_surface": "在曲面范围内",
"check_within_travel": "在行程内",
"check_contact_confirmable": "接触可确认",
"btn_generate": "生成标定点",
"btn_simulate": "仿真",
"btn_dry_run": "干跑(不接触)",
"btn_export": "导出序列…",
"btn_import": "导入序列…",
"import_export_tip": "序列以 JSON 文档保存(.oryseq),可跨机器复用;导入前会校验格式版本。",
"export_failed": "导出失败: {error}",
"import_failed": "导入失败: {error}",
"pending_tooltip": "该功能属于 {phase} 阶段,尚未实现。",
"col_index": "#",
"col_x": "X (mm)",
"col_y": "Y (mm)",
"col_z": "Z (mm)",
"col_status": "状态",
"col_sensitivity": "灵敏度(上次)",
"col_samples": "样本",
"col_actions": "操作",
"not_generated": "—",
"status_pending": "待测",
"status_skipped": "已跳过",
"summary": "{count} 点({enabled} 启用) · {spans} · 预计 {duration}(估计值)",
"summary_empty": "尚无标定点:生成或导入后显示点数与行程范围。",
"dialog_export": "导出序列",
"dialog_import": "导入序列",
"filter_sequence": "标定序列 (*.oryseq *.json)",
"exported": "已导出序列: {name}",
"imported": "已导入序列: {name}({count} 点)",
"import_warnings": "导入有 {count} 项提示",
"confirm_discard": "当前序列尚未导出,导入将替换它。是否继续?",
"points_hint": "坐标由网格生成并逐点校验,不接受手工输入:手工输入的坐标没有任何检查,一个错数字会毁掉整条序列。"
},
"action": {
"ok": "完成",
"refused": "已拒绝",
"failed": "失败"
},
"diagnostics": {
"title": "诊断信息",
"binding": "Qt 绑定",
"dll_dir": "控制器库",
"prefs": "偏好文件",
"outputs": "输出目录",
"bas_loaded": "BAS 已加载",
"yes": "是",
"no": "否"
},
"feedback": {
"waiting": "等待力信号",
"uncalibrated": "无 N 值",
"stopped": "输入已停止;显示最后一帧,数值不再更新。",
"stale": "尚无新帧或超过 1 秒未更新,请检查输入。",
"invalid": "当前力信号无效:{reason}",
"raw_note": "实时原始力信号(最近 60 秒);raw 不能直接当作 N。人工参考力由操作者另行填写。",
"overflow": "预览漏显 {count} 帧;请检查采集记录的丢帧状态",
"raw_axis": "原始力信号 (raw)",
"time_axis": "采集时间 (s)",
"background": "真实背景",
"background_tip": "勾选显示真实 UV 图像;取消显示纯色背景。深度颜色可叠加在两种背景上。",
"arrows": "位移箭头",
"depth": "深度",
"depth_tip": "显示算法深度/形变信号的伪彩色,不表示已标定的毫米深度。",
"depth_scale": "形变色阶自动适应本帧:{low:.4g}–{high:.4g}(算法单位,非 mm)",
"depth_missing": "本帧无有效深度/形变信号",
"flow_missing": "本帧无有效位移信号"
},
"overview": {
"capture_in_progress": "采集中",
"saved": "分析结果已保存;保存位置见提示。",
"saved_summary": "已保存复核并发布汇总:{path} → {summary}",
"open_session": "打开标定会话…",
"empty": "请选择包含 session.json 的会话文件夹,查看已采集测点、法向响应和灵敏度;也可从标定采集页打开本场数据。",
"title": "标定记录总览",
"notice": "查看实际采集覆盖与法向响应;点击 UV 点或表格联动。圆点为已确认窗口,方点为候选窗口;各 trial 用不同明暗度。拟合线为本测点全部符合条件的加载数据,筛选 trial 不会重新拟合。",
"coverage": "采集状态",
"sensitivity": "法向灵敏度",
"import_plan": "导入计划测点 CSV…",
"clear_plan": "清除计划对照",
"load": "载入历史分析…",
"save": "保存分析结果",
"summary": "已采 {collected} 点/计划 {planned} 点;漏采 {missing};有未完成试验 {incomplete};待检查 {pending};已检查 {reviewed};计划外 {extra}。",
"no_plan": "未导入计划,暂不能判断漏采点。",
"uncollected": "尚未采集",
"incomplete": "有未完成试验",
"pending": "待检查",
"reviewed": "稳定段已检查",
"confirmed": "已检查",
"candidate": "待检查",
"coverage_map": "红:有未完成试验;橙:待检查;绿:已检查;灰:未采",
"sensitivity_map": "已确认灵敏度:蓝→红 {low:.4g}→{high:.4g} raw/N<br/>灰:无已确认拟合",
"details": "检查保持段…",
"trial_filter": "显示试验",
"all_trials": "全部 trial",
"site_fit": "测点加载拟合(全部符合条件的 trial)",
"response_title": "法向响应:参考力 → 原始信号",
"selected_fit": "灵敏度 {sensitivity} raw/N · {basis}。拟合按本点全部合格加载窗口计算;范围及试验数见测点提示。",
"no_windows": "所选试验没有可分析的完整窗口;可查看已有原始信号和结束原因。",
"col_order": "计划序号",
"col_site": "采集测点",
"col_uv": "U / V (px)",
"col_xyz": "传感器 XYZ (mm)",
"col_status": "分析准备状态",
"col_trials": "完成/全部 trial",
"col_windows": "确认/完整窗口",
"col_levels": "已确认加载档位 (N)",
"col_sensitivity": "灵敏度 (raw/N)/依据",
"col_range": "拟合范围 (N)",
"col_fit_trials": "拟合 trial 数",
"tools": "计划/历史分析",
"identity": "型号:{model} SN:{sn} 采集时间:{date} 来源:{source} 采集:{status}",
"source_video": "视频重放(仅调试)",
"source_camera": "相机",
"timeline": "时间曲线/记录诊断",
"response": "加载/卸载响应",
"time_axis": "距各试验首个有效样本 (s)",
"reference_axis": "人工参考力 (N)",
"timeline_title": "蓝:FN_raw;橙:人工保持参考力(不是实时 FT)",
"no_trace": "没有可读的有效信号;请查看下方记录诊断",
"outline_snapshot": "灰:传感面轮廓;蓝:彩色 patch 区域轮廓(采集快照)",
"outline_surface_only": "传感面映射已核对;未保存彩色 patch 轮廓,无法恢复。",
"outline_unavailable": "找不到记录对应的 UV 轮廓;仅显示测点。",
"outline_mismatch": "UV 轮廓与记录映射不一致,已停用叠加。",
"analysis_reviewed": "稳定段已检查",
"analysis_pending": "待检查稳定段",
"analysis_no_analysis": "无可分析窗口",
"site_details": "XYZ (mm):{xyz}\n完成/全部试验:{attempts}\n拟合范围 (N):{range};拟合试验数:{trials}",
"inspect_incomplete": "查看中止记录",
"diagnostic": "{trial} · {status}|有效样本 {samples};无效/未关联 {invalid};录像丢帧 {dropped};最大帧间隔 {gap} s\n结束原因:{reason}",
"read_errors": "缺失或无法读取:{detail}",
"choose_trial": "请选择单次试验查看完整性、丢帧及结束原因;全部试验曲线按各自起点对齐。",
"unsaved": "窗口或计划已修改,尚未保存。",
"save_hint": "确认稳定只表示检查过信号,不代表标定精度合格。",
"guide_missing": "① 核对身份 → ② 选测点/试验 → ③ 检查稳定段 → ④ 保存\n下一步:此点尚未采集,请选择已采点或安排补采。",
"guide_incomplete": "① 核对身份 → ② 选测点/试验 → ③ 检查稳定段 → ④ 保存\n下一步:查看结束原因及已录曲线,决定补采;未完成试验不参与拟合。",
"guide_check": "① 核对身份 → ② 选测点/试验 → ③ 检查稳定段 → ④ 保存\n下一步:选择单次试验,点击“检查保持段…”;必要时调整时间区间。",
"guide_save": "① 核对身份 → ② 选测点/试验 → ③ 检查稳定段 → ④ 保存\n下一步:继续检查剩余保持段,或保存当前分析结果。",
"video": "查看录像",
"video_not_recorded": "按设置未录视频"
},
"quality": {
"open": "重复性与验证…",
"title": "测点质量分析",
"notice": "仅使用人工已确认的有效窗口;结果仍为初步分析。视频调试、人工稳定确认及 trial 留出验证均不能证明实物准确度或参考力同步。",
"repeatability": "重复性",
"repeatability_note": "相同分支、相同人工参考力下,先计算各 trial 的均值,再计算 trial 间极差和样本标准差。至少两次 trial 才有重复性统计;这不同于保持段内波动。",
"hysteresis": "加载/卸载差异",
"hysteresis_note": "只配对同一 trial 内人工参考力完全相同的非零加载与卸载窗口,不插值。差值为卸载减加载,单位 raw;缺少匹配档位时不生成结果。",
"zero_return": "零载恢复",
"zero_return_note": "同一 trial 的最终卸载零载减初始零载,单位 raw;只配对人工参考力为 0 N 的已确认窗口。",
"validation": "独立 trial 验证",
"validation_note": "逐次留出一个完整 trial,用其余 trial 的零载/加载窗口拟合,再预测留出 trial 的全部已确认窗口。每窗口等权;这是交叉验证,不能代替另一场独立实验。",
"validation_summary": "验证窗口 {count} 个;RMSE {rmse} N;MAE {mae} N;最大绝对误差 {maximum} N;超出训练 raw 范围 {outside} 个。",
"no_data": "尚无可用数据,请先复核所需窗口。",
"insufficient_training": "其余 trial 的训练数据不足",
"outside_range": "超出训练 raw 范围",
"in_range": "训练 raw 范围内",
"col_branch": "阶段",
"col_load": "人工参考力 (N)",
"col_trials": "trial 数",
"col_range": "trial 间极差 (raw)",
"col_std": "trial 间样本标准差 (raw)",
"col_trial": "trial",
"col_load_raw": "加载均值 (raw)",
"col_unload_raw": "卸载均值 (raw)",
"col_delta_raw": "差值 (raw)",
"col_initial_zero": "初始零载 (raw)",
"col_final_zero": "最终零载 (raw)",
"col_held_out": "留出验证 trial",
"col_training": "训练 trial",
"col_predicted": "预测力 (N)",
"col_error": "预测减参考 (N)",
"col_range_status": "范围/状态"
},
"review": {
"checking": "正在后台读取并校验记录,请稍候…",
"load_selection": "载入历史分析…",
"confirm_stable": "此时间段已检查稳定",
"apply_window": "确认选中时间段并重算",
"start_offset": "起点",
"end_offset": "终点",
"verified": "人工已确认稳定",
"confirmed_fit": "拟合使用人工确认窗口;仍需独立验证。",
"candidate_fit": "拟合使用候选窗口;人工确认数据尚不足。",
"valid_samples": "有效原始样本",
"hold_time_axis": "距保持开始 (s)",
"trace_title": "选中保持段原始信号;竖线为分析窗口边界",
"selection_unsaved": "窗口已应用;请另存分析结果以保留复核。",
"open": "查看标定数据…",
"title": "保持段检查",
"notice": "选择保持段 → 检查曲线、标准差及漂移 → 调整起止时间 → 确认稳定并重算 → 保存。人工确认不是精度验收。",
"save": "保存分析结果",
"no_sites": "会话没有测点",
"candidate": "候选窗口",
"insufficient_samples": "有效样本不足",
"no_frame_source": "本次循环没有录像帧来源:参考窗口已记录,但没有可用于计算的原始法向信号",
"time_basis_not_comparable": "时间基准与保持窗口不可比(录像不是本机实时采集),未参与计算",
"replay": "视频调试",
"unverified": "稳定性未复核",
"fit": "加载分支初步拟合:灵敏度 {sensitivity_raw_per_n:.6g} raw/N;增益 {gain_n_per_raw:.6g} N/raw;偏置 {offset_n:.6g} N;拟合 RMSE {rmse_n:.4g} N(不是独立验证误差)",
"no_fit": "有效载荷或原始信号变化不足,无法拟合。",
"fit_line": "加载初步拟合",
"raw_axis": "原始法向信号 (raw)",
"force_axis": "人工参考力 (N)",
"chart_title": "各保持窗口均值:加载/卸载对照",
"uv_title": "测点初步灵敏度:蓝→红 {low:.4g}→{high:.4g} raw/N;灰色无拟合",
"issues": "{count} 次未完成试验不参与拟合;请按原始曲线检查稳定性。",
"saved": "已另存:{path}",
"saved_summary": "已保存复核并发布汇总:{path} → {summary}",
"col_trial": "试验",
"col_branch": "阶段",
"col_load": "参考力 (N)",
"col_samples": "有效样本",
"col_mean": "原始均值",
"col_std": "原始标准差",
"col_duration": "保持 (s)",
"col_quality": "质量说明",
"col_drift": "漂移 (raw/s)"
},
"video": {
"title": "录像复核",
"header": "{trial} · 第 {step} 步({branch} {load} N)· 复核状态 {status} · 有效样本 {samples}",
"position": "第 {index}/{total} 帧 · 帧号 {frame} · 分段 {segment} 第 {segment_frame} 帧 · 时间基准 {basis}",
"play": "播放",
"pause": "暂停",
"previous": "上一帧",
"next": "下一帧",
"frame_missing": "该帧没有写入录像(队列丢帧)",
"reason_missing": "无法打开录像:{detail}",
"reason_no_frame_source": "这段录像没有可用的视频证据(未接相机或没有写入帧)",
"reason_no_video_frame": "该保持窗口内没有已写入视频的有效帧",
"reason_trial_not_found": "记录中找不到这次试验",
"reason_window_not_found": "在该试验中找不到这个保持窗口",
"reason_video_undecodable": "录像文件无法解码",
"reason_decode": "解码这一帧失败",
"cursor": "当前帧",
"reference": "实际参考",
"curve_title": "原始力曲线与该保持窗口",
"basis_unknown": "未记录",
"open": "查看录像"
},
"summary": {
"failed": "汇总导出失败:{detail}。采集结果没有改变,可以重试。",
"published": "汇总已发布:{path}",
"retry": "重新导出汇总",
"done": "汇总已重新发布:{path}",
"reason_hold_not_found": "记录中找不到这个保持尝试",
"reason_hold_not_complete": "这个保持尝试已被重测废弃,没有可复核的画面",
"copy_failed": "汇总已发布,但可读副本没有写成:{detail}。指针仍指向已发布的汇总,采集结果未改变。"
},
"cap": {
"check": {
"bundle": "标定包",
"frames": "输入出帧",
"bus": "总线与轴映射",
"output": "输出目录可写",
"sn": "传感器 SN",
"max_force": "最大力"
},
"action": {
"start": "开始采集",
"align": "对准当前点",
"confirm_target": "已到目标力,开始保持",
"confirm_hold": "保持完成,记录本档",
"confirm_liftoff": "确认压头已脱离",
"finish": "结束会话",
"remeasure": "重测本档",
"skip": "跳过本点",
"stop": "停止并保留数据",
"open_session": "打开会话文件夹",
"open_summary": "打开汇总",
"copy_path": "复制路径",
"settings": "更改输入/标定包…"
},
"block": {
"closing": "正在写盘,等待收尾完成",
"align_while_recording": "正在录制,不能移动平台去对准其它点",
"skip_live": "这一档已经开始录制,不能跳过",
"no_directory": "还没有会话目录",
"no_summary": "还没有汇总;结束本场标定后自动发布",
"not_ready": "还有未满足的检查项,见上方 Ready 列表",
"no_sites": "队列里还没有测点",
"no_session": "还没有配置会话参数(输出目录、型号、SN 等)",
"no_solver": "没有接上姿态求解器,不能对准",
"no_pose": "这个点还没有解出可用的姿态",
"hold_running": "保持时间还没到",
"remeasure_unavailable": "当前没有可重测的档位",
"stop_unavailable": "没有进行中的会话可停止",
"finish_unavailable": "会话还没有结束,不能点结束",
"skip_unavailable": "程序没有提供跳过当前点的推进接口,本版不能跳过",
"busy": "当前阶段不能执行这个动作",
"no_bundle": "还没有载入标定包(导出包)",
"no_uv": "先在 UV 图上点选位置",
"no_output": "先选择保存目录",
"no_sn": "先填写传感器 SN",
"no_max_force": "先填写最大力 (N)",
"queue_busy": "会话进行中,不能修改测点队列",
"bundle_busy": "会话进行中,不能更换标定包",
"no_worker": "输入没有运行,无法开始录像",
"bad_levels": "加载档位需要严格递增、每档大于 0 且不超过最大力",
"bad_reference": "人工参考力不是有效数字",
"align_running": "对准移动还在进行,请等它完成",
"pose_unreachable": "当前安装或行程下这个点不可达,已禁止对准"
},
"session": {
"active": "本场标定:{sites} 个测点 · 进度 {done}/{total} 档\n{path}",
"none": "尚未建立本场标定;对准第一点后点「开始采集」创建。",
"settings_hint": "输入源、标定包、会话参数与录像选项都在「更改输入/标定包…」里;开始试验不会切换页面。"
},
"queue": {
"title": "测点队列",
"empty": "队列里还没有测点:在 UV 图上点选位置,填好档位后点「添加当前点」。",
"add": "添加当前点",
"update": "更新选中",
"remove": "删除选中",
"up": "上移",
"down": "下移",
"site_id": "测点编号",
"repeats": "重复次数",
"current_uv": "当前 UV",
"col_id": "测点",
"col_position": "传感器位置 (mm)",
"col_repeats": "重复进度",
"col_reachable": "可达性",
"col_state": "状态",
"reachable": "可达",
"unreachable": "不可达",
"state_pending": "待采",
"state_partial": "进行中",
"state_complete": "已完成",
"state_skipped": "已跳过",
"selected": "当前选中:{site}",
"update_short": "更新",
"remove_short": "删除",
"export": "导出测点操作表…",
"export_tip": "按当前队列顺序导出 U/V、传感器坐标、平台目标与映射身份;坐标与映射不符时拒绝导出。",
"export_saved": "已导出操作表:{path}",
"export_no_points": "队列里还没有测点",
"export_no_map": "还没有载入 UV 映射,无法导出操作表",
"export_missing_uv": "第 {order} 点没有 UV 坐标,无法导出操作表",
"export_no_pose": "第 {order} 点还没有解出姿态,无法导出操作表",
"export_edited_point": "第 {order} 点的传感器坐标与当前 UV 映射不符;请重新取点后再导出。"
},
"card": {
"title": "当前点",
"no_point": "队列是空的:先添加测点。",
"no_progress": "开始后显示进度。",
"next_site": "下一测点:{site}"
},
"step": {
"align_point": "① 对准当前点",
"start_session": "② 开始采集",
"confirm_target": "③ 到达目标力,开始保持",
"confirm_hold": "④ 保持完成,记录本档",
"confirm_liftoff": "⑤ 确认离开,换到下一个点",
"finish_session": "⑥ 结束会话",
"closing": "正在写盘"
},
"hint": {
"align_point": "先对准:点主按钮确认移动计划,平台到位并确认后才会出现「开始采集」。",
"start_session": "本点已对准。点主按钮建立本场标定,并从第一个点开始逐档记录。",
"not_ready": "标记 ✗ 的检查项满足后才能开始;鼠标停在标记上可看原因。",
"confirm_target": "按当前档位加载到目标力,填写人工参考力(或六维力分量)后点主按钮。",
"confirm_hold": "保持中:剩余 {seconds:.1f} s;请勿换档。",
"confirm_liftoff": "这一轮记录完成。抬起接触头、确认压头已脱离传感器,再点主按钮换到下一个点。",
"finish_session": "全部记录已写入。点主按钮结束本场标定并发布汇总。",
"closing": "正在写盘并检查录像;收尾完成前不能继续。"
},
"message": {
"aligning": "已发出对准请求:{site}。移动完成并确认后才会允许开始采集。",
"aligned": "已确认对准:{site}",
"align_failed": "对准未完成:{detail}。平台没有确认到位,请重新对准。",
"started": "已开始本场标定:{path}",
"attach_failed": "无法开始录像:{detail}",
"queue_added": "已添加测点 {site}",
"queue_removed": "已删除测点 {site}",
"skipped": "已跳过测点 {site}",
"stopped": "已停止,已写入的数据保留。",
"done": "本场标定已结束:{path}"
},
"recording": {
"title": "录像",
"video": "录制视频",
"codec": "视频编码",
"lossless": "同时保存无损帧",
"unavailable": "{codec}:本机不可用,已禁用",
"probe_failed": "编码探测没有运行:{detail}",
"off": "按设置不录视频",
"estimate": "预计占用 {size}({seconds});磁盘剩余 {free}",
"disk_short": "磁盘剩余不足估算体积的两倍",
"no_plan": "队列为空,暂时无法估算体积",
"locked": "会话建立后录像选项锁定",
"summary": "录像:{codec}"
},
"settings": {
"title": "采集设置",
"input": "输入源",
"bundle": "标定包(导出包)",
"bundle_none": "未载入",
"bundle_load": "载入导出包…",
"session": "会话参数",
"simulate": "模拟运行(不接相机、不移动平台)",
"close": "关闭",
"max_required": "必须填写,程序不预设"
}
},
"units": {
"hint": "集中检查每个方向用的驱动器、脉冲当量(UNITS)和换算。默认锁定为只读;需要改动时点“修改”,写入前会列出改动并要求确认。",
"col_role": "方向",
"col_axis": "驱动器",
"col_kind": "类型",
"col_configured": "配置 UNITS",
"col_observed": "控制器读回",
"col_scale": "换算",
"col_check": "检查",
"kind_linear": "线性 (mm)",
"kind_rotary": "旋转 (°)",
"scale_linear": "{mm} mm/单位 · {per}/mm",
"scale_rotary": "{deg}°/单位 · {per}/°",
"status_ok": "一致",
"status_unread": "未读回",
"status_mismatch": "不一致",
"status_uncalibrated": "无角度标定",
"status_invalid": "配置无效",
"status_unmapped": "未映射",
"tip_unread": "未连接,或该轴的 UNITS 尚未成功读回。",
"tip_mismatch": "控制器读回的 UNITS 与配置不同:姿态移动会被拒绝,不会重新换算目标。",
"tip_uncalibrated": "旋转轴的角度比例只在标定当量下测量过;其他值需要重新标定。",
"tip_invalid": "UNITS 必须是大于 0 的有限数。",
"tip_unmapped": "该方向没有分配驱动器,见“轴映射”。",
"summary_ok": "单位检查:{total} 个方向全部一致",
"summary_bad": "单位检查:{bad}/{total} 个方向需要处理",
"summary_unread": "单位检查:尚未读回(未连接)",
"constants": "固定标定常数(实机测得,不能在此修改)\n线性轴:{ppm} 脉冲/mm\n旋转轴:{rotary}\n以上均在 UNITS={cal} 下测得;毫米与角度是由这些常数换算的显示值,不是新的测量。",
"rotary_item": "轴 {axis}:{units} 用户单位 = 90°",
"modify": "修改",
"apply": "应用到控制器",
"cancel": "取消",
"modify_offline": "未连接控制器,无法修改。",
"locked_note": "已锁定:只读显示。",
"unlocked_note": "已解锁:在“配置 UNITS”列输入新值,然后点“应用到控制器”。",
"mapping_changed": "轴映射已改变,未应用的修改已放弃并重新锁定。",
"invalid": "{role} 的 UNITS 无效:需要大于 0 的数字。",
"no_change": "没有改动,已重新锁定。",
"applied": "已提交 {count} 个驱动器的 UNITS;读回结果将在下一次刷新后显示。",
"change_line": "{role} · 轴 {axis}:{old} → {new}",
"confirm_title": "写入 UNITS",
"confirm_body": "将向控制器写入以下 UNITS:\n{changes}\n\n写入后,全部毫米和角度读数以及姿态移动的目标都按新当量重新计算。请确认平台已停止,并已核对机械传动比。",
"confirm_rotary": "注意:{roles} 的 UNITS 不是标定当量 {cal},旋转轴在该当量下没有角度标定,姿态移动会被拒绝,直到重新标定。"
}
}