From 5e057b98486b8af56630bf4be442730b970953f0 Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Thu, 29 Oct 2026 19:44:16 -0500 Subject: [PATCH] Share display translations across Galaxy and native UI --- openpilot/selfdrive/assets/fonts/Noto-OFL.txt | 92 +++ .../selfdrive/assets/fonts/Noto-SOURCE.txt | 14 + .../assets/fonts/NotoSansCJKjp-Regular.otf | Bin 240500 -> 188080 bytes .../assets/fonts/NotoSansCJKkr-Regular.otf | Bin 109356 -> 68640 bytes openpilot/selfdrive/ui/translations/app.pot | 672 ++++++++++++++++++ openpilot/selfdrive/ui/translations/app_de.po | 672 ++++++++++++++++++ openpilot/selfdrive/ui/translations/app_es.po | 672 ++++++++++++++++++ openpilot/selfdrive/ui/translations/app_fr.po | 672 ++++++++++++++++++ openpilot/selfdrive/ui/translations/app_ja.po | 672 ++++++++++++++++++ openpilot/selfdrive/ui/translations/app_ko.po | 672 ++++++++++++++++++ openpilot/selfdrive/ui/translations/app_vi.po | 672 ++++++++++++++++++ .../ui/translations/update_translations.py | 2 + openpilot/starpilot/galaxy/README.md | 19 + openpilot/starpilot/galaxy/localization.py | 22 + openpilot/starpilot/galaxy/server.py | 7 + .../galaxy/tests/test_localization.mjs | 44 ++ .../galaxy/tests/test_localization.py | 83 +++ openpilot/starpilot/galaxy/web/js/app.js | 3 + .../starpilot/galaxy/web/js/localization.js | 72 ++ openpilot/starpilot/ui/home_stats.py | 9 +- openpilot/starpilot/ui/presentation.py | 52 +- openpilot/starpilot/ui/settings_geometry.py | 3 + .../starpilot/ui/tests/test_presentation.py | 52 ++ openpilot/starpilot/ui/translation_strings.py | 200 ++++++ openpilot/system/ui/lib/application.py | 1 + openpilot/system/ui/lib/text_measure.py | 2 + 26 files changed, 5370 insertions(+), 11 deletions(-) create mode 100644 openpilot/selfdrive/assets/fonts/Noto-OFL.txt create mode 100644 openpilot/selfdrive/assets/fonts/Noto-SOURCE.txt create mode 100644 openpilot/starpilot/galaxy/localization.py create mode 100644 openpilot/starpilot/galaxy/tests/test_localization.mjs create mode 100644 openpilot/starpilot/galaxy/tests/test_localization.py create mode 100644 openpilot/starpilot/galaxy/web/js/localization.js create mode 100644 openpilot/starpilot/ui/translation_strings.py diff --git a/openpilot/selfdrive/assets/fonts/Noto-OFL.txt b/openpilot/selfdrive/assets/fonts/Noto-OFL.txt new file mode 100644 index 0000000000..d952d62c06 --- /dev/null +++ b/openpilot/selfdrive/assets/fonts/Noto-OFL.txt @@ -0,0 +1,92 @@ +This Font Software is licensed under the SIL Open Font License, +Version 1.1. + +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font +creation efforts of academic and linguistic communities, and to +provide a free and open framework in which fonts may be shared and +improved in partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply to +any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software +components as distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, +deleting, or substituting -- in part or in whole -- any of the +components of the Original Version, by changing formats or by porting +the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, +modify, redistribute, and sell modified and unmodified copies of the +Font Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, in +Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the +corresponding Copyright Holder. This restriction only applies to the +primary font name as presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created using +the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/openpilot/selfdrive/assets/fonts/Noto-SOURCE.txt b/openpilot/selfdrive/assets/fonts/Noto-SOURCE.txt new file mode 100644 index 0000000000..c33ff523ef --- /dev/null +++ b/openpilot/selfdrive/assets/fonts/Noto-SOURCE.txt @@ -0,0 +1,14 @@ +Japanese and Korean subsets expanded for the shared StarPilot UI catalogs. +Generated with fontTools.subset, retaining the union of each original font cmap +and all characters in app_ja.po/app_ko.po. Original subset: Dom 1f1b1d5db9. +The official upstream source fonts are licensed under Noto-OFL.txt. + +NotoSansCJKjp-Regular.otf +Source: https://raw.githubusercontent.com/notofonts/noto-cjk/main/Sans/OTF/Japanese/NotoSansCJKjp-Regular.otf +Source SHA-256: 68a3fc98800b2a27b371f2fb79991daf3633bd89309d4ffaa6946fd587f375b5 +Subset SHA-256: 7d165e774b66b35b3d0b814aacf8739525d04110bc4f7d316d45378a4758684b + +NotoSansCJKkr-Regular.otf +Source: https://raw.githubusercontent.com/notofonts/noto-cjk/main/Sans/OTF/Korean/NotoSansCJKkr-Regular.otf +Source SHA-256: 6bcb2a0703aa137e874fc2dffa85f6c21ba9a67fa329e81b8c801663af7e992a +Subset SHA-256: 6ee92618137820bfb2671c0601f43cb797ee4b440e52497d0b9fb5e1c923c19c diff --git a/openpilot/selfdrive/assets/fonts/NotoSansCJKjp-Regular.otf b/openpilot/selfdrive/assets/fonts/NotoSansCJKjp-Regular.otf index 15be88292fca463a022e791023edad91cfd6aecc..205ac0bf81527426a89c74ab10831b4c5a576a8b 100644 GIT binary patch delta 67522 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 diff --git a/openpilot/selfdrive/assets/fonts/NotoSansCJKkr-Regular.otf b/openpilot/selfdrive/assets/fonts/NotoSansCJKkr-Regular.otf index 373ba0b5f841a5e5a5248626f28988d756679d9f..0851aab1b11390de3b00906cdb192bdf89bf5da0 100644 GIT binary patch delta 20730 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

