diff --git a/selfdrive/assets/fonts/NotoSansJP-Regular.ttf b/selfdrive/assets/fonts/NotoSansJP-Regular.ttf
new file mode 100644
index 00000000000000..6df2f0a66e9abe
--- /dev/null
+++ b/selfdrive/assets/fonts/NotoSansJP-Regular.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f32915916d2d6f35bb0d3d7ef0784504914bf0235afb02eec552bd14d06d3552
+size 5450308
diff --git a/selfdrive/assets/fonts/OpenpilotSans-Regular.ttf b/selfdrive/assets/fonts/OpenpilotSans-Regular.ttf
new file mode 100644
index 00000000000000..ed20cbebd3aef7
--- /dev/null
+++ b/selfdrive/assets/fonts/OpenpilotSans-Regular.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f4d321abf51e964e3dc5fb903655b7ba062311b399985db2c83a900246862244
+size 5872156
diff --git a/selfdrive/ui/SConscript b/selfdrive/ui/SConscript
index 7ede8c394a83be..d4a70077d9f6b5 100644
--- a/selfdrive/ui/SConscript
+++ b/selfdrive/ui/SConscript
@@ -96,3 +96,15 @@ if GetOption('extras'):
f = raylib_env.Program(f"installer/installers/installer_{name}", [obj, cont, inter], LIBS=raylib_libs)
# keep installers small
assert f[0].get_size() < 1900*1e3, f[0].get_size()
+
+# Compile gettext .po -> .mo alongside Qt translations
+po_sources = [f"#selfdrive/ui/translations/app_{l}.po" for l in languages.values()]
+mo_targets = [src.replace(".po", ".mo") for src in po_sources]
+msgfmt_bin = 'msgfmt'
+
+# Build each .mo individually to ensure one-to-one mapping
+mo_build = []
+for src, tgt in zip(po_sources, mo_targets):
+ mo_build.append(env.Command(tgt, src, f"{msgfmt_bin} -o $TARGET $SOURCE"))
+
+qt_env.Depends(assets, mo_build)
diff --git a/selfdrive/ui/layouts/settings/developer.py b/selfdrive/ui/layouts/settings/developer.py
index 91268960cb45da..7370b608c265aa 100644
--- a/selfdrive/ui/layouts/settings/developer.py
+++ b/selfdrive/ui/layouts/settings/developer.py
@@ -22,7 +22,8 @@
'alpha_longitudinal': tr(
"WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).
" +
"On this car, openpilot defaults to the car's built-in ACC instead of openpilot's longitudinal control. " +
- "Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha."
+ "Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha. " +
+ "Changing this setting will restart openpilot if the car is powered on."
),
}
@@ -35,8 +36,8 @@ def __init__(self):
# Build items and keep references for callbacks/state updates
self._adb_toggle = toggle_item(
- tr("Enable ADB"),
- description=DESCRIPTIONS["enable_adb"],
+ lambda: tr("Enable ADB"),
+ description=lambda: DESCRIPTIONS["enable_adb"],
initial_state=self._params.get_bool("AdbEnabled"),
callback=self._on_enable_adb,
enabled=ui_state.is_offroad,
@@ -44,15 +45,15 @@ def __init__(self):
# SSH enable toggle + SSH key management
self._ssh_toggle = toggle_item(
- tr("Enable SSH"),
+ lambda: tr("Enable SSH"),
description="",
initial_state=self._params.get_bool("SshEnabled"),
callback=self._on_enable_ssh,
)
- self._ssh_keys = ssh_key_item("SSH Keys", description=DESCRIPTIONS["ssh_key"])
+ self._ssh_keys = ssh_key_item(lambda: tr("SSH Keys"), description=lambda: DESCRIPTIONS["ssh_key"])
self._joystick_toggle = toggle_item(
- tr("Joystick Debug Mode"),
+ lambda: tr("Joystick Debug Mode"),
description="",
initial_state=self._params.get_bool("JoystickDebugMode"),
callback=self._on_joystick_debug_mode,
@@ -60,22 +61,20 @@ def __init__(self):
)
self._long_maneuver_toggle = toggle_item(
- tr("Longitudinal Maneuver Mode"),
+ lambda: tr("Longitudinal Maneuver Mode"),
description="",
initial_state=self._params.get_bool("LongitudinalManeuverMode"),
callback=self._on_long_maneuver_mode,
)
self._alpha_long_toggle = toggle_item(
- tr("openpilot Longitudinal Control (Alpha)"),
- description=DESCRIPTIONS["alpha_longitudinal"],
+ lambda: tr("openpilot Longitudinal Control (Alpha)"),
+ description=lambda: DESCRIPTIONS["alpha_longitudinal"],
initial_state=self._params.get_bool("AlphaLongitudinalEnabled"),
callback=self._on_alpha_long_enabled,
enabled=lambda: not ui_state.engaged,
)
- self._alpha_long_toggle.set_description(self._alpha_long_toggle.description + " Changing this setting will restart openpilot if the car is powered on.")
-
items = [
self._adb_toggle,
self._ssh_toggle,
diff --git a/selfdrive/ui/layouts/settings/device.py b/selfdrive/ui/layouts/settings/device.py
index e9bdf59e26d910..583d750d2bc9b4 100644
--- a/selfdrive/ui/layouts/settings/device.py
+++ b/selfdrive/ui/layouts/settings/device.py
@@ -1,5 +1,5 @@
import os
-import json
+#import time
import math
from cereal import messaging, log
@@ -12,7 +12,7 @@
from openpilot.selfdrive.ui.widgets.pairing_dialog import PairingDialog
from openpilot.system.hardware import TICI
from openpilot.system.ui.lib.application import gui_app
-from openpilot.system.ui.lib.multilang import tr
+from openpilot.system.ui.lib.multilang import multilang, tr
from openpilot.system.ui.widgets import Widget, DialogResult
from openpilot.system.ui.widgets.confirm_dialog import ConfirmDialog, alert_dialog
from openpilot.system.ui.widgets.html_render import HtmlModal
@@ -49,24 +49,24 @@ def _initialize_items(self):
dongle_id = self._params.get("DongleId") or tr("N/A")
serial = self._params.get("HardwareSerial") or tr("N/A")
- self._pair_device_btn = button_item(tr("Pair Device"), tr("PAIR"), DESCRIPTIONS['pair_device'], callback=self._pair_device)
+ self._pair_device_btn = button_item(lambda: tr("Pair Device"), lambda: tr("PAIR"), lambda: tr(DESCRIPTIONS['pair_device']), callback=self._pair_device)
self._pair_device_btn.set_visible(lambda: not ui_state.prime_state.is_paired())
- self._reset_calib_btn = button_item(tr("Reset Calibration"), tr("RESET"), DESCRIPTIONS['reset_calibration'], callback=self._reset_calibration_prompt)
+ self._reset_calib_btn = button_item(lambda: tr("Reset Calibration"), lambda: tr("RESET"), lambda: tr(DESCRIPTIONS['reset_calibration']),
+ callback=self._reset_calibration_prompt)
self._reset_calib_btn.set_description_opened_callback(self._update_calib_description)
self._power_off_btn = dual_button_item(tr("Reboot"), tr("Power Off"), left_callback=self._reboot_prompt, right_callback=self._power_off_prompt)
items = [
- text_item(tr("Dongle ID"), dongle_id),
- text_item(tr("Serial"), serial),
+ text_item(lambda: tr("Dongle ID"), dongle_id),
+ text_item(lambda: tr("Serial"), serial),
self._pair_device_btn,
- button_item(tr("Driver Camera"), tr("PREVIEW"), DESCRIPTIONS['driver_camera'], callback=self._show_driver_camera, enabled=ui_state.is_offroad),
+ button_item(lambda: tr("Driver Camera"), lambda: tr("PREVIEW"), lambda: tr(DESCRIPTIONS['driver_camera']), callback=self._show_driver_camera, enabled=ui_state.is_offroad),
self._reset_calib_btn,
- button_item(tr("Review Training Guide"), tr("REVIEW"), DESCRIPTIONS['review_guide'], self._on_review_training_guide, enabled=ui_state.is_offroad),
- regulatory_btn := button_item(tr("Regulatory"), tr("VIEW"), callback=self._on_regulatory, enabled=ui_state.is_offroad),
- # TODO: implement multilang
- # button_item(tr("Change Language"), tr("CHANGE"), callback=self._show_language_selection, enabled=ui_state.is_offroad),
+ button_item(lambda: tr("Review Training Guide"), lambda: tr("REVIEW"), lambda: tr(DESCRIPTIONS['review_guide']), self._on_review_training_guide, enabled=ui_state.is_offroad),
+ regulatory_btn := button_item(lambda: tr("Regulatory"), lambda: tr("VIEW"), callback=self._on_regulatory, enabled=ui_state.is_offroad),
+ button_item(lambda: tr("Change Language"), lambda: tr("CHANGE"), callback=self._show_language_dialog, enabled=ui_state.is_offroad),
self._power_off_btn,
]
regulatory_btn.set_visible(TICI)
@@ -79,26 +79,29 @@ def show_event(self):
self._scroller.show_event()
def _render(self, rect):
+
+ # t = time.monotonic()
+ # tr("Hello test string! {}".format(1))
+ # print("Translation took {} ms".format((time.monotonic() - t) * 1000))
+
self._scroller.render(rect)
- def _show_language_selection(self):
- try:
- languages_file = os.path.join(BASEDIR, "selfdrive/ui/translations/languages.json")
- with open(languages_file, encoding='utf-8') as f:
- languages = json.load(f)
+ def _show_language_dialog(self):
+ def handle_language_selection(result: int):
+ if result == 1 and self._select_language_dialog:
+ selected_language = multilang.languages[self._select_language_dialog.selection]
+ multilang.change_language(selected_language)
+ print("Selected language:", selected_language)
+ self._update_calib_description()
+
+ self._select_language_dialog = None
- self._select_language_dialog = MultiOptionDialog("Select a language", languages)
- gui_app.set_modal_overlay(self._select_language_dialog, callback=self._handle_language_selection)
+ try:
+ self._select_language_dialog = MultiOptionDialog(tr("Select a language"), multilang.languages, multilang.codes[multilang.language])
+ gui_app.set_modal_overlay(self._select_language_dialog, callback=handle_language_selection)
except FileNotFoundError:
pass
- def _handle_language_selection(self, result: int):
- if result == 1 and self._select_language_dialog:
- selected_language = self._select_language_dialog.selection
- self._params.put("LanguageSetting", selected_language)
-
- self._select_language_dialog = None
-
def _show_driver_camera(self):
if not self._driver_camera:
self._driver_camera = DriverCameraDialog()
diff --git a/selfdrive/ui/layouts/settings/firehose.py b/selfdrive/ui/layouts/settings/firehose.py
index f4d70eaa47732e..dff714f0ff0f17 100644
--- a/selfdrive/ui/layouts/settings/firehose.py
+++ b/selfdrive/ui/layouts/settings/firehose.py
@@ -86,14 +86,15 @@ def _render_content(self, rect: rl.Rectangle, scroll_offset: float) -> int:
w = int(rect.width - 80)
# Title (centered)
+ title_text = tr(TITLE) # live translate
title_font = gui_app.font(FontWeight.MEDIUM)
- text_width = measure_text_cached(title_font, TITLE, 100).x
+ text_width = measure_text_cached(title_font, title_text, 100).x
title_x = rect.x + (rect.width - text_width) / 2
- rl.draw_text_ex(title_font, TITLE, rl.Vector2(title_x, y), 100, 0, rl.WHITE)
+ rl.draw_text_ex(title_font, title_text, rl.Vector2(title_x, y), 100, 0, rl.WHITE)
y += 200
# Description
- y = self._draw_wrapped_text(x, y, w, DESCRIPTION, gui_app.font(FontWeight.NORMAL), 45, rl.WHITE)
+ y = self._draw_wrapped_text(x, y, w, tr(DESCRIPTION), gui_app.font(FontWeight.NORMAL), 45, rl.WHITE)
y += 40 + 20
# Separator
@@ -117,7 +118,7 @@ def _render_content(self, rect: rl.Rectangle, scroll_offset: float) -> int:
y += 30 + 20
# Instructions
- y = self._draw_wrapped_text(x, y, w, INSTRUCTIONS, gui_app.font(FontWeight.NORMAL), 40, self.LIGHT_GRAY)
+ y = self._draw_wrapped_text(x, y, w, tr(INSTRUCTIONS), gui_app.font(FontWeight.NORMAL), 40, self.LIGHT_GRAY)
# bottom margin + remove effect of scroll offset
return int(round(y - self.scroll_panel.offset + 40))
diff --git a/selfdrive/ui/layouts/settings/settings.py b/selfdrive/ui/layouts/settings/settings.py
index 7f431d3a777a24..d710cf9bd58140 100644
--- a/selfdrive/ui/layouts/settings/settings.py
+++ b/selfdrive/ui/layouts/settings/settings.py
@@ -116,11 +116,12 @@ def _draw_sidebar(self, rect: rl.Rectangle):
is_selected = panel_type == self._current_panel
text_color = TEXT_SELECTED if is_selected else TEXT_NORMAL
# Draw button text (right-aligned)
- text_size = measure_text_cached(self._font_medium, panel_info.name, 65)
+ panel_name = tr(panel_info.name)
+ text_size = measure_text_cached(self._font_medium, panel_name, 65)
text_pos = rl.Vector2(
button_rect.x + button_rect.width - text_size.x, button_rect.y + (button_rect.height - text_size.y) / 2
)
- rl.draw_text_ex(self._font_medium, panel_info.name, text_pos, 65, 0, text_color)
+ rl.draw_text_ex(self._font_medium, panel_name, text_pos, 65, 0, text_color)
# Store button rect for click detection
panel_info.button_rect = button_rect
diff --git a/selfdrive/ui/layouts/settings/software.py b/selfdrive/ui/layouts/settings/software.py
index 8e0cfdbc3c0b28..734699018f63b4 100644
--- a/selfdrive/ui/layouts/settings/software.py
+++ b/selfdrive/ui/layouts/settings/software.py
@@ -44,12 +44,12 @@ class SoftwareLayout(Widget):
def __init__(self):
super().__init__()
- self._onroad_label = ListItem(title=tr("Updates are only downloaded while the car is off."))
- self._version_item = text_item(tr("Current Version"), ui_state.params.get("UpdaterCurrentDescription") or "")
- self._download_btn = button_item(tr("Download"), tr("CHECK"), callback=self._on_download_update)
+ self._onroad_label = ListItem(lambda: tr("Updates are only downloaded while the car is off."))
+ self._version_item = text_item(lambda: tr("Current Version"), ui_state.params.get("UpdaterCurrentDescription") or "")
+ self._download_btn = button_item(lambda: tr("Download"), lambda: tr("CHECK"), callback=self._on_download_update)
# Install button is initially hidden
- self._install_btn = button_item(tr("Install Update"), tr("INSTALL"), callback=self._on_install_update)
+ self._install_btn = button_item(lambda: tr("Install Update"), lambda: tr("INSTALL"), callback=self._on_install_update)
self._install_btn.set_visible(False)
# Track waiting-for-updater transition to avoid brief re-enable while still idle
@@ -67,7 +67,7 @@ def _init_items(self):
self._install_btn,
# TODO: implement branch switching
# button_item("Target Branch", "SELECT", callback=self._on_select_branch),
- button_item("Uninstall", tr("UNINSTALL"), callback=self._on_uninstall),
+ button_item("Uninstall", lambda: tr("UNINSTALL"), callback=self._on_uninstall),
]
return items
diff --git a/selfdrive/ui/layouts/settings/toggles.py b/selfdrive/ui/layouts/settings/toggles.py
index 1e4d5c6c857395..da09c7ad874f0b 100644
--- a/selfdrive/ui/layouts/settings/toggles.py
+++ b/selfdrive/ui/layouts/settings/toggles.py
@@ -43,49 +43,49 @@ def __init__(self):
# param, title, desc, icon, needs_restart
self._toggle_defs = {
"OpenpilotEnabledToggle": (
- tr("Enable openpilot"),
+ lambda: tr("Enable openpilot"),
DESCRIPTIONS["OpenpilotEnabledToggle"],
"chffr_wheel.png",
True,
),
"ExperimentalMode": (
- tr("Experimental Mode"),
+ lambda: tr("Experimental Mode"),
"",
"experimental_white.png",
False,
),
"DisengageOnAccelerator": (
- tr("Disengage on Accelerator Pedal"),
+ lambda: tr("Disengage on Accelerator Pedal"),
DESCRIPTIONS["DisengageOnAccelerator"],
"disengage_on_accelerator.png",
False,
),
"IsLdwEnabled": (
- tr("Enable Lane Departure Warnings"),
+ lambda: tr("Enable Lane Departure Warnings"),
DESCRIPTIONS["IsLdwEnabled"],
"warning.png",
False,
),
"AlwaysOnDM": (
- tr("Always-On Driver Monitoring"),
+ lambda: tr("Always-On Driver Monitoring"),
DESCRIPTIONS["AlwaysOnDM"],
"monitoring.png",
False,
),
"RecordFront": (
- tr("Record and Upload Driver Camera"),
+ lambda: tr("Record and Upload Driver Camera"),
DESCRIPTIONS["RecordFront"],
"monitoring.png",
True,
),
"RecordAudio": (
- tr("Record and Upload Microphone Audio"),
+ lambda: tr("Record and Upload Microphone Audio"),
DESCRIPTIONS["RecordAudio"],
"microphone.png",
True,
),
"IsMetric": (
- tr("Use Metric System"),
+ lambda: tr("Use Metric System"),
DESCRIPTIONS["IsMetric"],
"metric.png",
False,
@@ -93,9 +93,9 @@ def __init__(self):
}
self._long_personality_setting = multiple_button_item(
- tr("Driving Personality"),
+ lambda: tr("Driving Personality"),
DESCRIPTIONS["LongitudinalPersonality"],
- buttons=[tr("Aggressive"), tr("Standard"), tr("Relaxed")],
+ buttons=[lambda: tr("Aggressive"), lambda: tr("Standard"), lambda: tr("Relaxed")],
button_width=255,
callback=self._set_longitudinal_personality,
selected_index=self._params.get("LongitudinalPersonality", return_default=True),
@@ -119,8 +119,11 @@ def __init__(self):
locked = False
toggle.action_item.set_enabled(not locked)
+ # Make description callable for live translation
+ additional_desc = ""
if needs_restart and not locked:
- toggle.set_description(toggle.description + tr(" Changing this setting will restart openpilot if the car is powered on."))
+ additional_desc = tr("Changing this setting will restart openpilot if the car is powered on.")
+ toggle.set_description(lambda original_desc=toggle.description: tr(original_desc) + "" + tr(additional_desc))
# track for engaged state updates
if locked:
diff --git a/selfdrive/ui/translations/app.pot b/selfdrive/ui/translations/app.pot
new file mode 100644
index 00000000000000..5f32521db68b61
--- /dev/null
+++ b/selfdrive/ui/translations/app.pot
@@ -0,0 +1,1176 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR , YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-10-20 22:32-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+
+#: /home/batman/openpilot/system/ui/widgets/html_render.py:247
+#: /home/batman/openpilot/system/ui/widgets/confirm_dialog.py:93
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:127
+#, python-format
+msgid "OK"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/confirm_dialog.py:23
+#: /home/batman/openpilot/system/ui/widgets/option_dialog.py:34
+#: /home/batman/openpilot/system/ui/widgets/keyboard.py:81
+#: /home/batman/openpilot/system/ui/widgets/network.py:318
+#, python-format
+msgid "Cancel"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/option_dialog.py:35
+#, python-format
+msgid "Select"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:74
+#: /home/batman/openpilot/system/ui/widgets/network.py:95
+#, python-format
+msgid "Advanced"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:99
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:147
+#, python-format
+msgid "Back"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:120
+#, python-format
+msgid "Enable Tethering"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:123
+#: /home/batman/openpilot/system/ui/widgets/network.py:139
+#, python-format
+msgid "EDIT"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:124
+#, python-format
+msgid "Tethering Password"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:129
+#, python-format
+msgid "Enable Roaming"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:134
+#, python-format
+msgid "Cellular Metered"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:135
+#, python-format
+msgid "Prevent large data uploads when on a metered cellular connection"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:139
+#, python-format
+msgid "APN Setting"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "default"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "metered"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "unmetered"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:144
+#, python-format
+msgid "Wi-Fi Network Metered"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:144
+#, python-format
+msgid "Prevent large data uploads when on a metered Wi-Fi connection"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:150
+#, python-format
+msgid "IP Address"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:155
+#, python-format
+msgid "Hidden Network"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:155
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:73
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:134
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:136
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:138
+#, python-format
+msgid "CONNECT"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:204
+#, python-format
+msgid "Enter APN"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:204
+#, python-format
+msgid "leave blank for automatic configuration"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:237
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "Enter password"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:237
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "for \"{}\""
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:241
+#, python-format
+msgid "Enter SSID"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:254
+#, python-format
+msgid "Enter new tethering password"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:310
+#, python-format
+msgid "Scanning Wi-Fi networks..."
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "Wrong password"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:318
+#: /home/batman/openpilot/system/ui/widgets/network.py:451
+#, python-format
+msgid "Forget"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:319
+#, python-format
+msgid "Forget Wi-Fi Network \"{}\"?"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:369
+#, python-format
+msgid "CONNECTING..."
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:373
+#, python-format
+msgid "FORGETTING..."
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/list_view.py:115
+#: /home/batman/openpilot/system/ui/widgets/list_view.py:153
+#, python-format
+msgid "Error"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:103
+#, python-format
+msgid "Pair your device to your comma account"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:128
+#, python-format
+msgid "Go to https://connect.comma.ai on your phone"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:129
+#, python-format
+msgid "Click \"add new device\" and scan the QR code on the right"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:130
+#, python-format
+msgid "Bookmark connect.comma.ai to your home screen to use it like an app"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:161
+#, python-format
+msgid "QR Code Error"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:29
+#, python-format
+msgid "LOADING"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:30
+#, python-format
+msgid "ADD"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:31
+#, python-format
+msgid "REMOVE"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:89
+#, python-format
+msgid "Enter your GitHub username"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:114
+#, python-format
+msgid "No SSH keys found"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:123
+#, python-format
+msgid "Request timed out"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:126
+#, python-format
+msgid "No SSH keys found for user '{}'"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:33
+#, python-format
+msgid "Upgrade Now"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:38
+#, python-format
+msgid "Become a comma prime member at connect.comma.ai"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:44
+#, python-format
+msgid "PRIME FEATURES:"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "Remote access"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "24/7 LTE connectivity"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "1 year of drive storage"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "Remote snapshots"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:62
+#, python-format
+msgid "✓ SUBSCRIBED"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:63
+#, python-format
+msgid "comma prime"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/exp_mode_button.py:50
+#, python-format
+msgid "EXPERIMENTAL MODE ON"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/exp_mode_button.py:50
+#, python-format
+msgid "CHILL MODE ON"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:18
+#, python-format
+msgid "No release notes available."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:105
+#, python-format
+msgid "Close"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:107
+#, python-format
+msgid "Snooze Update"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:110
+#, python-format
+msgid "Acknowledge Excessive Actuation"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:113
+#, python-format
+msgid "Reboot and Update"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:19
+#, python-format
+msgid "Pair device"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:20
+#, python-format
+msgid "Open"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:22
+#, python-format
+msgid "🔥 Firehose Mode 🔥"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:44
+#, python-format
+msgid "Finish Setup"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:48
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:25
+#, python-format
+msgid ""
+"Pair your device with comma connect (connect.comma.ai) and claim your comma "
+"prime offer."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:75
+#, python-format
+msgid ""
+"Maximize your training data uploads to improve openpilot's driving models."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:91
+#, python-format
+msgid "Please connect to Wi-Fi to complete initial pairing"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/home.py:155
+#, python-format
+msgid "UPDATE"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/home.py:169
+#, python-format
+msgid "{} ALERT"
+msgid_plural "{} ALERTS"
+msgstr[0] ""
+msgstr[1] ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:43
+#, python-format
+msgid "--"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:44
+#, python-format
+msgid "Wi-Fi"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:45
+#, python-format
+msgid "ETH"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:46
+#, python-format
+msgid "2G"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:47
+#, python-format
+msgid "3G"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:48
+#, python-format
+msgid "LTE"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:49
+#, python-format
+msgid "5G"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:71
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:125
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:127
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:129
+#, python-format
+msgid "TEMP"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:71
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:125
+#, python-format
+msgid "GOOD"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:72
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:144
+#, python-format
+msgid "VEHICLE"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:72
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:136
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:144
+#, python-format
+msgid "ONLINE"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:73
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:134
+#, python-format
+msgid "OFFLINE"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:117
+#, python-format
+msgid "Unknown"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:129
+#, python-format
+msgid "HIGH"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:138
+#, python-format
+msgid "ERROR"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:142
+#, python-format
+msgid "NO"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:142
+#, python-format
+msgid "PANDA"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:111
+#, python-format
+msgid "Welcome to openpilot"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:112
+#, python-format
+msgid ""
+"You must accept the Terms and Conditions to use openpilot. Read the latest "
+"terms at https://comma.ai/terms before continuing."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:115
+#, python-format
+msgid "Decline"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:116
+#, python-format
+msgid "Agree"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:145
+#, python-format
+msgid "You must accept the Terms and Conditions in order to use openpilot."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:148
+#, python-format
+msgid "Decline, uninstall openpilot"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:18
+#, python-format
+msgid "Firehose Mode"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:20
+#, python-format
+msgid ""
+"openpilot learns to drive by watching humans, like you, drive.\n"
+"\n"
+"Firehose Mode allows you to maximize your training data uploads to improve "
+"openpilot's driving models. More data means bigger models, which means "
+"better Experimental Mode."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:25
+#, python-format
+msgid ""
+"For maximum effectiveness, bring your device inside and connect to a good "
+"USB-C adapter and Wi-Fi weekly.\n"
+"\n"
+"Firehose Mode can also work while you're driving if connected to a hotspot "
+"or unlimited SIM card.\n"
+"\n"
+"\n"
+"Frequently Asked Questions\n"
+"\n"
+"Does it matter how or where I drive? Nope, just drive as you normally "
+"would.\n"
+"\n"
+"Do all of my segments get pulled in Firehose Mode? No, we selectively pull a "
+"subset of your segments.\n"
+"\n"
+"What's a good USB-C adapter? Any fast phone or laptop charger should be "
+"fine.\n"
+"\n"
+"Does it matter which software I run? Yes, only upstream openpilot (and "
+"particular forks) are able to be used for training."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:111
+#, python-format
+msgid "{} segment of your driving is in the training dataset so far."
+msgid_plural "{} segments of your driving is in the training dataset so far."
+msgstr[0] ""
+msgstr[1] ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:138
+#, python-format
+msgid "ACTIVE"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:140
+#, python-format
+msgid "INACTIVE: connect to an unmetered network"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:15
+#, python-format
+msgid ""
+"ADB (Android Debug Bridge) allows connecting to your device over USB or over "
+"the network. See https://docs.comma.ai/how-to/connect-to-comma for more info."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:19
+#, python-format
+msgid ""
+"Warning: This grants SSH access to all public keys in your GitHub settings. "
+"Never enter a GitHub username other than your own. A comma employee will "
+"NEVER ask you to add their GitHub username."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:23
+#, python-format
+msgid ""
+"WARNING: openpilot longitudinal control is in alpha for this car and will "
+"disable Automatic Emergency Braking (AEB).
On this car, openpilot "
+"defaults to the car's built-in ACC instead of openpilot's longitudinal "
+"control. Enable this to switch to openpilot longitudinal control. Enabling "
+"Experimental mode is recommended when enabling openpilot longitudinal "
+"control alpha. Changing this setting will restart openpilot if the car is "
+"powered on."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:39
+#, python-format
+msgid "Enable ADB"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:48
+#, python-format
+msgid "Enable SSH"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:53
+#, python-format
+msgid "SSH Keys"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:56
+#, python-format
+msgid "Joystick Debug Mode"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:64
+#, python-format
+msgid "Longitudinal Maneuver Mode"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:71
+#, python-format
+msgid "openpilot Longitudinal Control (Alpha)"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:166
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:228
+#, python-format
+msgid "Enable"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:19
+#, python-format
+msgid "never"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:30
+#, python-format
+msgid "now"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:33
+#, python-format
+msgid "{} minute ago"
+msgid_plural "{} minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:36
+#, python-format
+msgid "{} hour ago"
+msgid_plural "{} hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:39
+#, python-format
+msgid "{} day ago"
+msgid_plural "{} days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:47
+#, python-format
+msgid "Updates are only downloaded while the car is off."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:48
+#, python-format
+msgid "Current Version"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:49
+#, python-format
+msgid "Download"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:49
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:106
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:117
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:142
+#, python-format
+msgid "CHECK"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:52
+#, python-format
+msgid "Install Update"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:52
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:131
+#, python-format
+msgid "INSTALL"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:70
+#, python-format
+msgid "UNINSTALL"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:105
+#, python-format
+msgid "failed to check for update"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:108
+#, python-format
+msgid "update available"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:109
+#, python-format
+msgid "DOWNLOAD"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:114
+#, python-format
+msgid "up to date, last checked {}"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:116
+#, python-format
+msgid "up to date, last checked never"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:158
+#, python-format
+msgid "Are you sure you want to uninstall?"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:158
+#, python-format
+msgid "Uninstall"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:26
+#, python-format
+msgid ""
+"Preview the driver facing camera to ensure that driver monitoring has good "
+"visibility. (vehicle must be off)"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:27
+#, python-format
+msgid ""
+"openpilot requires the device to be mounted within 4° left or right and "
+"within 5° up or 9° down."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:28
+#, python-format
+msgid "Review the rules, features, and limitations of openpilot"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:49
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:50
+#, python-format
+msgid "N/A"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:52
+#, python-format
+msgid "Pair Device"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:52
+#, python-format
+msgid "PAIR"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:55
+#, python-format
+msgid "Reset Calibration"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:55
+#, python-format
+msgid "RESET"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:59
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:185
+#, python-format
+msgid "Reboot"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:59
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:197
+#, python-format
+msgid "Power Off"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:62
+#, python-format
+msgid "Dongle ID"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:63
+#, python-format
+msgid "Serial"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:65
+#, python-format
+msgid "Driver Camera"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:65
+#, python-format
+msgid "PREVIEW"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:67
+#, python-format
+msgid "Review Training Guide"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:67
+#, python-format
+msgid "REVIEW"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:68
+#, python-format
+msgid "Regulatory"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:68
+#, python-format
+msgid "VIEW"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:69
+#, python-format
+msgid "Change Language"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:69
+#, python-format
+msgid "CHANGE"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:100
+#, python-format
+msgid "Select a language"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:113
+#, python-format
+msgid "Disengage to Reset Calibration"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:129
+#, python-format
+msgid "Are you sure you want to reset calibration?"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:129
+#, python-format
+msgid "Reset"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid " Your device is pointed {:.1f}° {} and {:.1f}° {}."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid "down"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid "up"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:144
+#, python-format
+msgid "left"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:144
+#, python-format
+msgid "right"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:156
+#, python-format
+msgid "
Steering lag calibration is {}% complete."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:158
+#, python-format
+msgid "
Steering lag calibration is complete."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:168
+#, python-format
+msgid " Steering torque response calibration is {}% complete."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:170
+#, python-format
+msgid " Steering torque response calibration is complete."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:175
+#, python-format
+msgid ""
+"openpilot is continuously calibrating, resetting is rarely required. "
+"Resetting calibration will restart openpilot if the car is powered on."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:182
+#, python-format
+msgid "Disengage to Reboot"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:185
+#, python-format
+msgid "Are you sure you want to reboot?"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:194
+#, python-format
+msgid "Disengage to Power Off"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:197
+#, python-format
+msgid "Are you sure you want to power off?"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:62
+#, python-format
+msgid "Device"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:63
+#, python-format
+msgid "Network"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:64
+#, python-format
+msgid "Toggles"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:65
+#, python-format
+msgid "Software"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:66
+#, python-format
+msgid "Firehose"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:67
+#, python-format
+msgid "Developer"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:17
+#, python-format
+msgid ""
+"Use the openpilot system for adaptive cruise control and lane keep driver "
+"assistance. Your attention is required at all times to use this feature."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:20
+#, python-format
+msgid "When enabled, pressing the accelerator pedal will disengage openpilot."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:22
+#, python-format
+msgid ""
+"Standard is recommended. In aggressive mode, openpilot will follow lead cars "
+"closer and be more aggressive with the gas and brake. In relaxed mode "
+"openpilot will stay further away from lead cars. On supported cars, you can "
+"cycle through these personalities with your steering wheel distance button."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:27
+#, python-format
+msgid ""
+"Receive alerts to steer back into the lane when your vehicle drifts over a "
+"detected lane line without a turn signal activated while driving over 31 mph "
+"(50 km/h)."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:30
+#, python-format
+msgid "Enable driver monitoring even when openpilot is not engaged."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:31
+#, python-format
+msgid ""
+"Upload data from the driver facing camera and help improve the driver "
+"monitoring algorithm."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:32
+#, python-format
+msgid "Display speed in km/h instead of mph."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:33
+#, python-format
+msgid ""
+"Record and store microphone audio while driving. The audio will be included "
+"in the dashcam video in comma connect."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:46
+#, python-format
+msgid "Enable openpilot"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:52
+#, python-format
+msgid "Experimental Mode"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:58
+#, python-format
+msgid "Disengage on Accelerator Pedal"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:64
+#, python-format
+msgid "Enable Lane Departure Warnings"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:70
+#, python-format
+msgid "Always-On Driver Monitoring"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:76
+#, python-format
+msgid "Record and Upload Driver Camera"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:82
+#, python-format
+msgid "Record and Upload Microphone Audio"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:88
+#, python-format
+msgid "Use Metric System"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:96
+#, python-format
+msgid "Driving Personality"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Aggressive"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Standard"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Relaxed"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:125
+#, python-format
+msgid "Changing this setting will restart openpilot if the car is powered on."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:158
+#, python-format
+msgid ""
+"openpilot defaults to driving in chill mode. Experimental mode enables alpha-"
+"level features that aren't ready for chill mode. Experimental features are "
+"listed below:
End-to-End Longitudinal Control
Let the driving "
+"model control the gas and brakes. openpilot will drive as it thinks a human "
+"would, including stopping for red lights and stop signs. Since the driving "
+"model decides the speed to drive, the set speed will only act as an upper "
+"bound. This is an alpha quality feature; mistakes should be expected."
+"
New Driving Visualization
The driving visualization will "
+"transition to the road-facing wide-angle camera at low speeds to better show "
+"some turns. The Experimental mode logo will also be shown in the top right "
+"corner."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:181
+#, python-format
+msgid ""
+"Experimental mode is currently unavailable on this car since the car's stock "
+"ACC is used for longitudinal control."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:183
+#, python-format
+msgid "openpilot longitudinal control may come in a future update."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:186
+#, python-format
+msgid ""
+"An alpha version of openpilot longitudinal control can be tested, along with "
+"Experimental mode, on non-release branches."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:189
+#, python-format
+msgid ""
+"Enable the openpilot longitudinal control (alpha) toggle to allow "
+"Experimental mode."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:148
+#, python-format
+msgid "MAX"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:177
+#, python-format
+msgid "km/h"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:177
+#, python-format
+msgid "mph"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/driver_camera_dialog.py:34
+#, python-format
+msgid "camera starting"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:51
+#, python-format
+msgid "openpilot Unavailable"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:52
+#, python-format
+msgid "Waiting to start"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:58
+#, python-format
+msgid "TAKE CONTROL IMMEDIATELY"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:59
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:65
+#, python-format
+msgid "System Unresponsive"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:66
+#, python-format
+msgid "Reboot Device"
+msgstr ""
diff --git a/selfdrive/ui/translations/app_de.po b/selfdrive/ui/translations/app_de.po
new file mode 100644
index 00000000000000..6bc4ddf1b7564e
--- /dev/null
+++ b/selfdrive/ui/translations/app_de.po
@@ -0,0 +1,1271 @@
+# German translations for PACKAGE package.
+# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Automatically generated, 2025.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-10-20 22:31-0700\n"
+"PO-Revision-Date: 2025-10-20 16:35-0700\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:170
+#, python-format
+msgid " Steering torque response calibration is complete."
+msgstr " Die Lenkmoment-Reaktionskalibrierung ist abgeschlossen."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:168
+#, python-format
+msgid " Steering torque response calibration is {}% complete."
+msgstr " Die Lenkmoment-Reaktionskalibrierung ist zu {}% abgeschlossen."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid " Your device is pointed {:.1f}° {} and {:.1f}° {}."
+msgstr " Ihr Gerät ist um {:.1f}° {} und {:.1f}° {} ausgerichtet."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:43
+#, python-format
+msgid "--"
+msgstr "--"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "1 year of drive storage"
+msgstr "1 Jahr Fahrtdatenspeicherung"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "24/7 LTE connectivity"
+msgstr "24/7 LTE‑Verbindung"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:46
+#, python-format
+msgid "2G"
+msgstr "2G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:47
+#, python-format
+msgid "3G"
+msgstr "3G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:49
+#, python-format
+msgid "5G"
+msgstr "5G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:23
+#, fuzzy, python-format
+msgid ""
+"WARNING: openpilot longitudinal control is in alpha for this car and will "
+"disable Automatic Emergency Braking (AEB).
On this car, openpilot "
+"defaults to the car's built-in ACC instead of openpilot's longitudinal "
+"control. Enable this to switch to openpilot longitudinal control. Enabling "
+"Experimental mode is recommended when enabling openpilot longitudinal "
+"control alpha. Changing this setting will restart openpilot if the car is "
+"powered on."
+msgstr ""
+"WARNUNG: Die Längsregelung von openpilot befindet sich für dieses "
+"Fahrzeug in der Alpha-Phase und deaktiviert das automatische Notbremssystem "
+"(AEB).
Auf diesem Fahrzeug verwendet openpilot standardmäßig den "
+"integrierten ACC statt der openpilot-Längsregelung. Aktivieren Sie dies, um "
+"auf die openpilot-Längsregelung umzuschalten. Das Aktivieren des "
+"Experimentalmodus wird empfohlen, wenn Sie die openpilot-Längsregelung "
+"(Alpha) aktivieren."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:158
+#, python-format
+msgid "
Steering lag calibration is complete."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:156
+#, python-format
+msgid "
Steering lag calibration is {}% complete."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:138
+#, python-format
+msgid "ACTIVE"
+msgstr "AKTIV"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:15
+#, python-format
+msgid ""
+"ADB (Android Debug Bridge) allows connecting to your device over USB or over "
+"the network. See https://docs.comma.ai/how-to/connect-to-comma for more info."
+msgstr ""
+"ADB (Android Debug Bridge) ermöglicht die Verbindung mit Ihrem Gerät über "
+"USB oder über das Netzwerk. Siehe https://docs.comma.ai/how-to/connect-to-"
+"comma für weitere Informationen."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:30
+#, python-format
+msgid "ADD"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:139
+#, python-format
+msgid "APN Setting"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:110
+#, python-format
+msgid "Acknowledge Excessive Actuation"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:74
+#: /home/batman/openpilot/system/ui/widgets/network.py:95
+#, python-format
+msgid "Advanced"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Aggressive"
+msgstr "Aggressiv"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:116
+#, python-format
+msgid "Agree"
+msgstr "Zustimmen"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:70
+#, python-format
+msgid "Always-On Driver Monitoring"
+msgstr "Immer aktive Fahrerüberwachung"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:186
+#, python-format
+msgid ""
+"An alpha version of openpilot longitudinal control can be tested, along with "
+"Experimental mode, on non-release branches."
+msgstr ""
+"Eine Alpha-Version der openpilot-Längsregelung kann zusammen mit dem "
+"Experimentalmodus auf Nicht-Release-Zweigen getestet werden."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:197
+#, python-format
+msgid "Are you sure you want to power off?"
+msgstr "Sind Sie sicher, dass Sie ausschalten möchten?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:185
+#, python-format
+msgid "Are you sure you want to reboot?"
+msgstr "Sind Sie sicher, dass Sie neu starten möchten?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:129
+#, python-format
+msgid "Are you sure you want to reset calibration?"
+msgstr "Sind Sie sicher, dass Sie die Kalibrierung zurücksetzen möchten?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:158
+#, python-format
+msgid "Are you sure you want to uninstall?"
+msgstr "Sind Sie sicher, dass Sie deinstallieren möchten?"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:99
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:147
+#, python-format
+msgid "Back"
+msgstr "Zurück"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:38
+#, python-format
+msgid "Become a comma prime member at connect.comma.ai"
+msgstr "Werden Sie comma prime Mitglied auf connect.comma.ai"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:130
+#, python-format
+msgid "Bookmark connect.comma.ai to your home screen to use it like an app"
+msgstr ""
+"Fügen Sie connect.comma.ai Ihrem Startbildschirm hinzu, um es wie eine App "
+"zu verwenden"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:69
+#, python-format
+msgid "CHANGE"
+msgstr "ÄNDERN"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:49
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:106
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:117
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:142
+#, python-format
+msgid "CHECK"
+msgstr "PRÜFEN"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/exp_mode_button.py:50
+#, python-format
+msgid "CHILL MODE ON"
+msgstr "CHILL‑MODUS AKTIV"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:155
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:73
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:134
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:136
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:138
+#, python-format
+msgid "CONNECT"
+msgstr "VERBINDUNG"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:369
+#, fuzzy, python-format
+msgid "CONNECTING..."
+msgstr "VERBINDUNG"
+
+#: /home/batman/openpilot/system/ui/widgets/confirm_dialog.py:23
+#: /home/batman/openpilot/system/ui/widgets/option_dialog.py:34
+#: /home/batman/openpilot/system/ui/widgets/keyboard.py:81
+#: /home/batman/openpilot/system/ui/widgets/network.py:318
+#, python-format
+msgid "Cancel"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:134
+#, python-format
+msgid "Cellular Metered"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:69
+#, python-format
+msgid "Change Language"
+msgstr "Sprache ändern"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:125
+#, fuzzy, python-format
+msgid "Changing this setting will restart openpilot if the car is powered on."
+msgstr ""
+" Durch Ändern dieser Einstellung wird openpilot neu gestartet, wenn das Auto "
+"eingeschaltet ist."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:129
+#, python-format
+msgid "Click \"add new device\" and scan the QR code on the right"
+msgstr "Klicken Sie auf \"add new device\" und scannen Sie den QR‑Code rechts"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:105
+#, python-format
+msgid "Close"
+msgstr "Schließen"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:48
+#, python-format
+msgid "Current Version"
+msgstr "Aktuelle Version"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:109
+#, python-format
+msgid "DOWNLOAD"
+msgstr "HERUNTERLADEN"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:115
+#, python-format
+msgid "Decline"
+msgstr "Ablehnen"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:148
+#, python-format
+msgid "Decline, uninstall openpilot"
+msgstr "Ablehnen, openpilot deinstallieren"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:67
+#, python-format
+msgid "Developer"
+msgstr "Entwickler"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:62
+#, python-format
+msgid "Device"
+msgstr "Gerät"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:58
+#, python-format
+msgid "Disengage on Accelerator Pedal"
+msgstr "Beim Gaspedal deaktivieren"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:194
+#, python-format
+msgid "Disengage to Power Off"
+msgstr "Zum Ausschalten deaktivieren"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:182
+#, python-format
+msgid "Disengage to Reboot"
+msgstr "Zum Neustart deaktivieren"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:113
+#, python-format
+msgid "Disengage to Reset Calibration"
+msgstr "Zum Zurücksetzen der Kalibrierung deaktivieren"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:32
+#, python-format
+msgid "Display speed in km/h instead of mph."
+msgstr "Geschwindigkeit in km/h statt mph anzeigen."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:62
+#, python-format
+msgid "Dongle ID"
+msgstr "Dongle-ID"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:49
+#, python-format
+msgid "Download"
+msgstr "Herunterladen"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:65
+#, python-format
+msgid "Driver Camera"
+msgstr "Fahrerkamera"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:96
+#, python-format
+msgid "Driving Personality"
+msgstr "Fahrstil"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:123
+#: /home/batman/openpilot/system/ui/widgets/network.py:139
+#, python-format
+msgid "EDIT"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:138
+#, python-format
+msgid "ERROR"
+msgstr "FEHLER"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:45
+#, python-format
+msgid "ETH"
+msgstr "ETH"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/exp_mode_button.py:50
+#, python-format
+msgid "EXPERIMENTAL MODE ON"
+msgstr "EXPERIMENTALMODUS AKTIV"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:166
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:228
+#, python-format
+msgid "Enable"
+msgstr "Aktivieren"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:39
+#, python-format
+msgid "Enable ADB"
+msgstr "ADB aktivieren"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:64
+#, python-format
+msgid "Enable Lane Departure Warnings"
+msgstr "Spurverlassenswarnungen aktivieren"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:129
+#, fuzzy, python-format
+msgid "Enable Roaming"
+msgstr "openpilot aktivieren"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:48
+#, python-format
+msgid "Enable SSH"
+msgstr "SSH aktivieren"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:120
+#, fuzzy, python-format
+msgid "Enable Tethering"
+msgstr "Spurverlassenswarnungen aktivieren"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:30
+#, python-format
+msgid "Enable driver monitoring even when openpilot is not engaged."
+msgstr "Fahrerüberwachung auch aktivieren, wenn openpilot nicht aktiv ist."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:46
+#, python-format
+msgid "Enable openpilot"
+msgstr "openpilot aktivieren"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:189
+#, python-format
+msgid ""
+"Enable the openpilot longitudinal control (alpha) toggle to allow "
+"Experimental mode."
+msgstr ""
+"Den Schalter für die openpilot-Längsregelung (Alpha) aktivieren, um den "
+"Experimentalmodus zu erlauben."
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:204
+#, python-format
+msgid "Enter APN"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:241
+#, python-format
+msgid "Enter SSID"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:254
+#, python-format
+msgid "Enter new tethering password"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:237
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "Enter password"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:89
+#, python-format
+msgid "Enter your GitHub username"
+msgstr "Geben Sie Ihren GitHub‑Benutzernamen ein"
+
+#: /home/batman/openpilot/system/ui/widgets/list_view.py:115
+#: /home/batman/openpilot/system/ui/widgets/list_view.py:153
+#, python-format
+msgid "Error"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:52
+#, python-format
+msgid "Experimental Mode"
+msgstr "Experimentalmodus"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:181
+#, python-format
+msgid ""
+"Experimental mode is currently unavailable on this car since the car's stock "
+"ACC is used for longitudinal control."
+msgstr ""
+"Der Experimentalmodus ist derzeit auf diesem Fahrzeug nicht verfügbar, da "
+"der serienmäßige ACC für die Längsregelung verwendet wird."
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:373
+#, python-format
+msgid "FORGETTING..."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:44
+#, python-format
+msgid "Finish Setup"
+msgstr "Einrichtung abschließen"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:66
+#, python-format
+msgid "Firehose"
+msgstr "Firehose"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:18
+#, python-format
+msgid "Firehose Mode"
+msgstr "Firehose‑Modus"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:25
+#, python-format
+msgid ""
+"For maximum effectiveness, bring your device inside and connect to a good "
+"USB-C adapter and Wi-Fi weekly.\n"
+"\n"
+"Firehose Mode can also work while you're driving if connected to a hotspot "
+"or unlimited SIM card.\n"
+"\n"
+"\n"
+"Frequently Asked Questions\n"
+"\n"
+"Does it matter how or where I drive? Nope, just drive as you normally "
+"would.\n"
+"\n"
+"Do all of my segments get pulled in Firehose Mode? No, we selectively pull a "
+"subset of your segments.\n"
+"\n"
+"What's a good USB-C adapter? Any fast phone or laptop charger should be "
+"fine.\n"
+"\n"
+"Does it matter which software I run? Yes, only upstream openpilot (and "
+"particular forks) are able to be used for training."
+msgstr ""
+"Für maximale Wirksamkeit bringen Sie Ihr Gerät regelmäßig ins Haus und "
+"verbinden es wöchentlich mit einem guten USB‑C‑Adapter und WLAN.\n"
+"\n"
+"Der Firehose‑Modus kann auch während der Fahrt funktionieren, wenn eine "
+"Verbindung zu einem Hotspot oder einer unbegrenzten SIM besteht.\n"
+"\n"
+"\n"
+"Häufig gestellte Fragen\n"
+"\n"
+"Spielt es eine Rolle, wie oder wo ich fahre? Nein, fahren Sie einfach wie "
+"gewöhnlich.\n"
+"\n"
+"Werden alle meine Segmente im Firehose‑Modus abgeholt? Nein, wir ziehen "
+"selektiv eine Teilmenge Ihrer Segmente.\n"
+"\n"
+"Was ist ein guter USB‑C‑Adapter? Jeder schnelle Telefon‑ oder Laptoplader "
+"sollte ausreichen.\n"
+"\n"
+"Spielt es eine Rolle, welche Software ich verwende? Ja, nur "
+"Upstream‑openpilot (und bestimmte Forks) können für das Training verwendet "
+"werden."
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:318
+#: /home/batman/openpilot/system/ui/widgets/network.py:451
+#, python-format
+msgid "Forget"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:319
+#, python-format
+msgid "Forget Wi-Fi Network \"{}\"?"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:71
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:125
+#, python-format
+msgid "GOOD"
+msgstr "GUT"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:128
+#, python-format
+msgid "Go to https://connect.comma.ai on your phone"
+msgstr "Gehen Sie auf Ihrem Telefon zu https://connect.comma.ai"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:129
+#, python-format
+msgid "HIGH"
+msgstr "HOCH"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:155
+#, fuzzy, python-format
+msgid "Hidden Network"
+msgstr "Netzwerk"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:140
+#, python-format
+msgid "INACTIVE: connect to an unmetered network"
+msgstr "INAKTIV: Mit einem unlimitierten Netzwerk verbinden"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:52
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:131
+#, python-format
+msgid "INSTALL"
+msgstr "INSTALLIEREN"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:150
+#, python-format
+msgid "IP Address"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:52
+#, python-format
+msgid "Install Update"
+msgstr "Update installieren"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:56
+#, python-format
+msgid "Joystick Debug Mode"
+msgstr "Joystick‑Debugmodus"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:29
+#, python-format
+msgid "LOADING"
+msgstr "LADEN"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:48
+#, python-format
+msgid "LTE"
+msgstr "LTE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:64
+#, python-format
+msgid "Longitudinal Maneuver Mode"
+msgstr "Längsmanövermodus"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:148
+#, python-format
+msgid "MAX"
+msgstr "MAX"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:75
+#, python-format
+msgid ""
+"Maximize your training data uploads to improve openpilot's driving models."
+msgstr ""
+"Maximieren Sie Ihre Trainingsdaten‑Uploads, um die Fahrmodelle von openpilot "
+"zu verbessern."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:49
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:50
+#, python-format
+msgid "N/A"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:142
+#, python-format
+msgid "NO"
+msgstr "KEIN"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:63
+#, python-format
+msgid "Network"
+msgstr "Netzwerk"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:114
+#, python-format
+msgid "No SSH keys found"
+msgstr "Keine SSH‑Schlüssel gefunden"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:126
+#, fuzzy, python-format
+msgid "No SSH keys found for user '{}'"
+msgstr "Keine SSH‑Schlüssel für Benutzer '{username}' gefunden"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:18
+#, fuzzy, python-format
+msgid "No release notes available."
+msgstr "Keine Versionshinweise verfügbar."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:73
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:134
+#, python-format
+msgid "OFFLINE"
+msgstr "OFFLINE"
+
+#: /home/batman/openpilot/system/ui/widgets/html_render.py:247
+#: /home/batman/openpilot/system/ui/widgets/confirm_dialog.py:93
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:127
+#, python-format
+msgid "OK"
+msgstr "OK"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:72
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:136
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:144
+#, python-format
+msgid "ONLINE"
+msgstr "ONLINE"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:20
+#, python-format
+msgid "Open"
+msgstr "Öffnen"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:52
+#, python-format
+msgid "PAIR"
+msgstr "KOPPELN"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:142
+#, python-format
+msgid "PANDA"
+msgstr "PANDA"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:65
+#, python-format
+msgid "PREVIEW"
+msgstr "VORSCHAU"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:44
+#, python-format
+msgid "PRIME FEATURES:"
+msgstr "PRIME‑FUNKTIONEN:"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:52
+#, python-format
+msgid "Pair Device"
+msgstr "Gerät koppeln"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:19
+#, fuzzy, python-format
+msgid "Pair device"
+msgstr "Gerät koppeln"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:103
+#, python-format
+msgid "Pair your device to your comma account"
+msgstr "Koppeln Sie Ihr Gerät mit Ihrem comma‑Konto"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:48
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:25
+#, python-format
+msgid ""
+"Pair your device with comma connect (connect.comma.ai) and claim your comma "
+"prime offer."
+msgstr ""
+"Koppeln Sie Ihr Gerät mit comma connect (connect.comma.ai) und lösen Sie Ihr "
+"comma‑prime‑Angebot ein."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:91
+#, fuzzy, python-format
+msgid "Please connect to Wi-Fi to complete initial pairing"
+msgstr "Bitte mit WLAN verbinden, um das erste Koppeln abzuschließen"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:59
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:197
+#, python-format
+msgid "Power Off"
+msgstr "Ausschalten"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:144
+#, python-format
+msgid "Prevent large data uploads when on a metered Wi-Fi connection"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:135
+#, python-format
+msgid "Prevent large data uploads when on a metered cellular connection"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:26
+#, python-format
+msgid ""
+"Preview the driver facing camera to ensure that driver monitoring has good "
+"visibility. (vehicle must be off)"
+msgstr ""
+"Vorschau der Fahrer‑Kamera, um sicherzustellen, dass die Fahrerüberwachung "
+"gute Sicht hat. (Fahrzeug muss ausgeschaltet sein)"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:161
+#, python-format
+msgid "QR Code Error"
+msgstr "QR‑Code‑Fehler"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:31
+#, python-format
+msgid "REMOVE"
+msgstr "ENTFERNEN"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:55
+#, python-format
+msgid "RESET"
+msgstr "ZURÜCKSETZEN"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:67
+#, python-format
+msgid "REVIEW"
+msgstr "ANSEHEN"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:59
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:185
+#, python-format
+msgid "Reboot"
+msgstr "Neustart"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:66
+#, fuzzy, python-format
+msgid "Reboot Device"
+msgstr "Gerät neu starten"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:113
+#, python-format
+msgid "Reboot and Update"
+msgstr "Neustarten und aktualisieren"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:27
+#, python-format
+msgid ""
+"Receive alerts to steer back into the lane when your vehicle drifts over a "
+"detected lane line without a turn signal activated while driving over 31 mph "
+"(50 km/h)."
+msgstr ""
+"Erhalten Sie Warnungen, um zurück in die Spur zu lenken, wenn Ihr Fahrzeug "
+"ohne Blinker über eine erkannte Spurlinie driftet und über 31 mph (50 km/h) "
+"fährt."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:76
+#, python-format
+msgid "Record and Upload Driver Camera"
+msgstr "Fahrerkamera aufzeichnen und hochladen"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:82
+#, python-format
+msgid "Record and Upload Microphone Audio"
+msgstr "Mikrofonton aufzeichnen und hochladen"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:33
+#, python-format
+msgid ""
+"Record and store microphone audio while driving. The audio will be included "
+"in the dashcam video in comma connect."
+msgstr ""
+"Mikrofonton während der Fahrt aufzeichnen und speichern. Die Audiospur wird "
+"im Dashcam‑Video in comma connect enthalten sein."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:68
+#, python-format
+msgid "Regulatory"
+msgstr "Vorschriften"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Relaxed"
+msgstr "Entspannt"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "Remote access"
+msgstr "Fernzugriff"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "Remote snapshots"
+msgstr "Remote‑Schnappschüsse"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:123
+#, python-format
+msgid "Request timed out"
+msgstr "Zeitüberschreitung bei der Anfrage"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:129
+#, python-format
+msgid "Reset"
+msgstr "Zurücksetzen"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:55
+#, python-format
+msgid "Reset Calibration"
+msgstr "Kalibrierung zurücksetzen"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:67
+#, python-format
+msgid "Review Training Guide"
+msgstr "Trainingsanleitung ansehen"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:28
+#, python-format
+msgid "Review the rules, features, and limitations of openpilot"
+msgstr ""
+"Überprüfen Sie die Regeln, Funktionen und Einschränkungen von openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:53
+#, python-format
+msgid "SSH Keys"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:310
+#, python-format
+msgid "Scanning Wi-Fi networks..."
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/option_dialog.py:35
+#, python-format
+msgid "Select"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:100
+#, python-format
+msgid "Select a language"
+msgstr "Sprache auswählen"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:63
+#, python-format
+msgid "Serial"
+msgstr "Seriennummer"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:107
+#, python-format
+msgid "Snooze Update"
+msgstr "Update verschieben"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:65
+#, python-format
+msgid "Software"
+msgstr "Software"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Standard"
+msgstr "Standard"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:22
+#, python-format
+msgid ""
+"Standard is recommended. In aggressive mode, openpilot will follow lead cars "
+"closer and be more aggressive with the gas and brake. In relaxed mode "
+"openpilot will stay further away from lead cars. On supported cars, you can "
+"cycle through these personalities with your steering wheel distance button."
+msgstr ""
+"Standard wird empfohlen. Im aggressiven Modus folgt openpilot "
+"vorausfahrenden Fahrzeugen näher und ist beim Gasgeben und Bremsen "
+"aggressiver. Im entspannten Modus bleibt openpilot weiter entfernt. Bei "
+"unterstützten Fahrzeugen können Sie mit der Abstandstaste am Lenkrad "
+"zwischen diesen Profilen wechseln."
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:59
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:65
+#, python-format
+msgid "System Unresponsive"
+msgstr "System reagiert nicht"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:58
+#, python-format
+msgid "TAKE CONTROL IMMEDIATELY"
+msgstr "SOFORT DIE KONTROLLE ÜBERNEHMEN"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:71
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:125
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:127
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:129
+#, python-format
+msgid "TEMP"
+msgstr "TEMP"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:124
+#, python-format
+msgid "Tethering Password"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:64
+#, python-format
+msgid "Toggles"
+msgstr "Schalter"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:70
+#, python-format
+msgid "UNINSTALL"
+msgstr "DEINSTALLIEREN"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/home.py:155
+#, python-format
+msgid "UPDATE"
+msgstr "UPDATE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:158
+#, python-format
+msgid "Uninstall"
+msgstr "Deinstallieren"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:117
+#, python-format
+msgid "Unknown"
+msgstr "Unbekannt"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:47
+#, python-format
+msgid "Updates are only downloaded while the car is off."
+msgstr "Updates werden nur heruntergeladen, wenn das Auto aus ist."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:33
+#, python-format
+msgid "Upgrade Now"
+msgstr "Jetzt abonnieren"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:31
+#, python-format
+msgid ""
+"Upload data from the driver facing camera and help improve the driver "
+"monitoring algorithm."
+msgstr ""
+"Daten von der Fahrer‑Kamera hochladen und den Fahrerüberwachungs‑Algorithmus "
+"verbessern."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:88
+#, python-format
+msgid "Use Metric System"
+msgstr "Metersystem verwenden"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:17
+#, python-format
+msgid ""
+"Use the openpilot system for adaptive cruise control and lane keep driver "
+"assistance. Your attention is required at all times to use this feature."
+msgstr ""
+"Verwenden Sie openpilot für adaptive Geschwindigkeitsregelung und "
+"Spurhalteassistenz. Ihre Aufmerksamkeit ist jederzeit erforderlich, um diese "
+"Funktion zu nutzen."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:72
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:144
+#, python-format
+msgid "VEHICLE"
+msgstr "FAHRZEUG"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:68
+#, python-format
+msgid "VIEW"
+msgstr "ANSEHEN"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:52
+#, python-format
+msgid "Waiting to start"
+msgstr "Warten auf Start"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:19
+#, python-format
+msgid ""
+"Warning: This grants SSH access to all public keys in your GitHub settings. "
+"Never enter a GitHub username other than your own. A comma employee will "
+"NEVER ask you to add their GitHub username."
+msgstr ""
+"Warnung: Dies gewährt SSH‑Zugriff auf alle öffentlichen Schlüssel in Ihren "
+"GitHub‑Einstellungen. Geben Sie niemals einen anderen GitHub‑Benutzernamen "
+"als Ihren eigenen ein. Ein comma‑Mitarbeiter wird Sie NIEMALS bitten, seinen "
+"GitHub‑Benutzernamen hinzuzufügen."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:111
+#, python-format
+msgid "Welcome to openpilot"
+msgstr "Willkommen bei openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:20
+#, python-format
+msgid "When enabled, pressing the accelerator pedal will disengage openpilot."
+msgstr "Wenn aktiviert, deaktiviert das Drücken des Gaspedals openpilot."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:44
+#, python-format
+msgid "Wi-Fi"
+msgstr "WLAN"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:144
+#, python-format
+msgid "Wi-Fi Network Metered"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "Wrong password"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:145
+#, python-format
+msgid "You must accept the Terms and Conditions in order to use openpilot."
+msgstr ""
+"Sie müssen die Nutzungsbedingungen akzeptieren, um openpilot zu verwenden."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:112
+#, python-format
+msgid ""
+"You must accept the Terms and Conditions to use openpilot. Read the latest "
+"terms at https://comma.ai/terms before continuing."
+msgstr ""
+"Sie müssen die Nutzungsbedingungen akzeptieren, um openpilot zu verwenden. "
+"Lesen Sie die aktuellen Bedingungen unter https://comma.ai/terms, bevor Sie "
+"fortfahren."
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/driver_camera_dialog.py:34
+#, python-format
+msgid "camera starting"
+msgstr "Kamera startet"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:63
+#, python-format
+msgid "comma prime"
+msgstr "comma prime"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "default"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid "down"
+msgstr "unten"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:105
+#, python-format
+msgid "failed to check for update"
+msgstr "Überprüfung auf Updates fehlgeschlagen"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:237
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "for \"{}\""
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:177
+#, python-format
+msgid "km/h"
+msgstr "km/h"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:204
+#, python-format
+msgid "leave blank for automatic configuration"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:144
+#, python-format
+msgid "left"
+msgstr "links"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "metered"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:177
+#, python-format
+msgid "mph"
+msgstr "mph"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:19
+#, python-format
+msgid "never"
+msgstr "nie"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:30
+#, python-format
+msgid "now"
+msgstr "jetzt"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:71
+#, python-format
+msgid "openpilot Longitudinal Control (Alpha)"
+msgstr "openpilot Längsregelung (Alpha)"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:51
+#, fuzzy, python-format
+msgid "openpilot Unavailable"
+msgstr "openpilot nicht verfügbar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:158
+#, python-format
+msgid ""
+"openpilot defaults to driving in chill mode. Experimental mode enables alpha-"
+"level features that aren't ready for chill mode. Experimental features are "
+"listed below:
End-to-End Longitudinal Control
Let the driving "
+"model control the gas and brakes. openpilot will drive as it thinks a human "
+"would, including stopping for red lights and stop signs. Since the driving "
+"model decides the speed to drive, the set speed will only act as an upper "
+"bound. This is an alpha quality feature; mistakes should be expected."
+"
New Driving Visualization
The driving visualization will "
+"transition to the road-facing wide-angle camera at low speeds to better show "
+"some turns. The Experimental mode logo will also be shown in the top right "
+"corner."
+msgstr ""
+"openpilot fährt standardmäßig im Chill‑Modus. Der Experimentalmodus "
+"aktiviert Funktionen im Alpha‑Status, die für den Chill‑Modus noch nicht "
+"bereit sind. Die experimentellen Funktionen sind unten aufgeführt:"
+"
End-to‑End‑Längsregelung
Das Fahrmodell steuert Gas und "
+"Bremse. openpilot fährt so, wie es einen Menschen einschätzt, einschließlich "
+"Anhalten an roten Ampeln und Stoppschildern. Da das Modell die "
+"Geschwindigkeit bestimmt, dient die eingestellte Geschwindigkeit nur als "
+"Obergrenze. Dies ist eine Alpha‑Funktion; Fehler sind zu erwarten."
+"
Neue Fahrvisualisierung
Die Visualisierung wechselt bei "
+"niedriger Geschwindigkeit auf die nach vorn gerichtete Weitwinkelkamera, um "
+"manche Kurven besser zu zeigen. Das Experimentalmodus‑Logo wird außerdem "
+"oben rechts angezeigt."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:175
+#, fuzzy, python-format
+msgid ""
+"openpilot is continuously calibrating, resetting is rarely required. "
+"Resetting calibration will restart openpilot if the car is powered on."
+msgstr ""
+" Durch Ändern dieser Einstellung wird openpilot neu gestartet, wenn das Auto "
+"eingeschaltet ist."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:20
+#, python-format
+msgid ""
+"openpilot learns to drive by watching humans, like you, drive.\n"
+"\n"
+"Firehose Mode allows you to maximize your training data uploads to improve "
+"openpilot's driving models. More data means bigger models, which means "
+"better Experimental Mode."
+msgstr ""
+"openpilot lernt das Fahren, indem es Menschen wie Sie beobachtet.\n"
+"\n"
+"Der Firehose‑Modus ermöglicht es Ihnen, Ihre Trainingsdaten‑Uploads zu "
+"maximieren, um die Fahrmodelle von openpilot zu verbessern. Mehr Daten "
+"bedeuten größere Modelle – und damit einen besseren Experimentalmodus."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:183
+#, python-format
+msgid "openpilot longitudinal control may come in a future update."
+msgstr "Die openpilot‑Längsregelung könnte in einem zukünftigen Update kommen."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:27
+#, fuzzy, python-format
+msgid ""
+"openpilot requires the device to be mounted within 4° left or right and "
+"within 5° up or 9° down."
+msgstr ""
+"openpilot erfordert, dass das Gerät innerhalb von 4° nach links oder rechts "
+"und innerhalb von 5° nach oben oder 9° nach unten montiert ist."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:144
+#, python-format
+msgid "right"
+msgstr "rechts"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "unmetered"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid "up"
+msgstr "oben"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:116
+#, python-format
+msgid "up to date, last checked never"
+msgstr "Aktuell, zuletzt geprüft: nie"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:114
+#, python-format
+msgid "up to date, last checked {}"
+msgstr "Aktuell, zuletzt geprüft: {}"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:108
+#, python-format
+msgid "update available"
+msgstr "Update verfügbar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/home.py:169
+#, python-format
+msgid "{} ALERT"
+msgid_plural "{} ALERTS"
+msgstr[0] "{} WARNUNG"
+msgstr[1] "{} WARNUNGEN"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:39
+#, python-format
+msgid "{} day ago"
+msgid_plural "{} days ago"
+msgstr[0] "vor {} Tag"
+msgstr[1] "vor {} Tagen"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:36
+#, python-format
+msgid "{} hour ago"
+msgid_plural "{} hours ago"
+msgstr[0] "vor {} Stunde"
+msgstr[1] "vor {} Stunden"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:33
+#, python-format
+msgid "{} minute ago"
+msgid_plural "{} minutes ago"
+msgstr[0] "vor {} Minute"
+msgstr[1] "vor {} Minuten"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:111
+#, fuzzy, python-format
+msgid "{} segment of your driving is in the training dataset so far."
+msgid_plural "{} segments of your driving is in the training dataset so far."
+msgstr[0] "{} Segment Ihrer Fahrten ist bisher im Trainingsdatensatz."
+msgstr[1] "{} Segmente Ihrer Fahrten sind bisher im Trainingsdatensatz."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:62
+#, fuzzy, python-format
+msgid "✓ SUBSCRIBED"
+msgstr "✓ ABONNIERT"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:22
+#, fuzzy, python-format
+msgid "🔥 Firehose Mode 🔥"
+msgstr "Firehose‑Modus"
+
+#, fuzzy, python-format
+#~ msgid " Firehose Mode "
+#~ msgstr "Firehose‑Modus"
diff --git a/selfdrive/ui/translations/app_en.po b/selfdrive/ui/translations/app_en.po
new file mode 100644
index 00000000000000..2e37a6121dc1e8
--- /dev/null
+++ b/selfdrive/ui/translations/app_en.po
@@ -0,0 +1,1253 @@
+# English translations for PACKAGE package.
+# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Automatically generated, 2025.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-10-20 22:32-0700\n"
+"PO-Revision-Date: 2025-10-20 22:32-0700\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: en\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: /home/batman/openpilot/system/ui/widgets/html_render.py:247
+#: /home/batman/openpilot/system/ui/widgets/confirm_dialog.py:93
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:127
+#, python-format
+msgid "OK"
+msgstr "OK"
+
+#: /home/batman/openpilot/system/ui/widgets/confirm_dialog.py:23
+#: /home/batman/openpilot/system/ui/widgets/option_dialog.py:34
+#: /home/batman/openpilot/system/ui/widgets/keyboard.py:81
+#: /home/batman/openpilot/system/ui/widgets/network.py:318
+#, python-format
+msgid "Cancel"
+msgstr "Cancel"
+
+#: /home/batman/openpilot/system/ui/widgets/option_dialog.py:35
+#, python-format
+msgid "Select"
+msgstr "Select"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:74
+#: /home/batman/openpilot/system/ui/widgets/network.py:95
+#, python-format
+msgid "Advanced"
+msgstr "Advanced"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:99
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:147
+#, python-format
+msgid "Back"
+msgstr "Back"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:120
+#, python-format
+msgid "Enable Tethering"
+msgstr "Enable Tethering"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:123
+#: /home/batman/openpilot/system/ui/widgets/network.py:139
+#, python-format
+msgid "EDIT"
+msgstr "EDIT"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:124
+#, python-format
+msgid "Tethering Password"
+msgstr "Tethering Password"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:129
+#, python-format
+msgid "Enable Roaming"
+msgstr "Enable Roaming"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:134
+#, python-format
+msgid "Cellular Metered"
+msgstr "Cellular Metered"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:135
+#, python-format
+msgid "Prevent large data uploads when on a metered cellular connection"
+msgstr "Prevent large data uploads when on a metered cellular connection"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:139
+#, python-format
+msgid "APN Setting"
+msgstr "APN Setting"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "default"
+msgstr "default"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "metered"
+msgstr "metered"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "unmetered"
+msgstr "unmetered"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:144
+#, python-format
+msgid "Wi-Fi Network Metered"
+msgstr "Wi-Fi Network Metered"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:144
+#, python-format
+msgid "Prevent large data uploads when on a metered Wi-Fi connection"
+msgstr "Prevent large data uploads when on a metered Wi-Fi connection"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:150
+#, python-format
+msgid "IP Address"
+msgstr "IP Address"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:155
+#, python-format
+msgid "Hidden Network"
+msgstr "Hidden Network"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:155
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:73
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:134
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:136
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:138
+#, python-format
+msgid "CONNECT"
+msgstr "CONNECT"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:204
+#, python-format
+msgid "Enter APN"
+msgstr "Enter APN"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:204
+#, python-format
+msgid "leave blank for automatic configuration"
+msgstr "leave blank for automatic configuration"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:237
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "Enter password"
+msgstr "Enter password"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:237
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "for \"{}\""
+msgstr "for \"{}\""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:241
+#, python-format
+msgid "Enter SSID"
+msgstr "Enter SSID"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:254
+#, python-format
+msgid "Enter new tethering password"
+msgstr "Enter new tethering password"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:310
+#, python-format
+msgid "Scanning Wi-Fi networks..."
+msgstr "Scanning Wi-Fi networks..."
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "Wrong password"
+msgstr "Wrong password"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:318
+#: /home/batman/openpilot/system/ui/widgets/network.py:451
+#, python-format
+msgid "Forget"
+msgstr "Forget"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:319
+#, python-format
+msgid "Forget Wi-Fi Network \"{}\"?"
+msgstr "Forget Wi-Fi Network \"{}\"?"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:369
+#, python-format
+msgid "CONNECTING..."
+msgstr "CONNECTING..."
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:373
+#, python-format
+msgid "FORGETTING..."
+msgstr "FORGETTING..."
+
+#: /home/batman/openpilot/system/ui/widgets/list_view.py:115
+#: /home/batman/openpilot/system/ui/widgets/list_view.py:153
+#, python-format
+msgid "Error"
+msgstr "Error"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:103
+#, python-format
+msgid "Pair your device to your comma account"
+msgstr "Pair your device to your comma account"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:128
+#, python-format
+msgid "Go to https://connect.comma.ai on your phone"
+msgstr "Go to https://connect.comma.ai on your phone"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:129
+#, python-format
+msgid "Click \"add new device\" and scan the QR code on the right"
+msgstr "Click \"add new device\" and scan the QR code on the right"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:130
+#, python-format
+msgid "Bookmark connect.comma.ai to your home screen to use it like an app"
+msgstr "Bookmark connect.comma.ai to your home screen to use it like an app"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:161
+#, python-format
+msgid "QR Code Error"
+msgstr "QR Code Error"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:29
+#, python-format
+msgid "LOADING"
+msgstr "LOADING"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:30
+#, python-format
+msgid "ADD"
+msgstr "ADD"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:31
+#, python-format
+msgid "REMOVE"
+msgstr "REMOVE"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:89
+#, python-format
+msgid "Enter your GitHub username"
+msgstr "Enter your GitHub username"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:114
+#, python-format
+msgid "No SSH keys found"
+msgstr "No SSH keys found"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:123
+#, python-format
+msgid "Request timed out"
+msgstr "Request timed out"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:126
+#, python-format
+msgid "No SSH keys found for user '{}'"
+msgstr "No SSH keys found for user '{}'"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:33
+#, python-format
+msgid "Upgrade Now"
+msgstr "Upgrade Now"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:38
+#, python-format
+msgid "Become a comma prime member at connect.comma.ai"
+msgstr "Become a comma prime member at connect.comma.ai"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:44
+#, python-format
+msgid "PRIME FEATURES:"
+msgstr "PRIME FEATURES:"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "Remote access"
+msgstr "Remote access"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "24/7 LTE connectivity"
+msgstr "24/7 LTE connectivity"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "1 year of drive storage"
+msgstr "1 year of drive storage"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "Remote snapshots"
+msgstr "Remote snapshots"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:62
+#, python-format
+msgid "✓ SUBSCRIBED"
+msgstr "✓ SUBSCRIBED"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:63
+#, python-format
+msgid "comma prime"
+msgstr "comma prime"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/exp_mode_button.py:50
+#, python-format
+msgid "EXPERIMENTAL MODE ON"
+msgstr "EXPERIMENTAL MODE ON"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/exp_mode_button.py:50
+#, python-format
+msgid "CHILL MODE ON"
+msgstr "CHILL MODE ON"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:18
+#, python-format
+msgid "No release notes available."
+msgstr "No release notes available."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:105
+#, python-format
+msgid "Close"
+msgstr "Close"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:107
+#, python-format
+msgid "Snooze Update"
+msgstr "Snooze Update"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:110
+#, python-format
+msgid "Acknowledge Excessive Actuation"
+msgstr "Acknowledge Excessive Actuation"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:113
+#, python-format
+msgid "Reboot and Update"
+msgstr "Reboot and Update"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:19
+#, python-format
+msgid "Pair device"
+msgstr "Pair device"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:20
+#, python-format
+msgid "Open"
+msgstr "Open"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:22
+#, python-format
+msgid "🔥 Firehose Mode 🔥"
+msgstr "🔥 Firehose Mode 🔥"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:44
+#, python-format
+msgid "Finish Setup"
+msgstr "Finish Setup"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:48
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:25
+#, python-format
+msgid ""
+"Pair your device with comma connect (connect.comma.ai) and claim your comma "
+"prime offer."
+msgstr ""
+"Pair your device with comma connect (connect.comma.ai) and claim your comma "
+"prime offer."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:75
+#, python-format
+msgid ""
+"Maximize your training data uploads to improve openpilot's driving models."
+msgstr ""
+"Maximize your training data uploads to improve openpilot's driving models."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:91
+#, python-format
+msgid "Please connect to Wi-Fi to complete initial pairing"
+msgstr "Please connect to Wi-Fi to complete initial pairing"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/home.py:155
+#, python-format
+msgid "UPDATE"
+msgstr "UPDATE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/home.py:169
+#, python-format
+msgid "{} ALERT"
+msgid_plural "{} ALERTS"
+msgstr[0] "{} ALERT"
+msgstr[1] "{} ALERTS"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:43
+#, python-format
+msgid "--"
+msgstr "--"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:44
+#, python-format
+msgid "Wi-Fi"
+msgstr "Wi-Fi"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:45
+#, python-format
+msgid "ETH"
+msgstr "ETH"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:46
+#, python-format
+msgid "2G"
+msgstr "2G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:47
+#, python-format
+msgid "3G"
+msgstr "3G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:48
+#, python-format
+msgid "LTE"
+msgstr "LTE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:49
+#, python-format
+msgid "5G"
+msgstr "5G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:71
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:125
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:127
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:129
+#, python-format
+msgid "TEMP"
+msgstr "TEMP"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:71
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:125
+#, python-format
+msgid "GOOD"
+msgstr "GOOD"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:72
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:144
+#, python-format
+msgid "VEHICLE"
+msgstr "VEHICLE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:72
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:136
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:144
+#, python-format
+msgid "ONLINE"
+msgstr "ONLINE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:73
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:134
+#, python-format
+msgid "OFFLINE"
+msgstr "OFFLINE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:117
+#, python-format
+msgid "Unknown"
+msgstr "Unknown"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:129
+#, python-format
+msgid "HIGH"
+msgstr "HIGH"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:138
+#, python-format
+msgid "ERROR"
+msgstr "ERROR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:142
+#, python-format
+msgid "NO"
+msgstr "NO"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:142
+#, python-format
+msgid "PANDA"
+msgstr "PANDA"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:111
+#, python-format
+msgid "Welcome to openpilot"
+msgstr "Welcome to openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:112
+#, python-format
+msgid ""
+"You must accept the Terms and Conditions to use openpilot. Read the latest "
+"terms at https://comma.ai/terms before continuing."
+msgstr ""
+"You must accept the Terms and Conditions to use openpilot. Read the latest "
+"terms at https://comma.ai/terms before continuing."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:115
+#, python-format
+msgid "Decline"
+msgstr "Decline"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:116
+#, python-format
+msgid "Agree"
+msgstr "Agree"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:145
+#, python-format
+msgid "You must accept the Terms and Conditions in order to use openpilot."
+msgstr "You must accept the Terms and Conditions in order to use openpilot."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:148
+#, python-format
+msgid "Decline, uninstall openpilot"
+msgstr "Decline, uninstall openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:18
+#, python-format
+msgid "Firehose Mode"
+msgstr "Firehose Mode"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:20
+#, python-format
+msgid ""
+"openpilot learns to drive by watching humans, like you, drive.\n"
+"\n"
+"Firehose Mode allows you to maximize your training data uploads to improve "
+"openpilot's driving models. More data means bigger models, which means "
+"better Experimental Mode."
+msgstr ""
+"openpilot learns to drive by watching humans, like you, drive.\n"
+"\n"
+"Firehose Mode allows you to maximize your training data uploads to improve "
+"openpilot's driving models. More data means bigger models, which means "
+"better Experimental Mode."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:25
+#, python-format
+msgid ""
+"For maximum effectiveness, bring your device inside and connect to a good "
+"USB-C adapter and Wi-Fi weekly.\n"
+"\n"
+"Firehose Mode can also work while you're driving if connected to a hotspot "
+"or unlimited SIM card.\n"
+"\n"
+"\n"
+"Frequently Asked Questions\n"
+"\n"
+"Does it matter how or where I drive? Nope, just drive as you normally "
+"would.\n"
+"\n"
+"Do all of my segments get pulled in Firehose Mode? No, we selectively pull a "
+"subset of your segments.\n"
+"\n"
+"What's a good USB-C adapter? Any fast phone or laptop charger should be "
+"fine.\n"
+"\n"
+"Does it matter which software I run? Yes, only upstream openpilot (and "
+"particular forks) are able to be used for training."
+msgstr ""
+"For maximum effectiveness, bring your device inside and connect to a good "
+"USB-C adapter and Wi-Fi weekly.\n"
+"\n"
+"Firehose Mode can also work while you're driving if connected to a hotspot "
+"or unlimited SIM card.\n"
+"\n"
+"\n"
+"Frequently Asked Questions\n"
+"\n"
+"Does it matter how or where I drive? Nope, just drive as you normally "
+"would.\n"
+"\n"
+"Do all of my segments get pulled in Firehose Mode? No, we selectively pull a "
+"subset of your segments.\n"
+"\n"
+"What's a good USB-C adapter? Any fast phone or laptop charger should be "
+"fine.\n"
+"\n"
+"Does it matter which software I run? Yes, only upstream openpilot (and "
+"particular forks) are able to be used for training."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:111
+#, python-format
+msgid "{} segment of your driving is in the training dataset so far."
+msgid_plural "{} segments of your driving is in the training dataset so far."
+msgstr[0] "{} segment of your driving is in the training dataset so far."
+msgstr[1] "{} segments of your driving is in the training dataset so far."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:138
+#, python-format
+msgid "ACTIVE"
+msgstr "ACTIVE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:140
+#, python-format
+msgid "INACTIVE: connect to an unmetered network"
+msgstr "INACTIVE: connect to an unmetered network"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:15
+#, python-format
+msgid ""
+"ADB (Android Debug Bridge) allows connecting to your device over USB or over "
+"the network. See https://docs.comma.ai/how-to/connect-to-comma for more info."
+msgstr ""
+"ADB (Android Debug Bridge) allows connecting to your device over USB or over "
+"the network. See https://docs.comma.ai/how-to/connect-to-comma for more info."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:19
+#, python-format
+msgid ""
+"Warning: This grants SSH access to all public keys in your GitHub settings. "
+"Never enter a GitHub username other than your own. A comma employee will "
+"NEVER ask you to add their GitHub username."
+msgstr ""
+"Warning: This grants SSH access to all public keys in your GitHub settings. "
+"Never enter a GitHub username other than your own. A comma employee will "
+"NEVER ask you to add their GitHub username."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:23
+#, python-format
+msgid ""
+"WARNING: openpilot longitudinal control is in alpha for this car and will "
+"disable Automatic Emergency Braking (AEB).
On this car, openpilot "
+"defaults to the car's built-in ACC instead of openpilot's longitudinal "
+"control. Enable this to switch to openpilot longitudinal control. Enabling "
+"Experimental mode is recommended when enabling openpilot longitudinal "
+"control alpha. Changing this setting will restart openpilot if the car is "
+"powered on."
+msgstr ""
+"WARNING: openpilot longitudinal control is in alpha for this car and will "
+"disable Automatic Emergency Braking (AEB).
On this car, openpilot "
+"defaults to the car's built-in ACC instead of openpilot's longitudinal "
+"control. Enable this to switch to openpilot longitudinal control. Enabling "
+"Experimental mode is recommended when enabling openpilot longitudinal "
+"control alpha. Changing this setting will restart openpilot if the car is "
+"powered on."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:39
+#, python-format
+msgid "Enable ADB"
+msgstr "Enable ADB"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:48
+#, python-format
+msgid "Enable SSH"
+msgstr "Enable SSH"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:53
+#, python-format
+msgid "SSH Keys"
+msgstr "SSH Keys"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:56
+#, python-format
+msgid "Joystick Debug Mode"
+msgstr "Joystick Debug Mode"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:64
+#, python-format
+msgid "Longitudinal Maneuver Mode"
+msgstr "Longitudinal Maneuver Mode"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:71
+#, python-format
+msgid "openpilot Longitudinal Control (Alpha)"
+msgstr "openpilot Longitudinal Control (Alpha)"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:166
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:228
+#, python-format
+msgid "Enable"
+msgstr "Enable"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:19
+#, python-format
+msgid "never"
+msgstr "never"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:30
+#, python-format
+msgid "now"
+msgstr "now"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:33
+#, python-format
+msgid "{} minute ago"
+msgid_plural "{} minutes ago"
+msgstr[0] "{} minute ago"
+msgstr[1] "{} minutes ago"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:36
+#, python-format
+msgid "{} hour ago"
+msgid_plural "{} hours ago"
+msgstr[0] "{} hour ago"
+msgstr[1] "{} hours ago"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:39
+#, python-format
+msgid "{} day ago"
+msgid_plural "{} days ago"
+msgstr[0] "{} day ago"
+msgstr[1] "{} days ago"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:47
+#, python-format
+msgid "Updates are only downloaded while the car is off."
+msgstr "Updates are only downloaded while the car is off."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:48
+#, python-format
+msgid "Current Version"
+msgstr "Current Version"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:49
+#, python-format
+msgid "Download"
+msgstr "Download"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:49
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:106
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:117
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:142
+#, python-format
+msgid "CHECK"
+msgstr "CHECK"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:52
+#, python-format
+msgid "Install Update"
+msgstr "Install Update"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:52
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:131
+#, python-format
+msgid "INSTALL"
+msgstr "INSTALL"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:70
+#, python-format
+msgid "UNINSTALL"
+msgstr "UNINSTALL"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:105
+#, python-format
+msgid "failed to check for update"
+msgstr "failed to check for update"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:108
+#, python-format
+msgid "update available"
+msgstr "update available"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:109
+#, python-format
+msgid "DOWNLOAD"
+msgstr "DOWNLOAD"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:114
+#, python-format
+msgid "up to date, last checked {}"
+msgstr "up to date, last checked {}"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:116
+#, python-format
+msgid "up to date, last checked never"
+msgstr "up to date, last checked never"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:158
+#, python-format
+msgid "Are you sure you want to uninstall?"
+msgstr "Are you sure you want to uninstall?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:158
+#, python-format
+msgid "Uninstall"
+msgstr "Uninstall"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:26
+#, python-format
+msgid ""
+"Preview the driver facing camera to ensure that driver monitoring has good "
+"visibility. (vehicle must be off)"
+msgstr ""
+"Preview the driver facing camera to ensure that driver monitoring has good "
+"visibility. (vehicle must be off)"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:27
+#, python-format
+msgid ""
+"openpilot requires the device to be mounted within 4° left or right and "
+"within 5° up or 9° down."
+msgstr ""
+"openpilot requires the device to be mounted within 4° left or right and "
+"within 5° up or 9° down."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:28
+#, python-format
+msgid "Review the rules, features, and limitations of openpilot"
+msgstr "Review the rules, features, and limitations of openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:49
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:50
+#, python-format
+msgid "N/A"
+msgstr "N/A"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:52
+#, python-format
+msgid "Pair Device"
+msgstr "Pair Device"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:52
+#, python-format
+msgid "PAIR"
+msgstr "PAIR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:55
+#, python-format
+msgid "Reset Calibration"
+msgstr "Reset Calibration"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:55
+#, python-format
+msgid "RESET"
+msgstr "RESET"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:59
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:185
+#, python-format
+msgid "Reboot"
+msgstr "Reboot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:59
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:197
+#, python-format
+msgid "Power Off"
+msgstr "Power Off"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:62
+#, python-format
+msgid "Dongle ID"
+msgstr "Dongle ID"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:63
+#, python-format
+msgid "Serial"
+msgstr "Serial"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:65
+#, python-format
+msgid "Driver Camera"
+msgstr "Driver Camera"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:65
+#, python-format
+msgid "PREVIEW"
+msgstr "PREVIEW"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:67
+#, python-format
+msgid "Review Training Guide"
+msgstr "Review Training Guide"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:67
+#, python-format
+msgid "REVIEW"
+msgstr "REVIEW"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:68
+#, python-format
+msgid "Regulatory"
+msgstr "Regulatory"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:68
+#, python-format
+msgid "VIEW"
+msgstr "VIEW"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:69
+#, python-format
+msgid "Change Language"
+msgstr "Change Language"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:69
+#, python-format
+msgid "CHANGE"
+msgstr "CHANGE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:100
+#, python-format
+msgid "Select a language"
+msgstr "Select a language"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:113
+#, python-format
+msgid "Disengage to Reset Calibration"
+msgstr "Disengage to Reset Calibration"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:129
+#, python-format
+msgid "Are you sure you want to reset calibration?"
+msgstr "Are you sure you want to reset calibration?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:129
+#, python-format
+msgid "Reset"
+msgstr "Reset"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid " Your device is pointed {:.1f}° {} and {:.1f}° {}."
+msgstr " Your device is pointed {:.1f}° {} and {:.1f}° {}."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid "down"
+msgstr "down"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid "up"
+msgstr "up"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:144
+#, python-format
+msgid "left"
+msgstr "left"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:144
+#, python-format
+msgid "right"
+msgstr "right"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:156
+#, python-format
+msgid "
Steering lag calibration is {}% complete."
+msgstr "
Steering lag calibration is {}% complete."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:158
+#, python-format
+msgid "
Steering lag calibration is complete."
+msgstr "
Steering lag calibration is complete."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:168
+#, python-format
+msgid " Steering torque response calibration is {}% complete."
+msgstr " Steering torque response calibration is {}% complete."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:170
+#, python-format
+msgid " Steering torque response calibration is complete."
+msgstr " Steering torque response calibration is complete."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:175
+#, python-format
+msgid ""
+"openpilot is continuously calibrating, resetting is rarely required. "
+"Resetting calibration will restart openpilot if the car is powered on."
+msgstr ""
+"openpilot is continuously calibrating, resetting is rarely required. "
+"Resetting calibration will restart openpilot if the car is powered on."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:182
+#, python-format
+msgid "Disengage to Reboot"
+msgstr "Disengage to Reboot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:185
+#, python-format
+msgid "Are you sure you want to reboot?"
+msgstr "Are you sure you want to reboot?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:194
+#, python-format
+msgid "Disengage to Power Off"
+msgstr "Disengage to Power Off"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:197
+#, python-format
+msgid "Are you sure you want to power off?"
+msgstr "Are you sure you want to power off?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:62
+#, python-format
+msgid "Device"
+msgstr "Device"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:63
+#, python-format
+msgid "Network"
+msgstr "Network"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:64
+#, python-format
+msgid "Toggles"
+msgstr "Toggles"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:65
+#, python-format
+msgid "Software"
+msgstr "Software"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:66
+#, python-format
+msgid "Firehose"
+msgstr "Firehose"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:67
+#, python-format
+msgid "Developer"
+msgstr "Developer"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:17
+#, python-format
+msgid ""
+"Use the openpilot system for adaptive cruise control and lane keep driver "
+"assistance. Your attention is required at all times to use this feature."
+msgstr ""
+"Use the openpilot system for adaptive cruise control and lane keep driver "
+"assistance. Your attention is required at all times to use this feature."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:20
+#, python-format
+msgid "When enabled, pressing the accelerator pedal will disengage openpilot."
+msgstr "When enabled, pressing the accelerator pedal will disengage openpilot."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:22
+#, python-format
+msgid ""
+"Standard is recommended. In aggressive mode, openpilot will follow lead cars "
+"closer and be more aggressive with the gas and brake. In relaxed mode "
+"openpilot will stay further away from lead cars. On supported cars, you can "
+"cycle through these personalities with your steering wheel distance button."
+msgstr ""
+"Standard is recommended. In aggressive mode, openpilot will follow lead cars "
+"closer and be more aggressive with the gas and brake. In relaxed mode "
+"openpilot will stay further away from lead cars. On supported cars, you can "
+"cycle through these personalities with your steering wheel distance button."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:27
+#, python-format
+msgid ""
+"Receive alerts to steer back into the lane when your vehicle drifts over a "
+"detected lane line without a turn signal activated while driving over 31 mph "
+"(50 km/h)."
+msgstr ""
+"Receive alerts to steer back into the lane when your vehicle drifts over a "
+"detected lane line without a turn signal activated while driving over 31 mph "
+"(50 km/h)."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:30
+#, python-format
+msgid "Enable driver monitoring even when openpilot is not engaged."
+msgstr "Enable driver monitoring even when openpilot is not engaged."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:31
+#, python-format
+msgid ""
+"Upload data from the driver facing camera and help improve the driver "
+"monitoring algorithm."
+msgstr ""
+"Upload data from the driver facing camera and help improve the driver "
+"monitoring algorithm."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:32
+#, python-format
+msgid "Display speed in km/h instead of mph."
+msgstr "Display speed in km/h instead of mph."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:33
+#, python-format
+msgid ""
+"Record and store microphone audio while driving. The audio will be included "
+"in the dashcam video in comma connect."
+msgstr ""
+"Record and store microphone audio while driving. The audio will be included "
+"in the dashcam video in comma connect."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:46
+#, python-format
+msgid "Enable openpilot"
+msgstr "Enable openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:52
+#, python-format
+msgid "Experimental Mode"
+msgstr "Experimental Mode"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:58
+#, python-format
+msgid "Disengage on Accelerator Pedal"
+msgstr "Disengage on Accelerator Pedal"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:64
+#, python-format
+msgid "Enable Lane Departure Warnings"
+msgstr "Enable Lane Departure Warnings"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:70
+#, python-format
+msgid "Always-On Driver Monitoring"
+msgstr "Always-On Driver Monitoring"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:76
+#, python-format
+msgid "Record and Upload Driver Camera"
+msgstr "Record and Upload Driver Camera"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:82
+#, python-format
+msgid "Record and Upload Microphone Audio"
+msgstr "Record and Upload Microphone Audio"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:88
+#, python-format
+msgid "Use Metric System"
+msgstr "Use Metric System"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:96
+#, python-format
+msgid "Driving Personality"
+msgstr "Driving Personality"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Aggressive"
+msgstr "Aggressive"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Standard"
+msgstr "Standard"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Relaxed"
+msgstr "Relaxed"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:125
+#, python-format
+msgid "Changing this setting will restart openpilot if the car is powered on."
+msgstr "Changing this setting will restart openpilot if the car is powered on."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:158
+#, python-format
+msgid ""
+"openpilot defaults to driving in chill mode. Experimental mode enables alpha-"
+"level features that aren't ready for chill mode. Experimental features are "
+"listed below:
End-to-End Longitudinal Control
Let the driving "
+"model control the gas and brakes. openpilot will drive as it thinks a human "
+"would, including stopping for red lights and stop signs. Since the driving "
+"model decides the speed to drive, the set speed will only act as an upper "
+"bound. This is an alpha quality feature; mistakes should be expected."
+"
New Driving Visualization
The driving visualization will "
+"transition to the road-facing wide-angle camera at low speeds to better show "
+"some turns. The Experimental mode logo will also be shown in the top right "
+"corner."
+msgstr ""
+"openpilot defaults to driving in chill mode. Experimental mode enables alpha-"
+"level features that aren't ready for chill mode. Experimental features are "
+"listed below:
End-to-End Longitudinal Control
Let the driving "
+"model control the gas and brakes. openpilot will drive as it thinks a human "
+"would, including stopping for red lights and stop signs. Since the driving "
+"model decides the speed to drive, the set speed will only act as an upper "
+"bound. This is an alpha quality feature; mistakes should be expected."
+"
New Driving Visualization
The driving visualization will "
+"transition to the road-facing wide-angle camera at low speeds to better show "
+"some turns. The Experimental mode logo will also be shown in the top right "
+"corner."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:181
+#, python-format
+msgid ""
+"Experimental mode is currently unavailable on this car since the car's stock "
+"ACC is used for longitudinal control."
+msgstr ""
+"Experimental mode is currently unavailable on this car since the car's stock "
+"ACC is used for longitudinal control."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:183
+#, python-format
+msgid "openpilot longitudinal control may come in a future update."
+msgstr "openpilot longitudinal control may come in a future update."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:186
+#, python-format
+msgid ""
+"An alpha version of openpilot longitudinal control can be tested, along with "
+"Experimental mode, on non-release branches."
+msgstr ""
+"An alpha version of openpilot longitudinal control can be tested, along with "
+"Experimental mode, on non-release branches."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:189
+#, python-format
+msgid ""
+"Enable the openpilot longitudinal control (alpha) toggle to allow "
+"Experimental mode."
+msgstr ""
+"Enable the openpilot longitudinal control (alpha) toggle to allow "
+"Experimental mode."
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:148
+#, python-format
+msgid "MAX"
+msgstr "MAX"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:177
+#, python-format
+msgid "km/h"
+msgstr "km/h"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:177
+#, python-format
+msgid "mph"
+msgstr "mph"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/driver_camera_dialog.py:34
+#, python-format
+msgid "camera starting"
+msgstr "camera starting"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:51
+#, python-format
+msgid "openpilot Unavailable"
+msgstr "openpilot Unavailable"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:52
+#, python-format
+msgid "Waiting to start"
+msgstr "Waiting to start"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:58
+#, python-format
+msgid "TAKE CONTROL IMMEDIATELY"
+msgstr "TAKE CONTROL IMMEDIATELY"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:59
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:65
+#, python-format
+msgid "System Unresponsive"
+msgstr "System Unresponsive"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:66
+#, python-format
+msgid "Reboot Device"
+msgstr "Reboot Device"
diff --git a/selfdrive/ui/translations/app_es.po b/selfdrive/ui/translations/app_es.po
new file mode 100644
index 00000000000000..8617f4d4531edf
--- /dev/null
+++ b/selfdrive/ui/translations/app_es.po
@@ -0,0 +1,1275 @@
+# Spanish translations for PACKAGE package.
+# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Automatically generated, 2025.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-10-20 22:31-0700\n"
+"PO-Revision-Date: 2025-10-20 16:35-0700\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:170
+#, python-format
+msgid " Steering torque response calibration is complete."
+msgstr " La calibración de respuesta de par de dirección está completa."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:168
+#, python-format
+msgid " Steering torque response calibration is {}% complete."
+msgstr " La calibración de respuesta de par de dirección está {}% completa."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid " Your device is pointed {:.1f}° {} and {:.1f}° {}."
+msgstr " Tu dispositivo está orientado {:.1f}° {} y {:.1f}° {}."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:43
+#, python-format
+msgid "--"
+msgstr "--"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "1 year of drive storage"
+msgstr "1 año de almacenamiento de conducción"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "24/7 LTE connectivity"
+msgstr "Conectividad LTE 24/7"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:46
+#, python-format
+msgid "2G"
+msgstr "2G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:47
+#, python-format
+msgid "3G"
+msgstr "3G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:49
+#, python-format
+msgid "5G"
+msgstr "5G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:23
+#, fuzzy, python-format
+msgid ""
+"WARNING: openpilot longitudinal control is in alpha for this car and will "
+"disable Automatic Emergency Braking (AEB).
On this car, openpilot "
+"defaults to the car's built-in ACC instead of openpilot's longitudinal "
+"control. Enable this to switch to openpilot longitudinal control. Enabling "
+"Experimental mode is recommended when enabling openpilot longitudinal "
+"control alpha. Changing this setting will restart openpilot if the car is "
+"powered on."
+msgstr ""
+"ADVERTENCIA: el control longitudinal de openpilot está en alpha para este "
+"coche y deshabilitará el Frenado Automático de Emergencia (AEB)."
+"b>
En este coche, openpilot usa por defecto el ACC integrado del "
+"coche en lugar del control longitudinal de openpilot. Activa esto para "
+"cambiar al control longitudinal de openpilot. Se recomienda activar el modo "
+"Experimental al habilitar el control longitudinal de openpilot (alpha)."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:158
+#, python-format
+msgid "
Steering lag calibration is complete."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:156
+#, python-format
+msgid "
Steering lag calibration is {}% complete."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:138
+#, python-format
+msgid "ACTIVE"
+msgstr "ACTIVO"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:15
+#, python-format
+msgid ""
+"ADB (Android Debug Bridge) allows connecting to your device over USB or over "
+"the network. See https://docs.comma.ai/how-to/connect-to-comma for more info."
+msgstr ""
+"ADB (Android Debug Bridge) permite conectar tu dispositivo por USB o por la "
+"red. Consulta https://docs.comma.ai/how-to/connect-to-comma para más "
+"información."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:30
+#, python-format
+msgid "ADD"
+msgstr "AÑADIR"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:139
+#, python-format
+msgid "APN Setting"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:110
+#, python-format
+msgid "Acknowledge Excessive Actuation"
+msgstr "Reconocer actuación excesiva"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:74
+#: /home/batman/openpilot/system/ui/widgets/network.py:95
+#, python-format
+msgid "Advanced"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Aggressive"
+msgstr "Agresivo"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:116
+#, python-format
+msgid "Agree"
+msgstr "Aceptar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:70
+#, python-format
+msgid "Always-On Driver Monitoring"
+msgstr "Supervisión del conductor siempre activa"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:186
+#, python-format
+msgid ""
+"An alpha version of openpilot longitudinal control can be tested, along with "
+"Experimental mode, on non-release branches."
+msgstr ""
+"Se puede probar una versión alpha del control longitudinal de openpilot, "
+"junto con el modo Experimental, en ramas que no son de lanzamiento."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:197
+#, python-format
+msgid "Are you sure you want to power off?"
+msgstr "¿Seguro que quieres apagar?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:185
+#, python-format
+msgid "Are you sure you want to reboot?"
+msgstr "¿Seguro que quieres reiniciar?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:129
+#, python-format
+msgid "Are you sure you want to reset calibration?"
+msgstr "¿Seguro que quieres restablecer la calibración?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:158
+#, python-format
+msgid "Are you sure you want to uninstall?"
+msgstr "¿Seguro que quieres desinstalar?"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:99
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:147
+#, python-format
+msgid "Back"
+msgstr "Atrás"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:38
+#, python-format
+msgid "Become a comma prime member at connect.comma.ai"
+msgstr "Hazte miembro de comma prime en connect.comma.ai"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:130
+#, python-format
+msgid "Bookmark connect.comma.ai to your home screen to use it like an app"
+msgstr ""
+"Añade connect.comma.ai a tu pantalla de inicio para usarlo como una app"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:69
+#, python-format
+msgid "CHANGE"
+msgstr "CAMBIAR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:49
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:106
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:117
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:142
+#, python-format
+msgid "CHECK"
+msgstr "COMPROBAR"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/exp_mode_button.py:50
+#, python-format
+msgid "CHILL MODE ON"
+msgstr "MODO CHILL ACTIVADO"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:155
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:73
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:134
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:136
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:138
+#, python-format
+msgid "CONNECT"
+msgstr "CONECTAR"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:369
+#, fuzzy, python-format
+msgid "CONNECTING..."
+msgstr "CONECTAR"
+
+#: /home/batman/openpilot/system/ui/widgets/confirm_dialog.py:23
+#: /home/batman/openpilot/system/ui/widgets/option_dialog.py:34
+#: /home/batman/openpilot/system/ui/widgets/keyboard.py:81
+#: /home/batman/openpilot/system/ui/widgets/network.py:318
+#, python-format
+msgid "Cancel"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:134
+#, python-format
+msgid "Cellular Metered"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:69
+#, python-format
+msgid "Change Language"
+msgstr "Cambiar idioma"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:125
+#, fuzzy, python-format
+msgid "Changing this setting will restart openpilot if the car is powered on."
+msgstr ""
+" Cambiar esta configuración reiniciará openpilot si el coche está encendido."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:129
+#, python-format
+msgid "Click \"add new device\" and scan the QR code on the right"
+msgstr ""
+"Haz clic en \"añadir nuevo dispositivo\" y escanea el código QR de la derecha"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:105
+#, python-format
+msgid "Close"
+msgstr "Cerrar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:48
+#, python-format
+msgid "Current Version"
+msgstr "Versión actual"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:109
+#, python-format
+msgid "DOWNLOAD"
+msgstr "DESCARGAR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:115
+#, python-format
+msgid "Decline"
+msgstr "Rechazar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:148
+#, python-format
+msgid "Decline, uninstall openpilot"
+msgstr "Rechazar, desinstalar openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:67
+#, python-format
+msgid "Developer"
+msgstr "Desarrollador"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:62
+#, python-format
+msgid "Device"
+msgstr "Dispositivo"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:58
+#, python-format
+msgid "Disengage on Accelerator Pedal"
+msgstr "Desactivar con el pedal del acelerador"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:194
+#, python-format
+msgid "Disengage to Power Off"
+msgstr "Desactivar para apagar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:182
+#, python-format
+msgid "Disengage to Reboot"
+msgstr "Desactivar para reiniciar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:113
+#, python-format
+msgid "Disengage to Reset Calibration"
+msgstr "Desactivar para restablecer la calibración"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:32
+#, python-format
+msgid "Display speed in km/h instead of mph."
+msgstr "Mostrar la velocidad en km/h en lugar de mph."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:62
+#, python-format
+msgid "Dongle ID"
+msgstr "ID del dongle"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:49
+#, python-format
+msgid "Download"
+msgstr "Descargar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:65
+#, python-format
+msgid "Driver Camera"
+msgstr "Cámara del conductor"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:96
+#, python-format
+msgid "Driving Personality"
+msgstr "Estilo de conducción"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:123
+#: /home/batman/openpilot/system/ui/widgets/network.py:139
+#, python-format
+msgid "EDIT"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:138
+#, python-format
+msgid "ERROR"
+msgstr "ERROR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:45
+#, python-format
+msgid "ETH"
+msgstr "ETH"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/exp_mode_button.py:50
+#, python-format
+msgid "EXPERIMENTAL MODE ON"
+msgstr "MODO EXPERIMENTAL ACTIVADO"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:166
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:228
+#, python-format
+msgid "Enable"
+msgstr "Activar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:39
+#, python-format
+msgid "Enable ADB"
+msgstr "Activar ADB"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:64
+#, python-format
+msgid "Enable Lane Departure Warnings"
+msgstr "Activar advertencias de salida de carril"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:129
+#, fuzzy, python-format
+msgid "Enable Roaming"
+msgstr "Activar openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:48
+#, python-format
+msgid "Enable SSH"
+msgstr "Activar SSH"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:120
+#, fuzzy, python-format
+msgid "Enable Tethering"
+msgstr "Activar advertencias de salida de carril"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:30
+#, python-format
+msgid "Enable driver monitoring even when openpilot is not engaged."
+msgstr ""
+"Activar la supervisión del conductor incluso cuando openpilot no esté "
+"activado."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:46
+#, python-format
+msgid "Enable openpilot"
+msgstr "Activar openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:189
+#, python-format
+msgid ""
+"Enable the openpilot longitudinal control (alpha) toggle to allow "
+"Experimental mode."
+msgstr ""
+"Activa el interruptor de control longitudinal de openpilot (alpha) para "
+"permitir el modo Experimental."
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:204
+#, python-format
+msgid "Enter APN"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:241
+#, python-format
+msgid "Enter SSID"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:254
+#, python-format
+msgid "Enter new tethering password"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:237
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "Enter password"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:89
+#, python-format
+msgid "Enter your GitHub username"
+msgstr "Introduce tu nombre de usuario de GitHub"
+
+#: /home/batman/openpilot/system/ui/widgets/list_view.py:115
+#: /home/batman/openpilot/system/ui/widgets/list_view.py:153
+#, python-format
+msgid "Error"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:52
+#, python-format
+msgid "Experimental Mode"
+msgstr "Modo experimental"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:181
+#, python-format
+msgid ""
+"Experimental mode is currently unavailable on this car since the car's stock "
+"ACC is used for longitudinal control."
+msgstr ""
+"El modo experimental no está disponible actualmente en este coche, ya que se "
+"usa el ACC de fábrica para el control longitudinal."
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:373
+#, python-format
+msgid "FORGETTING..."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:44
+#, python-format
+msgid "Finish Setup"
+msgstr "Finalizar configuración"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:66
+#, python-format
+msgid "Firehose"
+msgstr "Firehose"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:18
+#, python-format
+msgid "Firehose Mode"
+msgstr "Modo Firehose"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:25
+#, python-format
+msgid ""
+"For maximum effectiveness, bring your device inside and connect to a good "
+"USB-C adapter and Wi-Fi weekly.\n"
+"\n"
+"Firehose Mode can also work while you're driving if connected to a hotspot "
+"or unlimited SIM card.\n"
+"\n"
+"\n"
+"Frequently Asked Questions\n"
+"\n"
+"Does it matter how or where I drive? Nope, just drive as you normally "
+"would.\n"
+"\n"
+"Do all of my segments get pulled in Firehose Mode? No, we selectively pull a "
+"subset of your segments.\n"
+"\n"
+"What's a good USB-C adapter? Any fast phone or laptop charger should be "
+"fine.\n"
+"\n"
+"Does it matter which software I run? Yes, only upstream openpilot (and "
+"particular forks) are able to be used for training."
+msgstr ""
+"Para la máxima efectividad, lleva tu dispositivo al interior y conéctalo "
+"semanalmente a un buen adaptador USB‑C y Wi‑Fi.\n"
+"\n"
+"El Modo Firehose también puede funcionar mientras conduces si está conectado "
+"a un hotspot o a una SIM ilimitada.\n"
+"\n"
+"\n"
+"Preguntas frecuentes\n"
+"\n"
+"¿Importa cómo o dónde conduzco? No, conduce como normalmente lo harías.\n"
+"\n"
+"¿Se suben todos mis segmentos en el Modo Firehose? No, seleccionamos un "
+"subconjunto de tus segmentos.\n"
+"\n"
+"¿Qué es un buen adaptador USB‑C? Cualquier cargador rápido de teléfono o "
+"laptop sirve.\n"
+"\n"
+"¿Importa qué software ejecuto? Sí, solo openpilot upstream (y forks "
+"particulares) pueden usarse para entrenamiento."
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:318
+#: /home/batman/openpilot/system/ui/widgets/network.py:451
+#, python-format
+msgid "Forget"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:319
+#, python-format
+msgid "Forget Wi-Fi Network \"{}\"?"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:71
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:125
+#, python-format
+msgid "GOOD"
+msgstr "BUENO"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:128
+#, python-format
+msgid "Go to https://connect.comma.ai on your phone"
+msgstr "Ve a https://connect.comma.ai en tu teléfono"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:129
+#, python-format
+msgid "HIGH"
+msgstr "ALTO"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:155
+#, fuzzy, python-format
+msgid "Hidden Network"
+msgstr "Red"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:140
+#, python-format
+msgid "INACTIVE: connect to an unmetered network"
+msgstr "INACTIVO: conéctate a una red sin límites"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:52
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:131
+#, python-format
+msgid "INSTALL"
+msgstr "INSTALAR"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:150
+#, python-format
+msgid "IP Address"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:52
+#, python-format
+msgid "Install Update"
+msgstr "Instalar actualización"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:56
+#, python-format
+msgid "Joystick Debug Mode"
+msgstr "Modo de depuración de joystick"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:29
+#, python-format
+msgid "LOADING"
+msgstr "CARGANDO"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:48
+#, python-format
+msgid "LTE"
+msgstr "LTE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:64
+#, python-format
+msgid "Longitudinal Maneuver Mode"
+msgstr "Modo de maniobra longitudinal"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:148
+#, python-format
+msgid "MAX"
+msgstr "MÁX"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:75
+#, python-format
+msgid ""
+"Maximize your training data uploads to improve openpilot's driving models."
+msgstr ""
+"Maximiza tus cargas de datos de entrenamiento para mejorar los modelos de "
+"conducción de openpilot."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:49
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:50
+#, python-format
+msgid "N/A"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:142
+#, python-format
+msgid "NO"
+msgstr "NO"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:63
+#, python-format
+msgid "Network"
+msgstr "Red"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:114
+#, python-format
+msgid "No SSH keys found"
+msgstr "No se encontraron claves SSH"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:126
+#, fuzzy, python-format
+msgid "No SSH keys found for user '{}'"
+msgstr "No se encontraron claves SSH para el usuario '{username}'"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:18
+#, fuzzy, python-format
+msgid "No release notes available."
+msgstr "No hay notas de versión disponibles."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:73
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:134
+#, python-format
+msgid "OFFLINE"
+msgstr "SIN CONEXIÓN"
+
+#: /home/batman/openpilot/system/ui/widgets/html_render.py:247
+#: /home/batman/openpilot/system/ui/widgets/confirm_dialog.py:93
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:127
+#, python-format
+msgid "OK"
+msgstr "OK"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:72
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:136
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:144
+#, python-format
+msgid "ONLINE"
+msgstr "EN LÍNEA"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:20
+#, python-format
+msgid "Open"
+msgstr "Abrir"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:52
+#, python-format
+msgid "PAIR"
+msgstr "EMPAREJAR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:142
+#, python-format
+msgid "PANDA"
+msgstr "PANDA"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:65
+#, python-format
+msgid "PREVIEW"
+msgstr "VISTA PREVIA"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:44
+#, python-format
+msgid "PRIME FEATURES:"
+msgstr "FUNCIONES PRIME:"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:52
+#, python-format
+msgid "Pair Device"
+msgstr "Emparejar dispositivo"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:19
+#, python-format
+msgid "Pair device"
+msgstr "Emparejar dispositivo"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:103
+#, python-format
+msgid "Pair your device to your comma account"
+msgstr "Empareja tu dispositivo con tu cuenta de comma"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:48
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:25
+#, python-format
+msgid ""
+"Pair your device with comma connect (connect.comma.ai) and claim your comma "
+"prime offer."
+msgstr ""
+"Empareja tu dispositivo con comma connect (connect.comma.ai) y reclama tu "
+"oferta de comma prime."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:91
+#, python-format
+msgid "Please connect to Wi-Fi to complete initial pairing"
+msgstr "Conéctate a Wi‑Fi para completar el emparejamiento inicial"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:59
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:197
+#, python-format
+msgid "Power Off"
+msgstr "Apagar"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:144
+#, python-format
+msgid "Prevent large data uploads when on a metered Wi-Fi connection"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:135
+#, python-format
+msgid "Prevent large data uploads when on a metered cellular connection"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:26
+#, python-format
+msgid ""
+"Preview the driver facing camera to ensure that driver monitoring has good "
+"visibility. (vehicle must be off)"
+msgstr ""
+"Previsualiza la cámara hacia el conductor para asegurarte de que la "
+"supervisión del conductor tenga buena visibilidad. (el vehículo debe estar "
+"apagado)"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:161
+#, python-format
+msgid "QR Code Error"
+msgstr "Error de código QR"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:31
+#, python-format
+msgid "REMOVE"
+msgstr "ELIMINAR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:55
+#, python-format
+msgid "RESET"
+msgstr "RESTABLECER"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:67
+#, python-format
+msgid "REVIEW"
+msgstr "REVISAR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:59
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:185
+#, python-format
+msgid "Reboot"
+msgstr "Reiniciar"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:66
+#, python-format
+msgid "Reboot Device"
+msgstr "Reiniciar dispositivo"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:113
+#, python-format
+msgid "Reboot and Update"
+msgstr "Reiniciar y actualizar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:27
+#, python-format
+msgid ""
+"Receive alerts to steer back into the lane when your vehicle drifts over a "
+"detected lane line without a turn signal activated while driving over 31 mph "
+"(50 km/h)."
+msgstr ""
+"Recibe alertas para volver al carril cuando tu vehículo se desvíe sobre una "
+"línea de carril detectada sin la direccional activada mientras conduces a "
+"más de 31 mph (50 km/h)."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:76
+#, python-format
+msgid "Record and Upload Driver Camera"
+msgstr "Grabar y subir cámara del conductor"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:82
+#, python-format
+msgid "Record and Upload Microphone Audio"
+msgstr "Grabar y subir audio del micrófono"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:33
+#, python-format
+msgid ""
+"Record and store microphone audio while driving. The audio will be included "
+"in the dashcam video in comma connect."
+msgstr ""
+"Grabar y almacenar audio del micrófono mientras conduces. El audio se "
+"incluirá en el video de la dashcam en comma connect."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:68
+#, python-format
+msgid "Regulatory"
+msgstr "Reglamentario"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Relaxed"
+msgstr "Relajado"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "Remote access"
+msgstr "Acceso remoto"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "Remote snapshots"
+msgstr "Capturas remotas"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:123
+#, python-format
+msgid "Request timed out"
+msgstr "Se agotó el tiempo de espera de la solicitud"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:129
+#, python-format
+msgid "Reset"
+msgstr "Restablecer"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:55
+#, python-format
+msgid "Reset Calibration"
+msgstr "Restablecer calibración"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:67
+#, python-format
+msgid "Review Training Guide"
+msgstr "Revisar guía de entrenamiento"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:28
+#, python-format
+msgid "Review the rules, features, and limitations of openpilot"
+msgstr "Revisa las reglas, funciones y limitaciones de openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:53
+#, python-format
+msgid "SSH Keys"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:310
+#, python-format
+msgid "Scanning Wi-Fi networks..."
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/option_dialog.py:35
+#, python-format
+msgid "Select"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:100
+#, python-format
+msgid "Select a language"
+msgstr "Selecciona un idioma"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:63
+#, python-format
+msgid "Serial"
+msgstr "Número de serie"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:107
+#, python-format
+msgid "Snooze Update"
+msgstr "Posponer actualización"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:65
+#, python-format
+msgid "Software"
+msgstr "Software"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Standard"
+msgstr "Estándar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:22
+#, python-format
+msgid ""
+"Standard is recommended. In aggressive mode, openpilot will follow lead cars "
+"closer and be more aggressive with the gas and brake. In relaxed mode "
+"openpilot will stay further away from lead cars. On supported cars, you can "
+"cycle through these personalities with your steering wheel distance button."
+msgstr ""
+"Se recomienda Estándar. En modo agresivo, openpilot seguirá más de cerca a "
+"los coches delanteros y será más agresivo con el acelerador y el freno. En "
+"modo relajado, openpilot se mantendrá más lejos de los coches delanteros. En "
+"coches compatibles, puedes cambiar entre estas personalidades con el botón "
+"de distancia del volante."
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:59
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:65
+#, python-format
+msgid "System Unresponsive"
+msgstr "Sistema sin respuesta"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:58
+#, python-format
+msgid "TAKE CONTROL IMMEDIATELY"
+msgstr "TOME EL CONTROL INMEDIATAMENTE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:71
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:125
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:127
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:129
+#, python-format
+msgid "TEMP"
+msgstr "TEMP"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:124
+#, python-format
+msgid "Tethering Password"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:64
+#, python-format
+msgid "Toggles"
+msgstr "Interruptores"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:70
+#, python-format
+msgid "UNINSTALL"
+msgstr "DESINSTALAR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/home.py:155
+#, python-format
+msgid "UPDATE"
+msgstr "ACTUALIZAR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:158
+#, python-format
+msgid "Uninstall"
+msgstr "Desinstalar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:117
+#, python-format
+msgid "Unknown"
+msgstr "Desconocido"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:47
+#, python-format
+msgid "Updates are only downloaded while the car is off."
+msgstr "Las actualizaciones solo se descargan cuando el coche está apagado."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:33
+#, python-format
+msgid "Upgrade Now"
+msgstr "Mejorar ahora"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:31
+#, python-format
+msgid ""
+"Upload data from the driver facing camera and help improve the driver "
+"monitoring algorithm."
+msgstr ""
+"Sube datos de la cámara orientada al conductor y ayuda a mejorar el "
+"algoritmo de supervisión del conductor."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:88
+#, python-format
+msgid "Use Metric System"
+msgstr "Usar sistema métrico"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:17
+#, python-format
+msgid ""
+"Use the openpilot system for adaptive cruise control and lane keep driver "
+"assistance. Your attention is required at all times to use this feature."
+msgstr ""
+"Usa el sistema openpilot para control de crucero adaptativo y asistencia de "
+"mantenimiento de carril. Tu atención se requiere en todo momento para usar "
+"esta función."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:72
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:144
+#, python-format
+msgid "VEHICLE"
+msgstr "VEHÍCULO"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:68
+#, python-format
+msgid "VIEW"
+msgstr "VER"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:52
+#, python-format
+msgid "Waiting to start"
+msgstr "Esperando para iniciar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:19
+#, python-format
+msgid ""
+"Warning: This grants SSH access to all public keys in your GitHub settings. "
+"Never enter a GitHub username other than your own. A comma employee will "
+"NEVER ask you to add their GitHub username."
+msgstr ""
+"Advertencia: Esto otorga acceso SSH a todas las claves públicas en tu "
+"configuración de GitHub. Nunca introduzcas un nombre de usuario de GitHub "
+"que no sea el tuyo. Un empleado de comma NUNCA te pedirá que agregues su "
+"nombre de usuario de GitHub."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:111
+#, python-format
+msgid "Welcome to openpilot"
+msgstr "Bienvenido a openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:20
+#, python-format
+msgid "When enabled, pressing the accelerator pedal will disengage openpilot."
+msgstr ""
+"Cuando está activado, al presionar el pedal del acelerador se desactivará "
+"openpilot."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:44
+#, python-format
+msgid "Wi-Fi"
+msgstr "Wi‑Fi"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:144
+#, python-format
+msgid "Wi-Fi Network Metered"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "Wrong password"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:145
+#, python-format
+msgid "You must accept the Terms and Conditions in order to use openpilot."
+msgstr "Debes aceptar los Términos y Condiciones para poder usar openpilot."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:112
+#, python-format
+msgid ""
+"You must accept the Terms and Conditions to use openpilot. Read the latest "
+"terms at https://comma.ai/terms before continuing."
+msgstr ""
+"Debes aceptar los Términos y Condiciones para usar openpilot. Lee los "
+"términos más recientes en https://comma.ai/terms antes de continuar."
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/driver_camera_dialog.py:34
+#, python-format
+msgid "camera starting"
+msgstr "iniciando cámara"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:63
+#, python-format
+msgid "comma prime"
+msgstr "comma prime"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "default"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid "down"
+msgstr "abajo"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:105
+#, python-format
+msgid "failed to check for update"
+msgstr "Error al buscar actualizaciones"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:237
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "for \"{}\""
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:177
+#, python-format
+msgid "km/h"
+msgstr "km/h"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:204
+#, python-format
+msgid "leave blank for automatic configuration"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:144
+#, python-format
+msgid "left"
+msgstr "izquierda"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "metered"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:177
+#, python-format
+msgid "mph"
+msgstr "mph"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:19
+#, python-format
+msgid "never"
+msgstr "nunca"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:30
+#, python-format
+msgid "now"
+msgstr "ahora"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:71
+#, python-format
+msgid "openpilot Longitudinal Control (Alpha)"
+msgstr "Control longitudinal de openpilot (Alpha)"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:51
+#, python-format
+msgid "openpilot Unavailable"
+msgstr "openpilot no disponible"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:158
+#, python-format
+msgid ""
+"openpilot defaults to driving in chill mode. Experimental mode enables alpha-"
+"level features that aren't ready for chill mode. Experimental features are "
+"listed below:
End-to-End Longitudinal Control
Let the driving "
+"model control the gas and brakes. openpilot will drive as it thinks a human "
+"would, including stopping for red lights and stop signs. Since the driving "
+"model decides the speed to drive, the set speed will only act as an upper "
+"bound. This is an alpha quality feature; mistakes should be expected."
+"
New Driving Visualization
The driving visualization will "
+"transition to the road-facing wide-angle camera at low speeds to better show "
+"some turns. The Experimental mode logo will also be shown in the top right "
+"corner."
+msgstr ""
+"openpilot conduce por defecto en modo chill. El modo Experimental habilita "
+"funciones de nivel alpha que no están listas para el modo chill. Las "
+"funciones experimentales se enumeran a continuación:
Control "
+"longitudinal de extremo a extremo
Deja que el modelo de conducción "
+"controle el acelerador y los frenos. openpilot conducirá como piensa que lo "
+"haría un humano, incluyendo detenerse en luces rojas y señales de alto. Dado "
+"que el modelo decide la velocidad a la que conducir, la velocidad "
+"establecida solo actuará como límite superior. Esta es una función de "
+"calidad alpha; se deben esperar errores.
Nueva visualización de "
+"conducción
La visualización de conducción hará la transición a la "
+"cámara gran angular orientada a la carretera a bajas velocidades para "
+"mostrar mejor algunos giros. El logotipo del modo Experimental también se "
+"mostrará en la esquina superior derecha."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:175
+#, fuzzy, python-format
+msgid ""
+"openpilot is continuously calibrating, resetting is rarely required. "
+"Resetting calibration will restart openpilot if the car is powered on."
+msgstr ""
+" Cambiar esta configuración reiniciará openpilot si el coche está encendido."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:20
+#, python-format
+msgid ""
+"openpilot learns to drive by watching humans, like you, drive.\n"
+"\n"
+"Firehose Mode allows you to maximize your training data uploads to improve "
+"openpilot's driving models. More data means bigger models, which means "
+"better Experimental Mode."
+msgstr ""
+"openpilot aprende a conducir observando a humanos, como tú, conducir.\n"
+"\n"
+"El Modo Firehose te permite maximizar tus cargas de datos de entrenamiento "
+"para mejorar los modelos de conducción de openpilot. Más datos significan "
+"modelos más grandes, lo que significa un mejor Modo Experimental."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:183
+#, python-format
+msgid "openpilot longitudinal control may come in a future update."
+msgstr ""
+"El control longitudinal de openpilot podría llegar en una actualización "
+"futura."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:27
+#, fuzzy, python-format
+msgid ""
+"openpilot requires the device to be mounted within 4° left or right and "
+"within 5° up or 9° down."
+msgstr ""
+"openpilot requiere que el dispositivo esté montado dentro de 4° a izquierda "
+"o derecha y dentro de 5° hacia arriba o 9° hacia abajo."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:144
+#, python-format
+msgid "right"
+msgstr "derecha"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "unmetered"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid "up"
+msgstr "arriba"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:116
+#, python-format
+msgid "up to date, last checked never"
+msgstr "actualizado, última comprobación: nunca"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:114
+#, python-format
+msgid "up to date, last checked {}"
+msgstr "actualizado, última comprobación: {}"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:108
+#, python-format
+msgid "update available"
+msgstr "actualización disponible"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/home.py:169
+#, python-format
+msgid "{} ALERT"
+msgid_plural "{} ALERTS"
+msgstr[0] "{} ALERTA"
+msgstr[1] "{} ALERTAS"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:39
+#, python-format
+msgid "{} day ago"
+msgid_plural "{} days ago"
+msgstr[0] "hace {} día"
+msgstr[1] "hace {} días"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:36
+#, python-format
+msgid "{} hour ago"
+msgid_plural "{} hours ago"
+msgstr[0] "hace {} hora"
+msgstr[1] "hace {} horas"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:33
+#, python-format
+msgid "{} minute ago"
+msgid_plural "{} minutes ago"
+msgstr[0] "hace {} minuto"
+msgstr[1] "hace {} minutos"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:111
+#, fuzzy, python-format
+msgid "{} segment of your driving is in the training dataset so far."
+msgid_plural "{} segments of your driving is in the training dataset so far."
+msgstr[0] ""
+"{} segmento de tu conducción está en el conjunto de entrenamiento hasta "
+"ahora."
+msgstr[1] ""
+"{} segmentos de tu conducción están en el conjunto de entrenamiento hasta "
+"ahora."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:62
+#, fuzzy, python-format
+msgid "✓ SUBSCRIBED"
+msgstr "✓ SUSCRITO"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:22
+#, python-format
+msgid "🔥 Firehose Mode 🔥"
+msgstr "🔥 Modo Firehose 🔥"
+
+#, fuzzy, python-format
+#~ msgid " Firehose Mode "
+#~ msgstr "Modo Firehose"
diff --git a/selfdrive/ui/translations/app_fr.po b/selfdrive/ui/translations/app_fr.po
new file mode 100644
index 00000000000000..5567a6494eb17f
--- /dev/null
+++ b/selfdrive/ui/translations/app_fr.po
@@ -0,0 +1,1276 @@
+# French translations for PACKAGE package.
+# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Automatically generated, 2025.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-10-20 22:31-0700\n"
+"PO-Revision-Date: 2025-10-20 18:19-0700\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:170
+#, python-format
+msgid " Steering torque response calibration is complete."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:168
+#, python-format
+msgid " Steering torque response calibration is {}% complete."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid " Your device is pointed {:.1f}° {} and {:.1f}° {}."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:43
+#, python-format
+msgid "--"
+msgstr "--"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "1 year of drive storage"
+msgstr "1 an de stockage de trajets"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "24/7 LTE connectivity"
+msgstr "Connexion LTE 24/7"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:46
+#, python-format
+msgid "2G"
+msgstr "2G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:47
+#, python-format
+msgid "3G"
+msgstr "3G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:49
+#, python-format
+msgid "5G"
+msgstr "5G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:23
+#, fuzzy, python-format
+msgid ""
+"WARNING: openpilot longitudinal control is in alpha for this car and will "
+"disable Automatic Emergency Braking (AEB).
On this car, openpilot "
+"defaults to the car's built-in ACC instead of openpilot's longitudinal "
+"control. Enable this to switch to openpilot longitudinal control. Enabling "
+"Experimental mode is recommended when enabling openpilot longitudinal "
+"control alpha. Changing this setting will restart openpilot if the car is "
+"powered on."
+msgstr ""
+"ATTENTION : le contrôle longitudinal openpilot est en alpha pour cette "
+"voiture et désactivera le freinage d'urgence automatique (AEB)."
+"b>
Sur cette voiture, openpilot utilise par défaut le régulateur de "
+"vitesse adaptatif intégré au véhicule plutôt que le contrôle longitudinal "
+"d'openpilot. Activez ceci pour passer au contrôle longitudinal openpilot. Il "
+"est recommandé d'activer le mode expérimental lors de l'activation du "
+"contrôle longitudinal openpilot alpha."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:158
+#, python-format
+msgid "
Steering lag calibration is complete."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:156
+#, python-format
+msgid "
Steering lag calibration is {}% complete."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:138
+#, python-format
+msgid "ACTIVE"
+msgstr "ACTIF"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:15
+#, python-format
+msgid ""
+"ADB (Android Debug Bridge) allows connecting to your device over USB or over "
+"the network. See https://docs.comma.ai/how-to/connect-to-comma for more info."
+msgstr ""
+"ADB (Android Debug Bridge) permet de connecter votre appareil via USB ou via "
+"le réseau. Voir https://docs.comma.ai/how-to/connect-to-comma pour plus "
+"d'informations."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:30
+#, python-format
+msgid "ADD"
+msgstr "AJOUTER"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:139
+#, python-format
+msgid "APN Setting"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:110
+#, python-format
+msgid "Acknowledge Excessive Actuation"
+msgstr "Accuser réception d'actionnement excessif"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:74
+#: /home/batman/openpilot/system/ui/widgets/network.py:95
+#, python-format
+msgid "Advanced"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Aggressive"
+msgstr "Agressif"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:116
+#, python-format
+msgid "Agree"
+msgstr "Accepter"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:70
+#, python-format
+msgid "Always-On Driver Monitoring"
+msgstr "Surveillance continue du conducteur"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:186
+#, python-format
+msgid ""
+"An alpha version of openpilot longitudinal control can be tested, along with "
+"Experimental mode, on non-release branches."
+msgstr ""
+"Une version alpha du contrôle longitudinal openpilot peut être testée, avec "
+"le mode expérimental, sur des branches non publiées."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:197
+#, python-format
+msgid "Are you sure you want to power off?"
+msgstr "Êtes-vous sûr de vouloir éteindre ?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:185
+#, python-format
+msgid "Are you sure you want to reboot?"
+msgstr "Êtes-vous sûr de vouloir redémarrer ?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:129
+#, python-format
+msgid "Are you sure you want to reset calibration?"
+msgstr "Êtes-vous sûr de vouloir réinitialiser la calibration ?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:158
+#, python-format
+msgid "Are you sure you want to uninstall?"
+msgstr "Êtes-vous sûr de vouloir désinstaller ?"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:99
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:147
+#, python-format
+msgid "Back"
+msgstr "Retour"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:38
+#, python-format
+msgid "Become a comma prime member at connect.comma.ai"
+msgstr "Devenez membre comma prime sur connect.comma.ai"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:130
+#, python-format
+msgid "Bookmark connect.comma.ai to your home screen to use it like an app"
+msgstr ""
+"Ajoutez connect.comma.ai à votre écran d'accueil pour l'utiliser comme une "
+"application"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:69
+#, python-format
+msgid "CHANGE"
+msgstr "CHANGER"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:49
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:106
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:117
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:142
+#, python-format
+msgid "CHECK"
+msgstr "VÉRIFIER"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/exp_mode_button.py:50
+#, python-format
+msgid "CHILL MODE ON"
+msgstr "MODE CHILL ACTIVÉ"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:155
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:73
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:134
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:136
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:138
+#, python-format
+msgid "CONNECT"
+msgstr "CONNECTER"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:369
+#, fuzzy, python-format
+msgid "CONNECTING..."
+msgstr "CONNECTER"
+
+#: /home/batman/openpilot/system/ui/widgets/confirm_dialog.py:23
+#: /home/batman/openpilot/system/ui/widgets/option_dialog.py:34
+#: /home/batman/openpilot/system/ui/widgets/keyboard.py:81
+#: /home/batman/openpilot/system/ui/widgets/network.py:318
+#, python-format
+msgid "Cancel"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:134
+#, python-format
+msgid "Cellular Metered"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:69
+#, python-format
+msgid "Change Language"
+msgstr "Changer la langue"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:125
+#, fuzzy, python-format
+msgid "Changing this setting will restart openpilot if the car is powered on."
+msgstr ""
+" La modification de ce réglage redémarrera openpilot si la voiture est sous "
+"tension."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:129
+#, python-format
+msgid "Click \"add new device\" and scan the QR code on the right"
+msgstr "Cliquez sur \"add new device\" et scannez le code QR à droite"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:105
+#, python-format
+msgid "Close"
+msgstr "Fermer"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:48
+#, python-format
+msgid "Current Version"
+msgstr "Version actuelle"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:109
+#, python-format
+msgid "DOWNLOAD"
+msgstr "TÉLÉCHARGER"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:115
+#, python-format
+msgid "Decline"
+msgstr "Refuser"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:148
+#, python-format
+msgid "Decline, uninstall openpilot"
+msgstr "Refuser, désinstaller openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:67
+#, python-format
+msgid "Developer"
+msgstr "Développeur"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:62
+#, python-format
+msgid "Device"
+msgstr "Appareil"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:58
+#, python-format
+msgid "Disengage on Accelerator Pedal"
+msgstr "Désengager à l'appui sur l'accélérateur"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:194
+#, python-format
+msgid "Disengage to Power Off"
+msgstr "Désengager pour éteindre"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:182
+#, python-format
+msgid "Disengage to Reboot"
+msgstr "Désengager pour redémarrer"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:113
+#, python-format
+msgid "Disengage to Reset Calibration"
+msgstr "Désengager pour réinitialiser la calibration"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:32
+#, python-format
+msgid "Display speed in km/h instead of mph."
+msgstr "Afficher la vitesse en km/h au lieu de mph."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:62
+#, python-format
+msgid "Dongle ID"
+msgstr "ID du dongle"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:49
+#, python-format
+msgid "Download"
+msgstr "Télécharger"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:65
+#, python-format
+msgid "Driver Camera"
+msgstr "Caméra conducteur"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:96
+#, python-format
+msgid "Driving Personality"
+msgstr "Personnalité de conduite"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:123
+#: /home/batman/openpilot/system/ui/widgets/network.py:139
+#, python-format
+msgid "EDIT"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:138
+#, python-format
+msgid "ERROR"
+msgstr "ERREUR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:45
+#, python-format
+msgid "ETH"
+msgstr "ETH"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/exp_mode_button.py:50
+#, python-format
+msgid "EXPERIMENTAL MODE ON"
+msgstr "MODE EXPÉRIMENTAL ACTIVÉ"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:166
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:228
+#, python-format
+msgid "Enable"
+msgstr "Activer"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:39
+#, python-format
+msgid "Enable ADB"
+msgstr "Activer ADB"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:64
+#, python-format
+msgid "Enable Lane Departure Warnings"
+msgstr "Activer les alertes de sortie de voie"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:129
+#, fuzzy, python-format
+msgid "Enable Roaming"
+msgstr "Activer openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:48
+#, python-format
+msgid "Enable SSH"
+msgstr "Activer SSH"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:120
+#, fuzzy, python-format
+msgid "Enable Tethering"
+msgstr "Activer les alertes de sortie de voie"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:30
+#, python-format
+msgid "Enable driver monitoring even when openpilot is not engaged."
+msgstr ""
+"Activer la surveillance du conducteur même lorsque openpilot n'est pas "
+"engagé."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:46
+#, python-format
+msgid "Enable openpilot"
+msgstr "Activer openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:189
+#, python-format
+msgid ""
+"Enable the openpilot longitudinal control (alpha) toggle to allow "
+"Experimental mode."
+msgstr ""
+"Activez l'option de contrôle longitudinal openpilot (alpha) pour autoriser "
+"le mode expérimental."
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:204
+#, python-format
+msgid "Enter APN"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:241
+#, python-format
+msgid "Enter SSID"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:254
+#, python-format
+msgid "Enter new tethering password"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:237
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "Enter password"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:89
+#, python-format
+msgid "Enter your GitHub username"
+msgstr "Entrez votre nom d'utilisateur GitHub"
+
+#: /home/batman/openpilot/system/ui/widgets/list_view.py:115
+#: /home/batman/openpilot/system/ui/widgets/list_view.py:153
+#, python-format
+msgid "Error"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:52
+#, python-format
+msgid "Experimental Mode"
+msgstr "Mode expérimental"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:181
+#, python-format
+msgid ""
+"Experimental mode is currently unavailable on this car since the car's stock "
+"ACC is used for longitudinal control."
+msgstr ""
+"Le mode expérimental est actuellement indisponible sur cette voiture car "
+"l'ACC d'origine est utilisé pour le contrôle longitudinal."
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:373
+#, python-format
+msgid "FORGETTING..."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:44
+#, python-format
+msgid "Finish Setup"
+msgstr "Terminer la configuration"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:66
+#, python-format
+msgid "Firehose"
+msgstr "Firehose"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:18
+#, python-format
+msgid "Firehose Mode"
+msgstr "Mode Firehose"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:25
+#, python-format
+msgid ""
+"For maximum effectiveness, bring your device inside and connect to a good "
+"USB-C adapter and Wi-Fi weekly.\n"
+"\n"
+"Firehose Mode can also work while you're driving if connected to a hotspot "
+"or unlimited SIM card.\n"
+"\n"
+"\n"
+"Frequently Asked Questions\n"
+"\n"
+"Does it matter how or where I drive? Nope, just drive as you normally "
+"would.\n"
+"\n"
+"Do all of my segments get pulled in Firehose Mode? No, we selectively pull a "
+"subset of your segments.\n"
+"\n"
+"What's a good USB-C adapter? Any fast phone or laptop charger should be "
+"fine.\n"
+"\n"
+"Does it matter which software I run? Yes, only upstream openpilot (and "
+"particular forks) are able to be used for training."
+msgstr ""
+"Pour une efficacité maximale, rentrez votre appareil et connectez-le chaque "
+"semaine à un bon adaptateur USB-C et au Wi‑Fi.\n"
+"\n"
+"Le Mode Firehose peut aussi fonctionner pendant que vous conduisez si vous "
+"êtes connecté à un hotspot ou à une carte SIM illimitée.\n"
+"\n"
+"\n"
+"Foire aux questions\n"
+"\n"
+"Est-ce que la manière ou l'endroit où je conduis compte ? Non, conduisez "
+"normalement.\n"
+"\n"
+"Tous mes segments sont-ils récupérés en Mode Firehose ? Non, nous récupérons "
+"de façon sélective un sous-ensemble de vos segments.\n"
+"\n"
+"Quel est un bon adaptateur USB-C ? Tout chargeur rapide de téléphone ou "
+"d'ordinateur portable convient.\n"
+"\n"
+"Le logiciel utilisé importe-t-il ? Oui, seul openpilot amont (et certains "
+"forks) peut être utilisé pour l'entraînement."
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:318
+#: /home/batman/openpilot/system/ui/widgets/network.py:451
+#, python-format
+msgid "Forget"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:319
+#, python-format
+msgid "Forget Wi-Fi Network \"{}\"?"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:71
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:125
+#, python-format
+msgid "GOOD"
+msgstr "BON"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:128
+#, python-format
+msgid "Go to https://connect.comma.ai on your phone"
+msgstr "Allez sur https://connect.comma.ai sur votre téléphone"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:129
+#, python-format
+msgid "HIGH"
+msgstr "ÉLEVÉ"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:155
+#, fuzzy, python-format
+msgid "Hidden Network"
+msgstr "Réseau"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:140
+#, python-format
+msgid "INACTIVE: connect to an unmetered network"
+msgstr "INACTIF : connectez-vous à un réseau non limité"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:52
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:131
+#, python-format
+msgid "INSTALL"
+msgstr "INSTALLER"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:150
+#, python-format
+msgid "IP Address"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:52
+#, python-format
+msgid "Install Update"
+msgstr "Installer la mise à jour"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:56
+#, python-format
+msgid "Joystick Debug Mode"
+msgstr "Mode débogage joystick"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:29
+#, python-format
+msgid "LOADING"
+msgstr "CHARGEMENT"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:48
+#, python-format
+msgid "LTE"
+msgstr "LTE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:64
+#, python-format
+msgid "Longitudinal Maneuver Mode"
+msgstr "Mode de manœuvre longitudinale"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:148
+#, python-format
+msgid "MAX"
+msgstr "MAX"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:75
+#, python-format
+msgid ""
+"Maximize your training data uploads to improve openpilot's driving models."
+msgstr ""
+"Maximisez vos envois de données d'entraînement pour améliorer les modèles de "
+"conduite d'openpilot."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:49
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:50
+#, python-format
+msgid "N/A"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:142
+#, python-format
+msgid "NO"
+msgstr "NON"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:63
+#, python-format
+msgid "Network"
+msgstr "Réseau"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:114
+#, python-format
+msgid "No SSH keys found"
+msgstr "Aucune clé SSH trouvée"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:126
+#, fuzzy, python-format
+msgid "No SSH keys found for user '{}'"
+msgstr "Aucune clé SSH trouvée pour l'utilisateur '{username}'"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:18
+#, fuzzy, python-format
+msgid "No release notes available."
+msgstr "Aucune note de version disponible."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:73
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:134
+#, python-format
+msgid "OFFLINE"
+msgstr "HORS LIGNE"
+
+#: /home/batman/openpilot/system/ui/widgets/html_render.py:247
+#: /home/batman/openpilot/system/ui/widgets/confirm_dialog.py:93
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:127
+#, python-format
+msgid "OK"
+msgstr "OK"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:72
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:136
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:144
+#, python-format
+msgid "ONLINE"
+msgstr "EN LIGNE"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:20
+#, python-format
+msgid "Open"
+msgstr "Ouvrir"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:52
+#, python-format
+msgid "PAIR"
+msgstr "ASSOCIER"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:142
+#, python-format
+msgid "PANDA"
+msgstr "PANDA"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:65
+#, python-format
+msgid "PREVIEW"
+msgstr "APERÇU"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:44
+#, python-format
+msgid "PRIME FEATURES:"
+msgstr "FONCTIONNALITÉS PRIME :"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:52
+#, python-format
+msgid "Pair Device"
+msgstr "Associer l'appareil"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:19
+#, python-format
+msgid "Pair device"
+msgstr "Associer l'appareil"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:103
+#, python-format
+msgid "Pair your device to your comma account"
+msgstr "Associez votre appareil à votre compte comma"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:48
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:25
+#, python-format
+msgid ""
+"Pair your device with comma connect (connect.comma.ai) and claim your comma "
+"prime offer."
+msgstr ""
+"Associez votre appareil à comma connect (connect.comma.ai) et réclamez votre "
+"offre comma prime."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:91
+#, python-format
+msgid "Please connect to Wi-Fi to complete initial pairing"
+msgstr "Veuillez vous connecter au Wi‑Fi pour terminer l'association initiale"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:59
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:197
+#, python-format
+msgid "Power Off"
+msgstr "Éteindre"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:144
+#, python-format
+msgid "Prevent large data uploads when on a metered Wi-Fi connection"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:135
+#, python-format
+msgid "Prevent large data uploads when on a metered cellular connection"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:26
+#, python-format
+msgid ""
+"Preview the driver facing camera to ensure that driver monitoring has good "
+"visibility. (vehicle must be off)"
+msgstr ""
+"Prévisualisez la caméra orientée conducteur pour vous assurer que la "
+"surveillance du conducteur a une bonne visibilité. (le véhicule doit être "
+"éteint)"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:161
+#, python-format
+msgid "QR Code Error"
+msgstr "Erreur de code QR"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:31
+#, python-format
+msgid "REMOVE"
+msgstr "SUPPRIMER"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:55
+#, python-format
+msgid "RESET"
+msgstr "RÉINITIALISER"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:67
+#, python-format
+msgid "REVIEW"
+msgstr "CONSULTER"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:59
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:185
+#, python-format
+msgid "Reboot"
+msgstr "Redémarrer"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:66
+#, python-format
+msgid "Reboot Device"
+msgstr "Redémarrer l'appareil"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:113
+#, python-format
+msgid "Reboot and Update"
+msgstr "Redémarrer et mettre à jour"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:27
+#, python-format
+msgid ""
+"Receive alerts to steer back into the lane when your vehicle drifts over a "
+"detected lane line without a turn signal activated while driving over 31 mph "
+"(50 km/h)."
+msgstr ""
+"Recevez des alertes pour revenir dans la voie lorsque votre véhicule dépasse "
+"une ligne de voie détectée sans clignotant activé en roulant au-delà de 31 "
+"mph (50 km/h)."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:76
+#, python-format
+msgid "Record and Upload Driver Camera"
+msgstr "Enregistrer et téléverser la caméra conducteur"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:82
+#, python-format
+msgid "Record and Upload Microphone Audio"
+msgstr "Enregistrer et téléverser l'audio du microphone"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:33
+#, python-format
+msgid ""
+"Record and store microphone audio while driving. The audio will be included "
+"in the dashcam video in comma connect."
+msgstr ""
+"Enregistrer et stocker l'audio du microphone pendant la conduite. L'audio "
+"sera inclus dans la vidéo dashcam dans comma connect."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:68
+#, python-format
+msgid "Regulatory"
+msgstr "Réglementaire"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Relaxed"
+msgstr "Détendu"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "Remote access"
+msgstr "Accès à distance"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "Remote snapshots"
+msgstr "Captures à distance"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:123
+#, python-format
+msgid "Request timed out"
+msgstr "Délai de la requête dépassé"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:129
+#, python-format
+msgid "Reset"
+msgstr "Réinitialiser"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:55
+#, python-format
+msgid "Reset Calibration"
+msgstr "Réinitialiser la calibration"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:67
+#, python-format
+msgid "Review Training Guide"
+msgstr "Consulter le guide d'entraînement"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:28
+#, python-format
+msgid "Review the rules, features, and limitations of openpilot"
+msgstr "Consultez les règles, fonctionnalités et limitations d'openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:53
+#, python-format
+msgid "SSH Keys"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:310
+#, python-format
+msgid "Scanning Wi-Fi networks..."
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/option_dialog.py:35
+#, python-format
+msgid "Select"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:100
+#, python-format
+msgid "Select a language"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:63
+#, python-format
+msgid "Serial"
+msgstr "Numéro de série"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:107
+#, python-format
+msgid "Snooze Update"
+msgstr "Reporter la mise à jour"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:65
+#, python-format
+msgid "Software"
+msgstr "Logiciel"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Standard"
+msgstr "Standard"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:22
+#, python-format
+msgid ""
+"Standard is recommended. In aggressive mode, openpilot will follow lead cars "
+"closer and be more aggressive with the gas and brake. In relaxed mode "
+"openpilot will stay further away from lead cars. On supported cars, you can "
+"cycle through these personalities with your steering wheel distance button."
+msgstr ""
+"Le mode standard est recommandé. En mode agressif, openpilot suivra les "
+"véhicules de tête de plus près et sera plus agressif avec l'accélérateur et "
+"le frein. En mode détendu, openpilot restera plus éloigné des véhicules de "
+"tête. Sur les voitures compatibles, vous pouvez parcourir ces personnalités "
+"avec le bouton de distance du volant."
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:59
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:65
+#, python-format
+msgid "System Unresponsive"
+msgstr "Système non réactif"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:58
+#, python-format
+msgid "TAKE CONTROL IMMEDIATELY"
+msgstr "REPRENEZ IMMÉDIATEMENT LE CONTRÔLE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:71
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:125
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:127
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:129
+#, python-format
+msgid "TEMP"
+msgstr "TEMPÉRATURE"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:124
+#, python-format
+msgid "Tethering Password"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:64
+#, python-format
+msgid "Toggles"
+msgstr "Options"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:70
+#, python-format
+msgid "UNINSTALL"
+msgstr "DÉSINSTALLER"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/home.py:155
+#, python-format
+msgid "UPDATE"
+msgstr "METTRE À JOUR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:158
+#, python-format
+msgid "Uninstall"
+msgstr "Désinstaller"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:117
+#, python-format
+msgid "Unknown"
+msgstr "Inconnu"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:47
+#, python-format
+msgid "Updates are only downloaded while the car is off."
+msgstr ""
+"Les mises à jour ne sont téléchargées que lorsque la voiture est éteinte."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:33
+#, python-format
+msgid "Upgrade Now"
+msgstr "Mettre à niveau maintenant"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:31
+#, python-format
+msgid ""
+"Upload data from the driver facing camera and help improve the driver "
+"monitoring algorithm."
+msgstr ""
+"Téléverser les données de la caméra orientée conducteur et aider à améliorer "
+"l'algorithme de surveillance du conducteur."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:88
+#, python-format
+msgid "Use Metric System"
+msgstr "Utiliser le système métrique"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:17
+#, python-format
+msgid ""
+"Use the openpilot system for adaptive cruise control and lane keep driver "
+"assistance. Your attention is required at all times to use this feature."
+msgstr ""
+"Utilisez le système openpilot pour l'ACC et l'assistance au maintien de "
+"voie. Votre attention est requise en permanence pour utiliser cette "
+"fonctionnalité."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:72
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:144
+#, python-format
+msgid "VEHICLE"
+msgstr "VÉHICULE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:68
+#, python-format
+msgid "VIEW"
+msgstr "VOIR"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:52
+#, python-format
+msgid "Waiting to start"
+msgstr "En attente de démarrage"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:19
+#, python-format
+msgid ""
+"Warning: This grants SSH access to all public keys in your GitHub settings. "
+"Never enter a GitHub username other than your own. A comma employee will "
+"NEVER ask you to add their GitHub username."
+msgstr ""
+"Avertissement : Ceci accorde un accès SSH à toutes les clés publiques dans "
+"vos paramètres GitHub. N'entrez jamais un nom d'utilisateur GitHub autre que "
+"le vôtre. Un employé comma ne vous demandera JAMAIS d'ajouter son nom "
+"d'utilisateur GitHub."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:111
+#, python-format
+msgid "Welcome to openpilot"
+msgstr "Bienvenue sur openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:20
+#, python-format
+msgid "When enabled, pressing the accelerator pedal will disengage openpilot."
+msgstr ""
+"Lorsque activé, appuyer sur la pédale d'accélérateur désengagera openpilot."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:44
+#, python-format
+msgid "Wi-Fi"
+msgstr "Wi‑Fi"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:144
+#, python-format
+msgid "Wi-Fi Network Metered"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "Wrong password"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:145
+#, python-format
+msgid "You must accept the Terms and Conditions in order to use openpilot."
+msgstr "Vous devez accepter les conditions générales pour utiliser openpilot."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:112
+#, python-format
+msgid ""
+"You must accept the Terms and Conditions to use openpilot. Read the latest "
+"terms at https://comma.ai/terms before continuing."
+msgstr ""
+"Vous devez accepter les conditions générales pour utiliser openpilot. Lisez "
+"les dernières conditions sur https://comma.ai/terms avant de continuer."
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/driver_camera_dialog.py:34
+#, python-format
+msgid "camera starting"
+msgstr "démarrage de la caméra"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:63
+#, python-format
+msgid "comma prime"
+msgstr "comma prime"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "default"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid "down"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:105
+#, python-format
+msgid "failed to check for update"
+msgstr "échec de la vérification de mise à jour"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:237
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "for \"{}\""
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:177
+#, python-format
+msgid "km/h"
+msgstr "km/h"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:204
+#, python-format
+msgid "leave blank for automatic configuration"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:144
+#, python-format
+msgid "left"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "metered"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:177
+#, python-format
+msgid "mph"
+msgstr "mph"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:19
+#, python-format
+msgid "never"
+msgstr "jamais"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:30
+#, python-format
+msgid "now"
+msgstr "maintenant"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:71
+#, python-format
+msgid "openpilot Longitudinal Control (Alpha)"
+msgstr "Contrôle longitudinal openpilot (Alpha)"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:51
+#, python-format
+msgid "openpilot Unavailable"
+msgstr "openpilot indisponible"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:158
+#, python-format
+msgid ""
+"openpilot defaults to driving in chill mode. Experimental mode enables alpha-"
+"level features that aren't ready for chill mode. Experimental features are "
+"listed below:
End-to-End Longitudinal Control
Let the driving "
+"model control the gas and brakes. openpilot will drive as it thinks a human "
+"would, including stopping for red lights and stop signs. Since the driving "
+"model decides the speed to drive, the set speed will only act as an upper "
+"bound. This is an alpha quality feature; mistakes should be expected."
+"
New Driving Visualization
The driving visualization will "
+"transition to the road-facing wide-angle camera at low speeds to better show "
+"some turns. The Experimental mode logo will also be shown in the top right "
+"corner."
+msgstr ""
+"openpilot roule par défaut en mode chill. Le mode expérimental active des "
+"fonctionnalités de niveau alpha qui ne sont pas prêtes pour le mode chill. "
+"Les fonctionnalités expérimentales sont listées ci‑dessous:
Contrôle "
+"longitudinal de bout en bout
Laissez le modèle de conduite contrôler "
+"l'accélérateur et les freins. openpilot conduira comme il pense qu'un humain "
+"le ferait, y compris s'arrêter aux feux rouges et aux panneaux stop. Comme "
+"le modèle décide de la vitesse à adopter, la vitesse réglée n'agira que "
+"comme une limite supérieure. C'est une fonctionnalité de qualité alpha ; des "
+"erreurs sont à prévoir.
Nouvelle visualisation de conduite
La "
+"visualisation passera à la caméra grand angle orientée route à basse vitesse "
+"pour mieux montrer certains virages. Le logo du mode expérimental sera "
+"également affiché en haut à droite."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:175
+#, fuzzy, python-format
+msgid ""
+"openpilot is continuously calibrating, resetting is rarely required. "
+"Resetting calibration will restart openpilot if the car is powered on."
+msgstr ""
+" La modification de ce réglage redémarrera openpilot si la voiture est sous "
+"tension."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:20
+#, python-format
+msgid ""
+"openpilot learns to drive by watching humans, like you, drive.\n"
+"\n"
+"Firehose Mode allows you to maximize your training data uploads to improve "
+"openpilot's driving models. More data means bigger models, which means "
+"better Experimental Mode."
+msgstr ""
+"openpilot apprend à conduire en regardant des humains, comme vous, "
+"conduire.\n"
+"\n"
+"Le Mode Firehose vous permet de maximiser vos envois de données "
+"d'entraînement pour améliorer les modèles de conduite d'openpilot. Plus de "
+"données signifie des modèles plus grands, ce qui signifie un meilleur Mode "
+"expérimental."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:183
+#, python-format
+msgid "openpilot longitudinal control may come in a future update."
+msgstr ""
+"Le contrôle longitudinal openpilot pourra arriver dans une future mise à "
+"jour."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:27
+#, python-format
+msgid ""
+"openpilot requires the device to be mounted within 4° left or right and "
+"within 5° up or 9° down."
+msgstr ""
+"openpilot exige que l'appareil soit monté à moins de 4° à gauche ou à droite "
+"et à moins de 5° vers le haut ou 9° vers le bas."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:144
+#, python-format
+msgid "right"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "unmetered"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid "up"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:116
+#, python-format
+msgid "up to date, last checked never"
+msgstr "à jour, dernière vérification jamais"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:114
+#, python-format
+msgid "up to date, last checked {}"
+msgstr "à jour, dernière vérification {}"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:108
+#, python-format
+msgid "update available"
+msgstr "mise à jour disponible"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/home.py:169
+#, python-format
+msgid "{} ALERT"
+msgid_plural "{} ALERTS"
+msgstr[0] "{} ALERTE"
+msgstr[1] "{} ALERTES"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:39
+#, python-format
+msgid "{} day ago"
+msgid_plural "{} days ago"
+msgstr[0] "il y a {} jour"
+msgstr[1] "il y a {} jours"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:36
+#, python-format
+msgid "{} hour ago"
+msgid_plural "{} hours ago"
+msgstr[0] "il y a {} heure"
+msgstr[1] "il y a {} heures"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:33
+#, python-format
+msgid "{} minute ago"
+msgid_plural "{} minutes ago"
+msgstr[0] "il y a {} minute"
+msgstr[1] "il y a {} minutes"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:111
+#, fuzzy, python-format
+msgid "{} segment of your driving is in the training dataset so far."
+msgid_plural "{} segments of your driving is in the training dataset so far."
+msgstr[0] ""
+"{} segment de votre conduite est dans l'ensemble d'entraînement jusqu'à "
+"présent."
+msgstr[1] ""
+"{} segments de votre conduite sont dans l'ensemble d'entraînement jusqu'à "
+"présent."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:62
+#, python-format
+msgid "✓ SUBSCRIBED"
+msgstr "✓ ABONNÉ"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:22
+#, python-format
+msgid "🔥 Firehose Mode 🔥"
+msgstr "🔥 Mode Firehose 🔥"
diff --git a/selfdrive/ui/translations/app_pt-BR.po b/selfdrive/ui/translations/app_pt-BR.po
new file mode 100644
index 00000000000000..e7352c17ebb29f
--- /dev/null
+++ b/selfdrive/ui/translations/app_pt-BR.po
@@ -0,0 +1,1262 @@
+# Language pt-BR translations for PACKAGE package.
+# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Automatically generated, 2025.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-10-20 22:31-0700\n"
+"PO-Revision-Date: 2025-10-21 00:00-0700\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: pt-BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:170
+#, python-format
+msgid " Steering torque response calibration is complete."
+msgstr " A calibração da resposta de torque da direção foi concluída."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:168
+#, python-format
+msgid " Steering torque response calibration is {}% complete."
+msgstr " A calibração da resposta de torque da direção está {}% concluída."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid " Your device is pointed {:.1f}° {} and {:.1f}° {}."
+msgstr " Seu dispositivo está apontado {:.1f}° {} e {:.1f}° {}."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:43
+#, python-format
+msgid "--"
+msgstr "--"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "1 year of drive storage"
+msgstr "1 ano de armazenamento de condução"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "24/7 LTE connectivity"
+msgstr "Conectividade LTE 24/7"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:46
+#, python-format
+msgid "2G"
+msgstr "2G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:47
+#, python-format
+msgid "3G"
+msgstr "3G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:49
+#, python-format
+msgid "5G"
+msgstr "5G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:23
+#, fuzzy, python-format
+msgid ""
+"WARNING: openpilot longitudinal control is in alpha for this car and will "
+"disable Automatic Emergency Braking (AEB).
On this car, openpilot "
+"defaults to the car's built-in ACC instead of openpilot's longitudinal "
+"control. Enable this to switch to openpilot longitudinal control. Enabling "
+"Experimental mode is recommended when enabling openpilot longitudinal "
+"control alpha. Changing this setting will restart openpilot if the car is "
+"powered on."
+msgstr ""
+"AVISO: o controle longitudinal do openpilot está em alpha para este carro "
+"e desativará a Frenagem Automática de Emergência (AEB).
Neste "
+"carro, o openpilot usa por padrão o ACC integrado do carro em vez do "
+"controle longitudinal do openpilot. Ative isto para alternar para o controle "
+"longitudinal do openpilot. Recomenda-se ativar o Modo Experimental ao ativar "
+"o controle longitudinal do openpilot em alpha."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:158
+#, python-format
+msgid "
Steering lag calibration is complete."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:156
+#, python-format
+msgid "
Steering lag calibration is {}% complete."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:138
+#, python-format
+msgid "ACTIVE"
+msgstr "ATIVO"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:15
+#, python-format
+msgid ""
+"ADB (Android Debug Bridge) allows connecting to your device over USB or over "
+"the network. See https://docs.comma.ai/how-to/connect-to-comma for more info."
+msgstr ""
+"ADB (Android Debug Bridge) permite conectar ao seu dispositivo via USB ou "
+"pela rede. Veja https://docs.comma.ai/how-to/connect-to-comma para mais "
+"informações."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:30
+#, python-format
+msgid "ADD"
+msgstr "ADICIONAR"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:139
+#, python-format
+msgid "APN Setting"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:110
+#, python-format
+msgid "Acknowledge Excessive Actuation"
+msgstr "Reconhecer Atuação Excessiva"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:74
+#: /home/batman/openpilot/system/ui/widgets/network.py:95
+#, python-format
+msgid "Advanced"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Aggressive"
+msgstr "Agressivo"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:116
+#, python-format
+msgid "Agree"
+msgstr "Concordo"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:70
+#, python-format
+msgid "Always-On Driver Monitoring"
+msgstr "Monitoramento de Motorista Sempre Ativo"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:186
+#, python-format
+msgid ""
+"An alpha version of openpilot longitudinal control can be tested, along with "
+"Experimental mode, on non-release branches."
+msgstr ""
+"Uma versão alpha do controle longitudinal do openpilot pode ser testada, "
+"junto com o Modo Experimental, em ramificações fora de release."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:197
+#, python-format
+msgid "Are you sure you want to power off?"
+msgstr "Tem certeza de que deseja desligar?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:185
+#, python-format
+msgid "Are you sure you want to reboot?"
+msgstr "Tem certeza de que deseja reiniciar?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:129
+#, python-format
+msgid "Are you sure you want to reset calibration?"
+msgstr "Tem certeza de que deseja redefinir a calibração?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:158
+#, python-format
+msgid "Are you sure you want to uninstall?"
+msgstr "Tem certeza de que deseja desinstalar?"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:99
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:147
+#, python-format
+msgid "Back"
+msgstr "Voltar"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:38
+#, python-format
+msgid "Become a comma prime member at connect.comma.ai"
+msgstr "Torne-se membro comma prime em connect.comma.ai"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:130
+#, python-format
+msgid "Bookmark connect.comma.ai to your home screen to use it like an app"
+msgstr "Adicione connect.comma.ai à tela inicial para usá-lo como um app"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:69
+#, python-format
+msgid "CHANGE"
+msgstr "ALTERAR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:49
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:106
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:117
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:142
+#, python-format
+msgid "CHECK"
+msgstr "VERIFICAR"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/exp_mode_button.py:50
+#, python-format
+msgid "CHILL MODE ON"
+msgstr "MODO CHILL ATIVO"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:155
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:73
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:134
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:136
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:138
+#, python-format
+msgid "CONNECT"
+msgstr "CONECTAR"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:369
+#, fuzzy, python-format
+msgid "CONNECTING..."
+msgstr "CONECTAR"
+
+#: /home/batman/openpilot/system/ui/widgets/confirm_dialog.py:23
+#: /home/batman/openpilot/system/ui/widgets/option_dialog.py:34
+#: /home/batman/openpilot/system/ui/widgets/keyboard.py:81
+#: /home/batman/openpilot/system/ui/widgets/network.py:318
+#, python-format
+msgid "Cancel"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:134
+#, python-format
+msgid "Cellular Metered"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:69
+#, python-format
+msgid "Change Language"
+msgstr "Alterar Idioma"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:125
+#, fuzzy, python-format
+msgid "Changing this setting will restart openpilot if the car is powered on."
+msgstr ""
+" Alterar esta configuração reiniciará o openpilot se o carro estiver ligado."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:129
+#, python-format
+msgid "Click \"add new device\" and scan the QR code on the right"
+msgstr "Toque em \"adicionar novo dispositivo\" e escaneie o QR code à direita"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:105
+#, python-format
+msgid "Close"
+msgstr "Fechar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:48
+#, python-format
+msgid "Current Version"
+msgstr "Versão Atual"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:109
+#, python-format
+msgid "DOWNLOAD"
+msgstr "BAIXAR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:115
+#, python-format
+msgid "Decline"
+msgstr "Recusar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:148
+#, python-format
+msgid "Decline, uninstall openpilot"
+msgstr "Recusar, desinstalar o openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:67
+#, python-format
+msgid "Developer"
+msgstr "Desenvolvedor"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:62
+#, python-format
+msgid "Device"
+msgstr "Dispositivo"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:58
+#, python-format
+msgid "Disengage on Accelerator Pedal"
+msgstr "Desativar ao pressionar o acelerador"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:194
+#, python-format
+msgid "Disengage to Power Off"
+msgstr "Desativar para Desligar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:182
+#, python-format
+msgid "Disengage to Reboot"
+msgstr "Desativar para Reiniciar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:113
+#, python-format
+msgid "Disengage to Reset Calibration"
+msgstr "Desativar para Redefinir Calibração"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:32
+#, python-format
+msgid "Display speed in km/h instead of mph."
+msgstr "Exibir velocidade em km/h em vez de mph."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:62
+#, python-format
+msgid "Dongle ID"
+msgstr "ID do Dongle"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:49
+#, python-format
+msgid "Download"
+msgstr "Baixar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:65
+#, python-format
+msgid "Driver Camera"
+msgstr "Câmera do Motorista"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:96
+#, python-format
+msgid "Driving Personality"
+msgstr "Personalidade de Condução"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:123
+#: /home/batman/openpilot/system/ui/widgets/network.py:139
+#, python-format
+msgid "EDIT"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:138
+#, python-format
+msgid "ERROR"
+msgstr "ERRO"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:45
+#, python-format
+msgid "ETH"
+msgstr "ETH"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/exp_mode_button.py:50
+#, python-format
+msgid "EXPERIMENTAL MODE ON"
+msgstr "MODO EXPERIMENTAL ATIVO"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:166
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:228
+#, python-format
+msgid "Enable"
+msgstr "Ativar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:39
+#, python-format
+msgid "Enable ADB"
+msgstr "Ativar ADB"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:64
+#, python-format
+msgid "Enable Lane Departure Warnings"
+msgstr "Ativar alertas de saída de faixa"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:129
+#, fuzzy, python-format
+msgid "Enable Roaming"
+msgstr "Ativar openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:48
+#, python-format
+msgid "Enable SSH"
+msgstr "Ativar SSH"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:120
+#, fuzzy, python-format
+msgid "Enable Tethering"
+msgstr "Ativar alertas de saída de faixa"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:30
+#, python-format
+msgid "Enable driver monitoring even when openpilot is not engaged."
+msgstr ""
+"Ativar monitoramento do motorista mesmo quando o openpilot não está engajado."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:46
+#, python-format
+msgid "Enable openpilot"
+msgstr "Ativar openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:189
+#, python-format
+msgid ""
+"Enable the openpilot longitudinal control (alpha) toggle to allow "
+"Experimental mode."
+msgstr ""
+"Ative a opção de controle longitudinal do openpilot (alpha) para permitir o "
+"Modo Experimental."
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:204
+#, python-format
+msgid "Enter APN"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:241
+#, python-format
+msgid "Enter SSID"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:254
+#, python-format
+msgid "Enter new tethering password"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:237
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "Enter password"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:89
+#, python-format
+msgid "Enter your GitHub username"
+msgstr "Digite seu nome de usuário do GitHub"
+
+#: /home/batman/openpilot/system/ui/widgets/list_view.py:115
+#: /home/batman/openpilot/system/ui/widgets/list_view.py:153
+#, python-format
+msgid "Error"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:52
+#, python-format
+msgid "Experimental Mode"
+msgstr "Modo Experimental"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:181
+#, python-format
+msgid ""
+"Experimental mode is currently unavailable on this car since the car's stock "
+"ACC is used for longitudinal control."
+msgstr ""
+"O Modo Experimental está indisponível neste carro pois o ACC original do "
+"carro é usado para controle longitudinal."
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:373
+#, python-format
+msgid "FORGETTING..."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:44
+#, python-format
+msgid "Finish Setup"
+msgstr "Concluir Configuração"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:66
+#, python-format
+msgid "Firehose"
+msgstr "Firehose"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:18
+#, python-format
+msgid "Firehose Mode"
+msgstr "Modo Firehose"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:25
+#, python-format
+msgid ""
+"For maximum effectiveness, bring your device inside and connect to a good "
+"USB-C adapter and Wi-Fi weekly.\n"
+"\n"
+"Firehose Mode can also work while you're driving if connected to a hotspot "
+"or unlimited SIM card.\n"
+"\n"
+"\n"
+"Frequently Asked Questions\n"
+"\n"
+"Does it matter how or where I drive? Nope, just drive as you normally "
+"would.\n"
+"\n"
+"Do all of my segments get pulled in Firehose Mode? No, we selectively pull a "
+"subset of your segments.\n"
+"\n"
+"What's a good USB-C adapter? Any fast phone or laptop charger should be "
+"fine.\n"
+"\n"
+"Does it matter which software I run? Yes, only upstream openpilot (and "
+"particular forks) are able to be used for training."
+msgstr ""
+"Para máxima efetividade, leve seu dispositivo para dentro e conecte a um bom "
+"adaptador USB-C e Wi‑Fi semanalmente.\n"
+"\n"
+"O Modo Firehose também pode funcionar enquanto você dirige se estiver "
+"conectado a um hotspot ou a um SIM ilimitado.\n"
+"\n"
+"\n"
+"Perguntas Frequentes\n"
+"\n"
+"Importa como ou onde eu dirijo? Não, apenas dirija como normalmente.\n"
+"\n"
+"Todos os meus segmentos são puxados no Modo Firehose? Não, puxamos "
+"seletivamente um subconjunto dos seus segmentos.\n"
+"\n"
+"Qual é um bom adaptador USB‑C? Qualquer carregador rápido de telefone ou "
+"laptop serve.\n"
+"\n"
+"Importa qual software eu executo? Sim, apenas o openpilot upstream (e forks "
+"específicos) podem ser usados para treinamento."
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:318
+#: /home/batman/openpilot/system/ui/widgets/network.py:451
+#, python-format
+msgid "Forget"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:319
+#, python-format
+msgid "Forget Wi-Fi Network \"{}\"?"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:71
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:125
+#, python-format
+msgid "GOOD"
+msgstr "BOM"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:128
+#, python-format
+msgid "Go to https://connect.comma.ai on your phone"
+msgstr "Acesse https://connect.comma.ai no seu telefone"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:129
+#, python-format
+msgid "HIGH"
+msgstr "ALTO"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:155
+#, fuzzy, python-format
+msgid "Hidden Network"
+msgstr "Rede"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:140
+#, python-format
+msgid "INACTIVE: connect to an unmetered network"
+msgstr "INATIVO: conecte a uma rede sem franquia"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:52
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:131
+#, python-format
+msgid "INSTALL"
+msgstr "INSTALAR"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:150
+#, python-format
+msgid "IP Address"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:52
+#, python-format
+msgid "Install Update"
+msgstr "Instalar Atualização"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:56
+#, python-format
+msgid "Joystick Debug Mode"
+msgstr "Modo de Depuração do Joystick"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:29
+#, python-format
+msgid "LOADING"
+msgstr "CARREGANDO"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:48
+#, python-format
+msgid "LTE"
+msgstr "LTE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:64
+#, python-format
+msgid "Longitudinal Maneuver Mode"
+msgstr "Modo de Manobra Longitudinal"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:148
+#, python-format
+msgid "MAX"
+msgstr "MÁX"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:75
+#, python-format
+msgid ""
+"Maximize your training data uploads to improve openpilot's driving models."
+msgstr ""
+"Maximize seus envios de dados de treinamento para melhorar os modelos de "
+"condução do openpilot."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:49
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:50
+#, python-format
+msgid "N/A"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:142
+#, python-format
+msgid "NO"
+msgstr "NÃO"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:63
+#, python-format
+msgid "Network"
+msgstr "Rede"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:114
+#, python-format
+msgid "No SSH keys found"
+msgstr "Nenhuma chave SSH encontrada"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:126
+#, fuzzy, python-format
+msgid "No SSH keys found for user '{}'"
+msgstr "Nenhuma chave SSH encontrada para o usuário '{username}'"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:18
+#, fuzzy, python-format
+msgid "No release notes available."
+msgstr "Sem notas de versão disponíveis."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:73
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:134
+#, python-format
+msgid "OFFLINE"
+msgstr "OFFLINE"
+
+#: /home/batman/openpilot/system/ui/widgets/html_render.py:247
+#: /home/batman/openpilot/system/ui/widgets/confirm_dialog.py:93
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:127
+#, python-format
+msgid "OK"
+msgstr "OK"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:72
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:136
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:144
+#, python-format
+msgid "ONLINE"
+msgstr "ONLINE"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:20
+#, python-format
+msgid "Open"
+msgstr "Abrir"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:52
+#, python-format
+msgid "PAIR"
+msgstr "EMPARELHAR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:142
+#, python-format
+msgid "PANDA"
+msgstr "PANDA"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:65
+#, python-format
+msgid "PREVIEW"
+msgstr "PRÉVIA"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:44
+#, python-format
+msgid "PRIME FEATURES:"
+msgstr "RECURSOS PRIME:"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:52
+#, python-format
+msgid "Pair Device"
+msgstr "Emparelhar Dispositivo"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:19
+#, python-format
+msgid "Pair device"
+msgstr "Emparelhar dispositivo"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:103
+#, python-format
+msgid "Pair your device to your comma account"
+msgstr "Emparelhe seu dispositivo à sua conta comma"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:48
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:25
+#, python-format
+msgid ""
+"Pair your device with comma connect (connect.comma.ai) and claim your comma "
+"prime offer."
+msgstr ""
+"Emparelhe seu dispositivo com o comma connect (connect.comma.ai) e resgate "
+"sua oferta comma prime."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:91
+#, python-format
+msgid "Please connect to Wi-Fi to complete initial pairing"
+msgstr "Conecte-se ao Wi‑Fi para concluir o emparelhamento inicial"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:59
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:197
+#, python-format
+msgid "Power Off"
+msgstr "Desligar"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:144
+#, python-format
+msgid "Prevent large data uploads when on a metered Wi-Fi connection"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:135
+#, python-format
+msgid "Prevent large data uploads when on a metered cellular connection"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:26
+#, python-format
+msgid ""
+"Preview the driver facing camera to ensure that driver monitoring has good "
+"visibility. (vehicle must be off)"
+msgstr ""
+"Pré-visualize a câmera voltada para o motorista para garantir que o "
+"monitoramento do motorista tenha boa visibilidade. (veículo deve estar "
+"desligado)"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:161
+#, python-format
+msgid "QR Code Error"
+msgstr "Erro no QR Code"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:31
+#, python-format
+msgid "REMOVE"
+msgstr "REMOVER"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:55
+#, python-format
+msgid "RESET"
+msgstr "REDEFINIR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:67
+#, python-format
+msgid "REVIEW"
+msgstr "REVISAR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:59
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:185
+#, python-format
+msgid "Reboot"
+msgstr "Reiniciar"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:66
+#, python-format
+msgid "Reboot Device"
+msgstr "Reiniciar Dispositivo"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:113
+#, python-format
+msgid "Reboot and Update"
+msgstr "Reiniciar e Atualizar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:27
+#, python-format
+msgid ""
+"Receive alerts to steer back into the lane when your vehicle drifts over a "
+"detected lane line without a turn signal activated while driving over 31 mph "
+"(50 km/h)."
+msgstr ""
+"Receba alertas para voltar à faixa quando seu veículo cruzar uma linha de "
+"faixa detectada sem seta ativada ao dirigir acima de 31 mph (50 km/h)."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:76
+#, python-format
+msgid "Record and Upload Driver Camera"
+msgstr "Gravar e Enviar Câmera do Motorista"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:82
+#, python-format
+msgid "Record and Upload Microphone Audio"
+msgstr "Gravar e Enviar Áudio do Microfone"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:33
+#, python-format
+msgid ""
+"Record and store microphone audio while driving. The audio will be included "
+"in the dashcam video in comma connect."
+msgstr ""
+"Grave e armazene o áudio do microfone enquanto dirige. O áudio será incluído "
+"no vídeo da dashcam no comma connect."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:68
+#, python-format
+msgid "Regulatory"
+msgstr "Regulatório"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Relaxed"
+msgstr "Relaxado"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "Remote access"
+msgstr "Acesso remoto"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "Remote snapshots"
+msgstr "Capturas remotas"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:123
+#, python-format
+msgid "Request timed out"
+msgstr "Tempo da solicitação esgotado"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:129
+#, python-format
+msgid "Reset"
+msgstr "Redefinir"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:55
+#, python-format
+msgid "Reset Calibration"
+msgstr "Redefinir Calibração"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:67
+#, python-format
+msgid "Review Training Guide"
+msgstr "Revisar Guia de Treinamento"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:28
+#, python-format
+msgid "Review the rules, features, and limitations of openpilot"
+msgstr "Revise as regras, recursos e limitações do openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:53
+#, python-format
+msgid "SSH Keys"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:310
+#, python-format
+msgid "Scanning Wi-Fi networks..."
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/option_dialog.py:35
+#, python-format
+msgid "Select"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:100
+#, python-format
+msgid "Select a language"
+msgstr "Selecione um idioma"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:63
+#, python-format
+msgid "Serial"
+msgstr "Serial"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:107
+#, python-format
+msgid "Snooze Update"
+msgstr "Adiar Atualização"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:65
+#, python-format
+msgid "Software"
+msgstr "Software"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Standard"
+msgstr "Padrão"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:22
+#, python-format
+msgid ""
+"Standard is recommended. In aggressive mode, openpilot will follow lead cars "
+"closer and be more aggressive with the gas and brake. In relaxed mode "
+"openpilot will stay further away from lead cars. On supported cars, you can "
+"cycle through these personalities with your steering wheel distance button."
+msgstr ""
+"Padrão é recomendado. No modo agressivo, o openpilot seguirá veículos à "
+"frente mais de perto e será mais agressivo com acelerador e freio. No modo "
+"relaxado, o openpilot ficará mais longe dos veículos à frente. Em carros "
+"compatíveis, você pode alternar essas personalidades com o botão de "
+"distância do volante."
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:59
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:65
+#, python-format
+msgid "System Unresponsive"
+msgstr "Sistema sem resposta"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:58
+#, python-format
+msgid "TAKE CONTROL IMMEDIATELY"
+msgstr "ASSUMA O CONTROLE IMEDIATAMENTE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:71
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:125
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:127
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:129
+#, python-format
+msgid "TEMP"
+msgstr "TEMP"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:124
+#, python-format
+msgid "Tethering Password"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:64
+#, python-format
+msgid "Toggles"
+msgstr "Alternâncias"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:70
+#, python-format
+msgid "UNINSTALL"
+msgstr "DESINSTALAR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/home.py:155
+#, python-format
+msgid "UPDATE"
+msgstr "ATUALIZAR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:158
+#, python-format
+msgid "Uninstall"
+msgstr "Desinstalar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:117
+#, python-format
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:47
+#, python-format
+msgid "Updates are only downloaded while the car is off."
+msgstr "Atualizações são baixadas apenas com o carro desligado."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:33
+#, python-format
+msgid "Upgrade Now"
+msgstr "Atualizar Agora"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:31
+#, python-format
+msgid ""
+"Upload data from the driver facing camera and help improve the driver "
+"monitoring algorithm."
+msgstr ""
+"Envie dados da câmera voltada para o motorista e ajude a melhorar o "
+"algoritmo de monitoramento do motorista."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:88
+#, python-format
+msgid "Use Metric System"
+msgstr "Usar Sistema Métrico"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:17
+#, python-format
+msgid ""
+"Use the openpilot system for adaptive cruise control and lane keep driver "
+"assistance. Your attention is required at all times to use this feature."
+msgstr ""
+"Use o sistema openpilot para controle de cruzeiro adaptativo e assistência "
+"de permanência em faixa. Sua atenção é necessária o tempo todo para usar "
+"este recurso."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:72
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:144
+#, python-format
+msgid "VEHICLE"
+msgstr "VEÍCULO"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:68
+#, python-format
+msgid "VIEW"
+msgstr "VER"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:52
+#, python-format
+msgid "Waiting to start"
+msgstr "Aguardando para iniciar"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:19
+#, python-format
+msgid ""
+"Warning: This grants SSH access to all public keys in your GitHub settings. "
+"Never enter a GitHub username other than your own. A comma employee will "
+"NEVER ask you to add their GitHub username."
+msgstr ""
+"Aviso: Isso concede acesso SSH a todas as chaves públicas nas suas "
+"configurações do GitHub. Nunca informe um nome de usuário do GitHub que não "
+"seja o seu. Um funcionário da comma NUNCA pedirá para você adicionar o nome "
+"de usuário do GitHub dele."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:111
+#, python-format
+msgid "Welcome to openpilot"
+msgstr "Bem-vindo ao openpilot"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:20
+#, python-format
+msgid "When enabled, pressing the accelerator pedal will disengage openpilot."
+msgstr ""
+"Quando ativado, pressionar o pedal do acelerador desengajará o openpilot."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:44
+#, python-format
+msgid "Wi-Fi"
+msgstr "Wi‑Fi"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:144
+#, python-format
+msgid "Wi-Fi Network Metered"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "Wrong password"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:145
+#, python-format
+msgid "You must accept the Terms and Conditions in order to use openpilot."
+msgstr "Você deve aceitar os Termos e Condições para usar o openpilot."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:112
+#, python-format
+msgid ""
+"You must accept the Terms and Conditions to use openpilot. Read the latest "
+"terms at https://comma.ai/terms before continuing."
+msgstr ""
+"Você deve aceitar os Termos e Condições para usar o openpilot. Leia os "
+"termos mais recentes em https://comma.ai/terms antes de continuar."
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/driver_camera_dialog.py:34
+#, python-format
+msgid "camera starting"
+msgstr "câmera iniciando"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:63
+#, python-format
+msgid "comma prime"
+msgstr "comma prime"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "default"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid "down"
+msgstr "para baixo"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:105
+#, python-format
+msgid "failed to check for update"
+msgstr "falha ao verificar atualização"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:237
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "for \"{}\""
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:177
+#, python-format
+msgid "km/h"
+msgstr "km/h"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:204
+#, python-format
+msgid "leave blank for automatic configuration"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:144
+#, python-format
+msgid "left"
+msgstr "à esquerda"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "metered"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:177
+#, python-format
+msgid "mph"
+msgstr "mph"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:19
+#, python-format
+msgid "never"
+msgstr "nunca"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:30
+#, python-format
+msgid "now"
+msgstr "agora"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:71
+#, python-format
+msgid "openpilot Longitudinal Control (Alpha)"
+msgstr "Controle Longitudinal do openpilot (Alpha)"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:51
+#, python-format
+msgid "openpilot Unavailable"
+msgstr "openpilot Indisponível"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:158
+#, python-format
+msgid ""
+"openpilot defaults to driving in chill mode. Experimental mode enables alpha-"
+"level features that aren't ready for chill mode. Experimental features are "
+"listed below:
End-to-End Longitudinal Control
Let the driving "
+"model control the gas and brakes. openpilot will drive as it thinks a human "
+"would, including stopping for red lights and stop signs. Since the driving "
+"model decides the speed to drive, the set speed will only act as an upper "
+"bound. This is an alpha quality feature; mistakes should be expected."
+"
New Driving Visualization
The driving visualization will "
+"transition to the road-facing wide-angle camera at low speeds to better show "
+"some turns. The Experimental mode logo will also be shown in the top right "
+"corner."
+msgstr ""
+"o openpilot dirige por padrão no modo chill. O Modo Experimental habilita "
+"recursos em nível alpha que não estão prontos para o modo chill. Os recursos "
+"experimentais são listados abaixo:
Controle Longitudinal End-to-End"
+"h4>
Permita que o modelo de condução controle o acelerador e os freios. O "
+"openpilot dirigirá como acha que um humano faria, incluindo parar em sinais "
+"e semáforos vermelhos. Como o modelo decide a velocidade, a velocidade "
+"definida atuará apenas como limite superior. Este é um recurso de qualidade "
+"alpha; erros devem ser esperados.
Nova Visualização de Condução"
+"h4>
A visualização de condução mudará para a câmera grande-angular "
+"voltada para a estrada em baixas velocidades para mostrar melhor algumas "
+"curvas. O logotipo do Modo Experimental também será exibido no canto "
+"superior direito."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:175
+#, fuzzy, python-format
+msgid ""
+"openpilot is continuously calibrating, resetting is rarely required. "
+"Resetting calibration will restart openpilot if the car is powered on."
+msgstr ""
+" Alterar esta configuração reiniciará o openpilot se o carro estiver ligado."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:20
+#, python-format
+msgid ""
+"openpilot learns to drive by watching humans, like you, drive.\n"
+"\n"
+"Firehose Mode allows you to maximize your training data uploads to improve "
+"openpilot's driving models. More data means bigger models, which means "
+"better Experimental Mode."
+msgstr ""
+"o openpilot aprende a dirigir observando humanos, como você, dirigirem.\n"
+"\n"
+"O Modo Firehose permite maximizar seus envios de dados de treinamento para "
+"melhorar os modelos de condução do openpilot. Mais dados significam modelos "
+"maiores, o que significa um Modo Experimental melhor."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:183
+#, python-format
+msgid "openpilot longitudinal control may come in a future update."
+msgstr ""
+"o controle longitudinal do openpilot pode vir em uma atualização futura."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:27
+#, python-format
+msgid ""
+"openpilot requires the device to be mounted within 4° left or right and "
+"within 5° up or 9° down."
+msgstr ""
+"o openpilot requer que o dispositivo seja montado dentro de 4° para a "
+"esquerda ou direita e dentro de 5° para cima ou 9° para baixo."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:144
+#, python-format
+msgid "right"
+msgstr "à direita"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "unmetered"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid "up"
+msgstr "para cima"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:116
+#, python-format
+msgid "up to date, last checked never"
+msgstr "atualizado, última verificação: nunca"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:114
+#, python-format
+msgid "up to date, last checked {}"
+msgstr "atualizado, última verificação: {}"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:108
+#, python-format
+msgid "update available"
+msgstr "atualização disponível"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/home.py:169
+#, python-format
+msgid "{} ALERT"
+msgid_plural "{} ALERTS"
+msgstr[0] "{} ALERTA"
+msgstr[1] "{} ALERTAS"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:39
+#, python-format
+msgid "{} day ago"
+msgid_plural "{} days ago"
+msgstr[0] "{} dia atrás"
+msgstr[1] "{} dias atrás"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:36
+#, python-format
+msgid "{} hour ago"
+msgid_plural "{} hours ago"
+msgstr[0] "{} hora atrás"
+msgstr[1] "{} horas atrás"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:33
+#, python-format
+msgid "{} minute ago"
+msgid_plural "{} minutes ago"
+msgstr[0] "{} minuto atrás"
+msgstr[1] "{} minutos atrás"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:111
+#, fuzzy, python-format
+msgid "{} segment of your driving is in the training dataset so far."
+msgid_plural "{} segments of your driving is in the training dataset so far."
+msgstr[0] ""
+"{} segmento da sua condução está no conjunto de treinamento até agora."
+msgstr[1] ""
+"{} segmentos da sua condução estão no conjunto de treinamento até agora."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:62
+#, python-format
+msgid "✓ SUBSCRIBED"
+msgstr "✓ ASSINADO"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:22
+#, python-format
+msgid "🔥 Firehose Mode 🔥"
+msgstr "🔥 Modo Firehose 🔥"
diff --git a/selfdrive/ui/translations/app_tr.po b/selfdrive/ui/translations/app_tr.po
new file mode 100644
index 00000000000000..3e622a20a4fb80
--- /dev/null
+++ b/selfdrive/ui/translations/app_tr.po
@@ -0,0 +1,1256 @@
+# Turkish translations for PACKAGE package.
+# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Automatically generated, 2025.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-10-20 22:31-0700\n"
+"PO-Revision-Date: 2025-10-20 18:19-0700\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:170
+#, python-format
+msgid " Steering torque response calibration is complete."
+msgstr " Direksiyon tork tepkisi kalibrasyonu tamamlandı."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:168
+#, python-format
+msgid " Steering torque response calibration is {}% complete."
+msgstr " Direksiyon tork tepkisi kalibrasyonu {}% tamamlandı."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid " Your device is pointed {:.1f}° {} and {:.1f}° {}."
+msgstr " Cihazınız {:.1f}° {} ve {:.1f}° {} yönünde konumlandırılmış."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:43
+#, python-format
+msgid "--"
+msgstr "--"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "1 year of drive storage"
+msgstr "1 yıl sürüş depolaması"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "24/7 LTE connectivity"
+msgstr "7/24 LTE bağlantısı"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:46
+#, python-format
+msgid "2G"
+msgstr "2G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:47
+#, python-format
+msgid "3G"
+msgstr "3G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:49
+#, python-format
+msgid "5G"
+msgstr "5G"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:23
+#, fuzzy, python-format
+msgid ""
+"WARNING: openpilot longitudinal control is in alpha for this car and will "
+"disable Automatic Emergency Braking (AEB).
On this car, openpilot "
+"defaults to the car's built-in ACC instead of openpilot's longitudinal "
+"control. Enable this to switch to openpilot longitudinal control. Enabling "
+"Experimental mode is recommended when enabling openpilot longitudinal "
+"control alpha. Changing this setting will restart openpilot if the car is "
+"powered on."
+msgstr ""
+"UYARI: Bu araç için openpilot boylamsal kontrolü alfa aşamasındadır ve "
+"Otomatik Acil Frenlemeyi (AEB) devre dışı bırakacaktır.
Bu araçta "
+"openpilot, openpilot'un boylamsal kontrolü yerine aracın yerleşik ACC'sini "
+"varsayılan olarak kullanır. openpilot boylamsal kontrolüne geçmek için bunu "
+"etkinleştirin. openpilot boylamsal kontrol alfayı etkinleştirirken Deneysel "
+"modu etkinleştirmeniz önerilir."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:158
+#, python-format
+msgid "
Steering lag calibration is complete."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:156
+#, python-format
+msgid "
Steering lag calibration is {}% complete."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:138
+#, python-format
+msgid "ACTIVE"
+msgstr "AKTİF"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:15
+#, python-format
+msgid ""
+"ADB (Android Debug Bridge) allows connecting to your device over USB or over "
+"the network. See https://docs.comma.ai/how-to/connect-to-comma for more info."
+msgstr ""
+"ADB (Android Debug Bridge), cihazınıza USB veya ağ üzerinden bağlanmayı "
+"sağlar. Daha fazla bilgi için https://docs.comma.ai/how-to/connect-to-comma "
+"adresine bakın."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:30
+#, python-format
+msgid "ADD"
+msgstr "EKLE"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:139
+#, python-format
+msgid "APN Setting"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:110
+#, python-format
+msgid "Acknowledge Excessive Actuation"
+msgstr "Aşırı Müdahaleyi Onayla"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:74
+#: /home/batman/openpilot/system/ui/widgets/network.py:95
+#, python-format
+msgid "Advanced"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Aggressive"
+msgstr "Agresif"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:116
+#, python-format
+msgid "Agree"
+msgstr "Kabul et"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:70
+#, python-format
+msgid "Always-On Driver Monitoring"
+msgstr "Sürekli Sürücü İzleme"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:186
+#, python-format
+msgid ""
+"An alpha version of openpilot longitudinal control can be tested, along with "
+"Experimental mode, on non-release branches."
+msgstr ""
+"openpilot boylamsal kontrolünün alfa sürümü, Deneysel mod ile birlikte, "
+"yayın dışı dallarda test edilebilir."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:197
+#, python-format
+msgid "Are you sure you want to power off?"
+msgstr "Kapatmak istediğinizden emin misiniz?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:185
+#, python-format
+msgid "Are you sure you want to reboot?"
+msgstr "Yeniden başlatmak istediğinizden emin misiniz?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:129
+#, python-format
+msgid "Are you sure you want to reset calibration?"
+msgstr "Kalibrasyonu sıfırlamak istediğinizden emin misiniz?"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:158
+#, python-format
+msgid "Are you sure you want to uninstall?"
+msgstr "Kaldırmak istediğinizden emin misiniz?"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:99
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:147
+#, python-format
+msgid "Back"
+msgstr "Geri"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:38
+#, python-format
+msgid "Become a comma prime member at connect.comma.ai"
+msgstr "connect.comma.ai adresinde comma prime üyesi olun"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:130
+#, python-format
+msgid "Bookmark connect.comma.ai to your home screen to use it like an app"
+msgstr ""
+"connect.comma.ai'yi ana ekranınıza ekleyerek bir uygulama gibi kullanın"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:69
+#, python-format
+msgid "CHANGE"
+msgstr "DEĞİŞTİR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:49
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:106
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:117
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:142
+#, python-format
+msgid "CHECK"
+msgstr "KONTROL ET"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/exp_mode_button.py:50
+#, python-format
+msgid "CHILL MODE ON"
+msgstr "CHILL MODU AÇIK"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:155
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:73
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:134
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:136
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:138
+#, python-format
+msgid "CONNECT"
+msgstr "BAĞLAN"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:369
+#, fuzzy, python-format
+msgid "CONNECTING..."
+msgstr "BAĞLAN"
+
+#: /home/batman/openpilot/system/ui/widgets/confirm_dialog.py:23
+#: /home/batman/openpilot/system/ui/widgets/option_dialog.py:34
+#: /home/batman/openpilot/system/ui/widgets/keyboard.py:81
+#: /home/batman/openpilot/system/ui/widgets/network.py:318
+#, python-format
+msgid "Cancel"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:134
+#, python-format
+msgid "Cellular Metered"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:69
+#, python-format
+msgid "Change Language"
+msgstr "Dili Değiştir"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:125
+#, fuzzy, python-format
+msgid "Changing this setting will restart openpilot if the car is powered on."
+msgstr ""
+" Bu ayarı değiştirmek, araç çalışıyorsa openpilot'u yeniden başlatacaktır."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:129
+#, python-format
+msgid "Click \"add new device\" and scan the QR code on the right"
+msgstr "\"yeni cihaz ekle\"ye tıklayın ve sağdaki QR kodunu tarayın"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:105
+#, python-format
+msgid "Close"
+msgstr "Kapat"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:48
+#, python-format
+msgid "Current Version"
+msgstr "Geçerli Sürüm"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:109
+#, python-format
+msgid "DOWNLOAD"
+msgstr "İNDİR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:115
+#, python-format
+msgid "Decline"
+msgstr "Reddet"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:148
+#, python-format
+msgid "Decline, uninstall openpilot"
+msgstr "Reddet, openpilot'u kaldır"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:67
+#, python-format
+msgid "Developer"
+msgstr "Geliştirici"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:62
+#, python-format
+msgid "Device"
+msgstr "Cihaz"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:58
+#, python-format
+msgid "Disengage on Accelerator Pedal"
+msgstr "Gaz Pedalında Devreden Çık"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:194
+#, python-format
+msgid "Disengage to Power Off"
+msgstr "Kapatmak için Devreden Çıkın"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:182
+#, python-format
+msgid "Disengage to Reboot"
+msgstr "Yeniden Başlatmak için Devreden Çıkın"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:113
+#, python-format
+msgid "Disengage to Reset Calibration"
+msgstr "Kalibrasyonu Sıfırlamak için Devreden Çıkın"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:32
+#, python-format
+msgid "Display speed in km/h instead of mph."
+msgstr "Hızı mph yerine km/h olarak göster."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:62
+#, python-format
+msgid "Dongle ID"
+msgstr "Dongle ID"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:49
+#, python-format
+msgid "Download"
+msgstr "İndir"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:65
+#, python-format
+msgid "Driver Camera"
+msgstr "Sürücü Kamerası"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:96
+#, python-format
+msgid "Driving Personality"
+msgstr "Sürüş Kişiliği"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:123
+#: /home/batman/openpilot/system/ui/widgets/network.py:139
+#, python-format
+msgid "EDIT"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:138
+#, python-format
+msgid "ERROR"
+msgstr "HATA"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:45
+#, python-format
+msgid "ETH"
+msgstr "ETH"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/exp_mode_button.py:50
+#, python-format
+msgid "EXPERIMENTAL MODE ON"
+msgstr "DENEYSEL MOD AÇIK"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:166
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:228
+#, python-format
+msgid "Enable"
+msgstr "Etkinleştir"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:39
+#, python-format
+msgid "Enable ADB"
+msgstr "ADB'yi Etkinleştir"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:64
+#, python-format
+msgid "Enable Lane Departure Warnings"
+msgstr "Şerit Terk Uyarılarını Etkinleştir"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:129
+#, fuzzy, python-format
+msgid "Enable Roaming"
+msgstr "openpilot'u etkinleştir"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:48
+#, python-format
+msgid "Enable SSH"
+msgstr "SSH'yi Etkinleştir"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:120
+#, fuzzy, python-format
+msgid "Enable Tethering"
+msgstr "Şerit Terk Uyarılarını Etkinleştir"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:30
+#, python-format
+msgid "Enable driver monitoring even when openpilot is not engaged."
+msgstr "openpilot devrede değilken bile sürücü izlemesini etkinleştir."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:46
+#, python-format
+msgid "Enable openpilot"
+msgstr "openpilot'u etkinleştir"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:189
+#, python-format
+msgid ""
+"Enable the openpilot longitudinal control (alpha) toggle to allow "
+"Experimental mode."
+msgstr ""
+"Deneysel modu etkinleştirmek için openpilot boylamsal kontrolünü (alfa) açın."
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:204
+#, python-format
+msgid "Enter APN"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:241
+#, python-format
+msgid "Enter SSID"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:254
+#, python-format
+msgid "Enter new tethering password"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:237
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "Enter password"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:89
+#, python-format
+msgid "Enter your GitHub username"
+msgstr "GitHub kullanıcı adınızı girin"
+
+#: /home/batman/openpilot/system/ui/widgets/list_view.py:115
+#: /home/batman/openpilot/system/ui/widgets/list_view.py:153
+#, python-format
+msgid "Error"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:52
+#, python-format
+msgid "Experimental Mode"
+msgstr "Deneysel Mod"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:181
+#, python-format
+msgid ""
+"Experimental mode is currently unavailable on this car since the car's stock "
+"ACC is used for longitudinal control."
+msgstr ""
+"Bu araçta boylamsal kontrol için stok ACC kullanıldığından şu anda Deneysel "
+"mod kullanılamıyor."
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:373
+#, python-format
+msgid "FORGETTING..."
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:44
+#, python-format
+msgid "Finish Setup"
+msgstr "Kurulumu Bitir"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:66
+#, python-format
+msgid "Firehose"
+msgstr "Firehose"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:18
+#, python-format
+msgid "Firehose Mode"
+msgstr "Firehose Modu"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:25
+#, python-format
+msgid ""
+"For maximum effectiveness, bring your device inside and connect to a good "
+"USB-C adapter and Wi-Fi weekly.\n"
+"\n"
+"Firehose Mode can also work while you're driving if connected to a hotspot "
+"or unlimited SIM card.\n"
+"\n"
+"\n"
+"Frequently Asked Questions\n"
+"\n"
+"Does it matter how or where I drive? Nope, just drive as you normally "
+"would.\n"
+"\n"
+"Do all of my segments get pulled in Firehose Mode? No, we selectively pull a "
+"subset of your segments.\n"
+"\n"
+"What's a good USB-C adapter? Any fast phone or laptop charger should be "
+"fine.\n"
+"\n"
+"Does it matter which software I run? Yes, only upstream openpilot (and "
+"particular forks) are able to be used for training."
+msgstr ""
+"Maksimum verim için cihazınızı içeri alın ve haftalık olarak iyi bir USB-C "
+"adaptörüne ve Wi‑Fi'a bağlayın.\n"
+"\n"
+"Firehose Modu, bir hotspot'a veya sınırsız SIM karta bağlıyken sürüş "
+"sırasında da çalışabilir.\n"
+"\n"
+"\n"
+"Sıkça Sorulan Sorular\n"
+"\n"
+"Nasıl veya nerede sürdüğüm önemli mi? Hayır, normalde nasıl sürüyorsanız "
+"öyle sürün.\n"
+"\n"
+"Firehose Modu'nda tüm segmentlerim çekiliyor mu? Hayır, segmentlerinizin bir "
+"alt kümesini seçerek çekiyoruz.\n"
+"\n"
+"İyi bir USB‑C adaptörü nedir? Hızlı bir telefon veya dizüstü şarj cihazı "
+"uygundur.\n"
+"\n"
+"Hangi yazılımı çalıştırdığım önemli mi? Evet, yalnızca upstream openpilot "
+"(ve bazı fork'lar) eğitim için kullanılabilir."
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:318
+#: /home/batman/openpilot/system/ui/widgets/network.py:451
+#, python-format
+msgid "Forget"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:319
+#, python-format
+msgid "Forget Wi-Fi Network \"{}\"?"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:71
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:125
+#, python-format
+msgid "GOOD"
+msgstr "İYİ"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:128
+#, python-format
+msgid "Go to https://connect.comma.ai on your phone"
+msgstr "Telefonunuzda https://connect.comma.ai adresine gidin"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:129
+#, python-format
+msgid "HIGH"
+msgstr "YÜKSEK"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:155
+#, fuzzy, python-format
+msgid "Hidden Network"
+msgstr "Ağ"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:140
+#, python-format
+msgid "INACTIVE: connect to an unmetered network"
+msgstr "PASİF: sınırsız bir ağa bağlanın"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:52
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:131
+#, python-format
+msgid "INSTALL"
+msgstr "YÜKLE"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:150
+#, python-format
+msgid "IP Address"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:52
+#, python-format
+msgid "Install Update"
+msgstr "Güncellemeyi Yükle"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:56
+#, python-format
+msgid "Joystick Debug Mode"
+msgstr "Joystick Hata Ayıklama Modu"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:29
+#, python-format
+msgid "LOADING"
+msgstr "YÜKLENİYOR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:48
+#, python-format
+msgid "LTE"
+msgstr "LTE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:64
+#, python-format
+msgid "Longitudinal Maneuver Mode"
+msgstr "Boylamsal Manevra Modu"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:148
+#, python-format
+msgid "MAX"
+msgstr "MAKS"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:75
+#, python-format
+msgid ""
+"Maximize your training data uploads to improve openpilot's driving models."
+msgstr ""
+"openpilot'un sürüş modellerini iyileştirmek için eğitim veri yüklemelerinizi "
+"en üst düzeye çıkarın."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:49
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:50
+#, python-format
+msgid "N/A"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:142
+#, python-format
+msgid "NO"
+msgstr "HAYIR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:63
+#, python-format
+msgid "Network"
+msgstr "Ağ"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:114
+#, python-format
+msgid "No SSH keys found"
+msgstr "SSH anahtarı bulunamadı"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:126
+#, fuzzy, python-format
+msgid "No SSH keys found for user '{}'"
+msgstr "'{username}' için SSH anahtarı bulunamadı"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:18
+#, fuzzy, python-format
+msgid "No release notes available."
+msgstr "Sürüm notu mevcut değil."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:73
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:134
+#, python-format
+msgid "OFFLINE"
+msgstr "ÇEVRİMDIŞI"
+
+#: /home/batman/openpilot/system/ui/widgets/html_render.py:247
+#: /home/batman/openpilot/system/ui/widgets/confirm_dialog.py:93
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:127
+#, python-format
+msgid "OK"
+msgstr "OK"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:72
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:136
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:144
+#, python-format
+msgid "ONLINE"
+msgstr "ÇEVRİMİÇİ"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:20
+#, python-format
+msgid "Open"
+msgstr "Aç"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:52
+#, python-format
+msgid "PAIR"
+msgstr "EŞLE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:142
+#, python-format
+msgid "PANDA"
+msgstr "PANDA"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:65
+#, python-format
+msgid "PREVIEW"
+msgstr "ÖNİZLEME"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:44
+#, python-format
+msgid "PRIME FEATURES:"
+msgstr "PRIME ÖZELLİKLERİ:"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:52
+#, python-format
+msgid "Pair Device"
+msgstr "Cihazı Eşle"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:19
+#, python-format
+msgid "Pair device"
+msgstr "Cihazı eşle"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:103
+#, python-format
+msgid "Pair your device to your comma account"
+msgstr "Cihazınızı comma hesabınızla eşleştirin"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:48
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:25
+#, python-format
+msgid ""
+"Pair your device with comma connect (connect.comma.ai) and claim your comma "
+"prime offer."
+msgstr ""
+"Cihazınızı comma connect (connect.comma.ai) ile eşleştirin ve comma prime "
+"teklifinizi alın."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:91
+#, python-format
+msgid "Please connect to Wi-Fi to complete initial pairing"
+msgstr "İlk eşleştirmeyi tamamlamak için lütfen Wi‑Fi'a bağlanın"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:59
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:197
+#, python-format
+msgid "Power Off"
+msgstr "Kapat"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:144
+#, python-format
+msgid "Prevent large data uploads when on a metered Wi-Fi connection"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:135
+#, python-format
+msgid "Prevent large data uploads when on a metered cellular connection"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:26
+#, python-format
+msgid ""
+"Preview the driver facing camera to ensure that driver monitoring has good "
+"visibility. (vehicle must be off)"
+msgstr ""
+"Sürücü izleme görünürlüğünün iyi olduğundan emin olmak için sürücüye bakan "
+"kamerayı önizleyin. (araç kapalı olmalıdır)"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/pairing_dialog.py:161
+#, python-format
+msgid "QR Code Error"
+msgstr "QR Kod Hatası"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:31
+#, python-format
+msgid "REMOVE"
+msgstr "KALDIR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:55
+#, python-format
+msgid "RESET"
+msgstr "SIFIRLA"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:67
+#, python-format
+msgid "REVIEW"
+msgstr "GÖZDEN GEÇİR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:59
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:185
+#, python-format
+msgid "Reboot"
+msgstr "Yeniden Başlat"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:66
+#, python-format
+msgid "Reboot Device"
+msgstr "Cihazı Yeniden Başlat"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:113
+#, python-format
+msgid "Reboot and Update"
+msgstr "Yeniden Başlat ve Güncelle"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:27
+#, python-format
+msgid ""
+"Receive alerts to steer back into the lane when your vehicle drifts over a "
+"detected lane line without a turn signal activated while driving over 31 mph "
+"(50 km/h)."
+msgstr ""
+"Araç 31 mph (50 km/h) üzerindeyken sinyal verilmeden algılanan şerit "
+"çizgisini aştığınızda şeride geri dönmeniz için uyarılar alın."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:76
+#, python-format
+msgid "Record and Upload Driver Camera"
+msgstr "Sürücü Kamerasını Kaydet ve Yükle"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:82
+#, python-format
+msgid "Record and Upload Microphone Audio"
+msgstr "Mikrofon Sesini Kaydet ve Yükle"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:33
+#, python-format
+msgid ""
+"Record and store microphone audio while driving. The audio will be included "
+"in the dashcam video in comma connect."
+msgstr ""
+"Sürüş sırasında mikrofon sesini kaydedip saklayın. Ses, comma connect'teki "
+"ön kamera videosuna dahil edilecektir."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:68
+#, python-format
+msgid "Regulatory"
+msgstr "Mevzuat"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Relaxed"
+msgstr "Rahat"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "Remote access"
+msgstr "Uzaktan erişim"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:47
+#, python-format
+msgid "Remote snapshots"
+msgstr "Uzaktan anlık görüntüler"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/ssh_key.py:123
+#, python-format
+msgid "Request timed out"
+msgstr "İstek zaman aşımına uğradı"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:129
+#, python-format
+msgid "Reset"
+msgstr "Sıfırla"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:55
+#, python-format
+msgid "Reset Calibration"
+msgstr "Kalibrasyonu Sıfırla"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:67
+#, python-format
+msgid "Review Training Guide"
+msgstr "Eğitim Kılavuzunu İncele"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:28
+#, python-format
+msgid "Review the rules, features, and limitations of openpilot"
+msgstr ""
+"openpilot'un kurallarını, özelliklerini ve sınırlamalarını gözden geçirin"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:53
+#, python-format
+msgid "SSH Keys"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:310
+#, python-format
+msgid "Scanning Wi-Fi networks..."
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/option_dialog.py:35
+#, python-format
+msgid "Select"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:100
+#, python-format
+msgid "Select a language"
+msgstr "Bir dil seçin"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:63
+#, python-format
+msgid "Serial"
+msgstr "Seri"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/offroad_alerts.py:107
+#, python-format
+msgid "Snooze Update"
+msgstr "Güncellemeyi Ertele"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:65
+#, python-format
+msgid "Software"
+msgstr "Yazılım"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:98
+#, python-format
+msgid "Standard"
+msgstr "Standart"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:22
+#, python-format
+msgid ""
+"Standard is recommended. In aggressive mode, openpilot will follow lead cars "
+"closer and be more aggressive with the gas and brake. In relaxed mode "
+"openpilot will stay further away from lead cars. On supported cars, you can "
+"cycle through these personalities with your steering wheel distance button."
+msgstr ""
+"Standart önerilir. Agresif modda openpilot öndeki aracı daha yakından takip "
+"eder ve gaz/fren kullanımında daha ataktır. Rahat modda openpilot öndeki "
+"araçlardan daha uzak durur. Desteklenen araçlarda bu kişilikler arasında "
+"direksiyon mesafe düğmesiyle geçiş yapabilirsiniz."
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:59
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:65
+#, python-format
+msgid "System Unresponsive"
+msgstr "Sistem Yanıt Vermiyor"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:58
+#, python-format
+msgid "TAKE CONTROL IMMEDIATELY"
+msgstr "HEMEN KONTROLÜ DEVRALIN"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:71
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:125
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:127
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:129
+#, python-format
+msgid "TEMP"
+msgstr "TEMP"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:124
+#, python-format
+msgid "Tethering Password"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/settings.py:64
+#, python-format
+msgid "Toggles"
+msgstr "Seçenekler"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:70
+#, python-format
+msgid "UNINSTALL"
+msgstr "KALDIR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/home.py:155
+#, python-format
+msgid "UPDATE"
+msgstr "GÜNCELLE"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:158
+#, python-format
+msgid "Uninstall"
+msgstr "Kaldır"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:117
+#, python-format
+msgid "Unknown"
+msgstr "Bilinmiyor"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:47
+#, python-format
+msgid "Updates are only downloaded while the car is off."
+msgstr "Güncellemeler yalnızca araç kapalıyken indirilir."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:33
+#, python-format
+msgid "Upgrade Now"
+msgstr "Şimdi Yükselt"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:31
+#, python-format
+msgid ""
+"Upload data from the driver facing camera and help improve the driver "
+"monitoring algorithm."
+msgstr ""
+"Sürücüye bakan kameradan veri yükleyin ve sürücü izleme algoritmasını "
+"geliştirmeye yardımcı olun."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:88
+#, python-format
+msgid "Use Metric System"
+msgstr "Metrik Sistemi Kullan"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:17
+#, python-format
+msgid ""
+"Use the openpilot system for adaptive cruise control and lane keep driver "
+"assistance. Your attention is required at all times to use this feature."
+msgstr ""
+"Uyarlanabilir hız sabitleyici ve şerit koruma sürücü yardımında openpilot "
+"sistemini kullanın. Bu özelliği kullanırken her zaman dikkatli olmanız "
+"gerekir."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:72
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:144
+#, python-format
+msgid "VEHICLE"
+msgstr "ARAÇ"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:68
+#, python-format
+msgid "VIEW"
+msgstr "GÖRÜNTÜLE"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:52
+#, python-format
+msgid "Waiting to start"
+msgstr "Başlatma bekleniyor"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:19
+#, python-format
+msgid ""
+"Warning: This grants SSH access to all public keys in your GitHub settings. "
+"Never enter a GitHub username other than your own. A comma employee will "
+"NEVER ask you to add their GitHub username."
+msgstr ""
+"Uyarı: Bu, GitHub ayarlarınızdaki tüm açık anahtarlara SSH erişimi verir. "
+"Kendi adınız dışında asla bir GitHub kullanıcı adı girmeyin. Bir comma "
+"çalışanı sizden asla GitHub kullanıcı adlarını eklemenizi İSTEMEZ."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:111
+#, python-format
+msgid "Welcome to openpilot"
+msgstr "openpilot'a hoş geldiniz"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:20
+#, python-format
+msgid "When enabled, pressing the accelerator pedal will disengage openpilot."
+msgstr ""
+"Etkinleştirildiğinde, gaz pedalına basmak openpilot'u devreden çıkarır."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/sidebar.py:44
+#, python-format
+msgid "Wi-Fi"
+msgstr "Wi‑Fi"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:144
+#, python-format
+msgid "Wi-Fi Network Metered"
+msgstr ""
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "Wrong password"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:145
+#, python-format
+msgid "You must accept the Terms and Conditions in order to use openpilot."
+msgstr "openpilot'u kullanmak için Şartlar ve Koşulları kabul etmelisiniz."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/onboarding.py:112
+#, python-format
+msgid ""
+"You must accept the Terms and Conditions to use openpilot. Read the latest "
+"terms at https://comma.ai/terms before continuing."
+msgstr ""
+"openpilot'u kullanmak için Şartlar ve Koşulları kabul etmelisiniz. Devam "
+"etmeden önce en güncel şartları https://comma.ai/terms adresinde okuyun."
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/driver_camera_dialog.py:34
+#, python-format
+msgid "camera starting"
+msgstr "kamera başlatılıyor"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:63
+#, python-format
+msgid "comma prime"
+msgstr "comma prime"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "default"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid "down"
+msgstr "aşağı"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:105
+#, python-format
+msgid "failed to check for update"
+msgstr "güncelleme kontrolü başarısız"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:237
+#: /home/batman/openpilot/system/ui/widgets/network.py:314
+#, python-format
+msgid "for \"{}\""
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:177
+#, python-format
+msgid "km/h"
+msgstr "km/h"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:204
+#, python-format
+msgid "leave blank for automatic configuration"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:144
+#, python-format
+msgid "left"
+msgstr "sol"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "metered"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/hud_renderer.py:177
+#, python-format
+msgid "mph"
+msgstr "mph"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:19
+#, python-format
+msgid "never"
+msgstr "asla"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:30
+#, python-format
+msgid "now"
+msgstr "şimdi"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/developer.py:71
+#, python-format
+msgid "openpilot Longitudinal Control (Alpha)"
+msgstr "openpilot Boylamsal Kontrol (Alfa)"
+
+#: /home/batman/openpilot/selfdrive/ui/onroad/alert_renderer.py:51
+#, python-format
+msgid "openpilot Unavailable"
+msgstr "openpilot Kullanılamıyor"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:158
+#, python-format
+msgid ""
+"openpilot defaults to driving in chill mode. Experimental mode enables alpha-"
+"level features that aren't ready for chill mode. Experimental features are "
+"listed below:
End-to-End Longitudinal Control
Let the driving "
+"model control the gas and brakes. openpilot will drive as it thinks a human "
+"would, including stopping for red lights and stop signs. Since the driving "
+"model decides the speed to drive, the set speed will only act as an upper "
+"bound. This is an alpha quality feature; mistakes should be expected."
+"
New Driving Visualization
The driving visualization will "
+"transition to the road-facing wide-angle camera at low speeds to better show "
+"some turns. The Experimental mode logo will also be shown in the top right "
+"corner."
+msgstr ""
+"openpilot varsayılan olarak chill modunda sürer. Deneysel mod, chill moduna "
+"hazır olmayan alfa seviyesindeki özellikleri etkinleştirir. Deneysel "
+"özellikler aşağıda listelenmiştir:
Uçtan Uca Boylamsal Kontrol"
+"h4>
Sürüş modelinin gaz ve frenleri kontrol etmesine izin verin. "
+"openpilot, kırmızı ışıklarda ve dur işaretlerinde durmak dahil, bir insan "
+"nasıl sürer diye düşündüğüne göre sürer. Hızı sürüş modeli belirlediğinden, "
+"ayarlanan hız yalnızca üst sınır olarak işlev görür. Bu bir alfa kalitesinde "
+"özelliktir; hatalar beklenmelidir.
Yeni Sürüş Görselleştirmesi"
+"h4>
Sürüş görselleştirmesi, düşük hızlarda bazı dönüşleri daha iyi "
+"göstermek için yola bakan geniş açılı kameraya geçer. Deneysel mod logosu "
+"sağ üst köşede de gösterilecektir."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:175
+#, fuzzy, python-format
+msgid ""
+"openpilot is continuously calibrating, resetting is rarely required. "
+"Resetting calibration will restart openpilot if the car is powered on."
+msgstr ""
+" Bu ayarı değiştirmek, araç çalışıyorsa openpilot'u yeniden başlatacaktır."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:20
+#, python-format
+msgid ""
+"openpilot learns to drive by watching humans, like you, drive.\n"
+"\n"
+"Firehose Mode allows you to maximize your training data uploads to improve "
+"openpilot's driving models. More data means bigger models, which means "
+"better Experimental Mode."
+msgstr ""
+"openpilot, sizin gibi insanların nasıl sürdüğünü izleyerek sürmeyi öğrenir.\n"
+"\n"
+"Firehose Modu, openpilot'un sürüş modellerini geliştirmek için eğitim veri "
+"yüklemelerinizi en üst düzeye çıkarmanıza olanak tanır. Daha fazla veri, "
+"daha büyük modeller demektir; bu da daha iyi Deneysel Mod anlamına gelir."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/toggles.py:183
+#, python-format
+msgid "openpilot longitudinal control may come in a future update."
+msgstr "openpilot boylamsal kontrolü gelecekteki bir güncellemede gelebilir."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:27
+#, python-format
+msgid ""
+"openpilot requires the device to be mounted within 4° left or right and "
+"within 5° up or 9° down."
+msgstr ""
+"openpilot, cihazın sağa/sola 4° ve yukarı 5° veya aşağı 9° içinde monte "
+"edilmesini gerektirir."
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:144
+#, python-format
+msgid "right"
+msgstr "sağ"
+
+#: /home/batman/openpilot/system/ui/widgets/network.py:142
+#, python-format
+msgid "unmetered"
+msgstr ""
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/device.py:143
+#, python-format
+msgid "up"
+msgstr "yukarı"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:116
+#, python-format
+msgid "up to date, last checked never"
+msgstr "güncel, son kontrol asla"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:114
+#, python-format
+msgid "up to date, last checked {}"
+msgstr "güncel, son kontrol {}"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:108
+#, python-format
+msgid "update available"
+msgstr "güncelleme mevcut"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/home.py:169
+#, python-format
+msgid "{} ALERT"
+msgid_plural "{} ALERTS"
+msgstr[0] "{} UYARI"
+msgstr[1] "{} UYARILAR"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:39
+#, python-format
+msgid "{} day ago"
+msgid_plural "{} days ago"
+msgstr[0] "{} gün önce"
+msgstr[1] "{} gün önce"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:36
+#, python-format
+msgid "{} hour ago"
+msgid_plural "{} hours ago"
+msgstr[0] "{} saat önce"
+msgstr[1] "{} saat önce"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/software.py:33
+#, python-format
+msgid "{} minute ago"
+msgid_plural "{} minutes ago"
+msgstr[0] "{} dakika önce"
+msgstr[1] "{} dakika önce"
+
+#: /home/batman/openpilot/selfdrive/ui/layouts/settings/firehose.py:111
+#, fuzzy, python-format
+msgid "{} segment of your driving is in the training dataset so far."
+msgid_plural "{} segments of your driving is in the training dataset so far."
+msgstr[0] "{} segment sürüşünüz eğitim veri setinde."
+msgstr[1] "{} segment sürüşünüz eğitim veri setinde."
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/prime.py:62
+#, python-format
+msgid "✓ SUBSCRIBED"
+msgstr "✓ ABONE"
+
+#: /home/batman/openpilot/selfdrive/ui/widgets/setup.py:22
+#, python-format
+msgid "🔥 Firehose Mode 🔥"
+msgstr "🔥 Firehose Modu 🔥"
diff --git a/selfdrive/ui/translations/languages.json b/selfdrive/ui/translations/languages.json
index b0674dee82e44a..c6b9a4b7ca5a4d 100644
--- a/selfdrive/ui/translations/languages.json
+++ b/selfdrive/ui/translations/languages.json
@@ -4,11 +4,5 @@
"Français": "fr",
"Português": "pt-BR",
"Español": "es",
- "Türkçe": "tr",
- "العربية": "ar",
- "ไทย": "th",
- "中文(繁體)": "zh-CHT",
- "中文(简体)": "zh-CHS",
- "한국어": "ko",
- "日本語": "ja"
+ "Türkçe": "tr"
}
diff --git a/selfdrive/ui/update_translations_raylib.py b/selfdrive/ui/update_translations_raylib.py
new file mode 100755
index 00000000000000..eee8af7f0c9786
--- /dev/null
+++ b/selfdrive/ui/update_translations_raylib.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python3
+from itertools import chain
+import json
+import os
+from openpilot.system.ui.lib.multilang import SYSTEM_UI_DIR, UI_DIR, TRANSLATIONS_DIR, LANGUAGES_FILE
+
+
+def update_translations():
+ files = []
+ for root, _, filenames in chain(os.walk(SYSTEM_UI_DIR),
+ os.walk(os.path.join(UI_DIR, "widgets")),
+ os.walk(os.path.join(UI_DIR, "layouts")),
+ os.walk(os.path.join(UI_DIR, "onroad"))):
+ for filename in filenames:
+ if filename.endswith(".py"):
+ files.append(os.path.join(root, filename))
+
+ # Create main translation file
+ cmd = ("xgettext -L Python --keyword=tr --keyword=trn:1,2 --keyword=pgettext:1c,2 --from-code=UTF-8 " +
+ "--flag=tr:1:python-brace-format --flag=trn:1:python-brace-format --flag=trn:2:python-brace-format " +
+ "-o translations/app.pot {}").format(" ".join(files))
+
+ ret = os.system(cmd)
+ assert ret == 0
+
+ # Generate/update translation files for each language
+ with open(LANGUAGES_FILE) as f:
+ translation_files = json.load(f).values()
+
+ for name in translation_files:
+ if os.path.exists(os.path.join(TRANSLATIONS_DIR, f"app_{name}.po")):
+ cmd = f"msgmerge --update --backup=none --sort-output translations/app_{name}.po translations/app.pot"
+ ret = os.system(cmd)
+ assert ret == 0
+ else:
+ cmd = f"msginit -l {name} --no-translator --input translations/app.pot --output-file translations/app_{name}.po"
+ ret = os.system(cmd)
+ assert ret == 0
+
+
+if __name__ == "__main__":
+ update_translations()
diff --git a/selfdrive/ui/update_translations_raylib.sh b/selfdrive/ui/update_translations_raylib.sh
new file mode 100755
index 00000000000000..c37c7da879c3f8
--- /dev/null
+++ b/selfdrive/ui/update_translations_raylib.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+
+BASEDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+cd "$BASEDIR"
+pwd
+
+PY_FILES=$(git ls-files 'layouts/*.py' 'widgets/*.py')
+
+xgettext -L Python \
+ --keyword=tr \
+ --keyword=trn:1,2 \
+ --keyword=pgettext:1c,2 \
+ --from-code=UTF-8 \
+ --flag=tr:1:python-brace-format \
+ --flag=trn:1:python-brace-format --flag=trn:2:python-brace-format \
+ -o translations/app.pot \
+ $PY_FILES
+
+msginit \
+ -l es \
+ --no-translator \
+ --input translations/app.pot \
+ --output-file translations/app.po
diff --git a/selfdrive/ui/widgets/offroad_alerts.py b/selfdrive/ui/widgets/offroad_alerts.py
index 0bd5b161b98bf1..c504d0c9b2c9e8 100644
--- a/selfdrive/ui/widgets/offroad_alerts.py
+++ b/selfdrive/ui/widgets/offroad_alerts.py
@@ -15,7 +15,7 @@
from openpilot.selfdrive.selfdrived.alertmanager import OFFROAD_ALERTS
-NO_RELEASE_NOTES = tr("No release notes available.
")
+NO_RELEASE_NOTES = "" + tr("No release notes available.") + "
"
class AlertColors:
diff --git a/selfdrive/ui/widgets/ssh_key.py b/selfdrive/ui/widgets/ssh_key.py
index e44c4aad5d1f05..bcaf3fb49336f3 100644
--- a/selfdrive/ui/widgets/ssh_key.py
+++ b/selfdrive/ui/widgets/ssh_key.py
@@ -127,5 +127,5 @@ def _fetch_ssh_key(self, username: str):
self._state = SshKeyActionState.ADD
-def ssh_key_item(title: str, description: str):
+def ssh_key_item(title: str | Callable[[], str], description: str | Callable[[], str]) -> ListItem:
return ListItem(title=title, description=description, action_item=SshKeyAction())
diff --git a/system/ui/lib/application.py b/system/ui/lib/application.py
index ff7163793dd284..5c49872bef3579 100644
--- a/system/ui/lib/application.py
+++ b/system/ui/lib/application.py
@@ -4,6 +4,7 @@
import time
import signal
import sys
+import json
import pyray as rl
import threading
from collections.abc import Callable
@@ -13,6 +14,7 @@
from typing import NamedTuple
from importlib.resources import as_file, files
from openpilot.common.swaglog import cloudlog
+from openpilot.system.ui.lib.multilang import LANGUAGES_FILE, TRANSLATIONS_DIR
from openpilot.system.hardware import HARDWARE, PC, TICI
from openpilot.common.realtime import Ratekeeper
@@ -41,15 +43,15 @@
class FontWeight(StrEnum):
- THIN = "Inter-Thin.ttf"
- EXTRA_LIGHT = "Inter-ExtraLight.ttf"
- LIGHT = "Inter-Light.ttf"
- NORMAL = "Inter-Regular.ttf"
- MEDIUM = "Inter-Medium.ttf"
- SEMI_BOLD = "Inter-SemiBold.ttf"
- BOLD = "Inter-Bold.ttf"
- EXTRA_BOLD = "Inter-ExtraBold.ttf"
- BLACK = "Inter-Black.ttf"
+ THIN = "OpenpilotSans-Regular.ttf"
+ EXTRA_LIGHT = "OpenpilotSans-Regular.ttf"
+ LIGHT = "OpenpilotSans-Regular.ttf"
+ NORMAL = "OpenpilotSans-Regular.ttf"
+ MEDIUM = "OpenpilotSans-Regular.ttf"
+ SEMI_BOLD = "OpenpilotSans-Regular.ttf"
+ BOLD = "OpenpilotSans-Regular.ttf"
+ EXTRA_BOLD = "OpenpilotSans-Regular.ttf"
+ BLACK = "OpenpilotSans-Regular.ttf"
@dataclass
@@ -345,6 +347,7 @@ def width(self):
def height(self):
return self._height
+
def _load_fonts(self):
# Create a character set from our keyboard layouts
from openpilot.system.ui.widgets.keyboard import KEYBOARD_LAYOUTS
@@ -352,8 +355,25 @@ def _load_fonts(self):
all_chars = set()
for layout in KEYBOARD_LAYOUTS.values():
all_chars.update(key for row in layout for key in row)
+
+ # Ensure Latin-1 Supplement and Latin Extended-A are covered (for de/fr/es/etc.)
+ for cp in range(0x00A0, 0x0180):
+ all_chars.add(chr(cp))
+ all_chars |= set("–✓×°§•")
+
+ with open(LANGUAGES_FILE, "r") as f:
+ l = f.read()
+ languages = json.loads(l)
+ all_chars |= set(l)
+
+ # read each translation file now
+ for lang in languages:
+ lang_file = os.path.join(TRANSLATIONS_DIR, f"app_{lang}.po")
+ with open(lang_file, "r", encoding="utf-8") as f:
+ all_chars |= set(f.read())
+
all_chars = "".join(all_chars)
- all_chars += "–✓×°§•"
+ print(all_chars)
codepoint_count = rl.ffi.new("int *", 1)
codepoints = rl.load_codepoints(all_chars, codepoint_count)
diff --git a/system/ui/lib/multilang.py b/system/ui/lib/multilang.py
index c020b33d5e0f80..8312f964bd18d8 100644
--- a/system/ui/lib/multilang.py
+++ b/system/ui/lib/multilang.py
@@ -1,10 +1,71 @@
import os
+import json
import gettext
+from openpilot.common.params import Params
from openpilot.common.basedir import BASEDIR
+SYSTEM_UI_DIR = os.path.join(BASEDIR, "system", "ui")
UI_DIR = os.path.join(BASEDIR, "selfdrive", "ui")
TRANSLATIONS_DIR = os.path.join(UI_DIR, "translations")
LANGUAGES_FILE = os.path.join(TRANSLATIONS_DIR, "languages.json")
-tr = gettext.gettext
-trn = gettext.ngettext
+
+class Multilang:
+ def __init__(self):
+ self._params = Params()
+ self.languages = {}
+ self.codes = {}
+ self._translation: gettext.NullTranslations | gettext.GNUTranslations | None = None
+ self._load_languages()
+
+ @property
+ def language(self) -> str:
+ # TODO: we need to default to english first time for live translate to fully work :hmm:
+ return self._params.get("LanguageSetting") or "en"
+
+ def setup(self):
+ language = self.language
+ try:
+ with open(os.path.join(TRANSLATIONS_DIR, f'app_{language}.mo'), 'rb') as fh:
+ translation = gettext.GNUTranslations(fh)
+ translation.install()
+ self._translation = translation
+ print(f"Loaded translations for language: {language}")
+ except FileNotFoundError:
+ print(f"No translation file found for language: {language}, using default.")
+ gettext.install('app')
+ self._translation = gettext.NullTranslations()
+ return None
+
+ def change_language(self, language_code: str) -> None:
+ # Persist selection
+ if self._params.get("LanguageSetting") != language_code:
+ self._params.put("LanguageSetting", language_code)
+
+ # Reinstall gettext with the selected language
+ self.setup()
+
+ def tr(self, text: str) -> str:
+ if self._translation is None:
+ self.setup()
+ return self._translation.gettext(text)
+
+ def trn(self, singular: str, plural: str, n: int) -> str:
+ if self._translation is None:
+ self.setup()
+ return self._translation.ngettext(singular, plural, n)
+
+ def _load_languages(self):
+ with open(LANGUAGES_FILE, encoding='utf-8') as f:
+ self.languages = json.load(f)
+ self.codes = {v: k for k, v in self.languages.items()}
+
+
+multilang = Multilang()
+multilang.setup()
+
+def tr(text: str) -> str:
+ return multilang.tr(text)
+
+def trn(singular: str, plural: str, n: int) -> str:
+ return multilang.trn(singular, plural, n)
diff --git a/system/ui/widgets/button.py b/system/ui/widgets/button.py
index 15d48b4e138bb0..f2fa8743cee4a8 100644
--- a/system/ui/widgets/button.py
+++ b/system/ui/widgets/button.py
@@ -79,7 +79,7 @@ class ButtonStyle(IntEnum):
class Button(Widget):
def __init__(self,
- text: str,
+ text: str | Callable[[], str],
click_callback: Callable[[], None] | None = None,
font_size: int = DEFAULT_BUTTON_FONT_SIZE,
font_weight: FontWeight = FontWeight.MEDIUM,
diff --git a/system/ui/widgets/label.py b/system/ui/widgets/label.py
index 99aed529a74aa9..756495436b82cb 100644
--- a/system/ui/widgets/label.py
+++ b/system/ui/widgets/label.py
@@ -1,3 +1,4 @@
+from collections.abc import Callable
from itertools import zip_longest
from typing import Union
import pyray as rl
@@ -12,6 +13,13 @@
ICON_PADDING = 15
+# TODO: make this common
+def _resolve_value(value, default=""):
+ if callable(value):
+ return value()
+ return value if value is not None else default
+
+
# TODO: This should be a Widget class
def gui_label(
rect: rl.Rectangle,
@@ -90,7 +98,7 @@ def gui_text_box(
# Non-interactive text area. Can render emojis and an optional specified icon.
class Label(Widget):
def __init__(self,
- text: str,
+ text: str | Callable[[], str],
font_size: int = DEFAULT_TEXT_SIZE,
font_weight: FontWeight = FontWeight.NORMAL,
text_alignment: int = rl.GuiTextAlignment.TEXT_ALIGN_CENTER,
@@ -130,7 +138,7 @@ def _update_layout_rects(self):
def _update_text(self, text):
self._emojis = []
self._text_size = []
- self._text_wrapped = wrap_text(self._font, text, self._font_size, round(self._rect.width - (self._text_padding * 2)))
+ self._text_wrapped = wrap_text(self._font, _resolve_value(text), self._font_size, round(self._rect.width - (self._text_padding * 2)))
for t in self._text_wrapped:
self._emojis.append(find_emoji(t))
self._text_size.append(measure_text_cached(self._font, t, self._font_size))
diff --git a/system/ui/widgets/list_view.py b/system/ui/widgets/list_view.py
index 55abe02fe1d877..9fbb3f5604e53c 100644
--- a/system/ui/widgets/list_view.py
+++ b/system/ui/widgets/list_view.py
@@ -171,11 +171,9 @@ def get_width(self) -> int:
class DualButtonAction(ItemAction):
- def __init__(self, left_text: str, right_text: str, left_callback: Callable = None,
+ def __init__(self, left_text: str | Callable[[], str], right_text: str | Callable[[], str], left_callback: Callable = None,
right_callback: Callable = None, enabled: bool | Callable[[], bool] = True):
super().__init__(width=0, enabled=enabled) # Width 0 means use full width
- self.left_text, self.right_text = left_text, right_text
-
self.left_button = Button(left_text, click_callback=left_callback, button_style=ButtonStyle.LIST_ACTION, text_padding=0)
self.right_button = Button(right_text, click_callback=right_callback, button_style=ButtonStyle.DANGER, text_padding=0)
@@ -206,7 +204,7 @@ def _render(self, rect: rl.Rectangle):
class MultipleButtonAction(ItemAction):
- def __init__(self, buttons: list[str], button_width: int, selected_index: int = 0, callback: Callable = None):
+ def __init__(self, buttons: list[str | Callable[[], str]], button_width: int, selected_index: int = 0, callback: Callable = None):
super().__init__(width=len(buttons) * button_width + (len(buttons) - 1) * RIGHT_ITEM_PADDING, enabled=True)
self.buttons = buttons
self.button_width = button_width
@@ -225,7 +223,7 @@ def _render(self, rect: rl.Rectangle):
spacing = RIGHT_ITEM_PADDING
button_y = rect.y + (rect.height - BUTTON_HEIGHT) / 2
- for i, text in enumerate(self.buttons):
+ for i, _text in enumerate(self.buttons):
button_x = rect.x + i * (self.button_width + spacing)
button_rect = rl.Rectangle(button_x, button_y, self.button_width, BUTTON_HEIGHT)
@@ -249,6 +247,7 @@ def _render(self, rect: rl.Rectangle):
rl.draw_rectangle_rounded(button_rect, 1.0, 20, bg_color)
# Draw text
+ text = _resolve_value(_text, "")
text_size = measure_text_cached(self._font, text, 40)
text_x = button_x + (self.button_width - text_size.x) / 2
text_y = button_y + (BUTTON_HEIGHT - text_size.y) / 2
@@ -258,7 +257,7 @@ def _render(self, rect: rl.Rectangle):
def _handle_mouse_release(self, mouse_pos: MousePos):
spacing = RIGHT_ITEM_PADDING
button_y = self._rect.y + (self._rect.height - BUTTON_HEIGHT) / 2
- for i, _text in enumerate(self.buttons):
+ for i, _ in enumerate(self.buttons):
button_x = self._rect.x + i * (self.button_width + spacing)
button_rect = rl.Rectangle(button_x, button_y, self.button_width, BUTTON_HEIGHT)
if rl.check_collision_point_rec(mouse_pos, button_rect):
@@ -268,11 +267,11 @@ def _handle_mouse_release(self, mouse_pos: MousePos):
class ListItem(Widget):
- def __init__(self, title: str = "", icon: str | None = None, description: str | Callable[[], str] | None = None,
+ def __init__(self, title: str | Callable[[], str] = "", icon: str | None = None, description: str | Callable[[], str] | None = None,
description_visible: bool = False, callback: Callable | None = None,
action_item: ItemAction | None = None):
super().__init__()
- self.title = title
+ self._title = title
self.set_icon(icon)
self._description = description
self.description_visible = description_visible
@@ -285,7 +284,7 @@ def __init__(self, title: str = "", icon: str | None = None, description: str |
self._html_renderer = HtmlRenderer(text="", text_size={ElementType.P: ITEM_DESC_FONT_SIZE},
text_color=ITEM_DESC_TEXT_COLOR)
- self.set_description(self.description)
+ self._parse_description(self.description)
# Cached properties for performance
self._prev_description: str | None = self.description
@@ -332,7 +331,7 @@ def _update_state(self):
# Detect changes if description is callback
new_description = self.description
if new_description != self._prev_description:
- self.set_description(new_description)
+ self._parse_description(new_description)
def _render(self, _):
if not self.is_visible:
@@ -385,10 +384,15 @@ def set_icon(self, icon: str | None):
def set_description(self, description: str | Callable[[], str] | None):
self._description = description
- new_desc = self.description
+
+ def _parse_description(self, new_desc):
self._html_renderer.parse_html_content(new_desc)
self._prev_description = new_desc
+ @property
+ def title(self):
+ return _resolve_value(self._title, "")
+
@property
def description(self):
return _resolve_value(self._description, "")
@@ -423,35 +427,35 @@ def get_right_item_rect(self, item_rect: rl.Rectangle) -> rl.Rectangle:
# Factory functions
-def simple_item(title: str, callback: Callable | None = None) -> ListItem:
+def simple_item(title: str | Callable[[], str], callback: Callable | None = None) -> ListItem:
return ListItem(title=title, callback=callback)
-def toggle_item(title: str, description: str | Callable[[], str] | None = None, initial_state: bool = False,
+def toggle_item(title: str | Callable[[], str], description: str | Callable[[], str] | None = None, initial_state: bool = False,
callback: Callable | None = None, icon: str = "", enabled: bool | Callable[[], bool] = True) -> ListItem:
action = ToggleAction(initial_state=initial_state, enabled=enabled, callback=callback)
return ListItem(title=title, description=description, action_item=action, icon=icon)
-def button_item(title: str, button_text: str | Callable[[], str], description: str | Callable[[], str] | None = None,
+def button_item(title: str | Callable[[], str], button_text: str | Callable[[], str], description: str | Callable[[], str] | None = None,
callback: Callable | None = None, enabled: bool | Callable[[], bool] = True) -> ListItem:
action = ButtonAction(text=button_text, enabled=enabled)
return ListItem(title=title, description=description, action_item=action, callback=callback)
-def text_item(title: str, value: str | Callable[[], str], description: str | Callable[[], str] | None = None,
+def text_item(title: str | Callable[[], str], value: str | Callable[[], str], description: str | Callable[[], str] | None = None,
callback: Callable | None = None, enabled: bool | Callable[[], bool] = True) -> ListItem:
action = TextAction(text=value, color=ITEM_TEXT_VALUE_COLOR, enabled=enabled)
return ListItem(title=title, description=description, action_item=action, callback=callback)
-def dual_button_item(left_text: str, right_text: str, left_callback: Callable = None, right_callback: Callable = None,
+def dual_button_item(left_text: str | Callable[[], str], right_text: str | Callable[[], str], left_callback: Callable = None, right_callback: Callable = None,
description: str | Callable[[], str] | None = None, enabled: bool | Callable[[], bool] = True) -> ListItem:
action = DualButtonAction(left_text, right_text, left_callback, right_callback, enabled)
return ListItem(title="", description=description, action_item=action)
-def multiple_button_item(title: str, description: str, buttons: list[str], selected_index: int,
+def multiple_button_item(title: str | Callable[[], str], description: str | Callable[[], str], buttons: list[str | Callable[[], str]], selected_index: int,
button_width: int = BUTTON_WIDTH, callback: Callable = None, icon: str = ""):
action = MultipleButtonAction(buttons, button_width, selected_index, callback=callback)
return ListItem(title=title, description=description, icon=icon, action_item=action)
diff --git a/system/ui/widgets/network.py b/system/ui/widgets/network.py
index a59030363bb69d..e705c55f7c278c 100644
--- a/system/ui/widgets/network.py
+++ b/system/ui/widgets/network.py
@@ -117,40 +117,42 @@ def __init__(self, wifi_manager: WifiManager):
# Tethering
self._tethering_action = ToggleAction(initial_state=False)
- tethering_btn = ListItem(title=tr("Enable Tethering"), action_item=self._tethering_action, callback=self._toggle_tethering)
+ tethering_btn = ListItem(lambda: tr("Enable Tethering"), action_item=self._tethering_action, callback=self._toggle_tethering)
# Edit tethering password
- self._tethering_password_action = ButtonAction(text=tr("EDIT"))
- tethering_password_btn = ListItem(title=tr("Tethering Password"), action_item=self._tethering_password_action, callback=self._edit_tethering_password)
+ self._tethering_password_action = ButtonAction(lambda: tr("EDIT"))
+ tethering_password_btn = ListItem(lambda: tr("Tethering Password"), action_item=self._tethering_password_action, callback=self._edit_tethering_password)
# Roaming toggle
roaming_enabled = self._params.get_bool("GsmRoaming")
self._roaming_action = ToggleAction(initial_state=roaming_enabled)
- self._roaming_btn = ListItem(title=tr("Enable Roaming"), action_item=self._roaming_action, callback=self._toggle_roaming)
+ self._roaming_btn = ListItem(lambda: tr("Enable Roaming"), action_item=self._roaming_action, callback=self._toggle_roaming)
# Cellular metered toggle
cellular_metered = self._params.get_bool("GsmMetered")
self._cellular_metered_action = ToggleAction(initial_state=cellular_metered)
- self._cellular_metered_btn = ListItem(title=tr("Cellular Metered"), description=tr("Prevent large data uploads when on a metered cellular connection"),
+ self._cellular_metered_btn = ListItem(lambda: tr("Cellular Metered"),
+ description=lambda: tr("Prevent large data uploads when on a metered cellular connection"),
action_item=self._cellular_metered_action, callback=self._toggle_cellular_metered)
# APN setting
- self._apn_btn = button_item(tr("APN Setting"), tr("EDIT"), callback=self._edit_apn)
+ self._apn_btn = button_item(lambda: tr("APN Setting"), lambda: tr("EDIT"), callback=self._edit_apn)
# Wi-Fi metered toggle
- self._wifi_metered_action = MultipleButtonAction([tr("default"), tr("metered"), tr("unmetered")], 255, 0, callback=self._toggle_wifi_metered)
- wifi_metered_btn = ListItem(title=tr("Wi-Fi Network Metered"), description=tr("Prevent large data uploads when on a metered Wi-Fi connection"),
+ self._wifi_metered_action = MultipleButtonAction([lambda: tr("default"), lambda: tr("metered"), lambda: tr("unmetered")], 255, 0,
+ callback=self._toggle_wifi_metered)
+ wifi_metered_btn = ListItem(lambda: tr("Wi-Fi Network Metered"), description=lambda: tr("Prevent large data uploads when on a metered Wi-Fi connection"),
action_item=self._wifi_metered_action)
items: list[Widget] = [
tethering_btn,
tethering_password_btn,
- text_item(tr("IP Address"), lambda: self._wifi_manager.ipv4_address),
+ text_item(lambda: tr("IP Address"), lambda: self._wifi_manager.ipv4_address),
self._roaming_btn,
self._apn_btn,
self._cellular_metered_btn,
wifi_metered_btn,
- button_item(tr("Hidden Network"), tr("CONNECT"), callback=self._connect_to_hidden_network),
+ button_item(lambda: tr("Hidden Network"), lambda: tr("CONNECT"), callback=self._connect_to_hidden_network),
]
self._scroller = Scroller(items, line_separator=True, spacing=0)
@@ -282,7 +284,6 @@ def __init__(self, wifi_manager: WifiManager):
self._networks: list[Network] = []
self._networks_buttons: dict[str, Button] = {}
self._forget_networks_buttons: dict[str, Button] = {}
- self._confirm_dialog = ConfirmDialog("", tr("Forget"), tr("Cancel"))
self._wifi_manager.set_callbacks(need_auth=self._on_need_auth,
activated=self._on_activated,
@@ -314,9 +315,10 @@ def _render(self, rect: rl.Rectangle):
self.keyboard.reset(min_text_size=MIN_PASSWORD_LENGTH)
gui_app.set_modal_overlay(self.keyboard, lambda result: self._on_password_entered(cast(Network, self._state_network), result))
elif self.state == UIState.SHOW_FORGET_CONFIRM and self._state_network:
- self._confirm_dialog.set_text(tr("Forget Wi-Fi Network \"{}\"?").format(self._state_network.ssid))
- self._confirm_dialog.reset()
- gui_app.set_modal_overlay(self._confirm_dialog, callback=lambda result: self.on_forgot_confirm_finished(self._state_network, result))
+ confirm_dialog = ConfirmDialog("", tr("Forget"), tr("Cancel"))
+ confirm_dialog.set_text(tr("Forget Wi-Fi Network \"{}\"?").format(self._state_network.ssid))
+ confirm_dialog.reset()
+ gui_app.set_modal_overlay(confirm_dialog, callback=lambda result: self.on_forgot_confirm_finished(self._state_network, result))
else:
self._draw_network_list(rect)