diff --git a/selfdrive/controls/lib/alertmanager.py b/selfdrive/controls/lib/alertmanager.py
index cb878483de..f32e838333 100644
--- a/selfdrive/controls/lib/alertmanager.py
+++ b/selfdrive/controls/lib/alertmanager.py
@@ -16,10 +16,8 @@ with open(os.path.join(BASEDIR, "selfdrive/controls/lib/alerts_offroad.json")) a
def set_offroad_alert(alert: str, show_alert: bool, extra_text: Optional[str] = None) -> None:
if show_alert:
- a = OFFROAD_ALERTS[alert]
- if extra_text is not None:
- a = copy.copy(OFFROAD_ALERTS[alert])
- a['text'] += extra_text
+ a = copy.copy(OFFROAD_ALERTS[alert])
+ a['extra'] = extra_text or ''
Params().put(alert, json.dumps(a))
else:
Params().remove(alert)
diff --git a/selfdrive/controls/lib/alerts_offroad.json b/selfdrive/controls/lib/alerts_offroad.json
index 9226c94d85..62ab3d95a5 100644
--- a/selfdrive/controls/lib/alerts_offroad.json
+++ b/selfdrive/controls/lib/alerts_offroad.json
@@ -4,18 +4,18 @@
"severity": 1
},
"Offroad_ConnectivityNeededPrompt": {
- "text": "Immediately connect to the internet to check for updates. If you do not connect to the internet, openpilot won't engage in ",
+ "text": "Immediately connect to the internet to check for updates. If you do not connect to the internet, openpilot won't engage in %1",
"severity": 0,
- "_comment": "Append the number of days at the end of the text"
+ "_comment": "Set extra field to number of days"
},
"Offroad_ConnectivityNeeded": {
"text": "Connect to internet to check for updates. openpilot won't automatically start until it connects to internet to check for updates.",
"severity": 1
},
"Offroad_UpdateFailed": {
- "text": "Unable to download updates\n",
+ "text": "Unable to download updates\n%1",
"severity": 1,
- "_comment": "Append the command and error to the text."
+ "_comment": "Set extra field to the failed reason."
},
"Offroad_InvalidTime": {
"text": "Invalid date and time settings, system won't start. Connect to internet to set time.",
diff --git a/selfdrive/controls/tests/test_alerts.py b/selfdrive/controls/tests/test_alerts.py
index a72ca4f080..c0d70b3b6f 100755
--- a/selfdrive/controls/tests/test_alerts.py
+++ b/selfdrive/controls/tests/test_alerts.py
@@ -1,4 +1,5 @@
#!/usr/bin/env python3
+import copy
import json
import os
import unittest
@@ -109,8 +110,9 @@ class TestAlerts(unittest.TestCase):
params = Params()
for a in self.offroad_alerts:
# set the alert
- alert = self.offroad_alerts[a]
+ alert = copy.copy(self.offroad_alerts[a])
set_offroad_alert(a, True)
+ alert['extra'] = ''
self.assertTrue(json.dumps(alert) == params.get(a, encoding='utf8'))
# then delete it
@@ -125,9 +127,9 @@ class TestAlerts(unittest.TestCase):
alert = self.offroad_alerts[a]
set_offroad_alert(a, True, extra_text="a"*i)
- expected_txt = alert['text'] + "a"*i
- written_txt = json.loads(params.get(a, encoding='utf8'))['text']
- self.assertTrue(expected_txt == written_txt)
+ written_alert = json.loads(params.get(a, encoding='utf8'))
+ self.assertTrue("a"*i == written_alert['extra'])
+ self.assertTrue(alert["text"] == written_alert['text'])
if __name__ == "__main__":
unittest.main()
diff --git a/selfdrive/ui/.gitignore b/selfdrive/ui/.gitignore
index 60eb4b43c7..cb95652191 100644
--- a/selfdrive/ui/.gitignore
+++ b/selfdrive/ui/.gitignore
@@ -12,3 +12,4 @@ qt/setup/setup
qt/setup/reset
qt/setup/wifi
qt/setup/updater
+translations/alerts_generated.h
diff --git a/selfdrive/ui/qt/widgets/offroad_alerts.cc b/selfdrive/ui/qt/widgets/offroad_alerts.cc
index ceb823fb2b..cdfa86c8eb 100644
--- a/selfdrive/ui/qt/widgets/offroad_alerts.cc
+++ b/selfdrive/ui/qt/widgets/offroad_alerts.cc
@@ -92,7 +92,11 @@ int OffroadAlert::refresh() {
std::string bytes = params.get(key);
if (bytes.size()) {
auto doc_par = QJsonDocument::fromJson(bytes.c_str());
- text = doc_par["text"].toString();
+ text = tr(doc_par["text"].toString().toUtf8().data());
+ auto extra = doc_par["extra"].toString();
+ if (!extra.isEmpty()) {
+ text = text.arg(extra);
+ }
}
label->setText(text);
label->setVisible(!text.isEmpty());
diff --git a/selfdrive/ui/translations/main_de.ts b/selfdrive/ui/translations/main_de.ts
index 55b66c132e..18ce67ee96 100644
--- a/selfdrive/ui/translations/main_de.ts
+++ b/selfdrive/ui/translations/main_de.ts
@@ -435,6 +435,62 @@ location set
Falsches Passwort
+
+ OffroadAlert
+
+ Device temperature too high. System won't start.
+
+
+
+ Immediately connect to the internet to check for updates. If you do not connect to the internet, openpilot won't engage in %1
+
+
+
+ Connect to internet to check for updates. openpilot won't automatically start until it connects to internet to check for updates.
+
+
+
+ Unable to download updates
+%1
+
+
+
+ Invalid date and time settings, system won't start. Connect to internet to set time.
+
+
+
+ Taking camera snapshots. System won't start until finished.
+
+
+
+ An update to your device's operating system is downloading in the background. You will be prompted to update when it's ready to install.
+
+
+
+ Device failed to register. It will not connect to or upload to comma.ai servers, and receives no support from comma.ai. If this is an official device, visit https://comma.ai/support.
+
+
+
+ NVMe drive not mounted.
+
+
+
+ Unsupported NVMe drive detected. Device may draw significantly more power and overheat due to the unsupported NVMe.
+
+
+
+ openpilot was unable to identify your car. Your car is either unsupported or its ECUs are not recognized. Please submit a pull request to add the firmware versions to the proper vehicle. Need help? Join discord.comma.ai.
+
+
+
+ openpilot was unable to identify your car. Check integrity of cables and ensure all connections are secure, particularly that the comma power is fully inserted in the OBD-II port of the vehicle. Need help? Join discord.comma.ai.
+
+
+
+ openpilot detected a change in the device's mounting position. Ensure the device is fully seated in the mount and the mount is firmly secured to the windshield.
+
+
+OffroadHome
diff --git a/selfdrive/ui/translations/main_ja.ts b/selfdrive/ui/translations/main_ja.ts
index 162c92c402..ad430615de 100644
--- a/selfdrive/ui/translations/main_ja.ts
+++ b/selfdrive/ui/translations/main_ja.ts
@@ -436,6 +436,62 @@ location set
パスワードが間違っています
+
+ OffroadAlert
+
+ Device temperature too high. System won't start.
+
+
+
+ Immediately connect to the internet to check for updates. If you do not connect to the internet, openpilot won't engage in %1
+
+
+
+ Connect to internet to check for updates. openpilot won't automatically start until it connects to internet to check for updates.
+
+
+
+ Unable to download updates
+%1
+
+
+
+ Invalid date and time settings, system won't start. Connect to internet to set time.
+
+
+
+ Taking camera snapshots. System won't start until finished.
+
+
+
+ An update to your device's operating system is downloading in the background. You will be prompted to update when it's ready to install.
+
+
+
+ Device failed to register. It will not connect to or upload to comma.ai servers, and receives no support from comma.ai. If this is an official device, visit https://comma.ai/support.
+
+
+
+ NVMe drive not mounted.
+
+
+
+ Unsupported NVMe drive detected. Device may draw significantly more power and overheat due to the unsupported NVMe.
+
+
+
+ openpilot was unable to identify your car. Your car is either unsupported or its ECUs are not recognized. Please submit a pull request to add the firmware versions to the proper vehicle. Need help? Join discord.comma.ai.
+
+
+
+ openpilot was unable to identify your car. Check integrity of cables and ensure all connections are secure, particularly that the comma power is fully inserted in the OBD-II port of the vehicle. Need help? Join discord.comma.ai.
+
+
+
+ openpilot detected a change in the device's mounting position. Ensure the device is fully seated in the mount and the mount is firmly secured to the windshield.
+
+
+OffroadHome
diff --git a/selfdrive/ui/translations/main_ko.ts b/selfdrive/ui/translations/main_ko.ts
index ef5a89750d..3e427779e1 100644
--- a/selfdrive/ui/translations/main_ko.ts
+++ b/selfdrive/ui/translations/main_ko.ts
@@ -436,6 +436,62 @@ location set
비밀번호가 틀렸습니다
+
+ OffroadAlert
+
+ Device temperature too high. System won't start.
+
+
+
+ Immediately connect to the internet to check for updates. If you do not connect to the internet, openpilot won't engage in %1
+
+
+
+ Connect to internet to check for updates. openpilot won't automatically start until it connects to internet to check for updates.
+
+
+
+ Unable to download updates
+%1
+
+
+
+ Invalid date and time settings, system won't start. Connect to internet to set time.
+
+
+
+ Taking camera snapshots. System won't start until finished.
+
+
+
+ An update to your device's operating system is downloading in the background. You will be prompted to update when it's ready to install.
+
+
+
+ Device failed to register. It will not connect to or upload to comma.ai servers, and receives no support from comma.ai. If this is an official device, visit https://comma.ai/support.
+
+
+
+ NVMe drive not mounted.
+
+
+
+ Unsupported NVMe drive detected. Device may draw significantly more power and overheat due to the unsupported NVMe.
+
+
+
+ openpilot was unable to identify your car. Your car is either unsupported or its ECUs are not recognized. Please submit a pull request to add the firmware versions to the proper vehicle. Need help? Join discord.comma.ai.
+
+
+
+ openpilot was unable to identify your car. Check integrity of cables and ensure all connections are secure, particularly that the comma power is fully inserted in the OBD-II port of the vehicle. Need help? Join discord.comma.ai.
+
+
+
+ openpilot detected a change in the device's mounting position. Ensure the device is fully seated in the mount and the mount is firmly secured to the windshield.
+
+
+OffroadHome
diff --git a/selfdrive/ui/translations/main_pt-BR.ts b/selfdrive/ui/translations/main_pt-BR.ts
index 7d540b7071..d7ca16c2c8 100644
--- a/selfdrive/ui/translations/main_pt-BR.ts
+++ b/selfdrive/ui/translations/main_pt-BR.ts
@@ -437,6 +437,62 @@ trabalho definido
Senha incorreta
+
+ OffroadAlert
+
+ Device temperature too high. System won't start.
+
+
+
+ Immediately connect to the internet to check for updates. If you do not connect to the internet, openpilot won't engage in %1
+
+
+
+ Connect to internet to check for updates. openpilot won't automatically start until it connects to internet to check for updates.
+
+
+
+ Unable to download updates
+%1
+
+
+
+ Invalid date and time settings, system won't start. Connect to internet to set time.
+
+
+
+ Taking camera snapshots. System won't start until finished.
+
+
+
+ An update to your device's operating system is downloading in the background. You will be prompted to update when it's ready to install.
+
+
+
+ Device failed to register. It will not connect to or upload to comma.ai servers, and receives no support from comma.ai. If this is an official device, visit https://comma.ai/support.
+
+
+
+ NVMe drive not mounted.
+
+
+
+ Unsupported NVMe drive detected. Device may draw significantly more power and overheat due to the unsupported NVMe.
+
+
+
+ openpilot was unable to identify your car. Your car is either unsupported or its ECUs are not recognized. Please submit a pull request to add the firmware versions to the proper vehicle. Need help? Join discord.comma.ai.
+
+
+
+ openpilot was unable to identify your car. Check integrity of cables and ensure all connections are secure, particularly that the comma power is fully inserted in the OBD-II port of the vehicle. Need help? Join discord.comma.ai.
+
+
+
+ openpilot detected a change in the device's mounting position. Ensure the device is fully seated in the mount and the mount is firmly secured to the windshield.
+
+
+OffroadHome
diff --git a/selfdrive/ui/translations/main_zh-CHS.ts b/selfdrive/ui/translations/main_zh-CHS.ts
index 4a92d963d2..c7ddca8998 100644
--- a/selfdrive/ui/translations/main_zh-CHS.ts
+++ b/selfdrive/ui/translations/main_zh-CHS.ts
@@ -434,6 +434,62 @@ location set
密码错误
+
+ OffroadAlert
+
+ Device temperature too high. System won't start.
+
+
+
+ Immediately connect to the internet to check for updates. If you do not connect to the internet, openpilot won't engage in %1
+
+
+
+ Connect to internet to check for updates. openpilot won't automatically start until it connects to internet to check for updates.
+
+
+
+ Unable to download updates
+%1
+
+
+
+ Invalid date and time settings, system won't start. Connect to internet to set time.
+
+
+
+ Taking camera snapshots. System won't start until finished.
+
+
+
+ An update to your device's operating system is downloading in the background. You will be prompted to update when it's ready to install.
+
+
+
+ Device failed to register. It will not connect to or upload to comma.ai servers, and receives no support from comma.ai. If this is an official device, visit https://comma.ai/support.
+
+
+
+ NVMe drive not mounted.
+
+
+
+ Unsupported NVMe drive detected. Device may draw significantly more power and overheat due to the unsupported NVMe.
+
+
+
+ openpilot was unable to identify your car. Your car is either unsupported or its ECUs are not recognized. Please submit a pull request to add the firmware versions to the proper vehicle. Need help? Join discord.comma.ai.
+
+
+
+ openpilot was unable to identify your car. Check integrity of cables and ensure all connections are secure, particularly that the comma power is fully inserted in the OBD-II port of the vehicle. Need help? Join discord.comma.ai.
+
+
+
+ openpilot detected a change in the device's mounting position. Ensure the device is fully seated in the mount and the mount is firmly secured to the windshield.
+
+
+OffroadHome
diff --git a/selfdrive/ui/translations/main_zh-CHT.ts b/selfdrive/ui/translations/main_zh-CHT.ts
index 01fab62feb..06eca034f2 100644
--- a/selfdrive/ui/translations/main_zh-CHT.ts
+++ b/selfdrive/ui/translations/main_zh-CHT.ts
@@ -436,6 +436,62 @@ location set
密碼錯誤
+
+ OffroadAlert
+
+ Device temperature too high. System won't start.
+
+
+
+ Immediately connect to the internet to check for updates. If you do not connect to the internet, openpilot won't engage in %1
+
+
+
+ Connect to internet to check for updates. openpilot won't automatically start until it connects to internet to check for updates.
+
+
+
+ Unable to download updates
+%1
+
+
+
+ Invalid date and time settings, system won't start. Connect to internet to set time.
+
+
+
+ Taking camera snapshots. System won't start until finished.
+
+
+
+ An update to your device's operating system is downloading in the background. You will be prompted to update when it's ready to install.
+
+
+
+ Device failed to register. It will not connect to or upload to comma.ai servers, and receives no support from comma.ai. If this is an official device, visit https://comma.ai/support.
+
+
+
+ NVMe drive not mounted.
+
+
+
+ Unsupported NVMe drive detected. Device may draw significantly more power and overheat due to the unsupported NVMe.
+
+
+
+ openpilot was unable to identify your car. Your car is either unsupported or its ECUs are not recognized. Please submit a pull request to add the firmware versions to the proper vehicle. Need help? Join discord.comma.ai.
+
+
+
+ openpilot was unable to identify your car. Check integrity of cables and ensure all connections are secure, particularly that the comma power is fully inserted in the OBD-II port of the vehicle. Need help? Join discord.comma.ai.
+
+
+
+ openpilot detected a change in the device's mounting position. Ensure the device is fully seated in the mount and the mount is firmly secured to the windshield.
+
+
+OffroadHome
diff --git a/selfdrive/ui/update_translations.py b/selfdrive/ui/update_translations.py
index 5964eb49dc..3de6e0f27c 100755
--- a/selfdrive/ui/update_translations.py
+++ b/selfdrive/ui/update_translations.py
@@ -8,9 +8,23 @@ from common.basedir import BASEDIR
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")
+TRANSLATIONS_INCLUDE_FILE = os.path.join(TRANSLATIONS_DIR, "alerts_generated.h")
+def generate_translations_include():
+ # offroad alerts
+ # TODO translate events from selfdrive/controls/lib/events.py
+ content = "// THIS IS AN AUTOGENERATED FILE, PLEASE EDIT alerts_offroad.json\n"
+ with open(os.path.join(BASEDIR, "selfdrive/controls/lib/alerts_offroad.json")) as f:
+ for alert in json.load(f).values():
+ content += f'QT_TRANSLATE_NOOP("OffroadAlert", R"({alert["text"]})");\n'
+
+ with open(TRANSLATIONS_INCLUDE_FILE, "w") as f:
+ f.write(content)
+
def update_translations(vanish=False, plural_only=None, translations_dir=TRANSLATIONS_DIR):
+ generate_translations_include()
+
if plural_only is None:
plural_only = []