Ch!mS7b^@tUy77(bo-n3Jq|L{Sr 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 diff --git a/openpilot/selfdrive/ui/translations/app.pot b/openpilot/selfdrive/ui/translations/app.pot index 7a4e70f221..999216841a 100644 --- a/openpilot/selfdrive/ui/translations/app.pot +++ b/openpilot/selfdrive/ui/translations/app.pot @@ -824,3 +824,675 @@ msgstr "" #: openpilot/selfdrive/ui/layouts/settings/toggles.py msgid "Max speed when engaging openpilot. If you are already driving faster, your current speed is used. Resume restores the previous max speed. Changes apply the next time you engage." msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Home" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Controls" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Localization" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Language" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Use Kilometers (km/h)" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Right-Hand Drive" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Device display language. Untranslated text uses English. Park before changing language." +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Language, units and steering-wheel side for every vehicle." +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "On" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Off" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Auto" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Stock" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Custom" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Unavailable" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Available" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Invalid saved choice" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Invalid saved value" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved choice cannot be read" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Save" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saving" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Save changes" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Could not save" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Discard changes" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Unsaved changes" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Next" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Previous" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Continue" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Confirm" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Apply" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reset to defaults" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Restore" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Default" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Delete" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Remove" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Add" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Edit" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Search" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Refresh" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Retry" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading…" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Opening page…" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "This page could not open." +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reload page" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Refresh Galaxy" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connected" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disconnected" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connecting" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connect" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disconnect" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pair" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pairing" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sign in" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sign out" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Password" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "System" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Settings" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Appearance" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Display" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Custom Display Settings" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sounds & Alerts" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sounds" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Alerts" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving Controls" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vehicle Settings" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vehicle" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Wheel Controls" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving Model" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Models" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Model Laboratory" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Maps" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Navigation" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Favorites" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "History" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Drive History" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Recent drives" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Last drive" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Your driving" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "This week" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personal records" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vitals" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Storage" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Tools" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Logs" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Recordings" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Replay" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Cameras" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Camera" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Bluetooth" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Offline maps" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Downloaded" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Installed" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Install" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Update" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Updates" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Check for updates" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Parked Power" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Force Drive State" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Onroad" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Offroad" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Always On Lateral" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Long Planner" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Conditional Driving Modes" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Curve Speed Controller" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Speed Limit Controller" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Centering" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Change" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Change Settings" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Following distance" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Following time" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Traffic Mode" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Chill" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Experimental" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personality" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personalities" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved settings" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Backup" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Backups" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Export" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Import" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Play" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pause" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Stop" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Start" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Front" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Rear" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Left" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Right" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Small" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Big" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "None" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Enabled" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disabled" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not reported" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not detected" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Warning" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Accept" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reject" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not now" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Done" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Details" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "View" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "More" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "No drives" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "History unavailable" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading history" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Date unavailable" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "No results" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Search settings" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Take control" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "LEAD" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "CURVE" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "STOP LIGHT" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "SPEED" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "OFF" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PREVIOUS" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PERSONAL RECORDS" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "REPLAY" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PAUSE" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "STOP" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "BIG" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "UNKNOWN" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "DETAILS" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "ALL TIME" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PAST WEEK" +msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "DISTANCE THIS WEEK" +msgstr "" diff --git a/openpilot/selfdrive/ui/translations/app_de.po b/openpilot/selfdrive/ui/translations/app_de.po index f625a02752..ca9c761690 100644 --- a/openpilot/selfdrive/ui/translations/app_de.po +++ b/openpilot/selfdrive/ui/translations/app_de.po @@ -826,3 +826,675 @@ msgstr "" #: openpilot/selfdrive/ui/layouts/settings/toggles.py msgid "Max speed when engaging openpilot. If you are already driving faster, your current speed is used. Resume restores the previous max speed. Changes apply the next time you engage." msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Home" +msgstr "Startseite" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving" +msgstr "Fahren" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Controls" +msgstr "Steuerung" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Localization" +msgstr "Sprache und Region" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Language" +msgstr "Sprache" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Use Kilometers (km/h)" +msgstr "Kilometer verwenden (km/h)" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Right-Hand Drive" +msgstr "Rechtslenker" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Device display language. Untranslated text uses English. Park before changing language." +msgstr "Anzeigesprache des Geräts. Nicht übersetzter Text erscheint auf Englisch. Sprache nur im geparkten Zustand ändern." + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Language, units and steering-wheel side for every vehicle." +msgstr "Sprache, Einheiten und Lenkradseite für alle Fahrzeuge." + +#: openpilot/starpilot/ui/translation_strings.py +msgid "On" +msgstr "Ein" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Off" +msgstr "Aus" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Auto" +msgstr "Automatisch" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Stock" +msgstr "Serie" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Custom" +msgstr "Benutzerdefiniert" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Unavailable" +msgstr "Nicht verfügbar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Available" +msgstr "Verfügbar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Invalid saved choice" +msgstr "Gespeicherte Auswahl ungültig" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Invalid saved value" +msgstr "Gespeicherter Wert ungültig" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved choice cannot be read" +msgstr "Gespeicherte Auswahl nicht lesbar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Save" +msgstr "Speichern" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved" +msgstr "Gespeichert" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saving" +msgstr "Wird gespeichert" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Save changes" +msgstr "Änderungen speichern" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Could not save" +msgstr "Speichern fehlgeschlagen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Discard changes" +msgstr "Änderungen verwerfen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Unsaved changes" +msgstr "Ungespeicherte Änderungen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Next" +msgstr "Weiter" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Previous" +msgstr "Zurück" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Continue" +msgstr "Fortfahren" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Confirm" +msgstr "Bestätigen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Apply" +msgstr "Anwenden" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reset to defaults" +msgstr "Auf Standard zurücksetzen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Restore" +msgstr "Wiederherstellen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Default" +msgstr "Standard" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Delete" +msgstr "Löschen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Remove" +msgstr "Entfernen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Add" +msgstr "Hinzufügen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Edit" +msgstr "Bearbeiten" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Search" +msgstr "Suchen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Refresh" +msgstr "Aktualisieren" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Retry" +msgstr "Erneut versuchen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading" +msgstr "Wird geladen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading…" +msgstr "Wird geladen…" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Opening page…" +msgstr "Seite wird geöffnet…" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "This page could not open." +msgstr "Diese Seite konnte nicht geöffnet werden." + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reload page" +msgstr "Seite neu laden" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Refresh Galaxy" +msgstr "Galaxy aktualisieren" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connected" +msgstr "Verbunden" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disconnected" +msgstr "Getrennt" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connecting" +msgstr "Verbindung wird hergestellt" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connect" +msgstr "Verbinden" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disconnect" +msgstr "Trennen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pair" +msgstr "Koppeln" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pairing" +msgstr "Wird gekoppelt" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sign in" +msgstr "Anmelden" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sign out" +msgstr "Abmelden" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Password" +msgstr "Passwort" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "System" +msgstr "System" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Settings" +msgstr "Einstellungen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Appearance" +msgstr "Darstellung" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Display" +msgstr "Anzeige" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Custom Display Settings" +msgstr "Benutzerdefinierte Anzeigeeinstellungen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sounds & Alerts" +msgstr "Töne und Warnungen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sounds" +msgstr "Töne" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Alerts" +msgstr "Warnungen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving Controls" +msgstr "Fahrsteuerung" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vehicle Settings" +msgstr "Fahrzeugeinstellungen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vehicle" +msgstr "Fahrzeug" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Wheel Controls" +msgstr "Lenkradbedienung" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving Model" +msgstr "Fahrmodell" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Models" +msgstr "Modelle" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Model Laboratory" +msgstr "Modelllabor" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Maps" +msgstr "Karten" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Navigation" +msgstr "Navigation" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Favorites" +msgstr "Favoriten" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "History" +msgstr "Verlauf" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Drive History" +msgstr "Fahrtenverlauf" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Recent drives" +msgstr "Letzte Fahrten" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Last drive" +msgstr "Letzte Fahrt" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Your driving" +msgstr "Deine Fahrten" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "This week" +msgstr "Diese Woche" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personal records" +msgstr "Persönliche Rekorde" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vitals" +msgstr "Systemzustand" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Storage" +msgstr "Speicher" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Tools" +msgstr "Werkzeuge" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Logs" +msgstr "Protokolle" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Recordings" +msgstr "Aufzeichnungen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Replay" +msgstr "Wiedergabe" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Cameras" +msgstr "Kameras" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Camera" +msgstr "Kamera" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Bluetooth" +msgstr "Bluetooth" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Offline maps" +msgstr "Offline-Karten" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Downloaded" +msgstr "Heruntergeladen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Installed" +msgstr "Installiert" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Install" +msgstr "Installieren" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Update" +msgstr "Aktualisieren" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Updates" +msgstr "Aktualisierungen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Check for updates" +msgstr "Nach Updates suchen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Parked Power" +msgstr "Stromversorgung beim Parken" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Force Drive State" +msgstr "Fahrzustand erzwingen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Onroad" +msgstr "Fahrbetrieb" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Offroad" +msgstr "Geparkt" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Always On Lateral" +msgstr "Dauerhafte Querführung" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Long Planner" +msgstr "Längsplaner" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Conditional Driving Modes" +msgstr "Bedingte Fahrmodi" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Curve Speed Controller" +msgstr "Kurvengeschwindigkeitsregelung" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Speed Limit Controller" +msgstr "Tempolimitregelung" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Centering" +msgstr "Spurzentrierung" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Change" +msgstr "Spurwechsel" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Change Settings" +msgstr "Spurwechseleinstellungen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Following distance" +msgstr "Folgeabstand" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Following time" +msgstr "Folgezeit" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Traffic Mode" +msgstr "Staumodus" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Chill" +msgstr "Ruhig" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Experimental" +msgstr "Experimentell" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personality" +msgstr "Fahrstil" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personalities" +msgstr "Fahrstile" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved settings" +msgstr "Gespeicherte Einstellungen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Backup" +msgstr "Sicherung" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Backups" +msgstr "Sicherungen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Export" +msgstr "Exportieren" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Import" +msgstr "Importieren" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Play" +msgstr "Abspielen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pause" +msgstr "Pause" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Stop" +msgstr "Stopp" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Start" +msgstr "Starten" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Front" +msgstr "Vorne" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Rear" +msgstr "Hinten" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Left" +msgstr "Links" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Right" +msgstr "Rechts" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Small" +msgstr "Klein" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Big" +msgstr "Groß" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "None" +msgstr "Keine" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Enabled" +msgstr "Aktiviert" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disabled" +msgstr "Deaktiviert" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not reported" +msgstr "Nicht gemeldet" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not detected" +msgstr "Nicht erkannt" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Warning" +msgstr "Warnung" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Accept" +msgstr "Annehmen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reject" +msgstr "Ablehnen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not now" +msgstr "Nicht jetzt" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Done" +msgstr "Fertig" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Details" +msgstr "Details" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "View" +msgstr "Ansehen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "More" +msgstr "Mehr" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "No drives" +msgstr "Keine Fahrten" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "History unavailable" +msgstr "Verlauf nicht verfügbar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading history" +msgstr "Verlauf wird geladen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Date unavailable" +msgstr "Datum nicht verfügbar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "No results" +msgstr "Keine Ergebnisse" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Search settings" +msgstr "Einstellungen suchen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Take control" +msgstr "Steuerung übernehmen" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "LEAD" +msgstr "VORAUSFAHRENDES FAHRZEUG" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "CURVE" +msgstr "KURVE" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "STOP LIGHT" +msgstr "AMPEL" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "SPEED" +msgstr "GESCHWINDIGKEIT" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "OFF" +msgstr "AUS" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PREVIOUS" +msgstr "ZURÜCK" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PERSONAL RECORDS" +msgstr "PERSÖNLICHE REKORDE" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "REPLAY" +msgstr "WIEDERGABE" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PAUSE" +msgstr "PAUSE" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "STOP" +msgstr "STOPP" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "BIG" +msgstr "GROSS" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "UNKNOWN" +msgstr "UNBEKANNT" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "DETAILS" +msgstr "DETAILS" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "ALL TIME" +msgstr "GESAMTZEIT" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PAST WEEK" +msgstr "LETZTE WOCHE" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "DISTANCE THIS WEEK" +msgstr "STRECKE DIESE WOCHE" diff --git a/openpilot/selfdrive/ui/translations/app_es.po b/openpilot/selfdrive/ui/translations/app_es.po index c0e5abc9ee..66de43af65 100644 --- a/openpilot/selfdrive/ui/translations/app_es.po +++ b/openpilot/selfdrive/ui/translations/app_es.po @@ -826,3 +826,675 @@ msgstr "" #: openpilot/selfdrive/ui/layouts/settings/toggles.py msgid "Max speed when engaging openpilot. If you are already driving faster, your current speed is used. Resume restores the previous max speed. Changes apply the next time you engage." msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Home" +msgstr "Inicio" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving" +msgstr "Conducción" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Controls" +msgstr "Controles" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Localization" +msgstr "Idioma y región" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Language" +msgstr "Idioma" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Use Kilometers (km/h)" +msgstr "Usar kilómetros (km/h)" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Right-Hand Drive" +msgstr "Volante a la derecha" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Device display language. Untranslated text uses English. Park before changing language." +msgstr "Idioma de la pantalla del dispositivo. El texto sin traducir aparece en inglés. Estacione antes de cambiar el idioma." + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Language, units and steering-wheel side for every vehicle." +msgstr "Idioma, unidades y posición del volante para todos los vehículos." + +#: openpilot/starpilot/ui/translation_strings.py +msgid "On" +msgstr "Activado" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Off" +msgstr "Desactivado" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Auto" +msgstr "Automático" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Stock" +msgstr "De fábrica" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Custom" +msgstr "Personalizado" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Unavailable" +msgstr "No disponible" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Available" +msgstr "Disponible" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Invalid saved choice" +msgstr "Selección guardada no válida" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Invalid saved value" +msgstr "Valor guardado no válido" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved choice cannot be read" +msgstr "No se puede leer la selección guardada" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Save" +msgstr "Guardar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved" +msgstr "Guardado" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saving" +msgstr "Guardando" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Save changes" +msgstr "Guardar cambios" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Could not save" +msgstr "No se pudo guardar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Discard changes" +msgstr "Descartar cambios" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Unsaved changes" +msgstr "Cambios sin guardar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Next" +msgstr "Siguiente" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Previous" +msgstr "Anterior" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Continue" +msgstr "Continuar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Confirm" +msgstr "Confirmar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Apply" +msgstr "Aplicar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reset to defaults" +msgstr "Restablecer valores predeterminados" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Restore" +msgstr "Restaurar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Default" +msgstr "Predeterminado" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Delete" +msgstr "Eliminar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Remove" +msgstr "Quitar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Add" +msgstr "Añadir" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Edit" +msgstr "Editar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Search" +msgstr "Buscar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Refresh" +msgstr "Actualizar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Retry" +msgstr "Reintentar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading" +msgstr "Cargando" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading…" +msgstr "Cargando…" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Opening page…" +msgstr "Abriendo página…" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "This page could not open." +msgstr "No se pudo abrir esta página." + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reload page" +msgstr "Recargar página" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Refresh Galaxy" +msgstr "Actualizar Galaxy" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connected" +msgstr "Conectado" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disconnected" +msgstr "Desconectado" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connecting" +msgstr "Conectando" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connect" +msgstr "Conectar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disconnect" +msgstr "Desconectar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pair" +msgstr "Vincular" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pairing" +msgstr "Vinculando" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sign in" +msgstr "Iniciar sesión" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sign out" +msgstr "Cerrar sesión" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Password" +msgstr "Contraseña" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "System" +msgstr "Sistema" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Settings" +msgstr "Ajustes" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Appearance" +msgstr "Apariencia" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Display" +msgstr "Pantalla" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Custom Display Settings" +msgstr "Ajustes de pantalla personalizados" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sounds & Alerts" +msgstr "Sonidos y alertas" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sounds" +msgstr "Sonidos" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Alerts" +msgstr "Alertas" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving Controls" +msgstr "Controles de conducción" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vehicle Settings" +msgstr "Ajustes del vehículo" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vehicle" +msgstr "Vehículo" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Wheel Controls" +msgstr "Controles del volante" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving Model" +msgstr "Modelo de conducción" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Models" +msgstr "Modelos" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Model Laboratory" +msgstr "Laboratorio de modelos" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Maps" +msgstr "Mapas" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Navigation" +msgstr "Navegación" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Favorites" +msgstr "Favoritos" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "History" +msgstr "Historial" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Drive History" +msgstr "Historial de conducción" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Recent drives" +msgstr "Trayectos recientes" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Last drive" +msgstr "Último trayecto" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Your driving" +msgstr "Tu conducción" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "This week" +msgstr "Esta semana" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personal records" +msgstr "Récords personales" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vitals" +msgstr "Estado del sistema" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Storage" +msgstr "Almacenamiento" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Tools" +msgstr "Herramientas" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Logs" +msgstr "Registros" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Recordings" +msgstr "Grabaciones" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Replay" +msgstr "Reproducción" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Cameras" +msgstr "Cámaras" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Camera" +msgstr "Cámara" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Bluetooth" +msgstr "Bluetooth" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Offline maps" +msgstr "Mapas sin conexión" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Downloaded" +msgstr "Descargado" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Installed" +msgstr "Instalado" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Install" +msgstr "Instalar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Update" +msgstr "Actualizar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Updates" +msgstr "Actualizaciones" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Check for updates" +msgstr "Buscar actualizaciones" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Parked Power" +msgstr "Energía al estacionar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Force Drive State" +msgstr "Forzar estado de conducción" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Onroad" +msgstr "En marcha" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Offroad" +msgstr "Estacionado" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Always On Lateral" +msgstr "Control lateral permanente" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Long Planner" +msgstr "Planificador longitudinal" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Conditional Driving Modes" +msgstr "Modos de conducción condicionales" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Curve Speed Controller" +msgstr "Control de velocidad en curvas" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Speed Limit Controller" +msgstr "Control de límites de velocidad" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Centering" +msgstr "Centrado de carril" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Change" +msgstr "Cambio de carril" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Change Settings" +msgstr "Ajustes de cambio de carril" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Following distance" +msgstr "Distancia de seguimiento" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Following time" +msgstr "Tiempo de seguimiento" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Traffic Mode" +msgstr "Modo de tráfico" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Chill" +msgstr "Tranquilo" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Experimental" +msgstr "Experimental" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personality" +msgstr "Estilo de conducción" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personalities" +msgstr "Estilos de conducción" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved settings" +msgstr "Ajustes guardados" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Backup" +msgstr "Copia de seguridad" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Backups" +msgstr "Copias de seguridad" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Export" +msgstr "Exportar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Import" +msgstr "Importar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Play" +msgstr "Reproducir" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pause" +msgstr "Pausar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Stop" +msgstr "Detener" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Start" +msgstr "Iniciar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Front" +msgstr "Delantera" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Rear" +msgstr "Trasera" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Left" +msgstr "Izquierda" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Right" +msgstr "Derecha" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Small" +msgstr "Pequeño" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Big" +msgstr "Grande" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "None" +msgstr "Ninguno" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Enabled" +msgstr "Activado" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disabled" +msgstr "Desactivado" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not reported" +msgstr "No informado" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not detected" +msgstr "No detectado" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Warning" +msgstr "Advertencia" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Accept" +msgstr "Aceptar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reject" +msgstr "Rechazar" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not now" +msgstr "Ahora no" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Done" +msgstr "Hecho" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Details" +msgstr "Detalles" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "View" +msgstr "Ver" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "More" +msgstr "Más" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "No drives" +msgstr "No hay trayectos" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "History unavailable" +msgstr "Historial no disponible" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading history" +msgstr "Cargando historial" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Date unavailable" +msgstr "Fecha no disponible" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "No results" +msgstr "Sin resultados" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Search settings" +msgstr "Buscar ajustes" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Take control" +msgstr "Tome el control" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "LEAD" +msgstr "VEHÍCULO DELANTERO" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "CURVE" +msgstr "CURVA" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "STOP LIGHT" +msgstr "SEMÁFORO" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "SPEED" +msgstr "VELOCIDAD" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "OFF" +msgstr "DESACTIVADO" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PREVIOUS" +msgstr "ANTERIOR" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PERSONAL RECORDS" +msgstr "RÉCORDS PERSONALES" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "REPLAY" +msgstr "REPRODUCCIÓN" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PAUSE" +msgstr "PAUSAR" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "STOP" +msgstr "DETENER" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "BIG" +msgstr "GRANDE" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "UNKNOWN" +msgstr "DESCONOCIDO" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "DETAILS" +msgstr "DETALLES" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "ALL TIME" +msgstr "TODO EL TIEMPO" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PAST WEEK" +msgstr "ÚLTIMA SEMANA" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "DISTANCE THIS WEEK" +msgstr "DISTANCIA ESTA SEMANA" diff --git a/openpilot/selfdrive/ui/translations/app_fr.po b/openpilot/selfdrive/ui/translations/app_fr.po index 52e43dcf1a..89152cb0fb 100644 --- a/openpilot/selfdrive/ui/translations/app_fr.po +++ b/openpilot/selfdrive/ui/translations/app_fr.po @@ -826,3 +826,675 @@ msgstr "" #: openpilot/selfdrive/ui/layouts/settings/toggles.py msgid "Max speed when engaging openpilot. If you are already driving faster, your current speed is used. Resume restores the previous max speed. Changes apply the next time you engage." msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Home" +msgstr "Accueil" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving" +msgstr "Conduite" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Controls" +msgstr "Commandes" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Localization" +msgstr "Langue et région" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Language" +msgstr "Langue" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Use Kilometers (km/h)" +msgstr "Utiliser les kilomètres (km/h)" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Right-Hand Drive" +msgstr "Conduite à droite" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Device display language. Untranslated text uses English. Park before changing language." +msgstr "Langue d’affichage de l’appareil. Le texte non traduit reste en anglais. Garez-vous avant de changer la langue." + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Language, units and steering-wheel side for every vehicle." +msgstr "Langue, unités et côté du volant pour tous les véhicules." + +#: openpilot/starpilot/ui/translation_strings.py +msgid "On" +msgstr "Activé" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Off" +msgstr "Désactivé" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Auto" +msgstr "Automatique" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Stock" +msgstr "D’origine" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Custom" +msgstr "Personnalisé" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Unavailable" +msgstr "Indisponible" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Available" +msgstr "Disponible" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Invalid saved choice" +msgstr "Choix enregistré non valide" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Invalid saved value" +msgstr "Valeur enregistrée non valide" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved choice cannot be read" +msgstr "Impossible de lire le choix enregistré" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Save" +msgstr "Enregistrer" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved" +msgstr "Enregistré" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saving" +msgstr "Enregistrement" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Save changes" +msgstr "Enregistrer les modifications" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Could not save" +msgstr "Échec de l’enregistrement" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Discard changes" +msgstr "Abandonner les modifications" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Unsaved changes" +msgstr "Modifications non enregistrées" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Next" +msgstr "Suivant" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Previous" +msgstr "Précédent" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Continue" +msgstr "Continuer" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Confirm" +msgstr "Confirmer" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Apply" +msgstr "Appliquer" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reset to defaults" +msgstr "Rétablir les valeurs par défaut" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Restore" +msgstr "Restaurer" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Default" +msgstr "Par défaut" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Delete" +msgstr "Supprimer" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Remove" +msgstr "Retirer" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Add" +msgstr "Ajouter" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Edit" +msgstr "Modifier" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Search" +msgstr "Rechercher" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Refresh" +msgstr "Actualiser" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Retry" +msgstr "Réessayer" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading" +msgstr "Chargement" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading…" +msgstr "Chargement…" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Opening page…" +msgstr "Ouverture de la page…" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "This page could not open." +msgstr "Impossible d’ouvrir cette page." + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reload page" +msgstr "Recharger la page" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Refresh Galaxy" +msgstr "Actualiser Galaxy" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connected" +msgstr "Connecté" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disconnected" +msgstr "Déconnecté" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connecting" +msgstr "Connexion" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connect" +msgstr "Connecter" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disconnect" +msgstr "Déconnecter" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pair" +msgstr "Associer" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pairing" +msgstr "Association" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sign in" +msgstr "Se connecter" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sign out" +msgstr "Se déconnecter" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Password" +msgstr "Mot de passe" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "System" +msgstr "Système" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Settings" +msgstr "Paramètres" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Appearance" +msgstr "Apparence" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Display" +msgstr "Affichage" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Custom Display Settings" +msgstr "Paramètres d’affichage personnalisés" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sounds & Alerts" +msgstr "Sons et alertes" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sounds" +msgstr "Sons" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Alerts" +msgstr "Alertes" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving Controls" +msgstr "Commandes de conduite" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vehicle Settings" +msgstr "Paramètres du véhicule" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vehicle" +msgstr "Véhicule" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Wheel Controls" +msgstr "Commandes au volant" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving Model" +msgstr "Modèle de conduite" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Models" +msgstr "Modèles" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Model Laboratory" +msgstr "Laboratoire de modèles" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Maps" +msgstr "Cartes" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Navigation" +msgstr "Navigation" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Favorites" +msgstr "Favoris" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "History" +msgstr "Historique" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Drive History" +msgstr "Historique des trajets" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Recent drives" +msgstr "Trajets récents" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Last drive" +msgstr "Dernier trajet" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Your driving" +msgstr "Votre conduite" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "This week" +msgstr "Cette semaine" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personal records" +msgstr "Records personnels" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vitals" +msgstr "État du système" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Storage" +msgstr "Stockage" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Tools" +msgstr "Outils" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Logs" +msgstr "Journaux" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Recordings" +msgstr "Enregistrements" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Replay" +msgstr "Relecture" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Cameras" +msgstr "Caméras" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Camera" +msgstr "Caméra" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Bluetooth" +msgstr "Bluetooth" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Offline maps" +msgstr "Cartes hors ligne" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Downloaded" +msgstr "Téléchargé" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Installed" +msgstr "Installé" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Install" +msgstr "Installer" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Update" +msgstr "Mettre à jour" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Updates" +msgstr "Mises à jour" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Check for updates" +msgstr "Rechercher des mises à jour" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Parked Power" +msgstr "Alimentation à l’arrêt" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Force Drive State" +msgstr "Forcer l’état de conduite" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Onroad" +msgstr "En conduite" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Offroad" +msgstr "À l’arrêt" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Always On Lateral" +msgstr "Contrôle latéral permanent" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Long Planner" +msgstr "Planificateur longitudinal" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Conditional Driving Modes" +msgstr "Modes de conduite conditionnels" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Curve Speed Controller" +msgstr "Contrôle de vitesse en virage" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Speed Limit Controller" +msgstr "Contrôle des limitations de vitesse" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Centering" +msgstr "Centrage dans la voie" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Change" +msgstr "Changement de voie" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Change Settings" +msgstr "Paramètres de changement de voie" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Following distance" +msgstr "Distance de suivi" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Following time" +msgstr "Temps de suivi" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Traffic Mode" +msgstr "Mode embouteillage" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Chill" +msgstr "Calme" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Experimental" +msgstr "Expérimental" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personality" +msgstr "Style de conduite" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personalities" +msgstr "Styles de conduite" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved settings" +msgstr "Paramètres enregistrés" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Backup" +msgstr "Sauvegarde" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Backups" +msgstr "Sauvegardes" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Export" +msgstr "Exporter" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Import" +msgstr "Importer" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Play" +msgstr "Lire" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pause" +msgstr "Pause" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Stop" +msgstr "Arrêter" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Start" +msgstr "Démarrer" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Front" +msgstr "Avant" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Rear" +msgstr "Arrière" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Left" +msgstr "Gauche" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Right" +msgstr "Droite" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Small" +msgstr "Petit" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Big" +msgstr "Grand" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "None" +msgstr "Aucun" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Enabled" +msgstr "Activé" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disabled" +msgstr "Désactivé" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not reported" +msgstr "Non signalé" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not detected" +msgstr "Non détecté" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Warning" +msgstr "Avertissement" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Accept" +msgstr "Accepter" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reject" +msgstr "Refuser" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not now" +msgstr "Pas maintenant" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Done" +msgstr "Terminé" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Details" +msgstr "Détails" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "View" +msgstr "Afficher" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "More" +msgstr "Plus" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "No drives" +msgstr "Aucun trajet" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "History unavailable" +msgstr "Historique indisponible" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading history" +msgstr "Chargement de l’historique" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Date unavailable" +msgstr "Date indisponible" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "No results" +msgstr "Aucun résultat" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Search settings" +msgstr "Rechercher des paramètres" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Take control" +msgstr "Reprenez le contrôle" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "LEAD" +msgstr "VÉHICULE DEVANT" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "CURVE" +msgstr "VIRAGE" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "STOP LIGHT" +msgstr "FEU DE SIGNALISATION" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "SPEED" +msgstr "VITESSE" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "OFF" +msgstr "DÉSACTIVÉ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PREVIOUS" +msgstr "PRÉCÉDENT" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PERSONAL RECORDS" +msgstr "RECORDS PERSONNELS" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "REPLAY" +msgstr "RELECTURE" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PAUSE" +msgstr "PAUSE" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "STOP" +msgstr "ARRÊTER" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "BIG" +msgstr "GRAND" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "UNKNOWN" +msgstr "INCONNU" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "DETAILS" +msgstr "DÉTAILS" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "ALL TIME" +msgstr "DEPUIS LE DÉBUT" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PAST WEEK" +msgstr "SEMAINE PASSÉE" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "DISTANCE THIS WEEK" +msgstr "DISTANCE CETTE SEMAINE" diff --git a/openpilot/selfdrive/ui/translations/app_ja.po b/openpilot/selfdrive/ui/translations/app_ja.po index b1d0af6047..fbba8c40ce 100644 --- a/openpilot/selfdrive/ui/translations/app_ja.po +++ b/openpilot/selfdrive/ui/translations/app_ja.po @@ -822,3 +822,675 @@ msgstr "" #: openpilot/selfdrive/ui/layouts/settings/toggles.py msgid "Max speed when engaging openpilot. If you are already driving faster, your current speed is used. Resume restores the previous max speed. Changes apply the next time you engage." msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Home" +msgstr "ホーム" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving" +msgstr "運転" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Controls" +msgstr "操作" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Localization" +msgstr "地域と言語" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Language" +msgstr "言語" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Use Kilometers (km/h)" +msgstr "キロメートルを使用 (km/h)" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Right-Hand Drive" +msgstr "右ハンドル" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Device display language. Untranslated text uses English. Park before changing language." +msgstr "デバイスの表示言語です。未翻訳の文章は英語で表示されます。言語の変更は駐車中に行ってください。" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Language, units and steering-wheel side for every vehicle." +msgstr "すべての車両の言語、単位、ハンドル位置。" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "On" +msgstr "オン" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Off" +msgstr "オフ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Auto" +msgstr "自動" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Stock" +msgstr "標準" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Custom" +msgstr "カスタム" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Unavailable" +msgstr "利用不可" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Available" +msgstr "利用可能" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Invalid saved choice" +msgstr "保存された選択が無効です" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Invalid saved value" +msgstr "保存された値が無効です" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved choice cannot be read" +msgstr "保存された選択を読み取れません" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Save" +msgstr "保存" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved" +msgstr "保存済み" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saving" +msgstr "保存中" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Save changes" +msgstr "変更を保存" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Could not save" +msgstr "保存できませんでした" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Discard changes" +msgstr "変更を破棄" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Unsaved changes" +msgstr "未保存の変更" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Next" +msgstr "次へ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Previous" +msgstr "前へ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Continue" +msgstr "続行" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Confirm" +msgstr "確認" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Apply" +msgstr "適用" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reset to defaults" +msgstr "初期設定に戻す" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Restore" +msgstr "復元" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Default" +msgstr "初期設定" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Delete" +msgstr "削除" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Remove" +msgstr "削除" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Add" +msgstr "追加" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Edit" +msgstr "編集" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Search" +msgstr "検索" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Refresh" +msgstr "更新" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Retry" +msgstr "再試行" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading" +msgstr "読み込み中" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading…" +msgstr "読み込み中…" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Opening page…" +msgstr "ページを開いています…" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "This page could not open." +msgstr "このページを開けませんでした。" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reload page" +msgstr "ページを再読み込み" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Refresh Galaxy" +msgstr "Galaxyを更新" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connected" +msgstr "接続済み" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disconnected" +msgstr "未接続" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connecting" +msgstr "接続中" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connect" +msgstr "接続" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disconnect" +msgstr "切断" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pair" +msgstr "ペアリング" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pairing" +msgstr "ペアリング中" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sign in" +msgstr "ログイン" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sign out" +msgstr "ログアウト" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Password" +msgstr "パスワード" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "System" +msgstr "システム" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Settings" +msgstr "設定" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Appearance" +msgstr "外観" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Display" +msgstr "表示" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Custom Display Settings" +msgstr "表示のカスタム設定" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sounds & Alerts" +msgstr "サウンドと警告" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sounds" +msgstr "サウンド" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Alerts" +msgstr "警告" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving Controls" +msgstr "運転制御" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vehicle Settings" +msgstr "車両設定" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vehicle" +msgstr "車両" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Wheel Controls" +msgstr "ハンドル操作" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving Model" +msgstr "運転モデル" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Models" +msgstr "モデル" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Model Laboratory" +msgstr "モデルラボ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Maps" +msgstr "地図" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Navigation" +msgstr "ナビゲーション" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Favorites" +msgstr "お気に入り" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "History" +msgstr "履歴" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Drive History" +msgstr "運転履歴" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Recent drives" +msgstr "最近の走行" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Last drive" +msgstr "前回の走行" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Your driving" +msgstr "あなたの運転" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "This week" +msgstr "今週" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personal records" +msgstr "自己記録" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vitals" +msgstr "稼働状況" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Storage" +msgstr "ストレージ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Tools" +msgstr "ツール" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Logs" +msgstr "ログ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Recordings" +msgstr "録画" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Replay" +msgstr "リプレイ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Cameras" +msgstr "カメラ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Camera" +msgstr "カメラ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Bluetooth" +msgstr "Bluetooth" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Offline maps" +msgstr "オフライン地図" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Downloaded" +msgstr "ダウンロード済み" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Installed" +msgstr "インストール済み" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Install" +msgstr "インストール" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Update" +msgstr "更新" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Updates" +msgstr "更新" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Check for updates" +msgstr "更新を確認" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Parked Power" +msgstr "駐車中の電源" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Force Drive State" +msgstr "走行状態を強制設定" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Onroad" +msgstr "走行中" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Offroad" +msgstr "停車中" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Always On Lateral" +msgstr "常時横方向制御" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Long Planner" +msgstr "縦方向プランナー" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Conditional Driving Modes" +msgstr "条件付き運転モード" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Curve Speed Controller" +msgstr "カーブ速度制御" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Speed Limit Controller" +msgstr "制限速度制御" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Centering" +msgstr "車線中央維持" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Change" +msgstr "車線変更" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Change Settings" +msgstr "車線変更設定" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Following distance" +msgstr "車間距離" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Following time" +msgstr "車間時間" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Traffic Mode" +msgstr "渋滞モード" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Chill" +msgstr "穏やか" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Experimental" +msgstr "実験的" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personality" +msgstr "運転スタイル" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personalities" +msgstr "運転スタイル" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved settings" +msgstr "保存済みの設定" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Backup" +msgstr "バックアップ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Backups" +msgstr "バックアップ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Export" +msgstr "エクスポート" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Import" +msgstr "インポート" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Play" +msgstr "再生" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pause" +msgstr "一時停止" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Stop" +msgstr "停止" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Start" +msgstr "開始" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Front" +msgstr "前方" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Rear" +msgstr "後方" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Left" +msgstr "左" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Right" +msgstr "右" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Small" +msgstr "小" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Big" +msgstr "大" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "None" +msgstr "なし" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Enabled" +msgstr "有効" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disabled" +msgstr "無効" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not reported" +msgstr "報告なし" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not detected" +msgstr "未検出" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Warning" +msgstr "警告" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Accept" +msgstr "承認" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reject" +msgstr "拒否" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not now" +msgstr "後で" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Done" +msgstr "完了" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Details" +msgstr "詳細" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "View" +msgstr "表示" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "More" +msgstr "その他" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "No drives" +msgstr "走行履歴なし" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "History unavailable" +msgstr "履歴を利用できません" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading history" +msgstr "履歴を読み込み中" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Date unavailable" +msgstr "日付不明" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "No results" +msgstr "結果なし" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Search settings" +msgstr "設定を検索" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Take control" +msgstr "運転を引き継いでください" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "LEAD" +msgstr "先行車" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "CURVE" +msgstr "カーブ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "STOP LIGHT" +msgstr "信号機" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "SPEED" +msgstr "速度" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "OFF" +msgstr "オフ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PREVIOUS" +msgstr "前へ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PERSONAL RECORDS" +msgstr "自己記録" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "REPLAY" +msgstr "リプレイ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PAUSE" +msgstr "一時停止" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "STOP" +msgstr "停止" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "BIG" +msgstr "大" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "UNKNOWN" +msgstr "不明" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "DETAILS" +msgstr "詳細" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "ALL TIME" +msgstr "全期間" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PAST WEEK" +msgstr "過去1週間" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "DISTANCE THIS WEEK" +msgstr "今週の走行距離" diff --git a/openpilot/selfdrive/ui/translations/app_ko.po b/openpilot/selfdrive/ui/translations/app_ko.po index 642a4bc9b5..7531db9989 100644 --- a/openpilot/selfdrive/ui/translations/app_ko.po +++ b/openpilot/selfdrive/ui/translations/app_ko.po @@ -822,3 +822,675 @@ msgstr "" #: openpilot/selfdrive/ui/layouts/settings/toggles.py msgid "Max speed when engaging openpilot. If you are already driving faster, your current speed is used. Resume restores the previous max speed. Changes apply the next time you engage." msgstr "" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Home" +msgstr "홈" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving" +msgstr "주행" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Controls" +msgstr "제어" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Localization" +msgstr "언어 및 지역" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Language" +msgstr "언어" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Use Kilometers (km/h)" +msgstr "킬로미터 사용 (km/h)" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Right-Hand Drive" +msgstr "우측 운전석" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Device display language. Untranslated text uses English. Park before changing language." +msgstr "기기 표시 언어입니다. 번역되지 않은 텍스트는 영어로 표시됩니다. 주차 후 언어를 변경하세요." + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Language, units and steering-wheel side for every vehicle." +msgstr "모든 차량의 언어, 단위 및 운전석 위치." + +#: openpilot/starpilot/ui/translation_strings.py +msgid "On" +msgstr "켜짐" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Off" +msgstr "꺼짐" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Auto" +msgstr "자동" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Stock" +msgstr "기본" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Custom" +msgstr "사용자 지정" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Unavailable" +msgstr "사용 불가" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Available" +msgstr "사용 가능" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Invalid saved choice" +msgstr "저장된 선택이 잘못되었습니다" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Invalid saved value" +msgstr "저장된 값이 잘못되었습니다" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved choice cannot be read" +msgstr "저장된 선택을 읽을 수 없습니다" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Save" +msgstr "저장" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved" +msgstr "저장됨" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saving" +msgstr "저장 중" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Save changes" +msgstr "변경 사항 저장" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Could not save" +msgstr "저장하지 못했습니다" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Discard changes" +msgstr "변경 사항 취소" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Unsaved changes" +msgstr "저장되지 않은 변경 사항" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Next" +msgstr "다음" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Previous" +msgstr "이전" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Continue" +msgstr "계속" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Confirm" +msgstr "확인" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Apply" +msgstr "적용" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reset to defaults" +msgstr "기본값으로 초기화" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Restore" +msgstr "복원" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Default" +msgstr "기본값" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Delete" +msgstr "삭제" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Remove" +msgstr "제거" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Add" +msgstr "추가" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Edit" +msgstr "편집" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Search" +msgstr "검색" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Refresh" +msgstr "새로 고침" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Retry" +msgstr "다시 시도" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading" +msgstr "불러오는 중" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading…" +msgstr "불러오는 중…" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Opening page…" +msgstr "페이지 여는 중…" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "This page could not open." +msgstr "이 페이지를 열 수 없습니다." + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reload page" +msgstr "페이지 새로 고침" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Refresh Galaxy" +msgstr "Galaxy 새로 고침" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connected" +msgstr "연결됨" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disconnected" +msgstr "연결 끊김" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connecting" +msgstr "연결 중" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connect" +msgstr "연결" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disconnect" +msgstr "연결 해제" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pair" +msgstr "페어링" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pairing" +msgstr "페어링 중" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sign in" +msgstr "로그인" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sign out" +msgstr "로그아웃" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Password" +msgstr "비밀번호" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "System" +msgstr "시스템" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Settings" +msgstr "설정" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Appearance" +msgstr "모양" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Display" +msgstr "화면" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Custom Display Settings" +msgstr "사용자 지정 화면 설정" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sounds & Alerts" +msgstr "소리 및 경고" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sounds" +msgstr "소리" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Alerts" +msgstr "경고" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving Controls" +msgstr "주행 제어" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vehicle Settings" +msgstr "차량 설정" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vehicle" +msgstr "차량" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Wheel Controls" +msgstr "핸들 제어" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving Model" +msgstr "주행 모델" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Models" +msgstr "모델" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Model Laboratory" +msgstr "모델 실험실" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Maps" +msgstr "지도" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Navigation" +msgstr "내비게이션" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Favorites" +msgstr "즐겨찾기" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "History" +msgstr "기록" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Drive History" +msgstr "주행 기록" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Recent drives" +msgstr "최근 주행" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Last drive" +msgstr "지난 주행" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Your driving" +msgstr "내 주행" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "This week" +msgstr "이번 주" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personal records" +msgstr "개인 기록" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vitals" +msgstr "시스템 상태" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Storage" +msgstr "저장 공간" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Tools" +msgstr "도구" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Logs" +msgstr "로그" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Recordings" +msgstr "녹화" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Replay" +msgstr "다시 보기" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Cameras" +msgstr "카메라" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Camera" +msgstr "카메라" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Bluetooth" +msgstr "Bluetooth" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Offline maps" +msgstr "오프라인 지도" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Downloaded" +msgstr "다운로드됨" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Installed" +msgstr "설치됨" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Install" +msgstr "설치" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Update" +msgstr "업데이트" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Updates" +msgstr "업데이트" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Check for updates" +msgstr "업데이트 확인" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Parked Power" +msgstr "주차 중 전원" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Force Drive State" +msgstr "주행 상태 강제 설정" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Onroad" +msgstr "주행 중" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Offroad" +msgstr "주차 중" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Always On Lateral" +msgstr "항상 횡방향 제어" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Long Planner" +msgstr "종방향 플래너" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Conditional Driving Modes" +msgstr "조건부 주행 모드" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Curve Speed Controller" +msgstr "커브 속도 제어" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Speed Limit Controller" +msgstr "제한 속도 제어" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Centering" +msgstr "차로 중앙 유지" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Change" +msgstr "차로 변경" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Change Settings" +msgstr "차로 변경 설정" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Following distance" +msgstr "차간 거리" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Following time" +msgstr "차간 시간" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Traffic Mode" +msgstr "정체 모드" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Chill" +msgstr "편안함" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Experimental" +msgstr "실험적" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personality" +msgstr "주행 성향" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personalities" +msgstr "주행 성향" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved settings" +msgstr "저장된 설정" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Backup" +msgstr "백업" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Backups" +msgstr "백업" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Export" +msgstr "내보내기" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Import" +msgstr "가져오기" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Play" +msgstr "재생" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pause" +msgstr "일시 정지" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Stop" +msgstr "정지" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Start" +msgstr "시작" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Front" +msgstr "전방" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Rear" +msgstr "후방" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Left" +msgstr "왼쪽" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Right" +msgstr "오른쪽" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Small" +msgstr "작게" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Big" +msgstr "크게" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "None" +msgstr "없음" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Enabled" +msgstr "활성화됨" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disabled" +msgstr "비활성화됨" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not reported" +msgstr "보고되지 않음" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not detected" +msgstr "감지되지 않음" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Warning" +msgstr "경고" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Accept" +msgstr "수락" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reject" +msgstr "거부" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not now" +msgstr "나중에" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Done" +msgstr "완료" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Details" +msgstr "세부 정보" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "View" +msgstr "보기" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "More" +msgstr "더 보기" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "No drives" +msgstr "주행 기록 없음" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "History unavailable" +msgstr "기록을 사용할 수 없습니다" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading history" +msgstr "기록 불러오는 중" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Date unavailable" +msgstr "날짜를 사용할 수 없음" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "No results" +msgstr "결과 없음" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Search settings" +msgstr "설정 검색" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Take control" +msgstr "직접 제어하세요" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "LEAD" +msgstr "선행 차량" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "CURVE" +msgstr "커브" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "STOP LIGHT" +msgstr "신호등" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "SPEED" +msgstr "속도" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "OFF" +msgstr "꺼짐" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PREVIOUS" +msgstr "이전" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PERSONAL RECORDS" +msgstr "개인 기록" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "REPLAY" +msgstr "다시 보기" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PAUSE" +msgstr "일시 정지" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "STOP" +msgstr "정지" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "BIG" +msgstr "크게" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "UNKNOWN" +msgstr "알 수 없음" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "DETAILS" +msgstr "세부 정보" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "ALL TIME" +msgstr "전체 기간" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PAST WEEK" +msgstr "지난주" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "DISTANCE THIS WEEK" +msgstr "이번 주 주행 거리" diff --git a/openpilot/selfdrive/ui/translations/app_vi.po b/openpilot/selfdrive/ui/translations/app_vi.po index 61a4b1ef29..e2e070674c 100644 --- a/openpilot/selfdrive/ui/translations/app_vi.po +++ b/openpilot/selfdrive/ui/translations/app_vi.po @@ -822,3 +822,675 @@ msgstr "Tốc độ tối đa ban đầu" #: openpilot/selfdrive/ui/layouts/settings/toggles.py msgid "Max speed when engaging openpilot. If you are already driving faster, your current speed is used. Resume restores the previous max speed. Changes apply the next time you engage." msgstr "Tốc độ tối đa khi kích hoạt openpilot. Nếu bạn đang chạy nhanh hơn, tốc độ hiện tại sẽ được dùng. Nút tiếp tục khôi phục tốc độ tối đa trước đó. Thay đổi có hiệu lực ở lần kích hoạt tiếp theo." + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Home" +msgstr "Trang chủ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving" +msgstr "Lái xe" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Controls" +msgstr "Điều khiển" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Localization" +msgstr "Ngôn ngữ và khu vực" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Language" +msgstr "Ngôn ngữ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Use Kilometers (km/h)" +msgstr "Dùng kilômét (km/h)" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Right-Hand Drive" +msgstr "Tay lái bên phải" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Device display language. Untranslated text uses English. Park before changing language." +msgstr "Ngôn ngữ hiển thị của thiết bị. Văn bản chưa dịch dùng tiếng Anh. Đỗ xe trước khi đổi ngôn ngữ." + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Language, units and steering-wheel side for every vehicle." +msgstr "Ngôn ngữ, đơn vị và vị trí tay lái cho mọi xe." + +#: openpilot/starpilot/ui/translation_strings.py +msgid "On" +msgstr "Bật" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Off" +msgstr "Tắt" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Auto" +msgstr "Tự động" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Stock" +msgstr "Nguyên bản" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Custom" +msgstr "Tùy chỉnh" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Unavailable" +msgstr "Không khả dụng" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Available" +msgstr "Khả dụng" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Invalid saved choice" +msgstr "Lựa chọn đã lưu không hợp lệ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Invalid saved value" +msgstr "Giá trị đã lưu không hợp lệ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved choice cannot be read" +msgstr "Không đọc được lựa chọn đã lưu" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Save" +msgstr "Lưu" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved" +msgstr "Đã lưu" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saving" +msgstr "Đang lưu" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Save changes" +msgstr "Lưu thay đổi" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Could not save" +msgstr "Không lưu được" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Discard changes" +msgstr "Bỏ thay đổi" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Unsaved changes" +msgstr "Thay đổi chưa lưu" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Next" +msgstr "Tiếp theo" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Previous" +msgstr "Trước" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Continue" +msgstr "Tiếp tục" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Confirm" +msgstr "Xác nhận" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Apply" +msgstr "Áp dụng" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reset to defaults" +msgstr "Đặt lại mặc định" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Restore" +msgstr "Khôi phục" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Default" +msgstr "Mặc định" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Delete" +msgstr "Xóa" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Remove" +msgstr "Gỡ bỏ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Add" +msgstr "Thêm" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Edit" +msgstr "Chỉnh sửa" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Search" +msgstr "Tìm kiếm" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Refresh" +msgstr "Làm mới" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Retry" +msgstr "Thử lại" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading" +msgstr "Đang tải" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading…" +msgstr "Đang tải…" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Opening page…" +msgstr "Đang mở trang…" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "This page could not open." +msgstr "Không mở được trang này." + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reload page" +msgstr "Tải lại trang" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Refresh Galaxy" +msgstr "Làm mới Galaxy" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connected" +msgstr "Đã kết nối" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disconnected" +msgstr "Đã ngắt kết nối" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connecting" +msgstr "Đang kết nối" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Connect" +msgstr "Kết nối" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disconnect" +msgstr "Ngắt kết nối" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pair" +msgstr "Ghép nối" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pairing" +msgstr "Đang ghép nối" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sign in" +msgstr "Đăng nhập" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sign out" +msgstr "Đăng xuất" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Password" +msgstr "Mật khẩu" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "System" +msgstr "Hệ thống" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Settings" +msgstr "Cài đặt" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Appearance" +msgstr "Giao diện" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Display" +msgstr "Hiển thị" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Custom Display Settings" +msgstr "Cài đặt hiển thị tùy chỉnh" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sounds & Alerts" +msgstr "Âm thanh và cảnh báo" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Sounds" +msgstr "Âm thanh" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Alerts" +msgstr "Cảnh báo" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving Controls" +msgstr "Điều khiển lái xe" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vehicle Settings" +msgstr "Cài đặt xe" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vehicle" +msgstr "Xe" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Wheel Controls" +msgstr "Điều khiển vô lăng" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Driving Model" +msgstr "Mô hình lái" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Models" +msgstr "Mô hình" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Model Laboratory" +msgstr "Phòng thử nghiệm mô hình" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Maps" +msgstr "Bản đồ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Navigation" +msgstr "Điều hướng" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Favorites" +msgstr "Yêu thích" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "History" +msgstr "Lịch sử" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Drive History" +msgstr "Lịch sử lái xe" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Recent drives" +msgstr "Chuyến đi gần đây" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Last drive" +msgstr "Chuyến đi trước" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Your driving" +msgstr "Việc lái xe của bạn" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "This week" +msgstr "Tuần này" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personal records" +msgstr "Kỷ lục cá nhân" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Vitals" +msgstr "Trạng thái hệ thống" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Storage" +msgstr "Bộ nhớ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Tools" +msgstr "Công cụ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Logs" +msgstr "Nhật ký" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Recordings" +msgstr "Bản ghi" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Replay" +msgstr "Phát lại" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Cameras" +msgstr "Camera" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Camera" +msgstr "Camera" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Bluetooth" +msgstr "Bluetooth" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Offline maps" +msgstr "Bản đồ ngoại tuyến" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Downloaded" +msgstr "Đã tải xuống" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Installed" +msgstr "Đã cài đặt" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Install" +msgstr "Cài đặt" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Update" +msgstr "Cập nhật" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Updates" +msgstr "Bản cập nhật" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Check for updates" +msgstr "Kiểm tra cập nhật" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Parked Power" +msgstr "Nguồn điện khi đỗ xe" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Force Drive State" +msgstr "Buộc trạng thái lái" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Onroad" +msgstr "Đang chạy" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Offroad" +msgstr "Đã đỗ xe" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Always On Lateral" +msgstr "Luôn điều khiển ngang" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Long Planner" +msgstr "Bộ lập kế hoạch dọc" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Conditional Driving Modes" +msgstr "Chế độ lái có điều kiện" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Curve Speed Controller" +msgstr "Điều khiển tốc độ khi vào cua" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Speed Limit Controller" +msgstr "Điều khiển giới hạn tốc độ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Centering" +msgstr "Giữ giữa làn" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Change" +msgstr "Chuyển làn" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Lane Change Settings" +msgstr "Cài đặt chuyển làn" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Following distance" +msgstr "Khoảng cách theo xe" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Following time" +msgstr "Thời gian theo xe" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Traffic Mode" +msgstr "Chế độ giao thông" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Chill" +msgstr "Thư thả" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Experimental" +msgstr "Thử nghiệm" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personality" +msgstr "Phong cách lái" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Personalities" +msgstr "Phong cách lái" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Saved settings" +msgstr "Cài đặt đã lưu" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Backup" +msgstr "Sao lưu" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Backups" +msgstr "Bản sao lưu" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Export" +msgstr "Xuất" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Import" +msgstr "Nhập" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Play" +msgstr "Phát" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Pause" +msgstr "Tạm dừng" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Stop" +msgstr "Dừng" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Start" +msgstr "Bắt đầu" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Front" +msgstr "Phía trước" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Rear" +msgstr "Phía sau" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Left" +msgstr "Trái" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Right" +msgstr "Phải" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Small" +msgstr "Nhỏ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Big" +msgstr "Lớn" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "None" +msgstr "Không có" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Enabled" +msgstr "Đã bật" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Disabled" +msgstr "Đã tắt" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not reported" +msgstr "Chưa báo cáo" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not detected" +msgstr "Không phát hiện" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Warning" +msgstr "Cảnh báo" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Accept" +msgstr "Chấp nhận" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Reject" +msgstr "Từ chối" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Not now" +msgstr "Để sau" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Done" +msgstr "Xong" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Details" +msgstr "Chi tiết" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "View" +msgstr "Xem" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "More" +msgstr "Thêm" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "No drives" +msgstr "Không có chuyến đi" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "History unavailable" +msgstr "Lịch sử không khả dụng" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Loading history" +msgstr "Đang tải lịch sử" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Date unavailable" +msgstr "Không có ngày" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "No results" +msgstr "Không có kết quả" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Search settings" +msgstr "Tìm cài đặt" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "Take control" +msgstr "Tiếp quản điều khiển" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "LEAD" +msgstr "XE PHÍA TRƯỚC" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "CURVE" +msgstr "KHÚC CUA" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "STOP LIGHT" +msgstr "ĐÈN GIAO THÔNG" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "SPEED" +msgstr "TỐC ĐỘ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "OFF" +msgstr "TẮT" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PREVIOUS" +msgstr "TRƯỚC" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PERSONAL RECORDS" +msgstr "KỶ LỤC CÁ NHÂN" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "REPLAY" +msgstr "PHÁT LẠI" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PAUSE" +msgstr "TẠM DỪNG" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "STOP" +msgstr "DỪNG" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "BIG" +msgstr "LỚN" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "UNKNOWN" +msgstr "KHÔNG RÕ" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "DETAILS" +msgstr "CHI TIẾT" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "ALL TIME" +msgstr "TOÀN BỘ THỜI GIAN" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "PAST WEEK" +msgstr "TUẦN QUA" + +#: openpilot/starpilot/ui/translation_strings.py +msgid "DISTANCE THIS WEEK" +msgstr "QUÃNG ĐƯỜNG TUẦN NÀY" diff --git a/openpilot/selfdrive/ui/translations/update_translations.py b/openpilot/selfdrive/ui/translations/update_translations.py index 9b0d63ee12..163fa08ab8 100755 --- a/openpilot/selfdrive/ui/translations/update_translations.py +++ b/openpilot/selfdrive/ui/translations/update_translations.py @@ -19,6 +19,8 @@ def update_translations(): if filename.endswith(".py"): files.append(os.path.relpath(os.path.join(root, filename), BASEDIR)) + files.append("openpilot/starpilot/ui/translation_strings.py") + # Extract translatable strings and generate .pot template entries = extract_strings(files, BASEDIR) generate_pot(entries, POT_FILE) diff --git a/openpilot/starpilot/galaxy/README.md b/openpilot/starpilot/galaxy/README.md index d279ca6a27..4ee5104ff5 100644 --- a/openpilot/starpilot/galaxy/README.md +++ b/openpilot/starpilot/galaxy/README.md @@ -145,3 +145,22 @@ The UI adapts StarPilot's earlier Vue Galaxy design; the adapted StarPilot source remains under the repository [LICENSE](../../../LICENSE). The bundled Vue and Bootstrap Icons assets retain their respective MIT notices in `web/vendor/notices/`. Other asset notices remain beside their files. + +## Shared display language + +Galaxy → Toggles → Localization selects the persistent openpilot `LanguageSetting`. +Galaxy reads the authenticated `/api/localization` endpoint and applies the same +`selfdrive/ui/translations/app_*.po` catalogs used by the device. Language changes +apply to an open Galaxy page within two seconds. Translation changes presentation +text and accessibility labels; request values, parameter keys, input values and +technical logs remain unchanged. The native large/compact renderer translates +measurements and drawing together and loads bundled Unicode fonts as needed. + +`starpilot/ui/translation_strings.py` marks shared labels for the existing catalog +update tool. The initial shared set covers navigation, common actions, settings +groups, home statistics and several onroad labels in Japanese, Korean, Spanish, French, German and +Vietnamese. The catalogs also retain stock openpilot translations. This is not +complete sentence coverage: long feature explanations, dynamically assembled +messages and unlisted labels remain English. Boot/login screens initially use +English until an authenticated language response is available. User-entered +text, logs, identifiers and brand names are not translation targets. diff --git a/openpilot/starpilot/galaxy/localization.py b/openpilot/starpilot/galaxy/localization.py new file mode 100644 index 0000000000..21876652e1 --- /dev/null +++ b/openpilot/starpilot/galaxy/localization.py @@ -0,0 +1,22 @@ +"""Read the device's shared language and expose its existing openpilot catalog.""" + +from functools import lru_cache + +from openpilot.starpilot.galaxy.localization_settings import LANGUAGES +from openpilot.starpilot.saved_source import read_saved +from openpilot.system.ui.lib.multilang import TRANSLATIONS_DIR, load_translations + + +@lru_cache(maxsize=16) +def catalog(code): + if code == "en": + return {} + messages, _ = load_translations(TRANSLATIONS_DIR.joinpath(f"app_{code}.po")) + return {source: translated for source, translated in messages.items() if translated and source != translated} + + +def language_snapshot(params, previous=""): + raw, readable = read_saved(params, "LanguageSetting", 32) + code = (raw or b"en").decode("utf-8", errors="replace").removeprefix("main_") + code = code if readable and code in LANGUAGES.values() else "en" + return {"language": code, **({} if previous == code else {"messages": catalog(code)})} diff --git a/openpilot/starpilot/galaxy/server.py b/openpilot/starpilot/galaxy/server.py index 871263f1b3..a822a166c2 100644 --- a/openpilot/starpilot/galaxy/server.py +++ b/openpilot/starpilot/galaxy/server.py @@ -740,6 +740,13 @@ def make_server(*, port=8082, host='127.0.0.1', monitor=None, owner=None, crashe **({'gatewayAccess': True} if getattr(self.server, 'remote_transport', False) else {}), 'state': 'configured' if status == AccessStatus.CONFIGURED_LOCAL else 'unavailable' if status == AccessStatus.UNAVAILABLE else 'setup_required'}) + elif path == '/api/localization': + if not self.require_session(): + return + from openpilot.common.params import Params + from openpilot.starpilot.galaxy.localization import language_snapshot + previous = parse_qs(urlsplit(self.path).query).get('language', [''])[0] + self.json(200, language_snapshot(Params(), previous)) elif path == '/api/galaxy/device-name': if not self.require_session(): return diff --git a/openpilot/starpilot/galaxy/tests/test_localization.mjs b/openpilot/starpilot/galaxy/tests/test_localization.mjs new file mode 100644 index 0000000000..24e5d191fb --- /dev/null +++ b/openpilot/starpilot/galaxy/tests/test_localization.mjs @@ -0,0 +1,44 @@ +import assert from "node:assert/strict" +import { translateText, localizeDocument } from "../web/js/localization.js" + +assert.equal(translateText(" Home\n", { Home: "ホーム" }), " ホーム\n") +assert.equal(translateText("SpeedLimitController", {}), "SpeedLimitController") +assert.equal(translateText("Save", { Save: "$&" }), "$&", "translations remain literal text") + +const doc = { documentElement: {} } +class Element { + constructor(tag, attrs = {}, children = []) { + this.nodeType = 1; this.tag = tag; this.attrs = { ...attrs }; this.childNodes = children; this.ownerDocument = doc + for (const child of children) child.parentElement = this + } + matches(selector) { + return selector.split(",").some(value => value.startsWith("[") ? + value === "[translate=no]" ? this.attrs.translate === "no" : Object.hasOwn(this.attrs, value.slice(1, -1)) : this.tag === value) + } + closest(selector) { return this.matches(selector) || this.parentElement?.closest(selector) } + hasAttribute(key) { return Object.hasOwn(this.attrs, key) } + getAttribute(key) { return this.attrs[key] } + setAttribute(key, value) { this.attrs[key] = value } +} +const text = value => ({ nodeType: 3, nodeValue: value }) +const label = text("Home"), dynamic = text("Save"), technical = text("Save") +const input = new Element("input", { placeholder: "Search", value: "Home" }) +const root = new Element("main", {}, [new Element("button", { title: "Home" }, [label]), + new Element("span", {}, [dynamic]), new Element("code", {}, [technical]), input, + new Element("span", { translate: "no" }, [text("Save")])]) +const records = new WeakMap() +localizeDocument(root, { language: "ja", messages: { Home: "ホーム", Save: "保存", Search: "検索" } }, records) +assert.equal(label.nodeValue, "ホーム") +assert.equal(input.attrs.placeholder, "検索") +assert.equal(input.attrs.value, "Home") +assert.equal(technical.nodeValue, "Save") +assert.equal(doc.documentElement.lang, "ja") +dynamic.nodeValue = "Home" // Vue changed the source while another language was active. +localizeDocument(root, { language: "fr", messages: { Home: "Accueil", Save: "Enregistrer", Search: "Rechercher" } }, records) +assert.equal(label.nodeValue, "Accueil") +assert.equal(dynamic.nodeValue, "Accueil") +localizeDocument(root, { language: "en", messages: {} }, records) +assert.equal(label.nodeValue, "Home") +assert.equal(dynamic.nodeValue, "Home") +assert.equal(input.attrs.placeholder, "Search") +assert.equal(root.childNodes[0].attrs.title, "Home") diff --git a/openpilot/starpilot/galaxy/tests/test_localization.py b/openpilot/starpilot/galaxy/tests/test_localization.py new file mode 100644 index 0000000000..a0f8f0e03c --- /dev/null +++ b/openpilot/starpilot/galaxy/tests/test_localization.py @@ -0,0 +1,83 @@ +from pathlib import Path + +import pytest + +from openpilot.common.params import Params +from openpilot.starpilot.galaxy.localization import language_snapshot +from openpilot.starpilot.ui.translation_strings import MESSAGES + + +@pytest.mark.parametrize('code', ['ja', 'ko', 'es', 'fr', 'de', 'vi']) +def test_shared_catalog_and_persistent_language(tmp_path, code): + params = Params(str(tmp_path)) + params.put('LanguageSetting', code, block=True) + before = Path(params.get_param_path('LanguageSetting')).read_bytes() + snapshot = language_snapshot(params) + assert snapshot['language'] == code + assert snapshot['messages']['Home'] != 'Home' + assert snapshot['messages']['Language'] != 'Language' + assert language_snapshot(params, code) == {'language': code} + assert Path(params.get_param_path('LanguageSetting')).read_bytes() == before + + +def test_unknown_language_and_english_fallback(tmp_path): + params = Params(str(tmp_path)) + for code in ['en', 'unknown', '../../etc/passwd']: + params.put('LanguageSetting', code, block=True) + assert language_snapshot(params) == {'language': 'en', 'messages': {}} + params.put('LanguageSetting', 'main_ja', block=True) + assert language_snapshot(params)['language'] == 'ja' + + +def test_shared_messages_survive_standard_catalog_extraction(): + from openpilot.selfdrive.ui.translations.potools import extract_strings + from openpilot.common.basedir import BASEDIR + entries = extract_strings(['openpilot/starpilot/ui/translation_strings.py'], BASEDIR) + assert {entry.msgid for entry in entries} == set(MESSAGES) + + +def test_http_catalog_requires_existing_session(tmp_path, monkeypatch): + import http.client + import json + import threading + from openpilot.starpilot.galaxy.access import GalaxyAccessOwner + from openpilot.starpilot.galaxy.server import make_server + + params = Params(str(tmp_path / 'params')) + params.put('LanguageSetting', 'vi', block=True) + monkeypatch.setattr('openpilot.common.params.Params', lambda: params) + access = GalaxyAccessOwner(tmp_path / 'access') + access.configure('localization-test-password', lambda: True) + server = make_server(port=0, owner=access, parked=lambda: True) + worker = threading.Thread(target=server.serve_forever, kwargs={'poll_interval': .01}, daemon=True) + worker.start() + + def request(path, cookie=''): + connection = http.client.HTTPConnection('127.0.0.1', server.server_port, timeout=3) + try: + connection.request('GET', path, headers={'Cookie': cookie}) + response = connection.getresponse() + return response.status, json.loads(response.read()), response.getheader('Set-Cookie', '').split(';')[0] + finally: + connection.close() + + try: + assert request('/api/localization')[0] == 401 + status, _, cookie = request('/api/auth/session') + assert status == 200 and cookie + status, result, _ = request('/api/localization', cookie) + assert status == 200 and result['language'] == 'vi' and result['messages']['Home'] == 'Trang chủ' + assert request('/api/localization?language=vi', cookie)[1] == {'language': 'vi'} + finally: + server.shutdown() + worker.join(2) + server.server_close() + + +@pytest.mark.parametrize('code', ['ja', 'ko', 'es', 'fr', 'de', 'vi']) +def test_shared_messages_have_translations(tmp_path, code): + from openpilot.selfdrive.ui.translations.potools import parse_po + from openpilot.system.ui.lib.multilang import TRANSLATIONS_DIR + _, entries = parse_po(TRANSLATIONS_DIR.joinpath(f'app_{code}.po')) + translations = {entry.msgid: entry.msgstr for entry in entries} + assert all(translations.get(message) for message in MESSAGES) diff --git a/openpilot/starpilot/galaxy/web/js/app.js b/openpilot/starpilot/galaxy/web/js/app.js index 2a2e731942..d2b01b0e72 100644 --- a/openpilot/starpilot/galaxy/web/js/app.js +++ b/openpilot/starpilot/galaxy/web/js/app.js @@ -1,3 +1,4 @@ +import { startLocalization } from "./localization.js" import { rememberInstallPrompt } from "./install-app.js" import { toggleHaptic } from "./haptics.js" import { GxState } from "./state.js" @@ -157,6 +158,7 @@ createApp({ sessionExpired() { if (initializing) return; auth.expired(); initialize() }, }, mounted() { + this.stopLocalization = startLocalization() document.documentElement.dataset.theme = state.theme this.visibility = () => { if (!document.hidden) deviceRestart.wake() @@ -177,6 +179,7 @@ createApp({ }) }, beforeUnmount() { + this.stopLocalization?.() reconnectEnabled = false clearTimeout(reconnectTimer) startupGeneration++ diff --git a/openpilot/starpilot/galaxy/web/js/localization.js b/openpilot/starpilot/galaxy/web/js/localization.js new file mode 100644 index 0000000000..f91924a77d --- /dev/null +++ b/openpilot/starpilot/galaxy/web/js/localization.js @@ -0,0 +1,72 @@ +// Translate presentation only: Vue's values, requests and technical identifiers stay in English. +const ATTRIBUTES = ["title", "aria-label", "placeholder", "alt"] +const PROTECTED = "script,style,code,pre,textarea,input,option,[contenteditable],[translate=no]" + +export function translateText(source, messages) { + const text = source.trim() + return Object.hasOwn(messages, text) ? source.replace(text, () => messages[text]) : source +} + +export function localizeDocument(root, { language, messages }, records = new WeakMap()) { + function translate(node, key, source, write) { + const saved = records.get(node) || {} + const prior = saved[key] + const original = prior && prior.output === source ? prior.source : source + const output = translateText(original, messages) + saved[key] = { source: original, output } + records.set(node, saved) + if (output !== source) write(output) + } + function visit(node) { + if (node.nodeType === 3) { + if (!node.parentElement?.closest(PROTECTED)) translate(node, "text", node.nodeValue, value => { node.nodeValue = value }) + return + } + if (node.nodeType !== 1 || node.matches("script,style,code,pre,[translate=no],[contenteditable]")) return + for (const key of ATTRIBUTES) { + if (node.hasAttribute(key)) translate(node, key, node.getAttribute(key), value => node.setAttribute(key, value)) + } + if (!node.matches(PROTECTED)) for (const child of node.childNodes) visit(child) + } + visit(root) + root.ownerDocument.documentElement.lang = language + return records +} + +export function startLocalization(root = document.body, fetcher = fetch) { + let state = { language: "en", messages: {} }, stopped = false, timer, scheduled = false + const records = new WeakMap() + const dirty = new Set() + const observer = new MutationObserver(mutations => { + for (const mutation of mutations) dirty.add(mutation.target) + if (scheduled) return + scheduled = true + queueMicrotask(() => { + scheduled = false + const changed = [...dirty].filter(node => node.isConnected) + dirty.clear() + if (!stopped) apply(changed) + }) + }) + function apply(nodes = [root]) { + observer.disconnect() + for (const node of nodes) localizeDocument(node, state, records) + observer.observe(root, { subtree: true, childList: true, characterData: true, attributes: true, attributeFilter: ATTRIBUTES }) + } + async function refresh() { + try { + const response = await fetcher(`./api/localization?language=${encodeURIComponent(state.language)}`, { cache: "no-store" }) + if (response.ok) { + const next = await response.json() + if (!stopped && typeof next.language === "string" && next.messages && typeof next.messages === "object") { + state = next + apply() + } + } + } catch { /* Keep the last confirmed language during connection loss. */ } + if (!stopped) timer = setTimeout(refresh, 2000) + } + apply() + refresh() + return () => { stopped = true; clearTimeout(timer); observer.disconnect() } +} diff --git a/openpilot/starpilot/ui/home_stats.py b/openpilot/starpilot/ui/home_stats.py index 3c26c76f8f..4c39c02eaa 100644 --- a/openpilot/starpilot/ui/home_stats.py +++ b/openpilot/starpilot/ui/home_stats.py @@ -34,12 +34,15 @@ class DriveStatsDashboard: self._font_semi_bold = fonts.font(FontRole.SEMI_BOLD) self._font_medium = fonts.font(FontRole.MEDIUM) + def _role(self, font): + return FontRole.BOLD if font is self._font_bold else FontRole.SEMI_BOLD if font is self._font_semi_bold else FontRole.MEDIUM + def _measure(self, font, text, size): - return rl.measure_text_ex(font, text, size * self._fonts.profile.font_scale, 0) # noqa: TID251 + measured = self._fonts.measure(text, self._role(font), size) + return rl.Vector2(measured.width, measured.height) def _draw_text(self, font, text, position, size, spacing, color): - draw = getattr(rl, "_orig_draw_text_ex", rl.draw_text_ex) - draw(font, text, position, size * self._fonts.profile.font_scale, spacing, color) + self._fonts.draw(text, self._role(font), size, position.x, position.y, color, spacing=spacing) @staticmethod def _draw_card(rect: rl.Rectangle, accent: rl.Color | None = None) -> None: diff --git a/openpilot/starpilot/ui/presentation.py b/openpilot/starpilot/ui/presentation.py index fd22f1810d..8ddfa36d3a 100644 --- a/openpilot/starpilot/ui/presentation.py +++ b/openpilot/starpilot/ui/presentation.py @@ -10,6 +10,8 @@ import numpy as np from PIL import Image import pyray as rl +from openpilot.system.ui.lib.multilang import TRANSLATIONS_DIR, multilang, tr + class Profile(StrEnum): LARGE = "large" @@ -108,6 +110,7 @@ class BitmapFonts: self.profile = Profile(profile) self._directory = directory self._fonts: dict[str, rl.Font] = {} + self._language_fonts: dict[str, rl.Font] = {} self._measurements: dict[tuple, TextSize] = {} self._vertical_ink: dict[tuple, tuple[float, float]] = {} self._horizontal_ink: dict[tuple, tuple[float, float]] = {} @@ -139,6 +142,33 @@ class BitmapFonts: role = FontRole.FALLBACK return self._fonts[font_filename(self.profile, role)] + def _text_font(self, text: str, role: FontRole, fallback: bool = False) -> rl.Font: + if text.isascii() or role == FontRole.BRAND: + return self.font(role, fallback=fallback) + language = multilang.language + fonts = self._language_fonts + if language not in fonts: + filename = {"ja": "NotoSansCJKjp-Regular.otf", "ko": "NotoSansCJKkr-Regular.otf", + "zh-CHS": "NotoSansCJKsc-Regular.otf", "zh-CHT": "NotoSansCJKtc-Regular.otf", + "th": "NotoSansThai-Regular.ttf"}.get(language, "Inter-Regular.ttf") + directory = Path(__file__).parents[2] / "selfdrive/assets/fonts" + chars = set(map(chr, range(32, 127))) | set(text) + chars.update(TRANSLATIONS_DIR.joinpath(f"app_{language}.po").read_text(encoding="utf-8")) + points = sorted(map(ord, chars)) + font = rl.load_font_ex(str(directory / filename), 64, rl.ffi.new("int[]", points), len(points)) + if font.texture.id in (0, rl.get_font_default().texture.id) or font.glyphCount == 0: + raise RuntimeError(f"Unable to load language font {filename}") + for previous in fonts.values(): + rl.unload_font(previous) + fonts.clear() + self._measurements.clear() + self._vertical_ink.clear() + self._horizontal_ink.clear() + fonts[language] = font + rl.gen_texture_mipmaps(font.texture) + rl.set_texture_filter(font.texture, rl.TextureFilter.TEXTURE_FILTER_TRILINEAR) + return fonts[language] + def _optical_style(self, role: FontRole, fallback: bool = False) -> tuple[float, float]: if fallback: return 1., 0. @@ -149,7 +179,8 @@ class BitmapFonts: return 1., 0. def measure(self, text: str, role: FontRole, size: float, *, spacing: float = 0, fallback: bool = False) -> TextSize: - font = self.font(role, fallback=fallback) + text = tr(text) if role != FontRole.BRAND else text + font = self._text_font(text, role, fallback) spacing = round(spacing, 4) width_scale, weight = self._optical_style(role, fallback) key = font.texture.id, text, size, spacing, width_scale, weight @@ -162,9 +193,10 @@ class BitmapFonts: def vertical_ink(self, text: str, role: FontRole, size: float) -> tuple[float, float]: """Visible glyph top/bottom, independent of the font's padded line box.""" + text = tr(text) if role != FontRole.BRAND else text key = (text, role, size) if key not in self._vertical_ink: - font = self.font(role) + font = self._text_font(text, role) glyphs = [rl.get_glyph_index(font, ord(char)) for char in text if not char.isspace()] scale = size * self.profile.font_scale / font.baseSize top = min((font.glyphs[index].offsetY for index in glyphs), default=0) @@ -176,14 +208,15 @@ class BitmapFonts: def horizontal_ink(self, text: str, role: FontRole, size: float) -> tuple[float, float]: """Visible glyph left/right from the draw x, without the font's side bearings.""" + text = tr(text) if role != FontRole.BRAND else text key = (text, role, size) if key not in self._horizontal_ink: - font = self.font(role) + font = self._text_font(text, role) width_scale, weight = self._optical_style(role) scale = size * self.profile.font_scale / font.baseSize left = right = None x = 0. - columns = self._glyph_columns(role) + columns = self._glyph_columns(role) if text.isascii() or role == FontRole.BRAND else {} for char in text: index = rl.get_glyph_index(font, ord(char)) glyph, rec = font.glyphs[index], font.recs[index] @@ -224,27 +257,30 @@ class BitmapFonts: def draw(self, text: str, role: FontRole, size: float, x: float, y: float, color: rl.Color = rl.WHITE, *, spacing: float = 0, fallback: bool = False) -> None: + text = tr(text) if role != FontRole.BRAND else text + font = self._text_font(text, role, fallback) draw = getattr(rl, "_orig_draw_text_ex", rl.draw_text_ex) width_scale, weight = self._optical_style(role, fallback) if width_scale == 1. and weight == 0.: - draw(self.font(role, fallback=fallback), text, rl.Vector2(x, y), size * self.profile.font_scale, spacing, color) + draw(font, text, rl.Vector2(x, y), size * self.profile.font_scale, spacing, color) return rl.rl_push_matrix() try: rl.rl_translatef(x, y, 0) rl.rl_scalef(width_scale, 1., 1.) - draw(self.font(role, fallback=fallback), text, rl.Vector2(0, 0), size * self.profile.font_scale, spacing, color) + draw(font, text, rl.Vector2(0, 0), size * self.profile.font_scale, spacing, color) if weight: - draw(self.font(role, fallback=fallback), text, rl.Vector2(weight / width_scale, 0), + draw(font, text, rl.Vector2(weight / width_scale, 0), size * self.profile.font_scale, spacing, color) finally: rl.rl_pop_matrix() def close(self) -> None: if rl.is_window_ready() or self._headless_context: - for font in self._fonts.values(): + for font in (*self._fonts.values(), *self._language_fonts.values()): rl.unload_font(font) self._fonts.clear() + self._language_fonts.clear() self._vertical_ink.clear() self._horizontal_ink.clear() self._glyph_ink.clear() diff --git a/openpilot/starpilot/ui/settings_geometry.py b/openpilot/starpilot/ui/settings_geometry.py index c5ce7dc2ff..5775f7f90d 100644 --- a/openpilot/starpilot/ui/settings_geometry.py +++ b/openpilot/starpilot/ui/settings_geometry.py @@ -2,6 +2,8 @@ from __future__ import annotations +from openpilot.system.ui.lib.multilang import tr + import math import random from functools import lru_cache @@ -107,6 +109,7 @@ def draw_hud_background(rect: rl.Rectangle, accent: rl.Color, glow: float = 1.0, def elide_text(fonts, text: str, role: FontRole, size: float, width: float) -> str: + text = tr(text) if fonts.measure(text, role, size).width <= width: return text suffix = "..." diff --git a/openpilot/starpilot/ui/tests/test_presentation.py b/openpilot/starpilot/ui/tests/test_presentation.py index 4f6d952a73..f0424e5919 100644 --- a/openpilot/starpilot/ui/tests/test_presentation.py +++ b/openpilot/starpilot/ui/tests/test_presentation.py @@ -86,3 +86,55 @@ class TestBitmapFonts(unittest.TestCase): if __name__ == "__main__": unittest.main() + + +class TestLocalizedPresentation(unittest.TestCase): + def test_measure_and_draw_use_the_same_translated_text_and_font(self): + fonts = object.__new__(BitmapFonts) + fonts.profile = Profile.COMPACT + fonts._measurements = {} + font = SimpleNamespace(texture=SimpleNamespace(id=44)) + with patch('openpilot.starpilot.ui.presentation.tr', side_effect=lambda text: {'Home': 'ホーム'}.get(text, text)), \ + patch.object(fonts, '_text_font', return_value=font) as select, \ + patch('openpilot.starpilot.ui.presentation.rl.measure_text_ex', return_value=SimpleNamespace(x=80, y=24)) as measure, \ + patch('openpilot.starpilot.ui.presentation.rl._orig_draw_text_ex', create=True) as draw: + assert fonts.measure('Home', FontRole.NORMAL, 20).width == 80 + fonts.draw('Home', FontRole.NORMAL, 20, 10, 20) + assert measure.call_args.args[1] == draw.call_args.args[1] == 'ホーム' + assert select.call_args.args[:2] == ('ホーム', FontRole.NORMAL) + fonts.draw('StarPilot', FontRole.BRAND, 20, 10, 20) + assert draw.call_args.args[1] == 'StarPilot' + + def test_native_language_font_uses_bundled_noto_and_releases_previous(self): + fonts = object.__new__(BitmapFonts) + old = SimpleNamespace(texture=SimpleNamespace(id=22), glyphCount=1) + new = SimpleNamespace(texture=SimpleNamespace(id=23), glyphCount=100) + fonts._language_fonts = {'vi': old} + fonts._measurements = {} + fonts._vertical_ink = {} + fonts._horizontal_ink = {} + with patch('openpilot.starpilot.ui.presentation.multilang') as language, \ + patch('openpilot.starpilot.ui.presentation.rl.load_font_ex', return_value=new) as load, \ + patch('openpilot.starpilot.ui.presentation.rl.get_font_default', return_value=SimpleNamespace(texture=SimpleNamespace(id=99))), \ + patch('openpilot.starpilot.ui.presentation.rl.unload_font') as unload, \ + patch('openpilot.starpilot.ui.presentation.rl.gen_texture_mipmaps'), \ + patch('openpilot.starpilot.ui.presentation.rl.set_texture_filter'): + language.language = 'ja' + assert fonts._text_font('ホーム', FontRole.NORMAL) is new + assert load.call_args.args[0].endswith('NotoSansCJKjp-Regular.otf') + unload.assert_called_once_with(old) + assert fonts._language_fonts == {'ja': new} + assert fonts._text_font('保存', FontRole.NORMAL) is new + load.assert_called_once() + + def test_home_statistics_use_shared_localized_measurement_and_drawing(self): + from unittest.mock import Mock + from openpilot.starpilot.ui.home_stats import DriveStatsDashboard + fonts = SimpleNamespace(font=Mock(side_effect=[object(), object(), object()]), + measure=Mock(return_value=SimpleNamespace(width=80, height=24)), draw=Mock()) + dashboard = DriveStatsDashboard(fonts, None) + measured = dashboard._measure(dashboard._font_bold, 'PERSONAL RECORDS', 20) + assert (measured.x, measured.y) == (80, 24) + dashboard._draw_text(dashboard._font_bold, 'PERSONAL RECORDS', SimpleNamespace(x=10, y=20), 20, 0, 'color') + fonts.measure.assert_called_once_with('PERSONAL RECORDS', FontRole.BOLD, 20) + fonts.draw.assert_called_once_with('PERSONAL RECORDS', FontRole.BOLD, 20, 10, 20, 'color', spacing=0) diff --git a/openpilot/starpilot/ui/translation_strings.py b/openpilot/starpilot/ui/translation_strings.py new file mode 100644 index 0000000000..60aff27ec3 --- /dev/null +++ b/openpilot/starpilot/ui/translation_strings.py @@ -0,0 +1,200 @@ +"""Shared display labels drawn by native widgets or received by Galaxy at runtime.""" + +from openpilot.system.ui.lib.multilang import tr_noop + + +MESSAGES = ( + tr_noop("Home"), + tr_noop("Driving"), + tr_noop("Controls"), + tr_noop("Toggles"), + tr_noop("Localization"), + tr_noop("Language"), + tr_noop("Use Kilometers (km/h)"), + tr_noop("Right-Hand Drive"), + tr_noop("Device display language. Untranslated text uses English. Park before changing language."), + tr_noop("Language, units and steering-wheel side for every vehicle."), + tr_noop("On"), + tr_noop("Off"), + tr_noop("Auto"), + tr_noop("Stock"), + tr_noop("Custom"), + tr_noop("Unavailable"), + tr_noop("Available"), + tr_noop("Invalid saved choice"), + tr_noop("Invalid saved value"), + tr_noop("Saved choice cannot be read"), + tr_noop("Save"), + tr_noop("Saved"), + tr_noop("Saving"), + tr_noop("Save changes"), + tr_noop("Could not save"), + tr_noop("Discard changes"), + tr_noop("Unsaved changes"), + tr_noop("Cancel"), + tr_noop("Close"), + tr_noop("Back"), + tr_noop("Next"), + tr_noop("Previous"), + tr_noop("Continue"), + tr_noop("Confirm"), + tr_noop("Apply"), + tr_noop("Reset"), + tr_noop("Reset to defaults"), + tr_noop("Restore"), + tr_noop("Default"), + tr_noop("Delete"), + tr_noop("Remove"), + tr_noop("Add"), + tr_noop("Edit"), + tr_noop("Search"), + tr_noop("Refresh"), + tr_noop("Retry"), + tr_noop("Loading"), + tr_noop("Loading…"), + tr_noop("Opening page…"), + tr_noop("This page could not open."), + tr_noop("Reload page"), + tr_noop("Refresh Galaxy"), + tr_noop("Connected"), + tr_noop("Disconnected"), + tr_noop("Connecting"), + tr_noop("Connect"), + tr_noop("Disconnect"), + tr_noop("Forget"), + tr_noop("Pair"), + tr_noop("Pairing"), + tr_noop("Sign in"), + tr_noop("Sign out"), + tr_noop("Password"), + tr_noop("Device"), + tr_noop("Network"), + tr_noop("Software"), + tr_noop("System"), + tr_noop("Settings"), + tr_noop("Developer"), + tr_noop("Appearance"), + tr_noop("Display"), + tr_noop("Custom Display Settings"), + tr_noop("Sounds & Alerts"), + tr_noop("Sounds"), + tr_noop("Alerts"), + tr_noop("Driving Controls"), + tr_noop("Vehicle Settings"), + tr_noop("Vehicle"), + tr_noop("Wheel Controls"), + tr_noop("Driving Model"), + tr_noop("Models"), + tr_noop("Model Laboratory"), + tr_noop("Maps"), + tr_noop("Navigation"), + tr_noop("Favorites"), + tr_noop("History"), + tr_noop("Drive History"), + tr_noop("Recent drives"), + tr_noop("Last drive"), + tr_noop("Your driving"), + tr_noop("This week"), + tr_noop("Personal records"), + tr_noop("Vitals"), + tr_noop("Storage"), + tr_noop("Tools"), + tr_noop("Logs"), + tr_noop("Recordings"), + tr_noop("Replay"), + tr_noop("Cameras"), + tr_noop("Camera"), + tr_noop("Bluetooth"), + tr_noop("Offline maps"), + tr_noop("Download"), + tr_noop("Downloaded"), + tr_noop("Installed"), + tr_noop("Install"), + tr_noop("Update"), + tr_noop("Updates"), + tr_noop("Check for updates"), + tr_noop("Reboot"), + tr_noop("Power Off"), + tr_noop("Parked Power"), + tr_noop("Force Drive State"), + tr_noop("Onroad"), + tr_noop("Offroad"), + tr_noop("Always On Lateral"), + tr_noop("Long Planner"), + tr_noop("Conditional Driving Modes"), + tr_noop("Curve Speed Controller"), + tr_noop("Speed Limit Controller"), + tr_noop("Lane Centering"), + tr_noop("Lane Change"), + tr_noop("Lane Change Settings"), + tr_noop("Following distance"), + tr_noop("Following time"), + tr_noop("Traffic Mode"), + tr_noop("Standard"), + tr_noop("Aggressive"), + tr_noop("Relaxed"), + tr_noop("Chill"), + tr_noop("Experimental"), + tr_noop("Personality"), + tr_noop("Personalities"), + tr_noop("Saved settings"), + tr_noop("Backup"), + tr_noop("Backups"), + tr_noop("Export"), + tr_noop("Import"), + tr_noop("Play"), + tr_noop("Pause"), + tr_noop("Stop"), + tr_noop("Start"), + tr_noop("Front"), + tr_noop("Rear"), + tr_noop("Left"), + tr_noop("Right"), + tr_noop("Small"), + tr_noop("Big"), + tr_noop("None"), + tr_noop("Enabled"), + tr_noop("Disabled"), + tr_noop("Not reported"), + tr_noop("Not detected"), + tr_noop("Unknown"), + tr_noop("Error"), + tr_noop("Warning"), + tr_noop("Accept"), + tr_noop("Reject"), + tr_noop("Not now"), + tr_noop("Done"), + tr_noop("Details"), + tr_noop("View"), + tr_noop("More"), + tr_noop("No drives"), + tr_noop("History unavailable"), + tr_noop("Loading history"), + tr_noop("Date unavailable"), + tr_noop("No results"), + tr_noop("Search settings"), + tr_noop("Take control"), + tr_noop("TAKE CONTROL IMMEDIATELY"), + tr_noop("LEAD"), + tr_noop("CURVE"), + tr_noop("STOP LIGHT"), + tr_noop("SPEED"), + tr_noop("OFF"), + tr_noop("PREVIOUS"), + tr_noop("RESET"), + tr_noop("CONNECT"), + tr_noop("PAIR"), + tr_noop("VEHICLE"), + tr_noop("PERSONAL RECORDS"), + tr_noop("REPLAY"), + tr_noop("DOWNLOAD"), + tr_noop("PAUSE"), + tr_noop("STOP"), + tr_noop("BIG"), + tr_noop("UNKNOWN"), + tr_noop("DETAILS"), + tr_noop("VIEW"), + tr_noop("ALL TIME"), + tr_noop("PAST WEEK"), + tr_noop("DISTANCE THIS WEEK"), +) diff --git a/openpilot/system/ui/lib/application.py b/openpilot/system/ui/lib/application.py index e38cb58001..ea0d2a27c5 100644 --- a/openpilot/system/ui/lib/application.py +++ b/openpilot/system/ui/lib/application.py @@ -847,6 +847,7 @@ class GuiApplication: rl._orig_draw_text_ex = rl.draw_text_ex def _draw_text_ex_scaled(font, text, position, font_size, spacing, tint): + text = multilang.tr(text) font = font_fallback(font) return rl._orig_draw_text_ex(font, text, position, font_size * FONT_SCALE, spacing, tint) diff --git a/openpilot/system/ui/lib/text_measure.py b/openpilot/system/ui/lib/text_measure.py index 6ee48ea263..3f834483dd 100644 --- a/openpilot/system/ui/lib/text_measure.py +++ b/openpilot/system/ui/lib/text_measure.py @@ -1,5 +1,6 @@ import pyray as rl from openpilot.system.ui.lib.application import FONT_SCALE, font_fallback +from openpilot.system.ui.lib.multilang import tr from openpilot.system.ui.lib.lru_cache import LRUCache _CACHE_MAXSIZE = 1024 @@ -8,6 +9,7 @@ _cache: LRUCache[int, rl.Vector2] = LRUCache(_CACHE_MAXSIZE) def measure_text_cached(font: rl.Font, text: str, font_size: int, spacing: float = 0) -> rl.Vector2: """Caches text measurements to avoid redundant calculations.""" + text = tr(text) font = font_fallback(font) spacing = round(spacing, 4) key = hash((font.texture.id, text, font_size, spacing))