UI: Internationalization support (#21212)

* rough multiple language demo

* more wrappings

* stash

* add some bad translations

* updates

* map from french to spanish still has same problem of needing to call setText on everything

* add files

* restart UI

* use return code

* relative path

* more translations

* don't loop restart

* Toggle and prime translations

* try on device

* try QComboBox with readable style

* stash

* not yet scrollable

* stash

* dynamic translations (doesn't work for dynamic widget strings yet)

* clean up multiple option selector

* store languages in json

* try transparent

* Try transparent popup

* see how this looks

* tweaks

* clean up

* update names

* Add Chinese (Simplified) translations

* Do missing French translations

* unit tests caught that :)

* fix test

* fix other test (on PC)

* add entries to dialog to test

* add cancel button, clean up a bit

* just chinese

* some clean up

* use quotes

* clean up

* Just quit, set timeout to 0

* half a second

* use exitcode

* don't print if it's expected

* this comment is outdated

* update translations

* Update translations

* re-order input classes

* Update line numbers

* use enabled property for button style

* Get rid of ListWidget

* Update line numbers

* Log failed to load language

* Log failed to load language

* Move to utils and fix english logging

extra line

* Update translations

* spacing

* looks a bit better

* try this instead of exitcode

fixes

fix

* only one function

* comment

* Update line numbers

* fixup some japanese translations

* clean up multi option dialog

* Update line numbers
pull/25089/head
Shane Smiskol 3 years ago committed by GitHub
parent 94c8717cac
commit 949de4d2b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      common/params.cc
  2. 5
      common/watchdog.cc
  3. 4
      common/watchdog.h
  4. 9
      selfdrive/ui/main.cc
  5. 14
      selfdrive/ui/qt/offroad/settings.cc
  6. 16
      selfdrive/ui/qt/util.cc
  7. 1
      selfdrive/ui/qt/util.h
  8. 86
      selfdrive/ui/qt/widgets/input.cc
  9. 9
      selfdrive/ui/qt/widgets/input.h
  10. 1
      selfdrive/ui/tests/test_translations.cc
  11. 6
      selfdrive/ui/translations/main_ja.ts
  12. BIN
      selfdrive/ui/translations/main_ko.qm
  13. 167
      selfdrive/ui/translations/main_ko.ts
  14. BIN
      selfdrive/ui/translations/main_zh-CHS.qm
  15. 167
      selfdrive/ui/translations/main_zh-CHS.ts
  16. BIN
      selfdrive/ui/translations/main_zh-CHT.qm
  17. 167
      selfdrive/ui/translations/main_zh-CHT.ts
  18. 2
      selfdrive/ui/ui.cc
  19. 2
      selfdrive/ui/update_translations.py

@ -129,6 +129,7 @@ std::unordered_map<std::string, uint32_t> keys = {
{"IsUpdateAvailable", CLEAR_ON_MANAGER_START}, {"IsUpdateAvailable", CLEAR_ON_MANAGER_START},
{"JoystickDebugMode", CLEAR_ON_MANAGER_START | CLEAR_ON_IGNITION_OFF}, {"JoystickDebugMode", CLEAR_ON_MANAGER_START | CLEAR_ON_IGNITION_OFF},
{"LaikadEphemeris", PERSISTENT | DONT_LOG}, {"LaikadEphemeris", PERSISTENT | DONT_LOG},
{"LanguageSetting", PERSISTENT},
{"LastAthenaPingTime", CLEAR_ON_MANAGER_START}, {"LastAthenaPingTime", CLEAR_ON_MANAGER_START},
{"LastGPSPosition", PERSISTENT}, {"LastGPSPosition", PERSISTENT},
{"LastManagerExitReason", CLEAR_ON_MANAGER_START}, {"LastManagerExitReason", CLEAR_ON_MANAGER_START},

@ -1,12 +1,9 @@
#include "common/watchdog.h" #include "common/watchdog.h"
#include "common/timing.h"
#include "common/util.h" #include "common/util.h"
const std::string watchdog_fn_prefix = "/dev/shm/wd_"; // + <pid> const std::string watchdog_fn_prefix = "/dev/shm/wd_"; // + <pid>
bool watchdog_kick() { bool watchdog_kick(uint64_t ts) {
static std::string fn = watchdog_fn_prefix + std::to_string(getpid()); static std::string fn = watchdog_fn_prefix + std::to_string(getpid());
uint64_t ts = nanos_since_boot();
return util::write_file(fn.c_str(), &ts, sizeof(ts), O_WRONLY | O_CREAT) > 0; return util::write_file(fn.c_str(), &ts, sizeof(ts), O_WRONLY | O_CREAT) > 0;
} }

@ -1,3 +1,5 @@
#pragma once #pragma once
bool watchdog_kick(); #include <cstdint>
bool watchdog_kick(uint64_t ts);

@ -1,6 +1,7 @@
#include <sys/resource.h> #include <sys/resource.h>
#include <QApplication> #include <QApplication>
#include <QTranslator>
#include "system/hardware/hw.h" #include "system/hardware/hw.h"
#include "selfdrive/ui/qt/qt_window.h" #include "selfdrive/ui/qt/qt_window.h"
@ -13,7 +14,15 @@ int main(int argc, char *argv[]) {
qInstallMessageHandler(swagLogMessageHandler); qInstallMessageHandler(swagLogMessageHandler);
initApp(argc, argv); initApp(argc, argv);
QTranslator translator;
QString translation_file = QString::fromStdString(Params().get("LanguageSetting"));
if (!translator.load(translation_file, "translations") && translation_file.length()) {
qCritical() << "Failed to load translation file:" << translation_file;
}
QApplication a(argc, argv); QApplication a(argc, argv);
a.installTranslator(&translator);
MainWindow w; MainWindow w;
setMainWindow(&w); setMainWindow(&w);
a.installEventFilter(&w); a.installEventFilter(&w);

@ -13,6 +13,7 @@
#endif #endif
#include "common/params.h" #include "common/params.h"
#include "common/watchdog.h"
#include "common/util.h" #include "common/util.h"
#include "system/hardware/hw.h" #include "system/hardware/hw.h"
#include "selfdrive/ui/qt/widgets/controls.h" #include "selfdrive/ui/qt/widgets/controls.h"
@ -133,6 +134,19 @@ DevicePanel::DevicePanel(SettingsWindow *parent) : ListWidget(parent) {
addItem(regulatoryBtn); addItem(regulatoryBtn);
} }
auto translateBtn = new ButtonControl(tr("Change Language"), tr("CHANGE"), "");
connect(translateBtn, &ButtonControl::clicked, [=]() {
QMap<QString, QString> langs = getSupportedLanguages();
QString selection = MultiOptionDialog::getSelection(tr("Select a language"), langs.keys(), this);
if (!selection.isEmpty()) {
// put language setting, exit Qt UI, and trigger fast restart
Params().put("LanguageSetting", langs[selection].toStdString());
qApp->exit(18);
watchdog_kick(0);
}
});
addItem(translateBtn);
QObject::connect(uiState(), &UIState::offroadTransition, [=](bool offroad) { QObject::connect(uiState(), &UIState::offroadTransition, [=](bool offroad) {
for (auto btn : findChildren<ButtonControl *>()) { for (auto btn : findChildren<ButtonControl *>()) {
btn->setEnabled(offroad); btn->setEnabled(offroad);

@ -1,6 +1,9 @@
#include "selfdrive/ui/qt/util.h" #include "selfdrive/ui/qt/util.h"
#include <QApplication> #include <QApplication>
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QLayoutItem> #include <QLayoutItem>
#include <QStyleOption> #include <QStyleOption>
#include <QPainterPath> #include <QPainterPath>
@ -36,6 +39,19 @@ std::optional<QString> getDongleId() {
} }
} }
QMap<QString, QString> getSupportedLanguages() {
QFile f("translations/languages.json");
f.open(QIODevice::ReadOnly | QIODevice::Text);
QString val = f.readAll();
QJsonObject obj = QJsonDocument::fromJson(val.toUtf8()).object();
QMap<QString, QString> map;
for (auto key : obj.keys()) {
map[key] = obj[key].toString();
}
return map;
}
void configFont(QPainter &p, const QString &family, int size, const QString &style) { void configFont(QPainter &p, const QString &family, int size, const QString &style) {
QFont f(family); QFont f(family);
f.setPixelSize(size); f.setPixelSize(size);

@ -14,6 +14,7 @@ QString getBrand();
QString getBrandVersion(); QString getBrandVersion();
QString getUserAgent(); QString getUserAgent();
std::optional<QString> getDongleId(); std::optional<QString> getDongleId();
QMap<QString, QString> getSupportedLanguages();
void configFont(QPainter &p, const QString &family, int size, const QString &style); void configFont(QPainter &p, const QString &family, int size, const QString &style);
void clearLayout(QLayout* layout); void clearLayout(QLayout* layout);
void setQtSurfaceFormat(); void setQtSurfaceFormat();

@ -1,6 +1,7 @@
#include "selfdrive/ui/qt/widgets/input.h" #include "selfdrive/ui/qt/widgets/input.h"
#include <QPushButton> #include <QPushButton>
#include <QButtonGroup>
#include "system/hardware/hw.h" #include "system/hardware/hw.h"
#include "selfdrive/ui/qt/util.h" #include "selfdrive/ui/qt/util.h"
@ -257,3 +258,88 @@ bool RichTextDialog::alert(const QString &prompt_text, QWidget *parent) {
auto d = RichTextDialog(prompt_text, tr("Ok"), parent); auto d = RichTextDialog(prompt_text, tr("Ok"), parent);
return d.exec(); return d.exec();
} }
// MultiOptionDialog
MultiOptionDialog::MultiOptionDialog(const QString &prompt_text, QStringList l, QWidget *parent) : QDialogBase(parent) {
QFrame *container = new QFrame(this);
container->setStyleSheet(R"(
QFrame { background-color: #1B1B1B; }
#confirm_btn[enabled="false"] { background-color: #2B2B2B; }
#confirm_btn:enabled { background-color: #465BEA; }
#confirm_btn:enabled:pressed { background-color: #3049F4; }
)");
QVBoxLayout *main_layout = new QVBoxLayout(container);
main_layout->setContentsMargins(55, 50, 55, 50);
QLabel *title = new QLabel(prompt_text, this);
title->setStyleSheet("font-size: 70px; font-weight: 500;");
main_layout->addWidget(title, 0, Qt::AlignLeft | Qt::AlignTop);
main_layout->addSpacing(25);
QWidget *listWidget = new QWidget(this);
QVBoxLayout *listLayout = new QVBoxLayout(listWidget);
listLayout->setSpacing(20);
listWidget->setStyleSheet(R"(
QPushButton {
height: 135;
padding: 0px 50px;
text-align: left;
font-size: 55px;
font-weight: 300;
border-radius: 10px;
background-color: #4F4F4F;
}
QPushButton:checked { background-color: #465BEA; }
)");
QButtonGroup *group = new QButtonGroup(listWidget);
group->setExclusive(true);
QPushButton *confirm_btn = new QPushButton(tr("Select"));
confirm_btn->setObjectName("confirm_btn");
confirm_btn->setEnabled(false);
for (QString &s : l) {
QPushButton *selectionLabel = new QPushButton(s);
selectionLabel->setCheckable(true);
QObject::connect(selectionLabel, &QPushButton::toggled, [=](bool checked) {
if (checked) selection = s;
confirm_btn->setEnabled(true);
});
group->addButton(selectionLabel);
listLayout->addWidget(selectionLabel);
}
ScrollView *scroll_view = new ScrollView(listWidget, this);
scroll_view->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
main_layout->addWidget(scroll_view);
main_layout->addStretch(1);
main_layout->addSpacing(35);
// cancel + confirm buttons
QHBoxLayout *blayout = new QHBoxLayout;
main_layout->addLayout(blayout);
blayout->setSpacing(50);
QPushButton *cancel_btn = new QPushButton(tr("Cancel"));
QObject::connect(cancel_btn, &QPushButton::clicked, this, &ConfirmationDialog::reject);
QObject::connect(confirm_btn, &QPushButton::clicked, this, &ConfirmationDialog::accept);
blayout->addWidget(cancel_btn);
blayout->addWidget(confirm_btn);
QVBoxLayout *outer_layout = new QVBoxLayout(this);
outer_layout->setContentsMargins(50, 50, 50, 50);
outer_layout->addWidget(container);
}
QString MultiOptionDialog::getSelection(const QString &prompt_text, const QStringList l, QWidget *parent) {
MultiOptionDialog d = MultiOptionDialog(prompt_text, l, parent);
if (d.exec()) {
return d.selection;
}
return "";
}

@ -68,3 +68,12 @@ public:
explicit RichTextDialog(const QString &prompt_text, const QString &btn_text, QWidget* parent); explicit RichTextDialog(const QString &prompt_text, const QString &btn_text, QWidget* parent);
static bool alert(const QString &prompt_text, QWidget *parent); static bool alert(const QString &prompt_text, QWidget *parent);
}; };
class MultiOptionDialog : public QDialogBase {
Q_OBJECT
public:
explicit MultiOptionDialog(const QString &prompt_text, const QStringList l, QWidget *parent);
static QString getSelection(const QString &prompt_text, const QStringList l, QWidget *parent);
QString selection;
};

@ -41,6 +41,7 @@ void checkWidgetTrWrap(MainWindow &w) {
// Tests all strings in the UI are wrapped with tr() // Tests all strings in the UI are wrapped with tr()
TEST_CASE("UI: test all strings wrapped") { TEST_CASE("UI: test all strings wrapped") {
Params().remove("LanguageSetting");
Params().remove("HardwareSerial"); Params().remove("HardwareSerial");
Params().remove("DongleId"); Params().remove("DongleId");
qputenv("TICI", "1"); qputenv("TICI", "1");

@ -528,12 +528,12 @@ location set</source>
<message> <message>
<location filename="../qt/widgets/prime.cc" line="123"/> <location filename="../qt/widgets/prime.cc" line="123"/>
<source> SUBSCRIBED</source> <source> SUBSCRIBED</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/widgets/prime.cc" line="129"/> <location filename="../qt/widgets/prime.cc" line="129"/>
<source>comma prime</source> <source>comma prime</source>
<translation></translation> <translation>comma prime</translation>
</message> </message>
<message> <message>
<location filename="../qt/widgets/prime.cc" line="135"/> <location filename="../qt/widgets/prime.cc" line="135"/>
@ -543,7 +543,7 @@ location set</source>
<message> <message>
<location filename="../qt/widgets/prime.cc" line="148"/> <location filename="../qt/widgets/prime.cc" line="148"/>
<source>COMMA POINTS</source> <source>COMMA POINTS</source>
<translation></translation> <translation>COMMA POINTS</translation>
</message> </message>
</context> </context>
<context> <context>

@ -76,13 +76,13 @@
<context> <context>
<name>ConfirmationDialog</name> <name>ConfirmationDialog</name>
<message> <message>
<location filename="../qt/widgets/input.cc" line="220"/> <location filename="../qt/widgets/input.cc" line="221"/>
<location filename="../qt/widgets/input.cc" line="225"/> <location filename="../qt/widgets/input.cc" line="226"/>
<source>Ok</source> <source>Ok</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/widgets/input.cc" line="225"/> <location filename="../qt/widgets/input.cc" line="226"/>
<source>Cancel</source> <source>Cancel</source>
<translation></translation> <translation></translation>
</message> </message>
@ -108,149 +108,152 @@
<context> <context>
<name>DevicePanel</name> <name>DevicePanel</name>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="98"/> <location filename="../qt/offroad/settings.cc" line="99"/>
<source>Dongle ID</source> <source>Dongle ID</source>
<translation>Dongle ID</translation> <translation>Dongle ID</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="98"/> <location filename="../qt/offroad/settings.cc" line="99"/>
<source>N/A</source> <source>N/A</source>
<translation>N/A</translation> <translation>N/A</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="99"/> <location filename="../qt/offroad/settings.cc" line="100"/>
<source>Serial</source> <source>Serial</source>
<translation>Serial</translation> <translation>Serial</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="103"/> <location filename="../qt/offroad/settings.cc" line="104"/>
<source>Driver Camera</source> <source>Driver Camera</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="103"/> <location filename="../qt/offroad/settings.cc" line="104"/>
<source>PREVIEW</source> <source>PREVIEW</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="104"/> <location filename="../qt/offroad/settings.cc" line="105"/>
<source>Preview the driver facing camera to help optimize device mounting position for best driver monitoring experience. (vehicle must be off)</source> <source>Preview the driver facing camera to help optimize device mounting position for best driver monitoring experience. (vehicle must be off)</source>
<translation> . ( )</translation> <translation> . ( )</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="108"/> <location filename="../qt/offroad/settings.cc" line="109"/>
<source>Reset Calibration</source> <source>Reset Calibration</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="108"/> <location filename="../qt/offroad/settings.cc" line="109"/>
<source>RESET</source> <source>RESET</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="111"/> <location filename="../qt/offroad/settings.cc" line="112"/>
<source>Are you sure you want to reset calibration?</source> <source>Are you sure you want to reset calibration?</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="118"/> <location filename="../qt/offroad/settings.cc" line="119"/>
<source>Review Training Guide</source> <source>Review Training Guide</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="118"/> <location filename="../qt/offroad/settings.cc" line="119"/>
<source>REVIEW</source> <source>REVIEW</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="118"/> <location filename="../qt/offroad/settings.cc" line="119"/>
<source>Review the rules, features, and limitations of openpilot</source> <source>Review the rules, features, and limitations of openpilot</source>
<translation>openpilot의 , , </translation> <translation>openpilot의 , , </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="120"/> <location filename="../qt/offroad/settings.cc" line="121"/>
<source>Are you sure you want to review the training guide?</source> <source>Are you sure you want to review the training guide?</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="128"/> <location filename="../qt/offroad/settings.cc" line="129"/>
<source>Regulatory</source> <source>Regulatory</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="128"/> <location filename="../qt/offroad/settings.cc" line="129"/>
<source>VIEW</source> <source>VIEW</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="137"/>
<source>Change Language</source> <source>Change Language</source>
<translation type="vanished"></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="137"/>
<source>CHANGE</source> <source>CHANGE</source>
<translation type="vanished"></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="140"/>
<source>Select a language</source> <source>Select a language</source>
<translation type="vanished"></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="146"/> <location filename="../qt/offroad/settings.cc" line="160"/>
<source>Reboot</source> <source>Reboot</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="151"/> <location filename="../qt/offroad/settings.cc" line="165"/>
<source>Power Off</source> <source>Power Off</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="171"/> <location filename="../qt/offroad/settings.cc" line="185"/>
<source>openpilot requires the device to be mounted within 4° left or right and within 5° up or 8° down. openpilot is continuously calibrating, resetting is rarely required.</source> <source>openpilot requires the device to be mounted within 4° left or right and within 5° up or 8° down. openpilot is continuously calibrating, resetting is rarely required.</source>
<translation>openpilot은 4° , 5° 8° . openpilot은 .</translation> <translation>openpilot은 4° , 5° 8° . openpilot은 .</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="182"/> <location filename="../qt/offroad/settings.cc" line="196"/>
<source> Your device is pointed %1° %2 and %3° %4.</source> <source> Your device is pointed %1° %2 and %3° %4.</source>
<translation> %1° %2 %3° %4 .</translation> <translation> %1° %2 %3° %4 .</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="183"/> <location filename="../qt/offroad/settings.cc" line="197"/>
<source>down</source> <source>down</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="183"/> <location filename="../qt/offroad/settings.cc" line="197"/>
<source>up</source> <source>up</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="184"/> <location filename="../qt/offroad/settings.cc" line="198"/>
<source>left</source> <source>left</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="184"/> <location filename="../qt/offroad/settings.cc" line="198"/>
<source>right</source> <source>right</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="195"/> <location filename="../qt/offroad/settings.cc" line="209"/>
<source>Are you sure you want to reboot?</source> <source>Are you sure you want to reboot?</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="202"/> <location filename="../qt/offroad/settings.cc" line="216"/>
<source>Disengage to Reboot</source> <source>Disengage to Reboot</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="208"/> <location filename="../qt/offroad/settings.cc" line="222"/>
<source>Are you sure you want to power off?</source> <source>Are you sure you want to power off?</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="215"/> <location filename="../qt/offroad/settings.cc" line="229"/>
<source>Disengage to Power Off</source> <source>Disengage to Power Off</source>
<translation> </translation> <translation> </translation>
</message> </message>
@ -299,17 +302,17 @@
<context> <context>
<name>InputDialog</name> <name>InputDialog</name>
<message> <message>
<location filename="../qt/widgets/input.cc" line="70"/> <location filename="../qt/widgets/input.cc" line="71"/>
<source>Cancel</source> <source>Cancel</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/widgets/input.cc" line="167"/> <location filename="../qt/widgets/input.cc" line="168"/>
<source>Need at least </source> <source>Need at least </source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/widgets/input.cc" line="167"/> <location filename="../qt/widgets/input.cc" line="168"/>
<source> characters!</source> <source> characters!</source>
<translation> </translation> <translation> </translation>
</message> </message>
@ -389,12 +392,14 @@ location set</source>
<context> <context>
<name>MultiOptionDialog</name> <name>MultiOptionDialog</name>
<message> <message>
<location filename="../qt/widgets/input.cc" line="300"/>
<source>Select</source> <source>Select</source>
<translation type="vanished"></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/widgets/input.cc" line="328"/>
<source>Cancel</source> <source>Cancel</source>
<translation type="vanished"></translation> <translation></translation>
</message> </message>
</context> </context>
<context> <context>
@ -564,27 +569,27 @@ location set</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/util.cc" line="18"/> <location filename="../qt/util.cc" line="21"/>
<source>dashcam</source> <source>dashcam</source>
<translation>dashcam</translation> <translation>dashcam</translation>
</message> </message>
<message> <message>
<location filename="../qt/util.cc" line="18"/> <location filename="../qt/util.cc" line="21"/>
<source>openpilot</source> <source>openpilot</source>
<translation>openpilot</translation> <translation>openpilot</translation>
</message> </message>
<message> <message>
<location filename="../qt/util.cc" line="66"/> <location filename="../qt/util.cc" line="82"/>
<source>%1 minute%2 ago</source> <source>%1 minute%2 ago</source>
<translation>%1 %2 </translation> <translation>%1 %2 </translation>
</message> </message>
<message> <message>
<location filename="../qt/util.cc" line="69"/> <location filename="../qt/util.cc" line="85"/>
<source>%1 hour%2 ago</source> <source>%1 hour%2 ago</source>
<translation>%1 %2 </translation> <translation>%1 %2 </translation>
</message> </message>
<message> <message>
<location filename="../qt/util.cc" line="72"/> <location filename="../qt/util.cc" line="88"/>
<source>%1 day%2 ago</source> <source>%1 day%2 ago</source>
<translation>%1 %2 </translation> <translation>%1 %2 </translation>
</message> </message>
@ -640,7 +645,7 @@ location set</source>
<context> <context>
<name>RichTextDialog</name> <name>RichTextDialog</name>
<message> <message>
<location filename="../qt/widgets/input.cc" line="257"/> <location filename="../qt/widgets/input.cc" line="258"/>
<source>Ok</source> <source>Ok</source>
<translation></translation> <translation></translation>
</message> </message>
@ -648,33 +653,33 @@ location set</source>
<context> <context>
<name>SettingsWindow</name> <name>SettingsWindow</name>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="300"/> <location filename="../qt/offroad/settings.cc" line="314"/>
<source>×</source> <source>×</source>
<translation>×</translation> <translation>×</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="326"/> <location filename="../qt/offroad/settings.cc" line="340"/>
<source>Device</source> <source>Device</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="327"/> <location filename="../qt/offroad/settings.cc" line="341"/>
<location filename="../qt/offroad/settings.cc" line="366"/> <location filename="../qt/offroad/settings.cc" line="380"/>
<source>Network</source> <source>Network</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="328"/> <location filename="../qt/offroad/settings.cc" line="342"/>
<source>Toggles</source> <source>Toggles</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="329"/> <location filename="../qt/offroad/settings.cc" line="343"/>
<source>Software</source> <source>Software</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="334"/> <location filename="../qt/offroad/settings.cc" line="348"/>
<source>Navigation</source> <source>Navigation</source>
<translation></translation> <translation></translation>
</message> </message>
@ -913,68 +918,68 @@ location set</source>
<context> <context>
<name>SoftwarePanel</name> <name>SoftwarePanel</name>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="220"/> <location filename="../qt/offroad/settings.cc" line="234"/>
<source>Git Branch</source> <source>Git Branch</source>
<translation>Git </translation> <translation>Git </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="221"/> <location filename="../qt/offroad/settings.cc" line="235"/>
<source>Git Commit</source> <source>Git Commit</source>
<translation>Git </translation> <translation>Git </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="222"/> <location filename="../qt/offroad/settings.cc" line="236"/>
<source>OS Version</source> <source>OS Version</source>
<translation>OS </translation> <translation>OS </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="223"/> <location filename="../qt/offroad/settings.cc" line="237"/>
<source>Version</source> <source>Version</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="224"/> <location filename="../qt/offroad/settings.cc" line="238"/>
<source>Last Update Check</source> <source>Last Update Check</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="224"/> <location filename="../qt/offroad/settings.cc" line="238"/>
<source>The last time openpilot successfully checked for an update. The updater only runs while the car is off.</source> <source>The last time openpilot successfully checked for an update. The updater only runs while the car is off.</source>
<translation> openpilot에서 . .</translation> <translation> openpilot에서 . .</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="225"/> <location filename="../qt/offroad/settings.cc" line="239"/>
<source>Check for Update</source> <source>Check for Update</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="230"/> <location filename="../qt/offroad/settings.cc" line="244"/>
<source>CHECKING</source> <source>CHECKING</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="237"/> <location filename="../qt/offroad/settings.cc" line="251"/>
<source>Uninstall </source> <source>Uninstall </source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="237"/> <location filename="../qt/offroad/settings.cc" line="251"/>
<source>UNINSTALL</source> <source>UNINSTALL</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="239"/> <location filename="../qt/offroad/settings.cc" line="253"/>
<source>Are you sure you want to uninstall?</source> <source>Are you sure you want to uninstall?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="253"/> <location filename="../qt/offroad/settings.cc" line="267"/>
<source>failed to fetch update</source> <source>failed to fetch update</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="254"/> <location filename="../qt/offroad/settings.cc" line="268"/>
<location filename="../qt/offroad/settings.cc" line="275"/> <location filename="../qt/offroad/settings.cc" line="289"/>
<source>CHECK</source> <source>CHECK</source>
<translation></translation> <translation></translation>
</message> </message>
@ -1062,82 +1067,82 @@ location set</source>
<context> <context>
<name>TogglesPanel</name> <name>TogglesPanel</name>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="32"/> <location filename="../qt/offroad/settings.cc" line="33"/>
<source>Enable openpilot</source> <source>Enable openpilot</source>
<translation>openpilot </translation> <translation>openpilot </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="33"/> <location filename="../qt/offroad/settings.cc" line="34"/>
<source>Use the openpilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source> <source>Use the openpilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source>
<translation> openpilot . . .</translation> <translation> openpilot . . .</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="38"/> <location filename="../qt/offroad/settings.cc" line="39"/>
<source>Enable Lane Departure Warnings</source> <source>Enable Lane Departure Warnings</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="39"/> <location filename="../qt/offroad/settings.cc" line="40"/>
<source>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).</source> <source>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).</source>
<translation> 50km/h(31mph) .</translation> <translation> 50km/h(31mph) .</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="44"/> <location filename="../qt/offroad/settings.cc" line="45"/>
<source>Enable Right-Hand Drive</source> <source>Enable Right-Hand Drive</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="45"/> <location filename="../qt/offroad/settings.cc" line="46"/>
<source>Allow openpilot to obey left-hand traffic conventions and perform driver monitoring on right driver seat.</source> <source>Allow openpilot to obey left-hand traffic conventions and perform driver monitoring on right driver seat.</source>
<translation>openpilot이 .</translation> <translation>openpilot이 .</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="50"/> <location filename="../qt/offroad/settings.cc" line="51"/>
<source>Use Metric System</source> <source>Use Metric System</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="51"/> <location filename="../qt/offroad/settings.cc" line="52"/>
<source>Display speed in km/h instead of mph.</source> <source>Display speed in km/h instead of mph.</source>
<translation>mph가 km/h로 .</translation> <translation>mph가 km/h로 .</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="56"/> <location filename="../qt/offroad/settings.cc" line="57"/>
<source>Record and Upload Driver Camera</source> <source>Record and Upload Driver Camera</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="57"/> <location filename="../qt/offroad/settings.cc" line="58"/>
<source>Upload data from the driver facing camera and help improve the driver monitoring algorithm.</source> <source>Upload data from the driver facing camera and help improve the driver monitoring algorithm.</source>
<translation> .</translation> <translation> .</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="62"/> <location filename="../qt/offroad/settings.cc" line="63"/>
<source>Disengage On Accelerator Pedal</source> <source>Disengage On Accelerator Pedal</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="63"/> <location filename="../qt/offroad/settings.cc" line="64"/>
<source>When enabled, pressing the accelerator pedal will disengage openpilot.</source> <source>When enabled, pressing the accelerator pedal will disengage openpilot.</source>
<translation> openpilot이 .</translation> <translation> openpilot이 .</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="69"/> <location filename="../qt/offroad/settings.cc" line="70"/>
<source>Show ETA in 24h format</source> <source>Show ETA in 24h format</source>
<translation>24 ETA </translation> <translation>24 ETA </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="70"/> <location filename="../qt/offroad/settings.cc" line="71"/>
<source>Use 24h format instead of am/pm</source> <source>Use 24h format instead of am/pm</source>
<translation>/ 24 </translation> <translation>/ 24 </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="82"/> <location filename="../qt/offroad/settings.cc" line="83"/>
<source>openpilot Longitudinal Control</source> <source>openpilot Longitudinal Control</source>
<translation>openpilot Longitudinal Control</translation> <translation>openpilot Longitudinal Control</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="83"/> <location filename="../qt/offroad/settings.cc" line="84"/>
<source>openpilot will disable the car&apos;s radar and will take over control of gas and brakes. Warning: this disables AEB!</source> <source>openpilot will disable the car&apos;s radar and will take over control of gas and brakes. Warning: this disables AEB!</source>
<translation>openpilot은 &apos; . 경고: AEB를 !</translation> <translation>openpilot은 &apos; . 경고: AEB를 !</translation>
</message> </message>

@ -76,13 +76,13 @@
<context> <context>
<name>ConfirmationDialog</name> <name>ConfirmationDialog</name>
<message> <message>
<location filename="../qt/widgets/input.cc" line="220"/> <location filename="../qt/widgets/input.cc" line="221"/>
<location filename="../qt/widgets/input.cc" line="225"/> <location filename="../qt/widgets/input.cc" line="226"/>
<source>Ok</source> <source>Ok</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/widgets/input.cc" line="225"/> <location filename="../qt/widgets/input.cc" line="226"/>
<source>Cancel</source> <source>Cancel</source>
<translation></translation> <translation></translation>
</message> </message>
@ -108,149 +108,152 @@
<context> <context>
<name>DevicePanel</name> <name>DevicePanel</name>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="98"/> <location filename="../qt/offroad/settings.cc" line="99"/>
<source>Dongle ID</source> <source>Dongle ID</source>
<translation> ID</translation> <translation> ID</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="98"/> <location filename="../qt/offroad/settings.cc" line="99"/>
<source>N/A</source> <source>N/A</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="99"/> <location filename="../qt/offroad/settings.cc" line="100"/>
<source>Serial</source> <source>Serial</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="103"/> <location filename="../qt/offroad/settings.cc" line="104"/>
<source>Driver Camera</source> <source>Driver Camera</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="103"/> <location filename="../qt/offroad/settings.cc" line="104"/>
<source>PREVIEW</source> <source>PREVIEW</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="104"/> <location filename="../qt/offroad/settings.cc" line="105"/>
<source>Preview the driver facing camera to help optimize device mounting position for best driver monitoring experience. (vehicle must be off)</source> <source>Preview the driver facing camera to help optimize device mounting position for best driver monitoring experience. (vehicle must be off)</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="108"/> <location filename="../qt/offroad/settings.cc" line="109"/>
<source>Reset Calibration</source> <source>Reset Calibration</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="108"/> <location filename="../qt/offroad/settings.cc" line="109"/>
<source>RESET</source> <source>RESET</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="111"/> <location filename="../qt/offroad/settings.cc" line="112"/>
<source>Are you sure you want to reset calibration?</source> <source>Are you sure you want to reset calibration?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="118"/> <location filename="../qt/offroad/settings.cc" line="119"/>
<source>Review Training Guide</source> <source>Review Training Guide</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="118"/> <location filename="../qt/offroad/settings.cc" line="119"/>
<source>REVIEW</source> <source>REVIEW</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="118"/> <location filename="../qt/offroad/settings.cc" line="119"/>
<source>Review the rules, features, and limitations of openpilot</source> <source>Review the rules, features, and limitations of openpilot</source>
<translation> openpilot </translation> <translation> openpilot </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="120"/> <location filename="../qt/offroad/settings.cc" line="121"/>
<source>Are you sure you want to review the training guide?</source> <source>Are you sure you want to review the training guide?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="128"/> <location filename="../qt/offroad/settings.cc" line="129"/>
<source>Regulatory</source> <source>Regulatory</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="128"/> <location filename="../qt/offroad/settings.cc" line="129"/>
<source>VIEW</source> <source>VIEW</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="137"/>
<source>Change Language</source> <source>Change Language</source>
<translation type="vanished"></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="137"/>
<source>CHANGE</source> <source>CHANGE</source>
<translation type="vanished"></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="140"/>
<source>Select a language</source> <source>Select a language</source>
<translation type="vanished"></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="146"/> <location filename="../qt/offroad/settings.cc" line="160"/>
<source>Reboot</source> <source>Reboot</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="151"/> <location filename="../qt/offroad/settings.cc" line="165"/>
<source>Power Off</source> <source>Power Off</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="171"/> <location filename="../qt/offroad/settings.cc" line="185"/>
<source>openpilot requires the device to be mounted within 4° left or right and within 5° up or 8° down. openpilot is continuously calibrating, resetting is rarely required.</source> <source>openpilot requires the device to be mounted within 4° left or right and within 5° up or 8° down. openpilot is continuously calibrating, resetting is rarely required.</source>
<translation>openpilot 4° 5° 8° openpilot </translation> <translation>openpilot 4° 5° 8° openpilot </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="182"/> <location filename="../qt/offroad/settings.cc" line="196"/>
<source> Your device is pointed %1° %2 and %3° %4.</source> <source> Your device is pointed %1° %2 and %3° %4.</source>
<translation> %1° %2 %3° %4</translation> <translation> %1° %2 %3° %4</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="183"/> <location filename="../qt/offroad/settings.cc" line="197"/>
<source>down</source> <source>down</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="183"/> <location filename="../qt/offroad/settings.cc" line="197"/>
<source>up</source> <source>up</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="184"/> <location filename="../qt/offroad/settings.cc" line="198"/>
<source>left</source> <source>left</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="184"/> <location filename="../qt/offroad/settings.cc" line="198"/>
<source>right</source> <source>right</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="195"/> <location filename="../qt/offroad/settings.cc" line="209"/>
<source>Are you sure you want to reboot?</source> <source>Are you sure you want to reboot?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="202"/> <location filename="../qt/offroad/settings.cc" line="216"/>
<source>Disengage to Reboot</source> <source>Disengage to Reboot</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="208"/> <location filename="../qt/offroad/settings.cc" line="222"/>
<source>Are you sure you want to power off?</source> <source>Are you sure you want to power off?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="215"/> <location filename="../qt/offroad/settings.cc" line="229"/>
<source>Disengage to Power Off</source> <source>Disengage to Power Off</source>
<translation></translation> <translation></translation>
</message> </message>
@ -299,17 +302,17 @@
<context> <context>
<name>InputDialog</name> <name>InputDialog</name>
<message> <message>
<location filename="../qt/widgets/input.cc" line="70"/> <location filename="../qt/widgets/input.cc" line="71"/>
<source>Cancel</source> <source>Cancel</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/widgets/input.cc" line="167"/> <location filename="../qt/widgets/input.cc" line="168"/>
<source>Need at least </source> <source>Need at least </source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/widgets/input.cc" line="167"/> <location filename="../qt/widgets/input.cc" line="168"/>
<source> characters!</source> <source> characters!</source>
<translation> </translation> <translation> </translation>
</message> </message>
@ -389,12 +392,14 @@ location set</source>
<context> <context>
<name>MultiOptionDialog</name> <name>MultiOptionDialog</name>
<message> <message>
<location filename="../qt/widgets/input.cc" line="300"/>
<source>Select</source> <source>Select</source>
<translation type="vanished"></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/widgets/input.cc" line="328"/>
<source>Cancel</source> <source>Cancel</source>
<translation type="vanished"></translation> <translation></translation>
</message> </message>
</context> </context>
<context> <context>
@ -564,27 +569,27 @@ location set</source>
<translation>退</translation> <translation>退</translation>
</message> </message>
<message> <message>
<location filename="../qt/util.cc" line="18"/> <location filename="../qt/util.cc" line="21"/>
<source>dashcam</source> <source>dashcam</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/util.cc" line="18"/> <location filename="../qt/util.cc" line="21"/>
<source>openpilot</source> <source>openpilot</source>
<translation>openpilot</translation> <translation>openpilot</translation>
</message> </message>
<message> <message>
<location filename="../qt/util.cc" line="66"/> <location filename="../qt/util.cc" line="82"/>
<source>%1 minute%2 ago</source> <source>%1 minute%2 ago</source>
<translation>%1 %2 </translation> <translation>%1 %2 </translation>
</message> </message>
<message> <message>
<location filename="../qt/util.cc" line="69"/> <location filename="../qt/util.cc" line="85"/>
<source>%1 hour%2 ago</source> <source>%1 hour%2 ago</source>
<translation>%1 %2 </translation> <translation>%1 %2 </translation>
</message> </message>
<message> <message>
<location filename="../qt/util.cc" line="72"/> <location filename="../qt/util.cc" line="88"/>
<source>%1 day%2 ago</source> <source>%1 day%2 ago</source>
<translation>%1 %2 </translation> <translation>%1 %2 </translation>
</message> </message>
@ -640,7 +645,7 @@ location set</source>
<context> <context>
<name>RichTextDialog</name> <name>RichTextDialog</name>
<message> <message>
<location filename="../qt/widgets/input.cc" line="257"/> <location filename="../qt/widgets/input.cc" line="258"/>
<source>Ok</source> <source>Ok</source>
<translation></translation> <translation></translation>
</message> </message>
@ -648,33 +653,33 @@ location set</source>
<context> <context>
<name>SettingsWindow</name> <name>SettingsWindow</name>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="300"/> <location filename="../qt/offroad/settings.cc" line="314"/>
<source>×</source> <source>×</source>
<translation>×</translation> <translation>×</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="326"/> <location filename="../qt/offroad/settings.cc" line="340"/>
<source>Device</source> <source>Device</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="327"/> <location filename="../qt/offroad/settings.cc" line="341"/>
<location filename="../qt/offroad/settings.cc" line="366"/> <location filename="../qt/offroad/settings.cc" line="380"/>
<source>Network</source> <source>Network</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="328"/> <location filename="../qt/offroad/settings.cc" line="342"/>
<source>Toggles</source> <source>Toggles</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="329"/> <location filename="../qt/offroad/settings.cc" line="343"/>
<source>Software</source> <source>Software</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="334"/> <location filename="../qt/offroad/settings.cc" line="348"/>
<source>Navigation</source> <source>Navigation</source>
<translation></translation> <translation></translation>
</message> </message>
@ -913,68 +918,68 @@ location set</source>
<context> <context>
<name>SoftwarePanel</name> <name>SoftwarePanel</name>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="220"/> <location filename="../qt/offroad/settings.cc" line="234"/>
<source>Git Branch</source> <source>Git Branch</source>
<translation>Git </translation> <translation>Git </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="221"/> <location filename="../qt/offroad/settings.cc" line="235"/>
<source>Git Commit</source> <source>Git Commit</source>
<translation>Git </translation> <translation>Git </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="222"/> <location filename="../qt/offroad/settings.cc" line="236"/>
<source>OS Version</source> <source>OS Version</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="223"/> <location filename="../qt/offroad/settings.cc" line="237"/>
<source>Version</source> <source>Version</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="224"/> <location filename="../qt/offroad/settings.cc" line="238"/>
<source>Last Update Check</source> <source>Last Update Check</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="224"/> <location filename="../qt/offroad/settings.cc" line="238"/>
<source>The last time openpilot successfully checked for an update. The updater only runs while the car is off.</source> <source>The last time openpilot successfully checked for an update. The updater only runs while the car is off.</source>
<translation> openpilot </translation> <translation> openpilot </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="225"/> <location filename="../qt/offroad/settings.cc" line="239"/>
<source>Check for Update</source> <source>Check for Update</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="230"/> <location filename="../qt/offroad/settings.cc" line="244"/>
<source>CHECKING</source> <source>CHECKING</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="237"/> <location filename="../qt/offroad/settings.cc" line="251"/>
<source>Uninstall </source> <source>Uninstall </source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="237"/> <location filename="../qt/offroad/settings.cc" line="251"/>
<source>UNINSTALL</source> <source>UNINSTALL</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="239"/> <location filename="../qt/offroad/settings.cc" line="253"/>
<source>Are you sure you want to uninstall?</source> <source>Are you sure you want to uninstall?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="253"/> <location filename="../qt/offroad/settings.cc" line="267"/>
<source>failed to fetch update</source> <source>failed to fetch update</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="254"/> <location filename="../qt/offroad/settings.cc" line="268"/>
<location filename="../qt/offroad/settings.cc" line="275"/> <location filename="../qt/offroad/settings.cc" line="289"/>
<source>CHECK</source> <source>CHECK</source>
<translation></translation> <translation></translation>
</message> </message>
@ -1062,82 +1067,82 @@ location set</source>
<context> <context>
<name>TogglesPanel</name> <name>TogglesPanel</name>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="32"/> <location filename="../qt/offroad/settings.cc" line="33"/>
<source>Enable openpilot</source> <source>Enable openpilot</source>
<translation> openpilot</translation> <translation> openpilot</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="33"/> <location filename="../qt/offroad/settings.cc" line="34"/>
<source>Use the openpilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source> <source>Use the openpilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source>
<translation>使 openpilot 使 </translation> <translation>使 openpilot 使 </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="38"/> <location filename="../qt/offroad/settings.cc" line="39"/>
<source>Enable Lane Departure Warnings</source> <source>Enable Lane Departure Warnings</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="39"/> <location filename="../qt/offroad/settings.cc" line="40"/>
<source>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).</source> <source>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).</source>
<translation> 31 /50 /线</translation> <translation> 31 /50 /线</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="44"/> <location filename="../qt/offroad/settings.cc" line="45"/>
<source>Enable Right-Hand Drive</source> <source>Enable Right-Hand Drive</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="45"/> <location filename="../qt/offroad/settings.cc" line="46"/>
<source>Allow openpilot to obey left-hand traffic conventions and perform driver monitoring on right driver seat.</source> <source>Allow openpilot to obey left-hand traffic conventions and perform driver monitoring on right driver seat.</source>
<translation> openpilot </translation> <translation> openpilot </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="50"/> <location filename="../qt/offroad/settings.cc" line="51"/>
<source>Use Metric System</source> <source>Use Metric System</source>
<translation>使</translation> <translation>使</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="51"/> <location filename="../qt/offroad/settings.cc" line="52"/>
<source>Display speed in km/h instead of mph.</source> <source>Display speed in km/h instead of mph.</source>
<translation>//</translation> <translation>//</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="56"/> <location filename="../qt/offroad/settings.cc" line="57"/>
<source>Record and Upload Driver Camera</source> <source>Record and Upload Driver Camera</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="57"/> <location filename="../qt/offroad/settings.cc" line="58"/>
<source>Upload data from the driver facing camera and help improve the driver monitoring algorithm.</source> <source>Upload data from the driver facing camera and help improve the driver monitoring algorithm.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="62"/> <location filename="../qt/offroad/settings.cc" line="63"/>
<source>Disengage On Accelerator Pedal</source> <source>Disengage On Accelerator Pedal</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="63"/> <location filename="../qt/offroad/settings.cc" line="64"/>
<source>When enabled, pressing the accelerator pedal will disengage openpilot.</source> <source>When enabled, pressing the accelerator pedal will disengage openpilot.</source>
<translation> openpilot</translation> <translation> openpilot</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="69"/> <location filename="../qt/offroad/settings.cc" line="70"/>
<source>Show ETA in 24h format</source> <source>Show ETA in 24h format</source>
<translation> 24 ETA</translation> <translation> 24 ETA</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="70"/> <location filename="../qt/offroad/settings.cc" line="71"/>
<source>Use 24h format instead of am/pm</source> <source>Use 24h format instead of am/pm</source>
<translation>使 24 /</translation> <translation>使 24 /</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="82"/> <location filename="../qt/offroad/settings.cc" line="83"/>
<source>openpilot Longitudinal Control</source> <source>openpilot Longitudinal Control</source>
<translation>openpilot </translation> <translation>openpilot </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="83"/> <location filename="../qt/offroad/settings.cc" line="84"/>
<source>openpilot will disable the car&apos;s radar and will take over control of gas and brakes. Warning: this disables AEB!</source> <source>openpilot will disable the car&apos;s radar and will take over control of gas and brakes. Warning: this disables AEB!</source>
<translation>openpilot AEB</translation> <translation>openpilot AEB</translation>
</message> </message>

@ -76,13 +76,13 @@
<context> <context>
<name>ConfirmationDialog</name> <name>ConfirmationDialog</name>
<message> <message>
<location filename="../qt/widgets/input.cc" line="220"/> <location filename="../qt/widgets/input.cc" line="221"/>
<location filename="../qt/widgets/input.cc" line="225"/> <location filename="../qt/widgets/input.cc" line="226"/>
<source>Ok</source> <source>Ok</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/widgets/input.cc" line="225"/> <location filename="../qt/widgets/input.cc" line="226"/>
<source>Cancel</source> <source>Cancel</source>
<translation></translation> <translation></translation>
</message> </message>
@ -108,149 +108,152 @@
<context> <context>
<name>DevicePanel</name> <name>DevicePanel</name>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="98"/> <location filename="../qt/offroad/settings.cc" line="99"/>
<source>Dongle ID</source> <source>Dongle ID</source>
<translation>Dongle ID</translation> <translation>Dongle ID</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="98"/> <location filename="../qt/offroad/settings.cc" line="99"/>
<source>N/A</source> <source>N/A</source>
<translation>使</translation> <translation>使</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="99"/> <location filename="../qt/offroad/settings.cc" line="100"/>
<source>Serial</source> <source>Serial</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="103"/> <location filename="../qt/offroad/settings.cc" line="104"/>
<source>Driver Camera</source> <source>Driver Camera</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="103"/> <location filename="../qt/offroad/settings.cc" line="104"/>
<source>PREVIEW</source> <source>PREVIEW</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="104"/> <location filename="../qt/offroad/settings.cc" line="105"/>
<source>Preview the driver facing camera to help optimize device mounting position for best driver monitoring experience. (vehicle must be off)</source> <source>Preview the driver facing camera to help optimize device mounting position for best driver monitoring experience. (vehicle must be off)</source>
<translation>便調()</translation> <translation>便調()</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="108"/> <location filename="../qt/offroad/settings.cc" line="109"/>
<source>Reset Calibration</source> <source>Reset Calibration</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="108"/> <location filename="../qt/offroad/settings.cc" line="109"/>
<source>RESET</source> <source>RESET</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="111"/> <location filename="../qt/offroad/settings.cc" line="112"/>
<source>Are you sure you want to reset calibration?</source> <source>Are you sure you want to reset calibration?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="118"/> <location filename="../qt/offroad/settings.cc" line="119"/>
<source>Review Training Guide</source> <source>Review Training Guide</source>
<translation>使</translation> <translation>使</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="118"/> <location filename="../qt/offroad/settings.cc" line="119"/>
<source>REVIEW</source> <source>REVIEW</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="118"/> <location filename="../qt/offroad/settings.cc" line="119"/>
<source>Review the rules, features, and limitations of openpilot</source> <source>Review the rules, features, and limitations of openpilot</source>
<translation> openpilot 使</translation> <translation> openpilot 使</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="120"/> <location filename="../qt/offroad/settings.cc" line="121"/>
<source>Are you sure you want to review the training guide?</source> <source>Are you sure you want to review the training guide?</source>
<translation>使</translation> <translation>使</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="128"/> <location filename="../qt/offroad/settings.cc" line="129"/>
<source>Regulatory</source> <source>Regulatory</source>
<translation>/</translation> <translation>/</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="128"/> <location filename="../qt/offroad/settings.cc" line="129"/>
<source>VIEW</source> <source>VIEW</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="137"/>
<source>Change Language</source> <source>Change Language</source>
<translation type="vanished"></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="137"/>
<source>CHANGE</source> <source>CHANGE</source>
<translation type="vanished"></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="140"/>
<source>Select a language</source> <source>Select a language</source>
<translation type="vanished"></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="146"/> <location filename="../qt/offroad/settings.cc" line="160"/>
<source>Reboot</source> <source>Reboot</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="151"/> <location filename="../qt/offroad/settings.cc" line="165"/>
<source>Power Off</source> <source>Power Off</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="171"/> <location filename="../qt/offroad/settings.cc" line="185"/>
<source>openpilot requires the device to be mounted within 4° left or right and within 5° up or 8° down. openpilot is continuously calibrating, resetting is rarely required.</source> <source>openpilot requires the device to be mounted within 4° left or right and within 5° up or 8° down. openpilot is continuously calibrating, resetting is rarely required.</source>
<translation>openpilot 4° 5° 8° </translation> <translation>openpilot 4° 5° 8° </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="182"/> <location filename="../qt/offroad/settings.cc" line="196"/>
<source> Your device is pointed %1° %2 and %3° %4.</source> <source> Your device is pointed %1° %2 and %3° %4.</source>
<translation> %2 %1° %4 %3° </translation> <translation> %2 %1° %4 %3° </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="183"/> <location filename="../qt/offroad/settings.cc" line="197"/>
<source>down</source> <source>down</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="183"/> <location filename="../qt/offroad/settings.cc" line="197"/>
<source>up</source> <source>up</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="184"/> <location filename="../qt/offroad/settings.cc" line="198"/>
<source>left</source> <source>left</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="184"/> <location filename="../qt/offroad/settings.cc" line="198"/>
<source>right</source> <source>right</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="195"/> <location filename="../qt/offroad/settings.cc" line="209"/>
<source>Are you sure you want to reboot?</source> <source>Are you sure you want to reboot?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="202"/> <location filename="../qt/offroad/settings.cc" line="216"/>
<source>Disengage to Reboot</source> <source>Disengage to Reboot</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="208"/> <location filename="../qt/offroad/settings.cc" line="222"/>
<source>Are you sure you want to power off?</source> <source>Are you sure you want to power off?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="215"/> <location filename="../qt/offroad/settings.cc" line="229"/>
<source>Disengage to Power Off</source> <source>Disengage to Power Off</source>
<translation></translation> <translation></translation>
</message> </message>
@ -299,17 +302,17 @@
<context> <context>
<name>InputDialog</name> <name>InputDialog</name>
<message> <message>
<location filename="../qt/widgets/input.cc" line="70"/> <location filename="../qt/widgets/input.cc" line="71"/>
<source>Cancel</source> <source>Cancel</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/widgets/input.cc" line="167"/> <location filename="../qt/widgets/input.cc" line="168"/>
<source>Need at least </source> <source>Need at least </source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/widgets/input.cc" line="167"/> <location filename="../qt/widgets/input.cc" line="168"/>
<source> characters!</source> <source> characters!</source>
<translation> </translation> <translation> </translation>
</message> </message>
@ -394,12 +397,14 @@ location set</source>
<context> <context>
<name>MultiOptionDialog</name> <name>MultiOptionDialog</name>
<message> <message>
<location filename="../qt/widgets/input.cc" line="300"/>
<source>Select</source> <source>Select</source>
<translation type="vanished"></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/widgets/input.cc" line="328"/>
<source>Cancel</source> <source>Cancel</source>
<translation type="vanished"></translation> <translation></translation>
</message> </message>
</context> </context>
<context> <context>
@ -569,29 +574,29 @@ location set</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/util.cc" line="18"/> <location filename="../qt/util.cc" line="21"/>
<source>dashcam</source> <source>dashcam</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/util.cc" line="18"/> <location filename="../qt/util.cc" line="21"/>
<source>openpilot</source> <source>openpilot</source>
<translation>openpilot</translation> <translation>openpilot</translation>
</message> </message>
<message> <message>
<location filename="../qt/util.cc" line="66"/> <location filename="../qt/util.cc" line="82"/>
<source>%1 minute%2 ago</source> <source>%1 minute%2 ago</source>
<translatorcomment>we don&apos;t need %2</translatorcomment> <translatorcomment>we don&apos;t need %2</translatorcomment>
<translation>%1 </translation> <translation>%1 </translation>
</message> </message>
<message> <message>
<location filename="../qt/util.cc" line="69"/> <location filename="../qt/util.cc" line="85"/>
<source>%1 hour%2 ago</source> <source>%1 hour%2 ago</source>
<translatorcomment>we don&apos;t need %2</translatorcomment> <translatorcomment>we don&apos;t need %2</translatorcomment>
<translation>%1 </translation> <translation>%1 </translation>
</message> </message>
<message> <message>
<location filename="../qt/util.cc" line="72"/> <location filename="../qt/util.cc" line="88"/>
<source>%1 day%2 ago</source> <source>%1 day%2 ago</source>
<translatorcomment>we don&apos;t need %2</translatorcomment> <translatorcomment>we don&apos;t need %2</translatorcomment>
<translation>%1 </translation> <translation>%1 </translation>
@ -648,7 +653,7 @@ location set</source>
<context> <context>
<name>RichTextDialog</name> <name>RichTextDialog</name>
<message> <message>
<location filename="../qt/widgets/input.cc" line="257"/> <location filename="../qt/widgets/input.cc" line="258"/>
<source>Ok</source> <source>Ok</source>
<translation></translation> <translation></translation>
</message> </message>
@ -656,33 +661,33 @@ location set</source>
<context> <context>
<name>SettingsWindow</name> <name>SettingsWindow</name>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="300"/> <location filename="../qt/offroad/settings.cc" line="314"/>
<source>×</source> <source>×</source>
<translation>×</translation> <translation>×</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="326"/> <location filename="../qt/offroad/settings.cc" line="340"/>
<source>Device</source> <source>Device</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="327"/> <location filename="../qt/offroad/settings.cc" line="341"/>
<location filename="../qt/offroad/settings.cc" line="366"/> <location filename="../qt/offroad/settings.cc" line="380"/>
<source>Network</source> <source>Network</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="328"/> <location filename="../qt/offroad/settings.cc" line="342"/>
<source>Toggles</source> <source>Toggles</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="329"/> <location filename="../qt/offroad/settings.cc" line="343"/>
<source>Software</source> <source>Software</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="334"/> <location filename="../qt/offroad/settings.cc" line="348"/>
<source>Navigation</source> <source>Navigation</source>
<translation></translation> <translation></translation>
</message> </message>
@ -921,68 +926,68 @@ location set</source>
<context> <context>
<name>SoftwarePanel</name> <name>SoftwarePanel</name>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="220"/> <location filename="../qt/offroad/settings.cc" line="234"/>
<source>Git Branch</source> <source>Git Branch</source>
<translation>Git </translation> <translation>Git </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="221"/> <location filename="../qt/offroad/settings.cc" line="235"/>
<source>Git Commit</source> <source>Git Commit</source>
<translation>Git </translation> <translation>Git </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="222"/> <location filename="../qt/offroad/settings.cc" line="236"/>
<source>OS Version</source> <source>OS Version</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="223"/> <location filename="../qt/offroad/settings.cc" line="237"/>
<source>Version</source> <source>Version</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="224"/> <location filename="../qt/offroad/settings.cc" line="238"/>
<source>Last Update Check</source> <source>Last Update Check</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="224"/> <location filename="../qt/offroad/settings.cc" line="238"/>
<source>The last time openpilot successfully checked for an update. The updater only runs while the car is off.</source> <source>The last time openpilot successfully checked for an update. The updater only runs while the car is off.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="225"/> <location filename="../qt/offroad/settings.cc" line="239"/>
<source>Check for Update</source> <source>Check for Update</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="230"/> <location filename="../qt/offroad/settings.cc" line="244"/>
<source>CHECKING</source> <source>CHECKING</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="237"/> <location filename="../qt/offroad/settings.cc" line="251"/>
<source>Uninstall </source> <source>Uninstall </source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="237"/> <location filename="../qt/offroad/settings.cc" line="251"/>
<source>UNINSTALL</source> <source>UNINSTALL</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="239"/> <location filename="../qt/offroad/settings.cc" line="253"/>
<source>Are you sure you want to uninstall?</source> <source>Are you sure you want to uninstall?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="253"/> <location filename="../qt/offroad/settings.cc" line="267"/>
<source>failed to fetch update</source> <source>failed to fetch update</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="254"/> <location filename="../qt/offroad/settings.cc" line="268"/>
<location filename="../qt/offroad/settings.cc" line="275"/> <location filename="../qt/offroad/settings.cc" line="289"/>
<source>CHECK</source> <source>CHECK</source>
<translation></translation> <translation></translation>
</message> </message>
@ -1070,82 +1075,82 @@ location set</source>
<context> <context>
<name>TogglesPanel</name> <name>TogglesPanel</name>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="32"/> <location filename="../qt/offroad/settings.cc" line="33"/>
<source>Enable openpilot</source> <source>Enable openpilot</source>
<translation> openpilot</translation> <translation> openpilot</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="33"/> <location filename="../qt/offroad/settings.cc" line="34"/>
<source>Use the openpilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source> <source>Use the openpilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source>
<translation>使 openpilot </translation> <translation>使 openpilot </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="38"/> <location filename="../qt/offroad/settings.cc" line="39"/>
<source>Enable Lane Departure Warnings</source> <source>Enable Lane Departure Warnings</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="39"/> <location filename="../qt/offroad/settings.cc" line="40"/>
<source>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).</source> <source>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).</source>
<translation> 50 (31 ) </translation> <translation> 50 (31 ) </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="44"/> <location filename="../qt/offroad/settings.cc" line="45"/>
<source>Enable Right-Hand Drive</source> <source>Enable Right-Hand Drive</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="45"/> <location filename="../qt/offroad/settings.cc" line="46"/>
<source>Allow openpilot to obey left-hand traffic conventions and perform driver monitoring on right driver seat.</source> <source>Allow openpilot to obey left-hand traffic conventions and perform driver monitoring on right driver seat.</source>
<translation>openpilot ()</translation> <translation>openpilot ()</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="50"/> <location filename="../qt/offroad/settings.cc" line="51"/>
<source>Use Metric System</source> <source>Use Metric System</source>
<translation>使</translation> <translation>使</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="51"/> <location filename="../qt/offroad/settings.cc" line="52"/>
<source>Display speed in km/h instead of mph.</source> <source>Display speed in km/h instead of mph.</source>
<translation> mp/h km/h</translation> <translation> mp/h km/h</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="56"/> <location filename="../qt/offroad/settings.cc" line="57"/>
<source>Record and Upload Driver Camera</source> <source>Record and Upload Driver Camera</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="57"/> <location filename="../qt/offroad/settings.cc" line="58"/>
<source>Upload data from the driver facing camera and help improve the driver monitoring algorithm.</source> <source>Upload data from the driver facing camera and help improve the driver monitoring algorithm.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="62"/> <location filename="../qt/offroad/settings.cc" line="63"/>
<source>Disengage On Accelerator Pedal</source> <source>Disengage On Accelerator Pedal</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="63"/> <location filename="../qt/offroad/settings.cc" line="64"/>
<source>When enabled, pressing the accelerator pedal will disengage openpilot.</source> <source>When enabled, pressing the accelerator pedal will disengage openpilot.</source>
<translation> openpilot </translation> <translation> openpilot </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="69"/> <location filename="../qt/offroad/settings.cc" line="70"/>
<source>Show ETA in 24h format</source> <source>Show ETA in 24h format</source>
<translation> 24 </translation> <translation> 24 </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="70"/> <location filename="../qt/offroad/settings.cc" line="71"/>
<source>Use 24h format instead of am/pm</source> <source>Use 24h format instead of am/pm</source>
<translation>使 24 ( 12 )</translation> <translation>使 24 ( 12 )</translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="82"/> <location filename="../qt/offroad/settings.cc" line="83"/>
<source>openpilot Longitudinal Control</source> <source>openpilot Longitudinal Control</source>
<translation>openpilot </translation> <translation>openpilot </translation>
</message> </message>
<message> <message>
<location filename="../qt/offroad/settings.cc" line="83"/> <location filename="../qt/offroad/settings.cc" line="84"/>
<source>openpilot will disable the car&apos;s radar and will take over control of gas and brakes. Warning: this disables AEB!</source> <source>openpilot will disable the car&apos;s radar and will take over control of gas and brakes. Warning: this disables AEB!</source>
<translation>openpilot (AEB) </translation> <translation>openpilot (AEB) </translation>
</message> </message>

@ -246,7 +246,7 @@ void UIState::update() {
updateStatus(); updateStatus();
if (sm->frame % UI_FREQ == 0) { if (sm->frame % UI_FREQ == 0) {
watchdog_kick(); watchdog_kick(nanos_since_boot());
} }
emit uiUpdate(*this); emit uiUpdate(*this);
} }

@ -1,7 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import argparse import argparse
import os
import json import json
import os
from common.basedir import BASEDIR from common.basedir import BASEDIR

Loading…
Cancel
Save