diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 417f03d..215cfd3 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -2301,5 +2301,246 @@ }, "requestingVoice": "Requesting voice", "@requestingVoice": { + }, + "device": "device", + "@device": { + "description": "Generic device label" + }, + "change": "Change", + "@change": { + "description": "Generic change action" + }, + "wizardOverviewDescription": "This app combines MeshCore messaging, SAR field updates, mapping, and device tools in one place.", + "@wizardOverviewDescription": { + "description": "Updated onboarding overview description" + }, + "wizardOverviewFeature1": "Send direct, room, and channel messages from the main Messages tab.", + "@wizardOverviewFeature1": { + "description": "Updated onboarding overview feature 1" + }, + "wizardOverviewFeature2": "Share SAR markers, map drawings, voice clips, and images over the mesh.", + "@wizardOverviewFeature2": { + "description": "Updated onboarding overview feature 2" + }, + "wizardOverviewFeature3": "Connect over BLE or TCP, then manage the companion radio from inside the app.", + "@wizardOverviewFeature3": { + "description": "Updated onboarding overview feature 3" + }, + "wizardMessagingTitle": "Messaging and Field Reports", + "@wizardMessagingTitle": { + "description": "Updated onboarding messaging page title" + }, + "wizardMessagingDescription": "Messages are more than plain text here. The app already supports several operational payloads and transfer workflows.", + "@wizardMessagingDescription": { + "description": "Updated onboarding messaging page description" + }, + "wizardMessagingFeature1": "Send direct messages, room posts, and channel traffic from one composer.", + "@wizardMessagingFeature1": { + "description": "Updated onboarding messaging feature 1" + }, + "wizardMessagingFeature2": "Create SAR updates and reusable SAR templates for common field reports.", + "@wizardMessagingFeature2": { + "description": "Updated onboarding messaging feature 2" + }, + "wizardMessagingFeature3": "Transfer voice sessions and images, with progress and airtime estimates in the UI.", + "@wizardMessagingFeature3": { + "description": "Updated onboarding messaging feature 3" + }, + "wizardConnectDeviceTitle": "Connect device", + "@wizardConnectDeviceTitle": { + "description": "Onboarding connect device page title" + }, + "wizardConnectDeviceDescription": "Connect your MeshCore radio, choose a name, and apply a radio preset before continuing.", + "@wizardConnectDeviceDescription": { + "description": "Onboarding connect device page description" + }, + "wizardSetupBadge": "Setup", + "@wizardSetupBadge": { + "description": "Onboarding setup badge label" + }, + "wizardOverviewBadge": "Overview", + "@wizardOverviewBadge": { + "description": "Onboarding overview badge label" + }, + "wizardConnectedToDevice": "Connected to {deviceName}", + "@wizardConnectedToDevice": { + "description": "Onboarding connection status when connected", + "placeholders": { + "deviceName": { + "type": "String" + } + } + }, + "wizardNoDeviceConnected": "No device connected yet", + "@wizardNoDeviceConnected": { + "description": "Onboarding connection status when disconnected" + }, + "wizardSkipForNow": "Skip for now", + "@wizardSkipForNow": { + "description": "Onboarding skip current setup step action" + }, + "wizardDeviceNameLabel": "Device name", + "@wizardDeviceNameLabel": { + "description": "Onboarding device name field label" + }, + "wizardDeviceNameHelp": "This name is advertised to other MeshCore users.", + "@wizardDeviceNameHelp": { + "description": "Onboarding device name field helper text" + }, + "wizardConfigRegionLabel": "Config region", + "@wizardConfigRegionLabel": { + "description": "Onboarding config region field label" + }, + "wizardConfigRegionHelp": "Uses the full official MeshCore preset list. Default is EU/UK (Narrow).", + "@wizardConfigRegionHelp": { + "description": "Onboarding config region helper text" + }, + "wizardPresetNote1": "Make sure the selected preset matches your local radio regulations.", + "@wizardPresetNote1": { + "description": "Onboarding preset note 1" + }, + "wizardPresetNote2": "The list matches the official MeshCore config tool preset feed.", + "@wizardPresetNote2": { + "description": "Onboarding preset note 2" + }, + "wizardPresetNote3": "EU/UK (Narrow) stays selected by default for onboarding.", + "@wizardPresetNote3": { + "description": "Onboarding preset note 3" + }, + "wizardSaving": "Saving...", + "@wizardSaving": { + "description": "Onboarding saving button label" + }, + "wizardSaveAndContinue": "Save and continue", + "@wizardSaveAndContinue": { + "description": "Onboarding save and continue button label" + }, + "wizardEnterDeviceName": "Enter a device name before continuing.", + "@wizardEnterDeviceName": { + "description": "Onboarding validation when device name is missing" + }, + "wizardDeviceSetupSaved": "Saved {deviceName} with {presetName}.", + "@wizardDeviceSetupSaved": { + "description": "Onboarding success message after saving device setup", + "placeholders": { + "deviceName": { + "type": "String" + }, + "presetName": { + "type": "String" + } + } + }, + "wizardNetworkTitle": "Contacts, Rooms, and Repeaters", + "@wizardNetworkTitle": { + "description": "Updated onboarding network page title" + }, + "wizardNetworkDescription": "The Contacts tab organizes the network you discover and the routes you learn over time.", + "@wizardNetworkDescription": { + "description": "Updated onboarding network page description" + }, + "wizardNetworkFeature1": "Review team members, repeaters, rooms, channels, and pending adverts in one list.", + "@wizardNetworkFeature1": { + "description": "Updated onboarding network feature 1" + }, + "wizardNetworkFeature2": "Use smart ping, room login, learned paths, and route reset tools when connectivity gets messy.", + "@wizardNetworkFeature2": { + "description": "Updated onboarding network feature 2" + }, + "wizardNetworkFeature3": "Create channels and manage network destinations without leaving the app.", + "@wizardNetworkFeature3": { + "description": "Updated onboarding network feature 3" + }, + "wizardMapOpsTitle": "Map, Trails, and Shared Geometry", + "@wizardMapOpsTitle": { + "description": "Updated onboarding map page title" + }, + "wizardMapOpsDescription": "The app map is tied directly into messaging, tracking, and SAR overlays instead of being a separate viewer.", + "@wizardMapOpsDescription": { + "description": "Updated onboarding map page description" + }, + "wizardMapOpsFeature1": "Track your own position, teammate locations, and movement trails on the map.", + "@wizardMapOpsFeature1": { + "description": "Updated onboarding map feature 1" + }, + "wizardMapOpsFeature2": "Open drawings from messages, preview them inline, and remove them from the map when needed.", + "@wizardMapOpsFeature2": { + "description": "Updated onboarding map feature 2" + }, + "wizardMapOpsFeature3": "Use repeater map views and shared overlays to understand network reach in the field.", + "@wizardMapOpsFeature3": { + "description": "Updated onboarding map feature 3" + }, + "wizardToolsTitle": "Tools Beyond Messaging", + "@wizardToolsTitle": { + "description": "Updated onboarding tools page title" + }, + "wizardToolsDescription": "There is more here than the four main tabs. The app also includes configuration, diagnostics, and optional sensor workflows.", + "@wizardToolsDescription": { + "description": "Updated onboarding tools page description" + }, + "wizardToolsFeature1": "Open device config to change radio settings, telemetry, TX power, and companion details.", + "@wizardToolsFeature1": { + "description": "Updated onboarding tools feature 1" + }, + "wizardToolsFeature2": "Enable the Sensors tab when you want watched sensor dashboards and quick refresh actions.", + "@wizardToolsFeature2": { + "description": "Updated onboarding tools feature 2" + }, + "wizardToolsFeature3": "Use packet logs, spectrum scan, and developer diagnostics when troubleshooting the mesh.", + "@wizardToolsFeature3": { + "description": "Updated onboarding tools feature 3" + }, + "contactInSensors": "In Sensors", + "@contactInSensors": { + "description": "Contact actions label when already in sensors" + }, + "contactAddToSensors": "Add to Sensors", + "@contactAddToSensors": { + "description": "Contact actions label to add to sensors" + }, + "contactSetPath": "Set path", + "@contactSetPath": { + "description": "Contact actions label to set route path" + }, + "contactAddedToSensors": "{contactName} added to Sensors", + "@contactAddedToSensors": { + "description": "Snackbar after adding contact to sensors", + "placeholders": { + "contactName": { + "type": "String" + } + } + }, + "contactFailedToClearRoute": "Failed to clear route: {error}", + "@contactFailedToClearRoute": { + "description": "Error when clearing a contact route fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "contactRouteCleared": "Route cleared", + "@contactRouteCleared": { + "description": "Snackbar after route is cleared" + }, + "contactRouteSet": "Route set: {route}", + "@contactRouteSet": { + "description": "Snackbar after route is set", + "placeholders": { + "route": { + "type": "String" + } + } + }, + "contactFailedToSetRoute": "Failed to set route: {error}", + "@contactFailedToSetRoute": { + "description": "Error when setting a contact route fails", + "placeholders": { + "error": { + "type": "String" + } + } } } diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index 38d0fe1..415656d 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -3203,6 +3203,318 @@ abstract class AppLocalizations { /// In en, this message translates to: /// **'Requesting voice'** String get requestingVoice; + + /// Generic device label + /// + /// In en, this message translates to: + /// **'device'** + String get device; + + /// Generic change action + /// + /// In en, this message translates to: + /// **'Change'** + String get change; + + /// Updated onboarding overview description + /// + /// In en, this message translates to: + /// **'This app combines MeshCore messaging, SAR field updates, mapping, and device tools in one place.'** + String get wizardOverviewDescription; + + /// Updated onboarding overview feature 1 + /// + /// In en, this message translates to: + /// **'Send direct, room, and channel messages from the main Messages tab.'** + String get wizardOverviewFeature1; + + /// Updated onboarding overview feature 2 + /// + /// In en, this message translates to: + /// **'Share SAR markers, map drawings, voice clips, and images over the mesh.'** + String get wizardOverviewFeature2; + + /// Updated onboarding overview feature 3 + /// + /// In en, this message translates to: + /// **'Connect over BLE or TCP, then manage the companion radio from inside the app.'** + String get wizardOverviewFeature3; + + /// Updated onboarding messaging page title + /// + /// In en, this message translates to: + /// **'Messaging and Field Reports'** + String get wizardMessagingTitle; + + /// Updated onboarding messaging page description + /// + /// In en, this message translates to: + /// **'Messages are more than plain text here. The app already supports several operational payloads and transfer workflows.'** + String get wizardMessagingDescription; + + /// Updated onboarding messaging feature 1 + /// + /// In en, this message translates to: + /// **'Send direct messages, room posts, and channel traffic from one composer.'** + String get wizardMessagingFeature1; + + /// Updated onboarding messaging feature 2 + /// + /// In en, this message translates to: + /// **'Create SAR updates and reusable SAR templates for common field reports.'** + String get wizardMessagingFeature2; + + /// Updated onboarding messaging feature 3 + /// + /// In en, this message translates to: + /// **'Transfer voice sessions and images, with progress and airtime estimates in the UI.'** + String get wizardMessagingFeature3; + + /// Onboarding connect device page title + /// + /// In en, this message translates to: + /// **'Connect device'** + String get wizardConnectDeviceTitle; + + /// Onboarding connect device page description + /// + /// In en, this message translates to: + /// **'Connect your MeshCore radio, choose a name, and apply a radio preset before continuing.'** + String get wizardConnectDeviceDescription; + + /// Onboarding setup badge label + /// + /// In en, this message translates to: + /// **'Setup'** + String get wizardSetupBadge; + + /// Onboarding overview badge label + /// + /// In en, this message translates to: + /// **'Overview'** + String get wizardOverviewBadge; + + /// Onboarding connection status when connected + /// + /// In en, this message translates to: + /// **'Connected to {deviceName}'** + String wizardConnectedToDevice(String deviceName); + + /// Onboarding connection status when disconnected + /// + /// In en, this message translates to: + /// **'No device connected yet'** + String get wizardNoDeviceConnected; + + /// Onboarding skip current setup step action + /// + /// In en, this message translates to: + /// **'Skip for now'** + String get wizardSkipForNow; + + /// Onboarding device name field label + /// + /// In en, this message translates to: + /// **'Device name'** + String get wizardDeviceNameLabel; + + /// Onboarding device name field helper text + /// + /// In en, this message translates to: + /// **'This name is advertised to other MeshCore users.'** + String get wizardDeviceNameHelp; + + /// Onboarding config region field label + /// + /// In en, this message translates to: + /// **'Config region'** + String get wizardConfigRegionLabel; + + /// Onboarding config region helper text + /// + /// In en, this message translates to: + /// **'Uses the full official MeshCore preset list. Default is EU/UK (Narrow).'** + String get wizardConfigRegionHelp; + + /// Onboarding preset note 1 + /// + /// In en, this message translates to: + /// **'Make sure the selected preset matches your local radio regulations.'** + String get wizardPresetNote1; + + /// Onboarding preset note 2 + /// + /// In en, this message translates to: + /// **'The list matches the official MeshCore config tool preset feed.'** + String get wizardPresetNote2; + + /// Onboarding preset note 3 + /// + /// In en, this message translates to: + /// **'EU/UK (Narrow) stays selected by default for onboarding.'** + String get wizardPresetNote3; + + /// Onboarding saving button label + /// + /// In en, this message translates to: + /// **'Saving...'** + String get wizardSaving; + + /// Onboarding save and continue button label + /// + /// In en, this message translates to: + /// **'Save and continue'** + String get wizardSaveAndContinue; + + /// Onboarding validation when device name is missing + /// + /// In en, this message translates to: + /// **'Enter a device name before continuing.'** + String get wizardEnterDeviceName; + + /// Onboarding success message after saving device setup + /// + /// In en, this message translates to: + /// **'Saved {deviceName} with {presetName}.'** + String wizardDeviceSetupSaved(String deviceName, String presetName); + + /// Updated onboarding network page title + /// + /// In en, this message translates to: + /// **'Contacts, Rooms, and Repeaters'** + String get wizardNetworkTitle; + + /// Updated onboarding network page description + /// + /// In en, this message translates to: + /// **'The Contacts tab organizes the network you discover and the routes you learn over time.'** + String get wizardNetworkDescription; + + /// Updated onboarding network feature 1 + /// + /// In en, this message translates to: + /// **'Review team members, repeaters, rooms, channels, and pending adverts in one list.'** + String get wizardNetworkFeature1; + + /// Updated onboarding network feature 2 + /// + /// In en, this message translates to: + /// **'Use smart ping, room login, learned paths, and route reset tools when connectivity gets messy.'** + String get wizardNetworkFeature2; + + /// Updated onboarding network feature 3 + /// + /// In en, this message translates to: + /// **'Create channels and manage network destinations without leaving the app.'** + String get wizardNetworkFeature3; + + /// Updated onboarding map page title + /// + /// In en, this message translates to: + /// **'Map, Trails, and Shared Geometry'** + String get wizardMapOpsTitle; + + /// Updated onboarding map page description + /// + /// In en, this message translates to: + /// **'The app map is tied directly into messaging, tracking, and SAR overlays instead of being a separate viewer.'** + String get wizardMapOpsDescription; + + /// Updated onboarding map feature 1 + /// + /// In en, this message translates to: + /// **'Track your own position, teammate locations, and movement trails on the map.'** + String get wizardMapOpsFeature1; + + /// Updated onboarding map feature 2 + /// + /// In en, this message translates to: + /// **'Open drawings from messages, preview them inline, and remove them from the map when needed.'** + String get wizardMapOpsFeature2; + + /// Updated onboarding map feature 3 + /// + /// In en, this message translates to: + /// **'Use repeater map views and shared overlays to understand network reach in the field.'** + String get wizardMapOpsFeature3; + + /// Updated onboarding tools page title + /// + /// In en, this message translates to: + /// **'Tools Beyond Messaging'** + String get wizardToolsTitle; + + /// Updated onboarding tools page description + /// + /// In en, this message translates to: + /// **'There is more here than the four main tabs. The app also includes configuration, diagnostics, and optional sensor workflows.'** + String get wizardToolsDescription; + + /// Updated onboarding tools feature 1 + /// + /// In en, this message translates to: + /// **'Open device config to change radio settings, telemetry, TX power, and companion details.'** + String get wizardToolsFeature1; + + /// Updated onboarding tools feature 2 + /// + /// In en, this message translates to: + /// **'Enable the Sensors tab when you want watched sensor dashboards and quick refresh actions.'** + String get wizardToolsFeature2; + + /// Updated onboarding tools feature 3 + /// + /// In en, this message translates to: + /// **'Use packet logs, spectrum scan, and developer diagnostics when troubleshooting the mesh.'** + String get wizardToolsFeature3; + + /// Contact actions label when already in sensors + /// + /// In en, this message translates to: + /// **'In Sensors'** + String get contactInSensors; + + /// Contact actions label to add to sensors + /// + /// In en, this message translates to: + /// **'Add to Sensors'** + String get contactAddToSensors; + + /// Contact actions label to set route path + /// + /// In en, this message translates to: + /// **'Set path'** + String get contactSetPath; + + /// Snackbar after adding contact to sensors + /// + /// In en, this message translates to: + /// **'{contactName} added to Sensors'** + String contactAddedToSensors(String contactName); + + /// Error when clearing a contact route fails + /// + /// In en, this message translates to: + /// **'Failed to clear route: {error}'** + String contactFailedToClearRoute(String error); + + /// Snackbar after route is cleared + /// + /// In en, this message translates to: + /// **'Route cleared'** + String get contactRouteCleared; + + /// Snackbar after route is set + /// + /// In en, this message translates to: + /// **'Route set: {route}'** + String contactRouteSet(String route); + + /// Error when setting a contact route fails + /// + /// In en, this message translates to: + /// **'Failed to set route: {error}'** + String contactFailedToSetRoute(String error); } class _AppLocalizationsDelegate diff --git a/lib/l10n/app_localizations_de.dart b/lib/l10n/app_localizations_de.dart index 6b14001..f129023 100644 --- a/lib/l10n/app_localizations_de.dart +++ b/lib/l10n/app_localizations_de.dart @@ -1734,4 +1734,198 @@ class AppLocalizationsDe extends AppLocalizations { @override String get requestingVoice => 'Sprachnachricht wird angefordert'; + + @override + String get device => 'device'; + + @override + String get change => 'Change'; + + @override + String get wizardOverviewDescription => + 'This app combines MeshCore messaging, SAR field updates, mapping, and device tools in one place.'; + + @override + String get wizardOverviewFeature1 => + 'Send direct, room, and channel messages from the main Messages tab.'; + + @override + String get wizardOverviewFeature2 => + 'Share SAR markers, map drawings, voice clips, and images over the mesh.'; + + @override + String get wizardOverviewFeature3 => + 'Connect over BLE or TCP, then manage the companion radio from inside the app.'; + + @override + String get wizardMessagingTitle => 'Messaging and Field Reports'; + + @override + String get wizardMessagingDescription => + 'Messages are more than plain text here. The app already supports several operational payloads and transfer workflows.'; + + @override + String get wizardMessagingFeature1 => + 'Send direct messages, room posts, and channel traffic from one composer.'; + + @override + String get wizardMessagingFeature2 => + 'Create SAR updates and reusable SAR templates for common field reports.'; + + @override + String get wizardMessagingFeature3 => + 'Transfer voice sessions and images, with progress and airtime estimates in the UI.'; + + @override + String get wizardConnectDeviceTitle => 'Connect device'; + + @override + String get wizardConnectDeviceDescription => + 'Connect your MeshCore radio, choose a name, and apply a radio preset before continuing.'; + + @override + String get wizardSetupBadge => 'Setup'; + + @override + String get wizardOverviewBadge => 'Overview'; + + @override + String wizardConnectedToDevice(String deviceName) { + return 'Connected to $deviceName'; + } + + @override + String get wizardNoDeviceConnected => 'No device connected yet'; + + @override + String get wizardSkipForNow => 'Skip for now'; + + @override + String get wizardDeviceNameLabel => 'Device name'; + + @override + String get wizardDeviceNameHelp => + 'This name is advertised to other MeshCore users.'; + + @override + String get wizardConfigRegionLabel => 'Config region'; + + @override + String get wizardConfigRegionHelp => + 'Uses the full official MeshCore preset list. Default is EU/UK (Narrow).'; + + @override + String get wizardPresetNote1 => + 'Make sure the selected preset matches your local radio regulations.'; + + @override + String get wizardPresetNote2 => + 'The list matches the official MeshCore config tool preset feed.'; + + @override + String get wizardPresetNote3 => + 'EU/UK (Narrow) stays selected by default for onboarding.'; + + @override + String get wizardSaving => 'Saving...'; + + @override + String get wizardSaveAndContinue => 'Save and continue'; + + @override + String get wizardEnterDeviceName => 'Enter a device name before continuing.'; + + @override + String wizardDeviceSetupSaved(String deviceName, String presetName) { + return 'Saved $deviceName with $presetName.'; + } + + @override + String get wizardNetworkTitle => 'Contacts, Rooms, and Repeaters'; + + @override + String get wizardNetworkDescription => + 'The Contacts tab organizes the network you discover and the routes you learn over time.'; + + @override + String get wizardNetworkFeature1 => + 'Review team members, repeaters, rooms, channels, and pending adverts in one list.'; + + @override + String get wizardNetworkFeature2 => + 'Use smart ping, room login, learned paths, and route reset tools when connectivity gets messy.'; + + @override + String get wizardNetworkFeature3 => + 'Create channels and manage network destinations without leaving the app.'; + + @override + String get wizardMapOpsTitle => 'Map, Trails, and Shared Geometry'; + + @override + String get wizardMapOpsDescription => + 'The app map is tied directly into messaging, tracking, and SAR overlays instead of being a separate viewer.'; + + @override + String get wizardMapOpsFeature1 => + 'Track your own position, teammate locations, and movement trails on the map.'; + + @override + String get wizardMapOpsFeature2 => + 'Open drawings from messages, preview them inline, and remove them from the map when needed.'; + + @override + String get wizardMapOpsFeature3 => + 'Use repeater map views and shared overlays to understand network reach in the field.'; + + @override + String get wizardToolsTitle => 'Tools Beyond Messaging'; + + @override + String get wizardToolsDescription => + 'There is more here than the four main tabs. The app also includes configuration, diagnostics, and optional sensor workflows.'; + + @override + String get wizardToolsFeature1 => + 'Open device config to change radio settings, telemetry, TX power, and companion details.'; + + @override + String get wizardToolsFeature2 => + 'Enable the Sensors tab when you want watched sensor dashboards and quick refresh actions.'; + + @override + String get wizardToolsFeature3 => + 'Use packet logs, spectrum scan, and developer diagnostics when troubleshooting the mesh.'; + + @override + String get contactInSensors => 'In Sensors'; + + @override + String get contactAddToSensors => 'Add to Sensors'; + + @override + String get contactSetPath => 'Set path'; + + @override + String contactAddedToSensors(String contactName) { + return '$contactName added to Sensors'; + } + + @override + String contactFailedToClearRoute(String error) { + return 'Failed to clear route: $error'; + } + + @override + String get contactRouteCleared => 'Route cleared'; + + @override + String contactRouteSet(String route) { + return 'Route set: $route'; + } + + @override + String contactFailedToSetRoute(String error) { + return 'Failed to set route: $error'; + } } diff --git a/lib/l10n/app_localizations_el.dart b/lib/l10n/app_localizations_el.dart index dc23c8d..944fc47 100644 --- a/lib/l10n/app_localizations_el.dart +++ b/lib/l10n/app_localizations_el.dart @@ -1741,4 +1741,198 @@ class AppLocalizationsEl extends AppLocalizations { @override String get requestingVoice => 'Αίτηση φωνής'; + + @override + String get device => 'device'; + + @override + String get change => 'Change'; + + @override + String get wizardOverviewDescription => + 'This app combines MeshCore messaging, SAR field updates, mapping, and device tools in one place.'; + + @override + String get wizardOverviewFeature1 => + 'Send direct, room, and channel messages from the main Messages tab.'; + + @override + String get wizardOverviewFeature2 => + 'Share SAR markers, map drawings, voice clips, and images over the mesh.'; + + @override + String get wizardOverviewFeature3 => + 'Connect over BLE or TCP, then manage the companion radio from inside the app.'; + + @override + String get wizardMessagingTitle => 'Messaging and Field Reports'; + + @override + String get wizardMessagingDescription => + 'Messages are more than plain text here. The app already supports several operational payloads and transfer workflows.'; + + @override + String get wizardMessagingFeature1 => + 'Send direct messages, room posts, and channel traffic from one composer.'; + + @override + String get wizardMessagingFeature2 => + 'Create SAR updates and reusable SAR templates for common field reports.'; + + @override + String get wizardMessagingFeature3 => + 'Transfer voice sessions and images, with progress and airtime estimates in the UI.'; + + @override + String get wizardConnectDeviceTitle => 'Connect device'; + + @override + String get wizardConnectDeviceDescription => + 'Connect your MeshCore radio, choose a name, and apply a radio preset before continuing.'; + + @override + String get wizardSetupBadge => 'Setup'; + + @override + String get wizardOverviewBadge => 'Overview'; + + @override + String wizardConnectedToDevice(String deviceName) { + return 'Connected to $deviceName'; + } + + @override + String get wizardNoDeviceConnected => 'No device connected yet'; + + @override + String get wizardSkipForNow => 'Skip for now'; + + @override + String get wizardDeviceNameLabel => 'Device name'; + + @override + String get wizardDeviceNameHelp => + 'This name is advertised to other MeshCore users.'; + + @override + String get wizardConfigRegionLabel => 'Config region'; + + @override + String get wizardConfigRegionHelp => + 'Uses the full official MeshCore preset list. Default is EU/UK (Narrow).'; + + @override + String get wizardPresetNote1 => + 'Make sure the selected preset matches your local radio regulations.'; + + @override + String get wizardPresetNote2 => + 'The list matches the official MeshCore config tool preset feed.'; + + @override + String get wizardPresetNote3 => + 'EU/UK (Narrow) stays selected by default for onboarding.'; + + @override + String get wizardSaving => 'Saving...'; + + @override + String get wizardSaveAndContinue => 'Save and continue'; + + @override + String get wizardEnterDeviceName => 'Enter a device name before continuing.'; + + @override + String wizardDeviceSetupSaved(String deviceName, String presetName) { + return 'Saved $deviceName with $presetName.'; + } + + @override + String get wizardNetworkTitle => 'Contacts, Rooms, and Repeaters'; + + @override + String get wizardNetworkDescription => + 'The Contacts tab organizes the network you discover and the routes you learn over time.'; + + @override + String get wizardNetworkFeature1 => + 'Review team members, repeaters, rooms, channels, and pending adverts in one list.'; + + @override + String get wizardNetworkFeature2 => + 'Use smart ping, room login, learned paths, and route reset tools when connectivity gets messy.'; + + @override + String get wizardNetworkFeature3 => + 'Create channels and manage network destinations without leaving the app.'; + + @override + String get wizardMapOpsTitle => 'Map, Trails, and Shared Geometry'; + + @override + String get wizardMapOpsDescription => + 'The app map is tied directly into messaging, tracking, and SAR overlays instead of being a separate viewer.'; + + @override + String get wizardMapOpsFeature1 => + 'Track your own position, teammate locations, and movement trails on the map.'; + + @override + String get wizardMapOpsFeature2 => + 'Open drawings from messages, preview them inline, and remove them from the map when needed.'; + + @override + String get wizardMapOpsFeature3 => + 'Use repeater map views and shared overlays to understand network reach in the field.'; + + @override + String get wizardToolsTitle => 'Tools Beyond Messaging'; + + @override + String get wizardToolsDescription => + 'There is more here than the four main tabs. The app also includes configuration, diagnostics, and optional sensor workflows.'; + + @override + String get wizardToolsFeature1 => + 'Open device config to change radio settings, telemetry, TX power, and companion details.'; + + @override + String get wizardToolsFeature2 => + 'Enable the Sensors tab when you want watched sensor dashboards and quick refresh actions.'; + + @override + String get wizardToolsFeature3 => + 'Use packet logs, spectrum scan, and developer diagnostics when troubleshooting the mesh.'; + + @override + String get contactInSensors => 'In Sensors'; + + @override + String get contactAddToSensors => 'Add to Sensors'; + + @override + String get contactSetPath => 'Set path'; + + @override + String contactAddedToSensors(String contactName) { + return '$contactName added to Sensors'; + } + + @override + String contactFailedToClearRoute(String error) { + return 'Failed to clear route: $error'; + } + + @override + String get contactRouteCleared => 'Route cleared'; + + @override + String contactRouteSet(String route) { + return 'Route set: $route'; + } + + @override + String contactFailedToSetRoute(String error) { + return 'Failed to set route: $error'; + } } diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index cfaa9cc..8d4803c 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -1708,4 +1708,198 @@ class AppLocalizationsEn extends AppLocalizations { @override String get requestingVoice => 'Requesting voice'; + + @override + String get device => 'device'; + + @override + String get change => 'Change'; + + @override + String get wizardOverviewDescription => + 'This app combines MeshCore messaging, SAR field updates, mapping, and device tools in one place.'; + + @override + String get wizardOverviewFeature1 => + 'Send direct, room, and channel messages from the main Messages tab.'; + + @override + String get wizardOverviewFeature2 => + 'Share SAR markers, map drawings, voice clips, and images over the mesh.'; + + @override + String get wizardOverviewFeature3 => + 'Connect over BLE or TCP, then manage the companion radio from inside the app.'; + + @override + String get wizardMessagingTitle => 'Messaging and Field Reports'; + + @override + String get wizardMessagingDescription => + 'Messages are more than plain text here. The app already supports several operational payloads and transfer workflows.'; + + @override + String get wizardMessagingFeature1 => + 'Send direct messages, room posts, and channel traffic from one composer.'; + + @override + String get wizardMessagingFeature2 => + 'Create SAR updates and reusable SAR templates for common field reports.'; + + @override + String get wizardMessagingFeature3 => + 'Transfer voice sessions and images, with progress and airtime estimates in the UI.'; + + @override + String get wizardConnectDeviceTitle => 'Connect device'; + + @override + String get wizardConnectDeviceDescription => + 'Connect your MeshCore radio, choose a name, and apply a radio preset before continuing.'; + + @override + String get wizardSetupBadge => 'Setup'; + + @override + String get wizardOverviewBadge => 'Overview'; + + @override + String wizardConnectedToDevice(String deviceName) { + return 'Connected to $deviceName'; + } + + @override + String get wizardNoDeviceConnected => 'No device connected yet'; + + @override + String get wizardSkipForNow => 'Skip for now'; + + @override + String get wizardDeviceNameLabel => 'Device name'; + + @override + String get wizardDeviceNameHelp => + 'This name is advertised to other MeshCore users.'; + + @override + String get wizardConfigRegionLabel => 'Config region'; + + @override + String get wizardConfigRegionHelp => + 'Uses the full official MeshCore preset list. Default is EU/UK (Narrow).'; + + @override + String get wizardPresetNote1 => + 'Make sure the selected preset matches your local radio regulations.'; + + @override + String get wizardPresetNote2 => + 'The list matches the official MeshCore config tool preset feed.'; + + @override + String get wizardPresetNote3 => + 'EU/UK (Narrow) stays selected by default for onboarding.'; + + @override + String get wizardSaving => 'Saving...'; + + @override + String get wizardSaveAndContinue => 'Save and continue'; + + @override + String get wizardEnterDeviceName => 'Enter a device name before continuing.'; + + @override + String wizardDeviceSetupSaved(String deviceName, String presetName) { + return 'Saved $deviceName with $presetName.'; + } + + @override + String get wizardNetworkTitle => 'Contacts, Rooms, and Repeaters'; + + @override + String get wizardNetworkDescription => + 'The Contacts tab organizes the network you discover and the routes you learn over time.'; + + @override + String get wizardNetworkFeature1 => + 'Review team members, repeaters, rooms, channels, and pending adverts in one list.'; + + @override + String get wizardNetworkFeature2 => + 'Use smart ping, room login, learned paths, and route reset tools when connectivity gets messy.'; + + @override + String get wizardNetworkFeature3 => + 'Create channels and manage network destinations without leaving the app.'; + + @override + String get wizardMapOpsTitle => 'Map, Trails, and Shared Geometry'; + + @override + String get wizardMapOpsDescription => + 'The app map is tied directly into messaging, tracking, and SAR overlays instead of being a separate viewer.'; + + @override + String get wizardMapOpsFeature1 => + 'Track your own position, teammate locations, and movement trails on the map.'; + + @override + String get wizardMapOpsFeature2 => + 'Open drawings from messages, preview them inline, and remove them from the map when needed.'; + + @override + String get wizardMapOpsFeature3 => + 'Use repeater map views and shared overlays to understand network reach in the field.'; + + @override + String get wizardToolsTitle => 'Tools Beyond Messaging'; + + @override + String get wizardToolsDescription => + 'There is more here than the four main tabs. The app also includes configuration, diagnostics, and optional sensor workflows.'; + + @override + String get wizardToolsFeature1 => + 'Open device config to change radio settings, telemetry, TX power, and companion details.'; + + @override + String get wizardToolsFeature2 => + 'Enable the Sensors tab when you want watched sensor dashboards and quick refresh actions.'; + + @override + String get wizardToolsFeature3 => + 'Use packet logs, spectrum scan, and developer diagnostics when troubleshooting the mesh.'; + + @override + String get contactInSensors => 'In Sensors'; + + @override + String get contactAddToSensors => 'Add to Sensors'; + + @override + String get contactSetPath => 'Set path'; + + @override + String contactAddedToSensors(String contactName) { + return '$contactName added to Sensors'; + } + + @override + String contactFailedToClearRoute(String error) { + return 'Failed to clear route: $error'; + } + + @override + String get contactRouteCleared => 'Route cleared'; + + @override + String contactRouteSet(String route) { + return 'Route set: $route'; + } + + @override + String contactFailedToSetRoute(String error) { + return 'Failed to set route: $error'; + } } diff --git a/lib/l10n/app_localizations_es.dart b/lib/l10n/app_localizations_es.dart index 6fa6fd5..c4ec14c 100644 --- a/lib/l10n/app_localizations_es.dart +++ b/lib/l10n/app_localizations_es.dart @@ -1736,4 +1736,198 @@ class AppLocalizationsEs extends AppLocalizations { @override String get requestingVoice => 'Solicitando voz'; + + @override + String get device => 'device'; + + @override + String get change => 'Change'; + + @override + String get wizardOverviewDescription => + 'This app combines MeshCore messaging, SAR field updates, mapping, and device tools in one place.'; + + @override + String get wizardOverviewFeature1 => + 'Send direct, room, and channel messages from the main Messages tab.'; + + @override + String get wizardOverviewFeature2 => + 'Share SAR markers, map drawings, voice clips, and images over the mesh.'; + + @override + String get wizardOverviewFeature3 => + 'Connect over BLE or TCP, then manage the companion radio from inside the app.'; + + @override + String get wizardMessagingTitle => 'Messaging and Field Reports'; + + @override + String get wizardMessagingDescription => + 'Messages are more than plain text here. The app already supports several operational payloads and transfer workflows.'; + + @override + String get wizardMessagingFeature1 => + 'Send direct messages, room posts, and channel traffic from one composer.'; + + @override + String get wizardMessagingFeature2 => + 'Create SAR updates and reusable SAR templates for common field reports.'; + + @override + String get wizardMessagingFeature3 => + 'Transfer voice sessions and images, with progress and airtime estimates in the UI.'; + + @override + String get wizardConnectDeviceTitle => 'Connect device'; + + @override + String get wizardConnectDeviceDescription => + 'Connect your MeshCore radio, choose a name, and apply a radio preset before continuing.'; + + @override + String get wizardSetupBadge => 'Setup'; + + @override + String get wizardOverviewBadge => 'Overview'; + + @override + String wizardConnectedToDevice(String deviceName) { + return 'Connected to $deviceName'; + } + + @override + String get wizardNoDeviceConnected => 'No device connected yet'; + + @override + String get wizardSkipForNow => 'Skip for now'; + + @override + String get wizardDeviceNameLabel => 'Device name'; + + @override + String get wizardDeviceNameHelp => + 'This name is advertised to other MeshCore users.'; + + @override + String get wizardConfigRegionLabel => 'Config region'; + + @override + String get wizardConfigRegionHelp => + 'Uses the full official MeshCore preset list. Default is EU/UK (Narrow).'; + + @override + String get wizardPresetNote1 => + 'Make sure the selected preset matches your local radio regulations.'; + + @override + String get wizardPresetNote2 => + 'The list matches the official MeshCore config tool preset feed.'; + + @override + String get wizardPresetNote3 => + 'EU/UK (Narrow) stays selected by default for onboarding.'; + + @override + String get wizardSaving => 'Saving...'; + + @override + String get wizardSaveAndContinue => 'Save and continue'; + + @override + String get wizardEnterDeviceName => 'Enter a device name before continuing.'; + + @override + String wizardDeviceSetupSaved(String deviceName, String presetName) { + return 'Saved $deviceName with $presetName.'; + } + + @override + String get wizardNetworkTitle => 'Contacts, Rooms, and Repeaters'; + + @override + String get wizardNetworkDescription => + 'The Contacts tab organizes the network you discover and the routes you learn over time.'; + + @override + String get wizardNetworkFeature1 => + 'Review team members, repeaters, rooms, channels, and pending adverts in one list.'; + + @override + String get wizardNetworkFeature2 => + 'Use smart ping, room login, learned paths, and route reset tools when connectivity gets messy.'; + + @override + String get wizardNetworkFeature3 => + 'Create channels and manage network destinations without leaving the app.'; + + @override + String get wizardMapOpsTitle => 'Map, Trails, and Shared Geometry'; + + @override + String get wizardMapOpsDescription => + 'The app map is tied directly into messaging, tracking, and SAR overlays instead of being a separate viewer.'; + + @override + String get wizardMapOpsFeature1 => + 'Track your own position, teammate locations, and movement trails on the map.'; + + @override + String get wizardMapOpsFeature2 => + 'Open drawings from messages, preview them inline, and remove them from the map when needed.'; + + @override + String get wizardMapOpsFeature3 => + 'Use repeater map views and shared overlays to understand network reach in the field.'; + + @override + String get wizardToolsTitle => 'Tools Beyond Messaging'; + + @override + String get wizardToolsDescription => + 'There is more here than the four main tabs. The app also includes configuration, diagnostics, and optional sensor workflows.'; + + @override + String get wizardToolsFeature1 => + 'Open device config to change radio settings, telemetry, TX power, and companion details.'; + + @override + String get wizardToolsFeature2 => + 'Enable the Sensors tab when you want watched sensor dashboards and quick refresh actions.'; + + @override + String get wizardToolsFeature3 => + 'Use packet logs, spectrum scan, and developer diagnostics when troubleshooting the mesh.'; + + @override + String get contactInSensors => 'In Sensors'; + + @override + String get contactAddToSensors => 'Add to Sensors'; + + @override + String get contactSetPath => 'Set path'; + + @override + String contactAddedToSensors(String contactName) { + return '$contactName added to Sensors'; + } + + @override + String contactFailedToClearRoute(String error) { + return 'Failed to clear route: $error'; + } + + @override + String get contactRouteCleared => 'Route cleared'; + + @override + String contactRouteSet(String route) { + return 'Route set: $route'; + } + + @override + String contactFailedToSetRoute(String error) { + return 'Failed to set route: $error'; + } } diff --git a/lib/l10n/app_localizations_fr.dart b/lib/l10n/app_localizations_fr.dart index d59e980..e181a9b 100644 --- a/lib/l10n/app_localizations_fr.dart +++ b/lib/l10n/app_localizations_fr.dart @@ -1740,4 +1740,198 @@ class AppLocalizationsFr extends AppLocalizations { @override String get requestingVoice => 'Demande de voix'; + + @override + String get device => 'device'; + + @override + String get change => 'Change'; + + @override + String get wizardOverviewDescription => + 'This app combines MeshCore messaging, SAR field updates, mapping, and device tools in one place.'; + + @override + String get wizardOverviewFeature1 => + 'Send direct, room, and channel messages from the main Messages tab.'; + + @override + String get wizardOverviewFeature2 => + 'Share SAR markers, map drawings, voice clips, and images over the mesh.'; + + @override + String get wizardOverviewFeature3 => + 'Connect over BLE or TCP, then manage the companion radio from inside the app.'; + + @override + String get wizardMessagingTitle => 'Messaging and Field Reports'; + + @override + String get wizardMessagingDescription => + 'Messages are more than plain text here. The app already supports several operational payloads and transfer workflows.'; + + @override + String get wizardMessagingFeature1 => + 'Send direct messages, room posts, and channel traffic from one composer.'; + + @override + String get wizardMessagingFeature2 => + 'Create SAR updates and reusable SAR templates for common field reports.'; + + @override + String get wizardMessagingFeature3 => + 'Transfer voice sessions and images, with progress and airtime estimates in the UI.'; + + @override + String get wizardConnectDeviceTitle => 'Connect device'; + + @override + String get wizardConnectDeviceDescription => + 'Connect your MeshCore radio, choose a name, and apply a radio preset before continuing.'; + + @override + String get wizardSetupBadge => 'Setup'; + + @override + String get wizardOverviewBadge => 'Overview'; + + @override + String wizardConnectedToDevice(String deviceName) { + return 'Connected to $deviceName'; + } + + @override + String get wizardNoDeviceConnected => 'No device connected yet'; + + @override + String get wizardSkipForNow => 'Skip for now'; + + @override + String get wizardDeviceNameLabel => 'Device name'; + + @override + String get wizardDeviceNameHelp => + 'This name is advertised to other MeshCore users.'; + + @override + String get wizardConfigRegionLabel => 'Config region'; + + @override + String get wizardConfigRegionHelp => + 'Uses the full official MeshCore preset list. Default is EU/UK (Narrow).'; + + @override + String get wizardPresetNote1 => + 'Make sure the selected preset matches your local radio regulations.'; + + @override + String get wizardPresetNote2 => + 'The list matches the official MeshCore config tool preset feed.'; + + @override + String get wizardPresetNote3 => + 'EU/UK (Narrow) stays selected by default for onboarding.'; + + @override + String get wizardSaving => 'Saving...'; + + @override + String get wizardSaveAndContinue => 'Save and continue'; + + @override + String get wizardEnterDeviceName => 'Enter a device name before continuing.'; + + @override + String wizardDeviceSetupSaved(String deviceName, String presetName) { + return 'Saved $deviceName with $presetName.'; + } + + @override + String get wizardNetworkTitle => 'Contacts, Rooms, and Repeaters'; + + @override + String get wizardNetworkDescription => + 'The Contacts tab organizes the network you discover and the routes you learn over time.'; + + @override + String get wizardNetworkFeature1 => + 'Review team members, repeaters, rooms, channels, and pending adverts in one list.'; + + @override + String get wizardNetworkFeature2 => + 'Use smart ping, room login, learned paths, and route reset tools when connectivity gets messy.'; + + @override + String get wizardNetworkFeature3 => + 'Create channels and manage network destinations without leaving the app.'; + + @override + String get wizardMapOpsTitle => 'Map, Trails, and Shared Geometry'; + + @override + String get wizardMapOpsDescription => + 'The app map is tied directly into messaging, tracking, and SAR overlays instead of being a separate viewer.'; + + @override + String get wizardMapOpsFeature1 => + 'Track your own position, teammate locations, and movement trails on the map.'; + + @override + String get wizardMapOpsFeature2 => + 'Open drawings from messages, preview them inline, and remove them from the map when needed.'; + + @override + String get wizardMapOpsFeature3 => + 'Use repeater map views and shared overlays to understand network reach in the field.'; + + @override + String get wizardToolsTitle => 'Tools Beyond Messaging'; + + @override + String get wizardToolsDescription => + 'There is more here than the four main tabs. The app also includes configuration, diagnostics, and optional sensor workflows.'; + + @override + String get wizardToolsFeature1 => + 'Open device config to change radio settings, telemetry, TX power, and companion details.'; + + @override + String get wizardToolsFeature2 => + 'Enable the Sensors tab when you want watched sensor dashboards and quick refresh actions.'; + + @override + String get wizardToolsFeature3 => + 'Use packet logs, spectrum scan, and developer diagnostics when troubleshooting the mesh.'; + + @override + String get contactInSensors => 'In Sensors'; + + @override + String get contactAddToSensors => 'Add to Sensors'; + + @override + String get contactSetPath => 'Set path'; + + @override + String contactAddedToSensors(String contactName) { + return '$contactName added to Sensors'; + } + + @override + String contactFailedToClearRoute(String error) { + return 'Failed to clear route: $error'; + } + + @override + String get contactRouteCleared => 'Route cleared'; + + @override + String contactRouteSet(String route) { + return 'Route set: $route'; + } + + @override + String contactFailedToSetRoute(String error) { + return 'Failed to set route: $error'; + } } diff --git a/lib/l10n/app_localizations_hr.dart b/lib/l10n/app_localizations_hr.dart index 7a5885b..ef96a93 100644 --- a/lib/l10n/app_localizations_hr.dart +++ b/lib/l10n/app_localizations_hr.dart @@ -1718,4 +1718,198 @@ class AppLocalizationsHr extends AppLocalizations { @override String get requestingVoice => 'Zahtjev za glasom'; + + @override + String get device => 'device'; + + @override + String get change => 'Change'; + + @override + String get wizardOverviewDescription => + 'This app combines MeshCore messaging, SAR field updates, mapping, and device tools in one place.'; + + @override + String get wizardOverviewFeature1 => + 'Send direct, room, and channel messages from the main Messages tab.'; + + @override + String get wizardOverviewFeature2 => + 'Share SAR markers, map drawings, voice clips, and images over the mesh.'; + + @override + String get wizardOverviewFeature3 => + 'Connect over BLE or TCP, then manage the companion radio from inside the app.'; + + @override + String get wizardMessagingTitle => 'Messaging and Field Reports'; + + @override + String get wizardMessagingDescription => + 'Messages are more than plain text here. The app already supports several operational payloads and transfer workflows.'; + + @override + String get wizardMessagingFeature1 => + 'Send direct messages, room posts, and channel traffic from one composer.'; + + @override + String get wizardMessagingFeature2 => + 'Create SAR updates and reusable SAR templates for common field reports.'; + + @override + String get wizardMessagingFeature3 => + 'Transfer voice sessions and images, with progress and airtime estimates in the UI.'; + + @override + String get wizardConnectDeviceTitle => 'Connect device'; + + @override + String get wizardConnectDeviceDescription => + 'Connect your MeshCore radio, choose a name, and apply a radio preset before continuing.'; + + @override + String get wizardSetupBadge => 'Setup'; + + @override + String get wizardOverviewBadge => 'Overview'; + + @override + String wizardConnectedToDevice(String deviceName) { + return 'Connected to $deviceName'; + } + + @override + String get wizardNoDeviceConnected => 'No device connected yet'; + + @override + String get wizardSkipForNow => 'Skip for now'; + + @override + String get wizardDeviceNameLabel => 'Device name'; + + @override + String get wizardDeviceNameHelp => + 'This name is advertised to other MeshCore users.'; + + @override + String get wizardConfigRegionLabel => 'Config region'; + + @override + String get wizardConfigRegionHelp => + 'Uses the full official MeshCore preset list. Default is EU/UK (Narrow).'; + + @override + String get wizardPresetNote1 => + 'Make sure the selected preset matches your local radio regulations.'; + + @override + String get wizardPresetNote2 => + 'The list matches the official MeshCore config tool preset feed.'; + + @override + String get wizardPresetNote3 => + 'EU/UK (Narrow) stays selected by default for onboarding.'; + + @override + String get wizardSaving => 'Saving...'; + + @override + String get wizardSaveAndContinue => 'Save and continue'; + + @override + String get wizardEnterDeviceName => 'Enter a device name before continuing.'; + + @override + String wizardDeviceSetupSaved(String deviceName, String presetName) { + return 'Saved $deviceName with $presetName.'; + } + + @override + String get wizardNetworkTitle => 'Contacts, Rooms, and Repeaters'; + + @override + String get wizardNetworkDescription => + 'The Contacts tab organizes the network you discover and the routes you learn over time.'; + + @override + String get wizardNetworkFeature1 => + 'Review team members, repeaters, rooms, channels, and pending adverts in one list.'; + + @override + String get wizardNetworkFeature2 => + 'Use smart ping, room login, learned paths, and route reset tools when connectivity gets messy.'; + + @override + String get wizardNetworkFeature3 => + 'Create channels and manage network destinations without leaving the app.'; + + @override + String get wizardMapOpsTitle => 'Map, Trails, and Shared Geometry'; + + @override + String get wizardMapOpsDescription => + 'The app map is tied directly into messaging, tracking, and SAR overlays instead of being a separate viewer.'; + + @override + String get wizardMapOpsFeature1 => + 'Track your own position, teammate locations, and movement trails on the map.'; + + @override + String get wizardMapOpsFeature2 => + 'Open drawings from messages, preview them inline, and remove them from the map when needed.'; + + @override + String get wizardMapOpsFeature3 => + 'Use repeater map views and shared overlays to understand network reach in the field.'; + + @override + String get wizardToolsTitle => 'Tools Beyond Messaging'; + + @override + String get wizardToolsDescription => + 'There is more here than the four main tabs. The app also includes configuration, diagnostics, and optional sensor workflows.'; + + @override + String get wizardToolsFeature1 => + 'Open device config to change radio settings, telemetry, TX power, and companion details.'; + + @override + String get wizardToolsFeature2 => + 'Enable the Sensors tab when you want watched sensor dashboards and quick refresh actions.'; + + @override + String get wizardToolsFeature3 => + 'Use packet logs, spectrum scan, and developer diagnostics when troubleshooting the mesh.'; + + @override + String get contactInSensors => 'In Sensors'; + + @override + String get contactAddToSensors => 'Add to Sensors'; + + @override + String get contactSetPath => 'Set path'; + + @override + String contactAddedToSensors(String contactName) { + return '$contactName added to Sensors'; + } + + @override + String contactFailedToClearRoute(String error) { + return 'Failed to clear route: $error'; + } + + @override + String get contactRouteCleared => 'Route cleared'; + + @override + String contactRouteSet(String route) { + return 'Route set: $route'; + } + + @override + String contactFailedToSetRoute(String error) { + return 'Failed to set route: $error'; + } } diff --git a/lib/l10n/app_localizations_it.dart b/lib/l10n/app_localizations_it.dart index 098e233..30183a1 100644 --- a/lib/l10n/app_localizations_it.dart +++ b/lib/l10n/app_localizations_it.dart @@ -1732,4 +1732,198 @@ class AppLocalizationsIt extends AppLocalizations { @override String get requestingVoice => 'Richiesta voce'; + + @override + String get device => 'device'; + + @override + String get change => 'Change'; + + @override + String get wizardOverviewDescription => + 'This app combines MeshCore messaging, SAR field updates, mapping, and device tools in one place.'; + + @override + String get wizardOverviewFeature1 => + 'Send direct, room, and channel messages from the main Messages tab.'; + + @override + String get wizardOverviewFeature2 => + 'Share SAR markers, map drawings, voice clips, and images over the mesh.'; + + @override + String get wizardOverviewFeature3 => + 'Connect over BLE or TCP, then manage the companion radio from inside the app.'; + + @override + String get wizardMessagingTitle => 'Messaging and Field Reports'; + + @override + String get wizardMessagingDescription => + 'Messages are more than plain text here. The app already supports several operational payloads and transfer workflows.'; + + @override + String get wizardMessagingFeature1 => + 'Send direct messages, room posts, and channel traffic from one composer.'; + + @override + String get wizardMessagingFeature2 => + 'Create SAR updates and reusable SAR templates for common field reports.'; + + @override + String get wizardMessagingFeature3 => + 'Transfer voice sessions and images, with progress and airtime estimates in the UI.'; + + @override + String get wizardConnectDeviceTitle => 'Connect device'; + + @override + String get wizardConnectDeviceDescription => + 'Connect your MeshCore radio, choose a name, and apply a radio preset before continuing.'; + + @override + String get wizardSetupBadge => 'Setup'; + + @override + String get wizardOverviewBadge => 'Overview'; + + @override + String wizardConnectedToDevice(String deviceName) { + return 'Connected to $deviceName'; + } + + @override + String get wizardNoDeviceConnected => 'No device connected yet'; + + @override + String get wizardSkipForNow => 'Skip for now'; + + @override + String get wizardDeviceNameLabel => 'Device name'; + + @override + String get wizardDeviceNameHelp => + 'This name is advertised to other MeshCore users.'; + + @override + String get wizardConfigRegionLabel => 'Config region'; + + @override + String get wizardConfigRegionHelp => + 'Uses the full official MeshCore preset list. Default is EU/UK (Narrow).'; + + @override + String get wizardPresetNote1 => + 'Make sure the selected preset matches your local radio regulations.'; + + @override + String get wizardPresetNote2 => + 'The list matches the official MeshCore config tool preset feed.'; + + @override + String get wizardPresetNote3 => + 'EU/UK (Narrow) stays selected by default for onboarding.'; + + @override + String get wizardSaving => 'Saving...'; + + @override + String get wizardSaveAndContinue => 'Save and continue'; + + @override + String get wizardEnterDeviceName => 'Enter a device name before continuing.'; + + @override + String wizardDeviceSetupSaved(String deviceName, String presetName) { + return 'Saved $deviceName with $presetName.'; + } + + @override + String get wizardNetworkTitle => 'Contacts, Rooms, and Repeaters'; + + @override + String get wizardNetworkDescription => + 'The Contacts tab organizes the network you discover and the routes you learn over time.'; + + @override + String get wizardNetworkFeature1 => + 'Review team members, repeaters, rooms, channels, and pending adverts in one list.'; + + @override + String get wizardNetworkFeature2 => + 'Use smart ping, room login, learned paths, and route reset tools when connectivity gets messy.'; + + @override + String get wizardNetworkFeature3 => + 'Create channels and manage network destinations without leaving the app.'; + + @override + String get wizardMapOpsTitle => 'Map, Trails, and Shared Geometry'; + + @override + String get wizardMapOpsDescription => + 'The app map is tied directly into messaging, tracking, and SAR overlays instead of being a separate viewer.'; + + @override + String get wizardMapOpsFeature1 => + 'Track your own position, teammate locations, and movement trails on the map.'; + + @override + String get wizardMapOpsFeature2 => + 'Open drawings from messages, preview them inline, and remove them from the map when needed.'; + + @override + String get wizardMapOpsFeature3 => + 'Use repeater map views and shared overlays to understand network reach in the field.'; + + @override + String get wizardToolsTitle => 'Tools Beyond Messaging'; + + @override + String get wizardToolsDescription => + 'There is more here than the four main tabs. The app also includes configuration, diagnostics, and optional sensor workflows.'; + + @override + String get wizardToolsFeature1 => + 'Open device config to change radio settings, telemetry, TX power, and companion details.'; + + @override + String get wizardToolsFeature2 => + 'Enable the Sensors tab when you want watched sensor dashboards and quick refresh actions.'; + + @override + String get wizardToolsFeature3 => + 'Use packet logs, spectrum scan, and developer diagnostics when troubleshooting the mesh.'; + + @override + String get contactInSensors => 'In Sensors'; + + @override + String get contactAddToSensors => 'Add to Sensors'; + + @override + String get contactSetPath => 'Set path'; + + @override + String contactAddedToSensors(String contactName) { + return '$contactName added to Sensors'; + } + + @override + String contactFailedToClearRoute(String error) { + return 'Failed to clear route: $error'; + } + + @override + String get contactRouteCleared => 'Route cleared'; + + @override + String contactRouteSet(String route) { + return 'Route set: $route'; + } + + @override + String contactFailedToSetRoute(String error) { + return 'Failed to set route: $error'; + } } diff --git a/lib/l10n/app_localizations_pl.dart b/lib/l10n/app_localizations_pl.dart index 92d9f73..4227b72 100644 --- a/lib/l10n/app_localizations_pl.dart +++ b/lib/l10n/app_localizations_pl.dart @@ -1729,4 +1729,198 @@ class AppLocalizationsPl extends AppLocalizations { @override String get requestingVoice => 'Pobieranie głosu'; + + @override + String get device => 'device'; + + @override + String get change => 'Change'; + + @override + String get wizardOverviewDescription => + 'This app combines MeshCore messaging, SAR field updates, mapping, and device tools in one place.'; + + @override + String get wizardOverviewFeature1 => + 'Send direct, room, and channel messages from the main Messages tab.'; + + @override + String get wizardOverviewFeature2 => + 'Share SAR markers, map drawings, voice clips, and images over the mesh.'; + + @override + String get wizardOverviewFeature3 => + 'Connect over BLE or TCP, then manage the companion radio from inside the app.'; + + @override + String get wizardMessagingTitle => 'Messaging and Field Reports'; + + @override + String get wizardMessagingDescription => + 'Messages are more than plain text here. The app already supports several operational payloads and transfer workflows.'; + + @override + String get wizardMessagingFeature1 => + 'Send direct messages, room posts, and channel traffic from one composer.'; + + @override + String get wizardMessagingFeature2 => + 'Create SAR updates and reusable SAR templates for common field reports.'; + + @override + String get wizardMessagingFeature3 => + 'Transfer voice sessions and images, with progress and airtime estimates in the UI.'; + + @override + String get wizardConnectDeviceTitle => 'Connect device'; + + @override + String get wizardConnectDeviceDescription => + 'Connect your MeshCore radio, choose a name, and apply a radio preset before continuing.'; + + @override + String get wizardSetupBadge => 'Setup'; + + @override + String get wizardOverviewBadge => 'Overview'; + + @override + String wizardConnectedToDevice(String deviceName) { + return 'Connected to $deviceName'; + } + + @override + String get wizardNoDeviceConnected => 'No device connected yet'; + + @override + String get wizardSkipForNow => 'Skip for now'; + + @override + String get wizardDeviceNameLabel => 'Device name'; + + @override + String get wizardDeviceNameHelp => + 'This name is advertised to other MeshCore users.'; + + @override + String get wizardConfigRegionLabel => 'Config region'; + + @override + String get wizardConfigRegionHelp => + 'Uses the full official MeshCore preset list. Default is EU/UK (Narrow).'; + + @override + String get wizardPresetNote1 => + 'Make sure the selected preset matches your local radio regulations.'; + + @override + String get wizardPresetNote2 => + 'The list matches the official MeshCore config tool preset feed.'; + + @override + String get wizardPresetNote3 => + 'EU/UK (Narrow) stays selected by default for onboarding.'; + + @override + String get wizardSaving => 'Saving...'; + + @override + String get wizardSaveAndContinue => 'Save and continue'; + + @override + String get wizardEnterDeviceName => 'Enter a device name before continuing.'; + + @override + String wizardDeviceSetupSaved(String deviceName, String presetName) { + return 'Saved $deviceName with $presetName.'; + } + + @override + String get wizardNetworkTitle => 'Contacts, Rooms, and Repeaters'; + + @override + String get wizardNetworkDescription => + 'The Contacts tab organizes the network you discover and the routes you learn over time.'; + + @override + String get wizardNetworkFeature1 => + 'Review team members, repeaters, rooms, channels, and pending adverts in one list.'; + + @override + String get wizardNetworkFeature2 => + 'Use smart ping, room login, learned paths, and route reset tools when connectivity gets messy.'; + + @override + String get wizardNetworkFeature3 => + 'Create channels and manage network destinations without leaving the app.'; + + @override + String get wizardMapOpsTitle => 'Map, Trails, and Shared Geometry'; + + @override + String get wizardMapOpsDescription => + 'The app map is tied directly into messaging, tracking, and SAR overlays instead of being a separate viewer.'; + + @override + String get wizardMapOpsFeature1 => + 'Track your own position, teammate locations, and movement trails on the map.'; + + @override + String get wizardMapOpsFeature2 => + 'Open drawings from messages, preview them inline, and remove them from the map when needed.'; + + @override + String get wizardMapOpsFeature3 => + 'Use repeater map views and shared overlays to understand network reach in the field.'; + + @override + String get wizardToolsTitle => 'Tools Beyond Messaging'; + + @override + String get wizardToolsDescription => + 'There is more here than the four main tabs. The app also includes configuration, diagnostics, and optional sensor workflows.'; + + @override + String get wizardToolsFeature1 => + 'Open device config to change radio settings, telemetry, TX power, and companion details.'; + + @override + String get wizardToolsFeature2 => + 'Enable the Sensors tab when you want watched sensor dashboards and quick refresh actions.'; + + @override + String get wizardToolsFeature3 => + 'Use packet logs, spectrum scan, and developer diagnostics when troubleshooting the mesh.'; + + @override + String get contactInSensors => 'In Sensors'; + + @override + String get contactAddToSensors => 'Add to Sensors'; + + @override + String get contactSetPath => 'Set path'; + + @override + String contactAddedToSensors(String contactName) { + return '$contactName added to Sensors'; + } + + @override + String contactFailedToClearRoute(String error) { + return 'Failed to clear route: $error'; + } + + @override + String get contactRouteCleared => 'Route cleared'; + + @override + String contactRouteSet(String route) { + return 'Route set: $route'; + } + + @override + String contactFailedToSetRoute(String error) { + return 'Failed to set route: $error'; + } } diff --git a/lib/l10n/app_localizations_pt.dart b/lib/l10n/app_localizations_pt.dart index ba995bb..58fb669 100644 --- a/lib/l10n/app_localizations_pt.dart +++ b/lib/l10n/app_localizations_pt.dart @@ -1736,4 +1736,198 @@ class AppLocalizationsPt extends AppLocalizations { @override String get requestingVoice => 'Solicitando voz'; + + @override + String get device => 'device'; + + @override + String get change => 'Change'; + + @override + String get wizardOverviewDescription => + 'This app combines MeshCore messaging, SAR field updates, mapping, and device tools in one place.'; + + @override + String get wizardOverviewFeature1 => + 'Send direct, room, and channel messages from the main Messages tab.'; + + @override + String get wizardOverviewFeature2 => + 'Share SAR markers, map drawings, voice clips, and images over the mesh.'; + + @override + String get wizardOverviewFeature3 => + 'Connect over BLE or TCP, then manage the companion radio from inside the app.'; + + @override + String get wizardMessagingTitle => 'Messaging and Field Reports'; + + @override + String get wizardMessagingDescription => + 'Messages are more than plain text here. The app already supports several operational payloads and transfer workflows.'; + + @override + String get wizardMessagingFeature1 => + 'Send direct messages, room posts, and channel traffic from one composer.'; + + @override + String get wizardMessagingFeature2 => + 'Create SAR updates and reusable SAR templates for common field reports.'; + + @override + String get wizardMessagingFeature3 => + 'Transfer voice sessions and images, with progress and airtime estimates in the UI.'; + + @override + String get wizardConnectDeviceTitle => 'Connect device'; + + @override + String get wizardConnectDeviceDescription => + 'Connect your MeshCore radio, choose a name, and apply a radio preset before continuing.'; + + @override + String get wizardSetupBadge => 'Setup'; + + @override + String get wizardOverviewBadge => 'Overview'; + + @override + String wizardConnectedToDevice(String deviceName) { + return 'Connected to $deviceName'; + } + + @override + String get wizardNoDeviceConnected => 'No device connected yet'; + + @override + String get wizardSkipForNow => 'Skip for now'; + + @override + String get wizardDeviceNameLabel => 'Device name'; + + @override + String get wizardDeviceNameHelp => + 'This name is advertised to other MeshCore users.'; + + @override + String get wizardConfigRegionLabel => 'Config region'; + + @override + String get wizardConfigRegionHelp => + 'Uses the full official MeshCore preset list. Default is EU/UK (Narrow).'; + + @override + String get wizardPresetNote1 => + 'Make sure the selected preset matches your local radio regulations.'; + + @override + String get wizardPresetNote2 => + 'The list matches the official MeshCore config tool preset feed.'; + + @override + String get wizardPresetNote3 => + 'EU/UK (Narrow) stays selected by default for onboarding.'; + + @override + String get wizardSaving => 'Saving...'; + + @override + String get wizardSaveAndContinue => 'Save and continue'; + + @override + String get wizardEnterDeviceName => 'Enter a device name before continuing.'; + + @override + String wizardDeviceSetupSaved(String deviceName, String presetName) { + return 'Saved $deviceName with $presetName.'; + } + + @override + String get wizardNetworkTitle => 'Contacts, Rooms, and Repeaters'; + + @override + String get wizardNetworkDescription => + 'The Contacts tab organizes the network you discover and the routes you learn over time.'; + + @override + String get wizardNetworkFeature1 => + 'Review team members, repeaters, rooms, channels, and pending adverts in one list.'; + + @override + String get wizardNetworkFeature2 => + 'Use smart ping, room login, learned paths, and route reset tools when connectivity gets messy.'; + + @override + String get wizardNetworkFeature3 => + 'Create channels and manage network destinations without leaving the app.'; + + @override + String get wizardMapOpsTitle => 'Map, Trails, and Shared Geometry'; + + @override + String get wizardMapOpsDescription => + 'The app map is tied directly into messaging, tracking, and SAR overlays instead of being a separate viewer.'; + + @override + String get wizardMapOpsFeature1 => + 'Track your own position, teammate locations, and movement trails on the map.'; + + @override + String get wizardMapOpsFeature2 => + 'Open drawings from messages, preview them inline, and remove them from the map when needed.'; + + @override + String get wizardMapOpsFeature3 => + 'Use repeater map views and shared overlays to understand network reach in the field.'; + + @override + String get wizardToolsTitle => 'Tools Beyond Messaging'; + + @override + String get wizardToolsDescription => + 'There is more here than the four main tabs. The app also includes configuration, diagnostics, and optional sensor workflows.'; + + @override + String get wizardToolsFeature1 => + 'Open device config to change radio settings, telemetry, TX power, and companion details.'; + + @override + String get wizardToolsFeature2 => + 'Enable the Sensors tab when you want watched sensor dashboards and quick refresh actions.'; + + @override + String get wizardToolsFeature3 => + 'Use packet logs, spectrum scan, and developer diagnostics when troubleshooting the mesh.'; + + @override + String get contactInSensors => 'In Sensors'; + + @override + String get contactAddToSensors => 'Add to Sensors'; + + @override + String get contactSetPath => 'Set path'; + + @override + String contactAddedToSensors(String contactName) { + return '$contactName added to Sensors'; + } + + @override + String contactFailedToClearRoute(String error) { + return 'Failed to clear route: $error'; + } + + @override + String get contactRouteCleared => 'Route cleared'; + + @override + String contactRouteSet(String route) { + return 'Route set: $route'; + } + + @override + String contactFailedToSetRoute(String error) { + return 'Failed to set route: $error'; + } } diff --git a/lib/l10n/app_localizations_ru.dart b/lib/l10n/app_localizations_ru.dart index c415d11..0da8cc3 100644 --- a/lib/l10n/app_localizations_ru.dart +++ b/lib/l10n/app_localizations_ru.dart @@ -1726,4 +1726,198 @@ class AppLocalizationsRu extends AppLocalizations { @override String get requestingVoice => 'Запрос голоса'; + + @override + String get device => 'device'; + + @override + String get change => 'Change'; + + @override + String get wizardOverviewDescription => + 'This app combines MeshCore messaging, SAR field updates, mapping, and device tools in one place.'; + + @override + String get wizardOverviewFeature1 => + 'Send direct, room, and channel messages from the main Messages tab.'; + + @override + String get wizardOverviewFeature2 => + 'Share SAR markers, map drawings, voice clips, and images over the mesh.'; + + @override + String get wizardOverviewFeature3 => + 'Connect over BLE or TCP, then manage the companion radio from inside the app.'; + + @override + String get wizardMessagingTitle => 'Messaging and Field Reports'; + + @override + String get wizardMessagingDescription => + 'Messages are more than plain text here. The app already supports several operational payloads and transfer workflows.'; + + @override + String get wizardMessagingFeature1 => + 'Send direct messages, room posts, and channel traffic from one composer.'; + + @override + String get wizardMessagingFeature2 => + 'Create SAR updates and reusable SAR templates for common field reports.'; + + @override + String get wizardMessagingFeature3 => + 'Transfer voice sessions and images, with progress and airtime estimates in the UI.'; + + @override + String get wizardConnectDeviceTitle => 'Connect device'; + + @override + String get wizardConnectDeviceDescription => + 'Connect your MeshCore radio, choose a name, and apply a radio preset before continuing.'; + + @override + String get wizardSetupBadge => 'Setup'; + + @override + String get wizardOverviewBadge => 'Overview'; + + @override + String wizardConnectedToDevice(String deviceName) { + return 'Connected to $deviceName'; + } + + @override + String get wizardNoDeviceConnected => 'No device connected yet'; + + @override + String get wizardSkipForNow => 'Skip for now'; + + @override + String get wizardDeviceNameLabel => 'Device name'; + + @override + String get wizardDeviceNameHelp => + 'This name is advertised to other MeshCore users.'; + + @override + String get wizardConfigRegionLabel => 'Config region'; + + @override + String get wizardConfigRegionHelp => + 'Uses the full official MeshCore preset list. Default is EU/UK (Narrow).'; + + @override + String get wizardPresetNote1 => + 'Make sure the selected preset matches your local radio regulations.'; + + @override + String get wizardPresetNote2 => + 'The list matches the official MeshCore config tool preset feed.'; + + @override + String get wizardPresetNote3 => + 'EU/UK (Narrow) stays selected by default for onboarding.'; + + @override + String get wizardSaving => 'Saving...'; + + @override + String get wizardSaveAndContinue => 'Save and continue'; + + @override + String get wizardEnterDeviceName => 'Enter a device name before continuing.'; + + @override + String wizardDeviceSetupSaved(String deviceName, String presetName) { + return 'Saved $deviceName with $presetName.'; + } + + @override + String get wizardNetworkTitle => 'Contacts, Rooms, and Repeaters'; + + @override + String get wizardNetworkDescription => + 'The Contacts tab organizes the network you discover and the routes you learn over time.'; + + @override + String get wizardNetworkFeature1 => + 'Review team members, repeaters, rooms, channels, and pending adverts in one list.'; + + @override + String get wizardNetworkFeature2 => + 'Use smart ping, room login, learned paths, and route reset tools when connectivity gets messy.'; + + @override + String get wizardNetworkFeature3 => + 'Create channels and manage network destinations without leaving the app.'; + + @override + String get wizardMapOpsTitle => 'Map, Trails, and Shared Geometry'; + + @override + String get wizardMapOpsDescription => + 'The app map is tied directly into messaging, tracking, and SAR overlays instead of being a separate viewer.'; + + @override + String get wizardMapOpsFeature1 => + 'Track your own position, teammate locations, and movement trails on the map.'; + + @override + String get wizardMapOpsFeature2 => + 'Open drawings from messages, preview them inline, and remove them from the map when needed.'; + + @override + String get wizardMapOpsFeature3 => + 'Use repeater map views and shared overlays to understand network reach in the field.'; + + @override + String get wizardToolsTitle => 'Tools Beyond Messaging'; + + @override + String get wizardToolsDescription => + 'There is more here than the four main tabs. The app also includes configuration, diagnostics, and optional sensor workflows.'; + + @override + String get wizardToolsFeature1 => + 'Open device config to change radio settings, telemetry, TX power, and companion details.'; + + @override + String get wizardToolsFeature2 => + 'Enable the Sensors tab when you want watched sensor dashboards and quick refresh actions.'; + + @override + String get wizardToolsFeature3 => + 'Use packet logs, spectrum scan, and developer diagnostics when troubleshooting the mesh.'; + + @override + String get contactInSensors => 'In Sensors'; + + @override + String get contactAddToSensors => 'Add to Sensors'; + + @override + String get contactSetPath => 'Set path'; + + @override + String contactAddedToSensors(String contactName) { + return '$contactName added to Sensors'; + } + + @override + String contactFailedToClearRoute(String error) { + return 'Failed to clear route: $error'; + } + + @override + String get contactRouteCleared => 'Route cleared'; + + @override + String contactRouteSet(String route) { + return 'Route set: $route'; + } + + @override + String contactFailedToSetRoute(String error) { + return 'Failed to set route: $error'; + } } diff --git a/lib/l10n/app_localizations_sl.dart b/lib/l10n/app_localizations_sl.dart index ba716ae..87fee17 100644 --- a/lib/l10n/app_localizations_sl.dart +++ b/lib/l10n/app_localizations_sl.dart @@ -1718,4 +1718,198 @@ class AppLocalizationsSl extends AppLocalizations { @override String get requestingVoice => 'Zahteva za glasom'; + + @override + String get device => 'naprava'; + + @override + String get change => 'Spremeni'; + + @override + String get wizardOverviewDescription => + 'Ta aplikacija združuje sporočanje MeshCore, terenske SAR posodobitve, zemljevide in orodja za napravo na enem mestu.'; + + @override + String get wizardOverviewFeature1 => + 'Pošiljajte neposredna sporočila, objave v sobah in sporočila na kanalih iz glavnega zavihka Sporočila.'; + + @override + String get wizardOverviewFeature2 => + 'Delite SAR označevalce, risbe zemljevida, glasovne posnetke in slike prek mesh omrežja.'; + + @override + String get wizardOverviewFeature3 => + 'Povežite se prek BLE ali TCP in nato upravljajte spremljevalni radio kar iz aplikacije.'; + + @override + String get wizardMessagingTitle => 'Sporočanje in terenska poročila'; + + @override + String get wizardMessagingDescription => + 'Sporočila tukaj niso le navadno besedilo. Aplikacija že podpira več operativnih vrst vsebin in prenosnih tokov.'; + + @override + String get wizardMessagingFeature1 => + 'Pošiljajte neposredna sporočila, objave v sobah in promet na kanalih iz enega urejevalnika.'; + + @override + String get wizardMessagingFeature2 => + 'Ustvarjajte SAR posodobitve in večkrat uporabne SAR predloge za pogosta terenska poročila.'; + + @override + String get wizardMessagingFeature3 => + 'Prenašajte glasovne seje in slike, vmesnik pa prikazuje napredek in oceno časa prenosa.'; + + @override + String get wizardConnectDeviceTitle => 'Poveži napravo'; + + @override + String get wizardConnectDeviceDescription => + 'Povežite svoj MeshCore radio, izberite ime in uporabite radijski prednastavljeni profil, preden nadaljujete.'; + + @override + String get wizardSetupBadge => 'Nastavitev'; + + @override + String get wizardOverviewBadge => 'Pregled'; + + @override + String wizardConnectedToDevice(String deviceName) { + return 'Povezano z: $deviceName'; + } + + @override + String get wizardNoDeviceConnected => 'Nobena naprava še ni povezana'; + + @override + String get wizardSkipForNow => 'Za zdaj preskoči'; + + @override + String get wizardDeviceNameLabel => 'Ime naprave'; + + @override + String get wizardDeviceNameHelp => + 'To ime se oglašuje drugim uporabnikom MeshCore.'; + + @override + String get wizardConfigRegionLabel => 'Konfiguracijska regija'; + + @override + String get wizardConfigRegionHelp => + 'Uporabi celoten uradni seznam prednastavitev MeshCore. Privzeto je izbran EU/UK (Narrow).'; + + @override + String get wizardPresetNote1 => + 'Prepričajte se, da izbrana prednastavitev ustreza lokalnim radijskim predpisom.'; + + @override + String get wizardPresetNote2 => + 'Seznam ustreza uradnemu viru prednastavitev orodja MeshCore config.'; + + @override + String get wizardPresetNote3 => + 'Za uvajanje ostane privzeto izbran EU/UK (Narrow).'; + + @override + String get wizardSaving => 'Shranjujem...'; + + @override + String get wizardSaveAndContinue => 'Shrani in nadaljuj'; + + @override + String get wizardEnterDeviceName => 'Pred nadaljevanjem vnesite ime naprave.'; + + @override + String wizardDeviceSetupSaved(String deviceName, String presetName) { + return 'Shranjeno $deviceName z nastavitvijo $presetName.'; + } + + @override + String get wizardNetworkTitle => 'Stiki, sobe in repetitorji'; + + @override + String get wizardNetworkDescription => + 'Zavihek Stiki organizira omrežje, ki ga odkrijete, in poti, ki se jih aplikacija nauči skozi čas.'; + + @override + String get wizardNetworkFeature1 => + 'Na enem seznamu preglejte člane ekipe, repetitorje, sobe, kanale in čakajoče oglase.'; + + @override + String get wizardNetworkFeature2 => + 'Uporabite smart ping, prijavo v sobe, naučene poti in ponastavitev poti, ko povezljivost postane neurejena.'; + + @override + String get wizardNetworkFeature3 => + 'Ustvarjajte kanale in upravljajte omrežne cilje, ne da bi zapustili aplikacijo.'; + + @override + String get wizardMapOpsTitle => 'Zemljevid, sledi in deljena geometrija'; + + @override + String get wizardMapOpsDescription => + 'Zemljevid v aplikaciji je neposredno povezan s sporočanjem, sledenjem in SAR prekrivanji, namesto da bi bil le ločen pregledovalnik.'; + + @override + String get wizardMapOpsFeature1 => + 'Spremljajte svoj položaj, lokacije sotekmovalcev in gibanje sledi na zemljevidu.'; + + @override + String get wizardMapOpsFeature2 => + 'Odprite risbe iz sporočil, jih predoglejte v vrstici in jih po potrebi odstranite z zemljevida.'; + + @override + String get wizardMapOpsFeature3 => + 'Uporabite poglede repetitorjev in deljena prekrivanja za razumevanje dosega omrežja na terenu.'; + + @override + String get wizardToolsTitle => 'Orodja onkraj sporočanja'; + + @override + String get wizardToolsDescription => + 'Tu je več kot le štirje glavni zavihki. Aplikacija vključuje tudi konfiguracijo, diagnostiko in neobvezne senzorske poteke.'; + + @override + String get wizardToolsFeature1 => + 'Odprite nastavitve naprave za spremembo radijskih nastavitev, telemetrije, oddajne moči in podatkov spremljevalne naprave.'; + + @override + String get wizardToolsFeature2 => + 'Omogočite zavihek Senzorji, kadar želite nadzorne plošče in hitra osveževanja spremljanih senzorjev.'; + + @override + String get wizardToolsFeature3 => + 'Uporabite dnevnik paketov, pregled spektra in razvojno diagnostiko pri odpravljanju težav v mesh omrežju.'; + + @override + String get contactInSensors => 'V senzorjih'; + + @override + String get contactAddToSensors => 'Dodaj v senzorje'; + + @override + String get contactSetPath => 'Nastavi pot'; + + @override + String contactAddedToSensors(String contactName) { + return '$contactName dodan v senzorje'; + } + + @override + String contactFailedToClearRoute(String error) { + return 'Brisanje poti ni uspelo: $error'; + } + + @override + String get contactRouteCleared => 'Pot izbrisana'; + + @override + String contactRouteSet(String route) { + return 'Pot nastavljena: $route'; + } + + @override + String contactFailedToSetRoute(String error) { + return 'Nastavitev poti ni uspela: $error'; + } } diff --git a/lib/l10n/app_localizations_tr.dart b/lib/l10n/app_localizations_tr.dart index 1929f41..064ca2b 100644 --- a/lib/l10n/app_localizations_tr.dart +++ b/lib/l10n/app_localizations_tr.dart @@ -1720,4 +1720,198 @@ class AppLocalizationsTr extends AppLocalizations { @override String get requestingVoice => 'Ses isteniyor'; + + @override + String get device => 'device'; + + @override + String get change => 'Change'; + + @override + String get wizardOverviewDescription => + 'This app combines MeshCore messaging, SAR field updates, mapping, and device tools in one place.'; + + @override + String get wizardOverviewFeature1 => + 'Send direct, room, and channel messages from the main Messages tab.'; + + @override + String get wizardOverviewFeature2 => + 'Share SAR markers, map drawings, voice clips, and images over the mesh.'; + + @override + String get wizardOverviewFeature3 => + 'Connect over BLE or TCP, then manage the companion radio from inside the app.'; + + @override + String get wizardMessagingTitle => 'Messaging and Field Reports'; + + @override + String get wizardMessagingDescription => + 'Messages are more than plain text here. The app already supports several operational payloads and transfer workflows.'; + + @override + String get wizardMessagingFeature1 => + 'Send direct messages, room posts, and channel traffic from one composer.'; + + @override + String get wizardMessagingFeature2 => + 'Create SAR updates and reusable SAR templates for common field reports.'; + + @override + String get wizardMessagingFeature3 => + 'Transfer voice sessions and images, with progress and airtime estimates in the UI.'; + + @override + String get wizardConnectDeviceTitle => 'Connect device'; + + @override + String get wizardConnectDeviceDescription => + 'Connect your MeshCore radio, choose a name, and apply a radio preset before continuing.'; + + @override + String get wizardSetupBadge => 'Setup'; + + @override + String get wizardOverviewBadge => 'Overview'; + + @override + String wizardConnectedToDevice(String deviceName) { + return 'Connected to $deviceName'; + } + + @override + String get wizardNoDeviceConnected => 'No device connected yet'; + + @override + String get wizardSkipForNow => 'Skip for now'; + + @override + String get wizardDeviceNameLabel => 'Device name'; + + @override + String get wizardDeviceNameHelp => + 'This name is advertised to other MeshCore users.'; + + @override + String get wizardConfigRegionLabel => 'Config region'; + + @override + String get wizardConfigRegionHelp => + 'Uses the full official MeshCore preset list. Default is EU/UK (Narrow).'; + + @override + String get wizardPresetNote1 => + 'Make sure the selected preset matches your local radio regulations.'; + + @override + String get wizardPresetNote2 => + 'The list matches the official MeshCore config tool preset feed.'; + + @override + String get wizardPresetNote3 => + 'EU/UK (Narrow) stays selected by default for onboarding.'; + + @override + String get wizardSaving => 'Saving...'; + + @override + String get wizardSaveAndContinue => 'Save and continue'; + + @override + String get wizardEnterDeviceName => 'Enter a device name before continuing.'; + + @override + String wizardDeviceSetupSaved(String deviceName, String presetName) { + return 'Saved $deviceName with $presetName.'; + } + + @override + String get wizardNetworkTitle => 'Contacts, Rooms, and Repeaters'; + + @override + String get wizardNetworkDescription => + 'The Contacts tab organizes the network you discover and the routes you learn over time.'; + + @override + String get wizardNetworkFeature1 => + 'Review team members, repeaters, rooms, channels, and pending adverts in one list.'; + + @override + String get wizardNetworkFeature2 => + 'Use smart ping, room login, learned paths, and route reset tools when connectivity gets messy.'; + + @override + String get wizardNetworkFeature3 => + 'Create channels and manage network destinations without leaving the app.'; + + @override + String get wizardMapOpsTitle => 'Map, Trails, and Shared Geometry'; + + @override + String get wizardMapOpsDescription => + 'The app map is tied directly into messaging, tracking, and SAR overlays instead of being a separate viewer.'; + + @override + String get wizardMapOpsFeature1 => + 'Track your own position, teammate locations, and movement trails on the map.'; + + @override + String get wizardMapOpsFeature2 => + 'Open drawings from messages, preview them inline, and remove them from the map when needed.'; + + @override + String get wizardMapOpsFeature3 => + 'Use repeater map views and shared overlays to understand network reach in the field.'; + + @override + String get wizardToolsTitle => 'Tools Beyond Messaging'; + + @override + String get wizardToolsDescription => + 'There is more here than the four main tabs. The app also includes configuration, diagnostics, and optional sensor workflows.'; + + @override + String get wizardToolsFeature1 => + 'Open device config to change radio settings, telemetry, TX power, and companion details.'; + + @override + String get wizardToolsFeature2 => + 'Enable the Sensors tab when you want watched sensor dashboards and quick refresh actions.'; + + @override + String get wizardToolsFeature3 => + 'Use packet logs, spectrum scan, and developer diagnostics when troubleshooting the mesh.'; + + @override + String get contactInSensors => 'In Sensors'; + + @override + String get contactAddToSensors => 'Add to Sensors'; + + @override + String get contactSetPath => 'Set path'; + + @override + String contactAddedToSensors(String contactName) { + return '$contactName added to Sensors'; + } + + @override + String contactFailedToClearRoute(String error) { + return 'Failed to clear route: $error'; + } + + @override + String get contactRouteCleared => 'Route cleared'; + + @override + String contactRouteSet(String route) { + return 'Route set: $route'; + } + + @override + String contactFailedToSetRoute(String error) { + return 'Failed to set route: $error'; + } } diff --git a/lib/l10n/app_localizations_uk.dart b/lib/l10n/app_localizations_uk.dart index 2c44003..beabcff 100644 --- a/lib/l10n/app_localizations_uk.dart +++ b/lib/l10n/app_localizations_uk.dart @@ -1732,4 +1732,198 @@ class AppLocalizationsUk extends AppLocalizations { @override String get requestingVoice => 'Запит голосу'; + + @override + String get device => 'device'; + + @override + String get change => 'Change'; + + @override + String get wizardOverviewDescription => + 'This app combines MeshCore messaging, SAR field updates, mapping, and device tools in one place.'; + + @override + String get wizardOverviewFeature1 => + 'Send direct, room, and channel messages from the main Messages tab.'; + + @override + String get wizardOverviewFeature2 => + 'Share SAR markers, map drawings, voice clips, and images over the mesh.'; + + @override + String get wizardOverviewFeature3 => + 'Connect over BLE or TCP, then manage the companion radio from inside the app.'; + + @override + String get wizardMessagingTitle => 'Messaging and Field Reports'; + + @override + String get wizardMessagingDescription => + 'Messages are more than plain text here. The app already supports several operational payloads and transfer workflows.'; + + @override + String get wizardMessagingFeature1 => + 'Send direct messages, room posts, and channel traffic from one composer.'; + + @override + String get wizardMessagingFeature2 => + 'Create SAR updates and reusable SAR templates for common field reports.'; + + @override + String get wizardMessagingFeature3 => + 'Transfer voice sessions and images, with progress and airtime estimates in the UI.'; + + @override + String get wizardConnectDeviceTitle => 'Connect device'; + + @override + String get wizardConnectDeviceDescription => + 'Connect your MeshCore radio, choose a name, and apply a radio preset before continuing.'; + + @override + String get wizardSetupBadge => 'Setup'; + + @override + String get wizardOverviewBadge => 'Overview'; + + @override + String wizardConnectedToDevice(String deviceName) { + return 'Connected to $deviceName'; + } + + @override + String get wizardNoDeviceConnected => 'No device connected yet'; + + @override + String get wizardSkipForNow => 'Skip for now'; + + @override + String get wizardDeviceNameLabel => 'Device name'; + + @override + String get wizardDeviceNameHelp => + 'This name is advertised to other MeshCore users.'; + + @override + String get wizardConfigRegionLabel => 'Config region'; + + @override + String get wizardConfigRegionHelp => + 'Uses the full official MeshCore preset list. Default is EU/UK (Narrow).'; + + @override + String get wizardPresetNote1 => + 'Make sure the selected preset matches your local radio regulations.'; + + @override + String get wizardPresetNote2 => + 'The list matches the official MeshCore config tool preset feed.'; + + @override + String get wizardPresetNote3 => + 'EU/UK (Narrow) stays selected by default for onboarding.'; + + @override + String get wizardSaving => 'Saving...'; + + @override + String get wizardSaveAndContinue => 'Save and continue'; + + @override + String get wizardEnterDeviceName => 'Enter a device name before continuing.'; + + @override + String wizardDeviceSetupSaved(String deviceName, String presetName) { + return 'Saved $deviceName with $presetName.'; + } + + @override + String get wizardNetworkTitle => 'Contacts, Rooms, and Repeaters'; + + @override + String get wizardNetworkDescription => + 'The Contacts tab organizes the network you discover and the routes you learn over time.'; + + @override + String get wizardNetworkFeature1 => + 'Review team members, repeaters, rooms, channels, and pending adverts in one list.'; + + @override + String get wizardNetworkFeature2 => + 'Use smart ping, room login, learned paths, and route reset tools when connectivity gets messy.'; + + @override + String get wizardNetworkFeature3 => + 'Create channels and manage network destinations without leaving the app.'; + + @override + String get wizardMapOpsTitle => 'Map, Trails, and Shared Geometry'; + + @override + String get wizardMapOpsDescription => + 'The app map is tied directly into messaging, tracking, and SAR overlays instead of being a separate viewer.'; + + @override + String get wizardMapOpsFeature1 => + 'Track your own position, teammate locations, and movement trails on the map.'; + + @override + String get wizardMapOpsFeature2 => + 'Open drawings from messages, preview them inline, and remove them from the map when needed.'; + + @override + String get wizardMapOpsFeature3 => + 'Use repeater map views and shared overlays to understand network reach in the field.'; + + @override + String get wizardToolsTitle => 'Tools Beyond Messaging'; + + @override + String get wizardToolsDescription => + 'There is more here than the four main tabs. The app also includes configuration, diagnostics, and optional sensor workflows.'; + + @override + String get wizardToolsFeature1 => + 'Open device config to change radio settings, telemetry, TX power, and companion details.'; + + @override + String get wizardToolsFeature2 => + 'Enable the Sensors tab when you want watched sensor dashboards and quick refresh actions.'; + + @override + String get wizardToolsFeature3 => + 'Use packet logs, spectrum scan, and developer diagnostics when troubleshooting the mesh.'; + + @override + String get contactInSensors => 'In Sensors'; + + @override + String get contactAddToSensors => 'Add to Sensors'; + + @override + String get contactSetPath => 'Set path'; + + @override + String contactAddedToSensors(String contactName) { + return '$contactName added to Sensors'; + } + + @override + String contactFailedToClearRoute(String error) { + return 'Failed to clear route: $error'; + } + + @override + String get contactRouteCleared => 'Route cleared'; + + @override + String contactRouteSet(String route) { + return 'Route set: $route'; + } + + @override + String contactFailedToSetRoute(String error) { + return 'Failed to set route: $error'; + } } diff --git a/lib/l10n/app_localizations_zh.dart b/lib/l10n/app_localizations_zh.dart index 065149f..376608a 100644 --- a/lib/l10n/app_localizations_zh.dart +++ b/lib/l10n/app_localizations_zh.dart @@ -1656,4 +1656,198 @@ class AppLocalizationsZh extends AppLocalizations { @override String get requestingVoice => '正在请求语音'; + + @override + String get device => 'device'; + + @override + String get change => 'Change'; + + @override + String get wizardOverviewDescription => + 'This app combines MeshCore messaging, SAR field updates, mapping, and device tools in one place.'; + + @override + String get wizardOverviewFeature1 => + 'Send direct, room, and channel messages from the main Messages tab.'; + + @override + String get wizardOverviewFeature2 => + 'Share SAR markers, map drawings, voice clips, and images over the mesh.'; + + @override + String get wizardOverviewFeature3 => + 'Connect over BLE or TCP, then manage the companion radio from inside the app.'; + + @override + String get wizardMessagingTitle => 'Messaging and Field Reports'; + + @override + String get wizardMessagingDescription => + 'Messages are more than plain text here. The app already supports several operational payloads and transfer workflows.'; + + @override + String get wizardMessagingFeature1 => + 'Send direct messages, room posts, and channel traffic from one composer.'; + + @override + String get wizardMessagingFeature2 => + 'Create SAR updates and reusable SAR templates for common field reports.'; + + @override + String get wizardMessagingFeature3 => + 'Transfer voice sessions and images, with progress and airtime estimates in the UI.'; + + @override + String get wizardConnectDeviceTitle => 'Connect device'; + + @override + String get wizardConnectDeviceDescription => + 'Connect your MeshCore radio, choose a name, and apply a radio preset before continuing.'; + + @override + String get wizardSetupBadge => 'Setup'; + + @override + String get wizardOverviewBadge => 'Overview'; + + @override + String wizardConnectedToDevice(String deviceName) { + return 'Connected to $deviceName'; + } + + @override + String get wizardNoDeviceConnected => 'No device connected yet'; + + @override + String get wizardSkipForNow => 'Skip for now'; + + @override + String get wizardDeviceNameLabel => 'Device name'; + + @override + String get wizardDeviceNameHelp => + 'This name is advertised to other MeshCore users.'; + + @override + String get wizardConfigRegionLabel => 'Config region'; + + @override + String get wizardConfigRegionHelp => + 'Uses the full official MeshCore preset list. Default is EU/UK (Narrow).'; + + @override + String get wizardPresetNote1 => + 'Make sure the selected preset matches your local radio regulations.'; + + @override + String get wizardPresetNote2 => + 'The list matches the official MeshCore config tool preset feed.'; + + @override + String get wizardPresetNote3 => + 'EU/UK (Narrow) stays selected by default for onboarding.'; + + @override + String get wizardSaving => 'Saving...'; + + @override + String get wizardSaveAndContinue => 'Save and continue'; + + @override + String get wizardEnterDeviceName => 'Enter a device name before continuing.'; + + @override + String wizardDeviceSetupSaved(String deviceName, String presetName) { + return 'Saved $deviceName with $presetName.'; + } + + @override + String get wizardNetworkTitle => 'Contacts, Rooms, and Repeaters'; + + @override + String get wizardNetworkDescription => + 'The Contacts tab organizes the network you discover and the routes you learn over time.'; + + @override + String get wizardNetworkFeature1 => + 'Review team members, repeaters, rooms, channels, and pending adverts in one list.'; + + @override + String get wizardNetworkFeature2 => + 'Use smart ping, room login, learned paths, and route reset tools when connectivity gets messy.'; + + @override + String get wizardNetworkFeature3 => + 'Create channels and manage network destinations without leaving the app.'; + + @override + String get wizardMapOpsTitle => 'Map, Trails, and Shared Geometry'; + + @override + String get wizardMapOpsDescription => + 'The app map is tied directly into messaging, tracking, and SAR overlays instead of being a separate viewer.'; + + @override + String get wizardMapOpsFeature1 => + 'Track your own position, teammate locations, and movement trails on the map.'; + + @override + String get wizardMapOpsFeature2 => + 'Open drawings from messages, preview them inline, and remove them from the map when needed.'; + + @override + String get wizardMapOpsFeature3 => + 'Use repeater map views and shared overlays to understand network reach in the field.'; + + @override + String get wizardToolsTitle => 'Tools Beyond Messaging'; + + @override + String get wizardToolsDescription => + 'There is more here than the four main tabs. The app also includes configuration, diagnostics, and optional sensor workflows.'; + + @override + String get wizardToolsFeature1 => + 'Open device config to change radio settings, telemetry, TX power, and companion details.'; + + @override + String get wizardToolsFeature2 => + 'Enable the Sensors tab when you want watched sensor dashboards and quick refresh actions.'; + + @override + String get wizardToolsFeature3 => + 'Use packet logs, spectrum scan, and developer diagnostics when troubleshooting the mesh.'; + + @override + String get contactInSensors => 'In Sensors'; + + @override + String get contactAddToSensors => 'Add to Sensors'; + + @override + String get contactSetPath => 'Set path'; + + @override + String contactAddedToSensors(String contactName) { + return '$contactName added to Sensors'; + } + + @override + String contactFailedToClearRoute(String error) { + return 'Failed to clear route: $error'; + } + + @override + String get contactRouteCleared => 'Route cleared'; + + @override + String contactRouteSet(String route) { + return 'Route set: $route'; + } + + @override + String contactFailedToSetRoute(String error) { + return 'Failed to set route: $error'; + } } diff --git a/lib/l10n/app_sl.arb b/lib/l10n/app_sl.arb index 16afca8..56a50b3 100644 --- a/lib/l10n/app_sl.arb +++ b/lib/l10n/app_sl.arb @@ -512,4 +512,57 @@ "cannotRetryMissingRecipient": "Ponovnega pošiljanja ni mogoče: informacije o prejemniku manjkajo", "voiceUnavailable": "Glas trenutno ni na voljo", "requestingVoice": "Zahteva za glasom" + , + "device": "naprava", + "change": "Spremeni", + "wizardOverviewDescription": "Ta aplikacija združuje sporočanje MeshCore, terenske SAR posodobitve, zemljevide in orodja za napravo na enem mestu.", + "wizardOverviewFeature1": "Pošiljajte neposredna sporočila, objave v sobah in sporočila na kanalih iz glavnega zavihka Sporočila.", + "wizardOverviewFeature2": "Delite SAR označevalce, risbe zemljevida, glasovne posnetke in slike prek mesh omrežja.", + "wizardOverviewFeature3": "Povežite se prek BLE ali TCP in nato upravljajte spremljevalni radio kar iz aplikacije.", + "wizardMessagingTitle": "Sporočanje in terenska poročila", + "wizardMessagingDescription": "Sporočila tukaj niso le navadno besedilo. Aplikacija že podpira več operativnih vrst vsebin in prenosnih tokov.", + "wizardMessagingFeature1": "Pošiljajte neposredna sporočila, objave v sobah in promet na kanalih iz enega urejevalnika.", + "wizardMessagingFeature2": "Ustvarjajte SAR posodobitve in večkrat uporabne SAR predloge za pogosta terenska poročila.", + "wizardMessagingFeature3": "Prenašajte glasovne seje in slike, vmesnik pa prikazuje napredek in oceno časa prenosa.", + "wizardConnectDeviceTitle": "Poveži napravo", + "wizardConnectDeviceDescription": "Povežite svoj MeshCore radio, izberite ime in uporabite radijski prednastavljeni profil, preden nadaljujete.", + "wizardSetupBadge": "Nastavitev", + "wizardOverviewBadge": "Pregled", + "wizardConnectedToDevice": "Povezano z: {deviceName}", + "wizardNoDeviceConnected": "Nobena naprava še ni povezana", + "wizardSkipForNow": "Za zdaj preskoči", + "wizardDeviceNameLabel": "Ime naprave", + "wizardDeviceNameHelp": "To ime se oglašuje drugim uporabnikom MeshCore.", + "wizardConfigRegionLabel": "Konfiguracijska regija", + "wizardConfigRegionHelp": "Uporabi celoten uradni seznam prednastavitev MeshCore. Privzeto je izbran EU/UK (Narrow).", + "wizardPresetNote1": "Prepričajte se, da izbrana prednastavitev ustreza lokalnim radijskim predpisom.", + "wizardPresetNote2": "Seznam ustreza uradnemu viru prednastavitev orodja MeshCore config.", + "wizardPresetNote3": "Za uvajanje ostane privzeto izbran EU/UK (Narrow).", + "wizardSaving": "Shranjujem...", + "wizardSaveAndContinue": "Shrani in nadaljuj", + "wizardEnterDeviceName": "Pred nadaljevanjem vnesite ime naprave.", + "wizardDeviceSetupSaved": "Shranjeno {deviceName} z nastavitvijo {presetName}.", + "wizardNetworkTitle": "Stiki, sobe in repetitorji", + "wizardNetworkDescription": "Zavihek Stiki organizira omrežje, ki ga odkrijete, in poti, ki se jih aplikacija nauči skozi čas.", + "wizardNetworkFeature1": "Na enem seznamu preglejte člane ekipe, repetitorje, sobe, kanale in čakajoče oglase.", + "wizardNetworkFeature2": "Uporabite smart ping, prijavo v sobe, naučene poti in ponastavitev poti, ko povezljivost postane neurejena.", + "wizardNetworkFeature3": "Ustvarjajte kanale in upravljajte omrežne cilje, ne da bi zapustili aplikacijo.", + "wizardMapOpsTitle": "Zemljevid, sledi in deljena geometrija", + "wizardMapOpsDescription": "Zemljevid v aplikaciji je neposredno povezan s sporočanjem, sledenjem in SAR prekrivanji, namesto da bi bil le ločen pregledovalnik.", + "wizardMapOpsFeature1": "Spremljajte svoj položaj, lokacije sotekmovalcev in gibanje sledi na zemljevidu.", + "wizardMapOpsFeature2": "Odprite risbe iz sporočil, jih predoglejte v vrstici in jih po potrebi odstranite z zemljevida.", + "wizardMapOpsFeature3": "Uporabite poglede repetitorjev in deljena prekrivanja za razumevanje dosega omrežja na terenu.", + "wizardToolsTitle": "Orodja onkraj sporočanja", + "wizardToolsDescription": "Tu je več kot le štirje glavni zavihki. Aplikacija vključuje tudi konfiguracijo, diagnostiko in neobvezne senzorske poteke.", + "wizardToolsFeature1": "Odprite nastavitve naprave za spremembo radijskih nastavitev, telemetrije, oddajne moči in podatkov spremljevalne naprave.", + "wizardToolsFeature2": "Omogočite zavihek Senzorji, kadar želite nadzorne plošče in hitra osveževanja spremljanih senzorjev.", + "wizardToolsFeature3": "Uporabite dnevnik paketov, pregled spektra in razvojno diagnostiko pri odpravljanju težav v mesh omrežju.", + "contactInSensors": "V senzorjih", + "contactAddToSensors": "Dodaj v senzorje", + "contactSetPath": "Nastavi pot", + "contactAddedToSensors": "{contactName} dodan v senzorje", + "contactFailedToClearRoute": "Brisanje poti ni uspelo: {error}", + "contactRouteCleared": "Pot izbrisana", + "contactRouteSet": "Pot nastavljena: {route}", + "contactFailedToSetRoute": "Nastavitev poti ni uspela: {error}" } diff --git a/lib/l10n/untranslated.json b/lib/l10n/untranslated.json index 9e26dfe..1422f66 100644 --- a/lib/l10n/untranslated.json +++ b/lib/l10n/untranslated.json @@ -1 +1,661 @@ -{} \ No newline at end of file +{ + "de": [ + "device", + "change", + "wizardOverviewDescription", + "wizardOverviewFeature1", + "wizardOverviewFeature2", + "wizardOverviewFeature3", + "wizardMessagingTitle", + "wizardMessagingDescription", + "wizardMessagingFeature1", + "wizardMessagingFeature2", + "wizardMessagingFeature3", + "wizardConnectDeviceTitle", + "wizardConnectDeviceDescription", + "wizardSetupBadge", + "wizardOverviewBadge", + "wizardConnectedToDevice", + "wizardNoDeviceConnected", + "wizardSkipForNow", + "wizardDeviceNameLabel", + "wizardDeviceNameHelp", + "wizardConfigRegionLabel", + "wizardConfigRegionHelp", + "wizardPresetNote1", + "wizardPresetNote2", + "wizardPresetNote3", + "wizardSaving", + "wizardSaveAndContinue", + "wizardEnterDeviceName", + "wizardDeviceSetupSaved", + "wizardNetworkTitle", + "wizardNetworkDescription", + "wizardNetworkFeature1", + "wizardNetworkFeature2", + "wizardNetworkFeature3", + "wizardMapOpsTitle", + "wizardMapOpsDescription", + "wizardMapOpsFeature1", + "wizardMapOpsFeature2", + "wizardMapOpsFeature3", + "wizardToolsTitle", + "wizardToolsDescription", + "wizardToolsFeature1", + "wizardToolsFeature2", + "wizardToolsFeature3", + "contactInSensors", + "contactAddToSensors", + "contactSetPath", + "contactAddedToSensors", + "contactFailedToClearRoute", + "contactRouteCleared", + "contactRouteSet", + "contactFailedToSetRoute" + ], + + "el": [ + "device", + "change", + "wizardOverviewDescription", + "wizardOverviewFeature1", + "wizardOverviewFeature2", + "wizardOverviewFeature3", + "wizardMessagingTitle", + "wizardMessagingDescription", + "wizardMessagingFeature1", + "wizardMessagingFeature2", + "wizardMessagingFeature3", + "wizardConnectDeviceTitle", + "wizardConnectDeviceDescription", + "wizardSetupBadge", + "wizardOverviewBadge", + "wizardConnectedToDevice", + "wizardNoDeviceConnected", + "wizardSkipForNow", + "wizardDeviceNameLabel", + "wizardDeviceNameHelp", + "wizardConfigRegionLabel", + "wizardConfigRegionHelp", + "wizardPresetNote1", + "wizardPresetNote2", + "wizardPresetNote3", + "wizardSaving", + "wizardSaveAndContinue", + "wizardEnterDeviceName", + "wizardDeviceSetupSaved", + "wizardNetworkTitle", + "wizardNetworkDescription", + "wizardNetworkFeature1", + "wizardNetworkFeature2", + "wizardNetworkFeature3", + "wizardMapOpsTitle", + "wizardMapOpsDescription", + "wizardMapOpsFeature1", + "wizardMapOpsFeature2", + "wizardMapOpsFeature3", + "wizardToolsTitle", + "wizardToolsDescription", + "wizardToolsFeature1", + "wizardToolsFeature2", + "wizardToolsFeature3", + "contactInSensors", + "contactAddToSensors", + "contactSetPath", + "contactAddedToSensors", + "contactFailedToClearRoute", + "contactRouteCleared", + "contactRouteSet", + "contactFailedToSetRoute" + ], + + "es": [ + "device", + "change", + "wizardOverviewDescription", + "wizardOverviewFeature1", + "wizardOverviewFeature2", + "wizardOverviewFeature3", + "wizardMessagingTitle", + "wizardMessagingDescription", + "wizardMessagingFeature1", + "wizardMessagingFeature2", + "wizardMessagingFeature3", + "wizardConnectDeviceTitle", + "wizardConnectDeviceDescription", + "wizardSetupBadge", + "wizardOverviewBadge", + "wizardConnectedToDevice", + "wizardNoDeviceConnected", + "wizardSkipForNow", + "wizardDeviceNameLabel", + "wizardDeviceNameHelp", + "wizardConfigRegionLabel", + "wizardConfigRegionHelp", + "wizardPresetNote1", + "wizardPresetNote2", + "wizardPresetNote3", + "wizardSaving", + "wizardSaveAndContinue", + "wizardEnterDeviceName", + "wizardDeviceSetupSaved", + "wizardNetworkTitle", + "wizardNetworkDescription", + "wizardNetworkFeature1", + "wizardNetworkFeature2", + "wizardNetworkFeature3", + "wizardMapOpsTitle", + "wizardMapOpsDescription", + "wizardMapOpsFeature1", + "wizardMapOpsFeature2", + "wizardMapOpsFeature3", + "wizardToolsTitle", + "wizardToolsDescription", + "wizardToolsFeature1", + "wizardToolsFeature2", + "wizardToolsFeature3", + "contactInSensors", + "contactAddToSensors", + "contactSetPath", + "contactAddedToSensors", + "contactFailedToClearRoute", + "contactRouteCleared", + "contactRouteSet", + "contactFailedToSetRoute" + ], + + "fr": [ + "device", + "change", + "wizardOverviewDescription", + "wizardOverviewFeature1", + "wizardOverviewFeature2", + "wizardOverviewFeature3", + "wizardMessagingTitle", + "wizardMessagingDescription", + "wizardMessagingFeature1", + "wizardMessagingFeature2", + "wizardMessagingFeature3", + "wizardConnectDeviceTitle", + "wizardConnectDeviceDescription", + "wizardSetupBadge", + "wizardOverviewBadge", + "wizardConnectedToDevice", + "wizardNoDeviceConnected", + "wizardSkipForNow", + "wizardDeviceNameLabel", + "wizardDeviceNameHelp", + "wizardConfigRegionLabel", + "wizardConfigRegionHelp", + "wizardPresetNote1", + "wizardPresetNote2", + "wizardPresetNote3", + "wizardSaving", + "wizardSaveAndContinue", + "wizardEnterDeviceName", + "wizardDeviceSetupSaved", + "wizardNetworkTitle", + "wizardNetworkDescription", + "wizardNetworkFeature1", + "wizardNetworkFeature2", + "wizardNetworkFeature3", + "wizardMapOpsTitle", + "wizardMapOpsDescription", + "wizardMapOpsFeature1", + "wizardMapOpsFeature2", + "wizardMapOpsFeature3", + "wizardToolsTitle", + "wizardToolsDescription", + "wizardToolsFeature1", + "wizardToolsFeature2", + "wizardToolsFeature3", + "contactInSensors", + "contactAddToSensors", + "contactSetPath", + "contactAddedToSensors", + "contactFailedToClearRoute", + "contactRouteCleared", + "contactRouteSet", + "contactFailedToSetRoute" + ], + + "hr": [ + "device", + "change", + "wizardOverviewDescription", + "wizardOverviewFeature1", + "wizardOverviewFeature2", + "wizardOverviewFeature3", + "wizardMessagingTitle", + "wizardMessagingDescription", + "wizardMessagingFeature1", + "wizardMessagingFeature2", + "wizardMessagingFeature3", + "wizardConnectDeviceTitle", + "wizardConnectDeviceDescription", + "wizardSetupBadge", + "wizardOverviewBadge", + "wizardConnectedToDevice", + "wizardNoDeviceConnected", + "wizardSkipForNow", + "wizardDeviceNameLabel", + "wizardDeviceNameHelp", + "wizardConfigRegionLabel", + "wizardConfigRegionHelp", + "wizardPresetNote1", + "wizardPresetNote2", + "wizardPresetNote3", + "wizardSaving", + "wizardSaveAndContinue", + "wizardEnterDeviceName", + "wizardDeviceSetupSaved", + "wizardNetworkTitle", + "wizardNetworkDescription", + "wizardNetworkFeature1", + "wizardNetworkFeature2", + "wizardNetworkFeature3", + "wizardMapOpsTitle", + "wizardMapOpsDescription", + "wizardMapOpsFeature1", + "wizardMapOpsFeature2", + "wizardMapOpsFeature3", + "wizardToolsTitle", + "wizardToolsDescription", + "wizardToolsFeature1", + "wizardToolsFeature2", + "wizardToolsFeature3", + "contactInSensors", + "contactAddToSensors", + "contactSetPath", + "contactAddedToSensors", + "contactFailedToClearRoute", + "contactRouteCleared", + "contactRouteSet", + "contactFailedToSetRoute" + ], + + "it": [ + "device", + "change", + "wizardOverviewDescription", + "wizardOverviewFeature1", + "wizardOverviewFeature2", + "wizardOverviewFeature3", + "wizardMessagingTitle", + "wizardMessagingDescription", + "wizardMessagingFeature1", + "wizardMessagingFeature2", + "wizardMessagingFeature3", + "wizardConnectDeviceTitle", + "wizardConnectDeviceDescription", + "wizardSetupBadge", + "wizardOverviewBadge", + "wizardConnectedToDevice", + "wizardNoDeviceConnected", + "wizardSkipForNow", + "wizardDeviceNameLabel", + "wizardDeviceNameHelp", + "wizardConfigRegionLabel", + "wizardConfigRegionHelp", + "wizardPresetNote1", + "wizardPresetNote2", + "wizardPresetNote3", + "wizardSaving", + "wizardSaveAndContinue", + "wizardEnterDeviceName", + "wizardDeviceSetupSaved", + "wizardNetworkTitle", + "wizardNetworkDescription", + "wizardNetworkFeature1", + "wizardNetworkFeature2", + "wizardNetworkFeature3", + "wizardMapOpsTitle", + "wizardMapOpsDescription", + "wizardMapOpsFeature1", + "wizardMapOpsFeature2", + "wizardMapOpsFeature3", + "wizardToolsTitle", + "wizardToolsDescription", + "wizardToolsFeature1", + "wizardToolsFeature2", + "wizardToolsFeature3", + "contactInSensors", + "contactAddToSensors", + "contactSetPath", + "contactAddedToSensors", + "contactFailedToClearRoute", + "contactRouteCleared", + "contactRouteSet", + "contactFailedToSetRoute" + ], + + "pl": [ + "device", + "change", + "wizardOverviewDescription", + "wizardOverviewFeature1", + "wizardOverviewFeature2", + "wizardOverviewFeature3", + "wizardMessagingTitle", + "wizardMessagingDescription", + "wizardMessagingFeature1", + "wizardMessagingFeature2", + "wizardMessagingFeature3", + "wizardConnectDeviceTitle", + "wizardConnectDeviceDescription", + "wizardSetupBadge", + "wizardOverviewBadge", + "wizardConnectedToDevice", + "wizardNoDeviceConnected", + "wizardSkipForNow", + "wizardDeviceNameLabel", + "wizardDeviceNameHelp", + "wizardConfigRegionLabel", + "wizardConfigRegionHelp", + "wizardPresetNote1", + "wizardPresetNote2", + "wizardPresetNote3", + "wizardSaving", + "wizardSaveAndContinue", + "wizardEnterDeviceName", + "wizardDeviceSetupSaved", + "wizardNetworkTitle", + "wizardNetworkDescription", + "wizardNetworkFeature1", + "wizardNetworkFeature2", + "wizardNetworkFeature3", + "wizardMapOpsTitle", + "wizardMapOpsDescription", + "wizardMapOpsFeature1", + "wizardMapOpsFeature2", + "wizardMapOpsFeature3", + "wizardToolsTitle", + "wizardToolsDescription", + "wizardToolsFeature1", + "wizardToolsFeature2", + "wizardToolsFeature3", + "contactInSensors", + "contactAddToSensors", + "contactSetPath", + "contactAddedToSensors", + "contactFailedToClearRoute", + "contactRouteCleared", + "contactRouteSet", + "contactFailedToSetRoute" + ], + + "pt": [ + "device", + "change", + "wizardOverviewDescription", + "wizardOverviewFeature1", + "wizardOverviewFeature2", + "wizardOverviewFeature3", + "wizardMessagingTitle", + "wizardMessagingDescription", + "wizardMessagingFeature1", + "wizardMessagingFeature2", + "wizardMessagingFeature3", + "wizardConnectDeviceTitle", + "wizardConnectDeviceDescription", + "wizardSetupBadge", + "wizardOverviewBadge", + "wizardConnectedToDevice", + "wizardNoDeviceConnected", + "wizardSkipForNow", + "wizardDeviceNameLabel", + "wizardDeviceNameHelp", + "wizardConfigRegionLabel", + "wizardConfigRegionHelp", + "wizardPresetNote1", + "wizardPresetNote2", + "wizardPresetNote3", + "wizardSaving", + "wizardSaveAndContinue", + "wizardEnterDeviceName", + "wizardDeviceSetupSaved", + "wizardNetworkTitle", + "wizardNetworkDescription", + "wizardNetworkFeature1", + "wizardNetworkFeature2", + "wizardNetworkFeature3", + "wizardMapOpsTitle", + "wizardMapOpsDescription", + "wizardMapOpsFeature1", + "wizardMapOpsFeature2", + "wizardMapOpsFeature3", + "wizardToolsTitle", + "wizardToolsDescription", + "wizardToolsFeature1", + "wizardToolsFeature2", + "wizardToolsFeature3", + "contactInSensors", + "contactAddToSensors", + "contactSetPath", + "contactAddedToSensors", + "contactFailedToClearRoute", + "contactRouteCleared", + "contactRouteSet", + "contactFailedToSetRoute" + ], + + "ru": [ + "device", + "change", + "wizardOverviewDescription", + "wizardOverviewFeature1", + "wizardOverviewFeature2", + "wizardOverviewFeature3", + "wizardMessagingTitle", + "wizardMessagingDescription", + "wizardMessagingFeature1", + "wizardMessagingFeature2", + "wizardMessagingFeature3", + "wizardConnectDeviceTitle", + "wizardConnectDeviceDescription", + "wizardSetupBadge", + "wizardOverviewBadge", + "wizardConnectedToDevice", + "wizardNoDeviceConnected", + "wizardSkipForNow", + "wizardDeviceNameLabel", + "wizardDeviceNameHelp", + "wizardConfigRegionLabel", + "wizardConfigRegionHelp", + "wizardPresetNote1", + "wizardPresetNote2", + "wizardPresetNote3", + "wizardSaving", + "wizardSaveAndContinue", + "wizardEnterDeviceName", + "wizardDeviceSetupSaved", + "wizardNetworkTitle", + "wizardNetworkDescription", + "wizardNetworkFeature1", + "wizardNetworkFeature2", + "wizardNetworkFeature3", + "wizardMapOpsTitle", + "wizardMapOpsDescription", + "wizardMapOpsFeature1", + "wizardMapOpsFeature2", + "wizardMapOpsFeature3", + "wizardToolsTitle", + "wizardToolsDescription", + "wizardToolsFeature1", + "wizardToolsFeature2", + "wizardToolsFeature3", + "contactInSensors", + "contactAddToSensors", + "contactSetPath", + "contactAddedToSensors", + "contactFailedToClearRoute", + "contactRouteCleared", + "contactRouteSet", + "contactFailedToSetRoute" + ], + + "tr": [ + "device", + "change", + "wizardOverviewDescription", + "wizardOverviewFeature1", + "wizardOverviewFeature2", + "wizardOverviewFeature3", + "wizardMessagingTitle", + "wizardMessagingDescription", + "wizardMessagingFeature1", + "wizardMessagingFeature2", + "wizardMessagingFeature3", + "wizardConnectDeviceTitle", + "wizardConnectDeviceDescription", + "wizardSetupBadge", + "wizardOverviewBadge", + "wizardConnectedToDevice", + "wizardNoDeviceConnected", + "wizardSkipForNow", + "wizardDeviceNameLabel", + "wizardDeviceNameHelp", + "wizardConfigRegionLabel", + "wizardConfigRegionHelp", + "wizardPresetNote1", + "wizardPresetNote2", + "wizardPresetNote3", + "wizardSaving", + "wizardSaveAndContinue", + "wizardEnterDeviceName", + "wizardDeviceSetupSaved", + "wizardNetworkTitle", + "wizardNetworkDescription", + "wizardNetworkFeature1", + "wizardNetworkFeature2", + "wizardNetworkFeature3", + "wizardMapOpsTitle", + "wizardMapOpsDescription", + "wizardMapOpsFeature1", + "wizardMapOpsFeature2", + "wizardMapOpsFeature3", + "wizardToolsTitle", + "wizardToolsDescription", + "wizardToolsFeature1", + "wizardToolsFeature2", + "wizardToolsFeature3", + "contactInSensors", + "contactAddToSensors", + "contactSetPath", + "contactAddedToSensors", + "contactFailedToClearRoute", + "contactRouteCleared", + "contactRouteSet", + "contactFailedToSetRoute" + ], + + "uk": [ + "device", + "change", + "wizardOverviewDescription", + "wizardOverviewFeature1", + "wizardOverviewFeature2", + "wizardOverviewFeature3", + "wizardMessagingTitle", + "wizardMessagingDescription", + "wizardMessagingFeature1", + "wizardMessagingFeature2", + "wizardMessagingFeature3", + "wizardConnectDeviceTitle", + "wizardConnectDeviceDescription", + "wizardSetupBadge", + "wizardOverviewBadge", + "wizardConnectedToDevice", + "wizardNoDeviceConnected", + "wizardSkipForNow", + "wizardDeviceNameLabel", + "wizardDeviceNameHelp", + "wizardConfigRegionLabel", + "wizardConfigRegionHelp", + "wizardPresetNote1", + "wizardPresetNote2", + "wizardPresetNote3", + "wizardSaving", + "wizardSaveAndContinue", + "wizardEnterDeviceName", + "wizardDeviceSetupSaved", + "wizardNetworkTitle", + "wizardNetworkDescription", + "wizardNetworkFeature1", + "wizardNetworkFeature2", + "wizardNetworkFeature3", + "wizardMapOpsTitle", + "wizardMapOpsDescription", + "wizardMapOpsFeature1", + "wizardMapOpsFeature2", + "wizardMapOpsFeature3", + "wizardToolsTitle", + "wizardToolsDescription", + "wizardToolsFeature1", + "wizardToolsFeature2", + "wizardToolsFeature3", + "contactInSensors", + "contactAddToSensors", + "contactSetPath", + "contactAddedToSensors", + "contactFailedToClearRoute", + "contactRouteCleared", + "contactRouteSet", + "contactFailedToSetRoute" + ], + + "zh": [ + "device", + "change", + "wizardOverviewDescription", + "wizardOverviewFeature1", + "wizardOverviewFeature2", + "wizardOverviewFeature3", + "wizardMessagingTitle", + "wizardMessagingDescription", + "wizardMessagingFeature1", + "wizardMessagingFeature2", + "wizardMessagingFeature3", + "wizardConnectDeviceTitle", + "wizardConnectDeviceDescription", + "wizardSetupBadge", + "wizardOverviewBadge", + "wizardConnectedToDevice", + "wizardNoDeviceConnected", + "wizardSkipForNow", + "wizardDeviceNameLabel", + "wizardDeviceNameHelp", + "wizardConfigRegionLabel", + "wizardConfigRegionHelp", + "wizardPresetNote1", + "wizardPresetNote2", + "wizardPresetNote3", + "wizardSaving", + "wizardSaveAndContinue", + "wizardEnterDeviceName", + "wizardDeviceSetupSaved", + "wizardNetworkTitle", + "wizardNetworkDescription", + "wizardNetworkFeature1", + "wizardNetworkFeature2", + "wizardNetworkFeature3", + "wizardMapOpsTitle", + "wizardMapOpsDescription", + "wizardMapOpsFeature1", + "wizardMapOpsFeature2", + "wizardMapOpsFeature3", + "wizardToolsTitle", + "wizardToolsDescription", + "wizardToolsFeature1", + "wizardToolsFeature2", + "wizardToolsFeature3", + "contactInSensors", + "contactAddToSensors", + "contactSetPath", + "contactAddedToSensors", + "contactFailedToClearRoute", + "contactRouteCleared", + "contactRouteSet", + "contactFailedToSetRoute" + ] +} diff --git a/lib/providers/app_provider.dart b/lib/providers/app_provider.dart index 49084fc..db7ae9b 100644 --- a/lib/providers/app_provider.dart +++ b/lib/providers/app_provider.dart @@ -574,8 +574,20 @@ class AppProvider with ChangeNotifier { connectionProvider.addListener(_handleConnectionStateChange); messagesProvider.resolveContactNameCallback = _resolveContactNameForNotification; - messagesProvider.resolveChannelNameCallback = - channelsProvider.getChannelDisplayName; + messagesProvider.resolveChannelNameCallback = (channelIdx) { + if (channelIdx == 0) { + return 'Public'; + } + + for (final channel in contactsProvider.channels) { + if (channel.publicKey.length > 1 && + channel.publicKey[1] == channelIdx) { + return channel.displayName; + } + } + + return channelsProvider.getChannelDisplayName(channelIdx); + }; voiceProvider.sendRawPacketCallback = ({ diff --git a/lib/providers/messages_provider.dart b/lib/providers/messages_provider.dart index 45e074e..c107a17 100644 --- a/lib/providers/messages_provider.dart +++ b/lib/providers/messages_provider.dart @@ -765,9 +765,17 @@ class MessagesProvider with ChangeNotifier { final idx = channelIdx ?? 0; final resolved = resolveChannelNameCallback?.call(idx).trim(); if (resolved != null && resolved.isNotEmpty) { + if (idx == 0 && resolved == 'Public') { + return _localizations?.publicChannel ?? resolved; + } return resolved; } - return idx == 0 ? 'Public' : 'Channel $idx'; + if (idx == 0) { + return _localizations?.publicChannel ?? 'Public'; + } + return _localizations != null + ? '${_localizations!.channel} $idx' + : 'Channel $idx'; } String _buildNotificationMessageText( diff --git a/lib/screens/welcome_wizard_screen.dart b/lib/screens/welcome_wizard_screen.dart index 56103a9..d9526f6 100644 --- a/lib/screens/welcome_wizard_screen.dart +++ b/lib/screens/welcome_wizard_screen.dart @@ -254,9 +254,9 @@ class _WelcomeWizardScreenState extends State { final trimmedName = _deviceNameController.text.trim(); if (trimmedName.isEmpty) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text('Enter a device name before continuing.')), - ); + ScaffoldMessenger.of( + context, + ).showSnackBar(SnackBar(content: Text(l10n.wizardEnterDeviceName))); return; } @@ -277,7 +277,9 @@ class _WelcomeWizardScreenState extends State { if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text('Saved $trimmedName with ${_selectedPreset.label}.'), + content: Text( + l10n.wizardDeviceSetupSaved(trimmedName, _selectedPreset.label), + ), backgroundColor: Colors.green, ), ); @@ -422,24 +424,20 @@ class _WelcomeWizardScreenState extends State { return _buildPage( icon: Icons.waving_hand, iconColor: Colors.orange, - title: 'Welcome to MeshCore SAR', - description: - 'This app combines MeshCore messaging, SAR field updates, mapping, and device tools in one place.', + title: l10n.wizardWelcomeTitle, + description: l10n.wizardOverviewDescription, features: [ _FeatureItem( icon: Icons.chat_bubble_outline, - text: - 'Send direct, room, and channel messages from the main Messages tab.', + text: l10n.wizardOverviewFeature1, ), _FeatureItem( icon: Icons.emergency_share, - text: - 'Share SAR markers, map drawings, voice clips, and images over the mesh.', + text: l10n.wizardOverviewFeature2, ), _FeatureItem( icon: Icons.settings_input_antenna, - text: - 'Connect over BLE or TCP, then manage the companion radio from inside the app.', + text: l10n.wizardOverviewFeature3, ), ], colorScheme: colorScheme, @@ -454,25 +452,12 @@ class _WelcomeWizardScreenState extends State { return _buildPage( icon: Icons.forum_rounded, iconColor: Colors.blue, - title: 'Messaging and Field Reports', - description: - 'Messages are more than plain text here. The app already supports several operational payloads and transfer workflows.', + title: l10n.wizardMessagingTitle, + description: l10n.wizardMessagingDescription, features: [ - _FeatureItem( - icon: Icons.chat, - text: - 'Send direct messages, room posts, and channel traffic from one composer.', - ), - _FeatureItem( - icon: Icons.campaign, - text: - 'Create SAR updates and reusable SAR templates for common field reports.', - ), - _FeatureItem( - icon: Icons.mic, - text: - 'Transfer voice sessions and images, with progress and airtime estimates in the UI.', - ), + _FeatureItem(icon: Icons.chat, text: l10n.wizardMessagingFeature1), + _FeatureItem(icon: Icons.campaign, text: l10n.wizardMessagingFeature2), + _FeatureItem(icon: Icons.mic, text: l10n.wizardMessagingFeature3), ], colorScheme: colorScheme, ); @@ -505,10 +490,9 @@ class _WelcomeWizardScreenState extends State { colorScheme: colorScheme, icon: Icons.bluetooth_connected, iconColor: Colors.green, - title: 'Connect device', - description: - 'Connect your MeshCore radio, choose a name, and apply a radio preset before continuing.', - badge: 'Setup', + title: l10n.wizardConnectDeviceTitle, + description: l10n.wizardConnectDeviceDescription, + badge: l10n.wizardSetupBadge, ), const SizedBox(height: 16), _buildContentCard( @@ -530,15 +514,19 @@ class _WelcomeWizardScreenState extends State { Expanded( child: Text( isConnected - ? 'Connected to ${connectedName ?? "device"}' - : 'No device connected yet', + ? l10n.wizardConnectedToDevice( + connectedName ?? l10n.device, + ) + : l10n.wizardNoDeviceConnected, style: Theme.of(context).textTheme.bodyMedium ?.copyWith(fontWeight: FontWeight.w600), ), ), TextButton( onPressed: _openConnectionDialog, - child: Text(isConnected ? 'Change' : l10n.connect), + child: Text( + isConnected ? l10n.change : l10n.connect, + ), ), ], ), @@ -546,7 +534,7 @@ class _WelcomeWizardScreenState extends State { alignment: Alignment.centerRight, child: TextButton( onPressed: _skipDeviceSetupStep, - child: const Text('Skip for now'), + child: Text(l10n.wizardSkipForNow), ), ), ], @@ -561,22 +549,20 @@ class _WelcomeWizardScreenState extends State { TextField( controller: _deviceNameController, textInputAction: TextInputAction.done, - decoration: const InputDecoration( - labelText: 'Device name', + decoration: InputDecoration( + labelText: l10n.wizardDeviceNameLabel, border: OutlineInputBorder(), - helperText: - 'This name is advertised to other MeshCore users.', + helperText: l10n.wizardDeviceNameHelp, ), ), const SizedBox(height: 12), DropdownButtonFormField<_RadioPreset>( initialValue: _selectedPreset, isExpanded: true, - decoration: const InputDecoration( - labelText: 'Config region', + decoration: InputDecoration( + labelText: l10n.wizardConfigRegionLabel, border: OutlineInputBorder(), - helperText: - 'Uses the full official MeshCore preset list. Default is EU/UK (Narrow).', + helperText: l10n.wizardConfigRegionHelp, ), items: _radioPresets .map( @@ -619,18 +605,15 @@ class _WelcomeWizardScreenState extends State { ...[ _FeatureItem( icon: Icons.rule, - text: - 'Make sure the selected preset matches your local radio regulations.', + text: l10n.wizardPresetNote1, ), _FeatureItem( icon: Icons.settings_input_antenna, - text: - 'The list matches the official MeshCore config tool preset feed.', + text: l10n.wizardPresetNote2, ), _FeatureItem( icon: Icons.public, - text: - 'EU/UK (Narrow) stays selected by default for onboarding.', + text: l10n.wizardPresetNote3, ), ].map( (feature) => Padding( @@ -661,9 +644,12 @@ class _WelcomeWizardScreenState extends State { .deviceInfo .isConnected; if (_isApplyingDeviceSetup) { - return 'Saving...'; + return AppLocalizations.of(context)!.wizardSaving; } - return isConnected ? 'Save and continue' : 'Connect device'; + final l10n = AppLocalizations.of(context)!; + return isConnected + ? l10n.wizardSaveAndContinue + : l10n.wizardConnectDeviceTitle; } Widget _buildChannelPage( @@ -674,25 +660,15 @@ class _WelcomeWizardScreenState extends State { return _buildPage( icon: Icons.groups_rounded, iconColor: Colors.purple, - title: 'Contacts, Rooms, and Repeaters', - description: - 'The Contacts tab organizes the network you discover and the routes you learn over time.', + title: l10n.wizardNetworkTitle, + description: l10n.wizardNetworkDescription, features: [ _FeatureItem( icon: Icons.person_add_alt_1, - text: - 'Review team members, repeaters, rooms, channels, and pending adverts in one list.', - ), - _FeatureItem( - icon: Icons.route, - text: - 'Use smart ping, room login, learned paths, and route reset tools when connectivity gets messy.', - ), - _FeatureItem( - icon: Icons.hub, - text: - 'Create channels and manage network destinations without leaving the app.', + text: l10n.wizardNetworkFeature1, ), + _FeatureItem(icon: Icons.route, text: l10n.wizardNetworkFeature2), + _FeatureItem(icon: Icons.hub, text: l10n.wizardNetworkFeature3), ], colorScheme: colorScheme, ); @@ -706,25 +682,12 @@ class _WelcomeWizardScreenState extends State { return _buildPage( icon: Icons.map_rounded, iconColor: Colors.teal, - title: 'Map, Trails, and Shared Geometry', - description: - 'The app map is tied directly into messaging, tracking, and SAR overlays instead of being a separate viewer.', + title: l10n.wizardMapOpsTitle, + description: l10n.wizardMapOpsDescription, features: [ - _FeatureItem( - icon: Icons.location_on, - text: - 'Track your own position, teammate locations, and movement trails on the map.', - ), - _FeatureItem( - icon: Icons.draw, - text: - 'Open drawings from messages, preview them inline, and remove them from the map when needed.', - ), - _FeatureItem( - icon: Icons.router, - text: - 'Use repeater map views and shared overlays to understand network reach in the field.', - ), + _FeatureItem(icon: Icons.location_on, text: l10n.wizardMapOpsFeature1), + _FeatureItem(icon: Icons.draw, text: l10n.wizardMapOpsFeature2), + _FeatureItem(icon: Icons.router, text: l10n.wizardMapOpsFeature3), ], colorScheme: colorScheme, ); @@ -738,24 +701,14 @@ class _WelcomeWizardScreenState extends State { return _buildPage( icon: Icons.tune_rounded, iconColor: Colors.red, - title: 'Tools Beyond Messaging', - description: - 'There is more here than the four main tabs. The app also includes configuration, diagnostics, and optional sensor workflows.', + title: l10n.wizardToolsTitle, + description: l10n.wizardToolsDescription, features: [ - _FeatureItem( - icon: Icons.settings, - text: - 'Open device config to change radio settings, telemetry, TX power, and companion details.', - ), - _FeatureItem( - icon: Icons.sensors, - text: - 'Enable the Sensors tab when you want watched sensor dashboards and quick refresh actions.', - ), + _FeatureItem(icon: Icons.settings, text: l10n.wizardToolsFeature1), + _FeatureItem(icon: Icons.sensors, text: l10n.wizardToolsFeature2), _FeatureItem( icon: Icons.analytics_outlined, - text: - 'Use packet logs, spectrum scan, and developer diagnostics when troubleshooting the mesh.', + text: l10n.wizardToolsFeature3, ), ], colorScheme: colorScheme, @@ -770,6 +723,7 @@ class _WelcomeWizardScreenState extends State { List<_FeatureItem>? features, required ColorScheme colorScheme, }) { + final l10n = AppLocalizations.of(context)!; return LayoutBuilder( builder: (context, constraints) => Center( child: ConstrainedBox( @@ -789,7 +743,7 @@ class _WelcomeWizardScreenState extends State { iconColor: iconColor, title: title, description: description, - badge: 'Overview', + badge: l10n.wizardOverviewBadge, ), if (features != null && features.isNotEmpty) ...[ const SizedBox(height: 18), diff --git a/lib/services/notification_service.dart b/lib/services/notification_service.dart index 0c6d5ad..7f25e80 100644 --- a/lib/services/notification_service.dart +++ b/lib/services/notification_service.dart @@ -402,10 +402,13 @@ class NotificationService { (DateTime.now().millisecondsSinceEpoch % 1000); // Build notification title and body + final resolvedChannelName = channelName?.trim().isNotEmpty == true + ? channelName!.trim() + : (localizations?.publicChannel ?? 'Public'); final title = isChannelMessage ? (localizations != null - ? '${localizations.channel}: ${channelName ?? "Public"}' - : 'Channel: ${channelName ?? "Public"}') + ? '${localizations.channel}: $resolvedChannelName' + : 'Channel: $resolvedChannelName') : (localizations != null ? '${localizations.newMessage} ${localizations.from} $senderName' : 'New message from $senderName'); @@ -550,7 +553,7 @@ class NotificationService { final title = localizations?.updateAvailable ?? 'App Update Available'; final body = localizations != null ? '${localizations.currentVersion}: $currentVersion\n' - '${localizations.latestVersion}: $latestVersion' + '${localizations.latestVersion}: $latestVersion' : 'Current: $currentVersion\nLatest: $latestVersion'; // Android notification details diff --git a/lib/widgets/contacts/contact_tile.dart b/lib/widgets/contacts/contact_tile.dart index 3d21450..827a3cf 100644 --- a/lib/widgets/contacts/contact_tile.dart +++ b/lib/widgets/contacts/contact_tile.dart @@ -341,7 +341,11 @@ class ContactTile extends StatelessWidget { leading: Icon( isInSensors ? Icons.sensors : Icons.sensors_outlined, ), - title: Text(isInSensors ? 'In Sensors' : 'Add to Sensors'), + title: Text( + isInSensors + ? l10n.contactInSensors + : l10n.contactAddToSensors, + ), enabled: !isInSensors, onTap: isInSensors ? null @@ -353,7 +357,7 @@ class ContactTile extends StatelessWidget { if (canSetPath) ListTile( leading: const Icon(Icons.alt_route), - title: const Text('Set path'), + title: Text(l10n.contactSetPath), onTap: () { Navigator.pop(sheetContext); _showSetRouteDialog(context, contact); @@ -408,7 +412,13 @@ class ContactTile extends StatelessWidget { } ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text('${contact.displayName} added to Sensors')), + SnackBar( + content: Text( + AppLocalizations.of( + context, + )!.contactAddedToSensors(contact.displayName), + ), + ), ); } @@ -534,15 +544,22 @@ class ContactTile extends StatelessWidget { paddedPathBytes: previousPathBytes, ); if (context.mounted) { - ToastLogger.error(context, 'Failed to clear route: $error'); + ToastLogger.error( + context, + AppLocalizations.of( + context, + )!.contactFailedToClearRoute(error.toString()), + ); } return; } if (context.mounted) { - ScaffoldMessenger.of( - context, - ).showSnackBar(const SnackBar(content: Text('Route cleared'))); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(AppLocalizations.of(context)!.contactRouteCleared), + ), + ); } return; } @@ -562,7 +579,13 @@ class ContactTile extends StatelessWidget { ); if (context.mounted) { ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text('Route set: ${parsedRoute.canonicalText}')), + SnackBar( + content: Text( + AppLocalizations.of( + context, + )!.contactRouteSet(parsedRoute.canonicalText), + ), + ), ); } } catch (error) { @@ -572,7 +595,12 @@ class ContactTile extends StatelessWidget { paddedPathBytes: previousPathBytes, ); if (context.mounted) { - ToastLogger.error(context, 'Failed to set route: $error'); + ToastLogger.error( + context, + AppLocalizations.of( + context, + )!.contactFailedToSetRoute(error.toString()), + ); } } } diff --git a/pubspec.yaml b/pubspec.yaml index 93e578c..7f755e5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 2026.0310.2+25 +version: 2026.0311.1+26 environment: sdk: ^3.9.2