A new Overview style: the Grid over the roads round the car from
OpenStreetMap, drawn in the floor's perspective, heading up, the bigger
roads glowing brighter, the car as a chevron.
Server: POST /v1/map/roads {z:14,x,y} fetches a tile's drivable roads
from Overpass (OVERPASS_URL; one request at a time, at least a second
apart), simplifies them to tile-local points in four classes, caches
them for 30 days and never logs the tile.
App: MapRoads keeps the 3x3 tiles round the car from its own cache or
the server; GPS only while the style is shown; bearing from the GPS or
from successive positions. Without GPS, server or roads the plain floor
says why. OSM attribution on screen and in LICENSE.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LhzAVaUyqcw5PkGjz4mWW6
332 lines
23 KiB
XML
332 lines
23 KiB
XML
<resources>
|
|
<string name="app_name">Nils\' MG4</string>
|
|
|
|
<!-- Main screen -->
|
|
<string name="tab_service">Live data</string>
|
|
<string name="tab_vehicle">Overview</string>
|
|
<string name="tab_consumption">Consumption</string>
|
|
<string name="tab_charging">Charging</string>
|
|
<string name="tab_server">Server</string>
|
|
<string name="tab_settings">Settings</string>
|
|
<string name="tab_log">Logs</string>
|
|
|
|
|
|
<!-- Vehicle page -->
|
|
<string name="vehicle_live_data">Live Vehicle Data</string>
|
|
<string name="vehicle_tires">Tire Pressures</string>
|
|
<string name="vehicle_row_soc">Charge (SOC)</string>
|
|
<string name="vehicle_row_range">Range</string>
|
|
<string name="vehicle_row_power">Power</string>
|
|
<string name="vehicle_row_range_trip">Range since start</string>
|
|
<string name="vehicle_row_range_average">Range, 5-min average</string>
|
|
<string name="vehicle_row_usage_trip">Usage since start</string>
|
|
<string name="vehicle_row_energy_trip">Energy since start</string>
|
|
<string name="vehicle_row_power_average">Power, 5-min average</string>
|
|
<string name="power_kw">%1$.1f kW</string>
|
|
<string name="power_waiting">needs a minute of data</string>
|
|
<string name="label_tire_unit">Tyre pressure</string>
|
|
<string name="label_accent">Accent colour</string>
|
|
<string name="energy_kwh">%1$.1f kWh</string>
|
|
<string name="energy_trip_note">net, after recuperation</string>
|
|
<string name="energy_trip_waiting">once the car is on</string>
|
|
<string name="vehicle_row_usage_average">Usage, 5-min average</string>
|
|
<string name="range_consumption">%1$.1f kWh/100 km</string>
|
|
<string name="range_over">> %1$d km</string>
|
|
<string name="range_waiting">needs a few minutes of driving</string>
|
|
<string name="range_recuperating">while recuperating</string>
|
|
<string name="range_trip_waiting">once the car has moved</string>
|
|
<string name="usage_over_distance">over %1$.1f km</string>
|
|
<string name="usage_last_5_min">over the last 5 minutes</string>
|
|
<string name="hint_usable_capacity">Usable battery capacity</string>
|
|
<string name="btn_save_capacity">Save capacity</string>
|
|
<string name="helper_usable_capacity">For range estimates. Usable kWh: 50.8 (51 kWh), 61.7 (64), 74.4 (77).</string>
|
|
<string name="usable_capacity_saved">Usable capacity saved</string>
|
|
<string name="usable_capacity_invalid">Enter a value between 10 and 150 kWh</string>
|
|
<string name="vehicle_row_speed">Speed</string>
|
|
<string name="vehicle_row_odometer">Odometer</string>
|
|
<string name="vehicle_row_lease_allowance">Lease allowance today</string>
|
|
<string name="vehicle_row_lease_difference">Versus allowance</string>
|
|
<string name="lease_over">%1$s km over</string>
|
|
<string name="lease_under">%1$s km under</string>
|
|
<string name="lease_on_target">On target</string>
|
|
<string name="vehicle_row_batt_temp">Battery Temperature</string>
|
|
<string name="vehicle_row_cabin_temp">Cabin Temperature</string>
|
|
<string name="vehicle_row_hvac">Climate Setpoint</string>
|
|
<string name="vehicle_row_capacity">Battery Capacity</string>
|
|
<string name="vehicle_row_charging">Charging Status</string>
|
|
<string name="vehicle_tire_fl">Front Left</string>
|
|
<string name="vehicle_tire_fr">Front Right</string>
|
|
<string name="vehicle_tire_rl">Rear Left</string>
|
|
<string name="vehicle_tire_rr">Rear Right</string>
|
|
<string name="btn_save">Save</string>
|
|
<string name="btn_test">Test connection</string>
|
|
<string name="btn_import">Import from file</string>
|
|
<string name="installation_id_info">Installation ID %1$s · derived from the head unit; your data is stored under it</string>
|
|
|
|
<!-- Server page -->
|
|
<string name="server_card_title">Car server</string>
|
|
<string name="hint_server_url">Server URL</string>
|
|
<string name="helper_server_url">For example https://car.k8s.stinnesbeck.com</string>
|
|
<string name="hint_server_token">Ingest token</string>
|
|
<string name="helper_server_token">The server\'s INGEST_TOKEN, at least 24 characters</string>
|
|
<string name="server_err_url">Enter an https:// URL</string>
|
|
<string name="btn_pair">Pair with phone</string>
|
|
<string name="pair_hint">Shows a QR code: scan it with your phone and approve with the approval password. The token below is then filled in for you.</string>
|
|
<string name="pair_title">Pair with phone</string>
|
|
<string name="pair_scan">Scan the QR code with your phone, or open %1$s and enter the code %2$s:</string>
|
|
<string name="pair_waiting">Waiting for approval…</string>
|
|
<string name="pair_starting">Contacting the server…</string>
|
|
<string name="pair_ok">Paired — this car now has its own token</string>
|
|
<string name="pair_denied">Pairing was denied on the phone</string>
|
|
<string name="pair_expired">The code expired — press Pair with phone again</string>
|
|
<string name="pair_not_enabled">Pairing is not enabled on the server (no APPROVAL_PASSWORD)</string>
|
|
<string name="pair_error">Pairing failed: %1$s</string>
|
|
<string name="pair_close">Close</string>
|
|
<string name="pair_err_old_server">The server has no pairing (HTTP 404). It needs server version 2.1.0 or newer.</string>
|
|
<string name="err_dns">Server name %1$s not found. Is it in public DNS?</string>
|
|
<string name="err_unreachable">Server %1$s not reachable</string>
|
|
<string name="err_http">Server answered HTTP %1$d</string>
|
|
<string name="pair_cancel">Cancel</string>
|
|
<string name="pair_qr_description">QR code to approve this car on your phone</string>
|
|
<string name="server_err_token">The token must be at least 24 characters, without spaces</string>
|
|
<string name="server_err_installation_id">Not a valid ID (UUID)</string>
|
|
<string name="server_saved">Server settings saved</string>
|
|
<string name="server_not_configured">Server not configured — open the Server tab</string>
|
|
|
|
<!-- Config file import -->
|
|
<string name="import_ok">Config imported and saved — press Test to verify</string>
|
|
<string name="import_ok_deleted">Config imported and saved; the file was deleted</string>
|
|
<string name="import_ok_not_deleted">Config imported and saved, but the file could not be deleted. It holds your token: delete %1$s</string>
|
|
<string name="import_err_read">Could not read that file</string>
|
|
<string name="import_err_values">The charging price or usable capacity in the file is not plausible</string>
|
|
<string name="import_err_empty">No settings found in that file</string>
|
|
<string name="import_err_not_found">No config file found. Copy it to %1$s</string>
|
|
|
|
<!-- Connection test -->
|
|
<string name="conn_testing">Testing…</string>
|
|
<string name="conn_ok">Connected — server accepts the token</string>
|
|
<string name="conn_err_auth">Token rejected — check it against the server\'s INGEST_TOKEN</string>
|
|
<string name="perm_denied_location">Location denied — telemetry will have no position. Grant it in Settings to send GPS to ABRP.</string>
|
|
<string name="perm_denied_car">Vehicle data denied — no battery %%, speed or range will be sent. Grant it in Settings.</string>
|
|
<string name="perm_denied_all">Location and vehicle data denied — only a timestamp will be sent. Grant both in Settings.</string>
|
|
<string name="conn_err_no_internet">No internet connection</string>
|
|
<string name="conn_err_timeout">Connection timed out</string>
|
|
<string name="conn_err_http">Server error (HTTP %1$d)</string>
|
|
|
|
<string name="label_full_screen">Full screen</string>
|
|
<string name="hint_full_screen">Hides the car\'s top and bottom bars while this app is open. Swipe in from the top or bottom edge to show them briefly, e.g. for the climate controls.</string>
|
|
<string name="label_overview_style">Overview style</string>
|
|
<string name="overview_style_tiles">Tiles</string>
|
|
<string name="overview_style_gauges">Gauges</string>
|
|
<string name="dash_unit_kw">kW</string>
|
|
<string name="dash_unit_kmh">km/h</string>
|
|
<string name="dash_unit_battery">SOC</string>
|
|
<string name="dash_total">TOTAL %1$s</string>
|
|
<string name="dash_trip">TRIP %1$s</string>
|
|
<string name="overview_style_cockpit">Cockpit</string>
|
|
<string name="overview_style_retro">Retro</string>
|
|
<string name="overview_style_futuristic">Futuristic</string>
|
|
<string name="overview_style_scifi">Sci-fi</string>
|
|
<string name="overview_style_cartoon">Cartoon</string>
|
|
<string name="overview_style_mg">MG</string>
|
|
<string name="accent_not_used">%1$s has its own colours, and the app takes them on. To change the accent colour, pick a style that uses it.</string>
|
|
<string name="overview_fullscreen_enter">Overview full screen: hide the navigation</string>
|
|
<string name="overview_fullscreen_exit">Show the navigation again</string>
|
|
<string name="overview_style_minimal">Minimal</string>
|
|
<string name="overview_style_terminal">Terminal</string>
|
|
<string name="accent_original">Original</string>
|
|
<string name="overview_style_grid">Grid</string>
|
|
<string name="overview_style_grid_map">Grid with map</string>
|
|
<string name="overview_style_time_circuits">Time circuits</string>
|
|
<string name="overview_style_quest">Quest</string>
|
|
<string name="overview_style_visor">Visor</string>
|
|
<string name="overview_style_empire">Empire</string>
|
|
<string name="overview_style_nixie">Nixie tubes</string>
|
|
<string name="overview_style_chronograph">Chronograph</string>
|
|
<string name="cockpit_battery">BATTERY</string>
|
|
<string name="cockpit_usage">USAGE · 5 MIN</string>
|
|
<string name="cockpit_usage_unit">kWh/100 km</string>
|
|
<string name="cockpit_usage_trip">since start %1$s</string>
|
|
<string name="cockpit_trace_title">POWER · LAST 2 MIN</string>
|
|
<string name="label_voice_key">Double-press the voice key to open this app</string>
|
|
<string name="hint_voice_key">Press the voice key on the steering wheel twice quickly. The voice assistant may still react to the presses.</string>
|
|
<string name="label_abrp_upload_enabled">Send live data</string>
|
|
<string name="hint_abrp_upload_enabled">To your server, which stores it, and straight to ABRP when the ABRP credentials below are set. Consumption and charging tracking keep running when this is off.</string>
|
|
<string name="hint_abrp_direct">The car sends live data to ABRP itself with your ABRP API key and user token. Without them, ABRP gets no live data; your server only stores it.</string>
|
|
<string name="hint_abrp_api_key">ABRP API key</string>
|
|
<string name="hint_abrp_token">ABRP user token</string>
|
|
<string name="abrp_saved">Saved: the car sends live data to ABRP directly</string>
|
|
<string name="abrp_cleared">Cleared: ABRP gets no live data</string>
|
|
<string name="abrp_invalid">Enter both, without spaces, or leave both empty</string>
|
|
<string name="abrp_testing">Checking with ABRP…</string>
|
|
<string name="abrp_test_ok">ABRP accepted these credentials</string>
|
|
<string name="abrp_test_failed">ABRP refused: HTTP %1$d</string>
|
|
<string name="abrp_test_offline">ABRP not reachable: %1$s</string>
|
|
<string name="abrp_not_set">Set both first</string>
|
|
<string name="btn_phone_settings">Enter on phone</string>
|
|
<string name="hint_phone_settings">Type the ABRP credentials, charging price and usable capacity on your phone instead: a QR code opens a form on your server.</string>
|
|
<string name="phone_settings_title">Enter settings on your phone</string>
|
|
<string name="phone_settings_scan">Scan the QR code with your phone, or open %1$s and enter the code %2$s. Fill in what you want to change and send it with the approval password.</string>
|
|
<string name="phone_settings_waiting">Waiting for the phone…</string>
|
|
<string name="phone_settings_needs_server">Set up the server first (Server tab): the form for the phone runs on your server.</string>
|
|
<string name="phone_settings_not_enabled">Not available on the server: it needs version 2.5.0 or newer and an APPROVAL_PASSWORD</string>
|
|
<string name="pair_expired_settings">The code expired — press Enter on phone again</string>
|
|
<string name="phone_settings_applied">Settings from the phone saved</string>
|
|
<string name="phone_settings_partly">Some values from the phone were not plausible and were not saved</string>
|
|
|
|
|
|
<!-- Cadence configuration -->
|
|
<string name="label_frequency">Upload frequency</string>
|
|
<string name="hint_frequency">Applies while driving. Parked and unplugged, the app backs off to one upload every 15 minutes on its own.</string>
|
|
<string name="label_boost_low_soc">Upload more often at low battery</string>
|
|
<string name="label_low_soc_threshold">Low battery threshold (%)</string>
|
|
<plurals name="interval_seconds">
|
|
<item quantity="one">Every %1$d second</item>
|
|
<item quantity="other">Every %1$d seconds</item>
|
|
</plurals>
|
|
<plurals name="interval_minutes">
|
|
<item quantity="one">Every %1$d minute</item>
|
|
<item quantity="other">Every %1$d minutes</item>
|
|
</plurals>
|
|
|
|
<!-- Service state -->
|
|
<string name="state_stopped">Stopped</string>
|
|
<string name="state_starting">Starting…</string>
|
|
<string name="state_running">Running</string>
|
|
<string name="state_abrp_only">Running — live data to ABRP only, no server set up</string>
|
|
<string name="state_tracking_locally">Tracking locally — live telemetry off</string>
|
|
<string name="notif_tracking_locally">Tracking locally — live telemetry off</string>
|
|
<string name="state_error">In error — last %1$d uploads failed</string>
|
|
|
|
<!-- Call log -->
|
|
<string name="label_call_log">Recent uploads</string>
|
|
<string name="label_drive_mode">DRIVE MODE</string>
|
|
<string name="drive_mode_eco">Eco</string>
|
|
<string name="drive_mode_normal">Normal</string>
|
|
<string name="drive_mode_sport">Sport</string>
|
|
<string name="drive_mode_snow">Snow</string>
|
|
<string name="drive_mode_custom">Custom</string>
|
|
<string name="drive_mode_hint">Only in P at a standstill. At start: your last confirmed mode.</string>
|
|
<string name="drive_mode_at_start">Set at start</string>
|
|
<string name="drive_mode_start_applied">At start (%1$s): %2$s set.</string>
|
|
<string name="drive_mode_start_already">At start (%1$s): %2$s was already set.</string>
|
|
<string name="drive_mode_start_not_applied">At start (%1$s): %2$s not applied, the car reports %3$s.</string>
|
|
<string name="drive_mode_start_unread">At start (%1$s): %2$s sent, not read back.</string>
|
|
<string name="drive_mode_start_refused">At start (%1$s): %2$s not accepted by the car.</string>
|
|
<string name="drive_mode_setting">Setting %1$s…</string>
|
|
<string name="drive_mode_applied">%1$s set: the car reports it now.</string>
|
|
<string name="drive_mode_not_applied">%1$s not applied: the car still reports %2$s.</string>
|
|
<string name="drive_mode_unread_back">%1$s sent, but the car\'s mode could not be read back.</string>
|
|
<string name="drive_mode_write_failed">%1$s not set: the car did not accept the change.</string>
|
|
<string name="drive_mode_not_in_p">Not changed: shift to P first.</string>
|
|
<string name="drive_mode_moving">Not changed: only at a standstill.</string>
|
|
<string name="drive_mode_unreadable">Not changed: speed or gear unreadable.</string>
|
|
<string name="drive_mode_unknown">an unknown mode (%1$s)</string>
|
|
<string name="label_signal_recorder">Signal recorder</string>
|
|
<string name="signal_recorder_hint">Records every value the head unit offers for 3 minutes, plus the steering-wheel keys it reports, and lists what changed, the rarest first. To find a signal: start it, note the times you switch the feature on and off or change it, and look for the values that changed then. With a USB stick plugged in, the whole recording is saved on it too (Android/data/…/files).</string>
|
|
<string name="btn_signal_record">Record 3 minutes</string>
|
|
<string name="btn_signal_stop">Stop recording</string>
|
|
<string name="signal_recorder_running">Recording: %1$d:%2$02d of 3:00, %3$d captures. Keys reported, then values changed so far, the rarest first:</string>
|
|
<string name="signal_recorder_done">Recording from %1$s: %2$d captures, %3$s. Keys reported, then values changed, the rarest first:</string>
|
|
<string name="call_log_empty">No upload attempted yet.</string>
|
|
<string name="update_log_title">Updates, newest first:</string>
|
|
<string name="btn_flush_now">Upload now</string>
|
|
<string name="status_starting">Starting…</string>
|
|
<string name="status_running_no_upload">Running — waiting for first upload</string>
|
|
<string name="status_last_upload">Last upload: %1$s (%2$s)</string>
|
|
<string name="status_ok">OK</string>
|
|
|
|
<!-- Notification -->
|
|
<string name="notif_channel_name">ABRP Upload Service</string>
|
|
<string name="notif_channel_desc">Shows vehicle telemetry upload status</string>
|
|
<string name="notif_title">ABRP Uploader</string>
|
|
<string name="notif_action_stop">Stop</string>
|
|
<string name="ota_install_success">Update installed — restart the app</string>
|
|
<string name="ota_install_failed">Installation failed: %1$s. The APK is in Downloads.</string>
|
|
<string name="update_check">Check for updates</string>
|
|
<string name="update_checking">Checking for a new OTA version…</string>
|
|
<string name="update_usb_looking">Looking on the USB stick…</string>
|
|
<string name="btn_usb_update">Install from USB stick</string>
|
|
<string name="update_dialog_title">Software update</string>
|
|
<string name="btn_check_update">Check for updates</string>
|
|
<string name="btn_about">About Nils\' MG4</string>
|
|
<string name="settings_version">Version %1$s</string>
|
|
<string name="vehicle_row_speed_average">Speed, 5-min average</string>
|
|
<string name="speed_kmh">%1$.0f km/h</string>
|
|
<string name="update_downloading">Downloading and verifying…</string>
|
|
<string name="update_downloading_percent">Downloading… %1$d%%</string>
|
|
<string name="about_action">About</string>
|
|
<string name="about_title">About Nils\' MG4</string>
|
|
<string name="about_version">Version %1$s</string>
|
|
<string name="about_attribution">Fork of fatihdonmezdev / FatihsMG4,\nmalys / EVABRPUploader\nand Leon Kernan / ABRP_Uploader</string>
|
|
<string name="about_repository">git.stinnesbeck.com/nils/mg4</string>
|
|
<string name="about_made_with_love">MG4 EH32 · SWI69</string>
|
|
<string name="about_logo_description">Nils\' MG4 logo</string>
|
|
<string name="about_qr_description">QR code for the project repository</string>
|
|
<string name="about_version_unknown">unknown</string>
|
|
<string name="about_close">Close</string>
|
|
|
|
<!-- Charging, Consumption and Settings texts, moved here from the layouts (2.14.4) -->
|
|
<string name="charging_not_charging">Not charging</string>
|
|
<string name="charging_soc">SOC</string>
|
|
<string name="charging_start_soc">Start SOC</string>
|
|
<string name="charging_battery_voltage">Battery voltage</string>
|
|
<string name="charging_battery_current">Battery current</string>
|
|
<string name="charging_power_label">Charging power</string>
|
|
<string name="charging_net_energy_into_battery">Net energy into battery</string>
|
|
<string name="charging_drawn_from_grid" formatted="false">Drawn from grid (+10%)</string>
|
|
<string name="charging_time_label">Charging time</string>
|
|
<string name="charging_total_cost">Total cost</string>
|
|
<string name="charging_curve_title">CHARGING CURVE</string>
|
|
<string name="charging_no_charging_measurements_yet">No charging measurements yet</string>
|
|
<string name="consumption_period_title">CONSUMPTION PERIOD</string>
|
|
<string name="consumption_lifetime">Lifetime</string>
|
|
<string name="consumption_last_7_days">Last 7 days</string>
|
|
<string name="consumption_last_30_days">Last 30 days</string>
|
|
<string name="consumption_trip_a">Trip A</string>
|
|
<string name="consumption_trip_b">Trip B</string>
|
|
<string name="consumption_distance">Distance</string>
|
|
<string name="consumption_net_energy">Net energy</string>
|
|
<string name="consumption_average_consumption">Average consumption</string>
|
|
<string name="consumption_average_speed">Average speed</string>
|
|
<string name="consumption_duration">Duration</string>
|
|
<string name="consumption_soc_change">SOC change</string>
|
|
<string name="consumption_reset_selected_trip">Reset selected trip</string>
|
|
<string name="consumption_stored_note">Last 7/30 days, lifetime and Trip A/B are stored permanently on the device; app and OTA updates do not erase them.</string>
|
|
<string name="consumption_daily_log_title">DAILY LOG · LAST 4 MONTHS</string>
|
|
<string name="consumption_pick_a_date">Pick a date</string>
|
|
<string name="consumption_no_daily_data_yet">No daily data yet</string>
|
|
<string name="settings_manual_soh" formatted="false">Manual SoH (%)</string>
|
|
<string name="unit_percent" formatted="false">%</string>
|
|
<string name="settings_save_soh_value">Save SoH value</string>
|
|
<string name="settings_soh_note">This manual value is stored on the device and sent to your server with the daily totals.</string>
|
|
<string name="unit_kwh">kWh</string>
|
|
<string name="settings_unit_price">Unit price</string>
|
|
<string name="unit_eur_per_kwh">€/kWh</string>
|
|
<string name="settings_save_price">Save price</string>
|
|
<string name="trip_reset_title">Reset %1$s?</string>
|
|
<string name="trip_reset_message">This counter\'s recorded consumption history will be permanently deleted.</string>
|
|
<string name="trip_reset_confirm">Reset</string>
|
|
<string name="soh_saved">SoH saved</string>
|
|
<string name="soh_invalid">Enter a value between 1 and 100</string>
|
|
<string name="price_saved">Charging price saved</string>
|
|
<string name="price_invalid">Enter a valid €/kWh value</string>
|
|
<string name="charge_dc">DC fast charging</string>
|
|
<string name="charge_ac">AC charging</string>
|
|
<string name="charge_last">Last charge</string>
|
|
<string name="consumption_no_records">No records for this date</string>
|
|
<string name="consumption_day_summary">Distance %1$.1f km\nEnergy %2$.2f kWh\nAverage %3$s\nDuration %4$d h %5$02d min\nSOC change %6$.1f %%</string>
|
|
<string name="consumption_refreshed">Consumption refreshed</string>
|
|
<string name="charge_status_ac">AC charging ♥</string>
|
|
<string name="charge_status_dc">DC fast charging ♥</string>
|
|
<string name="charge_status_connecting">Connecting…</string>
|
|
<string name="charge_status_plugged">Plugged in, not charging</string>
|
|
<string name="charge_status_stopped">Stopped</string>
|
|
<string name="charge_status_code">Status %1$d</string>
|
|
<string name="charge_status_connected">Connected ♥</string>
|
|
<string name="charge_status_unplugged">Not connected</string>
|
|
<!-- A value that cannot be read: never 0 (AGENTS.md). -->
|
|
<string name="no_value" translatable="false">—</string>
|
|
<string name="btn_refresh">Refresh</string>
|
|
</resources>
|