diff --git a/docs/CARS.md b/docs/CARS.md
index c7e9d12aa9..11a81291c9 100644
--- a/docs/CARS.md
+++ b/docs/CARS.md
@@ -100,7 +100,7 @@ How We Rate The Cars
|Kia|Niro Electric 2022|All|
|
|
|
|
|Kia|Niro Hybrid 2021|SCC + LKAS|
|
|
|
|
|Kia|Niro Hybrid 2022|SCC + LKAS|
|
|
|
|
-|Kia|Niro Plug-in Hybrid 2019|SCC + LKAS|
|
|
|
|
+|Kia|Niro Plug-in Hybrid 2018-19|SCC + LKAS|
|
|
|
|
|Kia|Optima 2017|SCC + LKAS|
|
|
|
|
|Kia|Optima 2019|SCC + LKAS|
|
|
|
|
|Kia|Seltos 2021|SCC + LKAS|
|
|
|
|
diff --git a/opendbc b/opendbc
index aaf397ed51..e2465cc701 160000
--- a/opendbc
+++ b/opendbc
@@ -1 +1 @@
-Subproject commit aaf397ed51f3040b2fb3f2bb17feaadb8c6ba743
+Subproject commit e2465cc701e878fdae5b4e363496c2fa5d2f7c08
diff --git a/selfdrive/car/docs.py b/selfdrive/car/docs.py
index eb2f1923c8..26f8949e8f 100755
--- a/selfdrive/car/docs.py
+++ b/selfdrive/car/docs.py
@@ -58,7 +58,7 @@ def generate_cars_md(all_car_info: List[CarInfo], template_fn: str, only_tier_co
for c in hide_cols:
del car.row[c]
- footnotes = [fn.value.text for fn in ALL_FOOTNOTES]
+ footnotes = [fn.value.text for fn in ALL_FOOTNOTES if fn.value.column in cols]
cars_md: str = template.render(all_car_info=all_car_info,
footnotes=footnotes, Star=Star, Column=cols, star_descriptions=STAR_DESCRIPTIONS)
return cars_md
diff --git a/selfdrive/car/hyundai/values.py b/selfdrive/car/hyundai/values.py
index 1567544745..303558b5a1 100644
--- a/selfdrive/car/hyundai/values.py
+++ b/selfdrive/car/hyundai/values.py
@@ -136,7 +136,7 @@ CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = {
HyundaiCarInfo("Kia Niro Electric 2021", "All", video_link="https://www.youtube.com/watch?v=lT7zcG6ZpGo", harness=Harness.hyundai_c),
HyundaiCarInfo("Kia Niro Electric 2022", "All", video_link="https://www.youtube.com/watch?v=lT7zcG6ZpGo", harness=Harness.hyundai_h),
],
- CAR.KIA_NIRO_HEV: HyundaiCarInfo("Kia Niro Plug-in Hybrid 2019", min_enable_speed=10. * CV.MPH_TO_MS, harness=Harness.hyundai_c),
+ CAR.KIA_NIRO_HEV: HyundaiCarInfo("Kia Niro Plug-in Hybrid 2018-19", min_enable_speed=10. * CV.MPH_TO_MS, harness=Harness.hyundai_c),
CAR.KIA_NIRO_HEV_2021: [
HyundaiCarInfo("Kia Niro Hybrid 2021", harness=Harness.hyundai_f), # TODO: could be hyundai_d, verify
HyundaiCarInfo("Kia Niro Hybrid 2022", harness=Harness.hyundai_h),
@@ -986,20 +986,24 @@ FW_VERSIONS = {
},
CAR.KIA_NIRO_HEV: {
(Ecu.engine, 0x7e0, None): [
- b'\xf1\x816H6F4051\000\000\000\000\000\000\000\000',
+ b'\xf1\x816H6F4051\x00\x00\x00\x00\x00\x00\x00\x00',
+ b'\xf1\x816H6D1051\x00\x00\x00\x00\x00\x00\x00\x00',
],
(Ecu.transmission, 0x7e1, None): [
- b"\xf1\x816U3J2051\000\000\xf1\0006U3H0_C2\000\0006U3J2051\000\000PDE0G16NS2\xf4\'\\\x91",
- b'\xf1\x816U3J2051\000\000\xf1\0006U3H0_C2\000\0006U3J2051\000\000PDE0G16NS2\000\000\000\000',
+ b"\xf1\x816U3J2051\x00\x00\xf1\x006U3H0_C2\x00\x006U3J2051\x00\x00PDE0G16NS2\xf4'\\\x91",
+ b'\xf1\x816U3J2051\x00\x00\xf1\x006U3H0_C2\x00\x006U3J2051\x00\x00PDE0G16NS2\x00\x00\x00\x00',
+ b'\xf1\x816U3H3051\x00\x00\xf1\x006U3H0_C2\x00\x006U3H3051\x00\x00PDE0G16NS1\x00\x00\x00\x00',
+ b'\xf1\x816U3H3051\x00\x00\xf1\x006U3H0_C2\x00\x006U3H3051\x00\x00PDE0G16NS1\x13\xcd\x88\x92',
],
(Ecu.eps, 0x7D4, None): [
- b'\xf1\000DE MDPS C 1.00 1.09 56310G5301\000 4DEHC109',
+ b'\xf1\x00DE MDPS C 1.00 1.09 56310G5301\x00 4DEHC109',
],
(Ecu.fwdCamera, 0x7C4, None): [
- b'\xf1\000DEP MFC AT USA LHD 1.00 1.01 95740-G5010 170424',
+ b'\xf1\x00DEP MFC AT USA LHD 1.00 1.01 95740-G5010 170424',
+ b'\xf1\x00DEP MFC AT USA LHD 1.00 1.00 95740-G5010 170117',
],
(Ecu.fwdRadar, 0x7D0, None): [
- b'\xf1\000DEhe SCC H-CUP 1.01 1.02 96400-G5100 ',
+ b'\xf1\x00DEhe SCC H-CUP 1.01 1.02 96400-G5100 ',
],
},
CAR.KIA_NIRO_HEV_2021: {
diff --git a/selfdrive/car/subaru/carcontroller.py b/selfdrive/car/subaru/carcontroller.py
index dca86c30a6..3fb4bc8553 100644
--- a/selfdrive/car/subaru/carcontroller.py
+++ b/selfdrive/car/subaru/carcontroller.py
@@ -49,7 +49,7 @@ class CarController:
# *** alerts and pcm cancel ***
if self.CP.carFingerprint in PREGLOBAL_CARS:
- if self.es_distance_cnt != CS.es_distance_msg["Counter"]:
+ if self.es_distance_cnt != CS.es_distance_msg["COUNTER"]:
# 1 = main, 2 = set shallow, 3 = set deep, 4 = resume shallow, 5 = resume deep
# disengage ACC when OP is disengaged
if pcm_cancel_cmd:
@@ -66,16 +66,16 @@ class CarController:
self.cruise_button_prev = cruise_button
can_sends.append(subarucan.create_preglobal_es_distance(self.packer, cruise_button, CS.es_distance_msg))
- self.es_distance_cnt = CS.es_distance_msg["Counter"]
+ self.es_distance_cnt = CS.es_distance_msg["COUNTER"]
else:
- if self.es_distance_cnt != CS.es_distance_msg["Counter"]:
+ if self.es_distance_cnt != CS.es_distance_msg["COUNTER"]:
can_sends.append(subarucan.create_es_distance(self.packer, CS.es_distance_msg, pcm_cancel_cmd))
- self.es_distance_cnt = CS.es_distance_msg["Counter"]
+ self.es_distance_cnt = CS.es_distance_msg["COUNTER"]
- if self.es_lkas_cnt != CS.es_lkas_msg["Counter"]:
+ if self.es_lkas_cnt != CS.es_lkas_msg["COUNTER"]:
can_sends.append(subarucan.create_es_lkas(self.packer, CS.es_lkas_msg, CC.enabled, hud_control.visualAlert, hud_control.leftLaneVisible, hud_control.rightLaneVisible, hud_control.leftLaneDepart, hud_control.rightLaneDepart))
- self.es_lkas_cnt = CS.es_lkas_msg["Counter"]
+ self.es_lkas_cnt = CS.es_lkas_msg["COUNTER"]
new_actuators = actuators.copy()
new_actuators.steer = self.apply_steer_last / self.p.STEER_MAX
diff --git a/selfdrive/car/subaru/carstate.py b/selfdrive/car/subaru/carstate.py
index 45ea66fb27..b261186977 100644
--- a/selfdrive/car/subaru/carstate.py
+++ b/selfdrive/car/subaru/carstate.py
@@ -173,7 +173,7 @@ class CarState(CarStateBase):
("Standstill_2", "ES_Distance"),
("Cruise_Fault", "ES_Distance"),
("Signal5", "ES_Distance"),
- ("Counter", "ES_Distance"),
+ ("COUNTER", "ES_Distance"),
("Signal6", "ES_Distance"),
("Cruise_Button", "ES_Distance"),
("Signal7", "ES_Distance"),
@@ -188,7 +188,7 @@ class CarState(CarStateBase):
("Cruise_Set_Speed", "ES_DashStatus"),
("Conventional_Cruise", "ES_DashStatus"),
- ("Counter", "ES_Distance"),
+ ("COUNTER", "ES_Distance"),
("Signal1", "ES_Distance"),
("Cruise_Fault", "ES_Distance"),
("Cruise_Throttle", "ES_Distance"),
@@ -206,7 +206,7 @@ class CarState(CarStateBase):
("Cruise_Resume", "ES_Distance"),
("Signal6", "ES_Distance"),
- ("Counter", "ES_LKAS_State"),
+ ("COUNTER", "ES_LKAS_State"),
("LKAS_Alert_Msg", "ES_LKAS_State"),
("Signal1", "ES_LKAS_State"),
("LKAS_ACTIVE", "ES_LKAS_State"),
diff --git a/selfdrive/car/subaru/subarucan.py b/selfdrive/car/subaru/subarucan.py
index 63511d183e..e6efe7aa7b 100644
--- a/selfdrive/car/subaru/subarucan.py
+++ b/selfdrive/car/subaru/subarucan.py
@@ -8,13 +8,12 @@ def create_steering_control(packer, apply_steer, frame, steer_step):
idx = (frame / steer_step) % 16
values = {
- "Counter": idx,
"LKAS_Output": apply_steer,
"LKAS_Request": 1 if apply_steer != 0 else 0,
"SET_1": 1
}
- return packer.make_can_msg("ES_LKAS", 0, values)
+ return packer.make_can_msg("ES_LKAS", 0, values, idx)
def create_steering_status(packer, apply_steer, frame, steer_step):
return packer.make_can_msg("ES_LKAS_State", 0, {})
@@ -72,13 +71,12 @@ def create_preglobal_steering_control(packer, apply_steer, frame, steer_step):
idx = (frame / steer_step) % 8
values = {
- "Counter": idx,
"LKAS_Command": apply_steer,
"LKAS_Active": 1 if apply_steer != 0 else 0
}
values["Checksum"] = subaru_preglobal_checksum(packer, values, "ES_LKAS")
- return packer.make_can_msg("ES_LKAS", 0, values)
+ return packer.make_can_msg("ES_LKAS", 0, values, idx)
def create_preglobal_es_distance(packer, cruise_button, es_distance_msg):
diff --git a/selfdrive/car/volkswagen/values.py b/selfdrive/car/volkswagen/values.py
index 1d9b585a43..11e20f1191 100755
--- a/selfdrive/car/volkswagen/values.py
+++ b/selfdrive/car/volkswagen/values.py
@@ -294,6 +294,7 @@ FW_VERSIONS = {
b'\xf1\x8704E906023BN\xf1\x894518',
b'\xf1\x8704E906024K \xf1\x896811',
b'\xf1\x8704E906027GR\xf1\x892394',
+ b'\xf1\x8704E906027HD\xf1\x892603',
b'\xf1\x8704E906027HD\xf1\x893742',
b'\xf1\x8704E906027MA\xf1\x894958',
b'\xf1\x8704L906021DT\xf1\x895520',
@@ -331,6 +332,7 @@ FW_VERSIONS = {
(Ecu.transmission, 0x7e1, None): [
b'\xf1\x8709G927749AP\xf1\x892943',
b'\xf1\x8709S927158A \xf1\x893585',
+ b'\xf1\x870CW300040H \xf1\x890606',
b'\xf1\x870CW300041H \xf1\x891010',
b'\xf1\x870CW300042F \xf1\x891604',
b'\xf1\x870CW300043B \xf1\x891601',
@@ -407,6 +409,7 @@ FW_VERSIONS = {
b'\xf1\x875Q0909144L \xf1\x891021\xf1\x82\x0521A00502A0',
b'\xf1\x875Q0909144P \xf1\x891043\xf1\x82\00511A00403A0',
b'\xf1\x875Q0909144R \xf1\x891061\xf1\x82\00516A00604A1',
+ b'\xf1\x875Q0909144S \xf1\x891063\xf1\x82\x0516A00404A1',
b'\xf1\x875Q0909144S \xf1\x891063\xf1\x82\00516A00604A1',
b'\xf1\x875Q0909144S \xf1\x891063\xf1\x82\00516A07A02A1',
b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\00521A00507A1',
diff --git a/selfdrive/test/setup_device_ci.sh b/selfdrive/test/setup_device_ci.sh
index 2e5ffeacc6..bf2f93e1c3 100755
--- a/selfdrive/test/setup_device_ci.sh
+++ b/selfdrive/test/setup_device_ci.sh
@@ -21,28 +21,26 @@ umount /data/safe_staging/merged/ || true
sudo umount /data/safe_staging/merged/ || true
rm -rf /data/safe_staging/* || true
-export KEYS_PARAM_PATH="/data/params/d/GithubSshKeys"
-export KEYS_PATH="/usr/comma/setup_keys"
-export CONTINUE_PATH="/data/continue.sh"
-
-if ! grep -F "$KEYS_PATH" /etc/ssh/sshd_config; then
- echo "setting up keys"
- sudo mount -o rw,remount /
- sudo systemctl enable ssh
- sudo sed -i "s,$KEYS_PARAM_PATH,$KEYS_PATH," /etc/ssh/sshd_config
- sudo mount -o ro,remount /
-fi
-
+CONTINUE_PATH="/data/continue.sh"
tee $CONTINUE_PATH << EOF
#!/usr/bin/bash
sudo abctl --set_success
+# patch sshd config
+sudo mount -o rw,remount /
+sudo sed -i "s,/data/params/d/GithubSshKeys,/usr/comma/setup_keys," /etc/ssh/sshd_config
+sudo systemctl daemon-reload
+sudo systemctl restart ssh
+sudo systemctl disable ssh-param-watcher.path
+sudo systemctl disable ssh-param-watcher.service
+sudo mount -o ro,remount /
+
while true; do
if ! sudo systemctl is-active -q ssh; then
sudo systemctl start ssh
fi
- sleep 10s
+ sleep 5s
done
sleep infinity
diff --git a/selfdrive/ui/qt/offroad/settings.cc b/selfdrive/ui/qt/offroad/settings.cc
index 65b9e3e4cc..0956f6c8dd 100644
--- a/selfdrive/ui/qt/offroad/settings.cc
+++ b/selfdrive/ui/qt/offroad/settings.cc
@@ -256,9 +256,10 @@ SoftwarePanel::SoftwarePanel(QWidget* parent) : ListWidget(parent) {
});
connect(uiState(), &UIState::offroadTransition, updateBtn, &QPushButton::setEnabled);
- branchSwitcherBtn = new ButtonControl(tr("Switch Branch"), tr("ENTER"));
+ branchSwitcherBtn = new ButtonControl(tr("Switch Branch"), tr("ENTER"), tr("The new branch will be pulled the next time the updater runs."));
connect(branchSwitcherBtn, &ButtonControl::clicked, [=]() {
- QString branch = InputDialog::getText(tr("Enter name of new branch"), this);
+ QString branch = InputDialog::getText(tr("Enter branch name"), this, tr("The new branch will be pulled the next time the updater runs."),
+ false, -1, QString::fromStdString(params.get("SwitchToBranch")));
if (branch.isEmpty()) {
params.remove("SwitchToBranch");
} else {
diff --git a/selfdrive/ui/tests/test_translations.cc b/selfdrive/ui/tests/test_translations.cc
index ba0612b4c0..fcefc5784f 100644
--- a/selfdrive/ui/tests/test_translations.cc
+++ b/selfdrive/ui/tests/test_translations.cc
@@ -17,25 +17,21 @@ QStringList getParentWidgets(QWidget* widget){
template
void checkWidgetTrWrap(MainWindow &w) {
- int i = 0;
for (auto widget : w.findChildren()) {
- const QString text = widget->text();
- SECTION(text.toStdString() + "-" + std::to_string(i)) {
- bool isNumber = RE_NUM.exactMatch(text);
- bool wrapped = text.contains(TEST_TEXT);
- QString parentWidgets = getParentWidgets(widget).join("->");
-
- if (!text.isEmpty() && !isNumber && !wrapped) {
- FAIL(("\"" + text + "\" must be wrapped. Parent widgets: " + parentWidgets).toStdString());
- }
-
- // warn if source string wrapped, but UI adds text
- // TODO: add way to ignore this
- if (wrapped && text != TEST_TEXT) {
- WARN(("\"" + text + "\" is dynamic and needs a custom retranslate function. Parent widgets: " + parentWidgets).toStdString());
- }
+ const QString text = widget->text();
+ bool isNumber = RE_NUM.exactMatch(text);
+ bool wrapped = text.contains(TEST_TEXT);
+ QString parentWidgets = getParentWidgets(widget).join("->");
+
+ if (!text.isEmpty() && !isNumber && !wrapped) {
+ FAIL(("\"" + text + "\" must be wrapped. Parent widgets: " + parentWidgets).toStdString());
+ }
+
+ // warn if source string wrapped, but UI adds text
+ // TODO: add way to ignore this
+ if (wrapped && text != TEST_TEXT) {
+ WARN(("\"" + text + "\" is dynamic and needs a custom retranslate function. Parent widgets: " + parentWidgets).toStdString());
}
- i++;
}
}
diff --git a/selfdrive/ui/tests/test_translations.py b/selfdrive/ui/tests/test_translations.py
index d5409dd416..59751eec19 100755
--- a/selfdrive/ui/tests/test_translations.py
+++ b/selfdrive/ui/tests/test_translations.py
@@ -35,13 +35,12 @@ class TestTranslations(unittest.TestCase):
if not len(file):
self.skipTest(f"{name} translation has no defined file")
- self.assertTrue(os.path.exists(os.path.join(TRANSLATIONS_DIR, f"{file}.ts")),
- f"{name} has no XML translation file, run selfdrive/ui/update_translations.py")
- self.assertTrue(os.path.exists(os.path.join(TRANSLATIONS_DIR, f"{file}.qm")),
- f"{name} has no compiled QM translation file, run selfdrive/ui/update_translations.py --release")
+ if not (os.path.exists(os.path.join(TRANSLATIONS_DIR, f"{file}.ts")) and
+ os.path.exists(os.path.join(TRANSLATIONS_DIR, f"{file}.qm"))):
+ self.fail(f"{name} is missing translation files, run selfdrive/ui/update_translations.py")
def test_translations_updated(self):
- update_translations(release=True, translations_dir=TMP_TRANSLATIONS_DIR)
+ update_translations(translations_dir=TMP_TRANSLATIONS_DIR)
for name, file in self.translation_files.items():
with self.subTest(name=name, file=file):
@@ -59,7 +58,7 @@ class TestTranslations(unittest.TestCase):
new_translations = self._read_translation_file(TMP_TRANSLATIONS_DIR, file, file_ext)
self.assertEqual(cur_translations, new_translations,
- f"{file} ({name}) {file_ext.upper()} translation file out of date. Run selfdrive/ui/update_translations.py --release to update the translation files")
+ f"{file} ({name}) {file_ext.upper()} translation file out of date. Run selfdrive/ui/update_translations.py to update the translation files")
@unittest.skip("Only test unfinished translations before going to release")
def test_unfinished_translations(self):
diff --git a/selfdrive/ui/translations/README.md b/selfdrive/ui/translations/README.md
index 0ddb03a24c..4038b1e0ce 100644
--- a/selfdrive/ui/translations/README.md
+++ b/selfdrive/ui/translations/README.md
@@ -1,7 +1,5 @@
# Multilanguage
-
-
## Contributing
Before getting started, make sure you have set up the openpilot Ubuntu development environment by reading the [tools README.md](/tools/README.md).
@@ -28,12 +26,25 @@ openpilot provides a few tools to help contributors manage their translations an
Follow the steps above, omitting steps 1. and 2. Any time you edit translations you'll want to make sure to compile them.
+### Updating the UI
+
+Any time you edit source code in the UI, you need to update and compile the translations to ensure the line numbers and contexts are up to date (last step above).
+
### Testing
-openpilot has a unit test to make sure all translations are up to date with the text in openpilot and that all translations are completed.
+openpilot has a few unit tests to make sure all translations are up to date and that all strings are wrapped in a translation marker.
-Run and fix any issues:
+Tests translation files up to date:
-```python
+```shell
selfdrive/ui/tests/test_translations.py
```
+
+Tests all static source strings are wrapped:
+
+```shell
+selfdrive/ui/tests/create_test_translations.sh && selfdrive/ui/tests/test_translations
+```
+
+---
+
diff --git a/selfdrive/ui/translations/main_ja.qm b/selfdrive/ui/translations/main_ja.qm
index 552545cf87..1c98d5a1e3 100644
Binary files a/selfdrive/ui/translations/main_ja.qm and b/selfdrive/ui/translations/main_ja.qm differ
diff --git a/selfdrive/ui/translations/main_ja.ts b/selfdrive/ui/translations/main_ja.ts
index f3b8733128..dd7643e217 100644
--- a/selfdrive/ui/translations/main_ja.ts
+++ b/selfdrive/ui/translations/main_ja.ts
@@ -11,7 +11,7 @@
Snooze Update
- 更新停止
+ 更新の一時停止
@@ -24,17 +24,17 @@
Back
- もどる
+ 戻る
Enable Tethering
- テザリングを有効化
+ テザリングを有効化
Tethering Password
- テザリングパスワード
+ テザリングパスワード
@@ -45,17 +45,17 @@
Enter new tethering password
- 新しいテザリングパスワードを入力
+ 新しいテザリングパスワードを入力してください
IP Address
- IPアドレス
+ IP アドレス
Enable Roaming
- ローミングを有効化
+ ローミングを有効化
@@ -65,24 +65,24 @@
Enter APN
- APN 入力
+ APN を入力
leave blank for automatic configuration
- 空欄で自動設定
+ 空白のままにして、自動設定にします
ConfirmationDialog
-
-
+
+
Ok
OK
-
+
Cancel
キャンセル
@@ -92,7 +92,7 @@
You must accept the Terms and Conditions in order to use openpilot.
- openpilotを利用するためには、利用規約に同意する必要があります。
+ openpilot をご利用される前に、利用規約に同意する必要があります。
@@ -102,157 +102,160 @@
Decline, uninstall %1
- 拒否してアンインストール %1
+ 拒否して %1 をアンインストール
DevicePanel
-
+
Dongle ID
- ドングル ID
+ ドングル番号 (Dongle ID)
-
+
N/A
N/A
-
+
Serial
- シリアル
+ シリアル番号
-
+
Driver Camera
- ドライバーカメラ
+ 車内カメラ
-
+
PREVIEW
- プレビュー
+ 見る
-
+
Preview the driver facing camera to ensure that driver monitoring has good visibility. (vehicle must be off)
- ドライバー向けカメラをプレビューする、ドライバーモニタリングの視認性を確保します。(車両の電源を切る必要があります)
+ 車内カメラをプレビューして、ドライバー監視システムの視界を確認ができます。(車両の電源を切る必要があります)
-
+
Reset Calibration
- キャリブレーションリセット
+ キャリブレーションをリセット
-
+
RESET
- リセット
+ リセット
-
+
Are you sure you want to reset calibration?
- 本当にキャリブレーションをリセットしますか?
+ キャリブレーションをリセットしてもよろしいですか?
-
+
Review Training Guide
- トレーニングガイドを見る
+ 入門書を見る
-
+
REVIEW
- レビュー
+ 見る
-
+
Review the rules, features, and limitations of openpilot
- openpilot 規約 機能 制約を見る
+ openpilot の特徴を見る
-
+
Are you sure you want to review the training guide?
- 本当にトレーニングガイドを見ますか?
+ 入門書を見てもよろしいですか?
-
+
Regulatory
- レギュレーション
+ 認証情報
-
+
VIEW
- ビュー
+ 見る
+
Change Language
- 言語を変更
+ 言語を変更
+
CHANGE
- 変更
+ 変更
+
Select a language
- 言語を選択する
+ 言語を選択
-
+
Reboot
再起動
-
+
Power Off
電源を切る
-
+
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.
- openpilot は、左右に4°、上に5°、下に8°の範囲に設置する必要があります。openpilot は継続的に校正されているので、手動でリセットする必要はほとんどありません。
+ openpilot は、左または右の4°以内、上の5°または下の8°以内にデバイスを取付ける必要があります。キャリブレーションを引き続きます、リセットはほとんど必要ありません。
-
+
Your device is pointed %1° %2 and %3° %4.
- デバイスは %1° %2 と %3° %4を示しています。
+ このデバイスは%2の%1°、%4の%3°に向けます。
-
+
down
下
-
+
up
上
-
+
left
左
-
+
right
右
-
+
Are you sure you want to reboot?
- 本当に再起動しますか?
+ 再起動してもよろしいですか?
-
+
Disengage to Reboot
- 再起動するために離脱します
+ openpilot をキャンセルして再起動ができます
-
+
Are you sure you want to power off?
- 本当に電源を切っても良いですか?
+ シャットダウンしてもよろしいですか?
-
+
Disengage to Power Off
- 電源を切るために離脱します
+ openpilot をキャンセルしてシャットダウンができます
@@ -260,7 +263,7 @@
Drives
- ドライブ
+ 運転履歴
@@ -293,25 +296,20 @@
camera starting
- カメラ起動
+ カメラを起動しています
InputDialog
-
+
Cancel
キャンセル
-
- Need at least
- 最低限必要なもの
-
-
-
- characters!
- 記号!
+
+ Need at least %1 characters!
+ パスワードは%%1文字以上で入力してください!
@@ -319,22 +317,73 @@
Installing...
- インストール...
+ インストールしています...
Receiving objects:
- オブジェクトを受信中:
+ オブジェクトをダウンロードしています:
Resolving deltas:
- リゾルブ解決中:
+ デルタを解決しています:
Updating files:
- ファイルを更新中:
+ ファイルを更新しています:
+
+
+
+ MapETA
+
+
+ eta
+ 予定到着時間
+
+
+
+ min
+ 分
+
+
+
+ hr
+ 時間
+
+
+
+ km
+ キロメートル
+
+
+
+ mi
+ マイル
+
+
+
+ MapInstructions
+
+
+ km
+ キロメートル
+
+
+
+ m
+ メートル
+
+
+
+ mi
+ マイル
+
+
+
+ ft
+ フィート
@@ -347,7 +396,7 @@
CLEAR
- クリア
+ 削除
@@ -357,39 +406,59 @@
Try the Navigation Beta
- ベータ版ナビゲーション
+ ベータ版ナビゲーションを試し
- Get turn-by-turn directions displayed and more with a comma
+ Get turn-by-turn directions displayed and more with a comma
prime subscription. Sign up now: https://connect.comma.ai
- より詳細な案内や表示に関する情報を得ることができます。 詳しくはこちら:https://connect.comma.ai
+ より詳細な案内情報を得ることができます。
+詳しくはこちら:https://connect.comma.ai
No home
location set
- 自宅の登録なし
-位置を設定
+ 自宅の住所はまだ
+設定されていません
No work
location set
- 職場の登録なし
-位置を設定
+ 職場の住所はまだ
+設定されていません
no recent destinations
- 最寄りの目的地がありません
+ 最近の目的地履歴がありません
+
+
+
+ MapWindow
+
+
+ Map Loading
+ マップを読み込んでいます
+
+
+
+ Waiting for GPS
+ GPS信号を探しています
MultiOptionDialog
+
Select
- 選択
+ 選択
+
+
+
+ Cancel
+ キャンセル
@@ -407,44 +476,44 @@ location set
- for "
- のため "
+ for "%1"
+ ネットワーク名:%1
Wrong password
- パスワードが間違っています
+ パスワードが間違っています
NvgWindow
-
+
km/h
- km/時
+ km/h
-
+
mph
- マイル/時
+ mph
-
-
+
+
MAX
- 最大
+ 最高速度
-
-
+
+
SPEED
速度
-
-
+
+
LIMIT
- 制限
+ 制限速度
@@ -470,78 +539,76 @@ location set
Pair your device to your comma account
- デバイスとアカウントを連携する
-
-
-
-
- <ol type='1' style='margin-left: 15px;'>
- <li style='margin-bottom: 50px;'>Go to https://connect.comma.ai on your phone</li>
- <li style='margin-bottom: 50px;'>Click "add new device" and scan the QR code on the right</li>
- <li style='margin-bottom: 50px;'>Bookmark connect.comma.ai to your home screen to use it like an app</li>
- </ol>
-
-
- <ol type='1' style='margin-left: 15px;'>
- <li style='margin-bottom: 50px;'>モバイルでアクセス https://connect.comma.ai</li>
- <li style='margin-bottom: 50px;'>“新しいデバイスを追加”をクリックし,QRコードを読み込みます</li>
- <li style='margin-bottom: 50px;'>connect.comma.aiをホーム画面にブックマークして、アプリのように使うことができます</li>
- </ol>
-
+ デバイスと comma アカウントを連携する
+
+
+
+ Go to https://connect.comma.ai on your phone
+ モバイルデバイスで「connect.comma.ai」にアクセスして
+
+
+
+ Click "add new device" and scan the QR code on the right
+ 「新しいデバイスを追加」を押すと、右側のQRコードをスキャンしてください
+
+
+
+ Bookmark connect.comma.ai to your home screen to use it like an app
+ 「connect.comma.ai」をホーム画面に追加して、アプリのように使うことができます
PrimeAdWidget
-
+
Upgrade Now
- いますぐアップグレード
+ 今すぐアップグレート
-
+
Become a comma prime member at connect.comma.ai
- connect.comma.ai のプライムメンバーになる
+ connect.comma.ai でプライム会員に登録できます
-
+
PRIME FEATURES:
- 主な機能:
+ 特典:
-
+
Remote access
リモートアクセス
-
+
1 year of storage
- 1年の保存期間
+ 一年間の保存期間
-
+
Developer perks
- 開発者特典
+ 開発者向け特典
PrimeUserWidget
-
+
✓ SUBSCRIBED
- ✓ 購読しました
+ ✓ 入会しました
-
+
comma prime
comma prime
-
+
CONNECT.COMMA.AI
CONNECT.COMMA.AI
-
+
COMMA POINTS
COMMA POINTS
@@ -556,30 +623,30 @@ location set
Exit
- 退出
+ 閉じる
-
+
dashcam
- ダッシュカム
+ ドライブレコーダー
-
+
openpilot
- オープンパイロット
+ openpilot
-
+
%1 minute%2 ago
%1 分%2 前
-
+
%1 hour%2 ago
%1 時間%2 前
-
+
%1 day%2 ago
%1 日%2 前
@@ -594,7 +661,7 @@ location set
Are you sure you want to reset your device?
- 本当に初期化しますか?
+ 初期化してもよろしいですか?
@@ -609,7 +676,7 @@ location set
System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.
- システムを初期化させます。 すべてのコンテンツと設定が削除されます。 キャンセルを押すと再起動します。
+ システムの初期化をリクエストしました。「確認」ボタンを押すとデバイスが初期化されます。「キャンセル」ボタンを押すと起動を続行します。
@@ -629,13 +696,13 @@ location set
Unable to mount data partition. Press confirm to reset your device.
- dataパーティションをマウントできません。 確認を押すとデバイスが初期化されます。
+ 「data」パーティションをマウントできません。「確認」ボタンを押すとデバイスが初期化されます。
RichTextDialog
-
+
Ok
OK
@@ -643,35 +710,35 @@ location set
SettingsWindow
-
+
×
×
-
+
Device
デバイス
-
-
+
+
Network
- ネットワーク
+ ネットワーク
-
+
Toggles
切り替え
-
+
Software
- ソフトウェア
+ ソフトウェア
-
+
Navigation
- ナビゲーション
+ ナビゲーション
@@ -711,7 +778,7 @@ location set
Connect to Wi-Fi
- Wi-Fiに接続
+ Wi-Fi に接続
@@ -737,7 +804,7 @@ location set
Dashcam
- ダッシュカム
+ ドライブレコーダー
@@ -747,7 +814,7 @@ location set
Enter URL
- URLを入力
+ URL を入力
@@ -767,7 +834,7 @@ location set
Ensure the entered URL is valid, and the device’s internet connection is good.
- 入力されたURLが有効であること、デバイスがインターネットに接続されていることを確認してください。
+ 入力された URL を確認し、デバイスがインターネットに接続されていることを確認してください。
@@ -777,23 +844,23 @@ location set
Start over
- 再スタート
+ 最初からやり直す
SetupWidget
-
+
Finish Setup
セットアップ完了
-
+
Pair your device with comma connect (connect.comma.ai) and claim your comma prime offer.
デバイスを comma connect (connect.comma.ai)でペアリングし comma prime 特典を申請してください。
-
+
Pair device
デバイスをペアリング
@@ -857,7 +924,7 @@ location set
PANDA
- パンダ
+ PANDA
@@ -908,68 +975,89 @@ location set
SoftwarePanel
-
+
Git Branch
Git ブランチ
-
+
Git Commit
Git コミット
-
+
OS Version
OS バージョン
-
+
Version
バージョン
-
+
Last Update Check
最終更新確認
-
+
The last time openpilot successfully checked for an update. The updater only runs while the car is off.
openpilotが最後にアップデートの確認に成功してからの時間です。アップデート処理は、車の電源が切れているときのみ実行されます。
-
+
Check for Update
- 更新確認
+ 更新プログラムをチェック
-
+
CHECKING
確認中
-
- Uninstall
- アンインストール
+
+ Switch Branch
+
-
+
+ ENTER
+
+
+
+
+
+ The new branch will be pulled the next time the updater runs.
+
+
+
+
+ Enter branch name
+
+
+
+
UNINSTALL
アンインストール
-
+
+ Uninstall %1
+ %1をアンインストール
+
+
+
Are you sure you want to uninstall?
- 本当にアンインストールしますか?
+ アンインストールしてもよろしいですか?
-
+
failed to fetch update
- 更新の取得に失敗しました
+ 更新のダウンロードにエラーが発生しました
-
-
+
+
CHECK
確認
@@ -984,7 +1072,7 @@ location set
Warning: This grants SSH access to all public keys in your GitHub settings. Never enter a GitHub username other than your own. A comma employee will NEVER ask you to add their GitHub username.
- 警告: これは、GitHub の設定にあるすべての公開鍵への SSH アクセスを許可するものです。自分以外のGitHubのユーザー名を入力しないでください。コンマのスタッフがGitHubのユーザー名を追加するようお願いすることはありません。
+ 警告: これは、GitHub の設定にあるすべての公開鍵への SSH アクセスを許可するものです。自分以外の GitHub のユーザー名を入力しないでください。コンマのスタッフが GitHub のユーザー名を追加するようお願いすることはありません。
@@ -995,7 +1083,7 @@ location set
Enter your GitHub username
- GitHubのユーザー名を入力してください
+ GitHub のユーザー名を入力してください
@@ -1010,7 +1098,7 @@ location set
Username '%1' has no keys on GitHub
- ユーザー名“%1”は GitHub に鍵がありません
+ ユーザー名 “%1” は GitHub に鍵がありません
@@ -1057,84 +1145,94 @@ location set
TogglesPanel
-
+
Enable openpilot
openpilot を有効化
-
+
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.
アダプティブクルーズコントロールとレーンキーピングドライバーアシスト(openpilotシステム)。この機能を使用するには、常に注意が必要です。この設定を変更すると、車の電源が切れたときに有効になります。
-
+
Enable Lane Departure Warnings
車線逸脱警報機能を有効化
-
+
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).
時速31マイル(50km)を超えるスピードで走行中、方向指示器を作動させずに検出された車線ライン上に車両が触れた場合、車線に戻るアラートを受信します。
-
+
Enable Right-Hand Drive
右ハンドルを有効化
-
+
Allow openpilot to obey left-hand traffic conventions and perform driver monitoring on right driver seat.
- openpilotが左側通行規則を遵守し、右側の運転席でドライバーの監視を行うことを可能にします。
+ openpilot が左側通行規則を遵守し、右ハンドルでドライバー監視を行うことを可能にします。
-
+
Use Metric System
メートル法を有効化
-
+
Display speed in km/h instead of mph.
- 速度はmphではなくkm/hで表示されます。
+ 速度は mph ではなく km/h で表示されます。
-
+
Record and Upload Driver Camera
- ドライバーカメラの録画とアップロード
+ 車内カメラの録画とアップロード
-
+
Upload data from the driver facing camera and help improve the driver monitoring algorithm.
- ドライバーカメラからのデータをアップロードし、ドライバー監視のアルゴリズム向上に役立てます。
+ 車内カメラの映像をアップロードし、ドライバー監視システムのアルゴリズムの向上に役立てます。
-
+
Disengage On Accelerator Pedal
- アクセルペダルで解除する
+ アクセル踏むと openpilot をキャンセル
-
+
When enabled, pressing the accelerator pedal will disengage openpilot.
- 有効な場合 openpilot はアクセルペダルを踏むと解除されます。
+ 有効な場合は、アクセルを踏むと openpilot をキャンセルします。
-
+
Show ETA in 24h format
24時間表示
-
+
Use 24h format instead of am/pm
- AM/PMの代わりに24時間形式を使用します
+ AM/PM の代わりに24時間形式を使用します
+
+
+
+ Show Map on Left Side of UI
+ ディスプレイの左側にマップを表示
+
+
+
+ Show map on left side when in split screen view.
+ 分割画面表示の場合、ディスプレイの左側にマップを表示します。
-
+
openpilot Longitudinal Control
- openpilot による垂直方向の制御
+ openpilot 縦方向制御
-
+
openpilot will disable the car's radar and will take over control of gas and brakes. Warning: this disables AEB!
- openpilotは、車のレーダーを無効化し、アクセルとブレーキの制御を引き継ぎます。注意:AEBを無効にします!
+ openpilot は、車のレーダーを無効化し、アクセルとブレーキの制御を引き継ぎます。注意:AEB を無効化にします!
@@ -1147,12 +1245,12 @@ location set
An operating system update is required. Connect your device to Wi-Fi for the fastest update experience. The download size is approximately 1GB.
- OSのアップデートが必要です。Wi-Fiに接続することで、最速のアップデートを体験できます。ダウンロードサイズは約1GBです。
+ オペレーティングシステムのアップデートが必要です。Wi-Fi に接続することで、最速のアップデートを体験できます。ダウンロードサイズは約 1GB です。
Connect to Wi-Fi
- Wi-Fiに接続
+ Wi-Fi に接続
@@ -1200,8 +1298,8 @@ location set
- Forget Wi-Fi Network "
- Wi-Fiを削除する”
+ Forget Wi-Fi Network "%1"?
+ Wi-Fiネットワーク%1を削除してもよろしいですか?
diff --git a/selfdrive/ui/translations/main_ko.ts b/selfdrive/ui/translations/main_ko.ts
index 4662a862bc..ec8f3a52d6 100644
--- a/selfdrive/ui/translations/main_ko.ts
+++ b/selfdrive/ui/translations/main_ko.ts
@@ -710,33 +710,33 @@ location set
SettingsWindow
-
+
×
×
-
+
Device
장치
-
-
+
+
Network
네트워크
-
+
Toggles
토글
-
+
Software
소프트웨어
-
+
Navigation
네비게이션
@@ -1025,33 +1025,39 @@ location set
+
- Enter name of new branch
+ The new branch will be pulled the next time the updater runs.
-
+
+ Enter branch name
+
+
+
+
UNINSTALL
제거
-
+
Uninstall %1
제거 %1
-
+
Are you sure you want to uninstall?
제거하시겠습니까?
-
+
failed to fetch update
업데이트를 가져올수없습니다
-
-
+
+
CHECK
확인
diff --git a/selfdrive/ui/translations/main_zh-CHS.ts b/selfdrive/ui/translations/main_zh-CHS.ts
index 744cf90345..9485e9449a 100644
--- a/selfdrive/ui/translations/main_zh-CHS.ts
+++ b/selfdrive/ui/translations/main_zh-CHS.ts
@@ -708,33 +708,33 @@ location set
SettingsWindow
-
+
×
×
-
+
Device
设备
-
-
+
+
Network
网络
-
+
Toggles
设定
-
+
Software
软件
-
+
Navigation
导航
@@ -1023,33 +1023,39 @@ location set
+
- Enter name of new branch
+ The new branch will be pulled the next time the updater runs.
-
+
+ Enter branch name
+
+
+
+
UNINSTALL
卸载
-
+
Uninstall %1
卸载 %1
-
+
Are you sure you want to uninstall?
您确定要卸载吗?
-
+
failed to fetch update
获取更新失败
-
-
+
+
CHECK
查看
diff --git a/selfdrive/ui/translations/main_zh-CHT.ts b/selfdrive/ui/translations/main_zh-CHT.ts
index 30fd666edd..9a3b800417 100644
--- a/selfdrive/ui/translations/main_zh-CHT.ts
+++ b/selfdrive/ui/translations/main_zh-CHT.ts
@@ -713,33 +713,33 @@ location set
SettingsWindow
-
+
×
×
-
+
Device
設備
-
-
+
+
Network
網路
-
+
Toggles
設定
-
+
Software
軟體
-
+
Navigation
導航
@@ -1028,33 +1028,39 @@ location set
+
- Enter name of new branch
+ The new branch will be pulled the next time the updater runs.
-
+
+ Enter branch name
+
+
+
+
UNINSTALL
卸載
-
+
Uninstall %1
卸載 %1
-
+
Are you sure you want to uninstall?
您確定您要卸載嗎?
-
+
failed to fetch update
下載更新失敗
-
-
+
+
CHECK
檢查
diff --git a/selfdrive/ui/update_translations.py b/selfdrive/ui/update_translations.py
index f06d54b2d5..5ccae0eb02 100755
--- a/selfdrive/ui/update_translations.py
+++ b/selfdrive/ui/update_translations.py
@@ -10,7 +10,7 @@ TRANSLATIONS_DIR = os.path.join(UI_DIR, "translations")
LANGUAGES_FILE = os.path.join(TRANSLATIONS_DIR, "languages.json")
-def update_translations(release=False, vanish=False, translations_dir=TRANSLATIONS_DIR):
+def update_translations(vanish=False, translations_dir=TRANSLATIONS_DIR):
with open(LANGUAGES_FILE, "r") as f:
translation_files = json.load(f)
@@ -26,16 +26,14 @@ def update_translations(release=False, vanish=False, translations_dir=TRANSLATIO
ret = os.system(args)
assert ret == 0
- if release:
- ret = os.system(f"lrelease {tr_file}")
- assert ret == 0
+ ret = os.system(f"lrelease {tr_file}")
+ assert ret == 0
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Update translation files for UI",
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
- parser.add_argument("--release", action="store_true", help="Create compiled QM translation files used by UI")
parser.add_argument("--vanish", action="store_true", help="Remove translations with source text no longer found")
args = parser.parse_args()
- update_translations(args.release, args.vanish)
+ update_translations(args.vanish)