mirror of
https://jihulab.com/mr-one/openpilot.git
synced 2026-10-26 20:43:49 +08:00
translations: make selfdrived alerts translatable via po (tr_noop + extraction + renderer tr) with 101 Chinese alerts
This commit is contained in:
@@ -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")),
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 ""
|
||||
|
||||
|
||||
@@ -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 "快速启动模式需要禁用更新。<br>请先在软件面板中启
|
||||
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 "谢谢"
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user