feat(connections): Add connections page (replaces new device dialog) (#919)

* feat(conn): add connection screen and logic

* fixes from code review

* force https

* code review fixes

* add http for self testing

* enable deviceStore persistance

* added translations

* disabled feature flag

* i18n updates

* chore: add new folders to biome config (#910)

* chore(i18n): New Crowdin Translations by GitHub Action (#908)

Co-authored-by: Crowdin Bot <support+bot@crowdin.com>

* fix: use correct deprecated GPS coordinate format enum (#917)

The Config_DisplayConfig_GpsCoordinateFormat export doesn't exist in the protobufs package. The correct export is Config_DisplayConfig_DeprecatedGpsCoordinateFormat, which matches what's used in the validation schema.

Added TODO comment explaining that this field is deprecated since protobufs 2.7.4 and should be migrated to DeviceUIConfig.gps_format when DeviceUI settings are implemented.

* style: fix line wrapping for GPS coordinate format enum (#918)

- Split long enum reference across multiple lines to improve code readability
- Maintains consistent code formatting standards without changing functionality

* fix(core): ensure core package works in browser (#923)

* fix(core): ensure core package works in browser

* style(core): revert new line removal

* fix: add @serialport/bindings-cpp to onlyBuiltDependencies (#914)

* feat(ui): Add UI library (#900)

* feat: scaffold UI library

* Update packages/ui/src/components/theme-provider.tsx

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* add lock file

* lint/formatting fixes

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* formatting/linting fixes

* fixed some paring logic

* fixed connection issue with serial

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: Kamil Dzieniszewski <kamil.dzieniszewski@gmail.com>
Co-authored-by: Azarattum <43073346+Azarattum@users.noreply.github.com>
Co-authored-by: Ben Allfree <ben@benallfree.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Dan Ditomaso
2025-11-03 20:24:24 -05:00
committed by GitHub
co-authored by Copilot github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Crowdin Bot Kamil Dzieniszewski Azarattum Ben Allfree
parent a1a646983e
commit 1af1295b8f
69 changed files with 3628 additions and 1881 deletions
@@ -0,0 +1,10 @@
{
"title": "Connected Devices",
"description": "Manage your connected Meshtastic devices.",
"connectionType_ble": "BLE",
"connectionType_serial": "Serial",
"connectionType_network": "Network",
"noDevicesTitle": "No devices connected",
"noDevicesDescription": "Connect a new device to get started.",
"button_newConnection": "New Connection"
}
@@ -1,12 +0,0 @@
{
"dashboard": {
"title": "Connected Devices",
"description": "Manage your connected Meshtastic devices.",
"connectionType_ble": "BLE",
"connectionType_serial": "Serial",
"connectionType_network": "Network",
"noDevicesTitle": "No devices connected",
"noDevicesDescription": "Connect a new device to get started.",
"button_newConnection": "New Connection"
}
}
+226 -227
View File
@@ -1,229 +1,228 @@
{
"navigation": {
"title": "Navigation",
"messages": "Messages",
"map": "Map",
"settings": "Settings",
"channels": "Channels",
"radioConfig": "Radio Config",
"deviceConfig": "Device Config",
"moduleConfig": "Module Config",
"nodes": "Nodes"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Open sidebar",
"close": "Close sidebar"
}
},
"deviceInfo": {
"volts": "{{voltage}} volts",
"firmware": {
"title": "Firmware",
"version": "v{{version}}",
"buildDate": "Build date: {{date}}"
}
}
},
"batteryStatus": {
"charging": "{{level}}% charging",
"pluggedIn": "Plugged in",
"title": "Battery"
},
"search": {
"nodes": "Search nodes...",
"channels": "Search channels...",
"commandPalette": "Search commands..."
},
"toast": {
"positionRequestSent": {
"title": "Position request sent."
},
"requestingPosition": {
"title": "Requesting position, please wait..."
},
"sendingTraceroute": {
"title": "Sending Traceroute, please wait..."
},
"tracerouteSent": {
"title": "Traceroute sent."
},
"savedChannel": {
"title": "Saved Channel: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Chat is using PKI encryption."
},
"pskEncryption": {
"title": "Chat is using PSK encryption."
}
},
"configSaveError": {
"title": "Error Saving Config",
"description": "An error occurred while saving the configuration."
},
"validationError": {
"title": "Config Errors Exist",
"description": "Please fix the configuration errors before saving."
},
"saveSuccess": {
"title": "Saving Config",
"description": "The configuration change {{case}} has been saved."
},
"saveAllSuccess": {
"title": "Saved",
"description": "All configuration changes have been saved."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Copied!"
},
"copyToClipboard": {
"label": "Copy to clipboard"
},
"hidePassword": {
"label": "Hide password"
},
"showPassword": {
"label": "Show password"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "Waiting",
"unknown": "Unknown"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Hardware"
},
"metrics": {
"label": "Metrics"
},
"role": {
"label": "Role"
},
"filter": {
"label": "Filter"
},
"advanced": {
"label": "Advanced"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Reset Filters"
},
"nodeName": {
"label": "Node name/number",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)",
"short": "Airtime Util. (%)"
},
"batteryLevel": {
"label": "Battery level (%)",
"labelText": "Battery level (%): {{value}}"
},
"batteryVoltage": {
"label": "Battery voltage (V)",
"title": "Voltage"
},
"channelUtilization": {
"label": "Channel Utilization (%)",
"short": "Channel Util. (%)"
},
"hops": {
"direct": "Direct",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "Last heard",
"labelText": "Last heard: {{value}}",
"nowLabel": "Now"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Favorites"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Connected via MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "Language",
"changeLanguage": "Change Language"
},
"theme": {
"dark": "Dark",
"light": "Light",
"system": "Automatic",
"changeTheme": "Change Color Scheme"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Please include the following information in your report:",
"reportSteps": {
"step1": "What you were doing when the error occurred",
"step2": "What you expected to happen",
"step3": "What actually happened",
"step4": "Any other relevant information"
},
"reportLink": "You can report the issue to our <0>GitHub</0>",
"dashboardLink": "Return to the <0>dashboard</0>",
"detailsSummary": "Error Details",
"errorMessageLabel": "Error message:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
"commitSha": "Commit SHA: {{sha}}"
}
"navigation": {
"title": "Navigation",
"messages": "Messages",
"map": "Map",
"config": "Config",
"radioConfig": "Radio Config",
"moduleConfig": "Module Config",
"channels": "Channels",
"nodes": "Nodes"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Open sidebar",
"close": "Close sidebar"
}
},
"deviceInfo": {
"volts": "{{voltage}} volts",
"firmware": {
"title": "Firmware",
"version": "v{{version}}",
"buildDate": "Build date: {{date}}"
},
"deviceName": {
"title": "Device Name",
"changeName": "Change Device Name",
"placeholder": "Enter device name"
},
"editDeviceName": "Edit device name"
}
},
"batteryStatus": {
"charging": "{{level}}% charging",
"pluggedIn": "Plugged in",
"title": "Battery"
},
"search": {
"nodes": "Search nodes...",
"channels": "Search channels...",
"commandPalette": "Search commands..."
},
"toast": {
"positionRequestSent": {
"title": "Position request sent."
},
"requestingPosition": {
"title": "Requesting position, please wait..."
},
"sendingTraceroute": {
"title": "Sending Traceroute, please wait..."
},
"tracerouteSent": {
"title": "Traceroute sent."
},
"savedChannel": {
"title": "Saved Channel: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Chat is using PKI encryption."
},
"pskEncryption": {
"title": "Chat is using PSK encryption."
}
},
"configSaveError": {
"title": "Error Saving Config",
"description": "An error occurred while saving the configuration."
},
"validationError": {
"title": "Config Errors Exist",
"description": "Please fix the configuration errors before saving."
},
"saveSuccess": {
"title": "Saving Config",
"description": "The configuration change {{case}} has been saved."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Copied!"
},
"copyToClipboard": {
"label": "Copy to clipboard"
},
"hidePassword": {
"label": "Hide password"
},
"showPassword": {
"label": "Show password"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "Waiting",
"unknown": "Unknown"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Hardware"
},
"metrics": {
"label": "Metrics"
},
"role": {
"label": "Role"
},
"filter": {
"label": "Filter"
},
"advanced": {
"label": "Advanced"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Reset Filters"
},
"nodeName": {
"label": "Node name/number",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)"
},
"batteryLevel": {
"label": "Battery level (%)",
"labelText": "Battery level (%): {{value}}"
},
"batteryVoltage": {
"label": "Battery voltage (V)",
"title": "Voltage"
},
"channelUtilization": {
"label": "Channel Utilization (%)"
},
"hops": {
"direct": "Direct",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "Last heard",
"labelText": "Last heard: {{value}}",
"nowLabel": "Now"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Favorites"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Connected via MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "Language",
"changeLanguage": "Change Language"
},
"theme": {
"dark": "Dark",
"light": "Light",
"system": "Automatic",
"changeTheme": "Change Color Scheme"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Please include the following information in your report:",
"reportSteps": {
"step1": "What you were doing when the error occurred",
"step2": "What you expected to happen",
"step3": "What actually happened",
"step4": "Any other relevant information"
},
"reportLink": "You can report the issue to our <0>GitHub</0>",
"connectionsLink": "Return to the <0>connections</0>",
"detailsSummary": "Error Details",
"errorMessageLabel": "Error message:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
"commitSha": "Commit SHA: {{sha}}"
}
}
@@ -0,0 +1,12 @@
{
"connections": {
"title": "Свързани устройства",
"description": "Управлявайте свързаните си устройства Meshtastic.",
"connectionType_ble": "BLE",
"connectionType_serial": "Серийна",
"connectionType_network": "Мрежа",
"noDevicesTitle": "Няма свързани устройства",
"noDevicesDescription": "Свържете ново устройство, за да започнете.",
"button_newConnection": "Нова връзка"
}
}
@@ -1,12 +0,0 @@
{
"dashboard": {
"title": "Свързани устройства",
"description": "Управлявайте свързаните си устройства Meshtastic.",
"connectionType_ble": "BLE",
"connectionType_serial": "Серийна",
"connectionType_network": "Мрежа",
"noDevicesTitle": "Няма свързани устройства",
"noDevicesDescription": "Свържете ново устройство, за да започнете.",
"button_newConnection": "Нова връзка"
}
}
+226 -227
View File
@@ -1,229 +1,228 @@
{
"navigation": {
"title": "Навигация",
"messages": "Съобщения",
"map": "Карта",
"settings": "Настройки",
"channels": "Канали",
"radioConfig": "Конфигурация на радиото",
"deviceConfig": "Конфигуриране на устройството",
"moduleConfig": "Конфигурация на модула",
"nodes": "Възли"
},
"app": {
"title": "Meshtastic",
"logo": "Лого на Meshtastic"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Отваряне на страничната лента",
"close": "Затваряне на страничната лента"
}
},
"deviceInfo": {
"volts": "{{voltage}} волта",
"firmware": {
"title": "Фърмуер",
"version": "v{{version}}",
"buildDate": "Дата на компилация: {{date}}"
}
}
},
"batteryStatus": {
"charging": "{{level}}% зареждане",
"pluggedIn": "Включен в ел. мрежа",
"title": "Батерия"
},
"search": {
"nodes": "Търсене на възли...",
"channels": "Търсене на канали...",
"commandPalette": "Търсене на команди..."
},
"toast": {
"positionRequestSent": {
"title": "Заявката за позиция е изпратена."
},
"requestingPosition": {
"title": "Запитване за позиция, моля изчакайте..."
},
"sendingTraceroute": {
"title": "Sending Traceroute, please wait..."
},
"tracerouteSent": {
"title": "Traceroute sent."
},
"savedChannel": {
"title": "Запазен канал: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Чатът използва PKI криптиране."
},
"pskEncryption": {
"title": "Чатът използва PSK криптиране."
}
},
"configSaveError": {
"title": "Грешка при запазване на конфигурацията",
"description": "Възникна грешка при запазване на конфигурацията."
},
"validationError": {
"title": "Съществуват грешки в конфигурацията",
"description": "Моля, коригирайте грешките в конфигурацията, преди да я запазите."
},
"saveSuccess": {
"title": "Запазване на конфигурацията",
"description": "Промяната в конфигурацията {{case}} е запазена."
},
"saveAllSuccess": {
"title": "Saved",
"description": "All configuration changes have been saved."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} любими.",
"action": {
"added": "Добавен",
"removed": "Премахнат",
"to": "в",
"from": "от"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} списък с игнорирани",
"action": {
"added": "Добавен",
"removed": "Премахнат",
"to": "в",
"from": "от"
}
}
},
"notifications": {
"copied": {
"label": "Копирано!"
},
"copyToClipboard": {
"label": "Копиране в клипборда"
},
"hidePassword": {
"label": "Скриване на паролата"
},
"showPassword": {
"label": "Показване на паролата"
},
"deliveryStatus": {
"delivered": "Доставено",
"failed": "Неуспешна доставка",
"waiting": "Изчакване",
"unknown": "Неизвестно"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Хардуер"
},
"metrics": {
"label": "Метрики"
},
"role": {
"label": "Роля"
},
"filter": {
"label": "Филтър"
},
"advanced": {
"label": "Разширени"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Нулиране на филтрите"
},
"nodeName": {
"label": "Име/номер на възел",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Използване на ефира (%)",
"short": "Airtime Util. (%)"
},
"batteryLevel": {
"label": "Ниво на батерията (%)",
"labelText": "Ниво на батерията (%): {{value}}"
},
"batteryVoltage": {
"label": "Напрежение на батерията (V)",
"title": "Напрежение"
},
"channelUtilization": {
"label": "Използване на канала (%)",
"short": "Channel Util. (%)"
},
"hops": {
"direct": "Директно",
"label": "Брой хопове",
"text": "Брой хопове: {{value}}"
},
"lastHeard": {
"label": "Последно чут",
"labelText": "Последно чут: {{value}}",
"nowLabel": "Сега"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Любими"
},
"hide": {
"label": "Скриване"
},
"showOnly": {
"label": "Показване само"
},
"viaMqtt": {
"label": "Свързан чрез MQTT"
},
"hopsUnknown": {
"label": "Неизвестен брой хопове"
},
"showUnheard": {
"label": "Никога не е чуван"
},
"language": {
"label": "Език",
"changeLanguage": "Промяна на езика"
},
"theme": {
"dark": "Тъмна",
"light": "Светла",
"system": "Автоматично",
"changeTheme": "Промяна на цветовата схема"
},
"errorPage": {
"title": "Това е малко смущаващо...",
"description1": "Наистина съжаляваме, но възникна грешка в web клиента, която доведе до срив. <br /> Това не би трябвало да се случва и работим усилено, за да го поправим.",
"description2": "Най-добрият начин да предотвратите това да се случи отново с вас или с някой друг е да ни съобщите за проблема.",
"reportInstructions": "Моля, включете следната информация в доклада си:",
"reportSteps": {
"step1": "Какво правехте, когато възникна грешката",
"step2": "Какво очаквахте да се случи",
"step3": "Какво всъщност се случи",
"step4": "Всяка друга подходяща информация"
},
"reportLink": "Можете да съобщите за проблема в нашия <0>GitHub</0>",
"dashboardLink": "Връщане към <0>таблото</0>",
"detailsSummary": "Подробности за грешката",
"errorMessageLabel": "Съобщение за грешка:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Задвижвано от <0>▲ Vercel</0> | Meshtastic® е регистрирана търговска марка на Meshtastic LLC. | <1>Правна информация</1>",
"commitSha": "Commit SHA: {{sha}}"
}
"navigation": {
"title": "Навигация",
"messages": "Съобщения",
"map": "Карта",
"config": "Конфигурация",
"radioConfig": "Конфигурация на радиото",
"moduleConfig": "Конфигурация на модула",
"channels": "Канали",
"nodes": "Възли"
},
"app": {
"title": "Meshtastic",
"logo": "Лого на Meshtastic"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Отваряне на страничната лента",
"close": "Затваряне на страничната лента"
}
},
"deviceInfo": {
"volts": "{{voltage}} волта",
"firmware": {
"title": "Фърмуер",
"version": "v{{version}}",
"buildDate": "Дата на компилация: {{date}}"
},
"deviceName": {
"title": "Име на устройството",
"changeName": "Промяна на името на устройството",
"placeholder": "Въвеждане на име на устройството"
},
"editDeviceName": "Редактиране на името на устройство"
}
},
"batteryStatus": {
"charging": "{{level}}% зареждане",
"pluggedIn": "Включен в ел. мрежа",
"title": "Батерия"
},
"search": {
"nodes": "Търсене на възли...",
"channels": "Търсене на канали...",
"commandPalette": "Търсене на команди..."
},
"toast": {
"positionRequestSent": {
"title": "Заявката за позиция е изпратена."
},
"requestingPosition": {
"title": "Запитване за позиция, моля изчакайте..."
},
"sendingTraceroute": {
"title": "Sending Traceroute, please wait..."
},
"tracerouteSent": {
"title": "Traceroute sent."
},
"savedChannel": {
"title": "Запазен канал: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Чатът използва PKI криптиране."
},
"pskEncryption": {
"title": "Чатът използва PSK криптиране."
}
},
"configSaveError": {
"title": "Грешка при запазване на конфигурацията",
"description": "Възникна грешка при запазване на конфигурацията."
},
"validationError": {
"title": "Съществуват грешки в конфигурацията",
"description": "Моля, коригирайте грешките в конфигурацията, преди да я запазите."
},
"saveSuccess": {
"title": "Запазване на конфигурацията",
"description": "Промяната в конфигурацията {{case}} е запазена."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} любими.",
"action": {
"added": "Добавен",
"removed": "Премахнат",
"to": "в",
"from": "от"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} списък с игнорирани",
"action": {
"added": "Добавен",
"removed": "Премахнат",
"to": "в",
"from": "от"
}
}
},
"notifications": {
"copied": {
"label": "Копирано!"
},
"copyToClipboard": {
"label": "Копиране в клипборда"
},
"hidePassword": {
"label": "Скриване на паролата"
},
"showPassword": {
"label": "Показване на паролата"
},
"deliveryStatus": {
"delivered": "Доставено",
"failed": "Неуспешна доставка",
"waiting": "Изчакване",
"unknown": "Неизвестно"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Хардуер"
},
"metrics": {
"label": "Метрики"
},
"role": {
"label": "Роля"
},
"filter": {
"label": "Филтър"
},
"advanced": {
"label": "Разширени"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Нулиране на филтрите"
},
"nodeName": {
"label": "Име/номер на възел",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Използване на ефира (%)"
},
"batteryLevel": {
"label": "Ниво на батерията (%)",
"labelText": "Ниво на батерията (%): {{value}}"
},
"batteryVoltage": {
"label": "Напрежение на батерията (V)",
"title": "Напрежение"
},
"channelUtilization": {
"label": "Използване на канала (%)"
},
"hops": {
"direct": "Директно",
"label": "Брой хопове",
"text": "Брой хопове: {{value}}"
},
"lastHeard": {
"label": "Последно чут",
"labelText": "Последно чут: {{value}}",
"nowLabel": "Сега"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Любими"
},
"hide": {
"label": "Скриване"
},
"showOnly": {
"label": "Показване само"
},
"viaMqtt": {
"label": "Свързан чрез MQTT"
},
"hopsUnknown": {
"label": "Неизвестен брой хопове"
},
"showUnheard": {
"label": "Никога не е чуван"
},
"language": {
"label": "Език",
"changeLanguage": "Промяна на езика"
},
"theme": {
"dark": "Тъмна",
"light": "Светла",
"system": "Автоматично",
"changeTheme": "Промяна на цветовата схема"
},
"errorPage": {
"title": "Това е малко смущаващо...",
"description1": "Наистина съжаляваме, но възникна грешка в web клиента, която доведе до срив. <br /> Това не би трябвало да се случва и работим усилено, за да го поправим.",
"description2": "Най-добрият начин да предотвратите това да се случи отново с вас или с някой друг е да ни съобщите за проблема.",
"reportInstructions": "Моля, включете следната информация в доклада си:",
"reportSteps": {
"step1": "Какво правехте, когато възникна грешката",
"step2": "Какво очаквахте да се случи",
"step3": "Какво всъщност се случи",
"step4": "Всяка друга подходяща информация"
},
"reportLink": "Можете да съобщите за проблема в нашия <0>GitHub</0>",
"connectionsLink": "Връщане към <0>таблото</0>",
"detailsSummary": "Подробности за грешката",
"errorMessageLabel": "Съобщение за грешка:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Задвижвано от <0>▲ Vercel</0> | Meshtastic® е регистрирана търговска марка на Meshtastic LLC. | <1>Правна информация</1>",
"commitSha": "Commit SHA: {{sha}}"
}
}
+226 -227
View File
@@ -1,229 +1,228 @@
{
"navigation": {
"title": "Navigation",
"messages": "Zprávy",
"map": "Mapa",
"settings": "Nastavení",
"channels": "Kanály",
"radioConfig": "Radio Config",
"deviceConfig": "Nastavení zařízení",
"moduleConfig": "Module Config",
"nodes": "Uzly"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Open sidebar",
"close": "Close sidebar"
}
},
"deviceInfo": {
"volts": "{{voltage}} volts",
"firmware": {
"title": "Firmware",
"version": "v{{version}}",
"buildDate": "Build date: {{date}}"
}
}
},
"batteryStatus": {
"charging": "{{level}}% charging",
"pluggedIn": "Plugged in",
"title": "Baterie"
},
"search": {
"nodes": "Search nodes...",
"channels": "Search channels...",
"commandPalette": "Search commands..."
},
"toast": {
"positionRequestSent": {
"title": "Position request sent."
},
"requestingPosition": {
"title": "Requesting position, please wait..."
},
"sendingTraceroute": {
"title": "Sending Traceroute, please wait..."
},
"tracerouteSent": {
"title": "Traceroute sent."
},
"savedChannel": {
"title": "Saved Channel: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Chat is using PKI encryption."
},
"pskEncryption": {
"title": "Chat is using PSK encryption."
}
},
"configSaveError": {
"title": "Error Saving Config",
"description": "An error occurred while saving the configuration."
},
"validationError": {
"title": "Config Errors Exist",
"description": "Please fix the configuration errors before saving."
},
"saveSuccess": {
"title": "Saving Config",
"description": "The configuration change {{case}} has been saved."
},
"saveAllSuccess": {
"title": "Saved",
"description": "All configuration changes have been saved."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Copied!"
},
"copyToClipboard": {
"label": "Copy to clipboard"
},
"hidePassword": {
"label": "Skrýt heslo"
},
"showPassword": {
"label": "Zobrazit heslo"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "Waiting",
"unknown": "Unknown"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Hardware"
},
"metrics": {
"label": "Metriky"
},
"role": {
"label": "Role"
},
"filter": {
"label": "Filtr"
},
"advanced": {
"label": "Advanced"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Reset Filters"
},
"nodeName": {
"label": "Node name/number",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)",
"short": "Airtime Util. (%)"
},
"batteryLevel": {
"label": "Battery level (%)",
"labelText": "Battery level (%): {{value}}"
},
"batteryVoltage": {
"label": "Battery voltage (V)",
"title": "Napětí"
},
"channelUtilization": {
"label": "Channel Utilization (%)",
"short": "Channel Util. (%)"
},
"hops": {
"direct": "Přímý",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "Naposledy slyšen",
"labelText": "Last heard: {{value}}",
"nowLabel": "Now"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Favorites"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Connected via MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "Jazyk",
"changeLanguage": "Change Language"
},
"theme": {
"dark": "Tmavý",
"light": "Světlý",
"system": "Automatic",
"changeTheme": "Change Color Scheme"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Please include the following information in your report:",
"reportSteps": {
"step1": "What you were doing when the error occurred",
"step2": "What you expected to happen",
"step3": "What actually happened",
"step4": "Any other relevant information"
},
"reportLink": "You can report the issue to our <0>GitHub</0>",
"dashboardLink": "Return to the <0>dashboard</0>",
"detailsSummary": "Error Details",
"errorMessageLabel": "Error message:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
"commitSha": "Commit SHA: {{sha}}"
}
"navigation": {
"title": "Navigation",
"messages": "Zprávy",
"map": "Mapa",
"config": "Config",
"radioConfig": "Radio Config",
"moduleConfig": "Module Config",
"channels": "Kanály",
"nodes": "Uzly"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Open sidebar",
"close": "Close sidebar"
}
},
"deviceInfo": {
"volts": "{{voltage}} volts",
"firmware": {
"title": "Firmware",
"version": "v{{version}}",
"buildDate": "Build date: {{date}}"
},
"deviceName": {
"title": "Device Name",
"changeName": "Change Device Name",
"placeholder": "Enter device name"
},
"editDeviceName": "Edit device name"
}
},
"batteryStatus": {
"charging": "{{level}}% charging",
"pluggedIn": "Plugged in",
"title": "Baterie"
},
"search": {
"nodes": "Search nodes...",
"channels": "Search channels...",
"commandPalette": "Search commands..."
},
"toast": {
"positionRequestSent": {
"title": "Position request sent."
},
"requestingPosition": {
"title": "Requesting position, please wait..."
},
"sendingTraceroute": {
"title": "Sending Traceroute, please wait..."
},
"tracerouteSent": {
"title": "Traceroute sent."
},
"savedChannel": {
"title": "Saved Channel: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Chat is using PKI encryption."
},
"pskEncryption": {
"title": "Chat is using PSK encryption."
}
},
"configSaveError": {
"title": "Error Saving Config",
"description": "An error occurred while saving the configuration."
},
"validationError": {
"title": "Config Errors Exist",
"description": "Please fix the configuration errors before saving."
},
"saveSuccess": {
"title": "Saving Config",
"description": "The configuration change {{case}} has been saved."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Copied!"
},
"copyToClipboard": {
"label": "Copy to clipboard"
},
"hidePassword": {
"label": "Skrýt heslo"
},
"showPassword": {
"label": "Zobrazit heslo"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "Waiting",
"unknown": "Unknown"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Hardware"
},
"metrics": {
"label": "Metriky"
},
"role": {
"label": "Role"
},
"filter": {
"label": "Filtr"
},
"advanced": {
"label": "Advanced"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Reset Filters"
},
"nodeName": {
"label": "Node name/number",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)"
},
"batteryLevel": {
"label": "Battery level (%)",
"labelText": "Battery level (%): {{value}}"
},
"batteryVoltage": {
"label": "Battery voltage (V)",
"title": "Napětí"
},
"channelUtilization": {
"label": "Channel Utilization (%)"
},
"hops": {
"direct": "Přímý",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "Naposledy slyšen",
"labelText": "Last heard: {{value}}",
"nowLabel": "Now"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Favorites"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Connected via MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "Jazyk",
"changeLanguage": "Change Language"
},
"theme": {
"dark": "Tmavý",
"light": "Světlý",
"system": "Automatic",
"changeTheme": "Change Color Scheme"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Please include the following information in your report:",
"reportSteps": {
"step1": "What you were doing when the error occurred",
"step2": "What you expected to happen",
"step3": "What actually happened",
"step4": "Any other relevant information"
},
"reportLink": "You can report the issue to our <0>GitHub</0>",
"connectionsLink": "Return to the <0>connections</0>",
"detailsSummary": "Error Details",
"errorMessageLabel": "Error message:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
"commitSha": "Commit SHA: {{sha}}"
}
}
@@ -1,14 +1,18 @@
{
"button": {
"apply": "Apply",
"addConnection": "Add Connection",
"saveConnection": "Save connection",
"backupKey": "Backup Key",
"cancel": "Cancel",
"connect": "Connect",
"clearMessages": "Clear Messages",
"close": "Close",
"confirm": "Confirm",
"delete": "Delete",
"dismiss": "Dismiss",
"download": "Download",
"disconnect": "Disconnect",
"export": "Export",
"generate": "Generate",
"regenerate": "Regenerate",
@@ -21,7 +25,10 @@
"requestNewKeys": "Request New Keys",
"requestPosition": "Request Position",
"reset": "Reset",
"retry": "Retry",
"save": "Save",
"setDefault": "Set as default",
"unsetDefault": "Unset default",
"scanQr": "Scan QR Code",
"traceRoute": "Trace Route",
"submit": "Submit"
@@ -0,0 +1,34 @@
{
"page": {
"title": "Connect to a Meshtastic device",
"description": "Add a device connection via HTTP, Bluetooth, or Serial. Your saved connections will be saved in your browser."
},
"connectionType_ble": "BLE",
"connectionType_serial": "Serial",
"connectionType_network": "Network",
"deleteConnection": "Delete connection",
"areYouSure": "This will remove {{name}}. You canot undo this action.",
"moreActions": "More actions",
"noConnections": {
"title": "No connections yet.",
"description": "Create your first connection. It will connect immediately and be saved for later."
},
"lastConnectedAt": "Last connected: {{date}}",
"neverConnected": "Never connected",
"toasts": {
"connected": "Connected",
"nowConnected": "{{name}} is now connected",
"nowDisconnected": "{{name}} are now disconnecte",
"disconnected": "Disconnected",
"failed": "Failed to connect",
"checkConnetion": "Check your device or settings and try again",
"defaultSet": "Default set",
"defaultConnection": "Default connection is now {{nameisconnected}}",
"deleted": "Deleted",
"deletedByName": "{{name}} was removed",
"pickConnectionAgain": "Could not connect. You may need to reselect the device/port.",
"added": "Connection added",
"savedByName": "{{name}} saved.",
"savedCantConnect": "The connection was saved but could not connect."
}
}
@@ -1,12 +0,0 @@
{
"dashboard": {
"title": "Connected Devices",
"description": "Manage your connected Meshtastic devices.",
"connectionType_ble": "BLE",
"connectionType_serial": "Serial",
"connectionType_network": "Network",
"noDevicesTitle": "No devices connected",
"noDevicesDescription": "Connect a new device to get started.",
"button_newConnection": "New Connection"
}
}
+66 -50
View File
@@ -3,18 +3,6 @@
"description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?",
"title": "Clear All Messages"
},
"deviceName": {
"description": "The Device will restart once the config is saved.",
"longName": "Long Name",
"shortName": "Short Name",
"title": "Change Device Name",
"validation": {
"longNameMax": "Long name must not be more than 40 characters",
"shortNameMax": "Short name must not be more than 4 characters",
"longNameMin": "Long name must have at least 1 character",
"shortNameMin": "Short name must have at least 1 character"
}
},
"import": {
"description": "Import a Channel Set from a Meshtastic URL. <br />Valid Meshtasic URLs start with \"<italic>https://meshtastic.org/e/...</italic>\"",
"error": {
@@ -41,49 +29,77 @@
"description": "Are you sure you want to regenerate the pre-shared key?",
"regenerate": "Regenerate"
},
"newDeviceDialog": {
"title": "Connect New Device",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Serial",
"useHttps": "Use HTTPS",
"connecting": "Connecting...",
"connect": "Connect",
"connectionFailedAlert": {
"title": "Connection Failed",
"descriptionPrefix": "Could not connect to the device. ",
"httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ",
"openLinkPrefix": "Please open ",
"openLinkSuffix": " in a new tab",
"acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again",
"learnMoreLink": "Learn more"
},
"httpConnection": {
"label": "IP Address/Hostname",
"placeholder": "000.000.000.000 / meshtastic.local"
},
"serialConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device",
"connectionFailed": "Connection failed",
"deviceDisconnected": "Device disconnected",
"unknownDevice": "Unknown Device",
"errorLoadingDevices": "Error loading devices",
"unknownErrorLoadingDevices": "Unknown error loading devices"
},
"addConnection": {
"title": "Add connection",
"description": "Choose a connection type and fill in the details",
"validation": {
"requiresWebBluetooth": "This connection type requires <0>Web Bluetooth</0>. Please use a supported browser, like Chrome or Edge.",
"requiresWebSerial": "This connection type requires <0>Web Serial</0>. Please use a supported browser, like Chrome or Edge.",
"requiresSecureContext": "This application requires a <0>secure context</0>. Please connect using HTTPS or localhost.",
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
},
"bluetoothConnection": {
"namePlaceholder": "My Bluetooth Node",
"supported": {
"title": "Web Bluetooth supported"
},
"notSupported": {
"title": "Web Bluetooth not supported",
"description": "Your browser or device does not support Web Bluetooth"
},
"short": "BT: {{deviceName}}",
"long": "Bluetooth Device",
"device": "Device",
"selectDevice": "Select device",
"selected": "Bluetooth device selected",
"notSelected": "No device selected",
"helperText": "Uses the Meshtastic Bluetooth service for discovery."
},
"serialConnection": {
"namePlaceholder": "My Serial Node",
"helperText": "Selecting a port grants permission so the app can open it to connect.",
"supported": {
"title": "Web Serial supported"
},
"notSupported": {
"title": "Web Serial not supported",
"description": "Your browser or device does not support Web Serial"
},
"portSelected": {
"title": "Serial port selected",
"description": "Port permissions granted."
},
"port": "Port",
"selectPort": "Select port",
"deviceName": "USB {{vendorId}}:{{productId}}",
"notSelected": "No port selected"
},
"httpConnection": {
"namePlaceholder": "My HTTP Node",
"inputPlaceholder": "192.168.1.10 or meshtastic.local",
"heading": "URL or IP",
"useHttps": "Use HTTTPS",
"invalidUrl": {
"title": "Invalid URL",
"description": "Please enter a valid HTTP or HTTPS URL."
},
"connectionTest": {
"description": "Test the connetion before saving to verify the device is reachable.",
"button": {
"loading": "Testing...",
"label": "Test connection"
},
"reachable": "Reachable",
"notReachable": "Not reachable",
"success": {
"title": "Connection test successful",
"description": "The device appears to be reachable."
},
"failure": {
"title": "Connection test failed",
"description": "Could not reach the device. Check the URL and try again."
}
}
}
},
"nodeDetails": {
+2 -1
View File
@@ -8,6 +8,7 @@
"radioConfig": "Radio Config",
"deviceConfig": "Device Config",
"moduleConfig": "Module Config",
"manageConnections": "Manage Connections",
"nodes": "Nodes"
},
"app": {
@@ -202,7 +203,7 @@
"step4": "Any other relevant information"
},
"reportLink": "You can report the issue to our <0>GitHub</0>",
"dashboardLink": "Return to the <0>dashboard</0>",
"connectionsLink": "Return to the <0>connections</0>",
"detailsSummary": "Error Details",
"errorMessageLabel": "Error message:",
"stackTraceLabel": "Stack trace:",
+226 -227
View File
@@ -1,229 +1,228 @@
{
"navigation": {
"title": "Navigation",
"messages": "消息",
"map": "地图",
"settings": "设置",
"channels": "频道",
"radioConfig": "Radio Config",
"deviceConfig": "设备配置",
"moduleConfig": "Module Config",
"nodes": "节点"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Open sidebar",
"close": "Close sidebar"
}
},
"deviceInfo": {
"volts": "{{voltage}} volts",
"firmware": {
"title": "固件",
"version": "v{{version}}",
"buildDate": "Build date: {{date}}"
}
}
},
"batteryStatus": {
"charging": "{{level}}% charging",
"pluggedIn": "Plugged in",
"title": "电池"
},
"search": {
"nodes": "Search nodes...",
"channels": "Search channels...",
"commandPalette": "Search commands..."
},
"toast": {
"positionRequestSent": {
"title": "Position request sent."
},
"requestingPosition": {
"title": "Requesting position, please wait..."
},
"sendingTraceroute": {
"title": "Sending Traceroute, please wait..."
},
"tracerouteSent": {
"title": "Traceroute sent."
},
"savedChannel": {
"title": "Saved Channel: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Chat is using PKI encryption."
},
"pskEncryption": {
"title": "Chat is using PSK encryption."
}
},
"configSaveError": {
"title": "Error Saving Config",
"description": "An error occurred while saving the configuration."
},
"validationError": {
"title": "Config Errors Exist",
"description": "Please fix the configuration errors before saving."
},
"saveSuccess": {
"title": "Saving Config",
"description": "The configuration change {{case}} has been saved."
},
"saveAllSuccess": {
"title": "Saved",
"description": "All configuration changes have been saved."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Copied!"
},
"copyToClipboard": {
"label": "Copy to clipboard"
},
"hidePassword": {
"label": "隐藏密码"
},
"showPassword": {
"label": "显示密码"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "等待中...",
"unknown": "未知"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "硬件"
},
"metrics": {
"label": "Metrics"
},
"role": {
"label": "角色"
},
"filter": {
"label": "筛选器csvfganw"
},
"advanced": {
"label": "高级"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Reset Filters"
},
"nodeName": {
"label": "Node name/number",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)",
"short": "Airtime Util. (%)"
},
"batteryLevel": {
"label": "Battery level (%)",
"labelText": "Battery level (%): {{value}}"
},
"batteryVoltage": {
"label": "Battery voltage (V)",
"title": "电压"
},
"channelUtilization": {
"label": "Channel Utilization (%)",
"short": "Channel Util. (%)"
},
"hops": {
"direct": "直频",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "最后听到",
"labelText": "Last heard: {{value}}",
"nowLabel": "Now"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Favorites"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Connected via MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "语言",
"changeLanguage": "Change Language"
},
"theme": {
"dark": "深色",
"light": "浅色",
"system": "Automatic",
"changeTheme": "Change Color Scheme"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Please include the following information in your report:",
"reportSteps": {
"step1": "What you were doing when the error occurred",
"step2": "What you expected to happen",
"step3": "What actually happened",
"step4": "Any other relevant information"
},
"reportLink": "You can report the issue to our <0>GitHub</0>",
"dashboardLink": "Return to the <0>dashboard</0>",
"detailsSummary": "Error Details",
"errorMessageLabel": "Error message:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
"commitSha": "Commit SHA: {{sha}}"
}
"navigation": {
"title": "Navigation",
"messages": "消息",
"map": "地图",
"config": "配置",
"radioConfig": "Radio Config",
"moduleConfig": "Module Config",
"channels": "频道",
"nodes": "节点"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Open sidebar",
"close": "Close sidebar"
}
},
"deviceInfo": {
"volts": "{{voltage}} volts",
"firmware": {
"title": "固件",
"version": "v{{version}}",
"buildDate": "Build date: {{date}}"
},
"deviceName": {
"title": "Device Name",
"changeName": "Change Device Name",
"placeholder": "Enter device name"
},
"editDeviceName": "Edit device name"
}
},
"batteryStatus": {
"charging": "{{level}}% charging",
"pluggedIn": "Plugged in",
"title": "电池"
},
"search": {
"nodes": "Search nodes...",
"channels": "Search channels...",
"commandPalette": "Search commands..."
},
"toast": {
"positionRequestSent": {
"title": "Position request sent."
},
"requestingPosition": {
"title": "Requesting position, please wait..."
},
"sendingTraceroute": {
"title": "Sending Traceroute, please wait..."
},
"tracerouteSent": {
"title": "Traceroute sent."
},
"savedChannel": {
"title": "Saved Channel: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Chat is using PKI encryption."
},
"pskEncryption": {
"title": "Chat is using PSK encryption."
}
},
"configSaveError": {
"title": "Error Saving Config",
"description": "An error occurred while saving the configuration."
},
"validationError": {
"title": "Config Errors Exist",
"description": "Please fix the configuration errors before saving."
},
"saveSuccess": {
"title": "Saving Config",
"description": "The configuration change {{case}} has been saved."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Copied!"
},
"copyToClipboard": {
"label": "Copy to clipboard"
},
"hidePassword": {
"label": "隐藏密码"
},
"showPassword": {
"label": "显示密码"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "等待中...",
"unknown": "未知"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "硬件"
},
"metrics": {
"label": "Metrics"
},
"role": {
"label": "角色"
},
"filter": {
"label": "筛选器csvfganw"
},
"advanced": {
"label": "高级"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Reset Filters"
},
"nodeName": {
"label": "Node name/number",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)"
},
"batteryLevel": {
"label": "Battery level (%)",
"labelText": "Battery level (%): {{value}}"
},
"batteryVoltage": {
"label": "Battery voltage (V)",
"title": "电压"
},
"channelUtilization": {
"label": "Channel Utilization (%)"
},
"hops": {
"direct": "直频",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "最后听到",
"labelText": "Last heard: {{value}}",
"nowLabel": "Now"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Favorites"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Connected via MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "语言",
"changeLanguage": "Change Language"
},
"theme": {
"dark": "深色",
"light": "浅色",
"system": "Automatic",
"changeTheme": "Change Color Scheme"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Please include the following information in your report:",
"reportSteps": {
"step1": "What you were doing when the error occurred",
"step2": "What you expected to happen",
"step3": "What actually happened",
"step4": "Any other relevant information"
},
"reportLink": "You can report the issue to our <0>GitHub</0>",
"connectionsLink": "Return to the <0>connections</0>",
"detailsSummary": "Error Details",
"errorMessageLabel": "Error message:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
"commitSha": "Commit SHA: {{sha}}"
}
}