{ "app": { "title": "Orisys Customer", "about_title": "About", "about_body": "Orisys customer desktop application\nVersion: {app_version}", "scaffold_hint": "Scaffold shell — acquisition coming later" }, "menu": { "file": "File", "open_video": "Open video…", "reveal_config": "Reveal sensor config…", "view": "View", "theme": "Theme", "theme_dark": "Dark", "theme_light": "Light", "language": "Language", "lang_zh": "简体中文", "lang_en": "English", "calibration_panel": "Calibration panel", "finger_3d": "Finger 3D view", "show_fps": "Show FPS", "plot_settings": "Plot settings…", "rotate_arrows": "Rotate arrows 90°", "run": "Run / Stop", "preview": "Preview / Stop preview", "reset": "Reset tracker", "help": "Help", "about": "About" }, "dialog": { "plot_settings_title": "Plot settings", "plot_window": "Time window", "plot_window_tip": "Force plot time window (seconds)", "plot_fn_max": "FN max", "plot_fn_max_tip": "Normal force axis max (Newton mode)", "plot_shear_max": "Shear max", "plot_shear_max_tip": "Shear force axis ±max for FX/FY (Newton mode)", "reset_defaults": "Reset to defaults", "ok": "OK", "cancel": "Cancel" }, "toolbar": { "source": "Source", "source_camera": "Camera", "source_video": "Video file", "search_cameras": "Search", "cam_id": "Cam ID", "browse_video": "Browse…", "video_placeholder": "No video selected", "preview": "Preview", "preview_stop": "Stop preview", "run": "Run", "stop": "Stop", "run_label": "▶ Run", "stop_label": "■ Stop", "run_unavailable": "Not available yet", "run_disabled_video": "Select a video file first", "run_disabled_sensor": "Run is not available for this sensor type", "reset": "Reset", "units": "Units", "units_newton": "Newton", "units_raw": "Raw" }, "units": { "newton_short": "N", "raw_short": "raw" }, "sensor": { "type": "Sensor type", "config": "Config", "thumb_placeholder": "Product model" }, "panels": { "arrow": "2D arrows", "view_arrows_pure": "Arrows", "view_arrows_stitched": "Arrows / Captured", "view_depth": "Depth map", "view_mode_tip": "Image display mode while running", "arrow_empty": "No image yet\nPick a video or camera, then press Run", "arrow_empty_tip": "The deformation arrow image appears here while running or previewing", "plots": "Force Charts", "cal": "Calibration", "mesh3d": "3D mesh", "mesh3d_empty": "Finger 3D view placeholder —\nOpen3D mesh coming later", "mesh3d_empty_tip": "3D mesh preview for finger sensors" }, "chart": { "fn": "FN", "fx": "FX", "fy": "FY", "no_data": "—" }, "cal": { "weight": "Weight (N)", "duration": "Record duration", "record": "Record", "recording_stop": "Stop", "record_disabled": "Press Run to start acquisition before recording samples", "record_cancelled": "Recording cancelled", "empty_hint": "No samples for this channel yet: run, pick a channel and press Record.", "delete_row": "Delete row", "clear_channel": "Clear channel", "clear_all": "Clear all", "export": "Export…", "sn": "SN", "sn_placeholder": "Serial number (optional)", "live_raw_label": "Live raw", "live_raw": "Live raw FN={fn} FX={fx} FY={fy}", "col_weight": "Weight (N)", "col_raw": "Raw mean", "col_n": "n", "col_std": "σ", "col_actions": "", "recording": "Recording calibration samples…", "record_ok": "Recorded weight={weight} raw={raw}", "record_failed_few": "Recording failed — too few samples", "export_ok": "Exported {path}", "export_local": "Also wrote {path}", "export_warnings": "Skipped: {detail}", "export_failed": "Export failed: {error}" }, "status": { "ready": "Ready", "phase_idle": "Idle", "phase_connecting": "Connecting", "phase_running": "Running", "phase_error": "Error", "camera_none": "No cameras found", "camera_found": "Found {count} camera(s): {names}", "preview_started": "Preview started (camera {camera_id})", "preview_stopped": "Preview stopped", "preview_failed": "Preview failed: {error}", "connecting": "Connecting…", "run_started": "Running ({source})", "run_stopped": "Stopped", "run_failed": "Run failed: {error}", "video_ended": "Video ended", "camera_disconnected": "Camera disconnected", "reset_ok": "Tracker reset", "finger_run_unavailable": "Run is not available for this sensor type", "video_required": "Select a video file first", "config_missing": "Sensor config not found for {type}", "units_raw_fallback": "Calibration unavailable — showing raw units", "reveal_failed": "Could not reveal config: {error}" } }