{ "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}" }, "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} 轴" }, "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
灰:无已确认拟合", "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": "必须填写,程序不预设" } } }