wip
This commit is contained in:
71
selfdrive/ui/translations/README.md
Normal file
71
selfdrive/ui/translations/README.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# 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).
|
||||
|
||||
### Policy
|
||||
|
||||
Most of the languages supported by openpilot come from and are maintained by the community via pull requests. A pull request likely to be merged is one that [fixes a translation or adds missing translations.](https://github.com/commaai/openpilot/blob/master/selfdrive/ui/translations/README.md#improving-an-existing-language)
|
||||
|
||||
We also generally merge pull requests adding support for a new language if there are community members willing to maintain it. Maintaining a language is ensuring quality and completion of translations before each openpilot release.
|
||||
|
||||
comma may remove or hide language support from releases depending on translation quality and completeness.
|
||||
|
||||
### Adding a New Language
|
||||
|
||||
openpilot provides a few tools to help contributors manage their translations and to ensure quality. To get started:
|
||||
|
||||
1. Add your new language to [languages.json](/selfdrive/ui/translations/languages.json) with the appropriate [language code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) and the localized language name (Traditional Chinese is `中文(繁體)`).
|
||||
2. Generate the XML translation file (`*.ts`):
|
||||
```shell
|
||||
selfdrive/ui/update_translations.py
|
||||
```
|
||||
3. Edit the translation file, marking each translation as completed:
|
||||
```shell
|
||||
linguist selfdrive/ui/translations/your_language_file.ts
|
||||
```
|
||||
4. View your finished translations by compiling and starting the UI, then find it in the language selector:
|
||||
```shell
|
||||
scons -j$(nproc) selfdrive/ui && selfdrive/ui/ui
|
||||
```
|
||||
5. Read [Checking the UI](#checking-the-ui) to double-check your translations fit in the UI.
|
||||
|
||||
### Improving an Existing Language
|
||||
|
||||
Follow step 3. above, you can review existing translations and add missing ones. Once you're done, just open a pull request to openpilot.
|
||||
|
||||
### Checking the UI
|
||||
Different languages use varying space to convey the same message, so it's a good idea to double-check that your translations do not overlap and fit into each widget. Start the UI (step 4. above) and view each page, making adjustments to translations as needed.
|
||||
|
||||
#### To view offroad alerts:
|
||||
|
||||
With the UI started, you can view the offroad alerts with:
|
||||
```shell
|
||||
selfdrive/ui/tests/cycle_offroad_alerts.py
|
||||
```
|
||||
|
||||
### Updating the UI
|
||||
|
||||
Any time you edit source code in the UI, you need to update the translations to ensure the line numbers and contexts are up to date (first step above).
|
||||
|
||||
### Testing
|
||||
|
||||
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. They are run in CI, but you can also run them locally.
|
||||
|
||||
Tests translation files up to date:
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
---
|
||||

|
||||
138
selfdrive/ui/translations/auto_translate.py
Normal file
138
selfdrive/ui/translations/auto_translate.py
Normal file
@@ -0,0 +1,138 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import pathlib
|
||||
import xml.etree.ElementTree as ET
|
||||
from typing import cast
|
||||
|
||||
import requests
|
||||
|
||||
TRANSLATIONS_DIR = pathlib.Path(__file__).resolve().parent
|
||||
TRANSLATIONS_LANGUAGES = TRANSLATIONS_DIR / "languages.json"
|
||||
|
||||
OPENAI_MODEL = "gpt-4"
|
||||
OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
|
||||
OPENAI_PROMPT = "You are a professional translator from English to {language} (ISO 639 language code). " + \
|
||||
"The following sentence or word is in the GUI of a software called openpilot, translate it accordingly."
|
||||
|
||||
|
||||
def get_language_files(languages: list[str] = None) -> dict[str, pathlib.Path]:
|
||||
files = {}
|
||||
|
||||
with open(TRANSLATIONS_LANGUAGES) as fp:
|
||||
language_dict = json.load(fp)
|
||||
|
||||
for filename in language_dict.values():
|
||||
path = TRANSLATIONS_DIR / f"{filename}.ts"
|
||||
language = path.stem.split("main_")[1]
|
||||
|
||||
if languages is None or language in languages:
|
||||
files[language] = path
|
||||
|
||||
return files
|
||||
|
||||
|
||||
def translate_phrase(text: str, language: str) -> str:
|
||||
response = requests.post(
|
||||
"https://api.openai.com/v1/chat/completions",
|
||||
json={
|
||||
"model": OPENAI_MODEL,
|
||||
"messages": [
|
||||
{
|
||||
"role": "system",
|
||||
"content": OPENAI_PROMPT.format(language=language),
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": text,
|
||||
},
|
||||
],
|
||||
"temperature": 0.8,
|
||||
"max_tokens": 1024,
|
||||
"top_p": 1,
|
||||
},
|
||||
headers={
|
||||
"Authorization": f"Bearer {OPENAI_API_KEY}",
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
)
|
||||
|
||||
if 400 <= response.status_code < 600:
|
||||
raise requests.HTTPError(f'Error {response.status_code}: {response.json()}', response=response)
|
||||
|
||||
data = response.json()
|
||||
|
||||
return cast(str, data["choices"][0]["message"]["content"])
|
||||
|
||||
|
||||
def translate_file(path: pathlib.Path, language: str, all_: bool) -> None:
|
||||
tree = ET.parse(path)
|
||||
|
||||
root = tree.getroot()
|
||||
|
||||
for context in root.findall("./context"):
|
||||
name = context.find("name")
|
||||
if name is None:
|
||||
raise ValueError("name not found")
|
||||
|
||||
print(f"Context: {name.text}")
|
||||
|
||||
for message in context.findall("./message"):
|
||||
source = message.find("source")
|
||||
translation = message.find("translation")
|
||||
|
||||
if source is None or translation is None:
|
||||
raise ValueError("source or translation not found")
|
||||
|
||||
if not all_ and translation.attrib.get("type") != "unfinished":
|
||||
continue
|
||||
|
||||
llm_translation = translate_phrase(cast(str, source.text), language)
|
||||
|
||||
print(f"Source: {source.text}\n" +
|
||||
f"Current translation: {translation.text}\n" +
|
||||
f"LLM translation: {llm_translation}")
|
||||
|
||||
translation.text = llm_translation
|
||||
|
||||
with path.open("w", encoding="utf-8") as fp:
|
||||
fp.write('<?xml version="1.0" encoding="utf-8"?>\n' +
|
||||
'<!DOCTYPE TS>\n' +
|
||||
ET.tostring(root, encoding="utf-8").decode())
|
||||
|
||||
|
||||
def main():
|
||||
arg_parser = argparse.ArgumentParser("Auto translate")
|
||||
|
||||
group = arg_parser.add_mutually_exclusive_group(required=True)
|
||||
group.add_argument("-a", "--all-files", action="store_true", help="Translate all files")
|
||||
group.add_argument("-f", "--file", nargs="+", help="Translate the selected files. (Example: -f fr de)")
|
||||
|
||||
arg_parser.add_argument("-t", "--all-translations", action="store_true", default=False, help="Translate all sections. (Default: only unfinished)")
|
||||
|
||||
args = arg_parser.parse_args()
|
||||
|
||||
if OPENAI_API_KEY is None:
|
||||
print("OpenAI API key is missing. (Hint: use `export OPENAI_API_KEY=YOUR-KEY` before you run the script).\n" +
|
||||
"If you don't have one go to: https://beta.openai.com/account/api-keys.")
|
||||
exit(1)
|
||||
|
||||
files = get_language_files(None if args.all_files else args.file)
|
||||
|
||||
if args.file:
|
||||
missing_files = set(args.file) - set(files)
|
||||
if len(missing_files):
|
||||
print(f"No language files found: {missing_files}")
|
||||
exit(1)
|
||||
|
||||
print(f"Translation mode: {'all' if args.all_translations else 'only unfinished'}. Files: {list(files)}")
|
||||
|
||||
for lang, path in files.items():
|
||||
print(f"Translate {lang} ({path})")
|
||||
translate_file(path, lang, args.all_translations)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
62
selfdrive/ui/translations/create_badges.py
Normal file
62
selfdrive/ui/translations/create_badges.py
Normal file
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env python3
|
||||
import json
|
||||
import os
|
||||
import requests
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
from openpilot.common.basedir import BASEDIR
|
||||
from openpilot.selfdrive.ui.tests.test_translations import UNFINISHED_TRANSLATION_TAG
|
||||
from openpilot.selfdrive.ui.update_translations import LANGUAGES_FILE, TRANSLATIONS_DIR
|
||||
|
||||
TRANSLATION_TAG = "<translation"
|
||||
BADGE_HEIGHT = 20 + 8
|
||||
SHIELDS_URL = "https://img.shields.io/badge"
|
||||
|
||||
if __name__ == "__main__":
|
||||
with open(LANGUAGES_FILE) as f:
|
||||
translation_files = json.load(f)
|
||||
|
||||
badge_svg = []
|
||||
max_badge_width = 0 # keep track of max width to set parent element
|
||||
for idx, (name, file) in enumerate(translation_files.items()):
|
||||
with open(os.path.join(TRANSLATIONS_DIR, f"{file}.ts")) as tr_f:
|
||||
tr_file = tr_f.read()
|
||||
|
||||
total_translations = 0
|
||||
unfinished_translations = 0
|
||||
for line in tr_file.splitlines():
|
||||
if TRANSLATION_TAG in line:
|
||||
total_translations += 1
|
||||
if UNFINISHED_TRANSLATION_TAG in line:
|
||||
unfinished_translations += 1
|
||||
|
||||
percent_finished = int(100 - (unfinished_translations / total_translations * 100.))
|
||||
color = "green" if percent_finished == 100 else "orange" if percent_finished > 90 else "red"
|
||||
|
||||
# Download badge
|
||||
badge_label = f"LANGUAGE {name}"
|
||||
badge_message = f"{percent_finished}% complete"
|
||||
if unfinished_translations != 0:
|
||||
badge_message += f" ({unfinished_translations} unfinished)"
|
||||
|
||||
r = requests.get(f"{SHIELDS_URL}/{badge_label}-{badge_message}-{color}", timeout=10)
|
||||
assert r.status_code == 200, "Error downloading badge"
|
||||
content_svg = r.content.decode("utf-8")
|
||||
|
||||
xml = ET.fromstring(content_svg)
|
||||
assert "width" in xml.attrib
|
||||
max_badge_width = max(max_badge_width, int(xml.attrib["width"]))
|
||||
|
||||
# Make tag ids in each badge unique to combine them into one svg
|
||||
for tag in ("r", "s"):
|
||||
content_svg = content_svg.replace(f'id="{tag}"', f'id="{tag}{idx}"')
|
||||
content_svg = content_svg.replace(f'"url(#{tag})"', f'"url(#{tag}{idx})"')
|
||||
|
||||
badge_svg.extend([f'<g transform="translate(0, {idx * BADGE_HEIGHT})">', content_svg, "</g>"])
|
||||
|
||||
badge_svg.insert(0, '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ' +
|
||||
f'height="{len(translation_files) * BADGE_HEIGHT}" width="{max_badge_width}">')
|
||||
badge_svg.append("</svg>")
|
||||
|
||||
with open(os.path.join(BASEDIR, "translation_badge.svg"), "w") as badge_f:
|
||||
badge_f.write("\n".join(badge_svg))
|
||||
0
selfdrive/ui/translations/languages.json
Executable file → Normal file
0
selfdrive/ui/translations/languages.json
Executable file → Normal file
32
selfdrive/ui/translations/main_ar.ts
Executable file → Normal file
32
selfdrive/ui/translations/main_ar.ts
Executable file → Normal file
@@ -562,10 +562,6 @@
|
||||
<source>Exit</source>
|
||||
<translation>إغلاق</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>dashcam</source>
|
||||
<translation>dashcam</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation>openpilot</translation>
|
||||
@@ -652,14 +648,14 @@ This may take up to a minute.</source>
|
||||
<translation>يتم إعادة ضبط الجهاز...
|
||||
قد يستغرق الأمر حوالي الدقيقة.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<translation>اضغط على تأكيد لمسح جميع المحتويات والإعدادات. اضغط على إلغاء لمتابعة التشغيل.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device.</source>
|
||||
<translation>غير قادر على تحميل جزء البيانات. قد يكون الجزء تالفاً. اضغط على تأكيد لمسح جهازك وإعادة ضبطه.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWindow</name>
|
||||
@@ -766,6 +762,18 @@ This may take up to a minute.</source>
|
||||
<source>Select a language</source>
|
||||
<translation>اختر لغة</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Choose Software to Install</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation type="unfinished">openpilot</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Custom Software</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SetupWidget</name>
|
||||
@@ -1095,10 +1103,6 @@ This may take up to a minute.</source>
|
||||
<source>Driving Personality</source>
|
||||
<translation>شخصية القيادة</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars.</source>
|
||||
<translation>يوصى بالوضع القياسي. في الوضع الهجومي، سيتبع openpilot السيارات الرائدة بشكل أقرب، ويصبح أكثر هجومية في دواسات الوقود والمكابح. في وضعية الراحة يبقى openplot بعيداً لمسافة جيدة عن السيارة الرائدة.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot defaults to driving in <b>chill mode</b>. Experimental mode enables <b>alpha-level features</b> that aren't ready for chill mode. Experimental features are listed below:</source>
|
||||
<translation>يتم وضع openpilot بشكل قياسي في <b>وضعية الراحة</b>. يمكن الوضع التجريبي <b>ميزات المستوى ألفا</b> التي لا تكون جاهزة في وضع الراحة:</translation>
|
||||
@@ -1143,6 +1147,10 @@ This may take up to a minute.</source>
|
||||
<source>Enable the openpilot longitudinal control (alpha) toggle to allow Experimental mode.</source>
|
||||
<translation>تمكين التحكم الطولي من openpilot (ألفا) للسماح بالوضع التجريبي.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars. On supported cars, you can cycle through these personalities with your steering wheel distance button.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Updater</name>
|
||||
|
||||
30
selfdrive/ui/translations/main_de.ts
Executable file → Normal file
30
selfdrive/ui/translations/main_de.ts
Executable file → Normal file
@@ -557,10 +557,6 @@
|
||||
<source>Exit</source>
|
||||
<translation>Verlassen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>dashcam</source>
|
||||
<translation>dashcam</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation>openpilot</translation>
|
||||
@@ -634,12 +630,12 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<source>Resetting device...
|
||||
This may take up to a minute.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Resetting device...
|
||||
This may take up to a minute.</source>
|
||||
<source>System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
@@ -748,6 +744,18 @@ This may take up to a minute.</source>
|
||||
<source>Select a language</source>
|
||||
<translation>Sprache wählen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Choose Software to Install</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation type="unfinished">openpilot</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Custom Software</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SetupWidget</name>
|
||||
@@ -1097,10 +1105,6 @@ This may take up to a minute.</source>
|
||||
<source>On this car, openpilot defaults to the car's built-in ACC instead of openpilot's longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>End-to-End Longitudinal Control</source>
|
||||
<translation type="unfinished"></translation>
|
||||
@@ -1129,6 +1133,10 @@ This may take up to a minute.</source>
|
||||
<source>Enable the openpilot longitudinal control (alpha) toggle to allow Experimental mode.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars. On supported cars, you can cycle through these personalities with your steering wheel distance button.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Updater</name>
|
||||
|
||||
0
selfdrive/ui/translations/main_en.ts
Executable file → Normal file
0
selfdrive/ui/translations/main_en.ts
Executable file → Normal file
42
selfdrive/ui/translations/main_fr.ts
Executable file → Normal file
42
selfdrive/ui/translations/main_fr.ts
Executable file → Normal file
@@ -68,23 +68,23 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Hidden Network</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Réseau Caché</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CONNECT</source>
|
||||
<translation type="unfinished">CONNECTER</translation>
|
||||
<translation>CONNECTER</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter SSID</source>
|
||||
<translation type="unfinished">Entrer le SSID</translation>
|
||||
<translation>Entrer le SSID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter password</source>
|
||||
<translation type="unfinished">Entrer le mot de passe</translation>
|
||||
<translation>Entrer le mot de passe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>for "%1"</source>
|
||||
<translation type="unfinished">pour "%1"</translation>
|
||||
<translation>pour "%1"</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -558,10 +558,6 @@
|
||||
<source>Exit</source>
|
||||
<translation>Quitter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>dashcam</source>
|
||||
<translation>dashcam</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation>openpilot</translation>
|
||||
@@ -624,10 +620,6 @@ Cela peut prendre jusqu'à une minute.</translation>
|
||||
<source>System Reset</source>
|
||||
<translation>Réinitialisation du système</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<translation>Appuyez sur confirmer pour effacer tout le contenu et les paramètres. Appuyez sur annuler pour reprendre le démarrage.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cancel</source>
|
||||
<translation>Annuler</translation>
|
||||
@@ -644,6 +636,10 @@ Cela peut prendre jusqu'à une minute.</translation>
|
||||
<source>Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device.</source>
|
||||
<translation>Impossible de monter la partition data. La partition peut être corrompue. Appuyez sur confirmer pour effacer et réinitialiser votre appareil.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWindow</name>
|
||||
@@ -750,6 +746,18 @@ Cela peut prendre jusqu'à une minute.</translation>
|
||||
<source>Select a language</source>
|
||||
<translation>Choisir une langue</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Choose Software to Install</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation type="unfinished">openpilot</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Custom Software</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SetupWidget</name>
|
||||
@@ -1079,10 +1087,6 @@ Cela peut prendre jusqu'à une minute.</translation>
|
||||
<source>Driving Personality</source>
|
||||
<translation>Personnalité de conduite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars.</source>
|
||||
<translation>Le mode standard est recommandé. En mode agressif, openpilot suivra de plus près les voitures de tête et sera plus agressif avec l'accélérateur et le frein. En mode détendu, openpilot restera plus éloigné des voitures de tête.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot defaults to driving in <b>chill mode</b>. Experimental mode enables <b>alpha-level features</b> that aren't ready for chill mode. Experimental features are listed below:</source>
|
||||
<translation>Par défaut, openpilot conduit en <b>mode détente</b>. Le mode expérimental permet d'activer des <b>fonctionnalités alpha</b> qui ne sont pas prêtes pour le mode détente. Les fonctionnalités expérimentales sont listées ci-dessous :</translation>
|
||||
@@ -1127,6 +1131,10 @@ Cela peut prendre jusqu'à une minute.</translation>
|
||||
<source>Enable the openpilot longitudinal control (alpha) toggle to allow Experimental mode.</source>
|
||||
<translation>Activer le contrôle longitudinal d'openpilot (en alpha) pour autoriser le mode expérimental.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars. On supported cars, you can cycle through these personalities with your steering wheel distance button.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Updater</name>
|
||||
|
||||
30
selfdrive/ui/translations/main_ja.ts
Executable file → Normal file
30
selfdrive/ui/translations/main_ja.ts
Executable file → Normal file
@@ -556,10 +556,6 @@
|
||||
<source>Exit</source>
|
||||
<translation>閉じる</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>dashcam</source>
|
||||
<translation>ドライブレコーダー</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation>openpilot</translation>
|
||||
@@ -630,12 +626,12 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<source>Resetting device...
|
||||
This may take up to a minute.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Resetting device...
|
||||
This may take up to a minute.</source>
|
||||
<source>System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
@@ -744,6 +740,18 @@ This may take up to a minute.</source>
|
||||
<source>Select a language</source>
|
||||
<translation>言語を選択</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Choose Software to Install</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation type="unfinished">openpilot</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Custom Software</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SetupWidget</name>
|
||||
@@ -1089,10 +1097,6 @@ This may take up to a minute.</source>
|
||||
<source>On this car, openpilot defaults to the car's built-in ACC instead of openpilot's longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>End-to-End Longitudinal Control</source>
|
||||
<translation type="unfinished"></translation>
|
||||
@@ -1121,6 +1125,10 @@ This may take up to a minute.</source>
|
||||
<source>Enable the openpilot longitudinal control (alpha) toggle to allow Experimental mode.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars. On supported cars, you can cycle through these personalities with your steering wheel distance button.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Updater</name>
|
||||
|
||||
42
selfdrive/ui/translations/main_ko.ts
Executable file → Normal file
42
selfdrive/ui/translations/main_ko.ts
Executable file → Normal file
@@ -68,23 +68,23 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Hidden Network</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>숨겨진 네트워크</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CONNECT</source>
|
||||
<translation type="unfinished">연결됨</translation>
|
||||
<translation>연결됨</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter SSID</source>
|
||||
<translation type="unfinished">SSID 입력</translation>
|
||||
<translation>SSID 입력</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter password</source>
|
||||
<translation type="unfinished">비밀번호를 입력하세요</translation>
|
||||
<translation>비밀번호를 입력하세요</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>for "%1"</source>
|
||||
<translation type="unfinished">"%1"에 접속하려면 비밀번호가 필요합니다</translation>
|
||||
<translation>"%1"에 접속하려면 비밀번호가 필요합니다</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -557,10 +557,6 @@
|
||||
<source>Exit</source>
|
||||
<translation>종료</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>dashcam</source>
|
||||
<translation>블랙박스</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation>openpilot</translation>
|
||||
@@ -630,16 +626,16 @@
|
||||
<source>Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device.</source>
|
||||
<translation>데이터 파티션을 마운트할 수 없습니다. 파티션이 손상되었을 수 있습니다. 모든 설정을 삭제하고 장치를 초기화하려면 확인을 누르세요.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<translation>모든 콘텐츠와 설정을 삭제하려면 확인을 누르세요. 계속 부팅하려면 취소를 누르세요.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Resetting device...
|
||||
This may take up to a minute.</source>
|
||||
<translation>장치를 초기화하는 중...
|
||||
최대 1분이 소요될 수 있습니다.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<translation>시스템 재설정이 시작되었습니다. 모든 콘텐츠와 설정을 지우려면 확인을 누르시고 부팅을 재개하려면 취소를 누르세요.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWindow</name>
|
||||
@@ -746,6 +742,18 @@ This may take up to a minute.</source>
|
||||
<source>Select a language</source>
|
||||
<translation>언어를 선택하세요</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Choose Software to Install</source>
|
||||
<translation>설치할 소프트웨어 선택</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation>openpilot</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Custom Software</source>
|
||||
<translation>커스텀 소프트웨어</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SetupWidget</name>
|
||||
@@ -1095,10 +1103,6 @@ This may take up to a minute.</source>
|
||||
<source>Driving Personality</source>
|
||||
<translation>주행 모드</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars.</source>
|
||||
<translation>표준 모드를 권장합니다. 공격적 모드에서 openpilot은 앞 차량을 더 가까이 따라가며 적극적으로 가감속합니다. 편안한 모드에서 openpilot은 앞 차량을 더 멀리서 따라갑니다.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An alpha version of openpilot longitudinal control can be tested, along with Experimental mode, on non-release branches.</source>
|
||||
<translation>openpilot 가감속 제어 알파 버전은 비 릴리즈 브랜치에서 실험 모드와 함께 테스트할 수 있습니다.</translation>
|
||||
@@ -1123,6 +1127,10 @@ This may take up to a minute.</source>
|
||||
<source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner. When a navigation destination is set and the driving model is using it as input, the driving path on the map will turn green.</source>
|
||||
<translation>주행 시각화는 저속으로 주행 시 도로를 향한 광각 카메라로 자동 전환되어 일부 곡선 경로를 더 잘 보여줍니다. 실험 모드 로고는 우측 상단에 표시됩니다. 내비게이션 목적지가 설정되고 주행 모델에 입력되면 지도의 주행 경로가 녹색으로 바뀝니다.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars. On supported cars, you can cycle through these personalities with your steering wheel distance button.</source>
|
||||
<translation>표준 모드를 권장합니다. 공격적 모드의 openpilot은 선두 차량을 더 가까이 따라가고 가감속제어를 사용하여 더욱 공격적으로 움직입니다. 편안한 모드의 openpilot은 선두 차량으로부터 더 멀리 떨어져 있습니다. 지원되는 차량에서는 스티어링 휠 거리 버튼을 사용하여 이러한 특성을 순환할 수 있습니다.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Updater</name>
|
||||
|
||||
0
selfdrive/ui/translations/main_nl.ts
Executable file → Normal file
0
selfdrive/ui/translations/main_nl.ts
Executable file → Normal file
0
selfdrive/ui/translations/main_pl.ts
Executable file → Normal file
0
selfdrive/ui/translations/main_pl.ts
Executable file → Normal file
42
selfdrive/ui/translations/main_pt-BR.ts
Executable file → Normal file
42
selfdrive/ui/translations/main_pt-BR.ts
Executable file → Normal file
@@ -68,23 +68,23 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Hidden Network</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Rede Oculta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CONNECT</source>
|
||||
<translation type="unfinished">CONEXÃO</translation>
|
||||
<translation>CONECTE</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter SSID</source>
|
||||
<translation type="unfinished">Insira SSID</translation>
|
||||
<translation>Digite o SSID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter password</source>
|
||||
<translation type="unfinished">Insira a senha</translation>
|
||||
<translation>Insira a senha</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>for "%1"</source>
|
||||
<translation type="unfinished">para "%1"</translation>
|
||||
<translation>para "%1"</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -558,10 +558,6 @@
|
||||
<source>Exit</source>
|
||||
<translation>Sair</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>dashcam</source>
|
||||
<translation>dashcam</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation>openpilot</translation>
|
||||
@@ -634,16 +630,16 @@
|
||||
<source>Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device.</source>
|
||||
<translation>Não é possível montar a partição de dados. Partição corrompida. Confirme para apagar e redefinir o dispositivo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<translation>Pressione confirmar para apagar todo o conteúdo e configurações. Pressione cancelar para voltar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Resetting device...
|
||||
This may take up to a minute.</source>
|
||||
<translation>Redefinindo o dispositivo
|
||||
Isso pode levar até um minuto.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<translation>Reinicialização do sistema acionada. Pressione confirmar para apagar todo o conteúdo e configurações. Pressione cancel para retomar a inicialização.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWindow</name>
|
||||
@@ -750,6 +746,18 @@ Isso pode levar até um minuto.</translation>
|
||||
<source>Select a language</source>
|
||||
<translation>Selecione o Idioma</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Choose Software to Install</source>
|
||||
<translation>Escolha o Software a ser Instalado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation>openpilot</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Custom Software</source>
|
||||
<translation>Software Customizado</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SetupWidget</name>
|
||||
@@ -1099,10 +1107,6 @@ Isso pode levar até um minuto.</translation>
|
||||
<source>Driving Personality</source>
|
||||
<translation>Temperamento de Direção</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars.</source>
|
||||
<translation>Neutro é o recomendado. No modo disputa o openpilot seguirá o carro da frente mais de perto e será mais agressivo com a aceleração e frenagem. No modo calmo o openpilot se manterá mais longe do carro da frente.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An alpha version of openpilot longitudinal control can be tested, along with Experimental mode, on non-release branches.</source>
|
||||
<translation>Uma versão embrionária do controle longitudinal openpilot pode ser testada em conjunto com o modo Experimental, em branches que não sejam de produção.</translation>
|
||||
@@ -1127,6 +1131,10 @@ Isso pode levar até um minuto.</translation>
|
||||
<source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner. When a navigation destination is set and the driving model is using it as input, the driving path on the map will turn green.</source>
|
||||
<translation>A visualização de condução fará a transição para a câmera grande angular voltada para a estrada em baixas velocidades para mostrar melhor algumas curvas. O logotipo do modo Experimental também será mostrado no canto superior direito. Quando um destino de navegação é definido e o modelo de condução o utiliza como entrada o caminho de condução no mapa fica verde.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars. On supported cars, you can cycle through these personalities with your steering wheel distance button.</source>
|
||||
<translation>Neutro é o recomendado. No modo disputa o openpilot seguirá o carro da frente mais de perto e será mais agressivo com a aceleração e frenagem. No modo calmo o openpilot se manterá mais longe do carro da frente. Em carros compatíveis, você pode alternar esses temperamentos com o botão de distância do volante.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Updater</name>
|
||||
|
||||
32
selfdrive/ui/translations/main_th.ts
Executable file → Normal file
32
selfdrive/ui/translations/main_th.ts
Executable file → Normal file
@@ -557,10 +557,6 @@
|
||||
<source>Exit</source>
|
||||
<translation>ปิด</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>dashcam</source>
|
||||
<translation>กล้องติดรถยนต์</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation>openpilot</translation>
|
||||
@@ -632,14 +628,14 @@ This may take up to a minute.</source>
|
||||
<translation>กำลังรีเซ็ตอุปกรณ์...
|
||||
อาจใช้เวลาถึงหนึ่งนาที</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<translation>กดยืนยันเพื่อลบข้อมูลและการตั้งค่าทั้งหมด กดยกเลิกเพื่อบูตต่อ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device.</source>
|
||||
<translation>ไม่สามารถเมานต์พาร์ติชั่นข้อมูลได้ พาร์ติชั่นอาจเสียหาย กดยืนยันเพื่อลบและรีเซ็ตอุปกรณ์ของคุณ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWindow</name>
|
||||
@@ -746,6 +742,18 @@ This may take up to a minute.</source>
|
||||
<source>Select a language</source>
|
||||
<translation>เลือกภาษา</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Choose Software to Install</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation type="unfinished">openpilot</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Custom Software</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SetupWidget</name>
|
||||
@@ -1095,10 +1103,6 @@ This may take up to a minute.</source>
|
||||
<source>Driving Personality</source>
|
||||
<translation>บุคลิกการขับขี่</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars.</source>
|
||||
<translation>แนะนำให้ใช้แบบมาตรฐาน ในโหมดดุดัน openpilot จะตามรถคันหน้าใกล้ขึ้นและเร่งและเบรคแบบดุดันมากขึ้น ในโหมดผ่อนคลาย openpilot จะอยู่ห่างจากรถคันหน้ามากขึ้น</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An alpha version of openpilot longitudinal control can be tested, along with Experimental mode, on non-release branches.</source>
|
||||
<translation>ระบบควบคุมการเร่ง/เบรคโดย openpilot เวอร์ชัน alpha สามารถทดสอบได้พร้อมกับโหมดการทดลอง บน branch ที่กำลังพัฒนา</translation>
|
||||
@@ -1123,6 +1127,10 @@ This may take up to a minute.</source>
|
||||
<source>Enable the openpilot longitudinal control (alpha) toggle to allow Experimental mode.</source>
|
||||
<translation>เปิดระบบควบคุมการเร่ง/เบรคโดย openpilot (alpha) เพื่อเปิดใช้งานโหมดทดลอง</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars. On supported cars, you can cycle through these personalities with your steering wheel distance button.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Updater</name>
|
||||
|
||||
28
selfdrive/ui/translations/main_tr.ts
Executable file → Normal file
28
selfdrive/ui/translations/main_tr.ts
Executable file → Normal file
@@ -556,10 +556,6 @@
|
||||
<source>Exit</source>
|
||||
<translation>Çık</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>dashcam</source>
|
||||
<translation>araç yol kamerası</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation>openpilot</translation>
|
||||
@@ -631,11 +627,11 @@ This may take up to a minute.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<source>Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device.</source>
|
||||
<source>System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
@@ -744,6 +740,18 @@ This may take up to a minute.</source>
|
||||
<source>Select a language</source>
|
||||
<translation>Dil seçin</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Choose Software to Install</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation type="unfinished">openpilot</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Custom Software</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SetupWidget</name>
|
||||
@@ -1073,10 +1081,6 @@ This may take up to a minute.</source>
|
||||
<source>On this car, openpilot defaults to the car's built-in ACC instead of openpilot's longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot defaults to driving in <b>chill mode</b>. Experimental mode enables <b>alpha-level features</b> that aren't ready for chill mode. Experimental features are listed below:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
@@ -1121,6 +1125,10 @@ This may take up to a minute.</source>
|
||||
<source>Enable the openpilot longitudinal control (alpha) toggle to allow Experimental mode.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars. On supported cars, you can cycle through these personalities with your steering wheel distance button.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Updater</name>
|
||||
|
||||
42
selfdrive/ui/translations/main_zh-CHS.ts
Executable file → Normal file
42
selfdrive/ui/translations/main_zh-CHS.ts
Executable file → Normal file
@@ -68,23 +68,23 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Hidden Network</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>隐藏的网络</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CONNECT</source>
|
||||
<translation type="unfinished">CONNECT</translation>
|
||||
<translation>连线</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter SSID</source>
|
||||
<translation type="unfinished">输入SSID</translation>
|
||||
<translation>输入 SSID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter password</source>
|
||||
<translation type="unfinished">输入密码</translation>
|
||||
<translation>输入密码</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>for "%1"</source>
|
||||
<translation type="unfinished">网络名称:"%1"</translation>
|
||||
<translation>网络名称:"%1"</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -557,10 +557,6 @@
|
||||
<source>Exit</source>
|
||||
<translation>退出</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>dashcam</source>
|
||||
<translation>行车记录仪</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation>openpilot</translation>
|
||||
@@ -630,16 +626,16 @@
|
||||
<source>Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device.</source>
|
||||
<translation>无法挂载数据分区。分区可能已经损坏。请确认是否要删除并重新设置。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<translation>按下确认以删除所有内容及设置。按下取消来继续开机。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Resetting device...
|
||||
This may take up to a minute.</source>
|
||||
<translation>设备重置中…
|
||||
这可能需要一分钟的时间。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<translation>系统重置已触发。按下“确认”以清除所有内容和设置,按下“取消”以继续启动。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWindow</name>
|
||||
@@ -746,6 +742,18 @@ This may take up to a minute.</source>
|
||||
<source>Select a language</source>
|
||||
<translation>选择语言</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Choose Software to Install</source>
|
||||
<translation>选择要安装的软件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation>openpilot</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Custom Software</source>
|
||||
<translation>定制软件</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SetupWidget</name>
|
||||
@@ -1095,10 +1103,6 @@ This may take up to a minute.</source>
|
||||
<source>Driving Personality</source>
|
||||
<translation>驾驶风格</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars.</source>
|
||||
<translation>推荐使用标准模式。在积极模式中,openpilot 会更靠近前车并在加速和刹车方面更积极。在舒适模式中,openpilot 会与前车保持较远的距离。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An alpha version of openpilot longitudinal control can be tested, along with Experimental mode, on non-release branches.</source>
|
||||
<translation>在正式(release)版本以外的分支上,可以测试 openpilot 纵向控制的 Alpha 版本以及实验模式。</translation>
|
||||
@@ -1123,6 +1127,10 @@ This may take up to a minute.</source>
|
||||
<source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner. When a navigation destination is set and the driving model is using it as input, the driving path on the map will turn green.</source>
|
||||
<translation>行驶画面将在低速时切换到道路朝向的广角摄像头,以更好地显示一些转弯。实验模式标志也将显示在右上角。当设置了导航目的地并且驾驶模型正在使用它作为输入时,地图上的驾驶路径将变为绿色。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars. On supported cars, you can cycle through these personalities with your steering wheel distance button.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Updater</name>
|
||||
|
||||
42
selfdrive/ui/translations/main_zh-CHT.ts
Executable file → Normal file
42
selfdrive/ui/translations/main_zh-CHT.ts
Executable file → Normal file
@@ -68,23 +68,23 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Hidden Network</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>隱藏的網路</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CONNECT</source>
|
||||
<translation type="unfinished">雲端服務</translation>
|
||||
<translation>連線</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter SSID</source>
|
||||
<translation type="unfinished">輸入 SSID</translation>
|
||||
<translation>輸入 SSID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter password</source>
|
||||
<translation type="unfinished">輸入密碼</translation>
|
||||
<translation>輸入密碼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>for "%1"</source>
|
||||
<translation type="unfinished">給 "%1"</translation>
|
||||
<translation>給 "%1"</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -557,10 +557,6 @@
|
||||
<source>Exit</source>
|
||||
<translation>離開</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>dashcam</source>
|
||||
<translation>行車記錄器</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation>openpilot</translation>
|
||||
@@ -630,16 +626,16 @@
|
||||
<source>Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device.</source>
|
||||
<translation>無法掛載資料分割區。分割區可能已經毀損。請確認是否要刪除並重新設定。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<translation>按下確認以刪除所有內容及設定。按下取消來繼續開機。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Resetting device...
|
||||
This may take up to a minute.</source>
|
||||
<translation>設備重設中…
|
||||
這可能需要一分鐘的時間。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.</source>
|
||||
<translation>系統重設已啟動。按下「確認」以清除所有內容和設定,或按下「取消」以繼續開機。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWindow</name>
|
||||
@@ -746,6 +742,18 @@ This may take up to a minute.</source>
|
||||
<source>Select a language</source>
|
||||
<translation>選擇語言</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Choose Software to Install</source>
|
||||
<translation>選擇要安裝的軟體</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>openpilot</source>
|
||||
<translation>openpilot</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Custom Software</source>
|
||||
<translation>自訂軟體</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SetupWidget</name>
|
||||
@@ -1095,10 +1103,6 @@ This may take up to a minute.</source>
|
||||
<source>Driving Personality</source>
|
||||
<translation>駕駛風格</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars.</source>
|
||||
<translation>推薦使用標準模式。在積極模式中,openpilot 會更靠近前車並在加速和剎車方面更積極。在舒適模式中,openpilot 會與前車保持較遠的距離。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An alpha version of openpilot longitudinal control can be tested, along with Experimental mode, on non-release branches.</source>
|
||||
<translation>在正式 (release) 版以外的分支上可以測試 openpilot 縱向控制的 Alpha 版本以及實驗模式。</translation>
|
||||
@@ -1123,6 +1127,10 @@ This may take up to a minute.</source>
|
||||
<source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner. When a navigation destination is set and the driving model is using it as input, the driving path on the map will turn green.</source>
|
||||
<translation>行駛畫面將在低速時切換至道路朝向的廣角鏡頭,以更好地顯示一些轉彎。實驗模式圖示也將顯示在右上角。當設定了導航目的地並且行駛模型正在將其作為輸入時,地圖上的行駛路徑將變為綠色。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars. On supported cars, you can cycle through these personalities with your steering wheel distance button.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Updater</name>
|
||||
|
||||
Reference in New Issue
Block a user