{
  "app.title": "BrainCo Multi-DOF Dexterous Hand Debugging Tool",
  "app.language": "Language",

  "common.connect": "Connect",
  "common.connected": "Connected",
  "common.disconnect": "Disconnect",
  "common.protocol_type": "Protocol",
  "common.connection": "Connection",
  "common.device_information": "Device Information",
  "common.settings": "Settings",
  "common.e_stop": "E-Stop",
  "common.restore": "Restore",
  "common.confirm": "Confirm",
  "common.cancel": "Cancel",
  "common.got_it": "Got it",
  "common.apply": "Apply",
  "common.refresh": "Refresh",
  "common.read": "Read",
  "common.clear": "Clear",

  "connect.title": "Connect",
  "connect.protocol": "Protocol",
  "connect.modbus.slave_id": "Slave ID",
  "connect.modbus.port": "Port",
  "connect.modbus.baudrate": "Baud Rate",
  "connect.mock.desc": "Simulation Mode\nNo hardware required to test UI",
  "connect.btn_connect": "Connect",
  "connect.btn_cancel": "Cancel",

  "tab.finger_control": "Finger Control",
  "tab.tactile_display": "Tactile Display",
  "tab.action_sequence": "Action Sequence",
  "tab.settings": "Settings",
  "tab.teaching_mode": "Teaching Mode",

  "estop.enter_success": "E-Stop activated",
  "estop.exit_success": "E-Stop released",
  "estop.failed": "Operation failed: {error}",

  "finger.thumb": "Thumb",
  "finger.index": "Index",
  "finger.middle": "Middle",
  "finger.ring": "Ring",
  "finger.little": "Little",
  "finger.open_hand": "Open",
  "finger.apply_params": "Apply Params",
  "finger.not_recording": "Not Recording",
  "finger.start_record": "⏺ Start Record",
  "finger.stop_record": "⏹ Stop Record",
  "finger.view_data": "📊 Visualize",
  "finger.recording": "🔴 Recording {elapsed} | {frames} frames | Part {part}",
  "finger.record_done": "Done | {frames} frames | {parts} parts | {elapsed}",
  "finger.no_data_warning": "No motor data, please wait for device connection.",
  "finger.select_save_dir": "Select Recording Save Directory",
  "finger.warning_title": "Warning",

  "card.sn": "SN",
  "card.firmware": "FW",
  "card.error": "Error",
  "card.error_none": "None",
  "card.position": "Pos",
  "card.speed": "Spd",
  "card.current": "Cur",
  "card.temperature": "Temp",
  "card.mode": "Mode",
  "card.min_position": "Min Pos",
  "card.max_position": "Max Pos",
  "card.max_speed": "Max Spd",
  "card.protect_current": "Cts Cur",

  "mode.position": "Position",
  "mode.speed": "Speed",
  "mode.current": "Current",
  "mode.impedance": "Impedance",
  "mode.damping": "Damping",
  "mode.mit": "MIT",
  "mode.move_joint": "Move Joint",
  "mode.move_joint_gains": "Move Gains",
  "mode.move_joint_speed": "Move Speed",
  "mode.move_joint_speed_gains": "Move Speed Gains",
  "mode.servo_joint_with_gains": "Servo Gains",
  "move_joint.duration": "Duration",
  "move_joint.dt": "Period",
  "move_joint.freq": "Freq",

  "joint.thumb_dip": "Thumb DIP",
  "joint.thumb_pip": "Thumb PIP",
  "joint.thumb_mcp_flex": "Thumb MCP Flex",
  "joint.thumb_cmp": "Thumb CMP",
  "joint.thumb_cmr": "Thumb CMR",
  "joint.index_dip": "Index DIP",
  "joint.index_pip": "Index PIP",
  "joint.index_mcp_flex": "Index MCP Flex",
  "joint.index_mcp_lateral": "Index MCP Lat",
  "joint.middle_dip": "Middle DIP",
  "joint.middle_pip": "Middle PIP",
  "joint.middle_mcp_flex": "Middle MCP Flex",
  "joint.middle_mcp_lateral": "Middle MCP Lat",
  "joint.ring_dip": "Ring DIP",
  "joint.ring_pip": "Ring PIP",
  "joint.ring_mcp_flex": "Ring MCP Flex",
  "joint.ring_mcp_lateral": "Ring MCP Lat",
  "joint.little_dip": "Little DIP",
  "joint.little_pip": "Little PIP",
  "joint.little_mcp_flex": "Little MCP Flex",
  "joint.little_mcp_lateral": "Little MCP Lat",

  "error_bit.overcurrent": "Overcurrent",
  "error_bit.overvoltage": "Overvoltage",
  "error_bit.undervoltage": "Undervoltage",
  "error_bit.overtemp": "Overtemp",
  "error_bit.current_spike": "Current Spike",
  "error_bit.stall": "Stall",
  "error_bit.running": "Running",

  "seq.title": "📋 Action Sequence",
  "seq.name_placeholder": "Sequence Name",
  "seq.btn_new": "📄 New",
  "seq.btn_save": "💾 Save",
  "seq.btn_load": "📂 Load",
  "seq.btn_execute": "▶  Execute",
  "seq.btn_pause": "⏸  Pause",
  "seq.btn_resume": "▶  Resume",
  "seq.btn_stop": "⏹  Stop",
  "seq.loop": "Loop",
  "seq.loop_count": "Count:",
  "seq.ready": "Ready",
  "seq.saved": "Saved",
  "seq.loaded": "Loaded {count} steps",
  "seq.executing": "Executing  {current}/{total}  (Loop {loop})",
  "seq.finished": "✅ Completed",
  "seq.stopped": "Stopped",
  "seq.paused": "Paused",
  "seq.running": "Executing...",
  "seq.confirm_new": "Confirm",
  "seq.confirm_new_msg": "Current sequence is unsaved, create new?",
  "seq.empty_warning": "Sequence is empty, please add steps first.",
  "seq.save_title": "Save Action Sequence",
  "seq.load_title": "Load Action Sequence",
  "seq.save_failed": "Save Failed",
  "seq.save_failed_msg": "Failed to write file: {error}",
  "seq.load_failed": "Load Failed",
  "seq.load_failed_msg": "Failed to read file: {error}",

  "editor.step_name": "Step Name",
  "editor.step_name_hint": "Optional, e.g. \"Open\", \"Grip\"",
  "editor.control_mode": "Mode",
  "editor.delay": "Delay",
  "editor.duration": "Motion",
  "editor.joint_params": "Joint Parameters",

  "step.btn_add": "＋ Add",
  "step.btn_copy": "📋 Copy",
  "step.copy_suffix": "(copy)",

  "log.system": "System Log",
  "log.operation": "Operation Log",

  "viewer.title": "Motor Data Viewer",
  "viewer.open_file": "📂 Open File",
  "viewer.open_dir": "📁 Open Dir",
  "viewer.no_file": "No file selected",
  "viewer.select_motor": "Motor:",
  "viewer.loading": "Loading: {name}",
  "viewer.load_failed": "Load failed",
  "viewer.format_error": "Format Error",
  "viewer.format_error_msg": "Cannot recognize motor data columns, please verify file format.",
  "viewer.load_error_title": "Load Failed",
  "viewer.load_error_msg": "Failed to read CSV: {error}",
  "viewer.file_info": "{name}  ({frames} frames, {motors} motors{parts})",
  "viewer.parts_info": ", {count} parts",
  "viewer.no_csv": "No CSV files found in directory: {path}",
  "viewer.x_axis": "Sample Frame",
  "viewer.y_axis": "Value",
  "viewer.motor_title": "Motor M{id} Data",
  "viewer.label_speed": "Speed",
  "viewer.label_position": "Position",
  "viewer.label_current": "Current",
  "viewer.label_temperature": "Temperature",
  "viewer.label_error_code": "Error Code",
  "viewer.label_online": "Online",
  "viewer.select_file_title": "Select Motor Data File",
  "viewer.select_dir_title": "Select Recording Data Directory",

  "hand_status.urdf_placeholder": "URDF Model",

  "sys_params.title": "⚡ System",
  "sys_params.status": "Status",
  "sys_params.current": "Current",
  "sys_params.voltage": "Voltage",
  "sys_params.power": "Power",
  "sys_params.temp": "Temp",
  "sys_params.status_normal": "Normal",
  "sys_params.status_fault": "Fault",
  "sys_params.error_normal": "Normal",
  "sys_params.error_comm": "Comm Error",
  "sys_params.error_no_cal": "No Calibration",
  "sys_params.error_over_temp": "Over Temp",

  "tactile.control.title": "Tactile Control",
  "tactile.control.modules": "Modules",
  "tactile.control.read_enable": "Read Enable",
  "tactile.control.apply_enable": "Apply Enable",
  "tactile.control.clear_all": "Clear All",
  "tactile.control.clear_selected": "Clear Selected",
  "tactile.control.data_type": "Data Type",
  "tactile.control.read_type": "Read Type",
  "tactile.control.apply_type": "Apply Type",
  "tactile.control.data_type.ad": "AD Value",
  "tactile.control.data_type.calibrated": "Calibrated",
  "tactile.summary.title": "Summary",
  "tactile.summary.palm": "Palm Force",
  "tactile.summary.thumb_tip": "Thumb Tip Force",
  "tactile.summary.thumb_upper": "Thumb Upper Pad Force",
  "tactile.summary.thumb_lower": "Thumb Lower Pad Force",
  "tactile.summary.index_tip": "Index Tip Force",
  "tactile.summary.index_upper": "Index Upper Pad Force",
  "tactile.summary.index_lower": "Index Lower Pad Force",
  "tactile.summary.middle_tip": "Middle Tip Force",
  "tactile.summary.middle_upper": "Middle Upper Pad Force",
  "tactile.summary.middle_lower": "Middle Lower Pad Force",
  "tactile.summary.ring_tip": "Ring Tip Force",
  "tactile.summary.ring_upper": "Ring Upper Pad Force",
  "tactile.summary.ring_lower": "Ring Lower Pad Force",
  "tactile.summary.little_tip": "Little Tip Force",
  "tactile.summary.little_upper": "Little Upper Pad Force",
  "tactile.summary.little_lower": "Little Lower Pad Force",
  "tactile.refresh": "Refresh",
  "tactile.auto_refresh": "Auto Refresh",
  "tactile.refresh_interval": "Interval (ms)",
  "tactile.array.title": "Array Data",
  "tactile.array.module": "Module",
  "tactile.array.points": "Points",
  "tactile.array.index": "Index",
  "tactile.array.value": "Value",
  "tactile.module.palm": "Palm",
  "tactile.module.thumb_tip": "Thumb Tip",
  "tactile.module.thumb_pad": "Thumb Pad",
  "tactile.module.index_tip": "Index Tip",
  "tactile.module.index_pad": "Index Pad",
  "tactile.module.middle_tip": "Middle Tip",
  "tactile.module.middle_pad": "Middle Pad",
  "tactile.module.ring_tip": "Ring Tip",
  "tactile.module.ring_pad": "Ring Pad",
  "tactile.module.little_tip": "Little Tip",
  "tactile.module.little_pad": "Little Pad",

  "settings.device_info": "Device Info",
  "settings.hand_type": "Hand Type:",
  "settings.left_hand": "Left",
  "settings.right_hand": "Right",
  "settings.unknown_hand": "Unknown",
  "settings.device_id": "Device ID:",
  "settings.apply": "Apply",
  "settings.refresh": "Refresh",
  "settings.switches": "Switch Controls",
  "settings.led": "Back LED",
  "settings.buzzer": "Buzzer",
  "settings.vibration": "Vibration Motor",
  "settings.touchscreen": "Touch Screen",
  "settings.auto_cal": "Auto Calibrate on Boot",
  "settings.teaching": "Teaching Mode",
  "settings.comm_config": "Communication",
  "settings.actions": "Actions",
  "settings.finger_reset": "Finger Reset Default",
  "settings.finger_pos_cal": "Manual Cal.",
  "settings.current_cal": "Current Calibrate",
  "settings.clear_error": "Clear Motor Error",
  "settings.factory_reset": "Factory Reset",
  "settings.software_restart": "Software Restart",
  "settings.ota_update": "Firmware Update (OTA)",
  "settings.confirm_title": "Confirm",
  "settings.confirm_content": "Are you sure to execute \"{action}\"? This operation cannot be undone.",
  "settings.global_current": "Global Current Config",
  "settings.global_protect_current": "Protect Current:",
  "settings.continuous_current": "Continuous Current:",
  "settings.read": "Read",
  "settings.reconnecting": "Reconnecting...",
  "settings.reconnect_ok_title": "Reconnect Success",
  "settings.reconnect_ok_msg": "Communication params updated",
  "settings.reconnect_fail_title": "Reconnect Failed",
  "settings.reconnect_fail_msg": "Please check device status: {error}",
  "settings.sn_setting": "SN Setting",
  "settings.broadcast_id": "Broadcast ID",
  "settings.zero_position": "Set Zero/Offset",
  "settings.zero_position_title": "Set Zero/Offset Settings",
  "settings.set_zero_btn": "Set Zero",
  "settings.set_offset_btn": "Set Offset",
  "settings.get_zero_btn": "Read Offsets",
  "settings.close_btn": "Close",
  "settings.motor_id": "Motor ID",
  "settings.offset_deg": "Offset (deg°)",
  "settings.zero_pos_desc": "Tip: Clicking 'Set Zero' without offsets will set the current feedback positions as zero. To 'Set Offset', all 21 motor offset values entered in the table will be applied (in degrees).",
  "finger.waveform": "Waveform",
  "finger.capture_to_seq": "Capture to Sequence",
  "settings.motor_error_auto_clear": "Auto-reset motor faults",
  "settings.set_zero_confirm_title": "Confirm Set Zero",
  "settings.set_zero_confirm_content": "Before setting the zero position, please make sure to:\n\n1. Disable the motors to allow free manual movements of the fingers.\n2. Manually pose the hand into the desired zero-reference pose.\n3. Enable the motors to lock the pose.\n\nAre you sure you want to proceed?",
  "finger.monitor_freq": "Monitor Freq:",
  "finger.batch_mode": "Batch Mode:",
  "finger.batch_mode_placeholder": "-- Batch Mode --",
  "finger.link_fast": "⚡ Fast Finger Link Active",
  "finger.link_consistent_fallback": "ℹ️ Consistent Mode (Single-Joint Link)",
  "finger.link_mixed": "ℹ️ Mixed Modes (Single-Joint Link)",

  "teaching.start_teach": "⏺ Start Teaching",
  "teaching.stop_teach": "⏹ Stop Recording",
  "teaching.frequency": "Freq:",
  "teaching.rate": "Rate:",
  "teaching.loop": "Loop",
  "teaching.import": "📥 Import",
  "teaching.export": "📤 Export",
  "teaching.play": "▶ Replay",
  "teaching.stop_replay": "⏹ Stop Replay",
  "teaching.status_idle": "● Idle",
  "teaching.status_recording": "⏺ Recording...",
  "teaching.status_replaying": "▶ Replaying...",
  "teaching.import_title": "Import Trajectory",
  "teaching.export_title": "Export Trajectory",

  "canfd.default_suffix": "(Default)",

  "ota.dialog_title": "Firmware Update (OTA)",
  "ota.file_label": "Firmware:",
  "ota.select_file": "Browse",
  "ota.select_file_title": "Select Firmware",
  "ota.file_filter": "Firmware (*.bin *.hex);;All Files (*.*)",
  "ota.start": "Start Update",
  "ota.cancel": "Cancel",
  "ota.status_ready": "Ready",
  "ota.status_preparing": "Preparing...",
  "ota.status_entering": "Entering OTA mode...",
  "ota.status_transferring": "Transferring...",
  "ota.status_success": "Update successful!",
  "ota.status_failed": "Update failed",
  "ota.status_error": "Error",
  "tactile.show_sensors": "Show Sensors",
  "tactile.simulate_data": "Simulate Data",
  "tactile.reset_view": "Reset View",
  "tactile.save_rois": "Save ROIs",
  "tactile.tune_specs": "Tune Specs",
  "tactile.tune_specs_title": "Tactile Sensor Parameter Tuning",
  "tactile.select_region": "Select Sensor Region:",
  "tactile.param.max_value": "Max Value (Max Range):",
  "tactile.param.influence": "Influence (Radius):",
  "tactile.param.threshold": "Threshold (Noise Limit):",
  "tactile.param.gain": "Gain (Intensity):",
  "tactile.param.blur": "Blur Sigma (Smooth Radius):",
  "tactile.param.extrapolate": "Extrapolate (Scatter Range):",
  "tactile.param.guide_title": "Parameters Tuning Guide (Tuning Help Info):",
  "tactile.save_specs_success": "🔓 Tactile specs saved successfully"
}
