Spaces:
Running
Running
stouchinglhh
Claude
sync processor from GitLab c697b6e: 版本 1.19.4 / 前端 1.12.4 —— 服务端 i18n(首屏不再闪英文)、推理模块并入模型页、前端抽出 shared/、缓存键改用前端号
bb59211 Download processor/web/static/js/i18n-data.js from Stouching-Robotics/DataFlowing: direct link, hf CLI and curl.
- Browser
- Download file 37.7 kB
-
https://huggingface.co/spaces/Stouching-Robotics/DataFlowing/resolve/main/processor/web/static/js/i18n-data.js
- Command line
-
hf download hf://spaces/Stouching-Robotics/DataFlowing/processor/web/static/js/i18n-data.js
-
curl -L -o i18n-data.js https://huggingface.co/spaces/Stouching-Robotics/DataFlowing/resolve/main/processor/web/static/js/i18n-data.js
37.7 kB
| // 中英词典 —— **唯一的真源**。 | |
| // | |
| // 为什么单独一个文件、而不是写在 i18n.js 里: | |
| // 服务端渲染需要它(app/i18n.py 读这个文件),而服务端是 Python。 | |
| // 写在 .js 里的话,Python 要么重复维护一份、要么去解析 JS 源码。 | |
| // 这里用**合法 JSON** 作为载荷,外面只包一行赋值 —— Python 剥掉包装就能 | |
| // json.loads,浏览器当一个普通脚本同步加载(带 ?v= 缓存,不会每页重下)。 | |
| // | |
| // 改词条只改这个文件。别在 i18n.js 里再加字面量。 | |
| window.__I18N__ = { | |
| "zh": { | |
| "app_title": "processor", | |
| "language": "语言", | |
| "video_review": "视频审核", | |
| "trash": "回收站", | |
| "all_status": "全部状态", | |
| "reviewing": "审核中", | |
| "reviewed": "已审核", | |
| "all_tasks": "全部任务", | |
| "search": "搜索...", | |
| "loading": "加载中...", | |
| "processing": "处理中...", | |
| "ai_annotating": "AI 标注处理中...", | |
| "ai_annotating_hint": "AI 标注完成后自动载入本批次数据", | |
| "no_data": "暂无数据", | |
| "load_failed": "加载失败", | |
| "select_episode": "选择一个视频开始审核 →", | |
| "no_video": "此 Episode 没有视频数据", | |
| "cameras": "相机", | |
| "play_all": "▶ 全部播放", | |
| "pause_all": "⏸ 全部暂停", | |
| "play_btn": "播放", | |
| "pause_btn": "暂停", | |
| "layout_row": "并排", | |
| "layout_grid": "网格", | |
| "layout_column": "上下", | |
| "no_description": "无任务描述", | |
| "frame": "帧", | |
| "download": "下载", | |
| "export": "导出", | |
| "export_hint": "按工作流导出格式下载最终数据集", | |
| "re_export": "重新导出", | |
| "re_exporting": "重新导出中", | |
| "re_export_done": "重新导出完成", | |
| "re_export_failed": "重新导出失败", | |
| "delete": "删除", | |
| "approve": "通过", | |
| "deleted_msg": "已移入回收站", | |
| "select_hint": "选择 Episode 后显示详情", | |
| "trash_empty": "回收站为空", | |
| "trash_title": "回收站", | |
| "purge_all": "全部清空", | |
| "restore": "恢复", | |
| "permanent_delete": "永久删除", | |
| "days_left": "剩余", | |
| "day_unit": "天", | |
| "confirm_trash": "确定将此视频移入回收站吗?\n7 天后自动清理。", | |
| "confirm_permanent": "确定永久删除吗?此操作不可恢复!", | |
| "confirm_purge": "确定清空回收站吗?所有内容将被永久删除!", | |
| "op_failed": "操作失败", | |
| "restore_failed": "恢复失败", | |
| "delete_failed": "删除失败", | |
| "purge_failed": "清空失败", | |
| "export_failed": "导出失败", | |
| "no_reviewed": "没有已审核的 Episode 可导出", | |
| "export_created": "导出任务已创建,完成后自动下载", | |
| "left_hand": "左手", | |
| "right_hand": "右手", | |
| "single_mono": "单目视频", | |
| "glove_sensor": "手套传感器", | |
| "depth_image": "深度图", | |
| "aux_video": "辅助视频", | |
| "skeleton_suffix": "骨骼", | |
| "glove_suffix": "手套", | |
| "depth_suffix": "深度", | |
| "stereo_pair": "双目并排", | |
| "3d_skeleton": "3D 骨骼", | |
| "stereo_render": "3D 拼接", | |
| "hand3d_no_data": "该帧无 3D 骨骼数据", | |
| "hand3d_hand0": "手 0", | |
| "hand3d_hand1": "手 1", | |
| "hand3d_world": "3D 手部世界坐标", | |
| "heatmap_toggle": "深度热力图", | |
| "synced_ok": "同步正常", | |
| "drag_here": "拖拽素材到这里", | |
| "remove_source": "移除素材", | |
| "video_suffix": "视频", | |
| "hand_pressure": "手部压力", | |
| "media_assets": "素材", | |
| "drag_to_canvas": "拖拽素材到中间视频区域", | |
| "raw_vs_processed": "原始视频 / 处理结果", | |
| "refresh": "刷新", | |
| "not_found": "未找到", | |
| "deleted": "已删除", | |
| "port_label": "Port", | |
| "annotation": "动作标注", | |
| "annotation_readonly": "只读", | |
| "annotations": "标注段", | |
| "new_annotation": "新增标注", | |
| "edit_annotation": "编辑标注", | |
| "delete_annotation": "删除标注", | |
| "label_name": "标注名称", | |
| "start_frame": "起始帧", | |
| "end_frame": "结束帧", | |
| "set_start_frame": "设起始帧", | |
| "set_end_frame": "设结束帧", | |
| "keyframe": "关键帧", | |
| "add_keyframe": "添加关键帧", | |
| "frames_covered": "帧已标注", | |
| "per_frame_label": "每帧标注", | |
| "no_annotations": "暂无标注,点击\"新增\"创建第一个标注段", | |
| "confirm_delete_anno": "确定删除此标注段吗?", | |
| "save_annotation": "保存标注", | |
| "save_changes": "保存修改", | |
| "slice_conflict": "此切片已在另一台电脑修改,已加载最新版本。请确认后再次保存。", | |
| "current_frame": "当前帧", | |
| "anno_color": "颜色", | |
| "anno_frame_range": "帧范围", | |
| "anno_duration": "时长", | |
| "anno_keyframe_event": "关键帧事件", | |
| "seconds_abbr": "s", | |
| "select_all": "全选", | |
| "batch_download": "批量下载", | |
| "batch_export_dataset": "导出数据集 (慢)", | |
| "batch_zip_download": "打包下载 (快)", | |
| "batch_zip_hint": "从源数据集原样裁出所选批次 —— 产出仍是单个 LeRobot 结构(data/ + meta/ + videos/),不重建、秒级返回。只想把这批数据拿走就用这个。", | |
| "batch_export_hint": "把所选批次合并成**一个**可训练数据集(需要整库重建:重编码视频 + 重算统计,约 30 秒/集)。要拿去训练才用这个。", | |
| "batch_selected_summary": "已选 %s 集 · %f 帧", | |
| "minutes_short": "分", | |
| "select_project_all": "全选本项目(含折叠中的批次)", | |
| "unreview": "撤销", | |
| "retry_review": "放入审核", | |
| "reprocess": "重新处理", | |
| "confirm_reprocess": "重新运行该批次绑定的工作流?新产物将替换旧处理结果。", | |
| "reprocess_failed": "重新处理失败: ", | |
| "nav_home": "首页", | |
| "nav_tasks": "项目", | |
| "nav_review": "视频审核", | |
| "nav_trash": "回收站", | |
| "nav_workflow": "工作流", | |
| "nav_users": "用户", | |
| "nav_annotation": "标注", | |
| "nav_model": "模型", | |
| "train_tab_checkpoints": "模型输出", | |
| "train_tab_params": "训练参数", | |
| "train_label_model": "模型", | |
| "train_label_location": "位置", | |
| "train_files_unit": "个文件", | |
| "train_group_train": "训练", | |
| "train_group_policy": "策略 Policy", | |
| "train_group_optimizer": "优化器", | |
| "train_group_dataset": "数据集", | |
| "train_step_badge": "步骤", | |
| "train_file_details": "文件明细", | |
| "train_col_name": "文件名", | |
| "train_col_size": "大小", | |
| "train_col_mtime": "修改时间", | |
| "train_btn_download": "下载", | |
| "train_btn_delete": "删除", | |
| "train_btn_infer": "推理", | |
| "train_btn_deploy": "离线部署", | |
| "train_btn_hint_delete": "删除 checkpoint 是破坏性操作,暂不开放", | |
| "train_btn_hint_download_row": "展开文件明细 —— 那里每行单独下载", | |
| "train_btn_hint_infer_row": "切到「模型推理」页签并选中本检查点", | |
| "train_btn_hint_deploy": "属于部署模块,本期未做", | |
| "train_checkpoints_empty": "这个训练目录下没有 checkpoint。", | |
| "train_params_source": "来源:", | |
| "train_params_empty": "这个 checkpoint 没有 train_config.json,读不到训练参数。", | |
| "train_page_runs": "模型训练", | |
| "train_page_new": "新建训练", | |
| "train_page_inference": "模型推理", | |
| "train_new_live": "实时", | |
| "train_new_pending": "待接入", | |
| "train_new_model_tested": "已实测", | |
| "train_new_model_act_desc": "基于 Transformer 的动作分块模仿学习模型", | |
| "train_new_frames": "帧", | |
| "train_new_reset": "恢复实测默认值", | |
| "train_sec_dataset": "① 训练数据集", | |
| "train_sec_model": "② 选择模型", | |
| "train_sec_location": "③ 训练位置", | |
| "train_sec_params": "④ 训练参数", | |
| "train_sec_resume": "⑤ 从已有训练继续(可选)", | |
| "train_loc_local": "私有算力", | |
| "train_loc_local_desc": "本机显卡直连", | |
| "train_gpu_unavailable": "读不到 GPU", | |
| "train_gpu_unavailable_hint": "训练前请先修驱动 —— 驱动不可用时训练起不来。", | |
| "train_gpu_none": "nvidia-smi 没有报告任何 GPU。", | |
| "train_gpu_busy": "占用中", | |
| "train_gpu_idle": "空闲", | |
| "train_gpu_mem": "显存", | |
| "train_gpu_util": "GPU 利用率", | |
| "train_gpu_temp": "温度", | |
| "train_gpu_include": "参与训练", | |
| "train_framework": "训练框架", | |
| "train_framework_hint": "ACT 在 LeRobot 里只有一种实现,这里没有可选项。", | |
| "train_help_job_name": "这次训练的名字,会成为 checkpoint 的文件夹名 —— 取短一点、别重名。", | |
| "train_help_batch": "较大的批次可以提高训练稳定性,但需要更多显存;较小的批次训练更快但可能不稳定。建议范围 1-32。", | |
| "train_help_steps": "更多步数通常能提高模型性能,但可能导致过拟合。建议从 10000 开始,根据验证结果调整。", | |
| "train_help_seed": "设置固定种子可以复现相同的训练结果,便于调试和比较。建议用 1000、42 等固定值。", | |
| "train_help_workers": "更多工作进程可以加速数据加载,但会占用更多内存。建议设置为 CPU 核心数的 1/2 到 1 倍。", | |
| "train_help_eval_freq": "设置多少步进行一次模型评估,建议设为总步数的 10%。", | |
| "train_help_log_freq": "设置多少步刷新一次进度,建议 10 到 100 步。", | |
| "train_help_save_ckpt": "开启后会在训练过程中保存模型检查点,便于恢复训练或部署模型。", | |
| "train_help_save_freq": "设置多少步保存一次模型检查点,建议设为总步数的 30%。", | |
| "train_ready_title": "已达采集上限,可以导出了", | |
| "train_ready_go": "去导出", | |
| "train_dataset_none": "还没有导出的数据集。", | |
| "train_dataset_goto_export": "去导出已通过的集", | |
| "train_episodes": "集", | |
| "train_resume_none": "— 全新训练 —", | |
| "train_resume_latest": "— 最新 —", | |
| "train_resume_task": "源训练任务", | |
| "train_resume_step": "检查点", | |
| "train_no_output": "这次训练没有可展示的产物。", | |
| "train_no_root": "本机没有训练产物目录", | |
| "train_no_runs": "该目录下没有训练产物", | |
| "train_load_failed": "读取训练产物失败", | |
| "menu_profile": "个人资料", | |
| "menu_change_password": "修改密码", | |
| "menu_logout": "退出登录", | |
| "users_title": "用户管理", | |
| "users_subtitle": "管理账号、角色与账号生命周期。", | |
| "users_new": "新建用户", | |
| "users_total": "用户总数", | |
| "users_active": "活跃用户", | |
| "users_disabled_expired": "已禁用 / 已过期", | |
| "status_active": "正常", | |
| "status_expired": "已过期", | |
| "status_disabled": "已禁用", | |
| "users_disable_warning": "会临时禁止登录,但保留账号与数据,之后可再启用。", | |
| "users_all_roles": "全部角色", | |
| "users_all_status": "全部状态", | |
| "role_admin": "管理员", | |
| "role_engineer": "工程师", | |
| "role_reviewer": "审核员", | |
| "col_user": "用户", | |
| "col_role": "角色", | |
| "col_status": "状态", | |
| "col_last_login": "最近登录", | |
| "col_expires": "到期", | |
| "col_actions": "操作", | |
| "users_extend": "延期", | |
| "users_extend_hint": "修改到期时间以重新启用该账号", | |
| "users_disable": "禁用", | |
| "users_disable_hint": "临时禁止登录,之后可再启用", | |
| "users_enable": "启用", | |
| "users_enable_hint": "允许该用户重新登录", | |
| "users_edit": "编辑", | |
| "users_edit_hint": "编辑账号", | |
| "users_edit_user": "编辑用户", | |
| "users_save_changes": "保存修改", | |
| "users_create": "创建用户", | |
| "users_delete": "删除", | |
| "users_delete_hint": "永久删除该账号", | |
| "users_delete_warning": "将永久删除该账号。", | |
| "users_confirm_delete": "永久删除 %s?如果以后可能还要用这个账号,禁用更稳妥。", | |
| "users_role_perms": "角色权限", | |
| "users_perm_admin": "用户、项目、工作流、处理、审核与系统设置", | |
| "users_perm_engineer": "项目、工作流、处理与审核", | |
| "users_perm_reviewer": "查看数据、视频审核与标注审核", | |
| "field_username": "用户名", | |
| "field_email": "邮箱", | |
| "field_password": "密码", | |
| "field_expires_at": "到期时间", | |
| "users_pw_hint": "(至少 6 个字符)", | |
| "users_pw_keep": "(留空则保持原密码)", | |
| "users_optional": "(可选)", | |
| "users_no_found": "未找到用户", | |
| "users_no_email": "无邮箱", | |
| "users_never": "从未", | |
| "users_count": "%s 个用户", | |
| "preview_options": "预览选项", | |
| "video_sources": "视频源", | |
| "all": "全部", | |
| "hand_skeleton": "手部骨骼", | |
| "hand_trail": "手部轨迹", | |
| "frame_label": "帧:", | |
| "play": "播放", | |
| "select": "选择", | |
| "name_1_to_n": "命名 1→N", | |
| "name_n_to_1": "命名 N→1", | |
| "sort_label": "排序:", | |
| "n_selected": "已选 %s", | |
| "undo": "撤销", | |
| "new_export": "新建导出", | |
| "dataset_name": "数据集名称", | |
| "train_ratio": "训练集占比", | |
| "start_export": "开始导出", | |
| "dataset": "数据集", | |
| "progress": "进度", | |
| "created": "创建时间", | |
| "task_active": "进行中", | |
| "task_paused": "已暂停", | |
| "ai_status_segmenting": "切段中…", | |
| "ai_status_analyzing": "VLM 分析中…", | |
| "ai_status_writing": "写入…", | |
| "ai_status_exporting": "写入数据集…", | |
| "force_unit_mn": "力 mN", | |
| "force_field_title": "接触力场(固定全幅,不可缩放)", | |
| "slice_boundary_suspect": "边界可疑或标签未命中词表", | |
| "anno_ai_mode_title": "AI 自动切段并提案标注(模式由工作流 AI Annotation 卡片配置决定)", | |
| "overview_title": "概览", | |
| "load_failed_stats": "加载统计数据失败", | |
| "retry": "重试", | |
| "stat_reviewing": "待审核", | |
| "stat_approved": "已通过", | |
| "stat_failed": "异常", | |
| "stat_total": "全部", | |
| "stat_to_review": "待审核", | |
| "stat_distribution": "状态分布", | |
| "daily_uploads": "每日上传", | |
| "last_30_days": "(近 30 天)", | |
| "donut_total": "总计", | |
| "stat_processing": "处理中", | |
| "stat_received": "已接收", | |
| "cleaning_passed": "质检通过", | |
| "cleaning_failed": "质检未通过", | |
| "stat_anomaly": "异常", | |
| "recent_episodes": "最近 Episode", | |
| "view_all": "查看全部", | |
| "pipeline_status": "Pipeline 状态", | |
| "new_task": "新建任务", | |
| "edit_task": "编辑任务", | |
| "task_name": "任务名称", | |
| "task_name_hint": "请使用字母/数字/下划线/中文,需与上传文件前缀匹配", | |
| "task_description": "描述", | |
| "claimer": "认领人", | |
| "target_episodes": "目标条数", | |
| "target_duration": "目标时长(秒)", | |
| "fps": "帧率", | |
| "save": "保存", | |
| "cancel": "取消", | |
| "delete_task": "删除任务", | |
| "confirm_delete_task": "确定删除此任务吗?(已有采集数据将保留)", | |
| "episodes": "Episodes", | |
| "frames": "帧", | |
| "no_frame_target": "无帧数目标", | |
| "devices": "设备", | |
| "online": "在线", | |
| "offline": "离线", | |
| "unknown": "未知", | |
| "last_seen": "最近活跃", | |
| "device_empty": "暂无设备接入", | |
| "expand_episodes": "查看 Episodes", | |
| "load_more": "加载更多", | |
| "no_tasks": "暂无任务,点击\"新建任务\"创建第一个采集任务", | |
| "projects_title": "项目", | |
| "search_projects": "搜索项目...", | |
| "new_project": "新建项目", | |
| "edit_project": "编辑项目", | |
| "project_name": "项目名称", | |
| "bind_workflow": "绑定工作流", | |
| "workflow_placeholder": "— 选择工作流 —", | |
| "device_type": "设备类型", | |
| "status": "状态", | |
| "no_projects": "暂无项目,点击右上角「新建项目」创建", | |
| "tasks_count": "任务", | |
| "videos_count": "视频", | |
| "ep_count": "条", | |
| "upload_new": "新批次", | |
| "upload_reupload": "重传", | |
| "upload_total": "总上传", | |
| "upload_unclassified": "历史未分类", | |
| "target_unlimited": "不限", | |
| "no_tasks_in_project": "该项目下暂无任务(上传数据后自动归类)", | |
| "delete_project": "删除", | |
| "confirm_delete_project": "确定删除项目「", | |
| "confirm_delete_project_suffix": "」?项目下的任务/视频记录不会被删除。", | |
| "project_saved": "保存成功", | |
| "project_save_failed": "保存失败", | |
| "project_delete_failed": "删除失败", | |
| "project_load_failed": "加载失败", | |
| "unbound_workflow": "未绑定工作流", | |
| "workflow_edit": "编辑", | |
| "workflow_selected": "已选 %s 个工作流", | |
| "project_need_workflow": "项目设为 active 前必须先绑定至少一个工作流", | |
| "new_workflow_panel": "新建工作流", | |
| "new_workflow_prompt": "新工作流名称:", | |
| "workflow_create_failed": "创建工作流失败", | |
| "workflow_empty": "空", | |
| "template_badge": "模板", | |
| "project_saved_go_build": "项目已保存。是否前往工作流画布搭建/查看工作流?", | |
| "status_purged": "已彻底删除", | |
| "observed_inputs": "输入", | |
| "exceptions_badge": "异常", | |
| "exceptions": "异常", | |
| "exception_kind_mismatch": "输入不匹配", | |
| "exception_kind_missing": "设备数据缺失", | |
| "input_missing_title": "工作流设备数据不完整", | |
| "input_missing_detail": "以下设备缺失,本批次仅处理已上传设备:", | |
| "exception_kind_failed": "运行失败", | |
| "exception_delete": "删除异常", | |
| "exception_delete_failed": "删除异常失败", | |
| "anno_timeline": "标记时间轴", | |
| "slice_marker": "切片标记", | |
| "new_slice": "新建切片", | |
| "no_slices": "暂无切片标记", | |
| "no_slices_hint": "拖动时间轴后创建一个标记区间", | |
| "current_slice": "当前标记", | |
| "enter_slice_name": "请输入标记名称", | |
| "add_slice": "添加切片", | |
| "ai_annotate": "AI 标注", | |
| "unnamed_slice": "未命名切片", | |
| "slice_save_failed": "保存失败: ", | |
| "slice_delete_failed": "删除失败: ", | |
| "inf_sec_model": "① 选择模型", | |
| "inf_sec_data": "② 测试数据", | |
| "inf_sec_run": "③ 运行", | |
| "inf_sec_result": "④ 结果", | |
| "inf_label_run": "训练任务", | |
| "inf_label_step": "检查点", | |
| "inf_label_dataset": "测试集", | |
| "inf_live": "实时", | |
| "inf_pending": "待接入", | |
| "inf_no_params": "这个检查点没有 train_config.json,读不到训练参数。", | |
| "inf_params_from": "来源", | |
| "inf_no_models": "还没有训练好的模型", | |
| "inf_dataset_none": "— 选择测试集 —", | |
| "inf_datasets_available": "个数据集可选", | |
| "inf_no_datasets": "还没有导出的数据集 —— 先去审核页导出一份。", | |
| "inf_run_btn": "运行推理", | |
| "inf_run_disabled": "后端执行尚未接入", | |
| "inf_run_note": "后端执行还没接 —— 这个按钮是**故意禁用**的。", | |
| "inf_run_hint": "接上之后:用所选检查点在测试集上跑一遍,给出方向余弦、幅度比、夹爪 MAE 与误差曲线(eval_gui.py 那套指标)。", | |
| "inf_no_result": "还没有评估结果。" | |
| }, | |
| "en": { | |
| "app_title": "processor", | |
| "language": "Language", | |
| "video_review": "Video Review", | |
| "trash": "Trash", | |
| "all_status": "All Status", | |
| "reviewing": "Reviewing", | |
| "reviewed": "Reviewed", | |
| "all_tasks": "All Tasks", | |
| "search": "Search...", | |
| "loading": "Loading...", | |
| "processing": "Processing...", | |
| "ai_annotating": "AI annotation running...", | |
| "ai_annotating_hint": "This batch becomes viewable once AI annotation finishes", | |
| "no_data": "No data", | |
| "load_failed": "Load failed", | |
| "select_episode": "Select an episode to review →", | |
| "no_video": "No video data", | |
| "cameras": "Cameras", | |
| "play_all": "▶ Play All", | |
| "pause_all": "⏸ Pause All", | |
| "play_btn": "Play", | |
| "pause_btn": "Pause", | |
| "layout_row": "Row", | |
| "layout_grid": "Grid", | |
| "layout_column": "Stack", | |
| "no_description": "No description", | |
| "frame": "frames", | |
| "download": "Download", | |
| "export": "Export", | |
| "export_hint": "Download final dataset in workflow export format", | |
| "re_export": "Re-export", | |
| "re_exporting": "Re-exporting…", | |
| "re_export_done": "Re-export done", | |
| "re_export_failed": "Re-export failed", | |
| "delete": "Delete", | |
| "approve": "Approve", | |
| "deleted_msg": "Moved to trash", | |
| "select_hint": "Select an episode to view details", | |
| "trash_empty": "Trash is empty", | |
| "trash_title": "Trash", | |
| "purge_all": "Purge All", | |
| "restore": "Restore", | |
| "permanent_delete": "Delete", | |
| "days_left": "Remaining", | |
| "day_unit": "days", | |
| "confirm_trash": "Move to trash?\nAuto-cleaned after 7 days.", | |
| "confirm_permanent": "Permanently delete? This cannot be undone!", | |
| "confirm_purge": "Purge all trash? All items will be permanently deleted!", | |
| "op_failed": "Operation failed", | |
| "restore_failed": "Restore failed", | |
| "delete_failed": "Delete failed", | |
| "purge_failed": "Purge failed", | |
| "export_failed": "Export failed", | |
| "no_reviewed": "No reviewed episodes to export", | |
| "export_created": "Export job created; it will download when ready", | |
| "left_hand": "Left Hand", | |
| "right_hand": "Right Hand", | |
| "single_mono": "Single Camera", | |
| "glove_sensor": "Glove Sensors", | |
| "depth_image": "Depth Images", | |
| "aux_video": "Aux Video", | |
| "skeleton_suffix": "Skeleton", | |
| "glove_suffix": "Glove", | |
| "depth_suffix": "Depth", | |
| "stereo_pair": "Stereo Pair", | |
| "3d_skeleton": "3D Skeleton", | |
| "stereo_render": "3D Side-by-Side", | |
| "hand3d_no_data": "No 3D skeleton data for this frame", | |
| "hand3d_hand0": "Hand 0", | |
| "hand3d_hand1": "Hand 1", | |
| "hand3d_world": "3D Hand World", | |
| "heatmap_toggle": "Depth Heatmap", | |
| "synced_ok": "Synced", | |
| "drag_here": "Drag assets here", | |
| "remove_source": "Remove", | |
| "video_suffix": "Video", | |
| "hand_pressure": "Hand Pressure", | |
| "media_assets": "Assets", | |
| "drag_to_canvas": "Drag assets onto the video area", | |
| "raw_vs_processed": "Raw video / Processing results", | |
| "refresh": "Refresh", | |
| "not_found": "Not found", | |
| "deleted": "Deleted", | |
| "port_label": "Port", | |
| "annotation": "Annotation", | |
| "annotation_readonly": "Read only", | |
| "annotations": "Annotations", | |
| "new_annotation": "New Annotation", | |
| "edit_annotation": "Edit Annotation", | |
| "delete_annotation": "Delete Annotation", | |
| "label_name": "Label Name", | |
| "start_frame": "Start Frame", | |
| "end_frame": "End Frame", | |
| "set_start_frame": "Set Start", | |
| "set_end_frame": "Set End", | |
| "keyframe": "Keyframe", | |
| "add_keyframe": "Add Keyframe", | |
| "frames_covered": "frames labeled", | |
| "per_frame_label": "per-frame label", | |
| "no_annotations": "No annotations. Click \"+\" to create one.", | |
| "confirm_delete_anno": "Delete this annotation segment?", | |
| "save_annotation": "Save Annotation", | |
| "save_changes": "Save Changes", | |
| "slice_conflict": "This slice was changed on another computer. The latest version has been loaded.", | |
| "current_frame": "Current Frame", | |
| "anno_color": "Color", | |
| "anno_frame_range": "Frame Range", | |
| "anno_duration": "Duration", | |
| "anno_keyframe_event": "Keyframe Event", | |
| "seconds_abbr": "s", | |
| "select_all": "Select All", | |
| "batch_download": "Batch Download", | |
| "batch_export_dataset": "Export dataset (slow)", | |
| "batch_zip_download": "Zip download (fast)", | |
| "batch_zip_hint": "Carves the selected episodes out of the source dataset as-is — still a single LeRobot structure (data/ + meta/ + videos/), no rebuild, returns in seconds. Use this to just take the data away.", | |
| "batch_export_hint": "Merges the selected episodes into ONE trainable dataset (full rebuild: re-encode videos + recompute stats, ~30s/episode). Use this only for training.", | |
| "batch_selected_summary": "%s episodes · %f frames", | |
| "minutes_short": "min", | |
| "select_project_all": "Select all in this project (including collapsed)", | |
| "unreview": "Unreview", | |
| "retry_review": "Re-review", | |
| "reprocess": "Reprocess", | |
| "confirm_reprocess": "Re-run the bound workflows for this episode? New output will replace the old processing result.", | |
| "reprocess_failed": "Reprocess failed: ", | |
| "nav_home": "Home", | |
| "nav_tasks": "Projects", | |
| "nav_review": "Video Review", | |
| "nav_trash": "Trash", | |
| "nav_workflow": "Workflow", | |
| "nav_users": "Users", | |
| "nav_annotation": "Annotation", | |
| "nav_model": "Model", | |
| "train_tab_checkpoints": "Model Output", | |
| "train_tab_params": "Training Config", | |
| "train_label_model": "Model", | |
| "train_label_location": "Location", | |
| "train_files_unit": "files", | |
| "train_group_train": "Training", | |
| "train_group_policy": "Policy", | |
| "train_group_optimizer": "Optimizer", | |
| "train_group_dataset": "Dataset", | |
| "train_step_badge": "Step", | |
| "train_file_details": "File details", | |
| "train_col_name": "Name", | |
| "train_col_size": "Size", | |
| "train_col_mtime": "Modified", | |
| "train_btn_download": "Download", | |
| "train_btn_delete": "Delete", | |
| "train_btn_infer": "Inference", | |
| "train_btn_deploy": "Offline Deploy", | |
| "train_btn_hint_delete": "Deleting a checkpoint is destructive; not exposed yet", | |
| "train_btn_hint_download_row": "Expand the file list — each file downloads individually", | |
| "train_btn_hint_infer_row": "Open the Inference tab with this checkpoint selected", | |
| "train_btn_hint_deploy": "Belongs to the Deployment module, not built yet", | |
| "train_checkpoints_empty": "No checkpoints under this run.", | |
| "train_params_source": "Source:", | |
| "train_params_empty": "No train_config.json in this checkpoint; parameters unavailable.", | |
| "train_page_runs": "Model Training", | |
| "train_page_new": "New Training", | |
| "train_page_inference": "Model Inference", | |
| "train_new_live": "live", | |
| "train_new_pending": "not wired", | |
| "train_new_model_tested": "tested", | |
| "train_new_model_act_desc": "Transformer action-chunking imitation learning policy", | |
| "train_new_frames": "frames", | |
| "train_new_reset": "Restore measured defaults", | |
| "train_sec_dataset": "1. Training Dataset", | |
| "train_sec_model": "2. Model", | |
| "train_sec_location": "3. Training Location", | |
| "train_sec_params": "4. Training Parameters", | |
| "train_sec_resume": "5. Continue From a Previous Run (optional)", | |
| "train_loc_local": "Private Compute", | |
| "train_loc_local_desc": "GPUs on this machine", | |
| "train_gpu_unavailable": "Cannot read the GPUs", | |
| "train_gpu_unavailable_hint": "Fix the driver before training — training cannot start without it.", | |
| "train_gpu_none": "nvidia-smi reported no GPUs.", | |
| "train_gpu_busy": "busy", | |
| "train_gpu_idle": "idle", | |
| "train_gpu_mem": "VRAM", | |
| "train_gpu_util": "GPU util", | |
| "train_gpu_temp": "Temp", | |
| "train_gpu_include": "Use for training", | |
| "train_framework": "Training framework", | |
| "train_framework_hint": "ACT ships as a single LeRobot implementation, so there is nothing to choose here.", | |
| "train_help_job_name": "Name of this run. It becomes the checkpoint folder name, so keep it short and unique.", | |
| "train_help_batch": "Larger batches train more stably but need more VRAM; smaller ones are faster but less stable. Suggested 1-32.", | |
| "train_help_steps": "More steps usually improve the policy but risk overfitting. Start at 10000 and adjust from validation.", | |
| "train_help_seed": "A fixed seed reproduces the same run, which makes debugging and comparison possible. 1000 or 42.", | |
| "train_help_workers": "More workers load data faster but use more memory. About 1/2 to 1x the CPU core count.", | |
| "train_help_eval_freq": "How often to run an evaluation, in steps. About 10% of total steps.", | |
| "train_help_log_freq": "How often to refresh progress, in steps. 10-100 works well.", | |
| "train_help_save_ckpt": "Save checkpoints while training so a run can be resumed or deployed.", | |
| "train_help_save_freq": "How often to save a checkpoint, in steps. About 30% of total steps.", | |
| "train_ready_title": "Collection limit reached — ready to export", | |
| "train_ready_go": "Go export", | |
| "train_dataset_none": "No exported dataset yet.", | |
| "train_dataset_goto_export": "Go export approved episodes", | |
| "train_episodes": "episodes", | |
| "train_resume_none": "— Start fresh —", | |
| "train_resume_latest": "— latest —", | |
| "train_resume_task": "Source run", | |
| "train_resume_step": "Checkpoint", | |
| "train_no_output": "This run has no artifacts to show.", | |
| "train_no_root": "No training output directory on this host", | |
| "train_no_runs": "No training output under this directory", | |
| "train_load_failed": "Failed to load training output", | |
| "menu_profile": "Profile", | |
| "menu_change_password": "Change Password", | |
| "menu_logout": "Logout", | |
| "users_title": "User management", | |
| "users_subtitle": "Manage accounts, roles and account lifecycle.", | |
| "users_new": "New user", | |
| "users_total": "Total users", | |
| "users_active": "Active users", | |
| "users_disabled_expired": "Disabled / expired", | |
| "status_active": "Active", | |
| "status_expired": "Expired", | |
| "status_disabled": "Disabled", | |
| "users_disable_warning": "blocks login temporarily and keeps the account/data; it can be enabled later.", | |
| "users_all_roles": "All roles", | |
| "users_all_status": "All status", | |
| "role_admin": "Admin", | |
| "role_engineer": "Engineer", | |
| "role_reviewer": "Reviewer", | |
| "col_user": "User", | |
| "col_role": "Role", | |
| "col_status": "Status", | |
| "col_last_login": "Last login", | |
| "col_expires": "Expires", | |
| "col_actions": "Actions", | |
| "users_extend": "Extend", | |
| "users_extend_hint": "Edit the expiry date to reactivate this account", | |
| "users_disable": "Disable", | |
| "users_disable_hint": "Block login temporarily; can be enabled later", | |
| "users_enable": "Enable", | |
| "users_enable_hint": "Allow this user to log in again", | |
| "users_edit": "Edit", | |
| "users_edit_hint": "Edit account", | |
| "users_edit_user": "Edit user", | |
| "users_save_changes": "Save changes", | |
| "users_create": "Create user", | |
| "users_delete": "Delete", | |
| "users_delete_hint": "Permanently delete this account", | |
| "users_delete_warning": "permanently removes the account.", | |
| "users_confirm_delete": "Permanently delete %s? Disable is safer if you may need the account later.", | |
| "users_role_perms": "Role permissions", | |
| "users_perm_admin": "Users, projects, workflows, processing, review and system settings", | |
| "users_perm_engineer": "Projects, workflows, processing and review", | |
| "users_perm_reviewer": "View data, video review and annotation review", | |
| "field_username": "Username", | |
| "field_email": "Email", | |
| "field_password": "Password", | |
| "field_expires_at": "Expires at", | |
| "users_pw_hint": "(at least 6 characters)", | |
| "users_pw_keep": "(leave blank to keep current password)", | |
| "users_optional": "(optional)", | |
| "users_no_found": "No users found", | |
| "users_no_email": "No email", | |
| "users_never": "Never", | |
| "users_count": "%s users", | |
| "preview_options": "Preview Options", | |
| "video_sources": "Video Sources", | |
| "all": "All", | |
| "hand_skeleton": "Hand Skeleton", | |
| "hand_trail": "Hand Trail", | |
| "frame_label": "Frame:", | |
| "play": "Play", | |
| "select": "Select", | |
| "name_1_to_n": "Name 1→N", | |
| "name_n_to_1": "Name N→1", | |
| "sort_label": "Sort: ", | |
| "n_selected": "%s selected", | |
| "undo": "Undo", | |
| "new_export": "New Export", | |
| "dataset_name": "Dataset Name", | |
| "train_ratio": "Train Ratio", | |
| "start_export": "Start Export", | |
| "dataset": "Dataset", | |
| "progress": "Progress", | |
| "created": "Created", | |
| "task_active": "active", | |
| "task_paused": "paused", | |
| "ai_status_segmenting": "Segmenting…", | |
| "ai_status_analyzing": "Analyzing (VLM)…", | |
| "ai_status_writing": "Writing…", | |
| "ai_status_exporting": "Writing dataset…", | |
| "force_unit_mn": "Force (mN)", | |
| "force_field_title": "Contact force field (fixed full frame, not zoomable)", | |
| "slice_boundary_suspect": "Suspicious boundary or label not in vocabulary", | |
| "anno_ai_mode_title": "AI auto-segments and proposes annotations (mode is configured on the workflow AI Annotation card)", | |
| "overview_title": "Overview", | |
| "load_failed_stats": "Failed to load statistics", | |
| "retry": "Retry", | |
| "stat_reviewing": "Reviewing", | |
| "stat_approved": "Approved", | |
| "stat_failed": "Failed", | |
| "stat_total": "All Episodes", | |
| "stat_to_review": "To Review", | |
| "stat_distribution": "Status Distribution", | |
| "daily_uploads": "Daily Uploads", | |
| "last_30_days": "(last 30 days)", | |
| "donut_total": "Total", | |
| "stat_processing": "Processing", | |
| "stat_received": "Received", | |
| "cleaning_passed": "Cleaning passed", | |
| "cleaning_failed": "Cleaning failed", | |
| "stat_anomaly": "Anomaly", | |
| "recent_episodes": "Recent Episodes", | |
| "view_all": "View All", | |
| "pipeline_status": "Pipeline Status", | |
| "new_task": "New Task", | |
| "edit_task": "Edit Task", | |
| "task_name": "Task Name", | |
| "task_name_hint": "Letters/digits/underscore/Chinese; must match zip filename prefix", | |
| "task_description": "Description", | |
| "claimer": "Claimer", | |
| "target_episodes": "Target Episodes", | |
| "target_duration": "Target Duration (s)", | |
| "fps": "FPS", | |
| "save": "Save", | |
| "cancel": "Cancel", | |
| "delete_task": "Delete Task", | |
| "confirm_delete_task": "Delete this task? (Existing episodes will be kept)", | |
| "episodes": "Episodes", | |
| "frames": "Frames", | |
| "no_frame_target": "No frame target", | |
| "devices": "Devices", | |
| "online": "Online", | |
| "offline": "Offline", | |
| "unknown": "Unknown", | |
| "last_seen": "Last Seen", | |
| "device_empty": "No devices connected", | |
| "expand_episodes": "View Episodes", | |
| "load_more": "Load More", | |
| "no_tasks": "No tasks yet. Click \"New Task\" to create one.", | |
| "projects_title": "Projects", | |
| "search_projects": "Search projects...", | |
| "new_project": "New Project", | |
| "edit_project": "Edit Project", | |
| "project_name": "Project Name", | |
| "bind_workflow": "Workflow", | |
| "workflow_placeholder": "— Select workflow —", | |
| "device_type": "Device Type", | |
| "status": "Status", | |
| "no_projects": "No projects yet. Click \"New Project\" to create one.", | |
| "tasks_count": "tasks", | |
| "videos_count": "videos", | |
| "ep_count": "episodes", | |
| "upload_new": "new batches", | |
| "upload_reupload": "reuploads", | |
| "upload_total": "total uploads", | |
| "upload_unclassified": "legacy unclassified", | |
| "target_unlimited": "unlimited", | |
| "no_tasks_in_project": "No tasks under this project (uploads are grouped automatically).", | |
| "delete_project": "Delete", | |
| "confirm_delete_project": "Delete project \"", | |
| "confirm_delete_project_suffix": "\"? Task/episode records are kept.", | |
| "project_saved": "Saved", | |
| "project_save_failed": "Save failed", | |
| "project_delete_failed": "Delete failed", | |
| "project_load_failed": "Load failed", | |
| "unbound_workflow": "No workflow bound", | |
| "workflow_edit": "Edit", | |
| "workflow_selected": "%s workflows selected", | |
| "project_need_workflow": "Bind at least one workflow before activating this project", | |
| "new_workflow_panel": "+ New Workflow", | |
| "new_workflow_prompt": "Name for the new workflow:", | |
| "workflow_create_failed": "Failed to create workflow", | |
| "workflow_empty": "empty", | |
| "template_badge": "Template", | |
| "project_saved_go_build": "Project saved. Go to Workflow Studio to build/view the workflow?", | |
| "status_purged": "Purged", | |
| "observed_inputs": "Inputs", | |
| "exceptions_badge": "exceptions", | |
| "exceptions": "Exceptions", | |
| "exception_kind_mismatch": "Input mismatch", | |
| "exception_kind_missing": "Missing device data", | |
| "input_missing_title": "Workflow inputs are incomplete", | |
| "input_missing_detail": "The following devices are missing; only uploaded devices were processed:", | |
| "exception_kind_failed": "Run failed", | |
| "exception_delete": "Remove exception", | |
| "exception_delete_failed": "Failed to remove exception", | |
| "anno_timeline": "Annotation Timeline", | |
| "slice_marker": "Slice Markers", | |
| "new_slice": "New Slice", | |
| "no_slices": "No slices yet", | |
| "no_slices_hint": "Drag the timeline to create a marker range", | |
| "current_slice": "Current Slice", | |
| "enter_slice_name": "Enter a slice name", | |
| "add_slice": "Add Slice", | |
| "ai_annotate": "AI Annotate", | |
| "unnamed_slice": "Untitled slice", | |
| "slice_save_failed": "Save failed: ", | |
| "slice_delete_failed": "Delete failed: ", | |
| "inf_sec_model": "1. Model", | |
| "inf_sec_data": "2. Test Data", | |
| "inf_sec_run": "3. Run", | |
| "inf_sec_result": "4. Results", | |
| "inf_label_run": "Run", | |
| "inf_label_step": "Checkpoint", | |
| "inf_label_dataset": "Test dataset", | |
| "inf_live": "live", | |
| "inf_pending": "not wired", | |
| "inf_no_params": "This checkpoint has no train_config.json; parameters unavailable.", | |
| "inf_params_from": "From", | |
| "inf_no_models": "No trained model yet", | |
| "inf_dataset_none": "— Select a test dataset —", | |
| "inf_datasets_available": "dataset(s) available", | |
| "inf_no_datasets": "No exported dataset yet — export one from the review page first.", | |
| "inf_run_btn": "Run inference", | |
| "inf_run_disabled": "Backend execution is not wired up yet", | |
| "inf_run_note": "Backend execution is not connected yet — this button is intentionally disabled.", | |
| "inf_run_hint": "Once wired: runs the checkpoint over the test set and reports direction cosine, amplitude ratio, gripper MAE and the error curve.", | |
| "inf_no_result": "No evaluation result yet." | |
| } | |
| }; | |