mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-06-14 22:55:12 +10:00
Compare commits
38 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4239fb11ed | |||
| 5fae2e5f73 | |||
| 947fafbbb7 | |||
| 72f0aa7208 | |||
| f87d4896ab | |||
| 9250dfec31 | |||
| 37db955ab2 | |||
| 739d9475c0 | |||
| b526175be4 | |||
| 73081862ad | |||
| fac062a100 | |||
| ef6bd78632 | |||
| 01c8390989 | |||
| c05f813d65 | |||
| c52b19b09f | |||
| 6a666839b6 | |||
| bc77f7e287 | |||
| 9332d8126f | |||
| 9ce00556ec | |||
| 4995f5f380 | |||
| 4e6e7b6061 | |||
| aa350aa4ae | |||
| dfd38b19e9 | |||
| 4afab3f629 | |||
| 67816130ac | |||
| d573f0c312 | |||
| 5b699cd624 | |||
| a4d3d248a5 | |||
| 2a3f2b3a24 | |||
| 675083fa01 | |||
| 5fc4b80b16 | |||
| 84a32c1e67 | |||
| 607583060a | |||
| 71cf556b61 | |||
| c26174ad18 | |||
| 04021a39a1 | |||
| fe23e9f7a0 | |||
| d7ec1876af |
@@ -65,6 +65,7 @@ secrets.dart
|
||||
**/ios/Flutter/Flutter.podspec
|
||||
|
||||
# Android
|
||||
.gradle/
|
||||
**/android/.gradle/
|
||||
**/android/captures/
|
||||
**/android/local.properties
|
||||
|
||||
@@ -83,5 +83,5 @@ flutter {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
|
||||
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
|
||||
}
|
||||
|
||||
Generated
+61
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1770562336,
|
||||
"narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "d6c71932130818840fc8fe9509cf50be8c64634f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
{
|
||||
description = "MeshCore Flutter Application";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
in
|
||||
{
|
||||
devShells.default = pkgs.mkShell {
|
||||
buildInputs = with pkgs; [
|
||||
# Flutter and Dart
|
||||
flutter
|
||||
dart
|
||||
|
||||
# Java (required for Android development)
|
||||
jdk17
|
||||
|
||||
# Android development tools
|
||||
android-tools
|
||||
gradle
|
||||
|
||||
# For the shell hook to set up the environment for Flutter development
|
||||
gtk3
|
||||
glib
|
||||
sysprof
|
||||
libclang
|
||||
cmake
|
||||
ninja
|
||||
pkg-config
|
||||
libdatrie
|
||||
|
||||
# Additional tools for installing Android SDK if not present
|
||||
curl
|
||||
unzip
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
echo "MeshCore Flutter Development Environment"
|
||||
export PKG_CONFIG_PATH="${pkgs.gtk3}/lib/pkgconfig:${pkgs.glib}/lib/pkgconfig:${pkgs.sysprof}/lib/pkgconfig:$PKG_CONFIG_PATH"
|
||||
export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath [pkgs.gtk3 pkgs.glib pkgs.sysprof pkgs.libdatrie]}:$LD_LIBRARY_PATH"
|
||||
export CMAKE_INSTALL_PREFIX="$PWD/build/bundle"
|
||||
|
||||
# Setup Android SDK in home directory (standard location)
|
||||
export ANDROID_HOME="$HOME/Android/Sdk"
|
||||
export ANDROID_SDK_ROOT="$ANDROID_HOME"
|
||||
export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools/bin:$PATH"
|
||||
|
||||
echo "Android SDK: $ANDROID_HOME"
|
||||
echo ""
|
||||
|
||||
# Check if Android SDK exists and offer to download if not
|
||||
if [ ! -d "$ANDROID_HOME" ]; then
|
||||
echo "WARNING: Android SDK not found at $ANDROID_HOME"
|
||||
echo ""
|
||||
echo "To download and set up the Android SDK, run this command:"
|
||||
echo ""
|
||||
cat << 'EOF'
|
||||
mkdir -p ~/Android/Sdk && cd ~/Android/Sdk && \
|
||||
curl -o cmdline-tools.zip ${if pkgs.stdenv.isDarwin then "https://dl.google.com/android/repository/commandlinetools-mac-10406996_latest.zip" else "https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip"} && \
|
||||
unzip -q cmdline-tools.zip && \
|
||||
mkdir -p cmdline-tools/latest && \
|
||||
mv cmdline-tools/* cmdline-tools/latest/ 2>/dev/null || echo "Warning: failed to move Android cmdline-tools into 'latest' directory; please check your SDK layout." >&2 && \
|
||||
rm cmdline-tools.zip && \
|
||||
cd cmdline-tools/latest/bin && \
|
||||
yes | ./sdkmanager --sdk_root=~/Android/Sdk 'platform-tools' && \
|
||||
echo "Android SDK setup complete!"
|
||||
EOF
|
||||
echo ""
|
||||
echo "Then run 'flutter doctor' again to verify."
|
||||
echo ""
|
||||
else
|
||||
echo "Android SDK found at $ANDROID_HOME"
|
||||
fi
|
||||
|
||||
echo "To check that everything is set up correctly, run 'flutter doctor' and ensure there are no issues."
|
||||
'';
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
@@ -5,7 +5,6 @@ import 'package:crypto/crypto.dart' as crypto;
|
||||
import 'package:pointycastle/export.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
||||
import 'package:wakelock_plus/wakelock_plus.dart';
|
||||
|
||||
import '../models/channel.dart';
|
||||
import '../models/channel_message.dart';
|
||||
@@ -91,6 +90,8 @@ class MeshCoreConnector extends ChangeNotifier {
|
||||
int? _currentBwHz;
|
||||
int? _currentSf;
|
||||
int? _currentCr;
|
||||
bool? _clientRepeat;
|
||||
int? _firmwareVerCode;
|
||||
int? _batteryMillivolts;
|
||||
double? _selfLatitude;
|
||||
double? _selfLongitude;
|
||||
@@ -201,6 +202,8 @@ class MeshCoreConnector extends ChangeNotifier {
|
||||
int? get currentBwHz => _currentBwHz;
|
||||
int? get currentSf => _currentSf;
|
||||
int? get currentCr => _currentCr;
|
||||
bool? get clientRepeat => _clientRepeat;
|
||||
int? get firmwareVerCode => _firmwareVerCode;
|
||||
Map<String, String>? get currentCustomVars => _currentCustomVars;
|
||||
int? get batteryMillivolts => _batteryMillivolts;
|
||||
int get maxContacts => _maxContacts;
|
||||
@@ -658,7 +661,8 @@ class MeshCoreConnector extends ChangeNotifier {
|
||||
_scanResults.clear();
|
||||
for (var result in results) {
|
||||
if (result.device.platformName.startsWith("MeshCore-") ||
|
||||
result.advertisementData.advName.startsWith("MeshCore-")) {
|
||||
result.advertisementData.advName.startsWith("MeshCore-") ||
|
||||
result.advertisementData.advName.startsWith("Whisper-")) {
|
||||
_scanResults.add(result);
|
||||
}
|
||||
}
|
||||
@@ -775,9 +779,6 @@ class MeshCoreConnector extends ChangeNotifier {
|
||||
|
||||
_setState(MeshCoreConnectionState.connected);
|
||||
|
||||
// Enable wake lock to prevent BLE disconnection when screen turns off
|
||||
await WakelockPlus.enable();
|
||||
|
||||
await _requestDeviceInfo();
|
||||
_startBatteryPolling();
|
||||
final gotSelfInfo = await _waitForSelfInfo(
|
||||
@@ -886,9 +887,6 @@ class MeshCoreConnector extends ChangeNotifier {
|
||||
_setState(MeshCoreConnectionState.disconnecting);
|
||||
_stopBatteryPolling();
|
||||
|
||||
// Disable wake lock when disconnecting
|
||||
await WakelockPlus.disable();
|
||||
|
||||
await _notifySubscription?.cancel();
|
||||
_notifySubscription = null;
|
||||
|
||||
@@ -922,6 +920,8 @@ class MeshCoreConnector extends ChangeNotifier {
|
||||
_selfName = null;
|
||||
_selfLatitude = null;
|
||||
_selfLongitude = null;
|
||||
_clientRepeat = null;
|
||||
_firmwareVerCode = null;
|
||||
_batteryMillivolts = null;
|
||||
_batteryRequested = false;
|
||||
_awaitingSelfInfo = false;
|
||||
@@ -1826,6 +1826,13 @@ class MeshCoreConnector extends ChangeNotifier {
|
||||
|
||||
void _handleDeviceInfo(Uint8List frame) {
|
||||
if (frame.length < 4) return;
|
||||
_firmwareVerCode = frame[1];
|
||||
|
||||
// Parse client_repeat from firmware v9+ (byte 80)
|
||||
if (frame.length >= 81) {
|
||||
_clientRepeat = frame[80] != 0;
|
||||
}
|
||||
|
||||
// Firmware reports MAX_CONTACTS / 2 for v3+ device info.
|
||||
final reportedContacts = frame[2];
|
||||
final reportedChannels = frame[3];
|
||||
@@ -1846,8 +1853,8 @@ class MeshCoreConnector extends ChangeNotifier {
|
||||
unawaited(getChannels(maxChannels: nextMaxChannels));
|
||||
}
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void _handleNoMoreMessages() {
|
||||
@@ -3214,8 +3221,6 @@ class MeshCoreConnector extends ChangeNotifier {
|
||||
}
|
||||
|
||||
void _handleDisconnection() {
|
||||
// Disable wake lock when connection is lost
|
||||
WakelockPlus.disable();
|
||||
_stopBatteryPolling();
|
||||
|
||||
for (final entry in _pendingRepeaterAcks.values) {
|
||||
|
||||
@@ -550,18 +550,29 @@ Uint8List buildSetChannelFrame(int channelIndex, String name, Uint8List psk) {
|
||||
}
|
||||
|
||||
// Build CMD_SET_RADIO_PARAMS frame
|
||||
// Format: [cmd][freq x4][bw x4][sf][cr]
|
||||
// Format: [cmd][freq x4][bw x4][sf][cr] (pre-v9)
|
||||
// [cmd][freq x4][bw x4][sf][cr][repeat] (firmware v9+)
|
||||
// freq: frequency in Hz (300000-2500000)
|
||||
// bw: bandwidth in Hz (7000-500000)
|
||||
// sf: spreading factor (5-12)
|
||||
// cr: coding rate (5-8)
|
||||
Uint8List buildSetRadioParamsFrame(int freqHz, int bwHz, int sf, int cr) {
|
||||
// clientRepeat: enable off-grid packet repeat (firmware v9+, omit for older)
|
||||
Uint8List buildSetRadioParamsFrame(
|
||||
int freqHz,
|
||||
int bwHz,
|
||||
int sf,
|
||||
int cr, {
|
||||
bool? clientRepeat,
|
||||
}) {
|
||||
final writer = BufferWriter();
|
||||
writer.writeByte(cmdSetRadioParams);
|
||||
writer.writeUInt32LE(freqHz);
|
||||
writer.writeUInt32LE(bwHz);
|
||||
writer.writeByte(sf);
|
||||
writer.writeByte(cr);
|
||||
if (clientRepeat != null) {
|
||||
writer.writeByte(clientRepeat ? 1 : 0);
|
||||
}
|
||||
return writer.toBytes();
|
||||
}
|
||||
|
||||
|
||||
+12
-8
@@ -131,9 +131,6 @@
|
||||
"settings_infoContactsCount": "Брой контакти",
|
||||
"settings_infoChannelCount": "Брой канали",
|
||||
"settings_presets": "Предварителни настройки",
|
||||
"settings_preset915Mhz": "915 MHz",
|
||||
"settings_preset868Mhz": "868 MHz",
|
||||
"settings_preset433Mhz": "433 MHz",
|
||||
"settings_frequency": "Честота (MHz)",
|
||||
"settings_frequencyHelper": "300.0 - 2500.0",
|
||||
"settings_frequencyInvalid": "Невалидна честота (300-2500 MHz)",
|
||||
@@ -143,8 +140,6 @@
|
||||
"settings_txPower": "TX Мощност (dBm)",
|
||||
"settings_txPowerHelper": "0 - 22",
|
||||
"settings_txPowerInvalid": "Невалидна мощност на TX (0-22 dBm)",
|
||||
"settings_longRange": "Дълъг обхват",
|
||||
"settings_fastSpeed": "Бърза скорост",
|
||||
"settings_error": "Грешка: {message}",
|
||||
"@settings_error": {
|
||||
"placeholders": {
|
||||
@@ -1575,7 +1570,6 @@
|
||||
"notification_newNodesCount": "{count} {count, plural, =1{нов възел} other{нови възли}}",
|
||||
"notification_newTypeDiscovered": "Открит нов {contactType}",
|
||||
"notification_receivedNewMessage": "Получено ново съобщение",
|
||||
"contacts_contactAdvertCopyFailed": "Копирането на обявата в клипборда не успя.",
|
||||
"settings_gpxExportContactsSubtitle": "Експортира спътници с местоположение в GPX файл.",
|
||||
"settings_gpxExportRepeatersSubtitle": "Изпраща повторители / roomserver с местоположение в GPX файл.",
|
||||
"settings_gpxExportAll": "Експортирай всички контакти в GPX",
|
||||
@@ -1591,6 +1585,16 @@
|
||||
"settings_gpxExportAllContacts": "Местоположения на всички контакти",
|
||||
"settings_gpxExportShareText": "Картинни данни изнесени от meshcore-open",
|
||||
"settings_gpxExportShareSubject": "meshcore-open износ на данни за карта в формат GPX",
|
||||
"pathTrace_someHopsNoLocation": "Един или повече от хмелите липсва местоположение!"
|
||||
|
||||
"pathTrace_someHopsNoLocation": "Един или повече от хмелите липсва местоположение!",
|
||||
"map_pathTraceCancelled": "Отменен е следването на пътя.",
|
||||
"pathTrace_clearTooltip": "Изчисти пътя",
|
||||
"map_removeLast": "Премахни Последно",
|
||||
"map_runTrace": "Изпълни Път на Следване",
|
||||
"map_tapToAdd": "Натиснете върху възлите, за да ги добавите към пътя.",
|
||||
"scanner_bluetoothOff": "Bluetooth е изключен.",
|
||||
"scanner_enableBluetooth": "Активирайте Bluetooth",
|
||||
"scanner_bluetoothOffMessage": "Моля, активирайте Bluetooth, за да сканирате за устройства.",
|
||||
"settings_clientRepeatSubtitle": "Позволете на това устройство да предава пакети към мрежата за други устройства.",
|
||||
"settings_clientRepeatFreqWarning": "За повторение извън мрежата са необходими честоти от 433, 869 или 918 MHz.",
|
||||
"settings_clientRepeat": "Без електричество – повторение"
|
||||
}
|
||||
|
||||
+61
-50
@@ -96,14 +96,14 @@
|
||||
"settings_privacyModeEnabled": "Datenschutzmodus aktiviert",
|
||||
"settings_privacyModeDisabled": "Datenschutzmodus deaktiviert",
|
||||
"settings_actions": "Aktionen",
|
||||
"settings_sendAdvertisement": "Sende eine Ankündigung",
|
||||
"settings_sendAdvertisementSubtitle": "Sende Ankündigung",
|
||||
"settings_sendAdvertisement": "Sende Ankündigung",
|
||||
"settings_sendAdvertisementSubtitle": "Sende eine Ankündigung",
|
||||
"settings_advertisementSent": "Ankündigung gesendet",
|
||||
"settings_syncTime": "Zeitsynchronisierung",
|
||||
"settings_syncTimeSubtitle": "Stelle die Gerätezeit auf die Uhrzeit des Telefons ein",
|
||||
"settings_timeSynchronized": "Zeit synchronisiert",
|
||||
"settings_refreshContacts": "Kontakte aktualisieren",
|
||||
"settings_refreshContactsSubtitle": "Kontakte-Liste vom Gerät neu laden",
|
||||
"settings_refreshContactsSubtitle": "Kontakt-Liste vom Gerät neu laden",
|
||||
"settings_rebootDevice": "Gerät neu starten",
|
||||
"settings_rebootDeviceSubtitle": "MeshCore-Gerät neu starten",
|
||||
"settings_rebootDeviceConfirm": "Sind Sie sicher, dass Sie das Gerät neu starten möchten? Sie werden getrennt.",
|
||||
@@ -131,9 +131,6 @@
|
||||
"settings_infoContactsCount": "Anzahl Kontakte",
|
||||
"settings_infoChannelCount": "Anzahl Kanäle",
|
||||
"settings_presets": "Voreinstellungen",
|
||||
"settings_preset915Mhz": "915 MHz",
|
||||
"settings_preset868Mhz": "868 MHz",
|
||||
"settings_preset433Mhz": "433 MHz",
|
||||
"settings_frequency": "Frequenz (MHz)",
|
||||
"settings_frequencyHelper": "300,00 - 2.500,00",
|
||||
"settings_frequencyInvalid": "Ungültige Frequenz (300-2500 MHz)",
|
||||
@@ -143,8 +140,6 @@
|
||||
"settings_txPower": "TX-Leistung (dBm)",
|
||||
"settings_txPowerHelper": "0 - 22",
|
||||
"settings_txPowerInvalid": "Ungültige TX-Leistung (0-22 dBm)",
|
||||
"settings_longRange": "Grosse Reichweite",
|
||||
"settings_fastSpeed": "Schnelle Geschwindigkeit",
|
||||
"settings_error": "Fehler: {message}",
|
||||
"@settings_error": {
|
||||
"placeholders": {
|
||||
@@ -540,7 +535,7 @@
|
||||
"chat_routingMode": "Routenmodus",
|
||||
"chat_autoUseSavedPath": "Automatisch (gespeicherten Pfad verwenden)",
|
||||
"chat_forceFloodMode": "Flut-Modus erzwingen",
|
||||
"chat_recentAckPaths": "Aktuelle ACK-Pfade (tasten, um zu verwenden):",
|
||||
"chat_recentAckPaths": "Aktuelle ACK-Pfade (antippen, um zu verwenden):",
|
||||
"chat_pathHistoryFull": "Die Pfadhistorie ist voll. Entferne Einträge, um neue hinzuzufügen.",
|
||||
"chat_hopSingular": "Sprung",
|
||||
"chat_hopPlural": "Sprünge",
|
||||
@@ -554,7 +549,7 @@
|
||||
},
|
||||
"chat_successes": "Erfolgreich",
|
||||
"chat_removePath": "Pfad entfernen",
|
||||
"chat_noPathHistoryYet": "Keine eine Pfadhistorie vorhanden.\nSende eine Nachricht, um Pfade zu entdecken.",
|
||||
"chat_noPathHistoryYet": "Keine Pfadhistorie vorhanden.\nSende eine Nachricht, um Pfade zu entdecken.",
|
||||
"chat_pathActions": "Pfadaktionen:",
|
||||
"chat_setCustomPath": "Lege benutzerdefinierten Pfad fest",
|
||||
"chat_setCustomPathSubtitle": "Manuellen Routenpfad festlegen",
|
||||
@@ -717,7 +712,7 @@
|
||||
"mapCache_cacheArea": "Zwischenspeicherbereich",
|
||||
"mapCache_useCurrentView": "Aktuelle Ansicht verwenden",
|
||||
"mapCache_zoomRange": "Zoom Bereich",
|
||||
"mapCache_estimatedTiles": "Geschätzte Fliesen: {count}",
|
||||
"mapCache_estimatedTiles": "Geschätzte Kacheln: {count}",
|
||||
"@mapCache_estimatedTiles": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
@@ -854,7 +849,7 @@
|
||||
},
|
||||
"path_enterCustomPath": "Gebe Pfad ein",
|
||||
"path_currentPathLabel": "Aktueller Pfad",
|
||||
"path_hexPrefixInstructions": "Gebe für jeden Hopfen 2-stellige Hex-Präfixe ein, getrennt durch Kommas.",
|
||||
"path_hexPrefixInstructions": "Gebe für jeden Zwischen-Hop das 2-stellige Hex-Präfix ein, getrennt durch Kommas.",
|
||||
"path_hexPrefixExample": "Beispiel: A1,F2,3C (jeder Knoten verwendet den ersten Byte seines öffentlichen Schlüssels)",
|
||||
"path_labelHexPrefixes": "Pfad (Hex-Präfixe)",
|
||||
"path_helperMaxHops": "Max 64 Sprünge. Jede Präfixe ist 2 Hexadezimalzeichen (1 Byte)",
|
||||
@@ -887,7 +882,7 @@
|
||||
"repeater_forceFloodMode": "Flut-Modus erzwingen",
|
||||
"repeater_pathManagement": "Pfadverwaltung",
|
||||
"repeater_refresh": "Aktualisieren",
|
||||
"repeater_statusRequestTimeout": "Statusanfrage zeitweise fehlgeschlagen.",
|
||||
"repeater_statusRequestTimeout": "Statusanfrage durch Timeout fehlgeschlagen.",
|
||||
"repeater_errorLoadingStatus": "Fehler beim Laden des Status: {error}",
|
||||
"@repeater_errorLoadingStatus": {
|
||||
"placeholders": {
|
||||
@@ -957,7 +952,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"repeater_duplicatesFloodDirect": "Überflut: {flood}, Direkt: {direct}",
|
||||
"repeater_duplicatesFloodDirect": "Flut: {flood}, Direkt: {direct}",
|
||||
"@repeater_duplicatesFloodDirect": {
|
||||
"placeholders": {
|
||||
"flood": {
|
||||
@@ -983,7 +978,7 @@
|
||||
"repeater_adminPassword": "Admin-Passwort",
|
||||
"repeater_adminPasswordHelper": "Vollzugriffspasswort",
|
||||
"repeater_guestPassword": "Gast-Passwort",
|
||||
"repeater_guestPasswordHelper": "Schreibgeschützter Zugriffspasswort",
|
||||
"repeater_guestPasswordHelper": "Schreibgeschütztes Zugriffspasswort",
|
||||
"repeater_radioSettings": "Funk Einstellungen",
|
||||
"repeater_frequencyMhz": "Frequenz (MHz)",
|
||||
"repeater_frequencyHelper": "300-2500 MHz",
|
||||
@@ -1086,11 +1081,11 @@
|
||||
}
|
||||
},
|
||||
"repeater_cliTitle": "Repeater CLI",
|
||||
"repeater_debugNextCommand": "Fehlersuche Nächster Befehl",
|
||||
"repeater_debugNextCommand": "Fehlersuche des nächsten Befehls",
|
||||
"repeater_commandHelp": "Hilfe",
|
||||
"repeater_clearHistory": "Löschen der Historie",
|
||||
"repeater_noCommandsSent": "Noch keine Befehle gesendet.",
|
||||
"repeater_typeCommandOrUseQuick": "Geben Sie einen Befehl unten ein oder verwenden Sie Schnellbefehle",
|
||||
"repeater_typeCommandOrUseQuick": "Geben Sie unten einen Befehl ein oder verwenden Sie die Schnellbefehle",
|
||||
"repeater_enterCommandHint": "Geben Sie den Befehl ein...",
|
||||
"repeater_previousCommand": "Vorhergehende Aktion",
|
||||
"repeater_nextCommand": "Nächste Aktion",
|
||||
@@ -1132,7 +1127,7 @@
|
||||
"repeater_cliHelpSetLat": "Legt die Breitengrad der Ankündigung fest. (dezimale Grad)",
|
||||
"repeater_cliHelpSetLon": "Legt die Längengrade der Ankündigung fest. (dezimale Grad)",
|
||||
"repeater_cliHelpSetRadio": "Legt komplett neue Radio-Parameter fest und speichert diese als Präferenzen. Benötigt einen \"Reboot\"-Befehl, um sie anzuwenden.",
|
||||
"repeater_cliHelpSetRxDelay": "Sets (experimentell) als Basis (muss > 1 sein für den Effekt) zur Anwendung einer leichten Verzögerung bei empfangenen Paketen, basierend auf Signalstärke/Punktzahl. Auf 0 setzen, um die Funktion zu deaktivieren.",
|
||||
"repeater_cliHelpSetRxDelay": "Fügt eine leichte Verzögerung bei empfangenen Paketen hinzu, basierend auf Signalstärke/Punktzahl. Auf 0 setzen, um die Funktion zu deaktivieren.",
|
||||
"repeater_cliHelpSetTxDelay": "Legt einen Faktor fest, der mit der Zeit bei voller Zuluft für ein Flood-Mode-Paket und mit einem zufälligen Slot-System multipliziert wird, um dessen Weiterleitung zu verzögern (um Kollisionen zu vermeiden).",
|
||||
"repeater_cliHelpSetDirectTxDelay": "Ähnlich wie txdelay, aber zum Anwenden einer zufälligen Verzögerung bei der Weiterleitung von Direktmodus-Paketen.",
|
||||
"repeater_cliHelpSetBridgeEnabled": "Brücke aktivieren/deaktivieren.",
|
||||
@@ -1143,14 +1138,14 @@
|
||||
"repeater_cliHelpSetAdcMultiplier": "Legt einen benutzerdefinierten Faktor zur Anpassung der gemeldeten Batteriewirkspannung fest (nur auf ausgewählten Boards unterstützt).",
|
||||
"repeater_cliHelpTempRadio": "Legt vorübergehende Funkparameter für die angegebene Anzahl von Minuten fest und kehrt anschließend zu den ursprünglichen Funkparametern zurück (wird nicht in den Einstellungen gespeichert).",
|
||||
"repeater_cliHelpSetPerm": "Ändert die ACL. Entfernt das passende Eintragen (durch Pubkey-Präfix), wenn \"permissions\" auf 0 steht. Fügt ein neues Eintragen hinzu, wenn die Pubkey-Hex-Länge vollständig ist und nicht bereits in der ACL vorhanden ist. Aktualisiert das Eintragen anhand des übereinstimmenden Pubkey-Präfix. Berechtigungsbits variieren je nach Firmware-Rolle, aber die unteren 2 Bits sind: 0 (Gast), 1 (Nur Lesen), 2 (Lesen/Schreiben), 3 (Admin)",
|
||||
"repeater_cliHelpGetBridgeType": "Ruft Brückentyp none, rs232, espnow ab.",
|
||||
"repeater_cliHelpGetBridgeType": "Ruft Brückentyp: none, rs232, espnow ab.",
|
||||
"repeater_cliHelpLogStart": "Beginnt die Paketprotokollierung in das Dateisystem.",
|
||||
"repeater_cliHelpLogStop": "Stoppt das Paketprotokollieren in das Dateisystem.",
|
||||
"repeater_cliHelpLogErase": "Löscht die Paketprotokolle aus dem Dateisystem.",
|
||||
"repeater_cliHelpNeighbors": "Zeigt eine Liste anderer Repeater-Knoten an, die über Zero-Hop-Ankündigung gehört wurden. Jede Zeile ist id-prefix-hex:timestamp:snr-times-4",
|
||||
"repeater_cliHelpNeighborRemove": "Entfernt das erste übereinstimmende Element (über Pubkey-Präfix (hex)) aus der Liste der Nachbarn.",
|
||||
"repeater_cliHelpRegion": "Listet alle definierten Regionen auf.",
|
||||
"repeater_cliHelpRegionLoad": "Hinweis: Dies ist ein spezieller Mehrbefehl-Aufruf. Jeder nachfolgende Befehl ist ein Regionsname (eingedruckt mit Leerzeichen zur Angabe der übergeordneten Hierarchie, mit mindestens einem Leerzeichen). Beendet durch das Senden einer Leerzeile/des Befehls.",
|
||||
"repeater_cliHelpRegionLoad": "Hinweis: Dies ist ein spezieller Mehrbefehl-Aufruf. Jeder nachfolgende Befehl ist ein Regionsname (eingerückt mit Leerzeichen zur Angabe der übergeordneten Hierarchie, mit mindestens einem Leerzeichen). Beendet durch das Senden einer Leerzeile.",
|
||||
"repeater_cliHelpRegionGet": "Sucht die Region mit dem gegebenen Namenspräfix (oder \"\\\" für den globalen Scope) und antwortet mit \"-> region-name (parent-name) 'F'\".",
|
||||
"repeater_cliHelpRegionPut": "Fügt eine Region-Definition mit dem angegebenen Namen hinzu oder aktualisiert diese.",
|
||||
"repeater_cliHelpRegionRemove": "Löscht eine Regiondefinition mit dem angegebenen Namen. (muss genau übereinstimmen und keine Kindregionen haben)",
|
||||
@@ -1243,7 +1238,7 @@
|
||||
"channelPath_otherObservedPaths": "Sonstige beobachtete Pfade",
|
||||
"channelPath_repeaterHops": "Repeater-Sprünge",
|
||||
"channelPath_noHopDetails": "Die Detailangaben für dieses Paket sind nicht verfügbar.",
|
||||
"channelPath_messageDetails": "Nachrichtsdetails",
|
||||
"channelPath_messageDetails": "Nachrichtendetails",
|
||||
"channelPath_senderLabel": "Sender",
|
||||
"channelPath_timeLabel": "Zeit",
|
||||
"channelPath_repeatsLabel": "Wiederholungen",
|
||||
@@ -1347,7 +1342,7 @@
|
||||
"listFilter_users": "Benutzer",
|
||||
"listFilter_repeaters": "Repeater",
|
||||
"listFilter_roomServers": "Raumserver",
|
||||
"listFilter_unreadOnly": "Nur nicht gelesen",
|
||||
"listFilter_unreadOnly": "Nicht gelesen",
|
||||
"listFilter_newGroup": "Neue Gruppe",
|
||||
"@neighbors_errorLoading": {
|
||||
"placeholders": {
|
||||
@@ -1358,11 +1353,11 @@
|
||||
},
|
||||
"repeater_neighbours": "Nachbarn",
|
||||
"repeater_neighboursSubtitle": "Anzahl der Hop-Nachbarn anzeigen.",
|
||||
"neighbors_receivedData": "Empfangene Nachbarendaten",
|
||||
"neighbors_requestTimedOut": "Nachbarn melden zeitweise Ausfall.",
|
||||
"neighbors_receivedData": "Empfangene Nachbarsdaten",
|
||||
"neighbors_requestTimedOut": "Anfrage durch Timeout fehlgeschlagen.",
|
||||
"neighbors_errorLoading": "Fehler beim Laden der Nachbarn: {error}",
|
||||
"neighbors_repeatersNeighbours": "Nachbarn",
|
||||
"neighbors_noData": "Keine Nachbardaten verfügbar.",
|
||||
"neighbors_noData": "Keine Nachbarsdaten verfügbar.",
|
||||
"channels_joinPrivateChannel": "Treten Sie einem privaten Kanal bei",
|
||||
"channels_joinPrivateChannelDesc": "Manuelle Eingabe eines geheimen Schlüssels.",
|
||||
"channels_createPrivateChannel": "Erstelle einen privaten Kanal",
|
||||
@@ -1389,8 +1384,8 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"neighbors_heardAgo": "Hörte: {time} vor her.",
|
||||
"neighbors_unknownContact": "Unbekannte {pubkey}",
|
||||
"neighbors_heardAgo": "Gehört vor: {time}",
|
||||
"neighbors_unknownContact": "Unbekannt {pubkey}",
|
||||
"settings_locationGPSEnable": "GPS aktivieren",
|
||||
"settings_locationGPSEnableSubtitle": "Aktiviert GPS zur automatischen Aktualisierung des Standorts.",
|
||||
"settings_locationIntervalSec": "Intervall für GPS (Sekunden)",
|
||||
@@ -1493,9 +1488,9 @@
|
||||
"community_deleted": "Community \"{name}\" verlassen",
|
||||
"community_addHashtagChannel": "Füge einen Community-Hashtag hinzu",
|
||||
"community_addHashtagChannelDesc": "Füge einen Hashtag-Kanal für diese Community hinzu",
|
||||
"community_selectCommunity": "Wählen Sie Community",
|
||||
"community_selectCommunity": "Wählen Sie eine Community",
|
||||
"community_regularHashtag": "Regulärer Hashtag",
|
||||
"community_regularHashtagDesc": "Öffentliches Hashtag (jeder kann teilnehmen)",
|
||||
"community_regularHashtagDesc": "Öffentlicher Hashtag (jeder kann teilnehmen)",
|
||||
"community_communityHashtagDesc": "Nur für Mitglieder der Community",
|
||||
"community_forCommunity": "Für {name}",
|
||||
"community_communityHashtag": "Community Hashtag",
|
||||
@@ -1559,59 +1554,75 @@
|
||||
"appSettings_languageUk": "Ukrainisch",
|
||||
"contacts_contactImported": "Kontakt wurde importiert.",
|
||||
"contacts_contactImportFailed": "Kontakt konnte nicht importiert werden",
|
||||
"contacts_zeroHopAdvert": "Zero-Hop-Anzeige",
|
||||
"contacts_floodAdvert": "Überflutungsanzeige",
|
||||
"contacts_zeroHopAdvert": "Zero-Hop-Ankündigung",
|
||||
"contacts_floodAdvert": "Flut-Ankündigung",
|
||||
"contacts_addContactFromClipboard": "Kontakt aus Zwischenablage hinzufügen",
|
||||
"contacts_ShareContactZeroHop": "Kontakt über Anzeige teilen",
|
||||
"contacts_copyAdvertToClipboard": "Werbung in die Zwischenablage kopieren",
|
||||
"contacts_copyAdvertToClipboard": "Ankündigung in die Zwischenablage kopieren",
|
||||
"contacts_ShareContact": "Kontakt in die Zwischenablage kopieren",
|
||||
"contacts_zeroHopContactAdvertFailed": "Kontakt konnte nicht gesendet werden.",
|
||||
"contacts_zeroHopContactAdvertSent": "Kontakt über Anzeige gesendet",
|
||||
"contacts_contactAdvertCopied": "Anzeige in die Zwischenablage kopiert.",
|
||||
"contacts_contactAdvertCopyFailed": "Kopieren des Werbeinhalts in die Zwischenablage fehlgeschlagen.",
|
||||
|
||||
"contacts_contactAdvertCopyFailed": "Kopieren der Ankündigung in die Zwischenablage fehlgeschlagen.",
|
||||
"notification_activityTitle": "MeshCore Aktivität",
|
||||
"notification_messagesCount": "{count} {count, plural, =1{Nachricht} other{Nachrichten}}",
|
||||
"@notification_messagesCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notification_channelMessagesCount": "{count} {count, plural, =1{Kanalnachricht} other{Kanalnachrichten}}",
|
||||
"@notification_channelMessagesCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notification_newNodesCount": "{count} {count, plural, =1{neuer Knoten} other{neue Knoten}}",
|
||||
"@notification_newNodesCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notification_newTypeDiscovered": "Neuer {contactType} entdeckt",
|
||||
"@notification_newTypeDiscovered": {
|
||||
"placeholders": {
|
||||
"contactType": {"type": "String"}
|
||||
"contactType": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notification_receivedNewMessage": "Neue Nachricht empfangen",
|
||||
"contacts_contactAdvertCopyFailed": "Kopieren des Werbeinhalts in die Zwischenablage fehlgeschlagen.",
|
||||
"settings_gpxExportAll": "Alle Kontakte nach GPX exportieren",
|
||||
"settings_gpxExportAllSubtitle": "Exportiert alle Kontakte mit einem Standort in eine GPX-Datei.",
|
||||
"settings_gpxExportRepeaters": "Repeater und Raumserver nach GPX exportieren",
|
||||
"settings_gpxExportContacts": "Begleiter nach GPX exportieren",
|
||||
"settings_gpxExportAll": "Alle Knoten als GPX exportieren",
|
||||
"settings_gpxExportAllSubtitle": "Exportiert alle Knoten mit einem Standort in eine GPX-Datei.",
|
||||
"settings_gpxExportRepeaters": "Repeater und Raumserver als GPX exportieren",
|
||||
"settings_gpxExportContacts": "Kontakte als GPX exportieren",
|
||||
"settings_gpxExportRepeatersSubtitle": "Exportiert Repeater und Raumserver mit einem Standort in eine GPX-Datei.",
|
||||
"settings_gpxExportContactsSubtitle": "Exportiert Begleiter mit einem Ort in eine GPX-Datei.",
|
||||
"settings_gpxExportContactsSubtitle": "Exportiert Kontakte mit einem Ort in eine GPX-Datei.",
|
||||
"settings_gpxExportRepeatersRoom": "Repeater- und Raumserver-Standorte",
|
||||
"settings_gpxExportChat": "Begleiterstandorte",
|
||||
"settings_gpxExportChat": "Kontaktstandorte",
|
||||
"settings_gpxExportNoContacts": "Keine Kontakte zum Exportieren.",
|
||||
"settings_gpxExportError": "Beim Export ist ein Fehler aufgetreten.",
|
||||
"settings_gpxExportNotAvailable": "Nicht auf Ihrem Gerät/Betriebssystem unterstützt",
|
||||
"settings_gpxExportSuccess": "Erfolgreich GPX-Datei exportiert.",
|
||||
"settings_gpxExportSuccess": "GPX-Datei erfolgreich exportiert.",
|
||||
"settings_gpxExportAllContacts": "Alle Kontaktstandorte",
|
||||
"settings_gpxExportShareSubject": "meshcore-open GPX-Kartendaten exportieren",
|
||||
"settings_gpxExportShareText": "Kartendaten aus meshcore-open exportiert",
|
||||
"pathTrace_someHopsNoLocation": "Eine oder mehrere der Hopfen fehlen einen Standort!"
|
||||
|
||||
"settings_gpxExportShareSubject": "GPX-Kartendaten aus meshcore-open exportieren",
|
||||
"settings_gpxExportShareText": "GPX-Kartendaten aus meshcore-open exportiert",
|
||||
"pathTrace_someHopsNoLocation": "Bei einer oder mehreren Knoten fehlt der Standort!",
|
||||
"map_removeLast": "Letztes Entfernen",
|
||||
"map_tapToAdd": "Tippen Sie auf Knoten, um sie zum Pfad hinzuzufügen.",
|
||||
"map_runTrace": "Pfadverlauf ausführen",
|
||||
"pathTrace_clearTooltip": "Pfad löschen",
|
||||
"map_pathTraceCancelled": "Pfadverfolgung abgebrochen.",
|
||||
"scanner_bluetoothOffMessage": "Bitte aktivieren Sie Bluetooth, um nach Geräten zu suchen.",
|
||||
"scanner_bluetoothOff": "Bluetooth ist deaktiviert.",
|
||||
"scanner_enableBluetooth": "Bluetooth aktivieren",
|
||||
"settings_clientRepeat": "Wiederholung, ohne Stromanschluss",
|
||||
"settings_clientRepeatFreqWarning": "Die Kommunikation ohne Stromversorgung erfordert Frequenzen von 433, 869 oder 918 MHz.",
|
||||
"settings_clientRepeatSubtitle": "Ermöglichen Sie diesem Gerät, Mesh-Pakete für andere zu wiederholen."
|
||||
}
|
||||
|
||||
+406
-169
File diff suppressed because it is too large
Load Diff
+24
-13
@@ -131,9 +131,6 @@
|
||||
"settings_infoContactsCount": "Número de contactos",
|
||||
"settings_infoChannelCount": "Número de canales",
|
||||
"settings_presets": "Preajustes",
|
||||
"settings_preset915Mhz": "915 MHz",
|
||||
"settings_preset868Mhz": "868 MHz",
|
||||
"settings_preset433Mhz": "433 MHz",
|
||||
"settings_frequency": "Frecuencia (MHz)",
|
||||
"settings_frequencyHelper": "300,0 - 2500,0",
|
||||
"settings_frequencyInvalid": "Frecuencia inválida (300-2500 MHz)",
|
||||
@@ -143,8 +140,6 @@
|
||||
"settings_txPower": "TX Potencia (dBm)",
|
||||
"settings_txPowerHelper": "0 - 22",
|
||||
"settings_txPowerInvalid": "Potencia de TX inválida (0-22 dBm)",
|
||||
"settings_longRange": "Largo Alcance",
|
||||
"settings_fastSpeed": "Velocidad Rápida",
|
||||
"settings_error": "Error: {message}",
|
||||
"@settings_error": {
|
||||
"placeholders": {
|
||||
@@ -1569,34 +1564,40 @@
|
||||
"contacts_zeroHopContactAdvertSent": "Envió contacto por anuncio.",
|
||||
"contacts_contactAdvertCopied": "Anuncio copiado al Portapapeles.",
|
||||
"contacts_contactAdvertCopyFailed": "Copiar anuncio al Portapapeles ha fallado.",
|
||||
|
||||
"notification_activityTitle": "Actividad de MeshCore",
|
||||
"notification_messagesCount": "{count} {count, plural, =1{mensaje} other{mensajes}}",
|
||||
"@notification_messagesCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notification_channelMessagesCount": "{count} {count, plural, =1{mensaje de canal} other{mensajes de canal}}",
|
||||
"@notification_channelMessagesCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notification_newNodesCount": "{count} {count, plural, =1{nuevo nodo} other{nuevos nodos}}",
|
||||
"@notification_newNodesCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notification_newTypeDiscovered": "Nuevo {contactType} descubierto",
|
||||
"@notification_newTypeDiscovered": {
|
||||
"placeholders": {
|
||||
"contactType": {"type": "String"}
|
||||
"contactType": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notification_receivedNewMessage": "Nuevo mensaje recibido",
|
||||
"contacts_contactAdvertCopyFailed": "Copiar anuncio al Portapapeles ha fallado.",
|
||||
"settings_gpxExportContactsSubtitle": "Exporta compañeros con una ubicación a archivo GPX.",
|
||||
"settings_gpxExportRepeaters": "Exportar repetidores / servidor de sala a GPX",
|
||||
"settings_gpxExportSuccess": "Archivo GPX exportado con éxito.",
|
||||
@@ -1612,6 +1613,16 @@
|
||||
"settings_gpxExportAllContacts": "Todas las ubicaciones de contactos",
|
||||
"settings_gpxExportShareText": "Datos del mapa exportados desde meshcore-open",
|
||||
"settings_gpxExportShareSubject": "meshcore-open exportación de datos de mapa GPX",
|
||||
"pathTrace_someHopsNoLocation": "Uno o más de los lúpulos carecen de una ubicación"
|
||||
|
||||
"pathTrace_someHopsNoLocation": "Uno o más de los lúpulos carecen de una ubicación",
|
||||
"pathTrace_clearTooltip": "Borrar ruta",
|
||||
"map_runTrace": "Ejecutar Rastreo de Ruta",
|
||||
"map_tapToAdd": "Pulse en los nodos para agregarlos al camino.",
|
||||
"map_removeLast": "Eliminar último",
|
||||
"map_pathTraceCancelled": "Rastreo de ruta cancelado.",
|
||||
"scanner_bluetoothOffMessage": "Por favor, active el Bluetooth para escanear dispositivos.",
|
||||
"scanner_bluetoothOff": "Bluetooth está desactivado.",
|
||||
"scanner_enableBluetooth": "Habilitar Bluetooth",
|
||||
"settings_clientRepeatFreqWarning": "Para la comunicación fuera de la red, se requiere una frecuencia de 433, 869 o 918 MHz.",
|
||||
"settings_clientRepeat": "Repetir sin conexión",
|
||||
"settings_clientRepeatSubtitle": "Permita que este dispositivo repita los paquetes de red para otros usuarios."
|
||||
}
|
||||
|
||||
+46
-42
@@ -131,9 +131,6 @@
|
||||
"settings_infoContactsCount": "Nombre de contacts",
|
||||
"settings_infoChannelCount": "Nombre de canaux",
|
||||
"settings_presets": "Préréglages",
|
||||
"settings_preset915Mhz": "915 MHz",
|
||||
"settings_preset868Mhz": "868 MHz",
|
||||
"settings_preset433Mhz": "433 MHz",
|
||||
"settings_frequency": "Fréquence (MHz)",
|
||||
"settings_frequencyHelper": "300,0 - 2 500,0",
|
||||
"settings_frequencyInvalid": "Fréquence invalide (300-2500 MHz)",
|
||||
@@ -143,8 +140,6 @@
|
||||
"settings_txPower": "TX Puissance (dBm)",
|
||||
"settings_txPowerHelper": "0 - 22",
|
||||
"settings_txPowerInvalid": "Puissance TX invalide (0-22 dBm)",
|
||||
"settings_longRange": "Portée Longue",
|
||||
"settings_fastSpeed": "Vitesse Rapide",
|
||||
"settings_error": "Erreur : {message}",
|
||||
"@settings_error": {
|
||||
"placeholders": {
|
||||
@@ -210,8 +205,8 @@
|
||||
"appSettings_batteryLifepo4": "LiFePO4 (2,6-3,65V)",
|
||||
"appSettings_batteryLipo": "LiPo (3,0-4,2V)",
|
||||
"appSettings_mapDisplay": "Affichage de la carte",
|
||||
"appSettings_showRepeaters": "Afficher les répétiteurs",
|
||||
"appSettings_showRepeatersSubtitle": "Afficher les nœuds répétiteurs sur la carte",
|
||||
"appSettings_showRepeaters": "Afficher les répéteurs",
|
||||
"appSettings_showRepeatersSubtitle": "Afficher les nœuds répéteurs sur la carte",
|
||||
"appSettings_showChatNodes": "Afficher les nœuds de discussion",
|
||||
"appSettings_showChatNodesSubtitle": "Afficher les nœuds de chat sur la carte",
|
||||
"appSettings_showOtherNodes": "Afficher d'autres nœuds",
|
||||
@@ -266,7 +261,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"contacts_manageRepeater": "Gérer le répétiteur",
|
||||
"contacts_manageRepeater": "Gérer le répéteur",
|
||||
"contacts_roomLogin": "Connexion Salle",
|
||||
"contacts_openChat": "Ouverture du Chat",
|
||||
"contacts_editGroup": "Modifier le groupe",
|
||||
@@ -542,9 +537,9 @@
|
||||
"chat_forceFloodMode": "Mode tout le réseau forcé",
|
||||
"chat_recentAckPaths": "Chemins ACK récents (touchez pour utiliser) :",
|
||||
"chat_pathHistoryFull": "L'historique du chemin est plein. Supprimez les entrées pour en ajouter de nouvelles.",
|
||||
"chat_hopSingular": "Sautez",
|
||||
"chat_hopPlural": "sautez",
|
||||
"chat_hopsCount": "{count} {count, plural, =1{hop} other{hops}}",
|
||||
"chat_hopSingular": "saut",
|
||||
"chat_hopPlural": "sauts",
|
||||
"chat_hopsCount": "{count} {count, plural, =1{saut} other{sauts}}",
|
||||
"@chat_hopsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
@@ -636,7 +631,7 @@
|
||||
}
|
||||
},
|
||||
"map_chat": "Chat",
|
||||
"map_repeater": "Répétiteur",
|
||||
"map_repeater": "Répéteur",
|
||||
"map_room": "Salle",
|
||||
"map_sensor": "Capteur",
|
||||
"map_pinDm": "Clé (DM)",
|
||||
@@ -677,7 +672,7 @@
|
||||
"map_lastSeenTime": "Dernière fois vu",
|
||||
"map_sharedPin": "Clé partagée",
|
||||
"map_joinRoom": "Rejoindre la salle",
|
||||
"map_manageRepeater": "Gérer le répétiteur",
|
||||
"map_manageRepeater": "Gérer le répéteur",
|
||||
"mapCache_title": "Cache de Carte Hors Ligne",
|
||||
"mapCache_selectAreaFirst": "Sélectionner une zone pour la mise en cache en premier",
|
||||
"mapCache_noTilesToDownload": "Aucun tuilage à télécharger pour cette zone.",
|
||||
@@ -800,13 +795,13 @@
|
||||
"time_allTime": "Tout le temps",
|
||||
"dialog_disconnect": "Déconnecter",
|
||||
"dialog_disconnectConfirm": "Êtes-vous sûr de vouloir vous déconnecter de cet appareil ?",
|
||||
"login_repeaterLogin": "Connexion au répétiteur",
|
||||
"login_repeaterLogin": "Connexion au répéteur",
|
||||
"login_roomLogin": "Connexion Salle",
|
||||
"login_password": "Mot de passe",
|
||||
"login_enterPassword": "Entrez votre mot de passe",
|
||||
"login_savePassword": "Sauvegarder le mot de passe",
|
||||
"login_savePasswordSubtitle": "Le mot de passe sera stocké en toute sécurité sur cet appareil.",
|
||||
"login_repeaterDescription": "Entrez le mot de passe du répétiteur pour accéder aux paramètres et à l'état.",
|
||||
"login_repeaterDescription": "Entrez le mot de passe du répéteur pour accéder aux paramètres et à l'état.",
|
||||
"login_roomDescription": "Entrez le mot de passe de la pièce pour accéder aux paramètres et à l'état.",
|
||||
"login_routing": "Redirection",
|
||||
"login_routingMode": "Mode de routage",
|
||||
@@ -871,17 +866,17 @@
|
||||
},
|
||||
"path_tooLong": "Le chemin est trop long. Maximum 64 sauts autorisés.",
|
||||
"path_setPath": "Définir le chemin",
|
||||
"repeater_management": "Gestion des répétiteurs",
|
||||
"repeater_management": "Gestion des répéteurs",
|
||||
"repeater_managementTools": "Outils de Gestion",
|
||||
"repeater_status": "État",
|
||||
"repeater_statusSubtitle": "Afficher l'état, les statistiques et les voisins du répétiteur",
|
||||
"repeater_statusSubtitle": "Afficher l'état, les statistiques et les voisins du répéteur",
|
||||
"repeater_telemetry": "Télémetrie",
|
||||
"repeater_telemetrySubtitle": "Afficher la télémétrie des capteurs et les statistiques du système",
|
||||
"repeater_cli": "CLI",
|
||||
"repeater_cliSubtitle": "Envoyer des commandes au répétiteur",
|
||||
"repeater_cliSubtitle": "Envoyer des commandes au répéteur",
|
||||
"repeater_settings": "Paramètres",
|
||||
"repeater_settingsSubtitle": "Configurer les paramètres du répétiteur",
|
||||
"repeater_statusTitle": "État du répétiteur",
|
||||
"repeater_settingsSubtitle": "Configurer les paramètres du répéteur",
|
||||
"repeater_statusTitle": "État du répéteur",
|
||||
"repeater_routingMode": "Mode de routage",
|
||||
"repeater_autoUseSavedPath": "Auto (utiliser le chemin sauvegardé)",
|
||||
"repeater_forceFloodMode": "Mode tout le réseau forcé",
|
||||
@@ -976,10 +971,10 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"repeater_settingsTitle": "Paramètres du répétiteur",
|
||||
"repeater_settingsTitle": "Paramètres du répéteur",
|
||||
"repeater_basicSettings": "Paramètres de base",
|
||||
"repeater_repeaterName": "Nom du répétiteur",
|
||||
"repeater_repeaterNameHelper": "Afficher le nom de ce répétiteur",
|
||||
"repeater_repeaterName": "Nom du répéteur",
|
||||
"repeater_repeaterNameHelper": "Afficher le nom de ce répéteur",
|
||||
"repeater_adminPassword": "Mot de passe Administrateur",
|
||||
"repeater_adminPasswordHelper": "Mot de passe d'accès complet",
|
||||
"repeater_guestPassword": "Mot de passe invité",
|
||||
@@ -999,7 +994,7 @@
|
||||
"repeater_longitudeHelper": "Degrés décimaux (par exemple, -122,4194)",
|
||||
"repeater_features": "Fonctionnalités",
|
||||
"repeater_packetForwarding": "Transfert de paquets",
|
||||
"repeater_packetForwardingSubtitle": "Activer le répétiteur pour transmettre des paquets",
|
||||
"repeater_packetForwardingSubtitle": "Activer le répéteur pour transmettre des paquets",
|
||||
"repeater_guestAccess": "Accès Invité",
|
||||
"repeater_guestAccessSubtitle": "Autoriser l'accès invité en lecture seule",
|
||||
"repeater_privacyMode": "Mode de confidentialité",
|
||||
@@ -1026,14 +1021,14 @@
|
||||
"repeater_encryptedAdvertInterval": "Intervalle d'annonces cryptées",
|
||||
"repeater_dangerZone": "Zone dangereuse",
|
||||
"repeater_rebootRepeater": "Redémarrer Répéteur",
|
||||
"repeater_rebootRepeaterSubtitle": "Réinitialiser l'appareil répétiteur",
|
||||
"repeater_rebootRepeaterConfirm": "Êtes-vous sûr de vouloir redémarrer ce répétiteur ?",
|
||||
"repeater_rebootRepeaterSubtitle": "Réinitialiser l'appareil répéteur",
|
||||
"repeater_rebootRepeaterConfirm": "Êtes-vous sûr de vouloir redémarrer ce répéteur ?",
|
||||
"repeater_regenerateIdentityKey": "Ré générer la clé d'identité",
|
||||
"repeater_regenerateIdentityKeySubtitle": "Générer une nouvelle paire de clés publique/privée",
|
||||
"repeater_regenerateIdentityKeyConfirm": "Cela générera une nouvelle identité pour le répétiteur. Continuer ?",
|
||||
"repeater_regenerateIdentityKeyConfirm": "Cela générera une nouvelle identité pour le répéteur. Continuer ?",
|
||||
"repeater_eraseFileSystem": "Supprimer le système de fichiers",
|
||||
"repeater_eraseFileSystemSubtitle": "Formater le système de fichiers du répétiteur",
|
||||
"repeater_eraseFileSystemConfirm": "AVERTISSEMENT : Cela effacera toutes les données du répétiteur. Cela ne peut pas être annulé !",
|
||||
"repeater_eraseFileSystemSubtitle": "Formater le système de fichiers du répéteur",
|
||||
"repeater_eraseFileSystemConfirm": "AVERTISSEMENT : Cela effacera toutes les données du répéteur. Cela ne peut pas être annulé !",
|
||||
"repeater_eraseSerialOnly": "Erase n'est disponible que via la console série.",
|
||||
"repeater_commandSent": "Commande envoyée : {command}",
|
||||
"@repeater_commandSent": {
|
||||
@@ -1085,7 +1080,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"repeater_cliTitle": "Répétiteur CLI",
|
||||
"repeater_cliTitle": "Répéteur CLI",
|
||||
"repeater_debugNextCommand": "Déboguer Prochaine Commande",
|
||||
"repeater_commandHelp": "Aide",
|
||||
"repeater_clearHistory": "Effacer l'historique",
|
||||
@@ -1119,13 +1114,13 @@
|
||||
"repeater_cliHelpClearStats": "Réinitialise divers compteurs de statistiques à zéro.",
|
||||
"repeater_cliHelpSetAf": "Définit le facteur de temps d'air.",
|
||||
"repeater_cliHelpSetTx": "Définit la puissance de transmission LoRa en dBm (réinitialisation requise pour appliquer).",
|
||||
"repeater_cliHelpSetRepeat": "Active ou désactive le rôle du répétiteur pour ce nœud.",
|
||||
"repeater_cliHelpSetRepeat": "Active ou désactive le rôle du répéteur pour ce nœud.",
|
||||
"repeater_cliHelpSetAllowReadOnly": "(Room server) Si \"activé\", alors un mot de passe vide permettra la connexion, mais ne permettra pas de publier dans la pièce. (lecture seule uniquement)",
|
||||
"repeater_cliHelpSetFloodMax": "Définit le nombre maximal de sauts pour les paquets de balayage entrants (si >= max, le paquet n'est pas acheminé).",
|
||||
"repeater_cliHelpSetIntThresh": "Définit le seuil d'interférence (en dB). La valeur par défaut est de 14. Définir sur 0 désactive la détection des interférences de canal.",
|
||||
"repeater_cliHelpSetAgcResetInterval": "Définit l'intervalle pour réinitialiser le contrôleur de gain automatique. Mettez à 0 pour désactiver.",
|
||||
"repeater_cliHelpSetMultiAcks": "Active ou désactive la fonctionnalité « double ACKs ».",
|
||||
"repeater_cliHelpSetAdvertInterval": "Définit l'intervalle du minuteur pour envoyer un paquet d'annonce local (sans relais). Définir sur 0 pour désactiver.",
|
||||
"repeater_cliHelpSetAdvertInterval": "Définit l'intervalle entre chaque émission d'une annonce locale (sans relais). Définir sur 0 pour désactiver.",
|
||||
"repeater_cliHelpSetFloodAdvertInterval": "Définit l'intervalle du minuteur en heures pour envoyer un paquet d'annonce massive. Définir sur 0 pour désactiver.",
|
||||
"repeater_cliHelpSetGuestPassword": "Définit/met à jour le mot de passe de l'invité. (pour les répéteurs, les connexions d'invités peuvent envoyer la requête \"Get Stats\")",
|
||||
"repeater_cliHelpSetName": "Définit le nom de l'annonce.",
|
||||
@@ -1147,7 +1142,7 @@
|
||||
"repeater_cliHelpLogStart": "Démarre l'enregistrement des paquets dans le système de fichiers.",
|
||||
"repeater_cliHelpLogStop": "Arrêter de journaliser les paquets vers le système de fichiers.",
|
||||
"repeater_cliHelpLogErase": "Supprime les journaux de paquets du système de fichiers.",
|
||||
"repeater_cliHelpNeighbors": "Affiche une liste d'autres nœuds répétiteurs entendus via des annonces sans relais. Chaque ligne est id-préfixe-hexadécimal:timestamp:snr-fois-4",
|
||||
"repeater_cliHelpNeighbors": "Affiche une liste d'autres nœuds répéteurs entendus via des annonces sans relais. Chaque ligne est id-préfixe-hexadécimal:timestamp:snr-fois-4",
|
||||
"repeater_cliHelpNeighborRemove": "Supprime la première entrée correspondante (par préfixe de clé publique (hexadécimal)) de la liste des voisins.",
|
||||
"repeater_cliHelpRegion": "(série uniquement) Liste toutes les régions définies et les autorisations actuelles d'annonces sur tout le réseau (flood).",
|
||||
"repeater_cliHelpRegionLoad": "REMARQUE : il s'agit d'une invocation multi-commande spéciale. Chaque commande subséquente est un nom de région (indenté avec des espaces pour indiquer la hiérarchie parent, avec un minimum d'un espace). Terminé par l'envoi d'une ligne vide/commande.",
|
||||
@@ -1171,8 +1166,8 @@
|
||||
"repeater_settingsCategory": "Paramètres",
|
||||
"repeater_bridge": "Pont",
|
||||
"repeater_logging": "Journalisation",
|
||||
"repeater_neighborsRepeaterOnly": "Voisins (Uniquement répétiteur)",
|
||||
"repeater_regionManagementRepeaterOnly": "Gestion des régions (uniquement pour le répétiteur)",
|
||||
"repeater_neighborsRepeaterOnly": "Voisins (Uniquement répéteur)",
|
||||
"repeater_regionManagementRepeaterOnly": "Gestion des régions (uniquement pour le répéteur)",
|
||||
"repeater_regionNote": "Les commandes de région ont été introduites pour gérer les définitions et les autorisations des régions.",
|
||||
"repeater_gpsManagement": "Gestion GPS",
|
||||
"repeater_gpsNote": "La commande GPS a été introduite pour gérer les sujets liés à la localisation.",
|
||||
@@ -1241,7 +1236,7 @@
|
||||
"channelPath_title": "Chemin de paquet",
|
||||
"channelPath_viewMap": "Afficher la carte",
|
||||
"channelPath_otherObservedPaths": "Autres chemins observés",
|
||||
"channelPath_repeaterHops": "Sauts du répétiteur",
|
||||
"channelPath_repeaterHops": "Sauts du répéteur",
|
||||
"channelPath_noHopDetails": "Les détails de l'envoi ne sont pas fournis pour ce paquet.",
|
||||
"channelPath_messageDetails": "Détails du message",
|
||||
"channelPath_senderLabel": "Expéditeur",
|
||||
@@ -1306,7 +1301,7 @@
|
||||
}
|
||||
},
|
||||
"channelPath_mapTitle": "Carte du chemin",
|
||||
"channelPath_noRepeaterLocations": "Aucune position de répétiteur disponible pour ce chemin.",
|
||||
"channelPath_noRepeaterLocations": "Aucune position de répéteur disponible pour ce chemin.",
|
||||
"channelPath_primaryPath": "Chemin {index} (Principal)",
|
||||
"@channelPath_primaryPath": {
|
||||
"placeholders": {
|
||||
@@ -1558,9 +1553,9 @@
|
||||
"appSettings_languageRu": "Russe",
|
||||
"contacts_clipboardEmpty": "Le presse-papiers est vide.",
|
||||
"contacts_contactImported": "Le contact a été importé.",
|
||||
"contacts_floodAdvert": "Annonce de crue",
|
||||
"contacts_floodAdvert": "Annonce à tout le réseau",
|
||||
"contacts_contactImportFailed": "Échec de l'importation du contact.",
|
||||
"contacts_zeroHopAdvert": "Annonce Zero Hop",
|
||||
"contacts_zeroHopAdvert": "Annonce Zero saut",
|
||||
"contacts_copyAdvertToClipboard": "Copier l'annonce dans le presse-papiers",
|
||||
"contacts_addContactFromClipboard": "Ajouter un contact depuis le presse-papiers",
|
||||
"contacts_ShareContact": "Copier le contact dans le presse-papiers",
|
||||
@@ -1575,7 +1570,6 @@
|
||||
"notification_newNodesCount": "{count} {count, plural, =1{nouveau nœud} other{nouveaux nœuds}}",
|
||||
"notification_newTypeDiscovered": "Nouveau {contactType} découvert",
|
||||
"notification_receivedNewMessage": "Nouveau message reçu",
|
||||
"contacts_zeroHopContactAdvertFailed": "Échec de l'envoi du contact.",
|
||||
"settings_gpxExportRepeaters": "Exporter les répéteurs / serveur de salle au format GPX",
|
||||
"settings_gpxExportRepeatersSubtitle": "Exporte les répéteurs / roomserver avec une localisation vers un fichier GPX.",
|
||||
"settings_gpxExportNoContacts": "Aucun contact à exporter.",
|
||||
@@ -1591,6 +1585,16 @@
|
||||
"settings_gpxExportAllContacts": "Tous les emplacements des contacts",
|
||||
"settings_gpxExportShareText": "Données de carte exportées à partir de meshcore-open",
|
||||
"settings_gpxExportShareSubject": "meshcore-open exporter les données de carte GPX",
|
||||
"pathTrace_someHopsNoLocation": "Une ou plusieurs des houblons manquent d'une localisation !"
|
||||
|
||||
"pathTrace_someHopsNoLocation": "Un ou plusieurs des sauts manquent d'une localisation !",
|
||||
"map_tapToAdd": "Appuyez sur les nœuds pour les ajouter au chemin.",
|
||||
"pathTrace_clearTooltip": "Effacer le chemin",
|
||||
"map_pathTraceCancelled": "Traçage de chemin annulé",
|
||||
"map_removeLast": "Supprimer le dernier",
|
||||
"map_runTrace": "Exécuter la traçage de chemin",
|
||||
"scanner_bluetoothOffMessage": "Veuillez activer le Bluetooth pour rechercher des appareils.",
|
||||
"scanner_bluetoothOff": "Le Bluetooth est désactivé.",
|
||||
"scanner_enableBluetooth": "Activer le Bluetooth",
|
||||
"settings_clientRepeatFreqWarning": "Pour les transmissions hors réseau, il est nécessaire d'utiliser les fréquences de 433, 869 ou 918 MHz.",
|
||||
"settings_clientRepeatSubtitle": "Permettez à cet appareil de répéter les paquets de données pour les autres.",
|
||||
"settings_clientRepeat": "Répétition hors réseau"
|
||||
}
|
||||
|
||||
+12
-8
@@ -131,9 +131,6 @@
|
||||
"settings_infoContactsCount": "Numero contatti",
|
||||
"settings_infoChannelCount": "Numero Canale",
|
||||
"settings_presets": "Preset",
|
||||
"settings_preset915Mhz": "915 MHz",
|
||||
"settings_preset868Mhz": "868 MHz",
|
||||
"settings_preset433Mhz": "433 MHz",
|
||||
"settings_frequency": "Frequenza (MHz)",
|
||||
"settings_frequencyHelper": "300,0 - 2500,0",
|
||||
"settings_frequencyInvalid": "Frequenza non valida (300-2500 MHz)",
|
||||
@@ -143,8 +140,6 @@
|
||||
"settings_txPower": "TX Potenza (dBm)",
|
||||
"settings_txPowerHelper": "0 - 22",
|
||||
"settings_txPowerInvalid": "Potere TX non valido (0-22 dBm)",
|
||||
"settings_longRange": "Lungo Raggio",
|
||||
"settings_fastSpeed": "Velocità Rapida",
|
||||
"settings_error": "Errore: {message}",
|
||||
"@settings_error": {
|
||||
"placeholders": {
|
||||
@@ -1575,7 +1570,6 @@
|
||||
"notification_newNodesCount": "{count} {count, plural, =1{nuovo nodo} other{nuovi nodi}}",
|
||||
"notification_newTypeDiscovered": "Nuovo {contactType} scoperto",
|
||||
"notification_receivedNewMessage": "Nuovo messaggio ricevuto",
|
||||
"contacts_contactAdvertCopied": "Annuncio copiato negli Appunti.",
|
||||
"settings_gpxExportRepeaters": "Esporta ripetitori / server di stanza in GPX",
|
||||
"settings_gpxExportContacts": "Esporta compagni in GPX",
|
||||
"settings_gpxExportSuccess": "Esportazione del file GPX completata con successo.",
|
||||
@@ -1591,6 +1585,16 @@
|
||||
"settings_gpxExportAllContacts": "Tutte le posizioni dei contatti",
|
||||
"settings_gpxExportShareText": "Dati mappa esportati da meshcore-open",
|
||||
"settings_gpxExportShareSubject": "meshcore-open esportazione dati mappa GPX",
|
||||
"pathTrace_someHopsNoLocation": "Uno o più dei luppoli mancano di una posizione!"
|
||||
|
||||
"pathTrace_someHopsNoLocation": "Uno o più dei luppoli mancano di una posizione!",
|
||||
"map_removeLast": "Rimuovi ultimo",
|
||||
"map_pathTraceCancelled": "Tracciamento del percorso annullato.",
|
||||
"pathTrace_clearTooltip": "Pulisci percorso",
|
||||
"map_runTrace": "Esegui Path Trace",
|
||||
"map_tapToAdd": "Tocca i nodi per aggiungerli al percorso.",
|
||||
"scanner_bluetoothOff": "Il Bluetooth è disattivato.",
|
||||
"scanner_bluetoothOffMessage": "Si prega di attivare il Bluetooth per effettuare la scansione dei dispositivi.",
|
||||
"scanner_enableBluetooth": "Abilita il Bluetooth",
|
||||
"settings_clientRepeat": "Ripetizione \"fuori dalla rete\"",
|
||||
"settings_clientRepeatFreqWarning": "Per la comunicazione fuori rete, è necessario utilizzare frequenze di 433, 869 o 918 MHz.",
|
||||
"settings_clientRepeatSubtitle": "Permetti a questo dispositivo di ripetere i pacchetti di rete per gli altri."
|
||||
}
|
||||
|
||||
@@ -376,6 +376,24 @@ abstract class AppLocalizations {
|
||||
/// **'Scan'**
|
||||
String get scanner_scan;
|
||||
|
||||
/// No description provided for @scanner_bluetoothOff.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Bluetooth is off'**
|
||||
String get scanner_bluetoothOff;
|
||||
|
||||
/// No description provided for @scanner_bluetoothOffMessage.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Please turn on Bluetooth to scan for devices'**
|
||||
String get scanner_bluetoothOffMessage;
|
||||
|
||||
/// No description provided for @scanner_enableBluetooth.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Enable Bluetooth'**
|
||||
String get scanner_enableBluetooth;
|
||||
|
||||
/// No description provided for @device_quickSwitch.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -730,24 +748,6 @@ abstract class AppLocalizations {
|
||||
/// **'Presets'**
|
||||
String get settings_presets;
|
||||
|
||||
/// No description provided for @settings_preset915Mhz.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'915 MHz'**
|
||||
String get settings_preset915Mhz;
|
||||
|
||||
/// No description provided for @settings_preset868Mhz.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'868 MHz'**
|
||||
String get settings_preset868Mhz;
|
||||
|
||||
/// No description provided for @settings_preset433Mhz.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'433 MHz'**
|
||||
String get settings_preset433Mhz;
|
||||
|
||||
/// No description provided for @settings_frequency.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -802,17 +802,23 @@ abstract class AppLocalizations {
|
||||
/// **'Invalid TX power (0-22 dBm)'**
|
||||
String get settings_txPowerInvalid;
|
||||
|
||||
/// No description provided for @settings_longRange.
|
||||
/// No description provided for @settings_clientRepeat.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Long Range'**
|
||||
String get settings_longRange;
|
||||
/// **'Off-Grid Repeat'**
|
||||
String get settings_clientRepeat;
|
||||
|
||||
/// No description provided for @settings_fastSpeed.
|
||||
/// No description provided for @settings_clientRepeatSubtitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Fast Speed'**
|
||||
String get settings_fastSpeed;
|
||||
/// **'Allow this device to repeat mesh packets for others'**
|
||||
String get settings_clientRepeatSubtitle;
|
||||
|
||||
/// No description provided for @settings_clientRepeatFreqWarning.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Off-grid repeat requires 433, 869, or 918 MHz frequency'**
|
||||
String get settings_clientRepeatFreqWarning;
|
||||
|
||||
/// No description provided for @settings_error.
|
||||
///
|
||||
@@ -2518,6 +2524,30 @@ abstract class AppLocalizations {
|
||||
/// **'Manage Repeater'**
|
||||
String get map_manageRepeater;
|
||||
|
||||
/// No description provided for @map_tapToAdd.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Tap on nodes to add them to the path.'**
|
||||
String get map_tapToAdd;
|
||||
|
||||
/// No description provided for @map_runTrace.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Run Path Trace'**
|
||||
String get map_runTrace;
|
||||
|
||||
/// No description provided for @map_removeLast.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Remove Last'**
|
||||
String get map_removeLast;
|
||||
|
||||
/// No description provided for @map_pathTraceCancelled.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Path trace cancelled.'**
|
||||
String get map_pathTraceCancelled;
|
||||
|
||||
/// No description provided for @mapCache_title.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -4730,6 +4760,12 @@ abstract class AppLocalizations {
|
||||
/// **'One or more of the hops is missing a location!'**
|
||||
String get pathTrace_someHopsNoLocation;
|
||||
|
||||
/// No description provided for @pathTrace_clearTooltip.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Clear path.'**
|
||||
String get pathTrace_clearTooltip;
|
||||
|
||||
/// No description provided for @contacts_pathTrace.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
||||
@@ -143,6 +143,16 @@ class AppLocalizationsBg extends AppLocalizations {
|
||||
@override
|
||||
String get scanner_scan => 'Сканирай';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOff => 'Bluetooth е изключен.';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOffMessage =>
|
||||
'Моля, активирайте Bluetooth, за да сканирате за устройства.';
|
||||
|
||||
@override
|
||||
String get scanner_enableBluetooth => 'Активирайте Bluetooth';
|
||||
|
||||
@override
|
||||
String get device_quickSwitch => 'Бързо превключване';
|
||||
|
||||
@@ -340,15 +350,6 @@ class AppLocalizationsBg extends AppLocalizations {
|
||||
@override
|
||||
String get settings_presets => 'Предварителни настройки';
|
||||
|
||||
@override
|
||||
String get settings_preset915Mhz => '915 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset868Mhz => '868 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset433Mhz => '433 MHz';
|
||||
|
||||
@override
|
||||
String get settings_frequency => 'Честота (MHz)';
|
||||
|
||||
@@ -377,10 +378,15 @@ class AppLocalizationsBg extends AppLocalizations {
|
||||
String get settings_txPowerInvalid => 'Невалидна мощност на TX (0-22 dBm)';
|
||||
|
||||
@override
|
||||
String get settings_longRange => 'Дълъг обхват';
|
||||
String get settings_clientRepeat => 'Без електричество – повторение';
|
||||
|
||||
@override
|
||||
String get settings_fastSpeed => 'Бърза скорост';
|
||||
String get settings_clientRepeatSubtitle =>
|
||||
'Позволете на това устройство да предава пакети към мрежата за други устройства.';
|
||||
|
||||
@override
|
||||
String get settings_clientRepeatFreqWarning =>
|
||||
'За повторение извън мрежата са необходими честоти от 433, 869 или 918 MHz.';
|
||||
|
||||
@override
|
||||
String settings_error(String message) {
|
||||
@@ -1363,6 +1369,19 @@ class AppLocalizationsBg extends AppLocalizations {
|
||||
@override
|
||||
String get map_manageRepeater => 'Управление на Повтарящ се Елемент';
|
||||
|
||||
@override
|
||||
String get map_tapToAdd =>
|
||||
'Натиснете върху възлите, за да ги добавите към пътя.';
|
||||
|
||||
@override
|
||||
String get map_runTrace => 'Изпълни Път на Следване';
|
||||
|
||||
@override
|
||||
String get map_removeLast => 'Премахни Последно';
|
||||
|
||||
@override
|
||||
String get map_pathTraceCancelled => 'Отменен е следването на пътя.';
|
||||
|
||||
@override
|
||||
String get mapCache_title => 'Кеш на офлайн карти';
|
||||
|
||||
@@ -2699,6 +2718,9 @@ class AppLocalizationsBg extends AppLocalizations {
|
||||
String get pathTrace_someHopsNoLocation =>
|
||||
'Един или повече от хмелите липсва местоположение!';
|
||||
|
||||
@override
|
||||
String get pathTrace_clearTooltip => 'Изчисти пътя';
|
||||
|
||||
@override
|
||||
String get contacts_pathTrace => 'Пътен проследяване';
|
||||
|
||||
|
||||
@@ -143,6 +143,16 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
@override
|
||||
String get scanner_scan => 'Scannen';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOff => 'Bluetooth ist deaktiviert.';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOffMessage =>
|
||||
'Bitte aktivieren Sie Bluetooth, um nach Geräten zu suchen.';
|
||||
|
||||
@override
|
||||
String get scanner_enableBluetooth => 'Bluetooth aktivieren';
|
||||
|
||||
@override
|
||||
String get device_quickSwitch => 'Schnelles Umschalten';
|
||||
|
||||
@@ -244,10 +254,10 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
String get settings_actions => 'Aktionen';
|
||||
|
||||
@override
|
||||
String get settings_sendAdvertisement => 'Sende eine Ankündigung';
|
||||
String get settings_sendAdvertisement => 'Sende Ankündigung';
|
||||
|
||||
@override
|
||||
String get settings_sendAdvertisementSubtitle => 'Sende Ankündigung';
|
||||
String get settings_sendAdvertisementSubtitle => 'Sende eine Ankündigung';
|
||||
|
||||
@override
|
||||
String get settings_advertisementSent => 'Ankündigung gesendet';
|
||||
@@ -267,7 +277,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get settings_refreshContactsSubtitle =>
|
||||
'Kontakte-Liste vom Gerät neu laden';
|
||||
'Kontakt-Liste vom Gerät neu laden';
|
||||
|
||||
@override
|
||||
String get settings_rebootDevice => 'Gerät neu starten';
|
||||
@@ -334,15 +344,6 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
@override
|
||||
String get settings_presets => 'Voreinstellungen';
|
||||
|
||||
@override
|
||||
String get settings_preset915Mhz => '915 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset868Mhz => '868 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset433Mhz => '433 MHz';
|
||||
|
||||
@override
|
||||
String get settings_frequency => 'Frequenz (MHz)';
|
||||
|
||||
@@ -371,10 +372,15 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
String get settings_txPowerInvalid => 'Ungültige TX-Leistung (0-22 dBm)';
|
||||
|
||||
@override
|
||||
String get settings_longRange => 'Grosse Reichweite';
|
||||
String get settings_clientRepeat => 'Wiederholung, ohne Stromanschluss';
|
||||
|
||||
@override
|
||||
String get settings_fastSpeed => 'Schnelle Geschwindigkeit';
|
||||
String get settings_clientRepeatSubtitle =>
|
||||
'Ermöglichen Sie diesem Gerät, Mesh-Pakete für andere zu wiederholen.';
|
||||
|
||||
@override
|
||||
String get settings_clientRepeatFreqWarning =>
|
||||
'Die Kommunikation ohne Stromversorgung erfordert Frequenzen von 433, 869 oder 918 MHz.';
|
||||
|
||||
@override
|
||||
String settings_error(String message) {
|
||||
@@ -1086,7 +1092,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get chat_recentAckPaths =>
|
||||
'Aktuelle ACK-Pfade (tasten, um zu verwenden):';
|
||||
'Aktuelle ACK-Pfade (antippen, um zu verwenden):';
|
||||
|
||||
@override
|
||||
String get chat_pathHistoryFull =>
|
||||
@@ -1117,7 +1123,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get chat_noPathHistoryYet =>
|
||||
'Keine eine Pfadhistorie vorhanden.\nSende eine Nachricht, um Pfade zu entdecken.';
|
||||
'Keine Pfadhistorie vorhanden.\nSende eine Nachricht, um Pfade zu entdecken.';
|
||||
|
||||
@override
|
||||
String get chat_pathActions => 'Pfadaktionen:';
|
||||
@@ -1362,6 +1368,19 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
@override
|
||||
String get map_manageRepeater => 'Repeater verwalten';
|
||||
|
||||
@override
|
||||
String get map_tapToAdd =>
|
||||
'Tippen Sie auf Knoten, um sie zum Pfad hinzuzufügen.';
|
||||
|
||||
@override
|
||||
String get map_runTrace => 'Pfadverlauf ausführen';
|
||||
|
||||
@override
|
||||
String get map_removeLast => 'Letztes Entfernen';
|
||||
|
||||
@override
|
||||
String get map_pathTraceCancelled => 'Pfadverfolgung abgebrochen.';
|
||||
|
||||
@override
|
||||
String get mapCache_title => 'Offline-Karten-Cache';
|
||||
|
||||
@@ -1418,7 +1437,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String mapCache_estimatedTiles(int count) {
|
||||
return 'Geschätzte Fliesen: $count';
|
||||
return 'Geschätzte Kacheln: $count';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -1592,7 +1611,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get path_hexPrefixInstructions =>
|
||||
'Gebe für jeden Hopfen 2-stellige Hex-Präfixe ein, getrennt durch Kommas.';
|
||||
'Gebe für jeden Zwischen-Hop das 2-stellige Hex-Präfix ein, getrennt durch Kommas.';
|
||||
|
||||
@override
|
||||
String get path_hexPrefixExample =>
|
||||
@@ -1689,7 +1708,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get repeater_statusRequestTimeout =>
|
||||
'Statusanfrage zeitweise fehlgeschlagen.';
|
||||
'Statusanfrage durch Timeout fehlgeschlagen.';
|
||||
|
||||
@override
|
||||
String repeater_errorLoadingStatus(String error) {
|
||||
@@ -1766,7 +1785,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String repeater_duplicatesFloodDirect(String flood, String direct) {
|
||||
return 'Überflut: $flood, Direkt: $direct';
|
||||
return 'Flut: $flood, Direkt: $direct';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -1797,7 +1816,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get repeater_guestPasswordHelper =>
|
||||
'Schreibgeschützter Zugriffspasswort';
|
||||
'Schreibgeschütztes Zugriffspasswort';
|
||||
|
||||
@override
|
||||
String get repeater_radioSettings => 'Funk Einstellungen';
|
||||
@@ -1992,7 +2011,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
String get repeater_cliTitle => 'Repeater CLI';
|
||||
|
||||
@override
|
||||
String get repeater_debugNextCommand => 'Fehlersuche Nächster Befehl';
|
||||
String get repeater_debugNextCommand => 'Fehlersuche des nächsten Befehls';
|
||||
|
||||
@override
|
||||
String get repeater_commandHelp => 'Hilfe';
|
||||
@@ -2005,7 +2024,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get repeater_typeCommandOrUseQuick =>
|
||||
'Geben Sie einen Befehl unten ein oder verwenden Sie Schnellbefehle';
|
||||
'Geben Sie unten einen Befehl ein oder verwenden Sie die Schnellbefehle';
|
||||
|
||||
@override
|
||||
String get repeater_enterCommandHint => 'Geben Sie den Befehl ein...';
|
||||
@@ -2131,7 +2150,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get repeater_cliHelpSetRxDelay =>
|
||||
'Sets (experimentell) als Basis (muss > 1 sein für den Effekt) zur Anwendung einer leichten Verzögerung bei empfangenen Paketen, basierend auf Signalstärke/Punktzahl. Auf 0 setzen, um die Funktion zu deaktivieren.';
|
||||
'Fügt eine leichte Verzögerung bei empfangenen Paketen hinzu, basierend auf Signalstärke/Punktzahl. Auf 0 setzen, um die Funktion zu deaktivieren.';
|
||||
|
||||
@override
|
||||
String get repeater_cliHelpSetTxDelay =>
|
||||
@@ -2175,7 +2194,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get repeater_cliHelpGetBridgeType =>
|
||||
'Ruft Brückentyp none, rs232, espnow ab.';
|
||||
'Ruft Brückentyp: none, rs232, espnow ab.';
|
||||
|
||||
@override
|
||||
String get repeater_cliHelpLogStart =>
|
||||
@@ -2202,7 +2221,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get repeater_cliHelpRegionLoad =>
|
||||
'Hinweis: Dies ist ein spezieller Mehrbefehl-Aufruf. Jeder nachfolgende Befehl ist ein Regionsname (eingedruckt mit Leerzeichen zur Angabe der übergeordneten Hierarchie, mit mindestens einem Leerzeichen). Beendet durch das Senden einer Leerzeile/des Befehls.';
|
||||
'Hinweis: Dies ist ein spezieller Mehrbefehl-Aufruf. Jeder nachfolgende Befehl ist ein Regionsname (eingerückt mit Leerzeichen zur Angabe der übergeordneten Hierarchie, mit mindestens einem Leerzeichen). Beendet durch das Senden einer Leerzeile.';
|
||||
|
||||
@override
|
||||
String get repeater_cliHelpRegionGet =>
|
||||
@@ -2351,10 +2370,11 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
}
|
||||
|
||||
@override
|
||||
String get neighbors_receivedData => 'Empfangene Nachbarendaten';
|
||||
String get neighbors_receivedData => 'Empfangene Nachbarsdaten';
|
||||
|
||||
@override
|
||||
String get neighbors_requestTimedOut => 'Nachbarn melden zeitweise Ausfall.';
|
||||
String get neighbors_requestTimedOut =>
|
||||
'Anfrage durch Timeout fehlgeschlagen.';
|
||||
|
||||
@override
|
||||
String neighbors_errorLoading(String error) {
|
||||
@@ -2365,16 +2385,16 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
String get neighbors_repeatersNeighbours => 'Nachbarn';
|
||||
|
||||
@override
|
||||
String get neighbors_noData => 'Keine Nachbardaten verfügbar.';
|
||||
String get neighbors_noData => 'Keine Nachbarsdaten verfügbar.';
|
||||
|
||||
@override
|
||||
String neighbors_unknownContact(String pubkey) {
|
||||
return 'Unbekannte $pubkey';
|
||||
return 'Unbekannt $pubkey';
|
||||
}
|
||||
|
||||
@override
|
||||
String neighbors_heardAgo(String time) {
|
||||
return 'Hörte: $time vor her.';
|
||||
return 'Gehört vor: $time';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -2394,7 +2414,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
'Die Detailangaben für dieses Paket sind nicht verfügbar.';
|
||||
|
||||
@override
|
||||
String get channelPath_messageDetails => 'Nachrichtsdetails';
|
||||
String get channelPath_messageDetails => 'Nachrichtendetails';
|
||||
|
||||
@override
|
||||
String get channelPath_senderLabel => 'Sender';
|
||||
@@ -2630,14 +2650,14 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
'Füge einen Hashtag-Kanal für diese Community hinzu';
|
||||
|
||||
@override
|
||||
String get community_selectCommunity => 'Wählen Sie Community';
|
||||
String get community_selectCommunity => 'Wählen Sie eine Community';
|
||||
|
||||
@override
|
||||
String get community_regularHashtag => 'Regulärer Hashtag';
|
||||
|
||||
@override
|
||||
String get community_regularHashtagDesc =>
|
||||
'Öffentliches Hashtag (jeder kann teilnehmen)';
|
||||
'Öffentlicher Hashtag (jeder kann teilnehmen)';
|
||||
|
||||
@override
|
||||
String get community_communityHashtag => 'Community Hashtag';
|
||||
@@ -2682,7 +2702,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
String get listFilter_roomServers => 'Raumserver';
|
||||
|
||||
@override
|
||||
String get listFilter_unreadOnly => 'Nur nicht gelesen';
|
||||
String get listFilter_unreadOnly => 'Nicht gelesen';
|
||||
|
||||
@override
|
||||
String get listFilter_newGroup => 'Neue Gruppe';
|
||||
@@ -2701,7 +2721,10 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get pathTrace_someHopsNoLocation =>
|
||||
'Eine oder mehrere der Hopfen fehlen einen Standort!';
|
||||
'Bei einer oder mehreren Knoten fehlt der Standort!';
|
||||
|
||||
@override
|
||||
String get pathTrace_clearTooltip => 'Pfad löschen';
|
||||
|
||||
@override
|
||||
String get contacts_pathTrace => 'Pfadverfolgung';
|
||||
@@ -2743,14 +2766,14 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
'Kontakt konnte nicht importiert werden';
|
||||
|
||||
@override
|
||||
String get contacts_zeroHopAdvert => 'Zero-Hop-Anzeige';
|
||||
String get contacts_zeroHopAdvert => 'Zero-Hop-Ankündigung';
|
||||
|
||||
@override
|
||||
String get contacts_floodAdvert => 'Überflutungsanzeige';
|
||||
String get contacts_floodAdvert => 'Flut-Ankündigung';
|
||||
|
||||
@override
|
||||
String get contacts_copyAdvertToClipboard =>
|
||||
'Werbung in die Zwischenablage kopieren';
|
||||
'Ankündigung in die Zwischenablage kopieren';
|
||||
|
||||
@override
|
||||
String get contacts_addContactFromClipboard =>
|
||||
@@ -2776,7 +2799,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get contacts_contactAdvertCopyFailed =>
|
||||
'Kopieren des Werbeinhalts in die Zwischenablage fehlgeschlagen.';
|
||||
'Kopieren der Ankündigung in die Zwischenablage fehlgeschlagen.';
|
||||
|
||||
@override
|
||||
String get notification_activityTitle => 'MeshCore Aktivität';
|
||||
@@ -2824,28 +2847,28 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get settings_gpxExportRepeaters =>
|
||||
'Repeater und Raumserver nach GPX exportieren';
|
||||
'Repeater und Raumserver als GPX exportieren';
|
||||
|
||||
@override
|
||||
String get settings_gpxExportRepeatersSubtitle =>
|
||||
'Exportiert Repeater und Raumserver mit einem Standort in eine GPX-Datei.';
|
||||
|
||||
@override
|
||||
String get settings_gpxExportContacts => 'Begleiter nach GPX exportieren';
|
||||
String get settings_gpxExportContacts => 'Kontakte als GPX exportieren';
|
||||
|
||||
@override
|
||||
String get settings_gpxExportContactsSubtitle =>
|
||||
'Exportiert Begleiter mit einem Ort in eine GPX-Datei.';
|
||||
'Exportiert Kontakte mit einem Ort in eine GPX-Datei.';
|
||||
|
||||
@override
|
||||
String get settings_gpxExportAll => 'Alle Kontakte nach GPX exportieren';
|
||||
String get settings_gpxExportAll => 'Alle Knoten als GPX exportieren';
|
||||
|
||||
@override
|
||||
String get settings_gpxExportAllSubtitle =>
|
||||
'Exportiert alle Kontakte mit einem Standort in eine GPX-Datei.';
|
||||
'Exportiert alle Knoten mit einem Standort in eine GPX-Datei.';
|
||||
|
||||
@override
|
||||
String get settings_gpxExportSuccess => 'Erfolgreich GPX-Datei exportiert.';
|
||||
String get settings_gpxExportSuccess => 'GPX-Datei erfolgreich exportiert.';
|
||||
|
||||
@override
|
||||
String get settings_gpxExportNoContacts => 'Keine Kontakte zum Exportieren.';
|
||||
@@ -2863,16 +2886,16 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
'Repeater- und Raumserver-Standorte';
|
||||
|
||||
@override
|
||||
String get settings_gpxExportChat => 'Begleiterstandorte';
|
||||
String get settings_gpxExportChat => 'Kontaktstandorte';
|
||||
|
||||
@override
|
||||
String get settings_gpxExportAllContacts => 'Alle Kontaktstandorte';
|
||||
|
||||
@override
|
||||
String get settings_gpxExportShareText =>
|
||||
'Kartendaten aus meshcore-open exportiert';
|
||||
'GPX-Kartendaten aus meshcore-open exportiert';
|
||||
|
||||
@override
|
||||
String get settings_gpxExportShareSubject =>
|
||||
'meshcore-open GPX-Kartendaten exportieren';
|
||||
'GPX-Kartendaten aus meshcore-open exportieren';
|
||||
}
|
||||
|
||||
@@ -142,6 +142,16 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get scanner_scan => 'Scan';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOff => 'Bluetooth is off';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOffMessage =>
|
||||
'Please turn on Bluetooth to scan for devices';
|
||||
|
||||
@override
|
||||
String get scanner_enableBluetooth => 'Enable Bluetooth';
|
||||
|
||||
@override
|
||||
String get device_quickSwitch => 'Quick switch';
|
||||
|
||||
@@ -332,15 +342,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get settings_presets => 'Presets';
|
||||
|
||||
@override
|
||||
String get settings_preset915Mhz => '915 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset868Mhz => '868 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset433Mhz => '433 MHz';
|
||||
|
||||
@override
|
||||
String get settings_frequency => 'Frequency (MHz)';
|
||||
|
||||
@@ -369,10 +370,15 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
String get settings_txPowerInvalid => 'Invalid TX power (0-22 dBm)';
|
||||
|
||||
@override
|
||||
String get settings_longRange => 'Long Range';
|
||||
String get settings_clientRepeat => 'Off-Grid Repeat';
|
||||
|
||||
@override
|
||||
String get settings_fastSpeed => 'Fast Speed';
|
||||
String get settings_clientRepeatSubtitle =>
|
||||
'Allow this device to repeat mesh packets for others';
|
||||
|
||||
@override
|
||||
String get settings_clientRepeatFreqWarning =>
|
||||
'Off-grid repeat requires 433, 869, or 918 MHz frequency';
|
||||
|
||||
@override
|
||||
String settings_error(String message) {
|
||||
@@ -1342,6 +1348,18 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get map_manageRepeater => 'Manage Repeater';
|
||||
|
||||
@override
|
||||
String get map_tapToAdd => 'Tap on nodes to add them to the path.';
|
||||
|
||||
@override
|
||||
String get map_runTrace => 'Run Path Trace';
|
||||
|
||||
@override
|
||||
String get map_removeLast => 'Remove Last';
|
||||
|
||||
@override
|
||||
String get map_pathTraceCancelled => 'Path trace cancelled.';
|
||||
|
||||
@override
|
||||
String get mapCache_title => 'Offline Map Cache';
|
||||
|
||||
@@ -2659,6 +2677,9 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
String get pathTrace_someHopsNoLocation =>
|
||||
'One or more of the hops is missing a location!';
|
||||
|
||||
@override
|
||||
String get pathTrace_clearTooltip => 'Clear path.';
|
||||
|
||||
@override
|
||||
String get contacts_pathTrace => 'Path Trace';
|
||||
|
||||
|
||||
@@ -143,6 +143,16 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
@override
|
||||
String get scanner_scan => 'Escanea';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOff => 'Bluetooth está desactivado.';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOffMessage =>
|
||||
'Por favor, active el Bluetooth para escanear dispositivos.';
|
||||
|
||||
@override
|
||||
String get scanner_enableBluetooth => 'Habilitar Bluetooth';
|
||||
|
||||
@override
|
||||
String get device_quickSwitch => 'Cambiar rápidamente';
|
||||
|
||||
@@ -337,15 +347,6 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
@override
|
||||
String get settings_presets => 'Preajustes';
|
||||
|
||||
@override
|
||||
String get settings_preset915Mhz => '915 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset868Mhz => '868 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset433Mhz => '433 MHz';
|
||||
|
||||
@override
|
||||
String get settings_frequency => 'Frecuencia (MHz)';
|
||||
|
||||
@@ -374,10 +375,15 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
String get settings_txPowerInvalid => 'Potencia de TX inválida (0-22 dBm)';
|
||||
|
||||
@override
|
||||
String get settings_longRange => 'Largo Alcance';
|
||||
String get settings_clientRepeat => 'Repetir sin conexión';
|
||||
|
||||
@override
|
||||
String get settings_fastSpeed => 'Velocidad Rápida';
|
||||
String get settings_clientRepeatSubtitle =>
|
||||
'Permita que este dispositivo repita los paquetes de red para otros usuarios.';
|
||||
|
||||
@override
|
||||
String get settings_clientRepeatFreqWarning =>
|
||||
'Para la comunicación fuera de la red, se requiere una frecuencia de 433, 869 o 918 MHz.';
|
||||
|
||||
@override
|
||||
String settings_error(String message) {
|
||||
@@ -1360,6 +1366,18 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
@override
|
||||
String get map_manageRepeater => 'Gestionar Repetidor';
|
||||
|
||||
@override
|
||||
String get map_tapToAdd => 'Pulse en los nodos para agregarlos al camino.';
|
||||
|
||||
@override
|
||||
String get map_runTrace => 'Ejecutar Rastreo de Ruta';
|
||||
|
||||
@override
|
||||
String get map_removeLast => 'Eliminar último';
|
||||
|
||||
@override
|
||||
String get map_pathTraceCancelled => 'Rastreo de ruta cancelado.';
|
||||
|
||||
@override
|
||||
String get mapCache_title => 'Caché de Mapa Offline';
|
||||
|
||||
@@ -2698,6 +2716,9 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
String get pathTrace_someHopsNoLocation =>
|
||||
'Uno o más de los lúpulos carecen de una ubicación';
|
||||
|
||||
@override
|
||||
String get pathTrace_clearTooltip => 'Borrar ruta';
|
||||
|
||||
@override
|
||||
String get contacts_pathTrace => 'Rastreo de caminos';
|
||||
|
||||
|
||||
@@ -143,6 +143,16 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
@override
|
||||
String get scanner_scan => 'Scanner';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOff => 'Le Bluetooth est désactivé.';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOffMessage =>
|
||||
'Veuillez activer le Bluetooth pour rechercher des appareils.';
|
||||
|
||||
@override
|
||||
String get scanner_enableBluetooth => 'Activer le Bluetooth';
|
||||
|
||||
@override
|
||||
String get device_quickSwitch => 'Basculement rapide';
|
||||
|
||||
@@ -338,15 +348,6 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
@override
|
||||
String get settings_presets => 'Préréglages';
|
||||
|
||||
@override
|
||||
String get settings_preset915Mhz => '915 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset868Mhz => '868 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset433Mhz => '433 MHz';
|
||||
|
||||
@override
|
||||
String get settings_frequency => 'Fréquence (MHz)';
|
||||
|
||||
@@ -375,10 +376,15 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get settings_txPowerInvalid => 'Puissance TX invalide (0-22 dBm)';
|
||||
|
||||
@override
|
||||
String get settings_longRange => 'Portée Longue';
|
||||
String get settings_clientRepeat => 'Répétition hors réseau';
|
||||
|
||||
@override
|
||||
String get settings_fastSpeed => 'Vitesse Rapide';
|
||||
String get settings_clientRepeatSubtitle =>
|
||||
'Permettez à cet appareil de répéter les paquets de données pour les autres.';
|
||||
|
||||
@override
|
||||
String get settings_clientRepeatFreqWarning =>
|
||||
'Pour les transmissions hors réseau, il est nécessaire d\'utiliser les fréquences de 433, 869 ou 918 MHz.';
|
||||
|
||||
@override
|
||||
String settings_error(String message) {
|
||||
@@ -560,11 +566,11 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get appSettings_mapDisplay => 'Affichage de la carte';
|
||||
|
||||
@override
|
||||
String get appSettings_showRepeaters => 'Afficher les répétiteurs';
|
||||
String get appSettings_showRepeaters => 'Afficher les répéteurs';
|
||||
|
||||
@override
|
||||
String get appSettings_showRepeatersSubtitle =>
|
||||
'Afficher les nœuds répétiteurs sur la carte';
|
||||
'Afficher les nœuds répéteurs sur la carte';
|
||||
|
||||
@override
|
||||
String get appSettings_showChatNodes => 'Afficher les nœuds de discussion';
|
||||
@@ -671,7 +677,7 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
}
|
||||
|
||||
@override
|
||||
String get contacts_manageRepeater => 'Gérer le répétiteur';
|
||||
String get contacts_manageRepeater => 'Gérer le répéteur';
|
||||
|
||||
@override
|
||||
String get contacts_manageRoom => 'Gérer le Room Server';
|
||||
@@ -1094,18 +1100,18 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
'L\'historique du chemin est plein. Supprimez les entrées pour en ajouter de nouvelles.';
|
||||
|
||||
@override
|
||||
String get chat_hopSingular => 'Sautez';
|
||||
String get chat_hopSingular => 'saut';
|
||||
|
||||
@override
|
||||
String get chat_hopPlural => 'sautez';
|
||||
String get chat_hopPlural => 'sauts';
|
||||
|
||||
@override
|
||||
String chat_hopsCount(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'hops',
|
||||
one: 'hop',
|
||||
other: 'sauts',
|
||||
one: 'saut',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
@@ -1259,7 +1265,7 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get map_chat => 'Chat';
|
||||
|
||||
@override
|
||||
String get map_repeater => 'Répétiteur';
|
||||
String get map_repeater => 'Répéteur';
|
||||
|
||||
@override
|
||||
String get map_room => 'Salle';
|
||||
@@ -1365,7 +1371,20 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get map_joinRoom => 'Rejoindre la salle';
|
||||
|
||||
@override
|
||||
String get map_manageRepeater => 'Gérer le répétiteur';
|
||||
String get map_manageRepeater => 'Gérer le répéteur';
|
||||
|
||||
@override
|
||||
String get map_tapToAdd =>
|
||||
'Appuyez sur les nœuds pour les ajouter au chemin.';
|
||||
|
||||
@override
|
||||
String get map_runTrace => 'Exécuter la traçage de chemin';
|
||||
|
||||
@override
|
||||
String get map_removeLast => 'Supprimer le dernier';
|
||||
|
||||
@override
|
||||
String get map_pathTraceCancelled => 'Traçage de chemin annulé';
|
||||
|
||||
@override
|
||||
String get mapCache_title => 'Cache de Carte Hors Ligne';
|
||||
@@ -1509,7 +1528,7 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
'Êtes-vous sûr de vouloir vous déconnecter de cet appareil ?';
|
||||
|
||||
@override
|
||||
String get login_repeaterLogin => 'Connexion au répétiteur';
|
||||
String get login_repeaterLogin => 'Connexion au répéteur';
|
||||
|
||||
@override
|
||||
String get login_roomLogin => 'Connexion Salle';
|
||||
@@ -1529,7 +1548,7 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get login_repeaterDescription =>
|
||||
'Entrez le mot de passe du répétiteur pour accéder aux paramètres et à l\'état.';
|
||||
'Entrez le mot de passe du répéteur pour accéder aux paramètres et à l\'état.';
|
||||
|
||||
@override
|
||||
String get login_roomDescription =>
|
||||
@@ -1634,7 +1653,7 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get path_setPath => 'Définir le chemin';
|
||||
|
||||
@override
|
||||
String get repeater_management => 'Gestion des répétiteurs';
|
||||
String get repeater_management => 'Gestion des répéteurs';
|
||||
|
||||
@override
|
||||
String get room_management => 'Administración del Servidor de Habitación';
|
||||
@@ -1647,7 +1666,7 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get repeater_statusSubtitle =>
|
||||
'Afficher l\'état, les statistiques et les voisins du répétiteur';
|
||||
'Afficher l\'état, les statistiques et les voisins du répéteur';
|
||||
|
||||
@override
|
||||
String get repeater_telemetry => 'Télémetrie';
|
||||
@@ -1660,7 +1679,7 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get repeater_cli => 'CLI';
|
||||
|
||||
@override
|
||||
String get repeater_cliSubtitle => 'Envoyer des commandes au répétiteur';
|
||||
String get repeater_cliSubtitle => 'Envoyer des commandes au répéteur';
|
||||
|
||||
@override
|
||||
String get repeater_neighbours => 'Voisins';
|
||||
@@ -1674,10 +1693,10 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get repeater_settingsSubtitle =>
|
||||
'Configurer les paramètres du répétiteur';
|
||||
'Configurer les paramètres du répéteur';
|
||||
|
||||
@override
|
||||
String get repeater_statusTitle => 'État du répétiteur';
|
||||
String get repeater_statusTitle => 'État du répéteur';
|
||||
|
||||
@override
|
||||
String get repeater_routingMode => 'Mode de routage';
|
||||
@@ -1783,16 +1802,16 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
}
|
||||
|
||||
@override
|
||||
String get repeater_settingsTitle => 'Paramètres du répétiteur';
|
||||
String get repeater_settingsTitle => 'Paramètres du répéteur';
|
||||
|
||||
@override
|
||||
String get repeater_basicSettings => 'Paramètres de base';
|
||||
|
||||
@override
|
||||
String get repeater_repeaterName => 'Nom du répétiteur';
|
||||
String get repeater_repeaterName => 'Nom du répéteur';
|
||||
|
||||
@override
|
||||
String get repeater_repeaterNameHelper => 'Afficher le nom de ce répétiteur';
|
||||
String get repeater_repeaterNameHelper => 'Afficher le nom de ce répéteur';
|
||||
|
||||
@override
|
||||
String get repeater_adminPassword => 'Mot de passe Administrateur';
|
||||
@@ -1856,7 +1875,7 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get repeater_packetForwardingSubtitle =>
|
||||
'Activer le répétiteur pour transmettre des paquets';
|
||||
'Activer le répéteur pour transmettre des paquets';
|
||||
|
||||
@override
|
||||
String get repeater_guestAccess => 'Accès Invité';
|
||||
@@ -1905,11 +1924,11 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get repeater_rebootRepeaterSubtitle =>
|
||||
'Réinitialiser l\'appareil répétiteur';
|
||||
'Réinitialiser l\'appareil répéteur';
|
||||
|
||||
@override
|
||||
String get repeater_rebootRepeaterConfirm =>
|
||||
'Êtes-vous sûr de vouloir redémarrer ce répétiteur ?';
|
||||
'Êtes-vous sûr de vouloir redémarrer ce répéteur ?';
|
||||
|
||||
@override
|
||||
String get repeater_regenerateIdentityKey => 'Ré générer la clé d\'identité';
|
||||
@@ -1920,18 +1939,18 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get repeater_regenerateIdentityKeyConfirm =>
|
||||
'Cela générera une nouvelle identité pour le répétiteur. Continuer ?';
|
||||
'Cela générera une nouvelle identité pour le répéteur. Continuer ?';
|
||||
|
||||
@override
|
||||
String get repeater_eraseFileSystem => 'Supprimer le système de fichiers';
|
||||
|
||||
@override
|
||||
String get repeater_eraseFileSystemSubtitle =>
|
||||
'Formater le système de fichiers du répétiteur';
|
||||
'Formater le système de fichiers du répéteur';
|
||||
|
||||
@override
|
||||
String get repeater_eraseFileSystemConfirm =>
|
||||
'AVERTISSEMENT : Cela effacera toutes les données du répétiteur. Cela ne peut pas être annulé !';
|
||||
'AVERTISSEMENT : Cela effacera toutes les données du répéteur. Cela ne peut pas être annulé !';
|
||||
|
||||
@override
|
||||
String get repeater_eraseSerialOnly =>
|
||||
@@ -1999,7 +2018,7 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
}
|
||||
|
||||
@override
|
||||
String get repeater_cliTitle => 'Répétiteur CLI';
|
||||
String get repeater_cliTitle => 'Répéteur CLI';
|
||||
|
||||
@override
|
||||
String get repeater_debugNextCommand => 'Déboguer Prochaine Commande';
|
||||
@@ -2091,7 +2110,7 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get repeater_cliHelpSetRepeat =>
|
||||
'Active ou désactive le rôle du répétiteur pour ce nœud.';
|
||||
'Active ou désactive le rôle du répéteur pour ce nœud.';
|
||||
|
||||
@override
|
||||
String get repeater_cliHelpSetAllowReadOnly =>
|
||||
@@ -2115,7 +2134,7 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get repeater_cliHelpSetAdvertInterval =>
|
||||
'Définit l\'intervalle du minuteur pour envoyer un paquet d\'annonce local (sans relais). Définir sur 0 pour désactiver.';
|
||||
'Définit l\'intervalle entre chaque émission d\'une annonce locale (sans relais). Définir sur 0 pour désactiver.';
|
||||
|
||||
@override
|
||||
String get repeater_cliHelpSetFloodAdvertInterval =>
|
||||
@@ -2201,7 +2220,7 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get repeater_cliHelpNeighbors =>
|
||||
'Affiche une liste d\'autres nœuds répétiteurs entendus via des annonces sans relais. Chaque ligne est id-préfixe-hexadécimal:timestamp:snr-fois-4';
|
||||
'Affiche une liste d\'autres nœuds répéteurs entendus via des annonces sans relais. Chaque ligne est id-préfixe-hexadécimal:timestamp:snr-fois-4';
|
||||
|
||||
@override
|
||||
String get repeater_cliHelpNeighborRemove =>
|
||||
@@ -2289,12 +2308,11 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get repeater_logging => 'Journalisation';
|
||||
|
||||
@override
|
||||
String get repeater_neighborsRepeaterOnly =>
|
||||
'Voisins (Uniquement répétiteur)';
|
||||
String get repeater_neighborsRepeaterOnly => 'Voisins (Uniquement répéteur)';
|
||||
|
||||
@override
|
||||
String get repeater_regionManagementRepeaterOnly =>
|
||||
'Gestion des régions (uniquement pour le répétiteur)';
|
||||
'Gestion des régions (uniquement pour le répéteur)';
|
||||
|
||||
@override
|
||||
String get repeater_regionNote =>
|
||||
@@ -2399,7 +2417,7 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get channelPath_otherObservedPaths => 'Autres chemins observés';
|
||||
|
||||
@override
|
||||
String get channelPath_repeaterHops => 'Sauts du répétiteur';
|
||||
String get channelPath_repeaterHops => 'Sauts du répéteur';
|
||||
|
||||
@override
|
||||
String get channelPath_noHopDetails =>
|
||||
@@ -2467,7 +2485,7 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get channelPath_noRepeaterLocations =>
|
||||
'Aucune position de répétiteur disponible pour ce chemin.';
|
||||
'Aucune position de répéteur disponible pour ce chemin.';
|
||||
|
||||
@override
|
||||
String channelPath_primaryPath(int index) {
|
||||
@@ -2713,7 +2731,10 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get pathTrace_someHopsNoLocation =>
|
||||
'Une ou plusieurs des houblons manquent d\'une localisation !';
|
||||
'Un ou plusieurs des sauts manquent d\'une localisation !';
|
||||
|
||||
@override
|
||||
String get pathTrace_clearTooltip => 'Effacer le chemin';
|
||||
|
||||
@override
|
||||
String get contacts_pathTrace => 'Traçage de chemin';
|
||||
@@ -2756,10 +2777,10 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
'Échec de l\'importation du contact.';
|
||||
|
||||
@override
|
||||
String get contacts_zeroHopAdvert => 'Annonce Zero Hop';
|
||||
String get contacts_zeroHopAdvert => 'Annonce Zero saut';
|
||||
|
||||
@override
|
||||
String get contacts_floodAdvert => 'Annonce de crue';
|
||||
String get contacts_floodAdvert => 'Annonce à tout le réseau';
|
||||
|
||||
@override
|
||||
String get contacts_copyAdvertToClipboard =>
|
||||
|
||||
@@ -143,6 +143,16 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
@override
|
||||
String get scanner_scan => 'Scansiona';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOff => 'Il Bluetooth è disattivato.';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOffMessage =>
|
||||
'Si prega di attivare il Bluetooth per effettuare la scansione dei dispositivi.';
|
||||
|
||||
@override
|
||||
String get scanner_enableBluetooth => 'Abilita il Bluetooth';
|
||||
|
||||
@override
|
||||
String get device_quickSwitch => 'Passa velocemente';
|
||||
|
||||
@@ -336,15 +346,6 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
@override
|
||||
String get settings_presets => 'Preset';
|
||||
|
||||
@override
|
||||
String get settings_preset915Mhz => '915 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset868Mhz => '868 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset433Mhz => '433 MHz';
|
||||
|
||||
@override
|
||||
String get settings_frequency => 'Frequenza (MHz)';
|
||||
|
||||
@@ -373,10 +374,15 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
String get settings_txPowerInvalid => 'Potere TX non valido (0-22 dBm)';
|
||||
|
||||
@override
|
||||
String get settings_longRange => 'Lungo Raggio';
|
||||
String get settings_clientRepeat => 'Ripetizione \"fuori dalla rete\"';
|
||||
|
||||
@override
|
||||
String get settings_fastSpeed => 'Velocità Rapida';
|
||||
String get settings_clientRepeatSubtitle =>
|
||||
'Permetti a questo dispositivo di ripetere i pacchetti di rete per gli altri.';
|
||||
|
||||
@override
|
||||
String get settings_clientRepeatFreqWarning =>
|
||||
'Per la comunicazione fuori rete, è necessario utilizzare frequenze di 433, 869 o 918 MHz.';
|
||||
|
||||
@override
|
||||
String settings_error(String message) {
|
||||
@@ -1359,6 +1365,18 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
@override
|
||||
String get map_manageRepeater => 'Gestisci Ripetitore';
|
||||
|
||||
@override
|
||||
String get map_tapToAdd => 'Tocca i nodi per aggiungerli al percorso.';
|
||||
|
||||
@override
|
||||
String get map_runTrace => 'Esegui Path Trace';
|
||||
|
||||
@override
|
||||
String get map_removeLast => 'Rimuovi ultimo';
|
||||
|
||||
@override
|
||||
String get map_pathTraceCancelled => 'Tracciamento del percorso annullato.';
|
||||
|
||||
@override
|
||||
String get mapCache_title => 'Cache Mappa Offline';
|
||||
|
||||
@@ -2699,6 +2717,9 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
String get pathTrace_someHopsNoLocation =>
|
||||
'Uno o più dei luppoli mancano di una posizione!';
|
||||
|
||||
@override
|
||||
String get pathTrace_clearTooltip => 'Pulisci percorso';
|
||||
|
||||
@override
|
||||
String get contacts_pathTrace => 'Traccia Percorso';
|
||||
|
||||
|
||||
@@ -142,6 +142,16 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
@override
|
||||
String get scanner_scan => 'Scan';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOff => 'Bluetooth is uitgeschakeld';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOffMessage =>
|
||||
'Zorg ervoor dat Bluetooth is ingeschakeld om naar apparaten te zoeken.';
|
||||
|
||||
@override
|
||||
String get scanner_enableBluetooth => 'Activeer Bluetooth';
|
||||
|
||||
@override
|
||||
String get device_quickSwitch => 'Snelle overschakeling';
|
||||
|
||||
@@ -334,15 +344,6 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
@override
|
||||
String get settings_presets => 'Presets';
|
||||
|
||||
@override
|
||||
String get settings_preset915Mhz => '915 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset868Mhz => '868 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset433Mhz => '433 MHz';
|
||||
|
||||
@override
|
||||
String get settings_frequency => 'Frequentie (MHz)';
|
||||
|
||||
@@ -371,10 +372,15 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
String get settings_txPowerInvalid => 'Ongeldige TX-vermogen (0-22 dBm)';
|
||||
|
||||
@override
|
||||
String get settings_longRange => 'Lange Afstand';
|
||||
String get settings_clientRepeat => 'Herhalen: Afgekoppeld';
|
||||
|
||||
@override
|
||||
String get settings_fastSpeed => 'Hoge Snelheid';
|
||||
String get settings_clientRepeatSubtitle =>
|
||||
'Laat dit apparaat de mesh-pakketten opnieuw verzenden voor andere apparaten.';
|
||||
|
||||
@override
|
||||
String get settings_clientRepeatFreqWarning =>
|
||||
'Om een signaal buiten het netwerk te versturen, zijn frequenties van 433, 869 of 918 MHz vereist.';
|
||||
|
||||
@override
|
||||
String settings_error(String message) {
|
||||
@@ -1355,6 +1361,19 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
@override
|
||||
String get map_manageRepeater => 'Beheer Repeater';
|
||||
|
||||
@override
|
||||
String get map_tapToAdd =>
|
||||
'Tik op knooppunten om ze toe te voegen aan het pad';
|
||||
|
||||
@override
|
||||
String get map_runTrace => 'Padeshulp traceren';
|
||||
|
||||
@override
|
||||
String get map_removeLast => 'Verwijder Laatste';
|
||||
|
||||
@override
|
||||
String get map_pathTraceCancelled => 'Pad traceren geannuleerd';
|
||||
|
||||
@override
|
||||
String get mapCache_title => 'Offline Kaarten Cache';
|
||||
|
||||
@@ -2689,6 +2708,9 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
String get pathTrace_someHopsNoLocation =>
|
||||
'Een of meer van de hops ontbreken een locatie!';
|
||||
|
||||
@override
|
||||
String get pathTrace_clearTooltip => 'Weg wissen';
|
||||
|
||||
@override
|
||||
String get contacts_pathTrace => 'Pad Traceren';
|
||||
|
||||
|
||||
@@ -143,6 +143,16 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
@override
|
||||
String get scanner_scan => 'Przeskanuj';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOff => 'Bluetooth jest wyłączony';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOffMessage =>
|
||||
'Prosimy włączyć Bluetooth, aby przeskanować urządzenia.';
|
||||
|
||||
@override
|
||||
String get scanner_enableBluetooth => 'Włącz Bluetooth';
|
||||
|
||||
@override
|
||||
String get device_quickSwitch => 'Szybka zmiana';
|
||||
|
||||
@@ -337,15 +347,6 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
@override
|
||||
String get settings_presets => 'Preset';
|
||||
|
||||
@override
|
||||
String get settings_preset915Mhz => '915 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset868Mhz => '868 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset433Mhz => '433 MHz';
|
||||
|
||||
@override
|
||||
String get settings_frequency => 'Częstotliwość (MHz)';
|
||||
|
||||
@@ -375,10 +376,15 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
String get settings_txPowerInvalid => 'Nieprawidłowa moc TX (0-22 dBm)';
|
||||
|
||||
@override
|
||||
String get settings_longRange => 'Długi zasięg';
|
||||
String get settings_clientRepeat => 'Powtórzenie: Niezależne od sieci';
|
||||
|
||||
@override
|
||||
String get settings_fastSpeed => 'Szybka prędkość';
|
||||
String get settings_clientRepeatSubtitle =>
|
||||
'Pozwól temu urządzeniu powtarzać pakiety danych dla innych urządzeń.';
|
||||
|
||||
@override
|
||||
String get settings_clientRepeatFreqWarning =>
|
||||
'Powtórka poza siecią wymaga częstotliwości 433, 869 lub 918 MHz.';
|
||||
|
||||
@override
|
||||
String settings_error(String message) {
|
||||
@@ -1361,6 +1367,18 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
@override
|
||||
String get map_manageRepeater => 'Zarządzaj Powtórzami';
|
||||
|
||||
@override
|
||||
String get map_tapToAdd => 'Kliknij na węzły, aby dodać je do ścieżki.';
|
||||
|
||||
@override
|
||||
String get map_runTrace => 'Uruchom ślad ścieżki';
|
||||
|
||||
@override
|
||||
String get map_removeLast => 'Usuń ostatni';
|
||||
|
||||
@override
|
||||
String get map_pathTraceCancelled => 'Śledzenie ścieżki anulowano.';
|
||||
|
||||
@override
|
||||
String get mapCache_title => 'Bufor Map Offline';
|
||||
|
||||
@@ -2697,6 +2715,9 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
String get pathTrace_someHopsNoLocation =>
|
||||
'Jeden lub więcej z chmieli nie ma określonej lokalizacji!';
|
||||
|
||||
@override
|
||||
String get pathTrace_clearTooltip => 'Wyczyść ścieżkę';
|
||||
|
||||
@override
|
||||
String get contacts_pathTrace => 'Śledzenie Ścieżek';
|
||||
|
||||
|
||||
@@ -143,6 +143,16 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
@override
|
||||
String get scanner_scan => 'Digitalizar';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOff => 'Bluetooth está desativado';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOffMessage =>
|
||||
'Por favor, ative o Bluetooth para escanear por dispositivos.';
|
||||
|
||||
@override
|
||||
String get scanner_enableBluetooth => 'Ative o Bluetooth';
|
||||
|
||||
@override
|
||||
String get device_quickSwitch => 'Mudar rapidamente';
|
||||
|
||||
@@ -338,15 +348,6 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
@override
|
||||
String get settings_presets => 'Presets';
|
||||
|
||||
@override
|
||||
String get settings_preset915Mhz => '915 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset868Mhz => '868 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset433Mhz => '433 MHz';
|
||||
|
||||
@override
|
||||
String get settings_frequency => 'Frequência (MHz)';
|
||||
|
||||
@@ -375,10 +376,15 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String get settings_txPowerInvalid => 'Potência de TX inválida (0-22 dBm)';
|
||||
|
||||
@override
|
||||
String get settings_longRange => 'Alcance Longo';
|
||||
String get settings_clientRepeat => 'Repetição sem rede';
|
||||
|
||||
@override
|
||||
String get settings_fastSpeed => 'Velocidade Rápida';
|
||||
String get settings_clientRepeatSubtitle =>
|
||||
'Permita que este dispositivo repita pacotes de rede para outros dispositivos.';
|
||||
|
||||
@override
|
||||
String get settings_clientRepeatFreqWarning =>
|
||||
'A repetição fora da rede requer frequências de 433, 869 ou 918 MHz.';
|
||||
|
||||
@override
|
||||
String settings_error(String message) {
|
||||
@@ -1361,6 +1367,18 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
@override
|
||||
String get map_manageRepeater => 'Gerenciar Repetidor';
|
||||
|
||||
@override
|
||||
String get map_tapToAdd => 'Toque nos nós para adicioná-los ao caminho.';
|
||||
|
||||
@override
|
||||
String get map_runTrace => 'Executar Traçado de Caminho';
|
||||
|
||||
@override
|
||||
String get map_removeLast => 'Remover Último';
|
||||
|
||||
@override
|
||||
String get map_pathTraceCancelled => 'Rastreamento de caminho cancelado.';
|
||||
|
||||
@override
|
||||
String get mapCache_title => 'Cache de Mapa Offline';
|
||||
|
||||
@@ -2700,6 +2718,9 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String get pathTrace_someHopsNoLocation =>
|
||||
'Um ou mais dos lúpulos estão sem localização!';
|
||||
|
||||
@override
|
||||
String get pathTrace_clearTooltip => 'Limpar caminho';
|
||||
|
||||
@override
|
||||
String get contacts_pathTrace => 'Traçado de Caminho';
|
||||
|
||||
|
||||
@@ -142,6 +142,16 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
@override
|
||||
String get scanner_scan => 'Сканирование';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOff => 'Bluetooth выключен';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOffMessage =>
|
||||
'Пожалуйста, включите Bluetooth, чтобы найти устройства.';
|
||||
|
||||
@override
|
||||
String get scanner_enableBluetooth => 'Включите Bluetooth';
|
||||
|
||||
@override
|
||||
String get device_quickSwitch => 'Быстрое переключение';
|
||||
|
||||
@@ -335,15 +345,6 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
@override
|
||||
String get settings_presets => 'Пресеты';
|
||||
|
||||
@override
|
||||
String get settings_preset915Mhz => '915 МГц';
|
||||
|
||||
@override
|
||||
String get settings_preset868Mhz => '868 МГц';
|
||||
|
||||
@override
|
||||
String get settings_preset433Mhz => '433 МГц';
|
||||
|
||||
@override
|
||||
String get settings_frequency => 'Частота (МГц)';
|
||||
|
||||
@@ -373,10 +374,15 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
'Недопустимая мощность передачи (0–22 дБм)';
|
||||
|
||||
@override
|
||||
String get settings_longRange => 'Дальний радиус';
|
||||
String get settings_clientRepeat => 'Повторение \"вне сети\"';
|
||||
|
||||
@override
|
||||
String get settings_fastSpeed => 'Высокая скорость';
|
||||
String get settings_clientRepeatSubtitle =>
|
||||
'Позвольте этому устройству повторять пакеты данных для других устройств.';
|
||||
|
||||
@override
|
||||
String get settings_clientRepeatFreqWarning =>
|
||||
'Для работы в режиме \"без подключения к сети\" требуется частота 433, 869 или 918 МГц.';
|
||||
|
||||
@override
|
||||
String settings_error(String message) {
|
||||
@@ -1362,6 +1368,18 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
@override
|
||||
String get map_manageRepeater => 'Управление репитером';
|
||||
|
||||
@override
|
||||
String get map_tapToAdd => 'Нажимайте на узлы, чтобы добавить их в путь.';
|
||||
|
||||
@override
|
||||
String get map_runTrace => 'Запустить трассировку пути';
|
||||
|
||||
@override
|
||||
String get map_removeLast => 'Удалить последний';
|
||||
|
||||
@override
|
||||
String get map_pathTraceCancelled => 'Отмена трассировки пути';
|
||||
|
||||
@override
|
||||
String get mapCache_title => 'Кэш офлайн-карты';
|
||||
|
||||
@@ -2702,6 +2720,9 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get pathTrace_someHopsNoLocation =>
|
||||
'Одному или нескольким хмелям не указано местоположение!';
|
||||
|
||||
@override
|
||||
String get pathTrace_clearTooltip => 'Очистить путь';
|
||||
|
||||
@override
|
||||
String get contacts_pathTrace => 'Трассировка пути';
|
||||
|
||||
|
||||
@@ -143,6 +143,16 @@ class AppLocalizationsSk extends AppLocalizations {
|
||||
@override
|
||||
String get scanner_scan => 'Skončiť';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOff => 'Bluetooth je vypnutý';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOffMessage =>
|
||||
'Prosím, zapnite Bluetooth, aby ste mohli skenovať pre zariadenia.';
|
||||
|
||||
@override
|
||||
String get scanner_enableBluetooth => 'Povolte Bluetooth';
|
||||
|
||||
@override
|
||||
String get device_quickSwitch => 'Rýchle prepínač';
|
||||
|
||||
@@ -334,15 +344,6 @@ class AppLocalizationsSk extends AppLocalizations {
|
||||
@override
|
||||
String get settings_presets => 'Prednastavenia';
|
||||
|
||||
@override
|
||||
String get settings_preset915Mhz => '915 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset868Mhz => '868 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset433Mhz => '433 MHz';
|
||||
|
||||
@override
|
||||
String get settings_frequency => 'Frekvencia (MHz)';
|
||||
|
||||
@@ -371,10 +372,15 @@ class AppLocalizationsSk extends AppLocalizations {
|
||||
String get settings_txPowerInvalid => 'Neplatná hodnota výkonu TX (0-22 dBm)';
|
||||
|
||||
@override
|
||||
String get settings_longRange => 'Dlhý dosah';
|
||||
String get settings_clientRepeat => 'Opätovné použitie bez elektrickej siete';
|
||||
|
||||
@override
|
||||
String get settings_fastSpeed => 'Rýchla rýchlosť';
|
||||
String get settings_clientRepeatSubtitle =>
|
||||
'Umožnite, aby toto zariadenie opakovávalo siete pre ostatných.';
|
||||
|
||||
@override
|
||||
String get settings_clientRepeatFreqWarning =>
|
||||
'Použitie off-grid systému vyžaduje frekvencie 433, 869 alebo 918 MHz.';
|
||||
|
||||
@override
|
||||
String settings_error(String message) {
|
||||
@@ -1356,6 +1362,18 @@ class AppLocalizationsSk extends AppLocalizations {
|
||||
@override
|
||||
String get map_manageRepeater => 'Spravovať Opakovanie';
|
||||
|
||||
@override
|
||||
String get map_tapToAdd => 'Kliknite na uzly, aby ste ich pridali k ceste.';
|
||||
|
||||
@override
|
||||
String get map_runTrace => 'Spustiť trasovaním cesty';
|
||||
|
||||
@override
|
||||
String get map_removeLast => 'Odstrániť posledný';
|
||||
|
||||
@override
|
||||
String get map_pathTraceCancelled => 'Zrušenie stopáže cesty bolo zrušené.';
|
||||
|
||||
@override
|
||||
String get mapCache_title => 'Offline Mapa Pamäť';
|
||||
|
||||
@@ -2685,6 +2703,9 @@ class AppLocalizationsSk extends AppLocalizations {
|
||||
String get pathTrace_someHopsNoLocation =>
|
||||
'Jedna alebo viac chmeľov chýba lokalita!';
|
||||
|
||||
@override
|
||||
String get pathTrace_clearTooltip => 'Zmazať cestu';
|
||||
|
||||
@override
|
||||
String get contacts_pathTrace => 'Sledovanie lúčov';
|
||||
|
||||
|
||||
@@ -143,6 +143,16 @@ class AppLocalizationsSl extends AppLocalizations {
|
||||
@override
|
||||
String get scanner_scan => 'Skeniraj';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOff => 'Bluetooth je izklopljen';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOffMessage =>
|
||||
'Prosimo, vklopite Bluetooth, da lahko poiščete naprave.';
|
||||
|
||||
@override
|
||||
String get scanner_enableBluetooth => 'Omogočite Bluetooth';
|
||||
|
||||
@override
|
||||
String get device_quickSwitch => 'Hitro preklop';
|
||||
|
||||
@@ -333,15 +343,6 @@ class AppLocalizationsSl extends AppLocalizations {
|
||||
@override
|
||||
String get settings_presets => 'Prednastavitve';
|
||||
|
||||
@override
|
||||
String get settings_preset915Mhz => '915 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset868Mhz => '868 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset433Mhz => '433 MHz';
|
||||
|
||||
@override
|
||||
String get settings_frequency => 'Frekvenca (MHz)';
|
||||
|
||||
@@ -370,10 +371,15 @@ class AppLocalizationsSl extends AppLocalizations {
|
||||
String get settings_txPowerInvalid => 'Neveljavna TX moč (0-22 dBm)';
|
||||
|
||||
@override
|
||||
String get settings_longRange => 'DDolg doseg';
|
||||
String get settings_clientRepeat => 'Neovadno ponavljanje';
|
||||
|
||||
@override
|
||||
String get settings_fastSpeed => 'Visoka hitrost';
|
||||
String get settings_clientRepeatSubtitle =>
|
||||
'Omogočite temu naprave, da ponavlja paketne sporočila za druge.';
|
||||
|
||||
@override
|
||||
String get settings_clientRepeatFreqWarning =>
|
||||
'Za ponovni prenos na brezžični način so potrebne frekvence 433, 869 ali 918 MHz.';
|
||||
|
||||
@override
|
||||
String settings_error(String message) {
|
||||
@@ -1352,6 +1358,18 @@ class AppLocalizationsSl extends AppLocalizations {
|
||||
@override
|
||||
String get map_manageRepeater => 'Upravljajte Ponovitve';
|
||||
|
||||
@override
|
||||
String get map_tapToAdd => 'Pritisnite na vozlišča, da jih dodate poti.';
|
||||
|
||||
@override
|
||||
String get map_runTrace => 'Zaženi sledenje poti';
|
||||
|
||||
@override
|
||||
String get map_removeLast => 'Odstrani Zadnji';
|
||||
|
||||
@override
|
||||
String get map_pathTraceCancelled => 'Spremljanje poti je prekinjeno.';
|
||||
|
||||
@override
|
||||
String get mapCache_title =>
|
||||
'Omrezni predpomnilnik zemljeških zemljejevskih slik';
|
||||
@@ -2688,6 +2706,9 @@ class AppLocalizationsSl extends AppLocalizations {
|
||||
String get pathTrace_someHopsNoLocation =>
|
||||
'Ena ali več hmelju manjka lokacija!';
|
||||
|
||||
@override
|
||||
String get pathTrace_clearTooltip => 'Počisti pot';
|
||||
|
||||
@override
|
||||
String get contacts_pathTrace => 'Sledenje poti';
|
||||
|
||||
|
||||
@@ -142,6 +142,16 @@ class AppLocalizationsSv extends AppLocalizations {
|
||||
@override
|
||||
String get scanner_scan => 'Skanna';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOff => 'Bluetooth är avstängt';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOffMessage =>
|
||||
'Vänligen aktivera Bluetooth för att söka efter enheter.';
|
||||
|
||||
@override
|
||||
String get scanner_enableBluetooth => 'Aktivera Bluetooth';
|
||||
|
||||
@override
|
||||
String get device_quickSwitch => 'Snabb växling';
|
||||
|
||||
@@ -331,15 +341,6 @@ class AppLocalizationsSv extends AppLocalizations {
|
||||
@override
|
||||
String get settings_presets => 'Fördefinierade inställningar';
|
||||
|
||||
@override
|
||||
String get settings_preset915Mhz => '915 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset868Mhz => '868 MHz';
|
||||
|
||||
@override
|
||||
String get settings_preset433Mhz => '433 MHz';
|
||||
|
||||
@override
|
||||
String get settings_frequency => 'Frekvens (MHz)';
|
||||
|
||||
@@ -368,10 +369,15 @@ class AppLocalizationsSv extends AppLocalizations {
|
||||
String get settings_txPowerInvalid => 'Ogiltig TX-effekt (0-22 dBm)';
|
||||
|
||||
@override
|
||||
String get settings_longRange => 'Lång räckvidd';
|
||||
String get settings_clientRepeat => 'Upprepa utan elnät';
|
||||
|
||||
@override
|
||||
String get settings_fastSpeed => 'Snabb hastighet';
|
||||
String get settings_clientRepeatSubtitle =>
|
||||
'Låt enheten repetera nätpaket för andra användare.';
|
||||
|
||||
@override
|
||||
String get settings_clientRepeatFreqWarning =>
|
||||
'För att kunna kommunicera utanför elnätet krävs frekvenserna 433, 869 eller 918 MHz.';
|
||||
|
||||
@override
|
||||
String settings_error(String message) {
|
||||
@@ -1348,6 +1354,18 @@ class AppLocalizationsSv extends AppLocalizations {
|
||||
@override
|
||||
String get map_manageRepeater => 'Hantera Upprepare';
|
||||
|
||||
@override
|
||||
String get map_tapToAdd => 'Tryck på noder för att lägga till dem i banan.';
|
||||
|
||||
@override
|
||||
String get map_runTrace => 'Kör spårsökning';
|
||||
|
||||
@override
|
||||
String get map_removeLast => 'Ta bort sista';
|
||||
|
||||
@override
|
||||
String get map_pathTraceCancelled => 'Sökvägsspårning avbruten.';
|
||||
|
||||
@override
|
||||
String get mapCache_title => 'Offline Kartcache';
|
||||
|
||||
@@ -2673,6 +2691,9 @@ class AppLocalizationsSv extends AppLocalizations {
|
||||
String get pathTrace_someHopsNoLocation =>
|
||||
'En eller flera av humlen saknar en plats!';
|
||||
|
||||
@override
|
||||
String get pathTrace_clearTooltip => 'Rensa väg';
|
||||
|
||||
@override
|
||||
String get contacts_pathTrace => 'Path Trace';
|
||||
|
||||
|
||||
@@ -143,6 +143,16 @@ class AppLocalizationsUk extends AppLocalizations {
|
||||
@override
|
||||
String get scanner_scan => 'Сканувати';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOff => 'Bluetooth вимкнено';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOffMessage =>
|
||||
'Будь ласка, увімкніть Bluetooth, щоб сканувати пристрої.';
|
||||
|
||||
@override
|
||||
String get scanner_enableBluetooth => 'Увімкніть Bluetooth';
|
||||
|
||||
@override
|
||||
String get device_quickSwitch => 'Швидке перемикання';
|
||||
|
||||
@@ -336,15 +346,6 @@ class AppLocalizationsUk extends AppLocalizations {
|
||||
@override
|
||||
String get settings_presets => 'Попередні налаштування';
|
||||
|
||||
@override
|
||||
String get settings_preset915Mhz => '915 МГц';
|
||||
|
||||
@override
|
||||
String get settings_preset868Mhz => '868 МГц';
|
||||
|
||||
@override
|
||||
String get settings_preset433Mhz => '433 МГц';
|
||||
|
||||
@override
|
||||
String get settings_frequency => 'Частота (МГц)';
|
||||
|
||||
@@ -373,10 +374,15 @@ class AppLocalizationsUk extends AppLocalizations {
|
||||
String get settings_txPowerInvalid => 'Некоректна потужність TX (0-22 дБм)';
|
||||
|
||||
@override
|
||||
String get settings_longRange => 'Дальній діапазон';
|
||||
String get settings_clientRepeat => 'Автономна система';
|
||||
|
||||
@override
|
||||
String get settings_fastSpeed => 'Висока швидкість';
|
||||
String get settings_clientRepeatSubtitle =>
|
||||
'Дозвольте цьому пристрою повторювати пакети даних для інших пристроїв.';
|
||||
|
||||
@override
|
||||
String get settings_clientRepeatFreqWarning =>
|
||||
'Повтор без підключення до мережі вимагає частоти 433, 869 або 918 МГц.';
|
||||
|
||||
@override
|
||||
String settings_error(String message) {
|
||||
@@ -1361,6 +1367,18 @@ class AppLocalizationsUk extends AppLocalizations {
|
||||
@override
|
||||
String get map_manageRepeater => 'Керувати ретранслятором';
|
||||
|
||||
@override
|
||||
String get map_tapToAdd => 'Натисніть на вузли, щоб додати їх до шляху';
|
||||
|
||||
@override
|
||||
String get map_runTrace => 'Виконати трасування шляху';
|
||||
|
||||
@override
|
||||
String get map_removeLast => 'Видалити останній';
|
||||
|
||||
@override
|
||||
String get map_pathTraceCancelled => 'Відмінується трасування шляху';
|
||||
|
||||
@override
|
||||
String get mapCache_title => 'Офлайн-кеш карти';
|
||||
|
||||
@@ -2709,6 +2727,9 @@ class AppLocalizationsUk extends AppLocalizations {
|
||||
String get pathTrace_someHopsNoLocation =>
|
||||
'Одне або більше хмелів відсутнє місце розташування!';
|
||||
|
||||
@override
|
||||
String get pathTrace_clearTooltip => 'Очистити шлях';
|
||||
|
||||
@override
|
||||
String get contacts_pathTrace => 'Трасування шляхів';
|
||||
|
||||
|
||||
@@ -142,6 +142,15 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
@override
|
||||
String get scanner_scan => '扫描';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOff => '蓝牙已关闭';
|
||||
|
||||
@override
|
||||
String get scanner_bluetoothOffMessage => '请打开蓝牙功能,以便搜索设备。';
|
||||
|
||||
@override
|
||||
String get scanner_enableBluetooth => '启用蓝牙';
|
||||
|
||||
@override
|
||||
String get device_quickSwitch => '快速切换';
|
||||
|
||||
@@ -322,15 +331,6 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
@override
|
||||
String get settings_presets => '预设';
|
||||
|
||||
@override
|
||||
String get settings_preset915Mhz => '915 兆赫';
|
||||
|
||||
@override
|
||||
String get settings_preset868Mhz => '868 兆赫';
|
||||
|
||||
@override
|
||||
String get settings_preset433Mhz => '433 兆赫';
|
||||
|
||||
@override
|
||||
String get settings_frequency => '频率 (MHz)';
|
||||
|
||||
@@ -359,10 +359,14 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
String get settings_txPowerInvalid => '无效的发射功率(0-22 dBm)';
|
||||
|
||||
@override
|
||||
String get settings_longRange => '远距离';
|
||||
String get settings_clientRepeat => '离网重复';
|
||||
|
||||
@override
|
||||
String get settings_fastSpeed => '高速';
|
||||
String get settings_clientRepeatSubtitle => '允许此设备重复发送网状数据包给其他设备';
|
||||
|
||||
@override
|
||||
String get settings_clientRepeatFreqWarning =>
|
||||
'离网重复通信需要使用 433、869 或 918 兆赫兹的频率。';
|
||||
|
||||
@override
|
||||
String settings_error(String message) {
|
||||
@@ -1301,6 +1305,18 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
@override
|
||||
String get map_manageRepeater => '管理重复器';
|
||||
|
||||
@override
|
||||
String get map_tapToAdd => '点击节点将其添加到路径中';
|
||||
|
||||
@override
|
||||
String get map_runTrace => '运行路径跟踪';
|
||||
|
||||
@override
|
||||
String get map_removeLast => '删除最后一个';
|
||||
|
||||
@override
|
||||
String get map_pathTraceCancelled => '路径跟踪已取消';
|
||||
|
||||
@override
|
||||
String get mapCache_title => '离线地图缓存';
|
||||
|
||||
@@ -2557,6 +2573,9 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
@override
|
||||
String get pathTrace_someHopsNoLocation => '其中一个或多个啤酒花缺少位置!';
|
||||
|
||||
@override
|
||||
String get pathTrace_clearTooltip => '清除路径';
|
||||
|
||||
@override
|
||||
String get contacts_pathTrace => '路径追踪';
|
||||
|
||||
|
||||
+12
-8
@@ -131,9 +131,6 @@
|
||||
"settings_infoContactsCount": "Aantal Contacten",
|
||||
"settings_infoChannelCount": "Aantal Kanalen",
|
||||
"settings_presets": "Presets",
|
||||
"settings_preset915Mhz": "915 MHz",
|
||||
"settings_preset868Mhz": "868 MHz",
|
||||
"settings_preset433Mhz": "433 MHz",
|
||||
"settings_frequency": "Frequentie (MHz)",
|
||||
"settings_frequencyHelper": "300,0 - 2500,0",
|
||||
"settings_frequencyInvalid": "Ongeldige frequentie (300-2500 MHz)",
|
||||
@@ -143,8 +140,6 @@
|
||||
"settings_txPower": "TX Vermogen (dBm)",
|
||||
"settings_txPowerHelper": "0 - 22",
|
||||
"settings_txPowerInvalid": "Ongeldige TX-vermogen (0-22 dBm)",
|
||||
"settings_longRange": "Lange Afstand",
|
||||
"settings_fastSpeed": "Hoge Snelheid",
|
||||
"settings_error": "Fout: {message}",
|
||||
"@settings_error": {
|
||||
"placeholders": {
|
||||
@@ -1575,7 +1570,6 @@
|
||||
"notification_newNodesCount": "{count} {count, plural, =1{nieuw knooppunt} other{nieuwe knooppunten}}",
|
||||
"notification_newTypeDiscovered": "Nieuw {contactType} ontdekt",
|
||||
"notification_receivedNewMessage": "Nieuw bericht ontvangen",
|
||||
"contacts_zeroHopContactAdvertFailed": "Mislukt om contact te verzenden",
|
||||
"settings_gpxExportRepeatersSubtitle": "Exporteert repeaters / roomserver met een locatie naar GPX-bestand.",
|
||||
"settings_gpxExportRepeaters": "Exporteer repeaters / roomserver naar GPX",
|
||||
"settings_gpxExportSuccess": "Succesvol GPX-bestand geëxporteerd.",
|
||||
@@ -1591,6 +1585,16 @@
|
||||
"settings_gpxExportAllContacts": "Alle contactlocaties",
|
||||
"settings_gpxExportShareText": "Kaartgegevens geëxporteerd uit meshcore-open",
|
||||
"settings_gpxExportShareSubject": "meshcore-open GPX kaartgegevens exporteren",
|
||||
"pathTrace_someHopsNoLocation": "Een of meer van de hops ontbreken een locatie!"
|
||||
|
||||
"pathTrace_someHopsNoLocation": "Een of meer van de hops ontbreken een locatie!",
|
||||
"map_removeLast": "Verwijder Laatste",
|
||||
"pathTrace_clearTooltip": "Weg wissen",
|
||||
"map_pathTraceCancelled": "Pad traceren geannuleerd",
|
||||
"map_tapToAdd": "Tik op knooppunten om ze toe te voegen aan het pad",
|
||||
"map_runTrace": "Padeshulp traceren",
|
||||
"scanner_enableBluetooth": "Activeer Bluetooth",
|
||||
"scanner_bluetoothOffMessage": "Zorg ervoor dat Bluetooth is ingeschakeld om naar apparaten te zoeken.",
|
||||
"scanner_bluetoothOff": "Bluetooth is uitgeschakeld",
|
||||
"settings_clientRepeat": "Herhalen: Afgekoppeld",
|
||||
"settings_clientRepeatSubtitle": "Laat dit apparaat de mesh-pakketten opnieuw verzenden voor andere apparaten.",
|
||||
"settings_clientRepeatFreqWarning": "Om een signaal buiten het netwerk te versturen, zijn frequenties van 433, 869 of 918 MHz vereist."
|
||||
}
|
||||
|
||||
+12
-8
@@ -131,9 +131,6 @@
|
||||
"settings_infoContactsCount": "Liczba kontaktów",
|
||||
"settings_infoChannelCount": "Liczba kanałów",
|
||||
"settings_presets": "Preset",
|
||||
"settings_preset915Mhz": "915 MHz",
|
||||
"settings_preset868Mhz": "868 MHz",
|
||||
"settings_preset433Mhz": "433 MHz",
|
||||
"settings_frequency": "Częstotliwość (MHz)",
|
||||
"settings_frequencyHelper": "300,0 - 2500,0",
|
||||
"settings_frequencyInvalid": "Nieprawidłowa częstotliwość (300-2500 MHz)",
|
||||
@@ -143,8 +140,6 @@
|
||||
"settings_txPower": "TX Moc (dBm)",
|
||||
"settings_txPowerHelper": "0 - 22",
|
||||
"settings_txPowerInvalid": "Nieprawidłowa moc TX (0-22 dBm)",
|
||||
"settings_longRange": "Długi zasięg",
|
||||
"settings_fastSpeed": "Szybka prędkość",
|
||||
"settings_error": "Błąd: {message}",
|
||||
"@settings_error": {
|
||||
"placeholders": {
|
||||
@@ -1575,7 +1570,6 @@
|
||||
"notification_newNodesCount": "{count} {count, plural, =1{nowy węzeł} few{nowe węzły} many{nowych węzłów} other{nowych węzłów}}",
|
||||
"notification_newTypeDiscovered": "Nowy {contactType} wykryty",
|
||||
"notification_receivedNewMessage": "Otrzymano nową wiadomość",
|
||||
"contacts_zeroHopContactAdvertFailed": "Nie udało się wysłać kontaktu.",
|
||||
"settings_gpxExportContacts": "Eksportuj towarzyszy do GPX",
|
||||
"settings_gpxExportRepeaters": "Eksportuj powtórki / serwer pokojowy do GPX",
|
||||
"settings_gpxExportRepeatersSubtitle": "Eksportuje powtarzacze / roomserver z lokalizacją do pliku GPX.",
|
||||
@@ -1591,6 +1585,16 @@
|
||||
"settings_gpxExportChat": "Lokalizacje towarzyszy",
|
||||
"settings_gpxExportShareText": "Dane mapy wyeksportowane z meshcore-open",
|
||||
"settings_gpxExportShareSubject": "Eksport danych mapy GPX meshcore-open",
|
||||
"pathTrace_someHopsNoLocation": "Jeden lub więcej z chmieli nie ma określonej lokalizacji!"
|
||||
|
||||
"pathTrace_someHopsNoLocation": "Jeden lub więcej z chmieli nie ma określonej lokalizacji!",
|
||||
"map_pathTraceCancelled": "Śledzenie ścieżki anulowano.",
|
||||
"map_runTrace": "Uruchom ślad ścieżki",
|
||||
"pathTrace_clearTooltip": "Wyczyść ścieżkę",
|
||||
"map_removeLast": "Usuń ostatni",
|
||||
"map_tapToAdd": "Kliknij na węzły, aby dodać je do ścieżki.",
|
||||
"scanner_bluetoothOffMessage": "Prosimy włączyć Bluetooth, aby przeskanować urządzenia.",
|
||||
"scanner_bluetoothOff": "Bluetooth jest wyłączony",
|
||||
"scanner_enableBluetooth": "Włącz Bluetooth",
|
||||
"settings_clientRepeatSubtitle": "Pozwól temu urządzeniu powtarzać pakiety danych dla innych urządzeń.",
|
||||
"settings_clientRepeat": "Powtórzenie: Niezależne od sieci",
|
||||
"settings_clientRepeatFreqWarning": "Powtórka poza siecią wymaga częstotliwości 433, 869 lub 918 MHz."
|
||||
}
|
||||
|
||||
+12
-8
@@ -131,9 +131,6 @@
|
||||
"settings_infoContactsCount": "Número de Contatos",
|
||||
"settings_infoChannelCount": "Número do Canal",
|
||||
"settings_presets": "Presets",
|
||||
"settings_preset915Mhz": "915 MHz",
|
||||
"settings_preset868Mhz": "868 MHz",
|
||||
"settings_preset433Mhz": "433 MHz",
|
||||
"settings_frequency": "Frequência (MHz)",
|
||||
"settings_frequencyHelper": "300,0 - 2500,0",
|
||||
"settings_frequencyInvalid": "Frequência inválida (300-2500 MHz)",
|
||||
@@ -143,8 +140,6 @@
|
||||
"settings_txPower": "TX Potência (dBm)",
|
||||
"settings_txPowerHelper": "0 - 22",
|
||||
"settings_txPowerInvalid": "Potência de TX inválida (0-22 dBm)",
|
||||
"settings_longRange": "Alcance Longo",
|
||||
"settings_fastSpeed": "Velocidade Rápida",
|
||||
"settings_error": "Erro: {message}",
|
||||
"@settings_error": {
|
||||
"placeholders": {
|
||||
@@ -1575,7 +1570,6 @@
|
||||
"notification_newNodesCount": "{count} {count, plural, =1{novo nó} other{novos nós}}",
|
||||
"notification_newTypeDiscovered": "Novo {contactType} descoberto",
|
||||
"notification_receivedNewMessage": "Nova mensagem recebida",
|
||||
"contacts_zeroHopContactAdvertFailed": "Falha ao enviar contato.",
|
||||
"settings_gpxExportRepeaters": "Exportar repetidores / servidor de sala para GPX",
|
||||
"settings_gpxExportRepeatersSubtitle": "Exporta repetidores / roomserver com localização para arquivo GPX.",
|
||||
"settings_gpxExportSuccess": "Arquivo GPX exportado com sucesso.",
|
||||
@@ -1591,6 +1585,16 @@
|
||||
"settings_gpxExportAllContacts": "Todos os locais de contatos",
|
||||
"settings_gpxExportShareText": "Dados do mapa exportados do meshcore-open",
|
||||
"settings_gpxExportShareSubject": "meshcore-open exportação de dados de mapa GPX",
|
||||
"pathTrace_someHopsNoLocation": "Um ou mais dos lúpulos estão sem localização!"
|
||||
|
||||
"pathTrace_someHopsNoLocation": "Um ou mais dos lúpulos estão sem localização!",
|
||||
"map_runTrace": "Executar Traçado de Caminho",
|
||||
"map_pathTraceCancelled": "Rastreamento de caminho cancelado.",
|
||||
"pathTrace_clearTooltip": "Limpar caminho",
|
||||
"map_removeLast": "Remover Último",
|
||||
"map_tapToAdd": "Toque nos nós para adicioná-los ao caminho.",
|
||||
"scanner_enableBluetooth": "Ative o Bluetooth",
|
||||
"scanner_bluetoothOff": "Bluetooth está desativado",
|
||||
"scanner_bluetoothOffMessage": "Por favor, ative o Bluetooth para escanear por dispositivos.",
|
||||
"settings_clientRepeatFreqWarning": "A repetição fora da rede requer frequências de 433, 869 ou 918 MHz.",
|
||||
"settings_clientRepeat": "Repetição sem rede",
|
||||
"settings_clientRepeatSubtitle": "Permita que este dispositivo repita pacotes de rede para outros dispositivos."
|
||||
}
|
||||
|
||||
+12
-8
@@ -101,9 +101,6 @@
|
||||
"settings_infoContactsCount": "Количество контактов",
|
||||
"settings_infoChannelCount": "Количество каналов",
|
||||
"settings_presets": "Пресеты",
|
||||
"settings_preset915Mhz": "915 МГц",
|
||||
"settings_preset868Mhz": "868 МГц",
|
||||
"settings_preset433Mhz": "433 МГц",
|
||||
"settings_frequency": "Частота (МГц)",
|
||||
"settings_frequencyHelper": "300.0 – 2500.0",
|
||||
"settings_frequencyInvalid": "Недопустимая частота (300–2500 МГц)",
|
||||
@@ -113,8 +110,6 @@
|
||||
"settings_txPower": "Мощность передачи (дБм)",
|
||||
"settings_txPowerHelper": "0 – 22",
|
||||
"settings_txPowerInvalid": "Недопустимая мощность передачи (0–22 дБм)",
|
||||
"settings_longRange": "Дальний радиус",
|
||||
"settings_fastSpeed": "Высокая скорость",
|
||||
"settings_error": "Ошибка: {message}",
|
||||
"appSettings_title": "Настройки приложения",
|
||||
"appSettings_appearance": "Внешний вид",
|
||||
@@ -815,7 +810,6 @@
|
||||
"notification_newNodesCount": "{count} {count, plural, =1{новый узел} few{новых узла} many{новых узлов} other{новых узлов}}",
|
||||
"notification_newTypeDiscovered": "Обнаружен новый {contactType}",
|
||||
"notification_receivedNewMessage": "Получено новое сообщение",
|
||||
"contacts_zeroHopContactAdvertSent": "Отправлено сообщение по объявлению.",
|
||||
"settings_gpxExportRepeaters": "Экспортировать рипитеры / сервер комнаты в GPX",
|
||||
"settings_gpxExportRepeatersSubtitle": "Экспортирует ретрансляторы / сервер комнат с местоположением в файл GPX.",
|
||||
"settings_gpxExportContacts": "Экспортировать спутников в GPX",
|
||||
@@ -831,6 +825,16 @@
|
||||
"settings_gpxExportNoContacts": "Нет контактов для экспорта.",
|
||||
"settings_gpxExportShareText": "Данные карты экспортированы из meshcore-open",
|
||||
"settings_gpxExportShareSubject": "meshcore-open экспорт данных карты GPX",
|
||||
"pathTrace_someHopsNoLocation": "Одному или нескольким хмелям не указано местоположение!"
|
||||
|
||||
"pathTrace_someHopsNoLocation": "Одному или нескольким хмелям не указано местоположение!",
|
||||
"map_tapToAdd": "Нажимайте на узлы, чтобы добавить их в путь.",
|
||||
"map_removeLast": "Удалить последний",
|
||||
"map_pathTraceCancelled": "Отмена трассировки пути",
|
||||
"pathTrace_clearTooltip": "Очистить путь",
|
||||
"map_runTrace": "Запустить трассировку пути",
|
||||
"scanner_enableBluetooth": "Включите Bluetooth",
|
||||
"scanner_bluetoothOff": "Bluetooth выключен",
|
||||
"scanner_bluetoothOffMessage": "Пожалуйста, включите Bluetooth, чтобы найти устройства.",
|
||||
"settings_clientRepeatFreqWarning": "Для работы в режиме \"без подключения к сети\" требуется частота 433, 869 или 918 МГц.",
|
||||
"settings_clientRepeatSubtitle": "Позвольте этому устройству повторять пакеты данных для других устройств.",
|
||||
"settings_clientRepeat": "Повторение \"вне сети\""
|
||||
}
|
||||
|
||||
+12
-8
@@ -131,9 +131,6 @@
|
||||
"settings_infoContactsCount": "Počet kontaktov",
|
||||
"settings_infoChannelCount": "Počet kanálov",
|
||||
"settings_presets": "Prednastavenia",
|
||||
"settings_preset915Mhz": "915 MHz",
|
||||
"settings_preset868Mhz": "868 MHz",
|
||||
"settings_preset433Mhz": "433 MHz",
|
||||
"settings_frequency": "Frekvencia (MHz)",
|
||||
"settings_frequencyHelper": "300,0 – 2500,0",
|
||||
"settings_frequencyInvalid": "Neplatná frekvencia (300-2500 MHz)",
|
||||
@@ -143,8 +140,6 @@
|
||||
"settings_txPower": "TX Výkon (dBm)",
|
||||
"settings_txPowerHelper": "0 - 22",
|
||||
"settings_txPowerInvalid": "Neplatná hodnota výkonu TX (0-22 dBm)",
|
||||
"settings_longRange": "Dlhý dosah",
|
||||
"settings_fastSpeed": "Rýchla rýchlosť",
|
||||
"settings_error": "Chyba: {message}",
|
||||
"@settings_error": {
|
||||
"placeholders": {
|
||||
@@ -1575,7 +1570,6 @@
|
||||
"notification_newNodesCount": "{count} {count, plural, =1{nový uzol} few{nové uzly} other{nových uzlov}}",
|
||||
"notification_newTypeDiscovered": "Nový {contactType} objavený",
|
||||
"notification_receivedNewMessage": "Prijatá nová správa",
|
||||
"contacts_ShareContact": "Kopírovať kontakt do schránky",
|
||||
"settings_gpxExportRepeatersSubtitle": "Exportuje repeater / roomserver s lokalitou do súboru GPX.",
|
||||
"settings_gpxExportContacts": "Export sprievodcov do GPX",
|
||||
"settings_gpxExportSuccess": "Úspešne exportovaný súbor GPX.",
|
||||
@@ -1591,6 +1585,16 @@
|
||||
"settings_gpxExportChat": "Lokácie sprievodcov",
|
||||
"settings_gpxExportShareText": "Mapové údaje exportované z meshcore-open",
|
||||
"settings_gpxExportShareSubject": "meshcore-open export dát GPX mapových údajov",
|
||||
"pathTrace_someHopsNoLocation": "Jedna alebo viac chmeľov chýba lokalita!"
|
||||
|
||||
"pathTrace_someHopsNoLocation": "Jedna alebo viac chmeľov chýba lokalita!",
|
||||
"pathTrace_clearTooltip": "Zmazať cestu",
|
||||
"map_tapToAdd": "Kliknite na uzly, aby ste ich pridali k ceste.",
|
||||
"map_removeLast": "Odstrániť posledný",
|
||||
"map_runTrace": "Spustiť trasovaním cesty",
|
||||
"map_pathTraceCancelled": "Zrušenie stopáže cesty bolo zrušené.",
|
||||
"scanner_bluetoothOffMessage": "Prosím, zapnite Bluetooth, aby ste mohli skenovať pre zariadenia.",
|
||||
"scanner_bluetoothOff": "Bluetooth je vypnutý",
|
||||
"scanner_enableBluetooth": "Povolte Bluetooth",
|
||||
"settings_clientRepeat": "Opätovné použitie bez elektrickej siete",
|
||||
"settings_clientRepeatFreqWarning": "Použitie off-grid systému vyžaduje frekvencie 433, 869 alebo 918 MHz.",
|
||||
"settings_clientRepeatSubtitle": "Umožnite, aby toto zariadenie opakovávalo siete pre ostatných."
|
||||
}
|
||||
|
||||
+12
-8
@@ -131,9 +131,6 @@
|
||||
"settings_infoContactsCount": "Število stikov",
|
||||
"settings_infoChannelCount": "Število kanalov",
|
||||
"settings_presets": "Prednastavitve",
|
||||
"settings_preset915Mhz": "915 MHz",
|
||||
"settings_preset868Mhz": "868 MHz",
|
||||
"settings_preset433Mhz": "433 MHz",
|
||||
"settings_frequency": "Frekvenca (MHz)",
|
||||
"settings_frequencyHelper": "300,00 - 2500,00",
|
||||
"settings_frequencyInvalid": "Neveljavna frekvenca (300-2500 MHz)",
|
||||
@@ -143,8 +140,6 @@
|
||||
"settings_txPower": "TX Moč (dBm)",
|
||||
"settings_txPowerHelper": "0 - 22",
|
||||
"settings_txPowerInvalid": "Neveljavna TX moč (0-22 dBm)",
|
||||
"settings_longRange": "DDolg doseg",
|
||||
"settings_fastSpeed": "Visoka hitrost",
|
||||
"settings_error": "Napaka: {message}",
|
||||
"@settings_error": {
|
||||
"placeholders": {
|
||||
@@ -1575,7 +1570,6 @@
|
||||
"notification_newNodesCount": "{count} {count, plural, =1{novo vozlišče} =2{novi vozlišči} few{nova vozlišča} other{novih vozlišč}}",
|
||||
"notification_newTypeDiscovered": "Odkrito novo {contactType}",
|
||||
"notification_receivedNewMessage": "Prejeto novo sporočilo",
|
||||
"contacts_ShareContact": "Kopiraj stik v Odložišče",
|
||||
"settings_gpxExportAll": "Izvozi vse kontakte v GPX",
|
||||
"settings_gpxExportContacts": "Izvoz spremljevalcev v GPX",
|
||||
"settings_gpxExportRepeatersSubtitle": "Izvozi ponovljene oddajnike / strežnik sobe z lokacijo v datoteko GPX.",
|
||||
@@ -1591,6 +1585,16 @@
|
||||
"settings_gpxExportNoContacts": "Ni stikov za izvoz.",
|
||||
"settings_gpxExportNotAvailable": "Ni podprto na vašem napravi/operacijskem sistemu",
|
||||
"settings_gpxExportShareSubject": "meshcore-open izvoz podatkov GPX karte",
|
||||
"pathTrace_someHopsNoLocation": "Ena ali več hmelju manjka lokacija!"
|
||||
|
||||
"pathTrace_someHopsNoLocation": "Ena ali več hmelju manjka lokacija!",
|
||||
"map_tapToAdd": "Pritisnite na vozlišča, da jih dodate poti.",
|
||||
"map_removeLast": "Odstrani Zadnji",
|
||||
"map_runTrace": "Zaženi sledenje poti",
|
||||
"pathTrace_clearTooltip": "Počisti pot",
|
||||
"map_pathTraceCancelled": "Spremljanje poti je prekinjeno.",
|
||||
"scanner_enableBluetooth": "Omogočite Bluetooth",
|
||||
"scanner_bluetoothOffMessage": "Prosimo, vklopite Bluetooth, da lahko poiščete naprave.",
|
||||
"scanner_bluetoothOff": "Bluetooth je izklopljen",
|
||||
"settings_clientRepeatFreqWarning": "Za ponovni prenos na brezžični način so potrebne frekvence 433, 869 ali 918 MHz.",
|
||||
"settings_clientRepeatSubtitle": "Omogočite temu naprave, da ponavlja paketne sporočila za druge.",
|
||||
"settings_clientRepeat": "Neovadno ponavljanje"
|
||||
}
|
||||
|
||||
+12
-8
@@ -131,9 +131,6 @@
|
||||
"settings_infoContactsCount": "Kontakterantal",
|
||||
"settings_infoChannelCount": "Kanalantal",
|
||||
"settings_presets": "Fördefinierade inställningar",
|
||||
"settings_preset915Mhz": "915 MHz",
|
||||
"settings_preset868Mhz": "868 MHz",
|
||||
"settings_preset433Mhz": "433 MHz",
|
||||
"settings_frequency": "Frekvens (MHz)",
|
||||
"settings_frequencyHelper": "300,0 - 2500,0",
|
||||
"settings_frequencyInvalid": "Ogiltig frekvens (300-2500 MHz)",
|
||||
@@ -143,8 +140,6 @@
|
||||
"settings_txPower": "TX-effekt (dBm)",
|
||||
"settings_txPowerHelper": "0 - 22",
|
||||
"settings_txPowerInvalid": "Ogiltig TX-effekt (0-22 dBm)",
|
||||
"settings_longRange": "Lång räckvidd",
|
||||
"settings_fastSpeed": "Snabb hastighet",
|
||||
"settings_error": "Fel: {message}",
|
||||
"@settings_error": {
|
||||
"placeholders": {
|
||||
@@ -1575,7 +1570,6 @@
|
||||
"notification_newNodesCount": "{count} {count, plural, =1{ny nod} other{nya noder}}",
|
||||
"notification_newTypeDiscovered": "Ny {contactType} upptäckt",
|
||||
"notification_receivedNewMessage": "Nytt meddelande mottaget",
|
||||
"contacts_ShareContactZeroHop": "Dela kontakt via annons",
|
||||
"settings_gpxExportAll": "Exportera alla kontakter till GPX",
|
||||
"settings_gpxExportRepeatersSubtitle": "Exporterar repeater / roomserver med plats till GPX-fil.",
|
||||
"settings_gpxExportSuccess": "Har exporterat GPX-fil med framgång",
|
||||
@@ -1591,6 +1585,16 @@
|
||||
"settings_gpxExportAllContacts": "Alla kontakters platser",
|
||||
"settings_gpxExportShareSubject": "meshcore-open export av GPX-kartdata",
|
||||
"settings_gpxExportShareText": "Kartdata exporterad från meshcore-open",
|
||||
"pathTrace_someHopsNoLocation": "En eller flera av humlen saknar en plats!"
|
||||
|
||||
"pathTrace_someHopsNoLocation": "En eller flera av humlen saknar en plats!",
|
||||
"pathTrace_clearTooltip": "Rensa väg",
|
||||
"map_pathTraceCancelled": "Sökvägsspårning avbruten.",
|
||||
"map_runTrace": "Kör spårsökning",
|
||||
"map_tapToAdd": "Tryck på noder för att lägga till dem i banan.",
|
||||
"map_removeLast": "Ta bort sista",
|
||||
"scanner_enableBluetooth": "Aktivera Bluetooth",
|
||||
"scanner_bluetoothOffMessage": "Vänligen aktivera Bluetooth för att söka efter enheter.",
|
||||
"scanner_bluetoothOff": "Bluetooth är avstängt",
|
||||
"settings_clientRepeatSubtitle": "Låt enheten repetera nätpaket för andra användare.",
|
||||
"settings_clientRepeat": "Upprepa utan elnät",
|
||||
"settings_clientRepeatFreqWarning": "För att kunna kommunicera utanför elnätet krävs frekvenserna 433, 869 eller 918 MHz."
|
||||
}
|
||||
|
||||
+12
-8
@@ -131,9 +131,6 @@
|
||||
"settings_infoContactsCount": "Кількість контактів",
|
||||
"settings_infoChannelCount": "Кількість каналів",
|
||||
"settings_presets": "Попередні налаштування",
|
||||
"settings_preset915Mhz": "915 МГц",
|
||||
"settings_preset868Mhz": "868 МГц",
|
||||
"settings_preset433Mhz": "433 МГц",
|
||||
"settings_frequency": "Частота (МГц)",
|
||||
"settings_frequencyHelper": "300.0 - 2500.0",
|
||||
"settings_frequencyInvalid": "Некоректна частота (300-2500 МГц)",
|
||||
@@ -143,8 +140,6 @@
|
||||
"settings_txPower": "Потужність TX (дБм)",
|
||||
"settings_txPowerHelper": "0 - 22",
|
||||
"settings_txPowerInvalid": "Некоректна потужність TX (0-22 дБм)",
|
||||
"settings_longRange": "Дальній діапазон",
|
||||
"settings_fastSpeed": "Висока швидкість",
|
||||
"settings_error": "Помилка: {message}",
|
||||
"@settings_error": {
|
||||
"placeholders": {
|
||||
@@ -1575,7 +1570,6 @@
|
||||
"notification_newNodesCount": "{count} {count, plural, =1{новий вузол} few{нових вузли} many{нових вузлів} other{нових вузлів}}",
|
||||
"notification_newTypeDiscovered": "Виявлено новий {contactType}",
|
||||
"notification_receivedNewMessage": "Отримано нове повідомлення",
|
||||
"contacts_ShareContactZeroHop": "Поділитися контактом за оголошенням",
|
||||
"settings_gpxExportRepeaters": "Експортувати ретранслятори / сервер кімнати до GPX",
|
||||
"settings_gpxExportRepeatersSubtitle": "Експортує ретранслятори / сервер кімнати з місцезнаходженням у файл GPX.",
|
||||
"settings_gpxExportSuccess": "Успішно експортовано файл GPX.",
|
||||
@@ -1591,6 +1585,16 @@
|
||||
"settings_gpxExportShareText": "Дані карти експортовані з meshcore-open",
|
||||
"settings_gpxExportAllContacts": "Усі місця контактів",
|
||||
"settings_gpxExportShareSubject": "експорт даних карти meshcore-open у форматі GPX",
|
||||
"pathTrace_someHopsNoLocation": "Одне або більше хмелів відсутнє місце розташування!"
|
||||
|
||||
"pathTrace_someHopsNoLocation": "Одне або більше хмелів відсутнє місце розташування!",
|
||||
"map_tapToAdd": "Натисніть на вузли, щоб додати їх до шляху",
|
||||
"map_runTrace": "Виконати трасування шляху",
|
||||
"pathTrace_clearTooltip": "Очистити шлях",
|
||||
"map_removeLast": "Видалити останній",
|
||||
"map_pathTraceCancelled": "Відмінується трасування шляху",
|
||||
"scanner_enableBluetooth": "Увімкніть Bluetooth",
|
||||
"scanner_bluetoothOffMessage": "Будь ласка, увімкніть Bluetooth, щоб сканувати пристрої.",
|
||||
"scanner_bluetoothOff": "Bluetooth вимкнено",
|
||||
"settings_clientRepeatFreqWarning": "Повтор без підключення до мережі вимагає частоти 433, 869 або 918 МГц.",
|
||||
"settings_clientRepeatSubtitle": "Дозвольте цьому пристрою повторювати пакети даних для інших пристроїв.",
|
||||
"settings_clientRepeat": "Автономна система"
|
||||
}
|
||||
|
||||
+12
-8
@@ -136,9 +136,6 @@
|
||||
"settings_infoContactsCount": "联系人数量",
|
||||
"settings_infoChannelCount": "通道数量",
|
||||
"settings_presets": "预设",
|
||||
"settings_preset915Mhz": "915 兆赫",
|
||||
"settings_preset868Mhz": "868 兆赫",
|
||||
"settings_preset433Mhz": "433 兆赫",
|
||||
"settings_frequency": "频率 (MHz)",
|
||||
"settings_frequencyHelper": "300.0 - 2500.0",
|
||||
"settings_frequencyInvalid": "无效频率(300-2500 MHz)",
|
||||
@@ -148,8 +145,6 @@
|
||||
"settings_txPower": "TX 功率(dBm)",
|
||||
"settings_txPowerHelper": "0 - 22",
|
||||
"settings_txPowerInvalid": "无效的发射功率(0-22 dBm)",
|
||||
"settings_longRange": "远距离",
|
||||
"settings_fastSpeed": "高速",
|
||||
"settings_error": "[保存:{message}]\n错误:{message}",
|
||||
"@settings_error": {
|
||||
"placeholders": {
|
||||
@@ -1575,7 +1570,6 @@
|
||||
"notification_newNodesCount": "{count} 个新节点",
|
||||
"notification_newTypeDiscovered": "发现新 {contactType}",
|
||||
"notification_receivedNewMessage": "收到新消息",
|
||||
"contacts_contactAdvertCopyFailed": "将广告复制到剪贴板操作失败。",
|
||||
"settings_gpxExportRepeaters": "导出重复器/房间服务器到GPX",
|
||||
"settings_gpxExportRepeatersSubtitle": "导出带有位置的重复器/房间服务器到GPX文件。",
|
||||
"settings_gpxExportContactsSubtitle": "导出带有位置的伙伴到GPX文件。",
|
||||
@@ -1591,6 +1585,16 @@
|
||||
"settings_gpxExportNoContacts": "没有联系人可导出",
|
||||
"settings_gpxExportShareText": "来自meshcore-open的导出地图数据",
|
||||
"settings_gpxExportShareSubject": "meshcore-open GPX 地图数据导出",
|
||||
"pathTrace_someHopsNoLocation": "其中一个或多个啤酒花缺少位置!"
|
||||
|
||||
"pathTrace_someHopsNoLocation": "其中一个或多个啤酒花缺少位置!",
|
||||
"map_tapToAdd": "点击节点将其添加到路径中",
|
||||
"pathTrace_clearTooltip": "清除路径",
|
||||
"map_pathTraceCancelled": "路径跟踪已取消",
|
||||
"map_removeLast": "删除最后一个",
|
||||
"map_runTrace": "运行路径跟踪",
|
||||
"scanner_bluetoothOffMessage": "请打开蓝牙功能,以便搜索设备。",
|
||||
"scanner_bluetoothOff": "蓝牙已关闭",
|
||||
"scanner_enableBluetooth": "启用蓝牙",
|
||||
"settings_clientRepeat": "离网重复",
|
||||
"settings_clientRepeatSubtitle": "允许此设备重复发送网状数据包给其他设备",
|
||||
"settings_clientRepeatFreqWarning": "离网重复通信需要使用 433、869 或 918 兆赫兹的频率。"
|
||||
}
|
||||
|
||||
+194
-40
@@ -59,46 +59,200 @@ class RadioSettings {
|
||||
required this.txPowerDbm,
|
||||
});
|
||||
|
||||
// Preset configurations
|
||||
static RadioSettings get preset915MHz => RadioSettings(
|
||||
frequencyMHz: 915.0,
|
||||
bandwidth: LoRaBandwidth.bw125,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf7,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 20,
|
||||
);
|
||||
|
||||
static RadioSettings get preset868MHz => RadioSettings(
|
||||
frequencyMHz: 868.0,
|
||||
bandwidth: LoRaBandwidth.bw125,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf7,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 14,
|
||||
);
|
||||
|
||||
static RadioSettings get preset433MHz => RadioSettings(
|
||||
frequencyMHz: 433.0,
|
||||
bandwidth: LoRaBandwidth.bw125,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf7,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 20,
|
||||
);
|
||||
|
||||
static RadioSettings get presetLongRange => RadioSettings(
|
||||
frequencyMHz: 915.0,
|
||||
bandwidth: LoRaBandwidth.bw125,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf12,
|
||||
codingRate: LoRaCodingRate.cr4_8,
|
||||
txPowerDbm: 20,
|
||||
);
|
||||
|
||||
static RadioSettings get presetFastSpeed => RadioSettings(
|
||||
frequencyMHz: 915.0,
|
||||
bandwidth: LoRaBandwidth.bw500,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf7,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 20,
|
||||
);
|
||||
// Regional preset configurations
|
||||
static final List<(String, RadioSettings)> presets = [
|
||||
(
|
||||
'Australia',
|
||||
RadioSettings(
|
||||
frequencyMHz: 915.8,
|
||||
bandwidth: LoRaBandwidth.bw250,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf10,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 20,
|
||||
),
|
||||
),
|
||||
(
|
||||
'Australia (Narrow)',
|
||||
RadioSettings(
|
||||
frequencyMHz: 916.575,
|
||||
bandwidth: LoRaBandwidth.bw62_5,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf7,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 20,
|
||||
),
|
||||
),
|
||||
(
|
||||
'Australia SA, WA, QLD',
|
||||
RadioSettings(
|
||||
frequencyMHz: 923.125,
|
||||
bandwidth: LoRaBandwidth.bw62_5,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf8,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 20,
|
||||
),
|
||||
),
|
||||
(
|
||||
'Czech Republic',
|
||||
RadioSettings(
|
||||
frequencyMHz: 869.432,
|
||||
bandwidth: LoRaBandwidth.bw62_5,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf7,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 14,
|
||||
),
|
||||
),
|
||||
(
|
||||
'EU 433MHz',
|
||||
RadioSettings(
|
||||
frequencyMHz: 433.650,
|
||||
bandwidth: LoRaBandwidth.bw250,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf11,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 20,
|
||||
),
|
||||
),
|
||||
(
|
||||
'EU/UK (Long Range)',
|
||||
RadioSettings(
|
||||
frequencyMHz: 869.525,
|
||||
bandwidth: LoRaBandwidth.bw250,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf11,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 14,
|
||||
),
|
||||
),
|
||||
(
|
||||
'EU/UK (Medium Range)',
|
||||
RadioSettings(
|
||||
frequencyMHz: 869.525,
|
||||
bandwidth: LoRaBandwidth.bw250,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf10,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 14,
|
||||
),
|
||||
),
|
||||
(
|
||||
'EU/UK (Narrow)',
|
||||
RadioSettings(
|
||||
frequencyMHz: 869.618,
|
||||
bandwidth: LoRaBandwidth.bw62_5,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf8,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 14,
|
||||
),
|
||||
),
|
||||
(
|
||||
'New Zealand',
|
||||
RadioSettings(
|
||||
frequencyMHz: 917.375,
|
||||
bandwidth: LoRaBandwidth.bw250,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf11,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 20,
|
||||
),
|
||||
),
|
||||
(
|
||||
'New Zealand (Narrow)',
|
||||
RadioSettings(
|
||||
frequencyMHz: 917.375,
|
||||
bandwidth: LoRaBandwidth.bw62_5,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf7,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 20,
|
||||
),
|
||||
),
|
||||
(
|
||||
'Portugal 433',
|
||||
RadioSettings(
|
||||
frequencyMHz: 433.375,
|
||||
bandwidth: LoRaBandwidth.bw62_5,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf9,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 20,
|
||||
),
|
||||
),
|
||||
(
|
||||
'Portugal 869',
|
||||
RadioSettings(
|
||||
frequencyMHz: 869.618,
|
||||
bandwidth: LoRaBandwidth.bw62_5,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf7,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 14,
|
||||
),
|
||||
),
|
||||
(
|
||||
'Switzerland',
|
||||
RadioSettings(
|
||||
frequencyMHz: 869.618,
|
||||
bandwidth: LoRaBandwidth.bw62_5,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf8,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 14,
|
||||
),
|
||||
),
|
||||
(
|
||||
'USA Arizona',
|
||||
RadioSettings(
|
||||
frequencyMHz: 908.205,
|
||||
bandwidth: LoRaBandwidth.bw62_5,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf10,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 20,
|
||||
),
|
||||
),
|
||||
(
|
||||
'USA/Canada',
|
||||
RadioSettings(
|
||||
frequencyMHz: 910.525,
|
||||
bandwidth: LoRaBandwidth.bw62_5,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf7,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 20,
|
||||
),
|
||||
),
|
||||
(
|
||||
'Vietnam',
|
||||
RadioSettings(
|
||||
frequencyMHz: 920.250,
|
||||
bandwidth: LoRaBandwidth.bw250,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf11,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 20,
|
||||
),
|
||||
),
|
||||
// Off-grid repeat presets (valid client_repeat frequencies)
|
||||
(
|
||||
'Off-Grid 433',
|
||||
RadioSettings(
|
||||
frequencyMHz: 433.0,
|
||||
bandwidth: LoRaBandwidth.bw250,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf11,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 20,
|
||||
),
|
||||
),
|
||||
(
|
||||
'Off-Grid 869',
|
||||
RadioSettings(
|
||||
frequencyMHz: 869.0,
|
||||
bandwidth: LoRaBandwidth.bw250,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf11,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 14,
|
||||
),
|
||||
),
|
||||
(
|
||||
'Off-Grid 918',
|
||||
RadioSettings(
|
||||
frequencyMHz: 918.0,
|
||||
bandwidth: LoRaBandwidth.bw250,
|
||||
spreadingFactor: LoRaSpreadingFactor.sf11,
|
||||
codingRate: LoRaCodingRate.cr4_5,
|
||||
txPowerDbm: 20,
|
||||
),
|
||||
),
|
||||
];
|
||||
|
||||
int get frequencyHz => (frequencyMHz * 1000).round();
|
||||
int get bandwidthHz => bandwidth.hz;
|
||||
|
||||
@@ -55,7 +55,7 @@ class AppDebugLogScreen extends StatelessWidget {
|
||||
child: hasEntries
|
||||
? ListView.separated(
|
||||
itemCount: entries.length,
|
||||
separatorBuilder: (_, __) => const Divider(height: 1),
|
||||
separatorBuilder: (_, _) => const Divider(height: 1),
|
||||
itemBuilder: (context, index) {
|
||||
final entry = entries[index];
|
||||
return ListTile(
|
||||
|
||||
@@ -384,6 +384,7 @@ class AppSettingsScreen extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
// Fixed rendering issues
|
||||
Widget _buildBatteryCard(
|
||||
BuildContext context,
|
||||
AppSettingsService settingsService,
|
||||
@@ -399,6 +400,7 @@ class AppSettingsScreen extends StatelessWidget {
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
const SizedBox(height: 4),
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(16, 16, 16, 8),
|
||||
child: Text(
|
||||
@@ -406,6 +408,8 @@ class AppSettingsScreen extends StatelessWidget {
|
||||
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
|
||||
),
|
||||
),
|
||||
|
||||
// Main tile (icon + text only)
|
||||
ListTile(
|
||||
leading: const Icon(Icons.battery_full),
|
||||
title: Text(context.l10n.appSettings_batteryChemistry),
|
||||
@@ -416,8 +420,19 @@ class AppSettingsScreen extends StatelessWidget {
|
||||
)
|
||||
: context.l10n.appSettings_batteryChemistryConnectFirst,
|
||||
),
|
||||
trailing: DropdownButton<String>(
|
||||
value: selection,
|
||||
contentPadding: const EdgeInsets.symmetric(horizontal: 16),
|
||||
),
|
||||
|
||||
// Dropdown (separate full-width row)
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(16, 0, 16, 16),
|
||||
child: DropdownButtonFormField<String>(
|
||||
initialValue: selection,
|
||||
isExpanded: true,
|
||||
decoration: const InputDecoration(
|
||||
border: UnderlineInputBorder(),
|
||||
isDense: true,
|
||||
),
|
||||
onChanged: isConnected
|
||||
? (value) {
|
||||
if (value != null) {
|
||||
|
||||
@@ -100,7 +100,7 @@ class _BleDebugLogScreenState extends State<BleDebugLogScreen> {
|
||||
itemCount: showingFrames
|
||||
? entries.length
|
||||
: rawEntries.length,
|
||||
separatorBuilder: (_, __) => const Divider(height: 1),
|
||||
separatorBuilder: (_, _) => const Divider(height: 1),
|
||||
itemBuilder: (context, index) {
|
||||
if (showingFrames) {
|
||||
final entry = entries[index];
|
||||
|
||||
@@ -594,7 +594,7 @@ class _ChannelMessagePathMapScreenState
|
||||
: ListView.separated(
|
||||
padding: const EdgeInsets.symmetric(vertical: 4),
|
||||
itemCount: hops.length,
|
||||
separatorBuilder: (_, __) => const Divider(height: 1),
|
||||
separatorBuilder: (_, _) => const Divider(height: 1),
|
||||
itemBuilder: (context, index) {
|
||||
final hop = hops[index];
|
||||
return ListTile(
|
||||
|
||||
+240
-53
@@ -1,8 +1,10 @@
|
||||
import 'dart:math';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_map/flutter_map.dart';
|
||||
import 'package:latlong2/latlong.dart';
|
||||
import 'package:meshcore_open/screens/path_trace_map.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import '../connector/meshcore_connector.dart';
|
||||
@@ -48,9 +50,14 @@ class _MapScreenState extends State<MapScreen> {
|
||||
final MapMarkerService _markerService = MapMarkerService();
|
||||
final Set<String> _hiddenMarkerIds = {};
|
||||
Set<String> _removedMarkerIds = {};
|
||||
bool _isBuildingPathTrace = false;
|
||||
bool _isSelectingPoi = false;
|
||||
bool _hasInitializedMap = false;
|
||||
bool _removedMarkersLoaded = false;
|
||||
final List<int> _pathTrace = [];
|
||||
final List<LatLng> _points = [];
|
||||
final List<Polyline> _polylines = [];
|
||||
bool _legendExpanded = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -147,6 +154,19 @@ class _MapScreenState extends State<MapScreen> {
|
||||
.where((c) => c.hasLocation)
|
||||
.toList();
|
||||
|
||||
_polylines.clear();
|
||||
_polylines.addAll(
|
||||
_points.length > 1
|
||||
? [
|
||||
Polyline(
|
||||
points: _points,
|
||||
strokeWidth: 4,
|
||||
color: Colors.blueAccent,
|
||||
),
|
||||
]
|
||||
: <Polyline>[],
|
||||
);
|
||||
|
||||
// Calculate center and zoom of all nodes, or default to (0, 0)
|
||||
LatLng center = const LatLng(0, 0);
|
||||
double initialZoom = 10.0;
|
||||
@@ -247,6 +267,12 @@ class _MapScreenState extends State<MapScreen> {
|
||||
centerTitle: true,
|
||||
automaticallyImplyLeading: false,
|
||||
actions: [
|
||||
if (!_isBuildingPathTrace)
|
||||
IconButton(
|
||||
icon: const Icon(Icons.radar),
|
||||
onPressed: () => _startPath(),
|
||||
tooltip: context.l10n.contacts_pathTrace,
|
||||
),
|
||||
PopupMenuButton(
|
||||
itemBuilder: (context) => [
|
||||
PopupMenuItem(
|
||||
@@ -334,6 +360,8 @@ class _MapScreenState extends State<MapScreen> {
|
||||
MapTileCacheService.userAgentPackageName,
|
||||
maxZoom: 19,
|
||||
),
|
||||
if (_polylines.isNotEmpty && _isBuildingPathTrace)
|
||||
PolylineLayer(polylines: _polylines),
|
||||
MarkerLayer(
|
||||
markers: [
|
||||
if (highlightPosition != null)
|
||||
@@ -390,7 +418,12 @@ class _MapScreenState extends State<MapScreen> {
|
||||
),
|
||||
],
|
||||
),
|
||||
_buildLegend(contactsWithLocation.length, sharedMarkers.length),
|
||||
if (!_isBuildingPathTrace)
|
||||
_buildLegend(
|
||||
contactsWithLocation.length,
|
||||
sharedMarkers.length,
|
||||
),
|
||||
if (_isBuildingPathTrace) _buildPathTraceOverlay(),
|
||||
],
|
||||
),
|
||||
bottomNavigationBar: SafeArea(
|
||||
@@ -434,7 +467,11 @@ class _MapScreenState extends State<MapScreen> {
|
||||
width: 35,
|
||||
height: 35,
|
||||
child: GestureDetector(
|
||||
onTap: () => _showNodeInfo(context, contact),
|
||||
onLongPress: () =>
|
||||
_isBuildingPathTrace ? _showNodeInfo(context, contact) : null,
|
||||
onTap: () => _isBuildingPathTrace
|
||||
? _addToPath(context, contact)
|
||||
: _showNodeInfo(context, contact),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
@@ -503,60 +540,102 @@ class _MapScreenState extends State<MapScreen> {
|
||||
top: 16,
|
||||
right: 16,
|
||||
child: Card(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(12.0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(
|
||||
context.l10n.map_nodesCount(nodeCount),
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 14,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
InkWell(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
onTap: () {
|
||||
setState(() {
|
||||
_legendExpanded = !_legendExpanded;
|
||||
});
|
||||
},
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.fromLTRB(12, 10, 12, 10),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
context.l10n.map_nodesCount(nodeCount),
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 14,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
context.l10n.map_pinsCount(markerCount),
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 12,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
AnimatedRotation(
|
||||
turns: _legendExpanded ? 0.5 : 0,
|
||||
duration: const Duration(milliseconds: 200),
|
||||
child: const Icon(Icons.expand_more, size: 20),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Text(
|
||||
context.l10n.map_pinsCount(markerCount),
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 12,
|
||||
),
|
||||
AnimatedCrossFade(
|
||||
firstChild: const SizedBox.shrink(),
|
||||
secondChild: Padding(
|
||||
padding: const EdgeInsets.fromLTRB(12, 0, 12, 12),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
const SizedBox(height: 6),
|
||||
_buildLegendItem(
|
||||
Icons.person,
|
||||
context.l10n.map_chat,
|
||||
Colors.blue,
|
||||
),
|
||||
_buildLegendItem(
|
||||
Icons.router,
|
||||
context.l10n.map_repeater,
|
||||
Colors.green,
|
||||
),
|
||||
_buildLegendItem(
|
||||
Icons.meeting_room,
|
||||
context.l10n.map_room,
|
||||
Colors.purple,
|
||||
),
|
||||
_buildLegendItem(
|
||||
Icons.sensors,
|
||||
context.l10n.map_sensor,
|
||||
Colors.orange,
|
||||
),
|
||||
_buildLegendItem(
|
||||
Icons.flag,
|
||||
context.l10n.map_pinDm,
|
||||
Colors.blue,
|
||||
),
|
||||
_buildLegendItem(
|
||||
Icons.flag,
|
||||
context.l10n.map_pinPrivate,
|
||||
Colors.purple,
|
||||
),
|
||||
_buildLegendItem(
|
||||
Icons.flag,
|
||||
context.l10n.map_pinPublic,
|
||||
Colors.orange,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
_buildLegendItem(
|
||||
Icons.person,
|
||||
context.l10n.map_chat,
|
||||
Colors.blue,
|
||||
),
|
||||
_buildLegendItem(
|
||||
Icons.router,
|
||||
context.l10n.map_repeater,
|
||||
Colors.green,
|
||||
),
|
||||
_buildLegendItem(
|
||||
Icons.meeting_room,
|
||||
context.l10n.map_room,
|
||||
Colors.purple,
|
||||
),
|
||||
_buildLegendItem(
|
||||
Icons.sensors,
|
||||
context.l10n.map_sensor,
|
||||
Colors.orange,
|
||||
),
|
||||
_buildLegendItem(Icons.flag, context.l10n.map_pinDm, Colors.blue),
|
||||
_buildLegendItem(
|
||||
Icons.flag,
|
||||
context.l10n.map_pinPrivate,
|
||||
Colors.purple,
|
||||
),
|
||||
_buildLegendItem(
|
||||
Icons.flag,
|
||||
context.l10n.map_pinPublic,
|
||||
Colors.orange,
|
||||
),
|
||||
],
|
||||
),
|
||||
crossFadeState: _legendExpanded
|
||||
? CrossFadeState.showSecond
|
||||
: CrossFadeState.showFirst,
|
||||
duration: const Duration(milliseconds: 200),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -564,7 +643,7 @@ class _MapScreenState extends State<MapScreen> {
|
||||
|
||||
Widget _buildLegendItem(IconData icon, String label, Color color) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 4.0),
|
||||
padding: const EdgeInsets.symmetric(vertical: 1.0),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
@@ -1412,6 +1491,114 @@ class _MapScreenState extends State<MapScreen> {
|
||||
return context.l10n.time_allTime;
|
||||
}
|
||||
}
|
||||
|
||||
void _addToPath(BuildContext context, Contact contact) {
|
||||
setState(() {
|
||||
_pathTrace.add(
|
||||
contact.publicKey[0],
|
||||
); // Add first 16 bytes of public key to path trace
|
||||
_points.add(LatLng(contact.latitude!, contact.longitude!));
|
||||
});
|
||||
}
|
||||
|
||||
void _startPath() {
|
||||
setState(() {
|
||||
_isBuildingPathTrace = true;
|
||||
_pathTrace.clear();
|
||||
_points.clear();
|
||||
_polylines.clear();
|
||||
});
|
||||
}
|
||||
|
||||
void _removePath() {
|
||||
setState(() {
|
||||
_pathTrace.removeLast(); // Remove last node from path trace
|
||||
_points.removeLast(); // Remove last point from points list
|
||||
_polylines.clear(); // Clear polylines
|
||||
});
|
||||
}
|
||||
|
||||
Widget _buildPathTraceOverlay() {
|
||||
final l10n = context.l10n;
|
||||
return Positioned(
|
||||
top: 16,
|
||||
left: 16,
|
||||
right: 16,
|
||||
child: Card(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(12.0),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(
|
||||
l10n.contacts_pathTrace,
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
if (_pathTrace.isEmpty) const SizedBox(height: 8),
|
||||
if (_pathTrace.isEmpty)
|
||||
Text(l10n.map_tapToAdd, style: TextStyle(fontSize: 12)),
|
||||
const SizedBox(height: 6),
|
||||
if (_pathTrace.isNotEmpty)
|
||||
Text(
|
||||
"${l10n.path_currentPathLabel} ${formatDistance(getPathDistanceMeters(_points))}",
|
||||
style: TextStyle(fontSize: 12, color: Colors.grey[700]),
|
||||
),
|
||||
SelectableText(
|
||||
_pathTrace
|
||||
.map((b) => b.toRadixString(16).padLeft(2, '0'))
|
||||
.join(','),
|
||||
style: TextStyle(fontSize: 18),
|
||||
),
|
||||
const SizedBox(height: 6),
|
||||
Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
if (_pathTrace.isNotEmpty)
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => PathTraceMapScreen(
|
||||
title: l10n.contacts_pathTrace,
|
||||
path: Uint8List.fromList(_pathTrace),
|
||||
),
|
||||
),
|
||||
);
|
||||
setState(() {
|
||||
_isBuildingPathTrace = false;
|
||||
});
|
||||
},
|
||||
child: Text(l10n.map_runTrace),
|
||||
),
|
||||
if (_pathTrace.isNotEmpty)
|
||||
ElevatedButton(
|
||||
onPressed: _removePath,
|
||||
child: Text(l10n.map_removeLast),
|
||||
),
|
||||
if (_pathTrace.isEmpty)
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
_isBuildingPathTrace = false;
|
||||
_pathTrace.clear();
|
||||
_points.clear();
|
||||
_polylines.clear();
|
||||
});
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text(l10n.map_pathTraceCancelled)),
|
||||
);
|
||||
},
|
||||
child: Text(l10n.common_cancel),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _MarkerPayload {
|
||||
|
||||
@@ -13,6 +13,23 @@ import 'package:meshcore_open/services/map_tile_cache_service.dart';
|
||||
import 'package:meshcore_open/widgets/snr_indicator.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
double getPathDistanceMeters(List<LatLng> points) {
|
||||
if (points.length <= 1) return 0.0;
|
||||
|
||||
double distanceMeters = 0.0;
|
||||
final distanceCalculator = Distance();
|
||||
|
||||
for (int i = 0; i < points.length - 1; i++) {
|
||||
distanceMeters += distanceCalculator(points[i], points[i + 1]);
|
||||
}
|
||||
|
||||
return distanceMeters;
|
||||
}
|
||||
|
||||
String formatDistance(double distanceMeters) {
|
||||
return '(${(distanceMeters / 1609.34).toStringAsFixed(2)} Miles / ${(distanceMeters / 1000).toStringAsFixed(2)} Km)';
|
||||
}
|
||||
|
||||
class PathTraceData {
|
||||
final Uint8List pathData;
|
||||
final Uint8List snrData;
|
||||
@@ -50,7 +67,6 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
|
||||
bool _isLoading = false;
|
||||
bool _failed2Loaded = false;
|
||||
bool _hasData = false;
|
||||
bool _noLocationErr = false;
|
||||
PathTraceData? _traceData;
|
||||
List<LatLng> _points = <LatLng>[];
|
||||
List<Polyline> _polylines = [];
|
||||
@@ -58,7 +74,7 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
|
||||
double _initialZoom = 2.0;
|
||||
LatLngBounds? _bounds;
|
||||
ValueKey<String> _mapKey = const ValueKey('initial');
|
||||
double _pathDistance = 0.0;
|
||||
double _pathDistanceMeters = 0.0;
|
||||
|
||||
String _formatPathPrefixes(Uint8List pathBytes) {
|
||||
return pathBytes
|
||||
@@ -93,23 +109,11 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
|
||||
return traceBytes;
|
||||
}
|
||||
|
||||
double getPathDistance() {
|
||||
double totalDistance = 0.0;
|
||||
final distanceCalculator = Distance();
|
||||
|
||||
for (int i = 0; i < _points.length - 1; i++) {
|
||||
totalDistance += distanceCalculator(_points[i], _points[i + 1]);
|
||||
}
|
||||
|
||||
return totalDistance;
|
||||
}
|
||||
|
||||
Future<void> _doPathTrace() async {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_isLoading = true;
|
||||
_failed2Loaded = false;
|
||||
_noLocationErr = false;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -160,6 +164,14 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
|
||||
});
|
||||
}
|
||||
|
||||
if (code == respCodeErr) {
|
||||
_timeoutTimer?.cancel();
|
||||
if (!mounted) return;
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
_failed2Loaded = true;
|
||||
});
|
||||
}
|
||||
// Check if it's a binary response
|
||||
if (frame.length > 8 &&
|
||||
code == pushCodeTraceData &&
|
||||
@@ -215,8 +227,6 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
|
||||
contact.latitude != null &&
|
||||
contact.longitude != null) {
|
||||
_points.add(LatLng(contact.latitude!, contact.longitude!));
|
||||
} else {
|
||||
_noLocationErr = true;
|
||||
}
|
||||
}
|
||||
_polylines = _points.length > 1
|
||||
@@ -235,7 +245,7 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
|
||||
_mapKey = ValueKey(
|
||||
'${context.l10n.pathTrace_you},${_formatPathPrefixes(_traceData!.pathData)}',
|
||||
);
|
||||
_pathDistance = getPathDistance();
|
||||
_pathDistanceMeters = getPathDistanceMeters(_points);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -279,20 +289,7 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
|
||||
top: false,
|
||||
child: Stack(
|
||||
children: [
|
||||
if (_noLocationErr)
|
||||
Center(
|
||||
child: Card(
|
||||
color: Colors.red,
|
||||
child: Padding(
|
||||
padding: EdgeInsets.all(12),
|
||||
child: Text(
|
||||
context.l10n.pathTrace_someHopsNoLocation,
|
||||
style: TextStyle(color: Colors.white),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
if (!_hasData && !_noLocationErr)
|
||||
if (!_hasData)
|
||||
Center(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
@@ -304,43 +301,11 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
|
||||
],
|
||||
),
|
||||
),
|
||||
if (_hasData && !_noLocationErr)
|
||||
FlutterMap(
|
||||
key: _mapKey,
|
||||
options: MapOptions(
|
||||
initialCenter: _initialCenter!,
|
||||
initialZoom: _initialZoom,
|
||||
initialCameraFit: _bounds == null
|
||||
? null
|
||||
: CameraFit.bounds(
|
||||
bounds: _bounds!,
|
||||
padding: const EdgeInsets.all(64),
|
||||
maxZoom: 16,
|
||||
),
|
||||
minZoom: 2.0,
|
||||
maxZoom: 18.0,
|
||||
),
|
||||
children: [
|
||||
TileLayer(
|
||||
urlTemplate: kMapTileUrlTemplate,
|
||||
tileProvider: tileCache.tileProvider,
|
||||
userAgentPackageName:
|
||||
MapTileCacheService.userAgentPackageName,
|
||||
maxZoom: 19,
|
||||
),
|
||||
if (_polylines.isNotEmpty)
|
||||
PolylineLayer(polylines: _polylines),
|
||||
if (_traceData!.pathData.isNotEmpty)
|
||||
MarkerLayer(
|
||||
markers: _buildHopMarkers(_traceData!.pathData),
|
||||
),
|
||||
],
|
||||
),
|
||||
if (_hasData) _buildMapPathTrace(context, tileCache),
|
||||
if (_points.isEmpty &&
|
||||
!_hasData &&
|
||||
!_isLoading &&
|
||||
!_failed2Loaded &&
|
||||
!_noLocationErr)
|
||||
!_failed2Loaded)
|
||||
Center(
|
||||
child: Card(
|
||||
color: Colors.white.withValues(alpha: 0.9),
|
||||
@@ -352,8 +317,7 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
|
||||
),
|
||||
),
|
||||
),
|
||||
if (_hasData && !_noLocationErr)
|
||||
_buildLegendCard(context, _traceData!),
|
||||
if (_hasData) _buildLegendCard(context, _traceData!),
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -365,7 +329,8 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
|
||||
List<Marker> _buildHopMarkers(List<int> pathData) {
|
||||
return [
|
||||
for (final hop in pathData)
|
||||
if (_traceData!.pathContacts[hop]!.hasLocation)
|
||||
if (_traceData!.pathContacts[hop] != null &&
|
||||
_traceData!.pathContacts[hop]!.hasLocation)
|
||||
Marker(
|
||||
point: LatLng(
|
||||
_traceData!.pathContacts[hop]!.latitude!,
|
||||
@@ -453,7 +418,9 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
|
||||
.toRadixString(16)
|
||||
.padLeft(2, '0')
|
||||
.toUpperCase();
|
||||
return contactName != null ? "$hex: $contactName" : hex;
|
||||
return contactName != null
|
||||
? "$hex: $contactName"
|
||||
: "$hex: ${context.l10n.channelPath_unknownRepeater}";
|
||||
}
|
||||
} else {
|
||||
final contactName =
|
||||
@@ -462,7 +429,9 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
|
||||
.toRadixString(16)
|
||||
.padLeft(2, '0')
|
||||
.toUpperCase();
|
||||
return contactName != null ? "$hex: $contactName" : hex;
|
||||
return contactName != null
|
||||
? "$hex: $contactName"
|
||||
: "$hex: ${context.l10n.channelPath_unknownRepeater}";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -475,7 +444,9 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
|
||||
.toRadixString(16)
|
||||
.padLeft(2, '0')
|
||||
.toUpperCase();
|
||||
return contactName != null ? "$hex: $contactName" : hex;
|
||||
return contactName != null
|
||||
? "$hex: $contactName"
|
||||
: "$hex: ${context.l10n.channelPath_unknownRepeater}";
|
||||
} else {
|
||||
return context.l10n.pathTrace_you;
|
||||
}
|
||||
@@ -486,10 +457,46 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
|
||||
.toRadixString(16)
|
||||
.padLeft(2, '0')
|
||||
.toUpperCase();
|
||||
return contactName != null ? "$hex: $contactName" : hex;
|
||||
return contactName != null
|
||||
? "$hex: $contactName"
|
||||
: "$hex: ${context.l10n.channelPath_unknownRepeater}";
|
||||
}
|
||||
}
|
||||
|
||||
Widget _buildMapPathTrace(
|
||||
BuildContext context,
|
||||
MapTileCacheService tileCache,
|
||||
) {
|
||||
return FlutterMap(
|
||||
key: _mapKey,
|
||||
options: MapOptions(
|
||||
interactionOptions: InteractionOptions(flags: ~InteractiveFlag.rotate),
|
||||
initialCenter: _initialCenter!,
|
||||
initialZoom: _initialZoom,
|
||||
initialCameraFit: _bounds == null
|
||||
? null
|
||||
: CameraFit.bounds(
|
||||
bounds: _bounds!,
|
||||
padding: const EdgeInsets.all(64),
|
||||
maxZoom: 16,
|
||||
),
|
||||
minZoom: 2.0,
|
||||
maxZoom: 18.0,
|
||||
),
|
||||
children: [
|
||||
TileLayer(
|
||||
urlTemplate: kMapTileUrlTemplate,
|
||||
tileProvider: tileCache.tileProvider,
|
||||
userAgentPackageName: MapTileCacheService.userAgentPackageName,
|
||||
maxZoom: 19,
|
||||
),
|
||||
if (_polylines.isNotEmpty) PolylineLayer(polylines: _polylines),
|
||||
if (_traceData!.pathData.isNotEmpty)
|
||||
MarkerLayer(markers: _buildHopMarkers(_traceData!.pathData)),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildLegendCard(BuildContext context, PathTraceData pathTraceData) {
|
||||
final l10n = context.l10n;
|
||||
final maxHeight = MediaQuery.of(context).size.height * 0.35;
|
||||
@@ -509,7 +516,7 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(12),
|
||||
child: Text(
|
||||
'${l10n.channelPath_repeaterHops} (${(_pathDistance / 1609.34).toStringAsFixed(2)} Miles / ${(_pathDistance / 1000).toStringAsFixed(2)} Km)',
|
||||
'${l10n.channelPath_repeaterHops} ${formatDistance(_pathDistanceMeters)}',
|
||||
style: const TextStyle(fontWeight: FontWeight.w600),
|
||||
),
|
||||
),
|
||||
@@ -523,7 +530,7 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
|
||||
child: ListView.separated(
|
||||
padding: const EdgeInsets.symmetric(vertical: 4),
|
||||
itemCount: pathTraceData.pathData.length + 1,
|
||||
separatorBuilder: (_, __) => const Divider(height: 1),
|
||||
separatorBuilder: (_, _) => const Divider(height: 1),
|
||||
itemBuilder: (context, index) {
|
||||
return Column(
|
||||
children: [
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
import 'dart:async';
|
||||
import 'dart:io' show Platform;
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
@@ -18,6 +21,8 @@ class ScannerScreen extends StatefulWidget {
|
||||
class _ScannerScreenState extends State<ScannerScreen> {
|
||||
bool _changedNavigation = false;
|
||||
late final VoidCallback _connectionListener;
|
||||
BluetoothAdapterState _bluetoothState = BluetoothAdapterState.unknown;
|
||||
late StreamSubscription<BluetoothAdapterState> _bluetoothStateSubscription;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -39,12 +44,25 @@ class _ScannerScreenState extends State<ScannerScreen> {
|
||||
};
|
||||
|
||||
connector.addListener(_connectionListener);
|
||||
|
||||
_bluetoothStateSubscription = FlutterBluePlus.adapterState.listen((state) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_bluetoothState = state;
|
||||
});
|
||||
// Cancel scan if Bluetooth turns off while scanning
|
||||
if (state != BluetoothAdapterState.on) {
|
||||
unawaited(connector.stopScan());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
final connector = Provider.of<MeshCoreConnector>(context, listen: false);
|
||||
connector.removeListener(_connectionListener);
|
||||
unawaited(_bluetoothStateSubscription.cancel());
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@@ -62,6 +80,10 @@ class _ScannerScreenState extends State<ScannerScreen> {
|
||||
builder: (context, connector, child) {
|
||||
return Column(
|
||||
children: [
|
||||
// Bluetooth off warning
|
||||
if (_bluetoothState == BluetoothAdapterState.off)
|
||||
_bluetoothOffWarning(context),
|
||||
|
||||
// Status bar
|
||||
_buildStatusBar(context, connector),
|
||||
|
||||
@@ -76,15 +98,18 @@ class _ScannerScreenState extends State<ScannerScreen> {
|
||||
builder: (context, connector, child) {
|
||||
final isScanning =
|
||||
connector.state == MeshCoreConnectionState.scanning;
|
||||
final isBluetoothOff = _bluetoothState == BluetoothAdapterState.off;
|
||||
|
||||
return FloatingActionButton.extended(
|
||||
onPressed: () {
|
||||
if (isScanning) {
|
||||
connector.stopScan();
|
||||
} else {
|
||||
connector.startScan();
|
||||
}
|
||||
},
|
||||
onPressed: isBluetoothOff
|
||||
? null
|
||||
: () {
|
||||
if (isScanning) {
|
||||
connector.stopScan();
|
||||
} else {
|
||||
connector.startScan();
|
||||
}
|
||||
},
|
||||
icon: isScanning
|
||||
? const SizedBox(
|
||||
width: 20,
|
||||
@@ -205,4 +230,47 @@ class _ScannerScreenState extends State<ScannerScreen> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Widget _bluetoothOffWarning(BuildContext context) {
|
||||
final errorColor = Theme.of(context).colorScheme.error;
|
||||
return Container(
|
||||
width: double.infinity,
|
||||
padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16),
|
||||
color: errorColor.withValues(alpha: 0.15),
|
||||
child: Row(
|
||||
children: [
|
||||
Icon(Icons.bluetooth_disabled, size: 24, color: errorColor),
|
||||
const SizedBox(width: 12),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
context.l10n.scanner_bluetoothOff,
|
||||
style: TextStyle(
|
||||
color: errorColor,
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 14,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
context.l10n.scanner_bluetoothOffMessage,
|
||||
style: TextStyle(
|
||||
color: errorColor.withValues(alpha: 0.85),
|
||||
fontSize: 12,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
if (Platform.isAndroid)
|
||||
TextButton(
|
||||
onPressed: () => FlutterBluePlus.turnOn(),
|
||||
child: Text(context.l10n.scanner_enableBluetooth),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ class SettingsScreen extends StatefulWidget {
|
||||
|
||||
class _SettingsScreenState extends State<SettingsScreen> {
|
||||
bool _showBatteryVoltage = false;
|
||||
bool _deviceInfoExpanded = false;
|
||||
String _appVersion = '';
|
||||
|
||||
@override
|
||||
@@ -74,43 +75,84 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
||||
MeshCoreConnector connector,
|
||||
) {
|
||||
final l10n = context.l10n;
|
||||
|
||||
return Card(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
l10n.settings_deviceInfo,
|
||||
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
_buildInfoRow(l10n.settings_infoName, connector.deviceDisplayName),
|
||||
_buildInfoRow(l10n.settings_infoId, connector.deviceIdLabel),
|
||||
_buildInfoRow(
|
||||
l10n.settings_infoStatus,
|
||||
connector.isConnected
|
||||
? l10n.common_connected
|
||||
: l10n.common_disconnected,
|
||||
),
|
||||
_buildBatteryInfoRow(context, connector),
|
||||
if (connector.selfName != null)
|
||||
_buildInfoRow(l10n.settings_nodeName, connector.selfName!),
|
||||
if (connector.selfPublicKey != null)
|
||||
_buildInfoRow(
|
||||
l10n.settings_infoPublicKey,
|
||||
'${pubKeyToHex(connector.selfPublicKey!).substring(0, 16)}...',
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
InkWell(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
onTap: () {
|
||||
setState(() {
|
||||
_deviceInfoExpanded = !_deviceInfoExpanded;
|
||||
});
|
||||
},
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.fromLTRB(16, 16, 16, 16),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Text(
|
||||
l10n.settings_deviceInfo,
|
||||
style: const TextStyle(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
),
|
||||
AnimatedRotation(
|
||||
turns: _deviceInfoExpanded ? 0.5 : 0,
|
||||
duration: const Duration(milliseconds: 200),
|
||||
child: const Icon(Icons.expand_more),
|
||||
),
|
||||
],
|
||||
),
|
||||
_buildInfoRow(
|
||||
l10n.settings_infoContactsCount,
|
||||
'${connector.contacts.length}',
|
||||
),
|
||||
_buildInfoRow(
|
||||
l10n.settings_infoChannelCount,
|
||||
'${connector.channels.length}',
|
||||
),
|
||||
|
||||
AnimatedCrossFade(
|
||||
firstChild: const SizedBox.shrink(),
|
||||
secondChild: Padding(
|
||||
padding: const EdgeInsets.fromLTRB(16, 0, 16, 16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_buildInfoRow(
|
||||
l10n.settings_infoName,
|
||||
connector.deviceDisplayName,
|
||||
),
|
||||
_buildInfoRow(l10n.settings_infoId, connector.deviceIdLabel),
|
||||
_buildInfoRow(
|
||||
l10n.settings_infoStatus,
|
||||
connector.isConnected
|
||||
? l10n.common_connected
|
||||
: l10n.common_disconnected,
|
||||
),
|
||||
_buildBatteryInfoRow(context, connector),
|
||||
if (connector.selfName != null)
|
||||
_buildInfoRow(l10n.settings_nodeName, connector.selfName!),
|
||||
if (connector.selfPublicKey != null)
|
||||
_buildInfoRow(
|
||||
l10n.settings_infoPublicKey,
|
||||
'${pubKeyToHex(connector.selfPublicKey!).substring(0, 16)}...',
|
||||
),
|
||||
_buildInfoRow(
|
||||
l10n.settings_infoContactsCount,
|
||||
'${connector.contacts.length}',
|
||||
),
|
||||
_buildInfoRow(
|
||||
l10n.settings_infoChannelCount,
|
||||
'${connector.channels.length}',
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
crossFadeState: _deviceInfoExpanded
|
||||
? CrossFadeState.showSecond
|
||||
: CrossFadeState.showFirst,
|
||||
duration: const Duration(milliseconds: 200),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -355,22 +397,33 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
||||
Color? valueColor,
|
||||
VoidCallback? onTap,
|
||||
}) {
|
||||
final theme = Theme.of(context);
|
||||
|
||||
final row = Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 4),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
padding: const EdgeInsets.symmetric(vertical: 10),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
if (leading != null) ...[leading, const SizedBox(width: 8)],
|
||||
Text(label, style: TextStyle(color: Colors.grey[600])),
|
||||
Expanded(
|
||||
child: Text(
|
||||
label,
|
||||
style: theme.textTheme.bodySmall?.copyWith(
|
||||
color: theme.colorScheme.onSurfaceVariant,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Flexible(
|
||||
child: Text(
|
||||
value,
|
||||
style: TextStyle(fontWeight: FontWeight.w500, color: valueColor),
|
||||
overflow: TextOverflow.ellipsis,
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
value,
|
||||
style: theme.textTheme.bodyLarge?.copyWith(
|
||||
color: valueColor,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -379,11 +432,12 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
||||
|
||||
if (onTap != null) {
|
||||
return InkWell(
|
||||
borderRadius: BorderRadius.circular(6),
|
||||
onTap: onTap,
|
||||
borderRadius: BorderRadius.circular(4),
|
||||
child: row,
|
||||
);
|
||||
}
|
||||
|
||||
return row;
|
||||
}
|
||||
|
||||
@@ -688,7 +742,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
||||
);
|
||||
}
|
||||
|
||||
_gpxExport(
|
||||
Future<void> _gpxExport(
|
||||
GpxExport exporter,
|
||||
String name,
|
||||
String description,
|
||||
@@ -728,7 +782,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
||||
}
|
||||
}
|
||||
|
||||
_buildExportCard(MeshCoreConnector connector) {
|
||||
Widget _buildExportCard(MeshCoreConnector connector) {
|
||||
final l10n = context.l10n;
|
||||
return Card(
|
||||
child: Column(
|
||||
@@ -808,6 +862,7 @@ class _RadioSettingsDialogState extends State<_RadioSettingsDialog> {
|
||||
LoRaSpreadingFactor _spreadingFactor = LoRaSpreadingFactor.sf7;
|
||||
LoRaCodingRate _codingRate = LoRaCodingRate.cr4_5;
|
||||
final _txPowerController = TextEditingController(text: '20');
|
||||
bool _clientRepeat = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -857,6 +912,8 @@ class _RadioSettingsDialogState extends State<_RadioSettingsDialog> {
|
||||
if (widget.connector.currentTxPower != null) {
|
||||
_txPowerController.text = widget.connector.currentTxPower.toString();
|
||||
}
|
||||
|
||||
_clientRepeat = widget.connector.clientRepeat ?? false;
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -906,9 +963,29 @@ class _RadioSettingsDialogState extends State<_RadioSettingsDialog> {
|
||||
widget.connector.currentCr,
|
||||
);
|
||||
|
||||
// if the client repeat isnt null then we know its supported
|
||||
//otherwise we leave it out of the frame to avoid accidentally enabling
|
||||
final knownRepeat = widget.connector.clientRepeat != null;
|
||||
|
||||
if (knownRepeat) {
|
||||
const validRepeatFreqsKHz = {433000, 869000, 918000};
|
||||
if (_clientRepeat && !validRepeatFreqsKHz.contains(freqHz)) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text(l10n.settings_clientRepeatFreqWarning)),
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
await widget.connector.sendFrame(
|
||||
buildSetRadioParamsFrame(freqHz, bwHz, sf, cr),
|
||||
buildSetRadioParamsFrame(
|
||||
freqHz,
|
||||
bwHz,
|
||||
sf,
|
||||
cr,
|
||||
clientRepeat: knownRepeat ? _clientRepeat : null,
|
||||
),
|
||||
);
|
||||
await widget.connector.sendFrame(buildSetRadioTxPowerFrame(txPower));
|
||||
await widget.connector.refreshDeviceInfo();
|
||||
@@ -947,37 +1024,25 @@ class _RadioSettingsDialogState extends State<_RadioSettingsDialog> {
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
l10n.settings_presets,
|
||||
style: const TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Wrap(
|
||||
spacing: 8,
|
||||
children: [
|
||||
_PresetChip(
|
||||
label: l10n.settings_preset915Mhz,
|
||||
onTap: () => _applyPreset(RadioSettings.preset915MHz),
|
||||
),
|
||||
_PresetChip(
|
||||
label: l10n.settings_preset868Mhz,
|
||||
onTap: () => _applyPreset(RadioSettings.preset868MHz),
|
||||
),
|
||||
_PresetChip(
|
||||
label: l10n.settings_preset433Mhz,
|
||||
onTap: () => _applyPreset(RadioSettings.preset433MHz),
|
||||
),
|
||||
_PresetChip(
|
||||
label: l10n.settings_longRange,
|
||||
onTap: () => _applyPreset(RadioSettings.presetLongRange),
|
||||
),
|
||||
_PresetChip(
|
||||
label: l10n.settings_fastSpeed,
|
||||
onTap: () => _applyPreset(RadioSettings.presetFastSpeed),
|
||||
),
|
||||
DropdownButtonFormField<int>(
|
||||
decoration: InputDecoration(
|
||||
labelText: l10n.settings_presets,
|
||||
border: const OutlineInputBorder(),
|
||||
),
|
||||
items: [
|
||||
for (var i = 0; i < RadioSettings.presets.length; i++)
|
||||
DropdownMenuItem(
|
||||
value: i,
|
||||
child: Text(RadioSettings.presets[i].$1),
|
||||
),
|
||||
],
|
||||
onChanged: (index) {
|
||||
if (index != null) {
|
||||
_applyPreset(RadioSettings.presets[index].$2);
|
||||
}
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
const SizedBox(height: 16),
|
||||
TextField(
|
||||
controller: _frequencyController,
|
||||
decoration: InputDecoration(
|
||||
@@ -1049,6 +1114,16 @@ class _RadioSettingsDialogState extends State<_RadioSettingsDialog> {
|
||||
),
|
||||
keyboardType: TextInputType.number,
|
||||
),
|
||||
if (widget.connector.clientRepeat != null) ...[
|
||||
const SizedBox(height: 16),
|
||||
SwitchListTile(
|
||||
title: Text(l10n.settings_clientRepeat),
|
||||
subtitle: Text(l10n.settings_clientRepeatSubtitle),
|
||||
value: _clientRepeat,
|
||||
onChanged: (value) => setState(() => _clientRepeat = value),
|
||||
contentPadding: EdgeInsets.zero,
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -1062,15 +1137,3 @@ class _RadioSettingsDialogState extends State<_RadioSettingsDialog> {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _PresetChip extends StatelessWidget {
|
||||
final String label;
|
||||
final VoidCallback onTap;
|
||||
|
||||
const _PresetChip({required this.label, required this.onTap});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ActionChip(label: Text(label), onPressed: onTap);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import 'dart:isolate';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter_foreground_task/flutter_foreground_task.dart';
|
||||
@@ -15,20 +14,14 @@ class BackgroundService {
|
||||
channelDescription: 'Keeps MeshCore running in the background.',
|
||||
channelImportance: NotificationChannelImportance.LOW,
|
||||
priority: NotificationPriority.LOW,
|
||||
iconData: const NotificationIconData(
|
||||
resType: ResourceType.mipmap,
|
||||
resPrefix: ResourcePrefix.ic,
|
||||
name: 'launcher',
|
||||
),
|
||||
),
|
||||
iosNotificationOptions: const IOSNotificationOptions(
|
||||
showNotification: false,
|
||||
playSound: false,
|
||||
),
|
||||
foregroundTaskOptions: const ForegroundTaskOptions(
|
||||
interval: 5000,
|
||||
foregroundTaskOptions: ForegroundTaskOptions(
|
||||
eventAction: ForegroundTaskEventAction.repeat(5000),
|
||||
autoRunOnBoot: false,
|
||||
allowWakeLock: true,
|
||||
allowWifiLock: false,
|
||||
),
|
||||
);
|
||||
@@ -64,13 +57,13 @@ void startCallback() {
|
||||
|
||||
class _MeshCoreTaskHandler extends TaskHandler {
|
||||
@override
|
||||
void onStart(DateTime timestamp, SendPort? sendPort) {}
|
||||
Future<void> onStart(DateTime timestamp, TaskStarter starter) async {}
|
||||
|
||||
@override
|
||||
void onRepeatEvent(DateTime timestamp, SendPort? sendPort) {}
|
||||
void onRepeatEvent(DateTime timestamp) {}
|
||||
|
||||
@override
|
||||
void onDestroy(DateTime timestamp, SendPort? sendPort) {}
|
||||
Future<void> onDestroy(DateTime timestamp, bool isTimeout) async {}
|
||||
|
||||
@override
|
||||
void onNotificationButtonPressed(String id) {}
|
||||
|
||||
@@ -67,7 +67,7 @@ class NotificationService {
|
||||
|
||||
try {
|
||||
await _notifications.initialize(
|
||||
initSettings,
|
||||
settings: initSettings,
|
||||
onDidReceiveNotificationResponse: _onNotificationTapped,
|
||||
);
|
||||
_isInitialized = true;
|
||||
@@ -149,10 +149,10 @@ class NotificationService {
|
||||
);
|
||||
|
||||
await _notifications.show(
|
||||
contactId?.hashCode ?? 0,
|
||||
contactName,
|
||||
message,
|
||||
notificationDetails,
|
||||
id: contactId?.hashCode ?? 0,
|
||||
title: contactName,
|
||||
body: message,
|
||||
notificationDetails: notificationDetails,
|
||||
payload: 'message:$contactId',
|
||||
);
|
||||
}
|
||||
@@ -194,10 +194,10 @@ class NotificationService {
|
||||
);
|
||||
|
||||
await _notifications.show(
|
||||
contactId?.hashCode ?? DateTime.now().millisecondsSinceEpoch,
|
||||
_l10n.notification_newTypeDiscovered(contactType),
|
||||
contactName,
|
||||
notificationDetails,
|
||||
id: contactId?.hashCode ?? DateTime.now().millisecondsSinceEpoch,
|
||||
title: _l10n.notification_newTypeDiscovered(contactType),
|
||||
body: contactName,
|
||||
notificationDetails: notificationDetails,
|
||||
payload: 'advert:$contactId',
|
||||
);
|
||||
}
|
||||
@@ -248,10 +248,10 @@ class NotificationService {
|
||||
: preview;
|
||||
|
||||
await _notifications.show(
|
||||
channelIndex?.hashCode ?? DateTime.now().millisecondsSinceEpoch,
|
||||
channelName,
|
||||
body,
|
||||
notificationDetails,
|
||||
id: channelIndex?.hashCode ?? DateTime.now().millisecondsSinceEpoch,
|
||||
title: channelName,
|
||||
body: body,
|
||||
notificationDetails: notificationDetails,
|
||||
payload: 'channel:$channelIndex',
|
||||
);
|
||||
}
|
||||
@@ -285,7 +285,7 @@ class NotificationService {
|
||||
}
|
||||
|
||||
Future<void> cancel(int id) async {
|
||||
await _notifications.cancel(id);
|
||||
await _notifications.cancel(id: id);
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────
|
||||
@@ -469,10 +469,10 @@ class NotificationService {
|
||||
const notificationDetails = NotificationDetails(android: androidDetails);
|
||||
|
||||
await _notifications.show(
|
||||
'batch_summary'.hashCode,
|
||||
_l10n.notification_activityTitle,
|
||||
parts.join(', '),
|
||||
notificationDetails,
|
||||
id: 'batch_summary'.hashCode,
|
||||
title: _l10n.notification_activityTitle,
|
||||
body: parts.join(', '),
|
||||
notificationDetails: notificationDetails,
|
||||
payload: 'batch',
|
||||
);
|
||||
}
|
||||
|
||||
@@ -156,7 +156,7 @@ class _QrScannerWidgetState extends State<QrScannerWidget>
|
||||
MobileScanner(
|
||||
controller: _controller,
|
||||
onDetect: _handleDetection,
|
||||
errorBuilder: (context, error, child) {
|
||||
errorBuilder: (context, error) {
|
||||
return _buildErrorWidget(context, error);
|
||||
},
|
||||
),
|
||||
|
||||
+58
-58
@@ -153,14 +153,22 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
dart_polylabel2:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dart_polylabel2
|
||||
sha256: "7eeab15ce72894e4bdba6a8765712231fc81be0bd95247de4ad9966abc57adc6"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.0"
|
||||
dbus:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dbus
|
||||
sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c"
|
||||
sha256: d0c98dcd4f5169878b6cf8f6e0a52403a9dff371a3e2f019697accbf6f44a270
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.11"
|
||||
version: "0.7.12"
|
||||
fake_async:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -173,10 +181,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: ffi
|
||||
sha256: d07d37192dbf97461359c1518788f203b0c9102cfd2c35a716b823741219542c
|
||||
sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.5"
|
||||
version: "2.2.0"
|
||||
file:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -202,10 +210,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_blue_plus
|
||||
sha256: "399b3dbc15562ef59749f04e43a99ccbb91540022380d5f269aff3c2787534e4"
|
||||
sha256: "88a65ead7dea67ddcc03e6ca846163c6b6cc09a2dcebdb8bb601fcd654ea9382"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
version: "2.1.1"
|
||||
flutter_blue_plus_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -218,10 +226,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_blue_plus_darwin
|
||||
sha256: d160a8128e3a016fa58dd65ab6dac05cbc73e0fa799a1f24211d041641ed63ba
|
||||
sha256: "52b155d868e17c1c8ad85520a0912d447d92aedccb5a5e234d3edc98ebd1307a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "8.1.0"
|
||||
version: "8.1.1"
|
||||
flutter_blue_plus_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -250,10 +258,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_blue_plus_winrt
|
||||
sha256: "34be2d8e23d5881b46accebb0e71025f7d52869d72ea98b5082c20764e06aa80"
|
||||
sha256: ed894f0ab341f4cece8fa33edc381d46424a7c5bfd0e841d933d0f8c34c86521
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.0.16"
|
||||
version: "0.0.18"
|
||||
flutter_cache_manager:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -266,18 +274,18 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_foreground_task
|
||||
sha256: "6cf10a27f5e344cd2ecad0752d3a5f4ec32846d82fda8753b3fe2480ebb832a3"
|
||||
sha256: "48ea45056155a99fb30b15f14f4039a044d925bc85f381ed0b2d3b00a60b99de"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.5.0"
|
||||
version: "9.2.0"
|
||||
flutter_launcher_icons:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: flutter_launcher_icons
|
||||
sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea"
|
||||
sha256: "10f13781741a2e3972126fae08393d3c4e01fa4cd7473326b94b72cf594195e7"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.13.1"
|
||||
version: "0.14.4"
|
||||
flutter_linkify:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -290,34 +298,42 @@ packages:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: flutter_lints
|
||||
sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1"
|
||||
sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.0.0"
|
||||
version: "6.0.0"
|
||||
flutter_local_notifications:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_local_notifications
|
||||
sha256: ef41ae901e7529e52934feba19ed82827b11baa67336829564aeab3129460610
|
||||
sha256: "2b50e938a275e1ad77352d6a25e25770f4130baa61eaf02de7a9a884680954ad"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "18.0.1"
|
||||
version: "20.1.0"
|
||||
flutter_local_notifications_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_local_notifications_linux
|
||||
sha256: "8f685642876742c941b29c32030f6f4f6dacd0e4eaecb3efbb187d6a3812ca01"
|
||||
sha256: dce0116868cedd2cdf768af0365fc37ff1cbef7c02c4f51d0587482e625868d0
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.0.0"
|
||||
version: "7.0.0"
|
||||
flutter_local_notifications_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_local_notifications_platform_interface
|
||||
sha256: "6c5b83c86bf819cdb177a9247a3722067dd8cc6313827ce7c77a4b238a26fd52"
|
||||
sha256: "23de31678a48c084169d7ae95866df9de5c9d2a44be3e5915a2ff067aeeba899"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "8.0.0"
|
||||
version: "10.0.0"
|
||||
flutter_local_notifications_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_local_notifications_windows
|
||||
sha256: e97a1a3016512437d9c0b12fae7d1491c3c7b9aa7f03a69b974308840656b02a
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
flutter_localizations:
|
||||
dependency: "direct main"
|
||||
description: flutter
|
||||
@@ -327,10 +343,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_map
|
||||
sha256: "2ecb34619a4be19df6f40c2f8dce1591675b4eff7a6857bd8f533706977385da"
|
||||
sha256: "391e7dc95cc3f5190748210a69d4cfeb5d8f84dcdfa9c3235d0a9d7742ccb3f8"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.0.2"
|
||||
version: "8.2.2"
|
||||
flutter_test:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
@@ -361,10 +377,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: hooks
|
||||
sha256: "5d309c86e7ce34cd8e37aa71cb30cb652d3829b900ab145e4d9da564b31d59f7"
|
||||
sha256: "7a08a0d684cb3b8fb604b78455d5d352f502b68079f7b80b831c62220ab0a4f6"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.0"
|
||||
version: "1.0.1"
|
||||
http:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -397,14 +413,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.20.2"
|
||||
js:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: js
|
||||
sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.2"
|
||||
json_annotation:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -457,10 +465,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: lints
|
||||
sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7
|
||||
sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.1.1"
|
||||
version: "6.1.0"
|
||||
lists:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -529,10 +537,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: mobile_scanner
|
||||
sha256: "0b466a0a8a211b366c2e87f3345715faef9b6011c7147556ad22f37de6ba3173"
|
||||
sha256: c6184bf2913dd66be244108c9c27ca04b01caf726321c44b0e7a7a1e32d41044
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.0.11"
|
||||
version: "7.1.4"
|
||||
native_toolchain_c:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -553,10 +561,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: objective_c
|
||||
sha256: "983c7fa1501f6dcc0cb7af4e42072e9993cb28d73604d25ebf4dab08165d997e"
|
||||
sha256: "100a1c87616ab6ed41ec263b083c0ef3261ee6cd1dc3b0f35f8ddfa4f996fe52"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "9.2.5"
|
||||
version: "9.3.0"
|
||||
octo_image:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -569,10 +577,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: package_info_plus
|
||||
sha256: "16eee997588c60225bda0488b6dcfac69280a6b7a3cf02c741895dd370a02968"
|
||||
sha256: f69da0d3189a4b4ceaeb1a3defb0f329b3b352517f52bed4290f83d4f06bc08d
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "8.3.1"
|
||||
version: "9.0.0"
|
||||
package_info_plus_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -665,18 +673,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: pointycastle
|
||||
sha256: "4be0097fcf3fd3e8449e53730c631200ebc7b88016acecab2b0da2f0149222fe"
|
||||
sha256: "92aa3841d083cc4b0f4709b5c74fd6409a3e6ba833ffc7dc6a8fee096366acf5"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.9.1"
|
||||
polylabel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: polylabel
|
||||
sha256: "41b9099afb2aa6c1730bdd8a0fab1400d287694ec7615dd8516935fa3144214b"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.1"
|
||||
version: "4.0.0"
|
||||
posix:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -822,10 +822,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: source_span
|
||||
sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
|
||||
sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.10.1"
|
||||
version: "1.10.2"
|
||||
sqflite:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -958,10 +958,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_ios
|
||||
sha256: cfde38aa257dae62ffe79c87fab20165dfdf6988c1d31b58ebf59b9106062aad
|
||||
sha256: "580fe5dfb51671ae38191d316e027f6b76272b026370708c2d898799750a02b0"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.3.6"
|
||||
version: "6.4.1"
|
||||
url_launcher_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -1030,10 +1030,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: wakelock_plus
|
||||
sha256: "61713aa82b7f85c21c9f4cd0a148abd75f38a74ec645fcb1e446f882c82fd09b"
|
||||
sha256: "9296d40c9adbedaba95d1e704f4e0b434be446e2792948d0e4aa977048104228"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.3"
|
||||
version: "1.4.0"
|
||||
wakelock_plus_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
||||
+9
-9
@@ -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: 5.0.0+6
|
||||
version: 6.0.0+7
|
||||
|
||||
environment:
|
||||
sdk: ^3.9.2
|
||||
@@ -41,19 +41,19 @@ dependencies:
|
||||
provider: ^6.1.5+1
|
||||
shared_preferences: ^2.2.2
|
||||
uuid: ^4.3.3
|
||||
flutter_map: ^7.0.2
|
||||
flutter_map: ^8.2.2
|
||||
latlong2: ^0.9.1
|
||||
flutter_local_notifications: ^18.0.1
|
||||
flutter_local_notifications: ^20.1.0
|
||||
crypto: ^3.0.3
|
||||
pointycastle: ^3.7.4
|
||||
pointycastle: ^4.0.0
|
||||
http: ^1.2.0
|
||||
cached_network_image: ^3.4.1
|
||||
flutter_cache_manager: ^3.4.1
|
||||
flutter_foreground_task: ^6.1.2
|
||||
flutter_foreground_task: ^9.2.0
|
||||
wakelock_plus: ^1.2.8
|
||||
characters: ^1.4.0
|
||||
package_info_plus: ^8.0.0
|
||||
mobile_scanner: ^6.0.0 # QR/barcode scanning
|
||||
package_info_plus: ^9.0.0
|
||||
mobile_scanner: ^7.1.4 # QR/barcode scanning
|
||||
qr_flutter: ^4.1.0 # QR code generation
|
||||
url_launcher: ^6.3.0 # Launch URLs in system browser
|
||||
flutter_linkify: ^6.0.0 # Auto-detect and linkify URLs in text
|
||||
@@ -70,8 +70,8 @@ dev_dependencies:
|
||||
# activated in the `analysis_options.yaml` file located at the root of your
|
||||
# package. See that file for information about deactivating specific lint
|
||||
# rules and activating additional ones.
|
||||
flutter_lints: ^5.0.0
|
||||
flutter_launcher_icons: ^0.13.1
|
||||
flutter_lints: ^6.0.0
|
||||
flutter_launcher_icons: ^0.14.4
|
||||
|
||||
# For information on the generic Dart part of this file, see the
|
||||
# following page: https://dart.dev/tools/pub/pubspec
|
||||
|
||||
+1
-127
@@ -1,127 +1 @@
|
||||
{
|
||||
"bg": [
|
||||
"notification_activityTitle",
|
||||
"notification_messagesCount",
|
||||
"notification_channelMessagesCount",
|
||||
"notification_newNodesCount",
|
||||
"notification_newTypeDiscovered",
|
||||
"notification_receivedNewMessage"
|
||||
],
|
||||
|
||||
"de": [
|
||||
"notification_activityTitle",
|
||||
"notification_messagesCount",
|
||||
"notification_channelMessagesCount",
|
||||
"notification_newNodesCount",
|
||||
"notification_newTypeDiscovered",
|
||||
"notification_receivedNewMessage"
|
||||
],
|
||||
|
||||
"es": [
|
||||
"notification_activityTitle",
|
||||
"notification_messagesCount",
|
||||
"notification_channelMessagesCount",
|
||||
"notification_newNodesCount",
|
||||
"notification_newTypeDiscovered",
|
||||
"notification_receivedNewMessage"
|
||||
],
|
||||
|
||||
"fr": [
|
||||
"notification_activityTitle",
|
||||
"notification_messagesCount",
|
||||
"notification_channelMessagesCount",
|
||||
"notification_newNodesCount",
|
||||
"notification_newTypeDiscovered",
|
||||
"notification_receivedNewMessage"
|
||||
],
|
||||
|
||||
"it": [
|
||||
"notification_activityTitle",
|
||||
"notification_messagesCount",
|
||||
"notification_channelMessagesCount",
|
||||
"notification_newNodesCount",
|
||||
"notification_newTypeDiscovered",
|
||||
"notification_receivedNewMessage"
|
||||
],
|
||||
|
||||
"nl": [
|
||||
"notification_activityTitle",
|
||||
"notification_messagesCount",
|
||||
"notification_channelMessagesCount",
|
||||
"notification_newNodesCount",
|
||||
"notification_newTypeDiscovered",
|
||||
"notification_receivedNewMessage"
|
||||
],
|
||||
|
||||
"pl": [
|
||||
"notification_activityTitle",
|
||||
"notification_messagesCount",
|
||||
"notification_channelMessagesCount",
|
||||
"notification_newNodesCount",
|
||||
"notification_newTypeDiscovered",
|
||||
"notification_receivedNewMessage"
|
||||
],
|
||||
|
||||
"pt": [
|
||||
"notification_activityTitle",
|
||||
"notification_messagesCount",
|
||||
"notification_channelMessagesCount",
|
||||
"notification_newNodesCount",
|
||||
"notification_newTypeDiscovered",
|
||||
"notification_receivedNewMessage"
|
||||
],
|
||||
|
||||
"ru": [
|
||||
"notification_activityTitle",
|
||||
"notification_messagesCount",
|
||||
"notification_channelMessagesCount",
|
||||
"notification_newNodesCount",
|
||||
"notification_newTypeDiscovered",
|
||||
"notification_receivedNewMessage"
|
||||
],
|
||||
|
||||
"sk": [
|
||||
"notification_activityTitle",
|
||||
"notification_messagesCount",
|
||||
"notification_channelMessagesCount",
|
||||
"notification_newNodesCount",
|
||||
"notification_newTypeDiscovered",
|
||||
"notification_receivedNewMessage"
|
||||
],
|
||||
|
||||
"sl": [
|
||||
"notification_activityTitle",
|
||||
"notification_messagesCount",
|
||||
"notification_channelMessagesCount",
|
||||
"notification_newNodesCount",
|
||||
"notification_newTypeDiscovered",
|
||||
"notification_receivedNewMessage"
|
||||
],
|
||||
|
||||
"sv": [
|
||||
"notification_activityTitle",
|
||||
"notification_messagesCount",
|
||||
"notification_channelMessagesCount",
|
||||
"notification_newNodesCount",
|
||||
"notification_newTypeDiscovered",
|
||||
"notification_receivedNewMessage"
|
||||
],
|
||||
|
||||
"uk": [
|
||||
"notification_activityTitle",
|
||||
"notification_messagesCount",
|
||||
"notification_channelMessagesCount",
|
||||
"notification_newNodesCount",
|
||||
"notification_newTypeDiscovered",
|
||||
"notification_receivedNewMessage"
|
||||
],
|
||||
|
||||
"zh": [
|
||||
"notification_activityTitle",
|
||||
"notification_messagesCount",
|
||||
"notification_channelMessagesCount",
|
||||
"notification_newNodesCount",
|
||||
"notification_newTypeDiscovered",
|
||||
"notification_receivedNewMessage"
|
||||
]
|
||||
}
|
||||
{}
|
||||
@@ -9,6 +9,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
||||
)
|
||||
|
||||
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
||||
flutter_local_notifications_windows
|
||||
)
|
||||
|
||||
set(PLUGIN_BUNDLED_LIBRARIES)
|
||||
|
||||
Reference in New Issue
Block a user