diff --git a/openpilot/selfdrive/selfdrived/events.py b/openpilot/selfdrive/selfdrived/events.py index 139f416e7..4fcc3e299 100755 --- a/openpilot/selfdrive/selfdrived/events.py +++ b/openpilot/selfdrive/selfdrived/events.py @@ -11,6 +11,8 @@ from openpilot.common.realtime import DT_CTRL from openpilot.selfdrive.locationd.calibrationd import MIN_SPEED_FILTER from openpilot.common.hardware import HARDWARE +from openpilot.system.ui.lib.multilang import tr_noop + from openpilot.sunnypilot.selfdrive.selfdrived.events_base import EventsBase, Priority, ET, Alert, \ NoEntryAlert, SoftDisableAlert, UserSoftDisableAlert, ImmediateDisableAlert, EngagementAlert, NormalPermanentAlert, \ StartupAlert, AlertCallbackType, wrong_car_mode_alert @@ -72,7 +74,7 @@ def startup_master_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubM if "REPLAY" in os.environ: branch = "replay" - return StartupAlert("WARNING: This branch is not tested", branch, alert_status=AlertStatus.userPrompt) + return StartupAlert(tr_noop("WARNING: This branch is not tested"), branch, alert_status=AlertStatus.userPrompt) def below_engage_speed_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: return NoEntryAlert(f"Drive above {get_display_speed(CP.minEnableSpeed, metric)} to engage") @@ -98,40 +100,40 @@ def calibration_incomplete_alert(CP: car.CarParams, CS: car.CarState, sm: messag def too_distracted_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: if sm['driverMonitoringState'].lockout: mins_left = sm['driverMonitoringState'].lockoutMinutesRemaining - return NoEntryAlert("Too Distracted", f"{mins_left} minute{'s' if mins_left != 1 else ''} Left", priority=Priority.HIGH) - return NoEntryAlert("Pay Attention to Engage", priority=Priority.HIGH) + return NoEntryAlert(tr_noop("Too Distracted"), f"{mins_left} minute{'s' if mins_left != 1 else ''} Left", priority=Priority.HIGH) + return NoEntryAlert(tr_noop("Pay Attention to Engage"), priority=Priority.HIGH) # *** debug alerts *** def out_of_space_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: full_perc = round(100. - sm['deviceState'].freeSpacePercent) - return NormalPermanentAlert("Out of Storage", f"{full_perc}% full") + return NormalPermanentAlert(tr_noop("Out of Storage"), f"{full_perc}% full") def posenet_invalid_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: mdl = sm['modelV2'].velocity.x[0] if len(sm['modelV2'].velocity.x) else math.nan err = CS.vEgo - mdl msg = f"Speed Error: {err:.1f} m/s" - return NoEntryAlert(msg, alert_text_1="Posenet Speed Invalid") + return NoEntryAlert(msg, alert_text_1=tr_noop("Posenet Speed Invalid")) def process_not_running_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: not_running = [p.name for p in sm['managerState'].processes if not p.running and p.shouldBeRunning] msg = ', '.join(not_running) - return NoEntryAlert(msg, alert_text_1="Process Not Running") + return NoEntryAlert(msg, alert_text_1=tr_noop("Process Not Running")) def comm_issue_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: bs = [s for s in sm.data.keys() if not sm.all_checks([s, ])] msg = ', '.join(bs[:4]) # can't fit too many on one line - return NoEntryAlert(msg, alert_text_1="Communication Issue Between Processes") + return NoEntryAlert(msg, alert_text_1=tr_noop("Communication Issue Between Processes")) def camera_malfunction_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: all_cams = ('narrowRoadCameraState', 'cabinCameraState', 'wideRoadCameraState') bad_cams = [s.replace('State', '') for s in all_cams if s in sm.data.keys() and not sm.all_checks([s, ])] - return NormalPermanentAlert("Camera Malfunction", ', '.join(bad_cams)) + return NormalPermanentAlert(tr_noop("Camera Malfunction"), ', '.join(bad_cams)) def calibration_invalid_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: @@ -139,7 +141,7 @@ def calibration_invalid_alert(CP: car.CarParams, CS: car.CarState, sm: messaging yaw = math.degrees(rpy[2] if len(rpy) == 3 else math.nan) pitch = math.degrees(rpy[1] if len(rpy) == 3 else math.nan) angles = f"Remount Device (Pitch: {pitch:.1f}°, Yaw: {yaw:.1f}°)" - return NormalPermanentAlert("Calibration Invalid", angles) + return NormalPermanentAlert(tr_noop("Calibration Invalid"), angles) def paramsd_invalid_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: @@ -156,7 +158,7 @@ def paramsd_invalid_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.Sub title = "Abnormal tire stiffness" text = f"Check tires, pressure, or alignment (Factor: {stiffness_factor:.1f})" else: - return NoEntryAlert("paramsd Temporary Error") + return NoEntryAlert(tr_noop("paramsd Temporary Error")) return NoEntryAlert(alert_text_1=title, alert_text_2=text) @@ -164,22 +166,22 @@ def overheat_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, cpu = max(sm['deviceState'].cpuTempC, default=0.) gpu = max(sm['deviceState'].gpuTempC, default=0.) temp = max((cpu, gpu, sm['deviceState'].memoryTempC)) - return NormalPermanentAlert("System Overheated", f"{temp:.0f} °C") + return NormalPermanentAlert(tr_noop("System Overheated"), f"{temp:.0f} °C") def low_memory_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: - return NormalPermanentAlert("Low Memory", f"{sm['deviceState'].memoryUsagePercent}% used") + return NormalPermanentAlert(tr_noop("Low Memory"), f"{sm['deviceState'].memoryUsagePercent}% used") def modeld_lagging_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: - return NormalPermanentAlert("Driving Model Lagging", f"{sm['modelV2'].frameDropPerc:.1f}% frames dropped") + return NormalPermanentAlert(tr_noop("Driving Model Lagging"), f"{sm['modelV2'].frameDropPerc:.1f}% frames dropped") def joystick_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: gb = sm['carControl'].actuators.accel / 4. steer = sm['carControl'].actuators.torque vals = f"Gas: {round(gb * 100.)}%, Steer: {round(steer * 100.)}%" - return NormalPermanentAlert("Joystick Mode", vals) + return NormalPermanentAlert(tr_noop("Joystick Mode"), vals) def longitudinal_maneuver_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: @@ -198,14 +200,14 @@ def personality_changed_alert(CP: car.CarParams, CS: car.CarState, sm: messaging def invalid_lkas_setting_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: - text = "Toggle stock LKAS on or off to engage" + text = tr_noop("Toggle stock LKAS on or off to engage") if CP.brand == "tesla": - text = "Switch to Traffic-Aware Cruise Control to engage" + text = tr_noop("Switch to Traffic-Aware Cruise Control to engage") elif CP.brand == "mazda": - text = "Enable your car's LKAS to engage" + text = tr_noop("Enable your car's LKAS to engage") elif CP.brand == "nissan": - text = "Disable your car's stock LKAS to engage" - return NormalPermanentAlert("Invalid LKAS setting", text) + text = tr_noop("Disable your car's stock LKAS to engage") + return NormalPermanentAlert(tr_noop("Invalid LKAS setting"), text) @@ -220,34 +222,34 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.joystickDebug: { ET.WARNING: joystick_alert, - ET.PERMANENT: NormalPermanentAlert("Joystick Mode"), + ET.PERMANENT: NormalPermanentAlert(tr_noop("Joystick Mode")), }, EventName.longitudinalManeuver: { ET.WARNING: longitudinal_maneuver_alert, - ET.PERMANENT: NormalPermanentAlert("Longitudinal Maneuver Mode", + ET.PERMANENT: NormalPermanentAlert(tr_noop("Longitudinal Maneuver Mode"), "Ensure road ahead is clear"), }, EventName.bigModelLoading: { - ET.NO_ENTRY: NoEntryAlert("Big Model Loading"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Big Model Loading")), }, EventName.bigModelFailed: { - ET.PERMANENT: NormalPermanentAlert("Big Model Failed ", "Restart the car to retry,\nnow driving on small model", duration=20.), + ET.PERMANENT: NormalPermanentAlert(tr_noop("Big Model Failed "), "Restart the car to retry,\nnow driving on small model", duration=20.), }, EventName.lateralManeuver: { ET.WARNING: longitudinal_maneuver_alert, - ET.PERMANENT: NormalPermanentAlert("Lateral Maneuver Mode"), + ET.PERMANENT: NormalPermanentAlert(tr_noop("Lateral Maneuver Mode")), }, EventName.selfdriveInitializing: { - ET.NO_ENTRY: NoEntryAlert("System Initializing"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("System Initializing")), }, EventName.startup: { - ET.PERMANENT: StartupAlert("Be ready to take over at any time") + ET.PERMANENT: StartupAlert(tr_noop("Be ready to take over at any time")) }, EventName.startupMaster: { @@ -255,68 +257,68 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { }, EventName.startupNoControl: { - ET.PERMANENT: StartupAlert("Dashcam mode"), - ET.NO_ENTRY: NoEntryAlert("Dashcam mode"), + ET.PERMANENT: StartupAlert(tr_noop("Dashcam mode")), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Dashcam mode")), }, EventName.startupNoCar: { - ET.PERMANENT: StartupAlert("Dashcam mode for unsupported car"), + ET.PERMANENT: StartupAlert(tr_noop("Dashcam mode for unsupported car")), }, EventName.startupNoSecOcKey: { - ET.PERMANENT: NormalPermanentAlert("Dashcam Mode", + ET.PERMANENT: NormalPermanentAlert(tr_noop("Dashcam Mode"), "Security Key Not Available", priority=Priority.HIGH), }, EventName.dashcamMode: { - ET.PERMANENT: NormalPermanentAlert("Dashcam Mode", + ET.PERMANENT: NormalPermanentAlert(tr_noop("Dashcam Mode"), priority=Priority.LOWEST), }, EventName.invalidLkasSetting: { ET.PERMANENT: invalid_lkas_setting_alert, - ET.NO_ENTRY: NoEntryAlert("Invalid LKAS setting"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Invalid LKAS setting")), }, EventName.cruiseMismatch: { - #ET.PERMANENT: ImmediateDisableAlert("openpilot failed to cancel cruise"), + #ET.PERMANENT: ImmediateDisableAlert(tr_noop("openpilot failed to cancel cruise")), }, # openpilot doesn't recognize the car. This switches openpilot into a # read-only mode. This can be solved by adding your fingerprint. # See https://github.com/commaai/openpilot/wiki/Fingerprinting for more information EventName.carUnrecognized: { - ET.PERMANENT: NormalPermanentAlert("Dashcam Mode", + ET.PERMANENT: NormalPermanentAlert(tr_noop("Dashcam Mode"), "Car Unrecognized", priority=Priority.LOWEST), }, EventName.aeb: { ET.PERMANENT: Alert( - "BRAKE!", + tr_noop("BRAKE!"), "Emergency Braking: Risk of Collision", AlertStatus.critical, AlertSize.full, Priority.HIGHEST, VisualAlert.fcw, AudibleAlert.none, 2.), - ET.NO_ENTRY: NoEntryAlert("AEB: Risk of Collision"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("AEB: Risk of Collision")), }, EventName.stockAeb: { ET.PERMANENT: Alert( - "BRAKE!", + tr_noop("BRAKE!"), "Stock AEB: Risk of Collision", AlertStatus.critical, AlertSize.full, Priority.HIGHEST, VisualAlert.fcw, AudibleAlert.none, 2.), - ET.NO_ENTRY: NoEntryAlert("Stock AEB: Risk of Collision"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Stock AEB: Risk of Collision")), }, EventName.stockLkas: { - ET.NO_ENTRY: NoEntryAlert("Stock LKAS: Lane Departure Detected"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Stock LKAS: Lane Departure Detected")), }, EventName.fcw: { ET.PERMANENT: Alert( - "BRAKE!", + tr_noop("BRAKE!"), "Risk of Collision", AlertStatus.critical, AlertSize.full, Priority.HIGHEST, VisualAlert.fcw, AudibleAlert.warningSoft, 2.), @@ -324,7 +326,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.ldw: { ET.PERMANENT: Alert( - "Lane Departure Detected", + tr_noop("Lane Departure Detected"), "", AlertStatus.userPrompt, AlertSize.small, Priority.LOW, VisualAlert.ldw, AudibleAlert.prompt, 3.), @@ -334,7 +336,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.steerTempUnavailableSilent: { ET.WARNING: Alert( - "Steering Assist Temporarily Unavailable", + tr_noop("Steering Assist Temporarily Unavailable"), "", AlertStatus.userPrompt, AlertSize.small, Priority.LOW, VisualAlert.steerRequired, AudibleAlert.prompt, 1.8), @@ -342,7 +344,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.driverDistracted1: { ET.PERMANENT: Alert( - "Pay Attention", + tr_noop("Pay Attention"), "", AlertStatus.normal, AlertSize.small, Priority.LOW, VisualAlert.none, AudibleAlert.preAlert, .1), @@ -350,7 +352,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.driverDistracted2: { ET.PERMANENT: Alert( - "Pay Attention", + tr_noop("Pay Attention"), "Driver Distracted", AlertStatus.userPrompt, AlertSize.mid, Priority.MID, VisualAlert.steerRequired, AudibleAlert.promptDistracted, .1), @@ -358,7 +360,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.driverDistracted3: { ET.PERMANENT: Alert( - "DISENGAGE IMMEDIATELY", + tr_noop("DISENGAGE IMMEDIATELY"), "Driver Distracted", AlertStatus.critical, AlertSize.full, Priority.HIGH, VisualAlert.steerRequired, AudibleAlert.warningImmediate, .1), @@ -366,7 +368,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.driverUnresponsive1: { ET.PERMANENT: Alert( - "Touch Steering Wheel: No Face Detected", + tr_noop("Touch Steering Wheel: No Face Detected"), "", AlertStatus.normal, AlertSize.small, Priority.LOW, VisualAlert.steerRequired, AudibleAlert.none, .1), @@ -374,7 +376,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.driverUnresponsive2: { ET.PERMANENT: Alert( - "Touch Steering Wheel", + tr_noop("Touch Steering Wheel"), "Driver Unresponsive", AlertStatus.userPrompt, AlertSize.mid, Priority.MID, VisualAlert.steerRequired, AudibleAlert.promptDistracted, .1), @@ -382,7 +384,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.driverUnresponsive3: { ET.PERMANENT: Alert( - "DISENGAGE IMMEDIATELY", + tr_noop("DISENGAGE IMMEDIATELY"), "Driver Unresponsive", AlertStatus.critical, AlertSize.full, Priority.HIGH, VisualAlert.steerRequired, AudibleAlert.warningImmediate, .1), @@ -390,7 +392,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.manualRestart: { ET.WARNING: Alert( - "TAKE CONTROL", + tr_noop("TAKE CONTROL"), "Resume Driving Manually", AlertStatus.userPrompt, AlertSize.mid, Priority.LOW, VisualAlert.none, AudibleAlert.none, .2), @@ -398,7 +400,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.resumeRequired: { ET.WARNING: Alert( - "Press Resume to Exit Standstill", + tr_noop("Press Resume to Exit Standstill"), "", AlertStatus.userPrompt, AlertSize.small, Priority.LOW, VisualAlert.none, AudibleAlert.none, .2), @@ -410,7 +412,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.preLaneChangeLeft: { ET.WARNING: Alert( - "Steer Left to Start Lane Change Once Safe", + tr_noop("Steer Left to Start Lane Change Once Safe"), "", AlertStatus.normal, AlertSize.small, Priority.LOW, VisualAlert.none, AudibleAlert.none, .1), @@ -418,7 +420,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.preLaneChangeRight: { ET.WARNING: Alert( - "Steer Right to Start Lane Change Once Safe", + tr_noop("Steer Right to Start Lane Change Once Safe"), "", AlertStatus.normal, AlertSize.small, Priority.LOW, VisualAlert.none, AudibleAlert.none, .1), @@ -426,7 +428,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.laneChangeBlocked: { ET.WARNING: Alert( - "Car Detected in Blindspot", + tr_noop("Car Detected in Blindspot"), "", AlertStatus.userPrompt, AlertSize.small, Priority.LOW, VisualAlert.none, AudibleAlert.prompt, .1), @@ -434,7 +436,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.laneChange: { ET.WARNING: Alert( - "Changing Lanes", + tr_noop("Changing Lanes"), "", AlertStatus.normal, AlertSize.small, Priority.LOW, VisualAlert.none, AudibleAlert.none, .1), @@ -442,7 +444,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.steerSaturated: { ET.WARNING: Alert( - "Take Control", + tr_noop("Take Control"), "Turn Exceeds Steering Limit", AlertStatus.userPrompt, AlertSize.mid, Priority.LOW, VisualAlert.steerRequired, AudibleAlert.promptRepeat, 2.), @@ -450,33 +452,33 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { # Thrown when the fan is driven at >50% but is not rotating EventName.fanMalfunction: { - ET.PERMANENT: NormalPermanentAlert("Fan Malfunction", "Contact comma.ai/support"), + ET.PERMANENT: NormalPermanentAlert(tr_noop("Fan Malfunction"), "Contact comma.ai/support"), }, # Camera is not outputting frames EventName.cameraMalfunction: { ET.PERMANENT: camera_malfunction_alert, ET.SOFT_DISABLE: soft_disable_alert("Camera Malfunction"), - ET.NO_ENTRY: NoEntryAlert("Camera Malfunction: Reboot Your Device"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Camera Malfunction: Reboot Your Device")), }, # Camera framerate too low EventName.cameraFrameRate: { - ET.PERMANENT: NormalPermanentAlert("Camera Frame Rate Low", "Reboot your Device"), + ET.PERMANENT: NormalPermanentAlert(tr_noop("Camera Frame Rate Low"), "Reboot your Device"), ET.SOFT_DISABLE: soft_disable_alert("Camera Frame Rate Low"), - ET.NO_ENTRY: NoEntryAlert("Camera Frame Rate Low: Reboot Your Device"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Camera Frame Rate Low: Reboot Your Device")), }, # Unused EventName.locationdTemporaryError: { - ET.NO_ENTRY: NoEntryAlert("locationd Temporary Error"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("locationd Temporary Error")), ET.SOFT_DISABLE: soft_disable_alert("locationd Temporary Error"), }, EventName.locationdPermanentError: { - ET.NO_ENTRY: NoEntryAlert("locationd Permanent Error"), - ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("locationd Permanent Error"), - ET.PERMANENT: NormalPermanentAlert("locationd Permanent Error"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("locationd Permanent Error")), + ET.IMMEDIATE_DISABLE: ImmediateDisableAlert(tr_noop("locationd Permanent Error")), + ET.PERMANENT: NormalPermanentAlert(tr_noop("locationd Permanent Error")), }, # openpilot tries to learn certain parameters about your car by observing @@ -493,9 +495,9 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { }, EventName.paramsdPermanentError: { - ET.NO_ENTRY: NoEntryAlert("paramsd Permanent Error"), - ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("paramsd Permanent Error"), - ET.PERMANENT: NormalPermanentAlert("paramsd Permanent Error"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("paramsd Permanent Error")), + ET.IMMEDIATE_DISABLE: ImmediateDisableAlert(tr_noop("paramsd Permanent Error")), + ET.PERMANENT: NormalPermanentAlert(tr_noop("paramsd Permanent Error")), }, # ********** events that affect controls state transitions ********** @@ -514,12 +516,12 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.buttonCancel: { ET.USER_DISABLE: EngagementAlert(AudibleAlert.disengage), - ET.NO_ENTRY: NoEntryAlert("Cancel Pressed"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Cancel Pressed")), }, EventName.brakeHold: { ET.WARNING: Alert( - "Press Resume to Exit Brake Hold", + tr_noop("Press Resume to Exit Brake Hold"), "", AlertStatus.userPrompt, AlertSize.small, Priority.LOW, VisualAlert.none, AudibleAlert.none, .2), @@ -527,23 +529,23 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.parkBrake: { ET.USER_DISABLE: EngagementAlert(AudibleAlert.disengage), - ET.NO_ENTRY: NoEntryAlert("Parking Brake Engaged"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Parking Brake Engaged")), }, EventName.pedalPressed: { ET.USER_DISABLE: EngagementAlert(AudibleAlert.disengage), - ET.NO_ENTRY: NoEntryAlert("Pedal Pressed", + ET.NO_ENTRY: NoEntryAlert(tr_noop("Pedal Pressed"), visual_alert=VisualAlert.brakePressed), }, EventName.steerDisengage: { ET.USER_DISABLE: EngagementAlert(AudibleAlert.disengage), - ET.NO_ENTRY: NoEntryAlert("Steering Pressed"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Steering Pressed")), }, EventName.preEnableStandstill: { ET.PRE_ENABLE: Alert( - "Release Brake to Engage", + tr_noop("Release Brake to Engage"), "", AlertStatus.normal, AlertSize.small, Priority.LOWEST, VisualAlert.none, AudibleAlert.none, .1, creation_delay=1.), @@ -551,7 +553,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.gasPressedOverride: { ET.OVERRIDE_LONGITUDINAL: Alert( - "", + tr_noop(""), "", AlertStatus.normal, AlertSize.none, Priority.LOWEST, VisualAlert.none, AudibleAlert.none, .1), @@ -559,7 +561,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.steerOverride: { ET.OVERRIDE_LATERAL: Alert( - "", + tr_noop(""), "", AlertStatus.normal, AlertSize.none, Priority.LOWEST, VisualAlert.none, AudibleAlert.none, .1), @@ -571,31 +573,31 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { }, EventName.resumeBlocked: { - ET.NO_ENTRY: NoEntryAlert("Press Set to Engage"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Press Set to Engage")), }, EventName.carNotReady: { - ET.NO_ENTRY: NoEntryAlert("Car Not Ready"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Car Not Ready")), }, EventName.wrongCruiseMode: { ET.USER_DISABLE: EngagementAlert(AudibleAlert.disengage), - ET.NO_ENTRY: NoEntryAlert("Adaptive Cruise Disabled"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Adaptive Cruise Disabled")), }, EventName.steerTempUnavailable: { ET.SOFT_DISABLE: soft_disable_alert("Steering Assist Temporarily Unavailable"), - ET.NO_ENTRY: NoEntryAlert("Steering Temporarily Unavailable"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Steering Temporarily Unavailable")), }, EventName.steerTimeLimit: { ET.SOFT_DISABLE: soft_disable_alert("Vehicle Steering Time Limit"), - ET.NO_ENTRY: NoEntryAlert("Vehicle Steering Time Limit"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Vehicle Steering Time Limit")), }, EventName.outOfSpace: { ET.PERMANENT: out_of_space_alert, - ET.NO_ENTRY: NoEntryAlert("Out of Storage"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Out of Storage")), }, EventName.belowEngageSpeed: { @@ -604,11 +606,11 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.sensorDataInvalid: { ET.PERMANENT: Alert( - "Sensor Data Invalid", + tr_noop("Sensor Data Invalid"), "Contact comma.ai/support", AlertStatus.normal, AlertSize.mid, Priority.LOWER, VisualAlert.none, AudibleAlert.none, .2, creation_delay=1.), - ET.NO_ENTRY: NoEntryAlert("Sensor Data Invalid"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Sensor Data Invalid")), ET.SOFT_DISABLE: soft_disable_alert("Sensor Data Invalid"), }, @@ -618,18 +620,18 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.excessiveActuation: { ET.SOFT_DISABLE: soft_disable_alert("Excessive Actuation"), - ET.NO_ENTRY: NoEntryAlert("Excessive Actuation"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Excessive Actuation")), }, EventName.overheat: { ET.PERMANENT: overheat_alert, ET.SOFT_DISABLE: soft_disable_alert("System Overheated"), - ET.NO_ENTRY: NoEntryAlert("System Overheated"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("System Overheated")), }, EventName.wrongGear: { ET.SOFT_DISABLE: user_soft_disable_alert("Gear not D"), - ET.NO_ENTRY: NoEntryAlert("Gear not D"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Gear not D")), }, # This alert is thrown when the calibration angles are outside of the acceptable range. @@ -640,34 +642,34 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.calibrationInvalid: { ET.PERMANENT: calibration_invalid_alert, ET.SOFT_DISABLE: soft_disable_alert("Calibration Invalid: Remount Device & Recalibrate"), - ET.NO_ENTRY: NoEntryAlert("Calibration Invalid: Remount Device & Recalibrate"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Calibration Invalid: Remount Device & Recalibrate")), }, EventName.calibrationIncomplete: { ET.PERMANENT: calibration_incomplete_alert, ET.SOFT_DISABLE: soft_disable_alert("Calibration Incomplete"), - ET.NO_ENTRY: NoEntryAlert("Calibration in Progress"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Calibration in Progress")), }, EventName.calibrationRecalibrating: { ET.PERMANENT: calibration_incomplete_alert, ET.SOFT_DISABLE: soft_disable_alert("Device Remount Detected: Recalibrating"), - ET.NO_ENTRY: NoEntryAlert("Remount Detected: Recalibrating"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Remount Detected: Recalibrating")), }, EventName.doorOpen: { ET.SOFT_DISABLE: user_soft_disable_alert("Door Open"), - ET.NO_ENTRY: NoEntryAlert("Door Open"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Door Open")), }, EventName.seatbeltNotLatched: { ET.SOFT_DISABLE: user_soft_disable_alert("Seatbelt Unlatched"), - ET.NO_ENTRY: NoEntryAlert("Seatbelt Unlatched"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Seatbelt Unlatched")), }, EventName.espDisabled: { ET.SOFT_DISABLE: soft_disable_alert("Electronic Stability Control Disabled"), - ET.NO_ENTRY: NoEntryAlert("Electronic Stability Control Disabled"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Electronic Stability Control Disabled")), }, # Different openpilot services communicate between each other at a certain @@ -680,12 +682,12 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { }, EventName.commIssueAvgFreq: { ET.SOFT_DISABLE: soft_disable_alert("Low Communication Rate Between Processes"), - ET.NO_ENTRY: NoEntryAlert("Low Communication Rate Between Processes"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Low Communication Rate Between Processes")), }, EventName.selfdrivedLagging: { ET.SOFT_DISABLE: soft_disable_alert("System Lagging"), - ET.NO_ENTRY: NoEntryAlert("Selfdrive Process Lagging: Reboot Your Device"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Selfdrive Process Lagging: Reboot Your Device")), }, # Thrown when manager detects a service exited unexpectedly while driving @@ -696,12 +698,12 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.radarFault: { ET.SOFT_DISABLE: soft_disable_alert("Radar Error: Restart the Car"), - ET.NO_ENTRY: NoEntryAlert("Radar Error: Restart the Car"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Radar Error: Restart the Car")), }, EventName.radarTempUnavailable: { ET.SOFT_DISABLE: soft_disable_alert("Radar Temporarily Unavailable"), - ET.NO_ENTRY: NoEntryAlert("Radar Temporarily Unavailable"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Radar Temporarily Unavailable")), }, # Every frame from the camera should be processed by the model. If modeld @@ -709,7 +711,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { # thrown when over 20% of frames are dropped. EventName.modeldLagging: { ET.SOFT_DISABLE: soft_disable_alert("Driving Model Lagging"), - ET.NO_ENTRY: NoEntryAlert("Driving Model Lagging"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Driving Model Lagging")), ET.PERMANENT: modeld_lagging_alert, }, @@ -726,23 +728,23 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { EventName.lowMemory: { ET.SOFT_DISABLE: soft_disable_alert("Low Memory: Reboot Your Device"), ET.PERMANENT: low_memory_alert, - ET.NO_ENTRY: NoEntryAlert("Low Memory: Reboot Your Device"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Low Memory: Reboot Your Device")), }, EventName.accFaulted: { - ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("Cruise Fault: Restart the Car"), - ET.PERMANENT: NormalPermanentAlert("Cruise Fault: Restart the car to engage"), - ET.NO_ENTRY: NoEntryAlert("Cruise Fault: Restart the Car"), + ET.IMMEDIATE_DISABLE: ImmediateDisableAlert(tr_noop("Cruise Fault: Restart the Car")), + ET.PERMANENT: NormalPermanentAlert(tr_noop("Cruise Fault: Restart the car to engage")), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Cruise Fault: Restart the Car")), }, EventName.espActive: { ET.SOFT_DISABLE: soft_disable_alert("Electronic Stability Control Active"), - ET.NO_ENTRY: NoEntryAlert("Electronic Stability Control Active"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Electronic Stability Control Active")), }, EventName.controlsMismatch: { - ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("Controls Mismatch"), - ET.NO_ENTRY: NoEntryAlert("Controls Mismatch"), + ET.IMMEDIATE_DISABLE: ImmediateDisableAlert(tr_noop("Controls Mismatch")), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Controls Mismatch")), }, # This alert can be thrown for the following reasons: @@ -750,45 +752,45 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { # - CAN data is received, but some message are not received at the right frequency # If you're not writing a new car port, this is usually cause by faulty wiring EventName.canError: { - ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("Unknown Vehicle Variant"), + ET.IMMEDIATE_DISABLE: ImmediateDisableAlert(tr_noop("Unknown Vehicle Variant")), ET.PERMANENT: Alert( - "Unknown Vehicle Variant", + tr_noop("Unknown Vehicle Variant"), "", AlertStatus.normal, AlertSize.small, Priority.LOW, VisualAlert.none, AudibleAlert.none, 1., creation_delay=1.), - ET.NO_ENTRY: NoEntryAlert("Unknown Vehicle Variant"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Unknown Vehicle Variant")), }, EventName.canBusMissing: { - ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("CAN Bus Disconnected"), + ET.IMMEDIATE_DISABLE: ImmediateDisableAlert(tr_noop("CAN Bus Disconnected")), ET.PERMANENT: Alert( - "CAN Bus Disconnected: Likely Faulty Cable", + tr_noop("CAN Bus Disconnected: Likely Faulty Cable"), "", AlertStatus.normal, AlertSize.small, Priority.LOW, VisualAlert.none, AudibleAlert.none, 1., creation_delay=1.), - ET.NO_ENTRY: NoEntryAlert("CAN Bus Disconnected: Check Connections"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("CAN Bus Disconnected: Check Connections")), }, EventName.steerUnavailable: { - ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("LKAS Fault: Restart the Car"), - ET.PERMANENT: NormalPermanentAlert("LKAS Fault: Restart the car to engage"), - ET.NO_ENTRY: NoEntryAlert("LKAS Fault: Restart the Car"), + ET.IMMEDIATE_DISABLE: ImmediateDisableAlert(tr_noop("LKAS Fault: Restart the Car")), + ET.PERMANENT: NormalPermanentAlert(tr_noop("LKAS Fault: Restart the car to engage")), + ET.NO_ENTRY: NoEntryAlert(tr_noop("LKAS Fault: Restart the Car")), }, EventName.reverseGear: { ET.PERMANENT: Alert( - "Reverse\nGear", + tr_noop("Reverse\nGear"), "", AlertStatus.normal, AlertSize.full, Priority.LOWEST, VisualAlert.none, AudibleAlert.none, .2, creation_delay=0.5), - ET.USER_DISABLE: ImmediateDisableAlert("Reverse Gear"), - ET.NO_ENTRY: NoEntryAlert("Reverse Gear"), + ET.USER_DISABLE: ImmediateDisableAlert(tr_noop("Reverse Gear")), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Reverse Gear")), }, # On cars that use stock ACC the car can decide to cancel ACC for various reasons. # When this happens we can no long control the car so the user needs to be warned immediately. EventName.cruiseDisabled: { - ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("Cruise Is Off"), + ET.IMMEDIATE_DISABLE: ImmediateDisableAlert(tr_noop("Cruise Is Off")), }, # When the relay in the harness box opens the CAN bus between the LKAS camera @@ -796,14 +798,14 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { # are received on the car side this usually means the relay hasn't opened correctly # and this alert is thrown. EventName.relayMalfunction: { - ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("Harness Relay Malfunction"), - ET.PERMANENT: NormalPermanentAlert("Harness Relay Malfunction", "Contact comma.ai/support"), - ET.NO_ENTRY: NoEntryAlert("Harness Relay Malfunction"), + ET.IMMEDIATE_DISABLE: ImmediateDisableAlert(tr_noop("Harness Relay Malfunction")), + ET.PERMANENT: NormalPermanentAlert(tr_noop("Harness Relay Malfunction"), "Contact comma.ai/support"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Harness Relay Malfunction")), }, EventName.speedTooLow: { ET.IMMEDIATE_DISABLE: Alert( - "openpilot Canceled", + tr_noop("openpilot Canceled"), "Speed too low", AlertStatus.normal, AlertSize.mid, Priority.HIGH, VisualAlert.none, AudibleAlert.disengage, 3.), @@ -812,17 +814,17 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { # When the car is driving faster than most cars in the training data, the model outputs can be unpredictable. EventName.speedTooHigh: { ET.WARNING: Alert( - "Speed Too High", + tr_noop("Speed Too High"), "Model uncertain at this speed", AlertStatus.userPrompt, AlertSize.mid, Priority.HIGH, VisualAlert.steerRequired, AudibleAlert.promptRepeat, 4.), - ET.NO_ENTRY: NoEntryAlert("Slow down to engage"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Slow down to engage")), }, EventName.vehicleSensorsInvalid: { - ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("Vehicle Sensors Invalid"), - ET.PERMANENT: NormalPermanentAlert("Vehicle Sensors Calibrating", "Drive to Calibrate"), - ET.NO_ENTRY: NoEntryAlert("Vehicle Sensors Calibrating"), + ET.IMMEDIATE_DISABLE: ImmediateDisableAlert(tr_noop("Vehicle Sensors Invalid")), + ET.PERMANENT: NormalPermanentAlert(tr_noop("Vehicle Sensors Calibrating"), "Drive to Calibrate"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Vehicle Sensors Calibrating")), }, EventName.personalityChanged: { @@ -830,7 +832,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { }, EventName.userBookmark: { - ET.PERMANENT: NormalPermanentAlert("Bookmark Saved", duration=1.5), + ET.PERMANENT: NormalPermanentAlert(tr_noop("Bookmark Saved"), duration=1.5), }, } @@ -839,49 +841,49 @@ if HARDWARE.get_device_type() == 'mici': EVENTS.update({ EventName.driverDistracted1: { ET.PERMANENT: Alert( - "Pay Attention", + tr_noop("Pay Attention"), "", AlertStatus.normal, AlertSize.small, Priority.LOW, VisualAlert.none, AudibleAlert.preAlert, 2), }, EventName.driverDistracted2: { ET.PERMANENT: Alert( - "Pay Attention", + tr_noop("Pay Attention"), "Driver Distracted", AlertStatus.userPrompt, AlertSize.mid, Priority.MID, VisualAlert.steerRequired, AudibleAlert.promptDistracted, 1), }, EventName.resumeRequired: { ET.WARNING: Alert( - "Press Resume", + tr_noop("Press Resume"), "", AlertStatus.userPrompt, AlertSize.small, Priority.LOW, VisualAlert.none, AudibleAlert.none, .2), }, EventName.preLaneChangeLeft: { ET.WARNING: Alert( - "Steer Left", + tr_noop("Steer Left"), "Confirm Lane Change", AlertStatus.normal, AlertSize.mid, Priority.LOW, VisualAlert.none, AudibleAlert.none, .1), }, EventName.preLaneChangeRight: { ET.WARNING: Alert( - "Steer Right", + tr_noop("Steer Right"), "Confirm Lane Change", AlertStatus.normal, AlertSize.mid, Priority.LOW, VisualAlert.none, AudibleAlert.none, .1), }, EventName.laneChangeBlocked: { ET.WARNING: Alert( - "Car in Blindspot", + tr_noop("Car in Blindspot"), "", AlertStatus.userPrompt, AlertSize.small, Priority.LOW, VisualAlert.none, AudibleAlert.prompt, .1), }, EventName.steerSaturated: { ET.WARNING: Alert( - "take control", + tr_noop("take control"), "turn exceeds limit", AlertStatus.userPrompt, AlertSize.mid, Priority.LOW, VisualAlert.steerRequired, AudibleAlert.promptRepeat, 2.), @@ -889,16 +891,16 @@ if HARDWARE.get_device_type() == 'mici': EventName.calibrationIncomplete: { ET.PERMANENT: calibration_incomplete_alert, ET.SOFT_DISABLE: soft_disable_alert("Calibration Incomplete"), - ET.NO_ENTRY: NoEntryAlert("Calibrating"), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Calibrating")), }, EventName.reverseGear: { ET.PERMANENT: Alert( - "Reverse", + tr_noop("Reverse"), "", AlertStatus.normal, AlertSize.full, Priority.LOWEST, VisualAlert.none, AudibleAlert.none, .2, creation_delay=0.5), - ET.USER_DISABLE: ImmediateDisableAlert("Reverse"), - ET.NO_ENTRY: NoEntryAlert("Reverse"), + ET.USER_DISABLE: ImmediateDisableAlert(tr_noop("Reverse")), + ET.NO_ENTRY: NoEntryAlert(tr_noop("Reverse")), }, }) diff --git a/openpilot/selfdrive/ui/mici/onroad/alert_renderer.py b/openpilot/selfdrive/ui/mici/onroad/alert_renderer.py index 4be32459d..960e88b06 100644 --- a/openpilot/selfdrive/ui/mici/onroad/alert_renderer.py +++ b/openpilot/selfdrive/ui/mici/onroad/alert_renderer.py @@ -148,7 +148,7 @@ class AlertRenderer(Widget, SpeedLimitAlertRenderer): return None # Return current alert - ret = Alert(text1=ss.alertText1, text2=ss.alertText2, size=ss.alertSize.raw, status=ss.alertStatus.raw, + ret = Alert(text1=tr(ss.alertText1), text2=tr(ss.alertText2), size=ss.alertSize.raw, status=ss.alertStatus.raw, visual_alert=ss.alertHudVisual, alert_type=ss.alertType) self._prev_alert = ret return ret diff --git a/openpilot/selfdrive/ui/onroad/alert_renderer.py b/openpilot/selfdrive/ui/onroad/alert_renderer.py index 64e9fefa9..4353d5c19 100644 --- a/openpilot/selfdrive/ui/onroad/alert_renderer.py +++ b/openpilot/selfdrive/ui/onroad/alert_renderer.py @@ -112,7 +112,7 @@ class AlertRenderer(Widget): return None # Return current alert - return Alert(text1=ss.alertText1, text2=ss.alertText2, size=ss.alertSize.raw, status=ss.alertStatus.raw) + return Alert(text1=tr(ss.alertText1), text2=tr(ss.alertText2), size=ss.alertSize.raw, status=ss.alertStatus.raw) def _render(self, rect: rl.Rectangle): alert = self.get_alert(ui_state.sm) diff --git a/openpilot/selfdrive/ui/translations/app.pot b/openpilot/selfdrive/ui/translations/app.pot index 59e4e2dc0..4a43c242e 100644 --- a/openpilot/selfdrive/ui/translations/app.pot +++ b/openpilot/selfdrive/ui/translations/app.pot @@ -127,7 +127,6 @@ msgstr "" msgid "Hidden Network" msgstr "" -#: openpilot/selfdrive/ui/layouts/sidebar.py #: openpilot/system/ui/widgets/network.py msgid "CONNECT" msgstr "" @@ -381,7 +380,7 @@ msgid "GOOD" msgstr "" #: openpilot/selfdrive/ui/layouts/sidebar.py -msgid "VEHICLE" +msgid "VI" msgstr "" #: openpilot/selfdrive/ui/layouts/sidebar.py @@ -389,6 +388,10 @@ msgstr "" msgid "ONLINE" msgstr "" +#: openpilot/selfdrive/ui/layouts/sidebar.py +msgid "RA" +msgstr "" + #: openpilot/selfdrive/ui/layouts/sidebar.py #: openpilot/selfdrive/ui/sunnypilot/layouts/sidebar.py msgid "OFFLINE" @@ -398,10 +401,6 @@ msgstr "" msgid "Unknown" msgstr "" -#: openpilot/selfdrive/ui/layouts/sidebar.py -msgid "HIGH" -msgstr "" - #: openpilot/selfdrive/ui/layouts/sidebar.py msgid "NO" msgstr "" @@ -734,7 +733,6 @@ msgid "Software" msgstr "" #: openpilot/selfdrive/ui/layouts/settings/settings.py -#: openpilot/selfdrive/ui/sunnypilot/layouts/settings/settings.py msgid "Firehose" msgstr "" @@ -850,10 +848,12 @@ msgstr "" msgid "Joystick Debug Mode" msgstr "" +#: openpilot/selfdrive/selfdrived/events.py #: openpilot/selfdrive/ui/layouts/settings/developer.py msgid "Longitudinal Maneuver Mode" msgstr "" +#: openpilot/selfdrive/selfdrived/events.py #: openpilot/selfdrive/ui/layouts/settings/developer.py msgid "Lateral Maneuver Mode" msgstr "" @@ -1377,14 +1377,6 @@ msgstr "" msgid "Display" msgstr "" -#: openpilot/selfdrive/ui/sunnypilot/layouts/settings/settings.py -msgid "OSM" -msgstr "" - -#: openpilot/selfdrive/ui/sunnypilot/layouts/settings/settings.py -msgid "Trips" -msgstr "" - #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/settings.py #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/vehicle/platform_selector.py msgid "Vehicle" @@ -2390,3 +2382,417 @@ msgid_plural "{} segments of your driving is in the training dataset so far." msgstr[0] "" msgstr[1] "" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Toggle stock LKAS on or off to engage" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "WARNING: This branch is not tested" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Pay Attention to Engage" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Out of Storage" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Camera Malfunction" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Calibration Invalid" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "System Overheated" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Low Memory" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Driving Model Lagging" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Joystick Mode" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Switch to Traffic-Aware Cruise Control to engage" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Invalid LKAS setting" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Too Distracted" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Posenet Speed Invalid" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Process Not Running" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Communication Issue Between Processes" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Enable your car's LKAS to engage" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Big Model Loading" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Big Model Failed " +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "System Initializing" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Be ready to take over at any time" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Dashcam mode" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Dashcam mode for unsupported car" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Dashcam Mode" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "BRAKE!" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "AEB: Risk of Collision" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Stock AEB: Risk of Collision" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Stock LKAS: Lane Departure Detected" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Lane Departure Detected" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Steering Assist Temporarily Unavailable" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Pay Attention" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "DISENGAGE IMMEDIATELY" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Touch Steering Wheel: No Face Detected" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Touch Steering Wheel" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "TAKE CONTROL" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Press Resume to Exit Standstill" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Steer Left to Start Lane Change Once Safe" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Steer Right to Start Lane Change Once Safe" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Car Detected in Blindspot" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Changing Lanes" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Take Control" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Fan Malfunction" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Camera Malfunction: Reboot Your Device" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Camera Frame Rate Low" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Camera Frame Rate Low: Reboot Your Device" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "locationd Temporary Error" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "locationd Permanent Error" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "paramsd Permanent Error" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Cancel Pressed" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Press Resume to Exit Brake Hold" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Parking Brake Engaged" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Pedal Pressed" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Steering Pressed" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Release Brake to Engage" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Press Set to Engage" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Car Not Ready" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Adaptive Cruise Disabled" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Steering Temporarily Unavailable" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Vehicle Steering Time Limit" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Sensor Data Invalid" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Excessive Actuation" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Gear not D" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Calibration Invalid: Remount Device & Recalibrate" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Calibration in Progress" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Remount Detected: Recalibrating" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Door Open" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Seatbelt Unlatched" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Electronic Stability Control Disabled" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Low Communication Rate Between Processes" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Selfdrive Process Lagging: Reboot Your Device" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Radar Error: Restart the Car" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Radar Temporarily Unavailable" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Low Memory: Reboot Your Device" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Cruise Fault: Restart the Car" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Cruise Fault: Restart the car to engage" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Electronic Stability Control Active" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Controls Mismatch" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Unknown Vehicle Variant" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "CAN Bus Disconnected" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "CAN Bus Disconnected: Likely Faulty Cable" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "CAN Bus Disconnected: Check Connections" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "LKAS Fault: Restart the Car" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "LKAS Fault: Restart the car to engage" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "" +"Reverse\n" +"Gear" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Reverse Gear" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Cruise Is Off" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Harness Relay Malfunction" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "openpilot Canceled" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Speed Too High" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Slow down to engage" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Vehicle Sensors Invalid" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Vehicle Sensors Calibrating" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Bookmark Saved" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Disable your car's stock LKAS to engage" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "paramsd Temporary Error" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Press Resume" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Steer Left" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Steer Right" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Car in Blindspot" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "take control" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Calibrating" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Reverse" +msgstr "" + diff --git a/openpilot/selfdrive/ui/translations/app_zh-CHS.po b/openpilot/selfdrive/ui/translations/app_zh-CHS.po index 8e5490d1f..d1d3c2dfe 100644 --- a/openpilot/selfdrive/ui/translations/app_zh-CHS.po +++ b/openpilot/selfdrive/ui/translations/app_zh-CHS.po @@ -84,6 +84,10 @@ msgstr "激活" msgid "ADD" msgstr "添加" +#: openpilot/selfdrive/selfdrived/events.py +msgid "AEB: Risk of Collision" +msgstr "AEB:碰撞风险" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/trips.py msgid "ALL TIME" msgstr "全部时间" @@ -100,6 +104,10 @@ msgstr "确认过度作动" msgid "Actuator Delay:" msgstr "执行器延迟:" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Adaptive Cruise Disabled" +msgstr "自适应巡航已禁用" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/models.py msgid "Adjust Camera Offset" msgstr "调整摄像头偏移" @@ -212,6 +220,10 @@ msgstr "转向灯自动变道" msgid "Auto Lane Change: Delay with Blind Spot" msgstr "自动变道:盲区延迟" +#: openpilot/selfdrive/selfdrived/events.py +msgid "BRAKE!" +msgstr "刹车!" + #: openpilot/selfdrive/ui/layouts/onboarding.py #: openpilot/selfdrive/ui/sunnypilot/layouts/onboarding.py #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/cruise_sub_layouts/speed_limit_policy.py @@ -231,6 +243,10 @@ msgstr "备份失败" msgid "Backup Settings" msgstr "备份设置" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Be ready to take over at any time" +msgstr "随时准备接管" + #: openpilot/selfdrive/ui/widgets/prime.py msgid "Become a comma prime member at connect.comma.ai" msgstr "前往 connect.comma.ai 成为 comma prime 会员" @@ -239,6 +255,14 @@ msgstr "前往 connect.comma.ai 成为 comma prime 会员" msgid "Become a sponsor of sunnypilot to get early access to sunnylink features when they become available." msgstr "成为 sunnypilot 赞助者,抢先体验 sunnylink 即将推出的功能。" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Big Model Failed " +msgstr "大模型加载失败" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Big Model Loading" +msgstr "大模型加载中" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/steering_sub_layouts/lane_change_settings.py msgid "Block Lane Change: Road Edge Detection" msgstr "阻断变道:道路边缘检测" @@ -247,6 +271,10 @@ msgstr "阻断变道:道路边缘检测" msgid "Blocks the lane change if the model sees a road edge on your signaled side." msgstr "如果模型在您打灯一侧检测到道路边缘,则阻止变道。" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Bookmark Saved" +msgstr "已保存书签" + #: openpilot/selfdrive/ui/widgets/pairing_dialog.py msgid "Bookmark connect.comma.ai to your home screen to use it like an app" msgstr "将 connect.comma.ai 添加到主屏幕,像应用一样使用" @@ -255,6 +283,18 @@ msgstr "将 connect.comma.ai 添加到主屏幕,像应用一样使用" msgid "Bottom" msgstr "底部" +#: openpilot/selfdrive/selfdrived/events.py +msgid "CAN Bus Disconnected" +msgstr "CAN 总线断开" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "CAN Bus Disconnected: Check Connections" +msgstr "CAN 总线断开:请检查连接" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "CAN Bus Disconnected: Likely Faulty Cable" +msgstr "CAN 总线断开:可能是线缆故障" + #: openpilot/selfdrive/ui/layouts/settings/device.py #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/device.py msgid "CHANGE" @@ -273,19 +313,46 @@ msgstr "安稳模式已开启" msgid "CLEAR" msgstr "清除" -#: openpilot/selfdrive/ui/layouts/sidebar.py #: openpilot/system/ui/widgets/network.py msgid "CONNECT" msgstr "连接" -#: openpilot/selfdrive/ui/layouts/sidebar.py -msgid "RA" -msgstr "远程协助" - #: openpilot/system/ui/widgets/network.py msgid "CONNECTING..." msgstr "连接中..." +#: openpilot/selfdrive/selfdrived/events.py +msgid "Calibrating" +msgstr "正在标定" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Calibration Invalid" +msgstr "标定无效" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Calibration Invalid: Remount Device & Recalibrate" +msgstr "标定无效:请重新安装设备并重新标定" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Calibration in Progress" +msgstr "标定进行中" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Camera Frame Rate Low" +msgstr "摄像头帧率过低" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Camera Frame Rate Low: Reboot Your Device" +msgstr "摄像头帧率过低:请重启设备" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Camera Malfunction" +msgstr "摄像头故障" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Camera Malfunction: Reboot Your Device" +msgstr "摄像头故障:请重启设备" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/models.py #: openpilot/system/ui/widgets/confirm_dialog.py #: openpilot/system/ui/widgets/keyboard.py @@ -298,6 +365,14 @@ msgstr "取消" msgid "Cancel Download" msgstr "取消下载" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Cancel Pressed" +msgstr "已按取消" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Car Detected in Blindspot" +msgstr "盲区检测到车辆" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/cruise_sub_layouts/speed_limit_policy.py msgid "Car First" msgstr "优先车辆数据" @@ -306,6 +381,10 @@ msgstr "优先车辆数据" msgid "Car First: Use Speed Limit data from Car if available, else use from OpenStreetMaps" msgstr "优先车辆数据:优先使用车辆限速数据,否则使用 OpenStreetMaps 数据" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Car Not Ready" +msgstr "车辆未就绪" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/cruise_sub_layouts/speed_limit_policy.py msgid "Car Only" msgstr "仅车辆数据" @@ -314,6 +393,10 @@ msgstr "仅车辆数据" msgid "Car Only: Use Speed Limit data only from Car" msgstr "仅车辆数据:仅使用车辆的限速数据" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Car in Blindspot" +msgstr "盲区有车辆" + #: openpilot/system/ui/widgets/network.py msgid "Cellular Metered" msgstr "蜂窝计量" @@ -323,6 +406,10 @@ msgstr "蜂窝计量" msgid "Change Language" msgstr "更改语言" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Changing Lanes" +msgstr "正在变道" + #: openpilot/selfdrive/ui/layouts/settings/toggles.py msgid "Changing this setting will restart sunnypilot if the car is powered on." msgstr "如果车辆已通电,更改此设置将重启 sunnypilot。" @@ -367,11 +454,19 @@ msgstr "组合" msgid "Combined: Use combined Speed Limit data from Car & OpenStreetMaps" msgstr "组合:使用车辆与 OpenStreetMaps 的组合限速数据" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Communication Issue Between Processes" +msgstr "进程间通信异常" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/device.py #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/vehicle/platform_selector.py msgid "Confirm" msgstr "确认" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Controls Mismatch" +msgstr "控制不匹配" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/device.py msgid "Controls state of the device after boot/sleep." msgstr "控制设备开机/休眠后的状态。" @@ -388,6 +483,18 @@ msgstr "国家/地区" msgid "Cruise" msgstr "巡航" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Cruise Fault: Restart the Car" +msgstr "巡航故障:请重启车辆" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Cruise Fault: Restart the car to engage" +msgstr "巡航故障:请重启车辆后启用" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Cruise Is Off" +msgstr "巡航已关闭" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/models.py msgid "Current Model" msgstr "当前模型" @@ -428,10 +535,26 @@ msgstr "删除" msgid "DISABLED" msgstr "已禁用" +#: openpilot/selfdrive/selfdrived/events.py +msgid "DISENGAGE IMMEDIATELY" +msgstr "立即退出" + #: openpilot/selfdrive/ui/layouts/settings/software.py msgid "DOWNLOAD" msgstr "下载" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Dashcam Mode" +msgstr "行车记录模式" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Dashcam mode" +msgstr "行车记录模式" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Dashcam mode for unsupported car" +msgstr "不支持的车辆:行车记录模式" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/osm.py msgid "Database Update" msgstr "数据库更新" @@ -480,7 +603,9 @@ msgstr "设备必须先在 comma.ai 后端注册才能配对。" msgid "" "Device will automatically shutdown after set time once the engine is turned off.\n" "(30h is the default)" -msgstr "发动机关闭后,设备将在设定时间后自动关机。\n(默认为 30 小时)" +msgstr "" +"发动机关闭后,设备将在设定时间后自动关机。\n" +"(默认为 30 小时)" #: openpilot/selfdrive/ui/sunnypilot/layouts/onboarding.py msgid "Disable" @@ -494,6 +619,10 @@ msgstr "禁用更新" msgid "Disable the sunnypilot Longitudinal Control (alpha) toggle to allow Intelligent Cruise Button Management." msgstr "禁用 sunnypilot 纵向控制(测试版)开关以允许智能巡航按钮管理。" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Disable your car's stock LKAS to engage" +msgstr "请关闭车辆的原始 LKAS 以启用" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/steering_sub_layouts/mads_settings.py msgid "Disengage" msgstr "脱离" @@ -572,6 +701,10 @@ msgstr "我运行的软件有关系吗?" msgid "Dongle ID" msgstr "设备 ID" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Door Open" +msgstr "车门未关" + #: openpilot/selfdrive/ui/layouts/settings/software.py msgid "Download" msgstr "下载" @@ -604,6 +737,10 @@ msgstr "行程" msgid "Driving Model" msgstr "驾驶模型" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Driving Model Lagging" +msgstr "驾驶模型延迟" + #: openpilot/selfdrive/ui/layouts/settings/toggles.py msgid "Driving Personality" msgstr "驾驶风格" @@ -633,6 +770,14 @@ msgstr "实验模式已开启" msgid "Early Access: Become a sunnypilot Sponsor" msgstr "抢先体验:成为 sunnypilot 赞助者" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Electronic Stability Control Active" +msgstr "电子稳定控制已激活" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Electronic Stability Control Disabled" +msgstr "电子稳定控制已禁用" + #: openpilot/selfdrive/ui/layouts/settings/developer.py #: openpilot/selfdrive/ui/layouts/settings/toggles.py #: openpilot/selfdrive/ui/sunnypilot/layouts/onboarding.py @@ -725,6 +870,10 @@ msgstr "启用此项以强制 sunnypilot 使用扭矩横向控制转向。" msgid "Enable toggle to allow the model to determine when to use sunnypilot ACC or sunnypilot End to End Longitudinal." msgstr "启用开关以允许模型决定何时使用 sunnypilot ACC 或 sunnypilot 端到端纵向控制。" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Enable your car's LKAS to engage" +msgstr "请开启车辆的 LKAS 以启用" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/developer.py msgid "Enables or disables the GitHub runner service." msgstr "启用或禁用 GitHub runner 服务。" @@ -781,6 +930,10 @@ msgstr "错误日志" msgid "Error: Invalid download. Retry." msgstr "错误:下载无效。请重试。" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Excessive Actuation" +msgstr "过度执行" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/device.py msgid "Exit Always Offroad" msgstr "退出停车设置模式" @@ -809,6 +962,10 @@ msgstr "获取中..." msgid "FORGETTING..." msgstr "正在遗忘..." +#: openpilot/selfdrive/selfdrived/events.py +msgid "Fan Malfunction" +msgstr "风扇故障" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/models.py msgid "Fetching Latest Models" msgstr "正在获取最新模型" @@ -822,7 +979,6 @@ msgid "Finish Setup" msgstr "完成设置" #: openpilot/selfdrive/ui/layouts/settings/settings.py -#: openpilot/selfdrive/ui/sunnypilot/layouts/settings/settings.py msgid "Firehose" msgstr "数据洪流" @@ -872,6 +1028,10 @@ msgstr "摩擦" msgid "GOOD" msgstr "良好" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Gear not D" +msgstr "挡位不在 D 挡" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/developer.py msgid "GitHub Runner Service" msgstr "GitHub Runner 服务" @@ -884,9 +1044,9 @@ msgstr "在手机上前往 https://connect.comma.ai" msgid "Green Traffic Light Alert (Beta)" msgstr "绿灯提醒(测试版)" -#: openpilot/selfdrive/ui/layouts/sidebar.py -msgid "HIGH" -msgstr "高" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Harness Relay Malfunction" +msgstr "线束继电器故障" #: openpilot/system/ui/widgets/network.py msgid "Hidden Network" @@ -940,6 +1100,10 @@ msgstr "此平台当前不支持智能巡航按钮管理。" msgid "Interactivity Timeout" msgstr "交互超时" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Invalid LKAS setting" +msgstr "LKAS 设置无效" + #: openpilot/system/ui/sunnypilot/widgets/sunnylink_pairing_dialog.py msgid "Join our Community Forum at https://community.sunnypilot.ai and reach out to a moderator if you have issues" msgstr "加入我们的社区论坛 https://community.sunnypilot.ai,如有问题请联系管理员" @@ -948,10 +1112,22 @@ msgstr "加入我们的社区论坛 https://community.sunnypilot.ai,如有问 msgid "Joystick Debug Mode" msgstr "摇杆调试模式" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Joystick Mode" +msgstr "遥杆模式" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/trips.py msgid "KM" msgstr "公里" +#: openpilot/selfdrive/selfdrived/events.py +msgid "LKAS Fault: Restart the Car" +msgstr "LKAS 故障:请重启车辆" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "LKAS Fault: Restart the car to engage" +msgstr "LKAS 故障:请重启车辆后启用" + #: openpilot/selfdrive/ui/widgets/ssh_key.py msgid "LOADING" msgstr "加载中" @@ -960,6 +1136,10 @@ msgstr "加载中" msgid "LTE" msgstr "LTE" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Lane Departure Detected" +msgstr "检测到车道偏离" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/osm.py msgid "Last checked {}" msgstr "上次检查 {}" @@ -972,6 +1152,7 @@ msgstr "横向加速度系数" msgid "Lateral Jerk Torque Controller" msgstr "横向冲击扭矩控制器" +#: openpilot/selfdrive/selfdrived/events.py #: openpilot/selfdrive/ui/layouts/settings/developer.py msgid "Lateral Maneuver Mode" msgstr "横向操作模式" @@ -996,10 +1177,23 @@ msgstr "实时转向延迟:" msgid "Long Press Increment" msgstr "长按增量" +#: openpilot/selfdrive/selfdrived/events.py #: openpilot/selfdrive/ui/layouts/settings/developer.py msgid "Longitudinal Maneuver Mode" msgstr "纵向操作模式" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Low Communication Rate Between Processes" +msgstr "进程间通信速率过低" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Low Memory" +msgstr "内存不足" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Low Memory: Reboot Your Device" +msgstr "内存不足:请重启设备" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/vehicle/brands/tesla.py msgid "MADS Screen Activation" msgstr "MADS 屏幕激活" @@ -1173,10 +1367,6 @@ msgstr "确定" msgid "ONLINE" msgstr "在线" -#: openpilot/selfdrive/ui/sunnypilot/layouts/settings/settings.py -msgid "OSM" -msgstr "OSM" - #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/cruise_sub_layouts/speed_limit_settings.py #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/steering_sub_layouts/lane_change_settings.py #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/vehicle/brands/hyundai.py @@ -1229,6 +1419,10 @@ msgstr "行车上传" msgid "Open" msgstr "打开" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Out of Storage" +msgstr "存储空间不足" + #: openpilot/selfdrive/ui/layouts/settings/device.py msgid "PAIR" msgstr "配对" @@ -1282,6 +1476,10 @@ msgstr "将设备与 comma connect(connect.comma.ai)配对,领取您的 co msgid "Paired" msgstr "已配对" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Parking Brake Engaged" +msgstr "手刹已拉起" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/steering_sub_layouts/mads_settings.py msgid "Pause" msgstr "暂停" @@ -1298,6 +1496,18 @@ msgstr "当车速低于所选期望速度时,使用转向灯暂停横向控制 msgid "Pause: ALC will pause when the brake pedal is pressed." msgstr "暂停:踩下刹车踏板时 ALC 将暂停。" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Pay Attention" +msgstr "请注意" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Pay Attention to Engage" +msgstr "请注意以启用" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Pedal Pressed" +msgstr "已踩踏板" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/cruise_sub_layouts/speed_limit_settings.py msgid "Percent: Adds a percent offset [Speed Limit + (Offset % Speed Limit)]" msgstr "百分比:添加百分比偏移 [限速 + (偏移 % 限速)]" @@ -1326,6 +1536,10 @@ msgstr "请重启后重试。" msgid "Policy Model" msgstr "策略模型" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Posenet Speed Invalid" +msgstr "Posenet 速度无效" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/steering.py msgid "Post-Blinker Delay" msgstr "转向灯后延迟" @@ -1339,6 +1553,22 @@ msgstr "关机" msgid "Predictive" msgstr "预测" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Press Resume" +msgstr "按恢复键" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Press Resume to Exit Brake Hold" +msgstr "按恢复键退出刹车保持" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Press Resume to Exit Standstill" +msgstr "按恢复键退出驻车" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Press Set to Engage" +msgstr "按设定键启用" + #: openpilot/system/ui/widgets/network.py msgid "Prevent large data uploads when on a metered Wi-Fi connection" msgstr "在计量制 Wi‑Fi 连接时避免大量上传" @@ -1351,6 +1581,10 @@ msgstr "在计量制蜂窝网络时避免大量上传" msgid "Preview the driver facing camera to ensure that driver monitoring has good visibility. (vehicle must be off)" msgstr "预览车内摄像头以确保驾驶员监控视野良好。(车辆必须熄火)" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Process Not Running" +msgstr "进程未运行" + #: openpilot/selfdrive/ui/widgets/pairing_dialog.py msgid "QR Code Error" msgstr "二维码错误" @@ -1367,6 +1601,10 @@ msgstr "快速启动模式需要禁用更新。
请先在软件面板中启 msgid "Quiet Mode" msgstr "安静模式" +#: openpilot/selfdrive/ui/layouts/sidebar.py +msgid "RA" +msgstr "远程协助" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/models.py msgid "REFRESH" msgstr "刷新" @@ -1388,6 +1626,14 @@ msgstr "重置" msgid "REVIEW" msgstr "查看" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Radar Error: Restart the Car" +msgstr "雷达错误:请重启车辆" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Radar Temporarily Unavailable" +msgstr "雷达暂时不可用" + #: openpilot/system/ui/sunnypilot/widgets/sunnylink_pairing_dialog.py msgid "Re-enter the \"sunnylink\" panel to verify sponsorship status" msgstr "重新进入「sunnylink」面板以确认赞助状态" @@ -1439,6 +1685,10 @@ msgstr "法规" msgid "Relaxed" msgstr "从容" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Release Brake to Engage" +msgstr "松开刹车以启用" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/steering_sub_layouts/mads_settings.py msgid "Remain Active" msgstr "保持激活" @@ -1455,6 +1705,10 @@ msgstr "远程访问" msgid "Remote snapshots" msgstr "远程快照" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Remount Detected: Recalibrating" +msgstr "检测到重新安装:正在重新标定" + #: openpilot/selfdrive/ui/widgets/ssh_key.py msgid "Request timed out" msgstr "请求超时" @@ -1481,6 +1735,20 @@ msgstr "恢复失败" msgid "Restore Settings" msgstr "恢复设置" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Reverse" +msgstr "倒车" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "" +"Reverse\n" +"Gear" +msgstr "" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Reverse Gear" +msgstr "倒挡" + #: openpilot/selfdrive/ui/layouts/settings/device.py msgid "Review Training Guide" msgstr "查看训练指南" @@ -1557,6 +1825,10 @@ msgstr "搜索" msgid "Search your vehicle" msgstr "搜索您的车辆" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Seatbelt Unlatched" +msgstr "安全带未系" + #: openpilot/system/ui/widgets/option_dialog.py msgid "Select" msgstr "选择" @@ -1594,6 +1866,14 @@ msgstr "选择更高的手指计数可以减少意外激活。" msgid "Self-Tune" msgstr "自调校" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Selfdrive Process Lagging: Reboot Your Device" +msgstr "驾驶进程延迟:请重启设备" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Sensor Data Invalid" +msgstr "传感器数据无效" + #: openpilot/selfdrive/ui/layouts/settings/device.py #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/device.py msgid "Serial" @@ -1631,6 +1911,10 @@ msgstr "设备停车闲置时显示屏幕保护程序,而不是关闭屏幕。 msgid "Show a timer on the HUD when the car is at a standstill." msgstr "车辆静止时在 HUD 上显示计时器。" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Slow down to engage" +msgstr "减速以启用" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/cruise.py msgid "Smart Cruise Control - Map" msgstr "智能巡航控制 - 地图" @@ -1669,6 +1953,10 @@ msgstr "限速偏移" msgid "Speed Limit Source" msgstr "限速来源" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Speed Too High" +msgstr "速度过高" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/visuals.py msgid "Speedometer: Always Display True Speed" msgstr "速度表:始终显示真实速度" @@ -1704,6 +1992,22 @@ msgstr "启动车辆以检查车辆兼容性。" msgid "State" msgstr "状态" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Steer Left" +msgstr "向左转向" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Steer Left to Start Lane Change Once Safe" +msgstr "安全后向左转向开始变道" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Steer Right" +msgstr "向右转向" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Steer Right to Start Lane Change Once Safe" +msgstr "安全后向右转向开始变道" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/settings.py msgid "Steering" msgstr "转向" @@ -1712,10 +2016,30 @@ msgstr "转向" msgid "Steering Arc" msgstr "转向弧" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Steering Assist Temporarily Unavailable" +msgstr "转向辅助暂时不可用" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/steering_sub_layouts/mads_settings.py msgid "Steering Mode on Brake Pedal" msgstr "刹车踏板转向模式" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Steering Pressed" +msgstr "已转方向盘" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Steering Temporarily Unavailable" +msgstr "转向暂时不可用" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Stock AEB: Risk of Collision" +msgstr "原厂 AEB:碰撞风险" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Stock LKAS: Lane Departure Detected" +msgstr "原厂 LKAS:检测到车道偏离" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/vehicle/brands/subaru.py msgid "Stop and Go (Beta)" msgstr "停车起步(测试版)" @@ -1728,6 +2052,18 @@ msgstr "停车起步 Hack(测试版)" msgid "Stop and Go for Manual Parking Brake (Beta)" msgstr "手动驻车制动停车起步(测试版)" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Switch to Traffic-Aware Cruise Control to engage" +msgstr "切换到自适应巡航以启用" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "System Initializing" +msgstr "系统初始化中" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "System Overheated" +msgstr "系统过热" + #: openpilot/selfdrive/ui/onroad/alert_renderer.py msgid "System Unresponsive" msgstr "系统无响应" @@ -1736,6 +2072,10 @@ msgstr "系统无响应" msgid "System reboot required for changes to take effect. Reboot now?" msgstr "更改需要重启系统才能生效。现在重启吗?" +#: openpilot/selfdrive/selfdrived/events.py +msgid "TAKE CONTROL" +msgstr "接管控制" + #: openpilot/selfdrive/ui/onroad/alert_renderer.py msgid "TAKE CONTROL IMMEDIATELY" msgstr "请立即接管控制" @@ -1748,6 +2088,10 @@ msgstr "温度" msgid "THANKS ♥" msgstr "谢谢 ♥" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Take Control" +msgstr "接管控制" + #: openpilot/selfdrive/ui/layouts/settings/software.py msgid "Target Branch" msgstr "目标分支" @@ -1829,7 +2173,10 @@ msgid "" "This will delete ALL downloaded maps\n" "\n" "Are you sure you want to delete all maps?" -msgstr "这将删除所有已下载的地图\n\n您确定要删除所有地图吗?" +msgstr "" +"这将删除所有已下载的地图\n" +"\n" +"您确定要删除所有地图吗?" #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/models.py msgid "This will delete ALL downloaded models from the cache except the currently active model. Are you sure?" @@ -1843,6 +2190,10 @@ msgstr "这将开始下载过程,可能需要一段时间才能完成。" msgid "Time" msgstr "时间" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Toggle stock LKAS on or off to engage" +msgstr "切换原厂 LKAS 开关以启用" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/steering_sub_layouts/mads_settings.py msgid "Toggle with Main Cruise" msgstr "主巡航切换" @@ -1852,6 +2203,10 @@ msgstr "主巡航切换" msgid "Toggles" msgstr "切换" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Too Distracted" +msgstr "分心过久" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/steering_sub_layouts/torque_settings.py msgid "Torque Control Tune Version" msgstr "扭矩控制调校版本" @@ -1860,14 +2215,18 @@ msgstr "扭矩控制调校版本" msgid "Total Delay:" msgstr "总延迟:" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Touch Steering Wheel" +msgstr "请握住方向盘" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Touch Steering Wheel: No Face Detected" +msgstr "请握住方向盘:未检测到人脸" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/device.py msgid "Training Guide" msgstr "使用指南" -#: openpilot/selfdrive/ui/sunnypilot/layouts/settings/settings.py -msgid "Trips" -msgstr "行程" - #: openpilot/selfdrive/ui/layouts/settings/developer.py msgid "UI Debug Mode" msgstr "界面调试模式" @@ -1897,6 +2256,10 @@ msgstr "卸载" msgid "Unknown" msgstr "未知" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Unknown Vehicle Variant" +msgstr "未知车型" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/vehicle/platform_selector.py msgid "Unrecognized Vehicle" msgstr "无法识别的车辆" @@ -1933,10 +2296,6 @@ msgstr "使用地图数据估算前方转弯的合适速度。" msgid "Use vision path predictions to estimate the appropriate speed to drive through turns ahead." msgstr "使用视觉路径预测估算前方转弯的合适速度。" -#: openpilot/selfdrive/ui/layouts/sidebar.py -msgid "VEHICLE" -msgstr "车辆" - #: openpilot/selfdrive/ui/layouts/sidebar.py msgid "VI" msgstr "车辆接口" @@ -1951,6 +2310,18 @@ msgstr "查看" msgid "Vehicle" msgstr "车辆" +#: openpilot/selfdrive/selfdrived/events.py +msgid "Vehicle Sensors Calibrating" +msgstr "车辆传感器标定中" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Vehicle Sensors Invalid" +msgstr "车辆传感器无效" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "Vehicle Steering Time Limit" +msgstr "车辆转向时间限制" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/developer.py msgid "View the error log for sunnypilot crashes." msgstr "查看 sunnypilot 崩溃的错误日志。" @@ -1967,6 +2338,10 @@ msgstr "视觉模型" msgid "Visuals" msgstr "视觉" +#: openpilot/selfdrive/selfdrived/events.py +msgid "WARNING: This branch is not tested" +msgstr "警告:此分支未经测试" + #: openpilot/selfdrive/ui/onroad/alert_renderer.py msgid "Waiting to start" msgstr "等待开始" @@ -2176,6 +2551,14 @@ msgstr "留空以自动配置" msgid "left" msgstr "左" +#: openpilot/selfdrive/selfdrived/events.py +msgid "locationd Permanent Error" +msgstr "locationd 永久错误" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "locationd Temporary Error" +msgstr "locationd 临时错误" + #: openpilot/selfdrive/ui/sunnypilot/layouts/settings/device.py msgid "m" msgstr "分钟" @@ -2211,6 +2594,10 @@ msgstr "无网络" msgid "now" msgstr "现在" +#: openpilot/selfdrive/selfdrived/events.py +msgid "openpilot Canceled" +msgstr "openpilot 已取消" + #: openpilot/selfdrive/ui/sunnypilot/mici/layouts/sunnylink.py msgid "pair" msgstr "配对" @@ -2223,6 +2610,14 @@ msgstr "与 sunnylink 配对" msgid "paired" msgstr "已配对" +#: openpilot/selfdrive/selfdrived/events.py +msgid "paramsd Permanent Error" +msgstr "paramsd 永久错误" + +#: openpilot/selfdrive/selfdrived/events.py +msgid "paramsd Temporary Error" +msgstr "paramsd 临时错误" + #: openpilot/selfdrive/ui/sunnypilot/mici/layouts/sunnylink.py msgid "please connect to WiFi & try again" msgstr "请连接 WiFi 并重试" @@ -2337,6 +2732,10 @@ msgstr "sunnypilot 要求设备安装倾斜度在左右 4°、上下 5°/9° 以 msgid "sunnypilot will not take over control of gas and brakes. Factory Toyota longitudinal control will be used." msgstr "sunnypilot 不会接管油门和刹车控制。将使用原厂 Toyota 纵向控制。" +#: openpilot/selfdrive/selfdrived/events.py +msgid "take control" +msgstr "接管控制" + #: openpilot/selfdrive/ui/sunnypilot/mici/layouts/sunnylink.py msgid "thanks" msgstr "谢谢" diff --git a/openpilot/selfdrive/ui/translations/update_translations.py b/openpilot/selfdrive/ui/translations/update_translations.py index 61fad007e..0b5ecc26c 100755 --- a/openpilot/selfdrive/ui/translations/update_translations.py +++ b/openpilot/selfdrive/ui/translations/update_translations.py @@ -16,7 +16,8 @@ def update_translations(): os.walk(os.path.join(str(UI_DIR), "layouts")), os.walk(os.path.join(str(UI_DIR), "onroad")), os.walk(os.path.join(str(UI_DIR), "sunnypilot")), - os.walk(os.path.join(str(UI_DIR), "mici"))): + os.walk(os.path.join(str(UI_DIR), "mici")), + os.walk(os.path.join(str(UI_DIR), "..", "selfdrived"))): for filename in filenames: if filename.endswith(".py"): files.append(os.path.relpath(os.path.join(root, filename), BASEDIR))