mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-06-14 22:55:12 +10:00
synced with last dev, added profiles for cyr2lat replacement dictionaries
This commit is contained in:
@@ -285,10 +285,12 @@ class MeshCoreConnector extends ChangeNotifier {
|
||||
List<Channel> _cachedChannels = [];
|
||||
final Map<int, bool> _channelSmazEnabled = {};
|
||||
final Map<int, bool> _channelCyr2LatEnabled = {};
|
||||
final Map<int, String?> _channelCyr2LatProfileId = {};
|
||||
bool _lastSentWasCliCommand =
|
||||
false; // Track if last sent message was a CLI command
|
||||
final Map<String, bool> _contactSmazEnabled = {};
|
||||
final Map<String, bool> _contactCyr2LatEnabled = {};
|
||||
final Map<String, String?> _contactCyr2LatProfileId = {};
|
||||
final Set<String> _knownContactKeys = {};
|
||||
final Map<String, int> _contactUnreadCount = {};
|
||||
final Map<String, RepeaterBatterySnapshot> _repeaterBatterySnapshots = {};
|
||||
@@ -611,10 +613,12 @@ class MeshCoreConnector extends ChangeNotifier {
|
||||
}
|
||||
|
||||
bool isChannelCyr2LatEnabled(int channelIndex) {
|
||||
_ensureChannelCyr2LatSettingLoaded(channelIndex);
|
||||
return _channelCyr2LatEnabled[channelIndex] ?? false;
|
||||
}
|
||||
|
||||
bool isContactCyr2LatEnabled(String contactKeyHex) {
|
||||
_ensureContactCyr2LatSettingLoaded(contactKeyHex);
|
||||
return _contactCyr2LatEnabled[contactKeyHex] ?? false;
|
||||
}
|
||||
|
||||
@@ -4483,6 +4487,63 @@ class MeshCoreConnector extends ChangeNotifier {
|
||||
});
|
||||
}
|
||||
|
||||
void _ensureContactCyr2LatProfileLoaded(String contactKeyHex) {
|
||||
if (_contactCyr2LatProfileId.containsKey(contactKeyHex)) return;
|
||||
_contactSettingsStore.loadCyr2LatProfileId(contactKeyHex).then((profileId) {
|
||||
if (_contactCyr2LatProfileId[contactKeyHex] == profileId) return;
|
||||
_contactCyr2LatProfileId[contactKeyHex] = profileId;
|
||||
notifyListeners();
|
||||
});
|
||||
}
|
||||
|
||||
void _ensureChannelCyr2LatSettingLoaded(int channelIndex) {
|
||||
if (_channelCyr2LatEnabled.containsKey(channelIndex)) return;
|
||||
_channelSettingsStore.loadCyr2LatEnabled(channelIndex).then((enabled) {
|
||||
if (_channelCyr2LatEnabled[channelIndex] == enabled) return;
|
||||
_channelCyr2LatEnabled[channelIndex] = enabled;
|
||||
notifyListeners();
|
||||
});
|
||||
}
|
||||
|
||||
void _ensureChannelCyr2LatProfileLoaded(int channelIndex) {
|
||||
if (_channelCyr2LatProfileId.containsKey(channelIndex)) return;
|
||||
_channelSettingsStore.loadCyr2LatProfileId(channelIndex).then((profileId) {
|
||||
if (_channelCyr2LatProfileId[channelIndex] == profileId) return;
|
||||
_channelCyr2LatProfileId[channelIndex] = profileId;
|
||||
notifyListeners();
|
||||
});
|
||||
}
|
||||
|
||||
String? getChannelCyr2LatProfileId(int channelIndex) {
|
||||
_ensureChannelCyr2LatProfileLoaded(channelIndex);
|
||||
return _channelCyr2LatProfileId[channelIndex];
|
||||
}
|
||||
|
||||
Future<void> setChannelCyr2LatProfileId(
|
||||
int channelIndex,
|
||||
String? profileId,
|
||||
) async {
|
||||
if (_channelCyr2LatProfileId[channelIndex] == profileId) return;
|
||||
_channelCyr2LatProfileId[channelIndex] = profileId;
|
||||
await _channelSettingsStore.saveCyr2LatProfileId(channelIndex, profileId);
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
String? getContactCyr2LatProfileId(String contactKeyHex) {
|
||||
_ensureContactCyr2LatProfileLoaded(contactKeyHex);
|
||||
return _contactCyr2LatProfileId[contactKeyHex];
|
||||
}
|
||||
|
||||
Future<void> setContactCyr2LatProfileId(
|
||||
String contactKeyHex,
|
||||
String? profileId,
|
||||
) async {
|
||||
if (_contactCyr2LatProfileId[contactKeyHex] == profileId) return;
|
||||
_contactCyr2LatProfileId[contactKeyHex] = profileId;
|
||||
await _contactSettingsStore.saveCyr2LatProfileId(contactKeyHex, profileId);
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
/// Prepares contact outbound text by applying SMAZ encoding if enabled.
|
||||
/// This should be used to transform text before computing ACK hashes.
|
||||
String prepareContactOutboundText(Contact contact, String text) {
|
||||
@@ -4495,6 +4556,20 @@ class MeshCoreConnector extends ChangeNotifier {
|
||||
if (isContactSmazEnabled(contact.publicKeyHex)) {
|
||||
return Smaz.encodeIfSmaller(text);
|
||||
} else if (isContactCyr2LatEnabled(contact.publicKeyHex)) {
|
||||
final profileId = getContactCyr2LatProfileId(contact.publicKeyHex);
|
||||
final profile = profileId != null && _appSettingsService != null
|
||||
? _appSettingsService!.getCyr2LatProfileById(profileId)
|
||||
: null;
|
||||
if (profile != null) {
|
||||
Cyr2Lat.setCharMap(profile.charMap);
|
||||
} else {
|
||||
// Use global profile
|
||||
final globalProfile = _appSettingsService
|
||||
?.getSelectedCyr2LatProfile();
|
||||
if (globalProfile != null) {
|
||||
Cyr2Lat.setCharMap(globalProfile.charMap);
|
||||
}
|
||||
}
|
||||
return Cyr2Lat.encode(text);
|
||||
}
|
||||
}
|
||||
@@ -4509,6 +4584,20 @@ class MeshCoreConnector extends ChangeNotifier {
|
||||
if (isChannelSmazEnabled(channelIndex)) {
|
||||
return Smaz.encodeIfSmaller(text);
|
||||
} else if (isChannelCyr2LatEnabled(channelIndex)) {
|
||||
final profileId = getChannelCyr2LatProfileId(channelIndex);
|
||||
final profile = profileId != null && _appSettingsService != null
|
||||
? _appSettingsService!.getCyr2LatProfileById(profileId)
|
||||
: null;
|
||||
if (profile != null) {
|
||||
Cyr2Lat.setCharMap(profile.charMap);
|
||||
} else {
|
||||
// Use global profile
|
||||
final globalProfile = _appSettingsService
|
||||
?.getSelectedCyr2LatProfile();
|
||||
if (globalProfile != null) {
|
||||
Cyr2Lat.setCharMap(globalProfile.charMap);
|
||||
}
|
||||
}
|
||||
return Cyr2Lat.encode(text);
|
||||
}
|
||||
}
|
||||
|
||||
+9
-3
@@ -394,10 +394,16 @@
|
||||
"channels_cyr2latSettingsSubheading": "Списък със замествания",
|
||||
"channels_cyr2latSettingsDscr": "Редактиране на JSON конфигурацията за заместване на символи",
|
||||
"channels_cyr2latSettingsDialogHint": "JSON карта за замествания",
|
||||
"channels_cyr2latSettingsDialogSuccess": "Списъкът със замествания е актуализиран",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "Неправилен JSON: {error}",
|
||||
"channels_cyr2latSettingsDialogReset": "Възстановяване на първоначалните настройки",
|
||||
"channels_cyr2latSettingsDialogResetted": "Настройките за заместване на Cyr2Lat са възстановени към първоначалните",
|
||||
"settings_cyr2latProfileAdd": "Добавяне на профил Cyr2Lat",
|
||||
"settings_cyr2latProfileName": "Име на профила",
|
||||
"settings_cyr2latProfileNameEmpty": "Името на профила не може да бъде празно",
|
||||
"settings_cyr2latProfileAdded": "Профилът е добавен успешно",
|
||||
"settings_cyr2latProfileUpdated": "Профилът е актуализиран успешно",
|
||||
"settings_cyr2latProfileEdit": "Редактиране на Cyr2Lat профил",
|
||||
"settings_cyr2latProfileDelete": "Изтриване на профил Cyr2Lat",
|
||||
"settings_cyr2latProfileDeleted": "Профилът беше изтрит успешно",
|
||||
"settings_cyr2latProfileDeleteDscr": "Сигурен ли сте, че искате да изтриете профила \"{name}\"?",
|
||||
"channels_channelUpdated": "Каналът \"{name}\" е актуализиран",
|
||||
"@channels_channelUpdated": {
|
||||
"placeholders": {
|
||||
|
||||
+9
-3
@@ -394,10 +394,16 @@
|
||||
"channels_cyr2latSettingsSubheading": "Ersetzungsliste",
|
||||
"channels_cyr2latSettingsDscr": "JSON-Konfiguration für die Zeichenersetzung bearbeiten",
|
||||
"channels_cyr2latSettingsDialogHint": "JSON-Ersetzungstabelle",
|
||||
"channels_cyr2latSettingsDialogSuccess": "Ersetzungsliste aktualisiert",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "Ungültiges JSON: {error}",
|
||||
"channels_cyr2latSettingsDialogReset": "Auf Standard zurücksetzen",
|
||||
"channels_cyr2latSettingsDialogResetted": "Die Cyr2Lat-Ersetzungseinstellungen wurden auf die Standardeinstellungen zurückgesetzt",
|
||||
"settings_cyr2latProfileAdd": "Cyr2Lat-Profil hinzufügen",
|
||||
"settings_cyr2latProfileName": "Profilname",
|
||||
"settings_cyr2latProfileNameEmpty": "Der Profilname darf nicht leer sein",
|
||||
"settings_cyr2latProfileAdded": "Profil erfolgreich hinzugefügt",
|
||||
"settings_cyr2latProfileUpdated": "Profil erfolgreich aktualisiert",
|
||||
"settings_cyr2latProfileEdit": "Cyr2Lat-Profil bearbeiten",
|
||||
"settings_cyr2latProfileDelete": "Cyr2Lat-Profil löschen",
|
||||
"settings_cyr2latProfileDeleted": "Profil erfolgreich gelöscht",
|
||||
"settings_cyr2latProfileDeleteDscr": "Möchten Sie das Profil \"{name}\" wirklich löschen?",
|
||||
"channels_channelUpdated": "Kanal \"{name}\" aktualisiert",
|
||||
"@channels_channelUpdated": {
|
||||
"placeholders": {
|
||||
|
||||
+16
-3
@@ -579,15 +579,12 @@
|
||||
"channels_cyr2latSettingsSubheading": "List of replacements",
|
||||
"channels_cyr2latSettingsDscr": "Edit the JSON configuration of character replacement",
|
||||
"channels_cyr2latSettingsDialogHint": "JSON replacement map",
|
||||
"channels_cyr2latSettingsDialogSuccess": "The list of replacements has been updated",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "Invalid JSON: {error}",
|
||||
"@channels_cyr2latSettingsDialogWrongJSON": {
|
||||
"placeholders": {
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"channels_cyr2latSettingsDialogReset": "Reset to default",
|
||||
"channels_cyr2latSettingsDialogResetted": "Cyr2Lat replacement settings reset to default",
|
||||
"channels_channelUpdated": "Channel \"{name}\" updated",
|
||||
"@channels_channelUpdated": {
|
||||
"placeholders": {
|
||||
@@ -596,6 +593,22 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_cyr2latProfileAdd": "Add Cyr2Lat Profile",
|
||||
"settings_cyr2latProfileName": "Profile Name",
|
||||
"settings_cyr2latProfileNameEmpty": "Profile name cannot be empty",
|
||||
"settings_cyr2latProfileAdded": "Profile added successfully",
|
||||
"settings_cyr2latProfileUpdated": "Profile updated successfully",
|
||||
"settings_cyr2latProfileEdit": "Edit Cyr2Lat Profile",
|
||||
"settings_cyr2latProfileDelete": "Delete Cyr2Lat Profile",
|
||||
"settings_cyr2latProfileDeleted": "Profile deleted successfully",
|
||||
"settings_cyr2latProfileDeleteDscr": "Are you sure you want to delete the profile \"{name}\"?",
|
||||
"@settings_cyr2latProfileDeleteDscr": {
|
||||
"placeholders": {
|
||||
"name": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"channels_publicChannelAdded": "Public channel added",
|
||||
"channels_sortBy": "Sort by",
|
||||
"channels_sortManual": "Manual",
|
||||
|
||||
+18
-5
@@ -394,10 +394,16 @@
|
||||
"channels_cyr2latSettingsSubheading": "Lista de sustituciones",
|
||||
"channels_cyr2latSettingsDscr": "Editar la configuración JSON de sustitución de caracteres",
|
||||
"channels_cyr2latSettingsDialogHint": "Mapa JSON de sustituciones",
|
||||
"channels_cyr2latSettingsDialogSuccess": "Lista de sustituciones actualizada",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "JSON incorrecto: {error}",
|
||||
"channels_cyr2latSettingsDialogReset": "Restablecer valores predeterminados",
|
||||
"channels_cyr2latSettingsDialogResetted": "La configuración de sustituciones de Cyr2Lat se ha restablecido a los valores predeterminados",
|
||||
"settings_cyr2latProfileAdd": "Añadir perfil Cyr2Lat",
|
||||
"settings_cyr2latProfileName": "Nombre del perfil",
|
||||
"settings_cyr2latProfileNameEmpty": "El nombre del perfil no puede estar vacío",
|
||||
"settings_cyr2latProfileAdded": "Perfil añadido correctamente",
|
||||
"settings_cyr2latProfileUpdated": "Perfil actualizado correctamente",
|
||||
"settings_cyr2latProfileEdit": "Editar perfil Cyr2Lat",
|
||||
"settings_cyr2latProfileDelete": "Eliminar perfil Cyr2Lat",
|
||||
"settings_cyr2latProfileDeleted": "Perfil eliminado correctamente",
|
||||
"settings_cyr2latProfileDeleteDscr": "¿Está seguro de que desea eliminar el perfil \"{name}\"?",
|
||||
"channels_channelUpdated": "Canal \"{name}\" actualizado",
|
||||
"@channels_channelUpdated": {
|
||||
"placeholders": {
|
||||
@@ -1960,6 +1966,13 @@
|
||||
"contact_teleBaseSubtitle": "Permitir el intercambio de nivel de batería y telemetría básica",
|
||||
"contact_teleEnv": "Entorno de Telemetría",
|
||||
"contact_teleEnvSubtitle": "Permitir el intercambio de datos de sensores de entorno",
|
||||
"@settings_multiAck": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"appSettings_initialRouteWeight": "Peso inicial de la ruta",
|
||||
"appSettings_maxRouteWeight": "Peso máximo permitido para la ruta",
|
||||
"appSettings_initialRouteWeightSubtitle": "Peso inicial para rutas recién descubiertas",
|
||||
@@ -1972,6 +1985,7 @@
|
||||
"appSettings_maxMessageRetriesSubtitle": "Número de intentos de reintento antes de marcar un mensaje como fallido.",
|
||||
"path_routeWeight": "{weight}/{max}",
|
||||
"settings_telemetryModeUpdated": "Modo de telemetría actualizado",
|
||||
"settings_multiAck": "Multi-ACKs: {value}",
|
||||
"map_showOverlaps": "Superposiciones de tecla repetidora",
|
||||
"map_runTraceWithReturnPath": "Volver atrás por el mismo camino.",
|
||||
"@radioStats_noiseFloor": {
|
||||
@@ -2103,6 +2117,5 @@
|
||||
"repeater_guest": "Información sobre repetidores",
|
||||
"chat_sendMessage": "Enviar mensaje",
|
||||
"repeater_guestTools": "Herramientas para invitados",
|
||||
"room_guest": "Información del servidor",
|
||||
"settings_multiAck": "Múltiples respuestas de confirmación"
|
||||
"room_guest": "Información del servidor"
|
||||
}
|
||||
|
||||
+18
-5
@@ -394,10 +394,16 @@
|
||||
"channels_cyr2latSettingsSubheading" : "Liste des remplacements",
|
||||
"channels_cyr2latSettingsDscr" : "Modifier la configuration JSON des remplacements de caractères",
|
||||
"channels_cyr2latSettingsDialogHint": "Tableau de remplacement JSON",
|
||||
"channels_cyr2latSettingsDialogSuccess": "Liste de remplacement mise à jour",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "JSON incorrect : {error}",
|
||||
"channels_cyr2latSettingsDialogReset": "Réinitialiser les paramètres par défaut",
|
||||
"channels_cyr2latSettingsDialogResetted": "Les paramètres de remplacement Cyr2Lat ont été réinitialisés aux valeurs par défaut",
|
||||
"settings_cyr2latProfileAdd" : "Ajouter un profil Cyr2Lat",
|
||||
"settings_cyr2latProfileName" : "Nom du profil",
|
||||
"settings_cyr2latProfileNameEmpty" : "Le nom du profil ne peut pas être vide",
|
||||
"settings_cyr2latProfileAdded": "Profil ajouté avec succès",
|
||||
"settings_cyr2latProfileUpdated": "Profil mis à jour avec succès",
|
||||
"settings_cyr2latProfileEdit": "Modifier le profil Cyr2Lat",
|
||||
"settings_cyr2latProfileDelete" : "Supprimer le profil Cyr2Lat",
|
||||
"settings_cyr2latProfileDeleted" : "Profil supprimé avec succès",
|
||||
"settings_cyr2latProfileDeleteDscr" : "Êtes-vous sûr de vouloir supprimer le profil \"{name}\"?",
|
||||
"channels_channelUpdated": "Le canal \"{name}\" a été mis à jour",
|
||||
"@channels_channelUpdated": {
|
||||
"placeholders": {
|
||||
@@ -1932,6 +1938,13 @@
|
||||
"contact_lastSeen": "Dernière fois vu",
|
||||
"contact_clearChat": "Effacer la conversation",
|
||||
"contact_teleBaseSubtitle": "Autoriser le partage du niveau de batterie et de la télémétrie de base",
|
||||
"@settings_multiAck": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"appSettings_maxRouteWeightSubtitle": "Poids maximal qu'un itinéraire peut accumuler grâce à des livraisons réussies.",
|
||||
"appSettings_initialRouteWeight": "Poids initial de l'itinéraire",
|
||||
"appSettings_maxRouteWeight": "Poids maximal autorisé pour le trajet",
|
||||
@@ -1943,6 +1956,7 @@
|
||||
"appSettings_maxMessageRetries": "Nombre maximal de tentatives de récupération de messages",
|
||||
"appSettings_maxMessageRetriesSubtitle": "Nombre de tentatives de relance avant de marquer un message comme ayant échoué.",
|
||||
"path_routeWeight": "{weight}/{max}",
|
||||
"settings_multiAck": "Multi-ACKs : {value}",
|
||||
"settings_telemetryModeUpdated": "Le mode télémétrie a été mis à jour",
|
||||
"map_showOverlaps": "Chevauchement de la touche répétitive",
|
||||
"map_runTraceWithReturnPath": "Revenir sur le même chemin.",
|
||||
@@ -2075,6 +2089,5 @@
|
||||
"repeater_guestTools": "Outils pour les invités",
|
||||
"chat_sendMessage": "Envoyer un message",
|
||||
"room_guest": "Informations sur le serveur",
|
||||
"repeater_guest": "Informations sur les répéteurs",
|
||||
"settings_multiAck": "Plusieurs accusés de réception"
|
||||
"repeater_guest": "Informations sur les répéteurs"
|
||||
}
|
||||
|
||||
+18
-5
@@ -554,10 +554,16 @@
|
||||
"channels_cyr2latSettingsSubheading": "Helyettesítési lista",
|
||||
"channels_cyr2latSettingsDscr": "A karakterhelyettesítési JSON-konfiguráció szerkesztése",
|
||||
"channels_cyr2latSettingsDialogHint": "JSON-csere táblázat",
|
||||
"channels_cyr2latSettingsDialogSuccess": "A csere lista frissítve",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "Hibás JSON: {error}",
|
||||
"channels_cyr2latSettingsDialogReset": "Alapértelmezett értékekre állítás",
|
||||
"channels_cyr2latSettingsDialogResetted": "A Cyr2Lat helyettesítési beállítások alapértelmezett értékekre lettek állítva",
|
||||
"settings_cyr2latProfileAdd": "Cyr2Lat-profil hozzáadása",
|
||||
"settings_cyr2latProfileName": "Profil neve",
|
||||
"settings_cyr2latProfileNameEmpty": "A profil neve nem lehet üres",
|
||||
"settings_cyr2latProfileAdded": "A profil hozzáadása sikeres",
|
||||
"settings_cyr2latProfileUpdated": "A profil frissítése sikeres",
|
||||
"settings_cyr2latProfileEdit": "Cyr2Lat profil szerkesztése",
|
||||
"settings_cyr2latProfileDelete": "Cyr2Lat profil törlése",
|
||||
"settings_cyr2latProfileDeleted": "A profil törlése sikeresen megtörtént",
|
||||
"settings_cyr2latProfileDeleteDscr": "Biztosan törölni szeretné a \"{name}\" profilt?",
|
||||
"channels_channelUpdated": "A {name} csatorna frissítve",
|
||||
"@channels_channelUpdated": {
|
||||
"placeholders": {
|
||||
@@ -2022,6 +2028,13 @@
|
||||
"radioStats_stripWaiting": "Rádió adatok begyűjtése…",
|
||||
"radioStats_settingsTile": "Rádió statisztikák",
|
||||
"radioStats_settingsSubtitle": "Háttérzaj, RSSI, zaj-sűrűség, és a használat időtartama",
|
||||
"@settings_multiAck": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_denyAll": "Elutasítom",
|
||||
"settings_privacySettingsDescription": "Válassza ki, hogy az eszközének melyik információkat oszt meg másokkal.",
|
||||
"settings_privacySubtitle": "Ellenőrizd, hogy milyen információkat osztanak meg.",
|
||||
@@ -2033,6 +2046,7 @@
|
||||
"settings_telemetryEnvironmentMode": "Adatkapcsolati környezeti mód",
|
||||
"settings_advertLocation": "Reklám megjelenési hely",
|
||||
"settings_advertLocationSubtitle": "A hirdetés tartalmazza a helyszínt.",
|
||||
"settings_multiAck": "Többszöri visszaigazolások: {value}",
|
||||
"settings_telemetryModeUpdated": "A telemetriamód frissítve",
|
||||
"contact_info": "Kapcsolattartási információk",
|
||||
"contact_settings": "Kapcsolat beállítások",
|
||||
@@ -2113,6 +2127,5 @@
|
||||
"repeater_guestTools": "Vendégek számára elérhető eszközök",
|
||||
"room_guest": "Szoba szerver információk",
|
||||
"chat_sendMessage": "Üzenet küldése",
|
||||
"repeater_guest": "Adatok a repeaterről",
|
||||
"settings_multiAck": "Többszörös visszaigazolások"
|
||||
"repeater_guest": "Adatok a repeaterről"
|
||||
}
|
||||
|
||||
+18
-5
@@ -394,10 +394,16 @@
|
||||
"channels_cyr2latSettingsSubheading": "Elenco delle sostituzioni",
|
||||
"channels_cyr2latSettingsDscr": "Modifica la configurazione JSON delle sostituzioni dei caratteri",
|
||||
"channels_cyr2latSettingsDialogHint": "Mappa JSON delle sostituzioni",
|
||||
"channels_cyr2latSettingsDialogSuccess": "Elenco delle sostituzioni aggiornato",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "JSON non corretto: {error}",
|
||||
"channels_cyr2latSettingsDialogReset": "Ripristina impostazioni predefinite",
|
||||
"channels_cyr2latSettingsDialogResetted": "Le impostazioni di sostituzione Cyr2Lat sono state ripristinate alle impostazioni predefinite",
|
||||
"settings_cyr2latProfileAdd": "Aggiungi profilo Cyr2Lat",
|
||||
"settings_cyr2latProfileName": "Nome profilo",
|
||||
"settings_cyr2latProfileNameEmpty": "Il nome del profilo non può essere vuoto",
|
||||
"settings_cyr2latProfileAdded": "Profilo aggiunto con successo",
|
||||
"settings_cyr2latProfileUpdated": "Profilo aggiornato con successo",
|
||||
"settings_cyr2latProfileEdit": "Modifica profilo Cyr2Lat",
|
||||
"settings_cyr2latProfileDelete": "Elimina profilo Cyr2Lat",
|
||||
"settings_cyr2latProfileDeleted": "Profilo eliminato con successo",
|
||||
"settings_cyr2latProfileDeleteDscr": "Sei sicuro di voler eliminare il profilo \"{name}\"?",
|
||||
"channels_channelUpdated": "Canale \"{name}\" aggiornato",
|
||||
"@channels_channelUpdated": {
|
||||
"placeholders": {
|
||||
@@ -1932,6 +1938,13 @@
|
||||
"contact_teleBaseSubtitle": "Consenti la condivisione del livello della batteria e della telemetria di base",
|
||||
"contact_teleEnvSubtitle": "Consenti la condivisione dei dati del sensore ambientale",
|
||||
"contact_teleEnv": "Ambiente di telemetria",
|
||||
"@settings_multiAck": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"appSettings_initialRouteWeight": "Peso iniziale del percorso",
|
||||
"appSettings_initialRouteWeightSubtitle": "Peso di partenza per nuovi percorsi",
|
||||
"appSettings_maxRouteWeightSubtitle": "Il peso massimo che un percorso può accumulare grazie a consegne di successo.",
|
||||
@@ -1944,6 +1957,7 @@
|
||||
"appSettings_maxMessageRetriesSubtitle": "Numero di tentativi di riprova prima di considerare un messaggio come fallito.",
|
||||
"path_routeWeight": "{weight}/{max}",
|
||||
"settings_telemetryModeUpdated": "Modalità telemetria aggiornata",
|
||||
"settings_multiAck": "Multi-ACKs: {value}",
|
||||
"map_showOverlaps": "Sovrapposizioni della chiave ripetitore",
|
||||
"map_runTraceWithReturnPath": "Tornare indietro sullo stesso percorso",
|
||||
"@radioStats_noiseFloor": {
|
||||
@@ -2075,6 +2089,5 @@
|
||||
"repeater_guest": "Informazioni sul ripetitore",
|
||||
"repeater_guestTools": "Strumenti per gli ospiti",
|
||||
"chat_sendMessage": "Invia messaggio",
|
||||
"room_guest": "Informazioni sul server",
|
||||
"settings_multiAck": "ACK multipli"
|
||||
"room_guest": "Informazioni sul server"
|
||||
}
|
||||
|
||||
+18
-5
@@ -554,10 +554,16 @@
|
||||
"channels_cyr2latSettingsSubheading": "置換リスト",
|
||||
"channels_cyr2latSettingsDscr": "文字置換のJSON設定を編集する",
|
||||
"channels_cyr2latSettingsDialogHint": "JSON置換マップ",
|
||||
"channels_cyr2latSettingsDialogSuccess": "置換リストが更新されました",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "不正なJSON: {error}",
|
||||
"channels_cyr2latSettingsDialogReset": "初期設定に戻す",
|
||||
"channels_cyr2latSettingsDialogResetted": "cyr2latの置換設定が初期設定に戻されました",
|
||||
"settings_cyr2latProfileAdd": "Cyr2Latプロファイルの追加",
|
||||
"settings_cyr2latProfileName": "プロファイル名",
|
||||
"settings_cyr2latProfileNameEmpty": "プロファイル名は空にできません",
|
||||
"settings_cyr2latProfileAdded": "プロファイルが正常に追加されました",
|
||||
"settings_cyr2latProfileUpdated": "プロファイルの更新に成功しました",
|
||||
"settings_cyr2latProfileEdit": "Cyr2Latプロファイルを編集",
|
||||
"settings_cyr2latProfileDelete": "Cyr2Latプロファイルを削除",
|
||||
"settings_cyr2latProfileDeleted": "プロファイルの削除に成功しました",
|
||||
"settings_cyr2latProfileDeleteDscr": "プロファイル \"{name}\" を削除してもよろしいですか?",
|
||||
"channels_channelUpdated": "チャンネル「{name}」が更新されました",
|
||||
"@channels_channelUpdated": {
|
||||
"placeholders": {
|
||||
@@ -2022,6 +2028,13 @@
|
||||
"radioStats_stripWaiting": "ラジオの統計情報を取得中…",
|
||||
"radioStats_settingsTile": "ラジオの統計",
|
||||
"radioStats_settingsSubtitle": "ノイズレベル、RSSI、SNR、および通信時間",
|
||||
"@settings_multiAck": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_privacy": "プライバシー設定",
|
||||
"settings_privacySubtitle": "共有する情報の内容を管理する。",
|
||||
"settings_denyAll": "すべてを否定",
|
||||
@@ -2033,6 +2046,7 @@
|
||||
"settings_telemetryEnvironmentMode": "テレメトリ環境モード",
|
||||
"settings_advertLocation": "広告掲載場所",
|
||||
"settings_advertLocationSubtitle": "広告に場所を記載してください。",
|
||||
"settings_multiAck": "複数のACK:{value}",
|
||||
"settings_telemetryModeUpdated": "テレメトリモードが更新されました",
|
||||
"contact_info": "連絡先",
|
||||
"contact_settings": "連絡設定",
|
||||
@@ -2113,6 +2127,5 @@
|
||||
"room_guest": "ルームサーバーに関する情報",
|
||||
"chat_sendMessage": "メッセージを送信する",
|
||||
"repeater_guest": "繰り返し送信に関する情報",
|
||||
"repeater_guestTools": "ゲスト向けツール",
|
||||
"settings_multiAck": "複数のACK(応答)"
|
||||
"repeater_guestTools": "ゲスト向けツール"
|
||||
}
|
||||
|
||||
+18
-5
@@ -554,10 +554,16 @@
|
||||
"channels_cyr2latSettingsSubheading": "변환 목록",
|
||||
"channels_cyr2latSettingsDscr": "문자 변환 JSON 구성 편집",
|
||||
"channels_cyr2latSettingsDialogHint": "JSON 변환 맵",
|
||||
"channels_cyr2latSettingsDialogSuccess": "변환 목록이 업데이트되었습니다",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "잘못된 JSON: {error}",
|
||||
"channels_cyr2latSettingsDialogReset": "초기값으로 초기화",
|
||||
"channels_cyr2latSettingsDialogResetted": "Cyr2Lat 변환 설정이 초기값으로 초기화되었습니다",
|
||||
"settings_cyr2latProfileAdd": "Cyr2Lat 프로필 추가",
|
||||
"settings_cyr2latProfileName": "프로필 이름",
|
||||
"settings_cyr2latProfileNameEmpty": "프로필 이름은 비워둘 수 없습니다",
|
||||
"settings_cyr2latProfileAdded": "프로필이 성공적으로 추가되었습니다",
|
||||
"settings_cyr2latProfileUpdated": "프로필이 성공적으로 업데이트되었습니다",
|
||||
"settings_cyr2latProfileEdit": "Cyr2Lat 프로필 편집",
|
||||
"settings_cyr2latProfileDelete": "Cyr2Lat 프로필 삭제",
|
||||
"settings_cyr2latProfileDeleted": "프로필이 성공적으로 삭제되었습니다",
|
||||
"settings_cyr2latProfileDeleteDscr": "\"{name}\" 프로필을 삭제하시겠습니까?",
|
||||
"channels_channelUpdated": "채널 \"{name}\"이 업데이트되었습니다.",
|
||||
"@channels_channelUpdated": {
|
||||
"placeholders": {
|
||||
@@ -2022,6 +2028,13 @@
|
||||
"radioStats_stripWaiting": "라디오 통계 가져오기…",
|
||||
"radioStats_settingsTile": "라디오 통계",
|
||||
"radioStats_settingsSubtitle": "잡음 수준, RSSI, 신호 대 잡음비, 통신 시간",
|
||||
"@settings_multiAck": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_privacy": "개인 정보 설정",
|
||||
"settings_privacySubtitle": "어떤 정보를 공유할지 통제하세요.",
|
||||
"settings_privacySettingsDescription": "어떤 정보를 기기가 다른 사람들과 공유할지 선택하세요.",
|
||||
@@ -2033,6 +2046,7 @@
|
||||
"settings_telemetryEnvironmentMode": "텔레메트리 환경 모드",
|
||||
"settings_advertLocation": "광고 위치",
|
||||
"settings_advertLocationSubtitle": "광고에 위치 정보를 포함하세요.",
|
||||
"settings_multiAck": "다중 ACK: {value}",
|
||||
"settings_telemetryModeUpdated": "텔레메트리 모드 업데이트 완료",
|
||||
"contact_info": "연락처",
|
||||
"contact_settings": "연락처 설정",
|
||||
@@ -2113,6 +2127,5 @@
|
||||
"repeater_guestTools": "손님용 도구",
|
||||
"chat_sendMessage": "메시지를 보내기",
|
||||
"repeater_guest": "반복 장비 정보",
|
||||
"room_guest": "서버 정보",
|
||||
"settings_multiAck": "다중 ACK"
|
||||
"room_guest": "서버 정보"
|
||||
}
|
||||
|
||||
@@ -901,8 +901,8 @@ abstract class AppLocalizations {
|
||||
/// No description provided for @settings_multiAck.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Multi-ACKs'**
|
||||
String get settings_multiAck;
|
||||
/// **'Multi-ACKs: {value}'**
|
||||
String settings_multiAck(String value);
|
||||
|
||||
/// No description provided for @settings_telemetryModeUpdated.
|
||||
///
|
||||
@@ -2212,36 +2212,72 @@ abstract class AppLocalizations {
|
||||
/// **'JSON replacement map'**
|
||||
String get channels_cyr2latSettingsDialogHint;
|
||||
|
||||
/// No description provided for @channels_cyr2latSettingsDialogSuccess.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'The list of replacements has been updated'**
|
||||
String get channels_cyr2latSettingsDialogSuccess;
|
||||
|
||||
/// No description provided for @channels_cyr2latSettingsDialogWrongJSON.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Invalid JSON: {error}'**
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error);
|
||||
|
||||
/// No description provided for @channels_cyr2latSettingsDialogReset.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Reset to default'**
|
||||
String get channels_cyr2latSettingsDialogReset;
|
||||
|
||||
/// No description provided for @channels_cyr2latSettingsDialogResetted.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Cyr2Lat replacement settings reset to default'**
|
||||
String get channels_cyr2latSettingsDialogResetted;
|
||||
|
||||
/// No description provided for @channels_channelUpdated.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Channel \"{name}\" updated'**
|
||||
String channels_channelUpdated(String name);
|
||||
|
||||
/// No description provided for @settings_cyr2latProfileAdd.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Add Cyr2Lat Profile'**
|
||||
String get settings_cyr2latProfileAdd;
|
||||
|
||||
/// No description provided for @settings_cyr2latProfileName.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Profile Name'**
|
||||
String get settings_cyr2latProfileName;
|
||||
|
||||
/// No description provided for @settings_cyr2latProfileNameEmpty.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Profile name cannot be empty'**
|
||||
String get settings_cyr2latProfileNameEmpty;
|
||||
|
||||
/// No description provided for @settings_cyr2latProfileAdded.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Profile added successfully'**
|
||||
String get settings_cyr2latProfileAdded;
|
||||
|
||||
/// No description provided for @settings_cyr2latProfileUpdated.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Profile updated successfully'**
|
||||
String get settings_cyr2latProfileUpdated;
|
||||
|
||||
/// No description provided for @settings_cyr2latProfileEdit.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Edit Cyr2Lat Profile'**
|
||||
String get settings_cyr2latProfileEdit;
|
||||
|
||||
/// No description provided for @settings_cyr2latProfileDelete.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Delete Cyr2Lat Profile'**
|
||||
String get settings_cyr2latProfileDelete;
|
||||
|
||||
/// No description provided for @settings_cyr2latProfileDeleted.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Profile deleted successfully'**
|
||||
String get settings_cyr2latProfileDeleted;
|
||||
|
||||
/// No description provided for @settings_cyr2latProfileDeleteDscr.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Are you sure you want to delete the profile \"{name}\"?'**
|
||||
String settings_cyr2latProfileDeleteDscr(String name);
|
||||
|
||||
/// No description provided for @channels_publicChannelAdded.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
||||
@@ -437,7 +437,9 @@ class AppLocalizationsBg extends AppLocalizations {
|
||||
'Включи местоположение в обявата';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => 'Множество потвърждения';
|
||||
String settings_multiAck(String value) {
|
||||
return 'Мулти-потвърди: $value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated => 'Режим на телеметрията е обновен';
|
||||
@@ -1192,28 +1194,47 @@ class AppLocalizationsBg extends AppLocalizations {
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogHint => 'JSON карта за замествания';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess =>
|
||||
'Списъкът със замествания е актуализиран';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return 'Неправилен JSON: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset =>
|
||||
'Възстановяване на първоначалните настройки';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted =>
|
||||
'Настройките за заместване на Cyr2Lat са възстановени към първоначалните';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return 'Каналът \"$name\" е актуализиран';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => 'Добавяне на профил Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => 'Име на профила';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty =>
|
||||
'Името на профила не може да бъде празно';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => 'Профилът е добавен успешно';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated =>
|
||||
'Профилът е актуализиран успешно';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => 'Редактиране на Cyr2Lat профил';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => 'Изтриване на профил Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted => 'Профилът беше изтрит успешно';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return 'Сигурен ли сте, че искате да изтриете профила \"$name\"?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => 'Публичен канал добавен';
|
||||
|
||||
|
||||
@@ -435,7 +435,9 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
'Ort in der Anzeige einbeziehen';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => 'Mehrere Bestätigungen';
|
||||
String settings_multiAck(String value) {
|
||||
return 'Mehrfach-Bestätigungen: $value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated => 'Telemetriemodus aktualisiert';
|
||||
@@ -1188,27 +1190,47 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogHint => 'JSON-Ersetzungstabelle';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess =>
|
||||
'Ersetzungsliste aktualisiert';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return 'Ungültiges JSON: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset => 'Auf Standard zurücksetzen';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted =>
|
||||
'Die Cyr2Lat-Ersetzungseinstellungen wurden auf die Standardeinstellungen zurückgesetzt';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return 'Kanal \"$name\" aktualisiert';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => 'Cyr2Lat-Profil hinzufügen';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => 'Profilname';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty =>
|
||||
'Der Profilname darf nicht leer sein';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => 'Profil erfolgreich hinzugefügt';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated =>
|
||||
'Profil erfolgreich aktualisiert';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => 'Cyr2Lat-Profil bearbeiten';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => 'Cyr2Lat-Profil löschen';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted => 'Profil erfolgreich gelöscht';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return 'Möchten Sie das Profil \"$name\" wirklich löschen?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => 'Öffentlicher Kanal hinzugefügt';
|
||||
|
||||
|
||||
@@ -427,7 +427,9 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
String get settings_advertLocationSubtitle => 'Include location in advert.';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => 'Multi-ACKs';
|
||||
String settings_multiAck(String value) {
|
||||
return 'Multi-ACKs: $value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated => 'Telemetry mode updated';
|
||||
@@ -1168,27 +1170,45 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogHint => 'JSON replacement map';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess =>
|
||||
'The list of replacements has been updated';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return 'Invalid JSON: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset => 'Reset to default';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted =>
|
||||
'Cyr2Lat replacement settings reset to default';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return 'Channel \"$name\" updated';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => 'Add Cyr2Lat Profile';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => 'Profile Name';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty => 'Profile name cannot be empty';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => 'Profile added successfully';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated => 'Profile updated successfully';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => 'Edit Cyr2Lat Profile';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => 'Delete Cyr2Lat Profile';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted => 'Profile deleted successfully';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return 'Are you sure you want to delete the profile \"$name\"?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => 'Public channel added';
|
||||
|
||||
|
||||
@@ -434,7 +434,9 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
String get settings_advertLocationSubtitle => 'Incluir ubicación en anuncio';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => 'Múltiples respuestas de confirmación';
|
||||
String settings_multiAck(String value) {
|
||||
return 'Multi-ACKs: $value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated => 'Modo de telemetría actualizado';
|
||||
@@ -1190,28 +1192,47 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogHint => 'Mapa JSON de sustituciones';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess =>
|
||||
'Lista de sustituciones actualizada';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return 'JSON incorrecto: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset =>
|
||||
'Restablecer valores predeterminados';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted =>
|
||||
'La configuración de sustituciones de Cyr2Lat se ha restablecido a los valores predeterminados';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return 'Canal \"$name\" actualizado';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => 'Añadir perfil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => 'Nombre del perfil';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty =>
|
||||
'El nombre del perfil no puede estar vacío';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => 'Perfil añadido correctamente';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated =>
|
||||
'Perfil actualizado correctamente';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => 'Editar perfil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => 'Eliminar perfil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted => 'Perfil eliminado correctamente';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return '¿Está seguro de que desea eliminar el perfil \"$name\"?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => 'Canal público añadido';
|
||||
|
||||
|
||||
@@ -438,7 +438,9 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
'Inclure l\'emplacement dans l\'annonce';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => 'Plusieurs accusés de réception';
|
||||
String settings_multiAck(String value) {
|
||||
return 'Multi-ACKs : $value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated =>
|
||||
@@ -1196,28 +1198,46 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get channels_cyr2latSettingsDialogHint =>
|
||||
'Tableau de remplacement JSON';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess =>
|
||||
'Liste de remplacement mise à jour';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return 'JSON incorrect : $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset =>
|
||||
'Réinitialiser les paramètres par défaut';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted =>
|
||||
'Les paramètres de remplacement Cyr2Lat ont été réinitialisés aux valeurs par défaut';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return 'Le canal \"$name\" a été mis à jour';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => 'Ajouter un profil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => 'Nom du profil';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty =>
|
||||
'Le nom du profil ne peut pas être vide';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => 'Profil ajouté avec succès';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated => 'Profil mis à jour avec succès';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => 'Modifier le profil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => 'Supprimer le profil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted => 'Profil supprimé avec succès';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return 'Êtes-vous sûr de vouloir supprimer le profil \"$name\"?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => 'Le canal public a été ajouté';
|
||||
|
||||
|
||||
@@ -437,7 +437,9 @@ class AppLocalizationsHu extends AppLocalizations {
|
||||
'A hirdetés tartalmazza a helyszínt.';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => 'Többszörös visszaigazolások';
|
||||
String settings_multiAck(String value) {
|
||||
return 'Többszöri visszaigazolások: $value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated => 'A telemetriamód frissítve';
|
||||
@@ -1195,27 +1197,46 @@ class AppLocalizationsHu extends AppLocalizations {
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogHint => 'JSON-csere táblázat';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess => 'A csere lista frissítve';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return 'Hibás JSON: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset =>
|
||||
'Alapértelmezett értékekre állítás';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted =>
|
||||
'A Cyr2Lat helyettesítési beállítások alapértelmezett értékekre lettek állítva';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return 'A $name csatorna frissítve';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => 'Cyr2Lat-profil hozzáadása';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => 'Profil neve';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty => 'A profil neve nem lehet üres';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => 'A profil hozzáadása sikeres';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated => 'A profil frissítése sikeres';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => 'Cyr2Lat profil szerkesztése';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => 'Cyr2Lat profil törlése';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted =>
|
||||
'A profil törlése sikeresen megtörtént';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return 'Biztosan törölni szeretné a \"$name\" profilt?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => 'A nyilvános csatorna hozzáadva';
|
||||
|
||||
|
||||
@@ -437,7 +437,9 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
'Includi la posizione nell\'annuncio';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => 'ACK multipli';
|
||||
String settings_multiAck(String value) {
|
||||
return 'Multi-ACKs: $value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated => 'Modalità telemetria aggiornata';
|
||||
@@ -1192,28 +1194,47 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
String get channels_cyr2latSettingsDialogHint =>
|
||||
'Mappa JSON delle sostituzioni';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess =>
|
||||
'Elenco delle sostituzioni aggiornato';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return 'JSON non corretto: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset =>
|
||||
'Ripristina impostazioni predefinite';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted =>
|
||||
'Le impostazioni di sostituzione Cyr2Lat sono state ripristinate alle impostazioni predefinite';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return 'Canale \"$name\" aggiornato';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => 'Aggiungi profilo Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => 'Nome profilo';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty =>
|
||||
'Il nome del profilo non può essere vuoto';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => 'Profilo aggiunto con successo';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated =>
|
||||
'Profilo aggiornato con successo';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => 'Modifica profilo Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => 'Elimina profilo Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted => 'Profilo eliminato con successo';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return 'Sei sicuro di voler eliminare il profilo \"$name\"?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => 'Canale pubblico aggiunto';
|
||||
|
||||
|
||||
@@ -414,7 +414,9 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
String get settings_advertLocationSubtitle => '広告に場所を記載してください。';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => '複数のACK(応答)';
|
||||
String settings_multiAck(String value) {
|
||||
return '複数のACK:$value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated => 'テレメトリモードが更新されました';
|
||||
@@ -1133,26 +1135,45 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogHint => 'JSON置換マップ';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess => '置換リストが更新されました';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return '不正なJSON: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset => '初期設定に戻す';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted =>
|
||||
'cyr2latの置換設定が初期設定に戻されました';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return 'チャンネル「$name」が更新されました';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => 'Cyr2Latプロファイルの追加';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => 'プロファイル名';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty => 'プロファイル名は空にできません';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => 'プロファイルが正常に追加されました';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated => 'プロファイルの更新に成功しました';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => 'Cyr2Latプロファイルを編集';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => 'Cyr2Latプロファイルを削除';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted => 'プロファイルの削除に成功しました';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return 'プロファイル \"$name\" を削除してもよろしいですか?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => 'パブリックチャンネルが追加されました';
|
||||
|
||||
|
||||
@@ -414,7 +414,9 @@ class AppLocalizationsKo extends AppLocalizations {
|
||||
String get settings_advertLocationSubtitle => '광고에 위치 정보를 포함하세요.';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => '다중 ACK';
|
||||
String settings_multiAck(String value) {
|
||||
return '다중 ACK: $value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated => '텔레메트리 모드 업데이트 완료';
|
||||
@@ -1128,26 +1130,45 @@ class AppLocalizationsKo extends AppLocalizations {
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogHint => 'JSON 변환 맵';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess => '변환 목록이 업데이트되었습니다';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return '잘못된 JSON: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset => '초기값으로 초기화';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted =>
|
||||
'Cyr2Lat 변환 설정이 초기값으로 초기화되었습니다';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return '채널 \"$name\"이 업데이트되었습니다.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => 'Cyr2Lat 프로필 추가';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => '프로필 이름';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty => '프로필 이름은 비워둘 수 없습니다';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => '프로필이 성공적으로 추가되었습니다';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated => '프로필이 성공적으로 업데이트되었습니다';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => 'Cyr2Lat 프로필 편집';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => 'Cyr2Lat 프로필 삭제';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted => '프로필이 성공적으로 삭제되었습니다';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return '\"$name\" 프로필을 삭제하시겠습니까?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => '공개 채널 추가';
|
||||
|
||||
|
||||
@@ -432,7 +432,9 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
'Locatie opnemen in advertentie';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => 'Meerdere bevestigingen';
|
||||
String settings_multiAck(String value) {
|
||||
return 'Multi-ACKs: $value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated => 'Telemetrie-modus bijgewerkt';
|
||||
@@ -1179,28 +1181,46 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogHint => 'JSON-vervangingskaart';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess =>
|
||||
'Lijst met vervangingen bijgewerkt';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return 'Onjuiste JSON: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset =>
|
||||
'Terugzetten naar standaard';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted =>
|
||||
'De instellingen voor Cyr2Lat-vervangingen zijn teruggezet naar de standaardinstellingen';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return 'Kanaal \"$name\" is bijgewerkt';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => 'Cyr2Lat-profiel toevoegen';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => 'Profielnaam';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty =>
|
||||
'Profielnaam mag niet leeg zijn';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => 'Profiel succesvol toegevoegd';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated => 'Profiel succesvol bijgewerkt';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => 'Cyr2Lat-profiel bewerken';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => 'Cyr2Lat-profiel verwijderen';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted => 'Profiel succesvol verwijderd';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return 'Weet u zeker dat u het profiel \"$name\" wilt verwijderen?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => 'Open kanaal toegevoegd';
|
||||
|
||||
|
||||
@@ -439,7 +439,9 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
'Uwzględnij lokalizację w ogłoszeniu';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => 'Wielokrotne potwierdzenia odbioru';
|
||||
String settings_multiAck(String value) {
|
||||
return 'Wielokrotne ACK: $value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated =>
|
||||
@@ -1199,28 +1201,48 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogHint => 'Mapa zamian JSON';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess =>
|
||||
'Lista zamian zaktualizowana';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return 'Nieprawidłowy JSON: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset =>
|
||||
'Przywróć ustawienia domyślne';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted =>
|
||||
'Ustawienia zamiany Cyr2Lat zostały przywrócone do wartości domyślnych';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return 'Kanał \"$name\" został zaktualizowany';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => 'Dodaj profil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => 'Nazwa profilu';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty =>
|
||||
'Nazwa profilu nie może być pusta';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => 'Profil dodano pomyślnie';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated =>
|
||||
'Profil został pomyślnie zaktualizowany';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => 'Edytuj profil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => 'Usuń profil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted =>
|
||||
'Profil został pomyślnie usunięty';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return 'Czy na pewno chcesz usunąć profil \"$name\"?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => 'Kanał publiczny dodany';
|
||||
|
||||
|
||||
@@ -436,7 +436,9 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
'Incluir localização no anúncio';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => 'Multi-ACKs';
|
||||
String settings_multiAck(String value) {
|
||||
return 'Multi-ACKs: $value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated => 'Modo de telemetria atualizado';
|
||||
@@ -1190,28 +1192,46 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogHint => 'Mapa de substituições JSON';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess =>
|
||||
'Lista de substituições atualizada';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return 'JSON incorreto: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset =>
|
||||
'Redefinir para os valores iniciais';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted =>
|
||||
'As configurações de substituição Cyr2Lat foram redefinidas para os valores iniciais';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return 'Canal \"$name\" atualizado';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => 'Adicionar perfil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => 'Nome do perfil';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty =>
|
||||
'O nome do perfil não pode estar vazio';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => 'Perfil adicionado com sucesso';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated => 'Perfil atualizado com sucesso';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => 'Editar perfil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => 'Eliminar perfil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted => 'Perfil eliminado com sucesso';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return 'Tem a certeza de que deseja eliminar o perfil \"$name\"?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => 'Canal público adicionado';
|
||||
|
||||
|
||||
@@ -436,7 +436,9 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
'Включить местоположение в объявление';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => 'Несколько подтверждений';
|
||||
String settings_multiAck(String value) {
|
||||
return 'Мульти-ACK: $value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated => 'Режим телеметрии обновлен';
|
||||
@@ -1190,26 +1192,46 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogHint => 'JSON-карта замен';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess => 'Список замен обновлён';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return 'Некорректный JSON: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset => 'Сбросить к начальным';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted =>
|
||||
'Настройки замен Cyr2Lat сброшены к начальным';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return 'Канал \"$name\" обновлён';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => 'Добавить профиль Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => 'Название профиля';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty =>
|
||||
'Название профиля не может быть пустым';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => 'Профиль добавлен';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated => 'Профиль успешно обновлен';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => 'Редактировать профиль Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => 'Удалить профиль Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted => 'Профиль успешно удален';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return 'Вы действительно хотите удалить профиль \"$name\"?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => 'Публичный канал добавлен';
|
||||
|
||||
|
||||
@@ -430,7 +430,9 @@ class AppLocalizationsSk extends AppLocalizations {
|
||||
String get settings_advertLocationSubtitle => 'Zahrnúť polohu do inzerátu';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => 'Viaceré ACK';
|
||||
String settings_multiAck(String value) {
|
||||
return 'Viaceré ACK: $value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated =>
|
||||
@@ -1179,28 +1181,47 @@ class AppLocalizationsSk extends AppLocalizations {
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogHint => 'JSON mapa nahradení';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess =>
|
||||
'Zoznam nahradení bol aktualizovaný';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return 'Nesprávny JSON: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset =>
|
||||
'Obnoviť predvolené nastavenia';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted =>
|
||||
'Nastavenia nahradzovania Cyr2Lat boli obnovené na predvolené';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return 'Kanál \"$name\" bol aktualizovaný';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => 'Pridať profil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => 'Názov profilu';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty =>
|
||||
'Názov profilu nesmie byť prázdny';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => 'Profil bol úspešne pridaný';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated =>
|
||||
'Profil bol úspešne aktualizovaný';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => 'Upraviť profil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => 'Odstrániť profil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted => 'Profil bol úspešne odstránený';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return 'Naozaj chcete odstrániť profil \"$name\"?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => 'Veľký kanál pridaný';
|
||||
|
||||
|
||||
@@ -430,7 +430,9 @@ class AppLocalizationsSl extends AppLocalizations {
|
||||
String get settings_advertLocationSubtitle => 'Vključi lokacijo v oglas.';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => 'Več potrdil';
|
||||
String settings_multiAck(String value) {
|
||||
return 'Večkratni potrditvi: $value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated => 'Način telemetrije posodobljen';
|
||||
@@ -1177,27 +1179,47 @@ class AppLocalizationsSl extends AppLocalizations {
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogHint => 'JSON-tabela zamenjav';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess =>
|
||||
'Seznam zamenjav je posodobljen';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return 'Nepravilen JSON: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset => 'Ponastavi na privzete';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted =>
|
||||
'Nastavitve zamenjav Cyr2Lat so ponastavljene na privzete';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return 'Kanal $name je bil posodobljen';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => 'Dodaj profil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => 'Ime profila';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty =>
|
||||
'Ime profila ne sme biti prazno';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => 'Profil je bil uspešno dodan';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated =>
|
||||
'Profil je bil uspešno posodobljen';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => 'Uredi profil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => 'Izbriši profil Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted => 'Profil je bil uspešno izbrisan';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return 'Ali res želite izbrisati profil \"$name\"?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => 'javna skupnost dodana';
|
||||
|
||||
|
||||
@@ -428,7 +428,9 @@ class AppLocalizationsSv extends AppLocalizations {
|
||||
String get settings_advertLocationSubtitle => 'Inkludera plats i annonsen';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => 'Flera bekräftelser';
|
||||
String settings_multiAck(String value) {
|
||||
return 'Multi-ACKs: $value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated => 'Telemetri-läge uppdaterat';
|
||||
@@ -1169,27 +1171,46 @@ class AppLocalizationsSv extends AppLocalizations {
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogHint => 'JSON-ersättningskarta';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess =>
|
||||
'Ersättningslistan har uppdaterats';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return 'Felaktig JSON: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset => 'Återställ till standard';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted =>
|
||||
'Inställningarna för Cyr2Lat-ersättningar har återställts till standard';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return 'Kanalen \"$name\" har uppdaterats';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => 'Lägg till Cyr2Lat-profil';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => 'Profilnamn';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty =>
|
||||
'Profilnamnet får inte vara tomt';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => 'Profilen har lagts till';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated => 'Profilen har uppdaterats';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => 'Redigera Cyr2Lat-profil';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => 'Ta bort Cyr2Lat-profil';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted => 'Profilen har tagits bort';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return 'Är du säker på att du vill ta bort profilen \"$name\"?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => 'Allmänt kanal tillagd';
|
||||
|
||||
|
||||
@@ -432,7 +432,9 @@ class AppLocalizationsUk extends AppLocalizations {
|
||||
'Включити місце розташування в оголошення';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => 'Багато підтверджень';
|
||||
String settings_multiAck(String value) {
|
||||
return 'Багатократне підтвердження: $value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated => 'Режим телеметрії оновлено';
|
||||
@@ -1184,26 +1186,46 @@ class AppLocalizationsUk extends AppLocalizations {
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogHint => 'JSON-карта замін';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess => 'Список замін оновлено';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return 'Некоректний JSON: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset => 'Скинути до початкових';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted =>
|
||||
'Налаштування замін Cyr2Lat скинуто до початкових';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return 'Канал «$name» оновлено';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => 'Додати профіль Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => 'Назва профілю';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty =>
|
||||
'Назва профілю не може бути порожньою';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => 'Профіль успішно додано';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated => 'Профіль успішно оновлено';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => 'Редагувати профіль Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => 'Видалити профіль Cyr2Lat';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted => 'Профіль успішно видалено';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return 'Ви впевнені, що хочете видалити профіль \"$name\"?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => 'Публічний канал додано';
|
||||
|
||||
|
||||
@@ -408,7 +408,9 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
String get settings_advertLocationSubtitle => '在广告中包含位置';
|
||||
|
||||
@override
|
||||
String get settings_multiAck => '多重ACK';
|
||||
String settings_multiAck(String value) {
|
||||
return '多重ACK:$value';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_telemetryModeUpdated => '遥测模式已更新';
|
||||
@@ -1115,25 +1117,45 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogHint => 'JSON 替換映射表';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogSuccess => '替換清單已更新';
|
||||
|
||||
@override
|
||||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||||
return 'JSON 格式錯誤:$error';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogReset => '還原為預設值';
|
||||
|
||||
@override
|
||||
String get channels_cyr2latSettingsDialogResetted => 'Cyr2Lat 替換設定已還原為預設值';
|
||||
|
||||
@override
|
||||
String channels_channelUpdated(String name) {
|
||||
return '频道 \"$name\" 已更新';
|
||||
}
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdd => '新增 Cyr2Lat 設定檔';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileName => '設定檔名稱';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileNameEmpty => '設定檔名稱不能為空';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileAdded => '設定檔已成功新增';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileUpdated => '設定檔已成功更新';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileEdit => '編輯 Cyr2Lat 設定檔';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDelete => '刪除 Cyr2Lat 設定檔';
|
||||
|
||||
@override
|
||||
String get settings_cyr2latProfileDeleted => '設定檔已成功刪除';
|
||||
|
||||
@override
|
||||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||||
return '您確定要刪除設定檔 \"$name\" 嗎?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_publicChannelAdded => '已添加公共频道';
|
||||
|
||||
|
||||
+18
-5
@@ -394,10 +394,16 @@
|
||||
"channels_cyr2latSettingsSubheading": "Lijst met vervangingen",
|
||||
"channels_cyr2latSettingsDscr": "Bewerk de JSON-configuratie voor tekenvervanging",
|
||||
"channels_cyr2latSettingsDialogHint": "JSON-vervangingskaart",
|
||||
"channels_cyr2latSettingsDialogSuccess": "Lijst met vervangingen bijgewerkt",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "Onjuiste JSON: {error}",
|
||||
"channels_cyr2latSettingsDialogReset": "Terugzetten naar standaard",
|
||||
"channels_cyr2latSettingsDialogResetted": "De instellingen voor Cyr2Lat-vervangingen zijn teruggezet naar de standaardinstellingen",
|
||||
"settings_cyr2latProfileAdd": "Cyr2Lat-profiel toevoegen",
|
||||
"settings_cyr2latProfileName": "Profielnaam",
|
||||
"settings_cyr2latProfileNameEmpty": "Profielnaam mag niet leeg zijn",
|
||||
"settings_cyr2latProfileAdded": "Profiel succesvol toegevoegd",
|
||||
"settings_cyr2latProfileUpdated": "Profiel succesvol bijgewerkt",
|
||||
"settings_cyr2latProfileEdit": "Cyr2Lat-profiel bewerken",
|
||||
"settings_cyr2latProfileDelete": "Cyr2Lat-profiel verwijderen",
|
||||
"settings_cyr2latProfileDeleted": "Profiel succesvol verwijderd",
|
||||
"settings_cyr2latProfileDeleteDscr": "Weet u zeker dat u het profiel \"{name}\" wilt verwijderen?",
|
||||
"channels_channelUpdated": "Kanaal \"{name}\" is bijgewerkt",
|
||||
"@channels_channelUpdated": {
|
||||
"placeholders": {
|
||||
@@ -1932,6 +1938,13 @@
|
||||
"contact_lastSeen": "Laatst gezien",
|
||||
"contact_clearChat": "Chat leegmaken",
|
||||
"contact_teleBaseSubtitle": "Sta delen van batterij niveau en basis telemetrie toe",
|
||||
"@settings_multiAck": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"appSettings_maxRouteWeightSubtitle": "Het maximale gewicht dat een route kan bereiken door succesvolle leveringen.",
|
||||
"appSettings_initialRouteWeight": "เริ่มต้น gewicht van de route",
|
||||
"appSettings_maxRouteWeight": "Maximale gewicht voor de route",
|
||||
@@ -1944,6 +1957,7 @@
|
||||
"appSettings_maxMessageRetriesSubtitle": "Aantal pogingen om een bericht opnieuw te versturen voordat het als mislukt wordt gemarkeerd",
|
||||
"path_routeWeight": "{weight}/{max}",
|
||||
"settings_telemetryModeUpdated": "Telemetrie-modus bijgewerkt",
|
||||
"settings_multiAck": "Multi-ACKs: {value}",
|
||||
"map_showOverlaps": "Herhalingssleutel overlapt",
|
||||
"map_runTraceWithReturnPath": "Terugkeren op hetzelfde pad.",
|
||||
"@radioStats_noiseFloor": {
|
||||
@@ -2075,6 +2089,5 @@
|
||||
"repeater_guestTools": "Gastenfuncties",
|
||||
"room_guest": "Informatie over de server",
|
||||
"chat_sendMessage": "Verzend bericht",
|
||||
"repeater_guest": "Informatie over herhalingsapparatuur",
|
||||
"settings_multiAck": "Meerdere bevestigingen"
|
||||
"repeater_guest": "Informatie over herhalingsapparatuur"
|
||||
}
|
||||
|
||||
+18
-5
@@ -404,10 +404,16 @@
|
||||
"channels_cyr2latSettingsSubheading": "Lista zamian",
|
||||
"channels_cyr2latSettingsDscr": "Edytuj konfigurację JSON zamiany znaków",
|
||||
"channels_cyr2latSettingsDialogHint": "Mapa zamian JSON",
|
||||
"channels_cyr2latSettingsDialogSuccess": "Lista zamian zaktualizowana",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "Nieprawidłowy JSON: {error}",
|
||||
"channels_cyr2latSettingsDialogReset": "Przywróć ustawienia domyślne",
|
||||
"channels_cyr2latSettingsDialogResetted": "Ustawienia zamiany Cyr2Lat zostały przywrócone do wartości domyślnych",
|
||||
"settings_cyr2latProfileAdd": "Dodaj profil Cyr2Lat",
|
||||
"settings_cyr2latProfileName": "Nazwa profilu",
|
||||
"settings_cyr2latProfileNameEmpty": "Nazwa profilu nie może być pusta",
|
||||
"settings_cyr2latProfileAdded": "Profil dodano pomyślnie",
|
||||
"settings_cyr2latProfileUpdated": "Profil został pomyślnie zaktualizowany",
|
||||
"settings_cyr2latProfileEdit": "Edytuj profil Cyr2Lat",
|
||||
"settings_cyr2latProfileDelete": "Usuń profil Cyr2Lat",
|
||||
"settings_cyr2latProfileDeleted": "Profil został pomyślnie usunięty",
|
||||
"settings_cyr2latProfileDeleteDscr": "Czy na pewno chcesz usunąć profil \"{name}\"?",
|
||||
"channels_channelUpdated": "Kanał \"{name}\" został zaktualizowany",
|
||||
"@channels_channelUpdated": {
|
||||
"placeholders": {
|
||||
@@ -1970,6 +1976,13 @@
|
||||
"contact_settings": "Ustawienia kontaktowe",
|
||||
"contact_lastSeen": "Ostatnio widziany",
|
||||
"contact_teleBaseSubtitle": "Pozwól na udostępnianie poziomu naładowania baterii i podstawowych danych telemetrycznych",
|
||||
"@settings_multiAck": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"appSettings_initialRouteWeight": "Początkowa waga trasy",
|
||||
"appSettings_maxRouteWeight": "Maksymalny dopuszczalny ciężar pojazdu",
|
||||
"appSettings_initialRouteWeightSubtitle": "Początkowa waga dla nowych, odkrytych ścieżek",
|
||||
@@ -1982,6 +1995,7 @@
|
||||
"appSettings_maxMessageRetriesSubtitle": "Liczba prób ponownego wysłania wiadomości przed oznaczaniem jej jako nieudanej",
|
||||
"path_routeWeight": "{weight}/{max}",
|
||||
"settings_telemetryModeUpdated": "Tryb telemetryczny zaktualizowany",
|
||||
"settings_multiAck": "Wielokrotne ACK: {value}",
|
||||
"map_showOverlaps": "Nakładające się klucze przekaźników",
|
||||
"map_runTraceWithReturnPath": "Wróć tą samą ścieżką",
|
||||
"@radioStats_noiseFloor": {
|
||||
@@ -2113,6 +2127,5 @@
|
||||
"chat_sendMessage": "Wyślij wiadomość",
|
||||
"repeater_guestTools": "Narzędzia dla gości",
|
||||
"repeater_guest": "Informacje dotyczące urządzenia powtarzającego",
|
||||
"room_guest": "Informacje o serwerze",
|
||||
"settings_multiAck": "Wielokrotne potwierdzenia odbioru"
|
||||
"room_guest": "Informacje o serwerze"
|
||||
}
|
||||
|
||||
+17
-4
@@ -394,10 +394,16 @@
|
||||
"channels_cyr2latSettingsSubheading": "Lista de substituições",
|
||||
"channels_cyr2latSettingsDscr": "Editar a configuração JSON de substituição de caracteres",
|
||||
"channels_cyr2latSettingsDialogHint": "Mapa de substituições JSON",
|
||||
"channels_cyr2latSettingsDialogSuccess": "Lista de substituições atualizada",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "JSON incorreto: {error}",
|
||||
"channels_cyr2latSettingsDialogReset": "Redefinir para os valores iniciais",
|
||||
"channels_cyr2latSettingsDialogResetted": "As configurações de substituição Cyr2Lat foram redefinidas para os valores iniciais",
|
||||
"settings_cyr2latProfileAdd": "Adicionar perfil Cyr2Lat",
|
||||
"settings_cyr2latProfileName": "Nome do perfil",
|
||||
"settings_cyr2latProfileNameEmpty": "O nome do perfil não pode estar vazio",
|
||||
"settings_cyr2latProfileAdded": "Perfil adicionado com sucesso",
|
||||
"settings_cyr2latProfileUpdated": "Perfil atualizado com sucesso",
|
||||
"settings_cyr2latProfileEdit": "Editar perfil Cyr2Lat",
|
||||
"settings_cyr2latProfileDelete": "Eliminar perfil Cyr2Lat",
|
||||
"settings_cyr2latProfileDeleted": "Perfil eliminado com sucesso",
|
||||
"settings_cyr2latProfileDeleteDscr": "Tem a certeza de que deseja eliminar o perfil \"{name}\"?",
|
||||
"channels_channelUpdated": "Canal \"{name}\" atualizado",
|
||||
"@channels_channelUpdated": {
|
||||
"placeholders": {
|
||||
@@ -1932,6 +1938,13 @@
|
||||
"contact_telemetry": "Telemetria",
|
||||
"contact_settings": "Configurações de Contato",
|
||||
"contact_teleBaseSubtitle": "Permitir compartilhamento do nível da bateria e telemetria básica",
|
||||
"@settings_multiAck": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"appSettings_initialRouteWeight": "Peso Inicial da Rota",
|
||||
"appSettings_maxRouteWeight": "Peso Máximo da Rota",
|
||||
"appSettings_maxRouteWeightSubtitle": "Peso máximo que um determinado percurso pode acumular com entregas bem-sucedidas.",
|
||||
@@ -1944,7 +1957,7 @@
|
||||
"appSettings_maxMessageRetriesSubtitle": "Número de tentativas de reenvio antes de classificar uma mensagem como falha.",
|
||||
"path_routeWeight": "{weight}/{max}",
|
||||
"settings_telemetryModeUpdated": "Modo de telemetria atualizado",
|
||||
"settings_multiAck": "Multi-ACKs",
|
||||
"settings_multiAck": "Multi-ACKs: {value}",
|
||||
"map_showOverlaps": "Sobreposições da Chave Repeater",
|
||||
"map_runTraceWithReturnPath": "Retornar ao mesmo caminho.",
|
||||
"@radioStats_noiseFloor": {
|
||||
|
||||
+18
-5
@@ -258,10 +258,16 @@
|
||||
"channels_cyr2latSettingsSubheading": "Список замен",
|
||||
"channels_cyr2latSettingsDscr": "Редактировать JSON-конфигурацию замены символов",
|
||||
"channels_cyr2latSettingsDialogHint": "JSON-карта замен",
|
||||
"channels_cyr2latSettingsDialogSuccess": "Список замен обновлён",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "Некорректный JSON: {error}",
|
||||
"channels_cyr2latSettingsDialogReset": "Сбросить к начальным",
|
||||
"channels_cyr2latSettingsDialogResetted": "Настройки замен Cyr2Lat сброшены к начальным",
|
||||
"settings_cyr2latProfileAdd": "Добавить профиль Cyr2Lat",
|
||||
"settings_cyr2latProfileName": "Название профиля",
|
||||
"settings_cyr2latProfileNameEmpty": "Название профиля не может быть пустым",
|
||||
"settings_cyr2latProfileAdded": "Профиль добавлен",
|
||||
"settings_cyr2latProfileUpdated": "Профиль успешно обновлен",
|
||||
"settings_cyr2latProfileEdit": "Редактировать профиль Cyr2Lat",
|
||||
"settings_cyr2latProfileDelete": "Удалить профиль Cyr2Lat",
|
||||
"settings_cyr2latProfileDeleted": "Профиль успешно удален",
|
||||
"settings_cyr2latProfileDeleteDscr": "Вы действительно хотите удалить профиль \"{name}\"?",
|
||||
"channels_channelUpdated": "Канал \"{name}\" обновлён",
|
||||
"channels_publicChannelAdded": "Публичный канал добавлен",
|
||||
"channels_sortBy": "Сортировка",
|
||||
@@ -1172,6 +1178,13 @@
|
||||
"contact_clearChat": "Очистить чат",
|
||||
"contact_lastSeen": "Последний раз видели",
|
||||
"contact_teleBaseSubtitle": "Разрешить обмен уровнем заряда батареи и базовой телеметрией",
|
||||
"@settings_multiAck": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"appSettings_maxRouteWeight": "Максимальный допустимый вес маршрута",
|
||||
"appSettings_maxRouteWeightSubtitle": "Максимальный вес, который может быть перевезён по определённому маршруту при успешных доставках.",
|
||||
"appSettings_initialRouteWeightSubtitle": "Начальный вес для новых, только что открытых маршрутов",
|
||||
@@ -1184,6 +1197,7 @@
|
||||
"appSettings_maxMessageRetriesSubtitle": "Количество попыток повторной отправки сообщения перед тем, как пометить его как неудачное.",
|
||||
"path_routeWeight": "{weight}/{max}",
|
||||
"settings_telemetryModeUpdated": "Режим телеметрии обновлен",
|
||||
"settings_multiAck": "Мульти-ACK: {value}",
|
||||
"map_showOverlaps": "Перекрытия ключа повтора",
|
||||
"map_runTraceWithReturnPath": "Вернуться обратно по тому же пути",
|
||||
"@radioStats_noiseFloor": {
|
||||
@@ -1315,6 +1329,5 @@
|
||||
"chat_sendMessage": "Отправить сообщение",
|
||||
"repeater_guest": "Информация о ретрансляторе",
|
||||
"room_guest": "Информация о сервере",
|
||||
"repeater_guestTools": "Инструменты для гостей",
|
||||
"settings_multiAck": "Несколько подтверждений"
|
||||
"repeater_guestTools": "Инструменты для гостей"
|
||||
}
|
||||
|
||||
+17
-4
@@ -394,10 +394,16 @@
|
||||
"channels_cyr2latSettingsSubheading": "Zoznam nahradení",
|
||||
"channels_cyr2latSettingsDscr": "Upravte konfiguráciu JSON pre nahradenie znakov",
|
||||
"channels_cyr2latSettingsDialogHint": "JSON mapa nahradení",
|
||||
"channels_cyr2latSettingsDialogSuccess": "Zoznam nahradení bol aktualizovaný",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "Nesprávny JSON: {error}",
|
||||
"channels_cyr2latSettingsDialogReset": "Obnoviť predvolené nastavenia",
|
||||
"channels_cyr2latSettingsDialogResetted": "Nastavenia nahradzovania Cyr2Lat boli obnovené na predvolené",
|
||||
"settings_cyr2latProfileAdd": "Pridať profil Cyr2Lat",
|
||||
"settings_cyr2latProfileName": "Názov profilu",
|
||||
"settings_cyr2latProfileNameEmpty": "Názov profilu nesmie byť prázdny",
|
||||
"settings_cyr2latProfileAdded": "Profil bol úspešne pridaný",
|
||||
"settings_cyr2latProfileUpdated": "Profil bol úspešne aktualizovaný",
|
||||
"settings_cyr2latProfileEdit": "Upraviť profil Cyr2Lat",
|
||||
"settings_cyr2latProfileDelete": "Odstrániť profil Cyr2Lat",
|
||||
"settings_cyr2latProfileDeleted": "Profil bol úspešne odstránený",
|
||||
"settings_cyr2latProfileDeleteDscr": "Naozaj chcete odstrániť profil \"{name}\"?",
|
||||
"channels_channelUpdated": "Kanál \"{name}\" bol aktualizovaný",
|
||||
"@channels_channelUpdated": {
|
||||
"placeholders": {
|
||||
@@ -1932,6 +1938,13 @@
|
||||
"contact_lastSeen": "Naposledy videný",
|
||||
"contact_teleBase": "Báza telemetrie",
|
||||
"contact_teleEnvSubtitle": "Povoliť zdieľanie údajov senzorov prostredia",
|
||||
"@settings_multiAck": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"appSettings_maxRouteWeightSubtitle": "Maximálna hmotnosť, ktorú môže trás prenášať vďaka úspešným zásielkam.",
|
||||
"appSettings_initialRouteWeightSubtitle": "Počiatočná váha pre nové, objavené cesty",
|
||||
"appSettings_initialRouteWeight": "Počiatočná váha trasy",
|
||||
@@ -1944,7 +1957,7 @@
|
||||
"appSettings_maxMessageRetriesSubtitle": "Počet pokusov o odošleť pred označením správy ako neúspešnej",
|
||||
"path_routeWeight": "{weight}/{max}",
|
||||
"settings_telemetryModeUpdated": "Režim telemetrie bol aktualizovaný",
|
||||
"settings_multiAck": "Viaceré ACK",
|
||||
"settings_multiAck": "Viaceré ACK: {value}",
|
||||
"map_showOverlaps": "Prekrývanie opakovača kľúča",
|
||||
"map_runTraceWithReturnPath": "Vráťte sa späť po tej istej ceste.",
|
||||
"@radioStats_noiseFloor": {
|
||||
|
||||
+18
-5
@@ -394,10 +394,16 @@
|
||||
"channels_cyr2latSettingsSubheading": "Seznam zamenjav",
|
||||
"channels_cyr2latSettingsDscr": "Uredi JSON-konfiguracijo zamenjav znakov",
|
||||
"channels_cyr2latSettingsDialogHint": "JSON-tabela zamenjav",
|
||||
"channels_cyr2latSettingsDialogSuccess": "Seznam zamenjav je posodobljen",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "Nepravilen JSON: {error}",
|
||||
"channels_cyr2latSettingsDialogReset": "Ponastavi na privzete",
|
||||
"channels_cyr2latSettingsDialogResetted": "Nastavitve zamenjav Cyr2Lat so ponastavljene na privzete",
|
||||
"settings_cyr2latProfileAdd": "Dodaj profil Cyr2Lat",
|
||||
"settings_cyr2latProfileName": "Ime profila",
|
||||
"settings_cyr2latProfileNameEmpty": "Ime profila ne sme biti prazno",
|
||||
"settings_cyr2latProfileAdded": "Profil je bil uspešno dodan",
|
||||
"settings_cyr2latProfileUpdated": "Profil je bil uspešno posodobljen",
|
||||
"settings_cyr2latProfileEdit": "Uredi profil Cyr2Lat",
|
||||
"settings_cyr2latProfileDelete": "Izbriši profil Cyr2Lat",
|
||||
"settings_cyr2latProfileDeleted": "Profil je bil uspešno izbrisan",
|
||||
"settings_cyr2latProfileDeleteDscr": "Ali res želite izbrisati profil \"{name}\"?",
|
||||
"channels_channelUpdated": "Kanal {name} je bil posodobljen",
|
||||
"@channels_channelUpdated": {
|
||||
"placeholders": {
|
||||
@@ -1932,6 +1938,13 @@
|
||||
"contact_teleEnv": "Okolje telemetrije",
|
||||
"contact_teleEnvSubtitle": "Dovoli deljenje podatkov okoljskih senzorjev",
|
||||
"contact_teleLocSubtitle": "Dovoli deljenje podatkov o lokaciji",
|
||||
"@settings_multiAck": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"appSettings_maxRouteWeightSubtitle": "Največja teža, ki jo lahko pot doseže s uspešnimi dostavnami.",
|
||||
"appSettings_initialRouteWeight": "Izvirna teža poti",
|
||||
"appSettings_initialRouteWeightSubtitle": "Izguba teže za nove, odkriti poti",
|
||||
@@ -1943,6 +1956,7 @@
|
||||
"appSettings_maxMessageRetries": "Najve število poskusov pošiljanja sporočil",
|
||||
"appSettings_maxMessageRetriesSubtitle": "Število poskusov ponovnega poslanja, preden se sporočilo označuje kot neuspešno",
|
||||
"path_routeWeight": "{weight}/{max}",
|
||||
"settings_multiAck": "Večkratni potrditvi: {value}",
|
||||
"settings_telemetryModeUpdated": "Način telemetrije posodobljen",
|
||||
"map_showOverlaps": "Prekrivanje ključa ponovnega predvajanja",
|
||||
"map_runTraceWithReturnPath": "Vrni se nazaj po isti poti.",
|
||||
@@ -2075,6 +2089,5 @@
|
||||
"repeater_guest": "Informacije o ponovljalniku",
|
||||
"chat_sendMessage": "Pošlji sporočilo",
|
||||
"room_guest": "Informacije o strežniku",
|
||||
"repeater_guestTools": "Naložila za goste",
|
||||
"settings_multiAck": "Več potrdil"
|
||||
"repeater_guestTools": "Naložila za goste"
|
||||
}
|
||||
|
||||
+18
-5
@@ -394,10 +394,16 @@
|
||||
"channels_cyr2latSettingsSubheading": "Ersättningslista",
|
||||
"channels_cyr2latSettingsDscr": "Redigera JSON-konfigurationen för teckenersättning",
|
||||
"channels_cyr2latSettingsDialogHint": "JSON-ersättningskarta",
|
||||
"channels_cyr2latSettingsDialogSuccess": "Ersättningslistan har uppdaterats",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "Felaktig JSON: {error}",
|
||||
"channels_cyr2latSettingsDialogReset": "Återställ till standard",
|
||||
"channels_cyr2latSettingsDialogResetted": "Inställningarna för Cyr2Lat-ersättningar har återställts till standard",
|
||||
"settings_cyr2latProfileAdd": "Lägg till Cyr2Lat-profil",
|
||||
"settings_cyr2latProfileName": "Profilnamn",
|
||||
"settings_cyr2latProfileNameEmpty": "Profilnamnet får inte vara tomt",
|
||||
"settings_cyr2latProfileAdded": "Profilen har lagts till",
|
||||
"settings_cyr2latProfileUpdated": "Profilen har uppdaterats",
|
||||
"settings_cyr2latProfileEdit": "Redigera Cyr2Lat-profil",
|
||||
"settings_cyr2latProfileDelete": "Ta bort Cyr2Lat-profil",
|
||||
"settings_cyr2latProfileDeleted": "Profilen har tagits bort",
|
||||
"settings_cyr2latProfileDeleteDscr": "Är du säker på att du vill ta bort profilen \"{name}\"?",
|
||||
"channels_channelUpdated": "Kanalen \"{name}\" har uppdaterats",
|
||||
"@channels_channelUpdated": {
|
||||
"placeholders": {
|
||||
@@ -1932,6 +1938,13 @@
|
||||
"contact_teleBaseSubtitle": "Tillåt delning av batterinivå och grundläggande telemetri",
|
||||
"contact_teleLoc": "Telemetridata plats",
|
||||
"contact_teleLocSubtitle": "Tillåt delning av platsdata",
|
||||
"@settings_multiAck": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"appSettings_initialRouteWeightSubtitle": "Initial vikt för nyligen upptäckta vägar",
|
||||
"appSettings_maxRouteWeight": "Maximalt tillåtet vikt för rutten",
|
||||
"appSettings_maxRouteWeightSubtitle": "Maximal vikt som en leveransväg kan ackumulera från framgångsrika leveranser.",
|
||||
@@ -1944,6 +1957,7 @@
|
||||
"appSettings_maxMessageRetriesSubtitle": "Antal försök att skicka om ett meddelande innan det markeras som misslyckat.",
|
||||
"path_routeWeight": "{weight}/{max}",
|
||||
"settings_telemetryModeUpdated": "Telemetri-läge uppdaterat",
|
||||
"settings_multiAck": "Multi-ACKs: {value}",
|
||||
"map_showOverlaps": "Repeater-nyckelöverlappningar",
|
||||
"map_runTraceWithReturnPath": "Gå tillbaka på samma väg",
|
||||
"@radioStats_noiseFloor": {
|
||||
@@ -2075,6 +2089,5 @@
|
||||
"repeater_guest": "Information om repetorer",
|
||||
"chat_sendMessage": "Skicka meddelande",
|
||||
"repeater_guestTools": "Gästverktyg",
|
||||
"room_guest": "Information om servern",
|
||||
"settings_multiAck": "Flera bekräftelser"
|
||||
"room_guest": "Information om servern"
|
||||
}
|
||||
|
||||
+18
-5
@@ -395,10 +395,16 @@
|
||||
"channels_cyr2latSettingsSubheading": "Список замін",
|
||||
"channels_cyr2latSettingsDscr": "Редагувати JSON-конфігурацію заміни символів",
|
||||
"channels_cyr2latSettingsDialogHint": "JSON-карта замін",
|
||||
"channels_cyr2latSettingsDialogSuccess": "Список замін оновлено",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "Некоректний JSON: {error}",
|
||||
"channels_cyr2latSettingsDialogReset": "Скинути до початкових",
|
||||
"channels_cyr2latSettingsDialogResetted": "Налаштування замін Cyr2Lat скинуто до початкових",
|
||||
"settings_cyr2latProfileAdd": "Додати профіль Cyr2Lat",
|
||||
"settings_cyr2latProfileName": "Назва профілю",
|
||||
"settings_cyr2latProfileNameEmpty": "Назва профілю не може бути порожньою",
|
||||
"settings_cyr2latProfileAdded": "Профіль успішно додано",
|
||||
"settings_cyr2latProfileUpdated": "Профіль успішно оновлено",
|
||||
"settings_cyr2latProfileEdit": "Редагувати профіль Cyr2Lat",
|
||||
"settings_cyr2latProfileDelete": "Видалити профіль Cyr2Lat",
|
||||
"settings_cyr2latProfileDeleted": "Профіль успішно видалено",
|
||||
"settings_cyr2latProfileDeleteDscr": "Ви впевнені, що хочете видалити профіль \"{name}\"?",
|
||||
"channels_channelUpdated": "Канал «{name}» оновлено",
|
||||
"@channels_channelUpdated": {
|
||||
"placeholders": {
|
||||
@@ -1932,6 +1938,13 @@
|
||||
"contact_lastSeen": "Останній раз бачили",
|
||||
"contact_teleEnv": "Середовище телеметрії",
|
||||
"contact_teleEnvSubtitle": "Дозволити спільний доступ до даних датчиків середовища",
|
||||
"@settings_multiAck": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"appSettings_initialRouteWeight": "Початкова вартість маршруту",
|
||||
"appSettings_initialRouteWeightSubtitle": "Початкова вага для нових відкритих шляхів",
|
||||
"appSettings_maxRouteWeight": "Максимальна вага маршруту",
|
||||
@@ -1944,6 +1957,7 @@
|
||||
"appSettings_maxMessageRetriesSubtitle": "Кількість спроб повторного відправлення повідомлення перед тим, як позначити його як невдале",
|
||||
"path_routeWeight": "{weight}/{max}",
|
||||
"settings_telemetryModeUpdated": "Режим телеметрії оновлено",
|
||||
"settings_multiAck": "Багатократне підтвердження: {value}",
|
||||
"map_showOverlaps": "Перекриття ключа повторювача",
|
||||
"map_runTraceWithReturnPath": "Повернутися назад тим же шляхом",
|
||||
"@radioStats_noiseFloor": {
|
||||
@@ -2075,6 +2089,5 @@
|
||||
"repeater_guestTools": "Інструменти для гостей",
|
||||
"repeater_guest": "Інформація про ретранслятор",
|
||||
"room_guest": "Інформація про сервер кімнати",
|
||||
"chat_sendMessage": "Надіслати повідомлення",
|
||||
"settings_multiAck": "Багато підтверджень"
|
||||
"chat_sendMessage": "Надіслати повідомлення"
|
||||
}
|
||||
|
||||
+17
-4
@@ -409,10 +409,16 @@
|
||||
"channels_cyr2latSettingsSubheading": "替換清單",
|
||||
"channels_cyr2latSettingsDscr": "編輯 JSON 字元替換設定檔",
|
||||
"channels_cyr2latSettingsDialogHint": "JSON 替換映射表",
|
||||
"channels_cyr2latSettingsDialogSuccess": "替換清單已更新",
|
||||
"channels_cyr2latSettingsDialogWrongJSON": "JSON 格式錯誤:{error}",
|
||||
"channels_cyr2latSettingsDialogReset": "還原為預設值",
|
||||
"channels_cyr2latSettingsDialogResetted": "Cyr2Lat 替換設定已還原為預設值",
|
||||
"settings_cyr2latProfileAdd": "新增 Cyr2Lat 設定檔",
|
||||
"settings_cyr2latProfileName": "設定檔名稱",
|
||||
"settings_cyr2latProfileNameEmpty": "設定檔名稱不能為空",
|
||||
"settings_cyr2latProfileAdded": "設定檔已成功新增",
|
||||
"settings_cyr2latProfileUpdated": "設定檔已成功更新",
|
||||
"settings_cyr2latProfileEdit": "編輯 Cyr2Lat 設定檔",
|
||||
"settings_cyr2latProfileDelete": "刪除 Cyr2Lat 設定檔",
|
||||
"settings_cyr2latProfileDeleted": "設定檔已成功刪除",
|
||||
"settings_cyr2latProfileDeleteDscr": "您確定要刪除設定檔 \"{name}\" 嗎?",
|
||||
"channels_channelUpdated": "频道 \"{name}\" 已更新",
|
||||
"@channels_channelUpdated": {
|
||||
"placeholders": {
|
||||
@@ -1937,6 +1943,13 @@
|
||||
"contact_settings": "联系人设置",
|
||||
"contact_teleLocSubtitle": "允许共享位置数据",
|
||||
"contact_telemetry": "遥测数据",
|
||||
"@settings_multiAck": {
|
||||
"placeholders": {
|
||||
"value": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"appSettings_maxRouteWeight": "最大路径重量",
|
||||
"appSettings_initialRouteWeightSubtitle": "新发现路径的初始重量",
|
||||
"appSettings_initialRouteWeight": "初始路线权重",
|
||||
@@ -1948,7 +1961,7 @@
|
||||
"appSettings_maxMessageRetries": "最大消息重试次数",
|
||||
"appSettings_maxMessageRetriesSubtitle": "在将消息标记为失败之前,允许尝试的次数",
|
||||
"path_routeWeight": "{weight}/{max}",
|
||||
"settings_multiAck": "多重ACK",
|
||||
"settings_multiAck": "多重ACK:{value}",
|
||||
"settings_telemetryModeUpdated": "遥测模式已更新",
|
||||
"map_showOverlaps": "重复键重叠",
|
||||
"map_runTraceWithReturnPath": "沿着相同的路径返回",
|
||||
|
||||
@@ -38,6 +38,42 @@ const Map<String, String> defaultCyr2LatCharMap = {
|
||||
'х': 'x',
|
||||
};
|
||||
|
||||
class Cyr2LatProfile {
|
||||
final String id;
|
||||
final String name;
|
||||
final Map<String, String> charMap;
|
||||
|
||||
Cyr2LatProfile({required this.id, required this.name, required this.charMap});
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {'id': id, 'name': name, 'char_map': charMap};
|
||||
}
|
||||
|
||||
factory Cyr2LatProfile.fromJson(Map<String, dynamic> json) {
|
||||
return Cyr2LatProfile(
|
||||
id: json['id'] as String,
|
||||
name: json['name'] as String,
|
||||
charMap:
|
||||
(json['char_map'] as Map?)?.map(
|
||||
(key, value) => MapEntry(key.toString(), value.toString()),
|
||||
) ??
|
||||
{},
|
||||
);
|
||||
}
|
||||
|
||||
Cyr2LatProfile copyWith({
|
||||
String? id,
|
||||
String? name,
|
||||
Map<String, String>? charMap,
|
||||
}) {
|
||||
return Cyr2LatProfile(
|
||||
id: id ?? this.id,
|
||||
name: name ?? this.name,
|
||||
charMap: charMap ?? this.charMap,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class AppSettings {
|
||||
static const Object _unset = Object();
|
||||
|
||||
@@ -82,7 +118,16 @@ class AppSettings {
|
||||
final String? translationModelSourceUrl;
|
||||
final String? translationSelectedModelId;
|
||||
final List<TranslationModelRecord> translationDownloadedModels;
|
||||
final Map<String, String> cyr2latCharMap;
|
||||
final List<Cyr2LatProfile> cyr2latProfiles;
|
||||
final String selectedCyr2latProfileId;
|
||||
|
||||
Map<String, String> get cyr2latCharMap {
|
||||
final profile = cyr2latProfiles.firstWhere(
|
||||
(p) => p.id == selectedCyr2latProfileId,
|
||||
orElse: () => cyr2latProfiles.first,
|
||||
);
|
||||
return profile.charMap;
|
||||
}
|
||||
|
||||
AppSettings({
|
||||
this.clearPathOnMaxRetry = false,
|
||||
@@ -126,12 +171,22 @@ class AppSettings {
|
||||
this.translationModelSourceUrl,
|
||||
this.translationSelectedModelId,
|
||||
List<TranslationModelRecord>? translationDownloadedModels,
|
||||
Map<String, String>? cyr2latCharMap,
|
||||
List<Cyr2LatProfile>? cyr2latProfiles,
|
||||
String? selectedCyr2latProfileId,
|
||||
}) : batteryChemistryByDeviceId = batteryChemistryByDeviceId ?? {},
|
||||
batteryChemistryByRepeaterId = batteryChemistryByRepeaterId ?? {},
|
||||
mutedChannels = mutedChannels ?? {},
|
||||
translationDownloadedModels = translationDownloadedModels ?? const [],
|
||||
cyr2latCharMap = cyr2latCharMap ?? defaultCyr2LatCharMap;
|
||||
cyr2latProfiles =
|
||||
cyr2latProfiles ??
|
||||
[
|
||||
Cyr2LatProfile(
|
||||
id: 'default',
|
||||
name: 'Default',
|
||||
charMap: defaultCyr2LatCharMap,
|
||||
),
|
||||
],
|
||||
selectedCyr2latProfileId = selectedCyr2latProfileId ?? 'default';
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
@@ -178,7 +233,10 @@ class AppSettings {
|
||||
'translation_downloaded_models': translationDownloadedModels
|
||||
.map((model) => model.toJson())
|
||||
.toList(),
|
||||
'cyr2lat_char_map': cyr2latCharMap,
|
||||
'cyr2lat_profiles': cyr2latProfiles
|
||||
.map((profile) => profile.toJson())
|
||||
.toList(),
|
||||
'selected_cyr2lat_profile_id': selectedCyr2latProfileId,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -266,11 +324,38 @@ class AppSettings {
|
||||
)
|
||||
.toList() ??
|
||||
const [],
|
||||
cyr2latCharMap:
|
||||
(json['cyr2lat_char_map'] as Map?)?.map(
|
||||
(key, value) => MapEntry(key.toString(), value.toString()),
|
||||
) ??
|
||||
defaultCyr2LatCharMap,
|
||||
cyr2latProfiles:
|
||||
(json['cyr2lat_profiles'] as List<dynamic>?)
|
||||
?.map(
|
||||
(entry) => Cyr2LatProfile.fromJson(
|
||||
Map<String, dynamic>.from(entry as Map),
|
||||
),
|
||||
)
|
||||
.toList() ??
|
||||
// Backward compatibility: if old cyr2lat_char_map exists, create a profile from it
|
||||
(json['cyr2lat_char_map'] != null
|
||||
? [
|
||||
Cyr2LatProfile(
|
||||
id: 'migrated',
|
||||
name: 'Migrated Profile',
|
||||
charMap:
|
||||
(json['cyr2lat_char_map'] as Map?)?.map(
|
||||
(key, value) =>
|
||||
MapEntry(key.toString(), value.toString()),
|
||||
) ??
|
||||
defaultCyr2LatCharMap,
|
||||
),
|
||||
]
|
||||
: [
|
||||
Cyr2LatProfile(
|
||||
id: 'default',
|
||||
name: 'Default',
|
||||
charMap: defaultCyr2LatCharMap,
|
||||
),
|
||||
]),
|
||||
selectedCyr2latProfileId:
|
||||
json['selected_cyr2lat_profile_id'] as String? ??
|
||||
(json['cyr2lat_char_map'] != null ? 'migrated' : 'default'),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -316,7 +401,8 @@ class AppSettings {
|
||||
Object? translationModelSourceUrl = _unset,
|
||||
Object? translationSelectedModelId = _unset,
|
||||
List<TranslationModelRecord>? translationDownloadedModels,
|
||||
Map<String, String>? cyr2latCharMap,
|
||||
List<Cyr2LatProfile>? cyr2latProfiles,
|
||||
String? selectedCyr2latProfileId,
|
||||
}) {
|
||||
return AppSettings(
|
||||
clearPathOnMaxRetry: clearPathOnMaxRetry ?? this.clearPathOnMaxRetry,
|
||||
@@ -380,7 +466,9 @@ class AppSettings {
|
||||
: translationSelectedModelId as String?,
|
||||
translationDownloadedModels:
|
||||
translationDownloadedModels ?? this.translationDownloadedModels,
|
||||
cyr2latCharMap: cyr2latCharMap ?? this.cyr2latCharMap,
|
||||
cyr2latProfiles: cyr2latProfiles ?? this.cyr2latProfiles,
|
||||
selectedCyr2latProfileId:
|
||||
selectedCyr2latProfileId ?? this.selectedCyr2latProfileId,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1262,6 +1262,7 @@ class AppSettingsScreen extends StatelessWidget {
|
||||
BuildContext context,
|
||||
AppSettingsService settingsService,
|
||||
) {
|
||||
final selectedProfile = settingsService.getSelectedCyr2LatProfile();
|
||||
return Card(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
@@ -1273,41 +1274,109 @@ class AppSettingsScreen extends StatelessWidget {
|
||||
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
|
||||
),
|
||||
),
|
||||
ListTile(
|
||||
leading: const Icon(Icons.translate),
|
||||
|
||||
title: Text(context.l10n.channels_cyr2latSettingsSubheading),
|
||||
subtitle: Text(context.l10n.channels_cyr2latSettingsDscr),
|
||||
trailing: const Icon(Icons.chevron_right),
|
||||
onTap: () => _showCyr2LatDialog(context, settingsService),
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(16, 0, 16, 8),
|
||||
child: DropdownButtonFormField<String>(
|
||||
initialValue: settingsService.settings.selectedCyr2latProfileId,
|
||||
decoration: InputDecoration(
|
||||
labelText: context.l10n.channels_cyr2latSettingsSubheading,
|
||||
border: const OutlineInputBorder(),
|
||||
),
|
||||
items: settingsService.settings.cyr2latProfiles.map((profile) {
|
||||
return DropdownMenuItem(
|
||||
value: profile.id,
|
||||
child: Text(profile.name),
|
||||
);
|
||||
}).toList(),
|
||||
onChanged: (value) {
|
||||
if (value != null) {
|
||||
settingsService.setSelectedCyr2LatProfile(value);
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(16, 0, 16, 16),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: OutlinedButton.icon(
|
||||
onPressed: () =>
|
||||
_showAddCyr2LatProfileDialog(context, settingsService),
|
||||
icon: const Icon(Icons.add),
|
||||
label: Text(context.l10n.common_add),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
Expanded(
|
||||
child: OutlinedButton.icon(
|
||||
onPressed: () => _showEditCyr2LatProfileDialog(
|
||||
context,
|
||||
settingsService,
|
||||
selectedProfile,
|
||||
),
|
||||
icon: const Icon(Icons.edit),
|
||||
label: Text(context.l10n.common_edit),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
Expanded(
|
||||
child: OutlinedButton.icon(
|
||||
onPressed:
|
||||
settingsService.settings.cyr2latProfiles.length > 1
|
||||
? () => _showDeleteCyr2LatProfileDialog(
|
||||
context,
|
||||
settingsService,
|
||||
selectedProfile,
|
||||
)
|
||||
: null,
|
||||
icon: const Icon(Icons.delete),
|
||||
label: Text(context.l10n.common_delete),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void _showCyr2LatDialog(
|
||||
void _showAddCyr2LatProfileDialog(
|
||||
BuildContext context,
|
||||
AppSettingsService settingsService,
|
||||
) {
|
||||
final controller = TextEditingController(
|
||||
text: const JsonEncoder.withIndent(
|
||||
' ',
|
||||
).convert(settingsService.settings.cyr2latCharMap),
|
||||
final nameController = TextEditingController();
|
||||
final jsonController = TextEditingController(
|
||||
text: const JsonEncoder.withIndent(' ').convert(defaultCyr2LatCharMap),
|
||||
);
|
||||
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: Text(context.l10n.channels_cyr2latSettingsDscr),
|
||||
title: Text(context.l10n.settings_cyr2latProfileAdd),
|
||||
content: SingleChildScrollView(
|
||||
child: TextField(
|
||||
controller: controller,
|
||||
maxLines: 20,
|
||||
decoration: InputDecoration(
|
||||
border: const OutlineInputBorder(),
|
||||
hintText: context.l10n.channels_cyr2latSettingsDialogHint,
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
TextField(
|
||||
controller: nameController,
|
||||
decoration: InputDecoration(
|
||||
labelText: context.l10n.settings_cyr2latProfileName,
|
||||
border: const OutlineInputBorder(),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
TextField(
|
||||
controller: jsonController,
|
||||
maxLines: 15,
|
||||
decoration: InputDecoration(
|
||||
labelText: context.l10n.channels_cyr2latSettingsDialogHint,
|
||||
border: const OutlineInputBorder(),
|
||||
hintText: context.l10n.channels_cyr2latSettingsDscr,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
@@ -1316,23 +1385,31 @@ class AppSettingsScreen extends StatelessWidget {
|
||||
child: Text(context.l10n.common_cancel),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
onPressed: () async {
|
||||
if (nameController.text.isEmpty) {
|
||||
showDismissibleSnackBar(
|
||||
context,
|
||||
content: Text(context.l10n.settings_cyr2latProfileNameEmpty),
|
||||
);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
final json =
|
||||
jsonDecode(controller.text) as Map<String, dynamic>;
|
||||
jsonDecode(jsonController.text) as Map<String, dynamic>;
|
||||
final map = json.map(
|
||||
(key, value) => MapEntry(key, value.toString()),
|
||||
);
|
||||
final newSettings = settingsService.settings.copyWith(
|
||||
cyr2latCharMap: map,
|
||||
final profile = Cyr2LatProfile(
|
||||
id: DateTime.now().millisecondsSinceEpoch.toString(),
|
||||
name: nameController.text,
|
||||
charMap: map,
|
||||
);
|
||||
settingsService.updateSettings(newSettings);
|
||||
await settingsService.addCyr2LatProfile(profile);
|
||||
if (!context.mounted) return;
|
||||
Navigator.pop(context);
|
||||
showDismissibleSnackBar(
|
||||
context,
|
||||
content: Text(
|
||||
context.l10n.channels_cyr2latSettingsDialogSuccess,
|
||||
),
|
||||
content: Text(context.l10n.settings_cyr2latProfileAdded),
|
||||
);
|
||||
} catch (e) {
|
||||
showDismissibleSnackBar(
|
||||
@@ -1347,21 +1424,126 @@ class AppSettingsScreen extends StatelessWidget {
|
||||
},
|
||||
child: Text(context.l10n.common_save),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void _showEditCyr2LatProfileDialog(
|
||||
BuildContext context,
|
||||
AppSettingsService settingsService,
|
||||
Cyr2LatProfile profile,
|
||||
) {
|
||||
final nameController = TextEditingController(text: profile.name);
|
||||
final jsonController = TextEditingController(
|
||||
text: const JsonEncoder.withIndent(' ').convert(profile.charMap),
|
||||
);
|
||||
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: Text(context.l10n.settings_cyr2latProfileEdit),
|
||||
content: SingleChildScrollView(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
TextField(
|
||||
controller: nameController,
|
||||
decoration: InputDecoration(
|
||||
labelText: context.l10n.settings_cyr2latProfileName,
|
||||
border: const OutlineInputBorder(),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
TextField(
|
||||
controller: jsonController,
|
||||
maxLines: 15,
|
||||
decoration: InputDecoration(
|
||||
labelText: context.l10n.channels_cyr2latSettingsDialogHint,
|
||||
border: const OutlineInputBorder(),
|
||||
hintText: context.l10n.channels_cyr2latSettingsDscr,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
final newSettings = settingsService.settings.copyWith(
|
||||
cyr2latCharMap: defaultCyr2LatCharMap,
|
||||
);
|
||||
settingsService.updateSettings(newSettings);
|
||||
onPressed: () => Navigator.pop(context),
|
||||
child: Text(context.l10n.common_cancel),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
if (nameController.text.isEmpty) {
|
||||
showDismissibleSnackBar(
|
||||
context,
|
||||
content: Text(context.l10n.settings_cyr2latProfileNameEmpty),
|
||||
);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
final json =
|
||||
jsonDecode(jsonController.text) as Map<String, dynamic>;
|
||||
final map = json.map(
|
||||
(key, value) => MapEntry(key, value.toString()),
|
||||
);
|
||||
final updatedProfile = profile.copyWith(
|
||||
name: nameController.text,
|
||||
charMap: map,
|
||||
);
|
||||
await settingsService.updateCyr2LatProfile(updatedProfile);
|
||||
if (!context.mounted) return;
|
||||
Navigator.pop(context);
|
||||
showDismissibleSnackBar(
|
||||
context,
|
||||
content: Text(context.l10n.settings_cyr2latProfileUpdated),
|
||||
);
|
||||
} catch (e) {
|
||||
showDismissibleSnackBar(
|
||||
context,
|
||||
content: Text(
|
||||
context.l10n.channels_cyr2latSettingsDialogWrongJSON(
|
||||
e.toString(),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
child: Text(context.l10n.common_save),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void _showDeleteCyr2LatProfileDialog(
|
||||
BuildContext context,
|
||||
AppSettingsService settingsService,
|
||||
Cyr2LatProfile profile,
|
||||
) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: Text(context.l10n.settings_cyr2latProfileDelete),
|
||||
content: Text(
|
||||
context.l10n.settings_cyr2latProfileDeleteDscr(profile.name),
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Navigator.pop(context),
|
||||
child: Text(context.l10n.common_cancel),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
await settingsService.removeCyr2LatProfile(profile.id);
|
||||
if (!context.mounted) return;
|
||||
Navigator.pop(context);
|
||||
showDismissibleSnackBar(
|
||||
context,
|
||||
content: Text(
|
||||
context.l10n.channels_cyr2latSettingsDialogResetted,
|
||||
),
|
||||
content: Text(context.l10n.settings_cyr2latProfileDeleted),
|
||||
);
|
||||
},
|
||||
child: Text(context.l10n.channels_cyr2latSettingsDialogReset),
|
||||
child: Text(context.l10n.common_delete),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -1401,10 +1401,17 @@ class _ChannelsScreenState extends State<ChannelsScreen>
|
||||
MeshCoreConnector connector,
|
||||
Channel channel,
|
||||
) {
|
||||
final appSettingsService = Provider.of<AppSettingsService>(
|
||||
context,
|
||||
listen: false,
|
||||
);
|
||||
final nameController = TextEditingController(text: channel.name);
|
||||
final pskController = TextEditingController(text: channel.pskHex);
|
||||
bool smazEnabled = connector.isChannelSmazEnabled(channel.index);
|
||||
bool cyr2latEnabled = connector.isChannelCyr2LatEnabled(channel.index);
|
||||
String? selectedCyr2LatProfileId = connector.getChannelCyr2LatProfileId(
|
||||
channel.index,
|
||||
);
|
||||
|
||||
showDialog(
|
||||
context: context,
|
||||
@@ -1471,6 +1478,31 @@ class _ChannelsScreenState extends State<ChannelsScreen>
|
||||
}
|
||||
}),
|
||||
),
|
||||
if (cyr2latEnabled) ...[
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(0, 8, 0, 8),
|
||||
child: DropdownButtonFormField<String>(
|
||||
initialValue: selectedCyr2LatProfileId,
|
||||
decoration: InputDecoration(
|
||||
labelText: dialogContext
|
||||
.l10n
|
||||
.channels_cyr2latSettingsSubheading,
|
||||
border: const OutlineInputBorder(),
|
||||
),
|
||||
items: appSettingsService.settings.cyr2latProfiles.map((
|
||||
profile,
|
||||
) {
|
||||
return DropdownMenuItem(
|
||||
value: profile.id,
|
||||
child: Text(profile.name),
|
||||
);
|
||||
}).toList(),
|
||||
onChanged: (value) => setState(() {
|
||||
selectedCyr2LatProfileId = value;
|
||||
}),
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -1506,6 +1538,10 @@ class _ChannelsScreenState extends State<ChannelsScreen>
|
||||
channel.index,
|
||||
cyr2latEnabled,
|
||||
);
|
||||
await connector.setChannelCyr2LatProfileId(
|
||||
channel.index,
|
||||
selectedCyr2LatProfileId,
|
||||
);
|
||||
if (!context.mounted) return;
|
||||
showDismissibleSnackBar(
|
||||
context,
|
||||
|
||||
@@ -1211,6 +1211,10 @@ class _ChatScreenState extends State<ChatScreen> {
|
||||
|
||||
void _showContactSettings(BuildContext context) {
|
||||
final connector = Provider.of<MeshCoreConnector>(context, listen: false);
|
||||
final appSettingsService = Provider.of<AppSettingsService>(
|
||||
context,
|
||||
listen: false,
|
||||
);
|
||||
connector.ensureContactSmazSettingLoaded(widget.contact.publicKeyHex);
|
||||
connector.ensureContactCyr2LatSettingLoaded(widget.contact.publicKeyHex);
|
||||
final contact = widget.contact;
|
||||
@@ -1218,6 +1222,9 @@ class _ChatScreenState extends State<ChatScreen> {
|
||||
bool cyr2latEnabled = connector.isContactCyr2LatEnabled(
|
||||
contact.publicKeyHex,
|
||||
);
|
||||
String? selectedCyr2LatProfileId = connector.getContactCyr2LatProfileId(
|
||||
contact.publicKeyHex,
|
||||
);
|
||||
bool teleBaseEnabled = contact.teleBaseEnabled;
|
||||
bool teleLocEnabled = contact.teleLocEnabled;
|
||||
bool teleEnvEnabled = contact.teleEnvEnabled;
|
||||
@@ -1283,6 +1290,36 @@ class _ChatScreenState extends State<ChatScreen> {
|
||||
});
|
||||
},
|
||||
),
|
||||
if (cyr2latEnabled) ...[
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(0, 8, 0, 8),
|
||||
child: DropdownButtonFormField<String>(
|
||||
initialValue: selectedCyr2LatProfileId,
|
||||
decoration: InputDecoration(
|
||||
labelText:
|
||||
context.l10n.channels_cyr2latSettingsSubheading,
|
||||
border: const OutlineInputBorder(),
|
||||
),
|
||||
items: appSettingsService.settings.cyr2latProfiles.map((
|
||||
profile,
|
||||
) {
|
||||
return DropdownMenuItem(
|
||||
value: profile.id,
|
||||
child: Text(profile.name),
|
||||
);
|
||||
}).toList(),
|
||||
onChanged: (value) {
|
||||
connector.setContactCyr2LatProfileId(
|
||||
contact.publicKeyHex,
|
||||
value,
|
||||
);
|
||||
setDialogState(() {
|
||||
selectedCyr2LatProfileId = value;
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
const Divider(height: 8),
|
||||
SwitchListTile(
|
||||
contentPadding: EdgeInsets.zero,
|
||||
|
||||
@@ -260,4 +260,56 @@ class AppSettingsService extends ChangeNotifier {
|
||||
_settings.copyWith(translationDownloadedModels: value),
|
||||
);
|
||||
}
|
||||
|
||||
Cyr2LatProfile getSelectedCyr2LatProfile() {
|
||||
return _settings.cyr2latProfiles.firstWhere(
|
||||
(p) => p.id == _settings.selectedCyr2latProfileId,
|
||||
orElse: () => _settings.cyr2latProfiles.first,
|
||||
);
|
||||
}
|
||||
|
||||
Cyr2LatProfile? getCyr2LatProfileById(String profileId) {
|
||||
return _settings.cyr2latProfiles.cast<Cyr2LatProfile?>().firstWhere(
|
||||
(p) => p?.id == profileId,
|
||||
orElse: () => null,
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> setSelectedCyr2LatProfile(String profileId) async {
|
||||
await updateSettings(
|
||||
_settings.copyWith(selectedCyr2latProfileId: profileId),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> addCyr2LatProfile(Cyr2LatProfile profile) async {
|
||||
final updated = List<Cyr2LatProfile>.from(_settings.cyr2latProfiles)
|
||||
..add(profile);
|
||||
await updateSettings(_settings.copyWith(cyr2latProfiles: updated));
|
||||
}
|
||||
|
||||
Future<void> updateCyr2LatProfile(Cyr2LatProfile updatedProfile) async {
|
||||
final updated = _settings.cyr2latProfiles
|
||||
.map((p) => p.id == updatedProfile.id ? updatedProfile : p)
|
||||
.toList();
|
||||
await updateSettings(_settings.copyWith(cyr2latProfiles: updated));
|
||||
}
|
||||
|
||||
Future<void> removeCyr2LatProfile(String profileId) async {
|
||||
if (_settings.cyr2latProfiles.length <= 1) {
|
||||
return; // Don't remove the last profile
|
||||
}
|
||||
final updated = _settings.cyr2latProfiles
|
||||
.where((p) => p.id != profileId)
|
||||
.toList();
|
||||
var newSelectedId = _settings.selectedCyr2latProfileId;
|
||||
if (newSelectedId == profileId) {
|
||||
newSelectedId = updated.first.id;
|
||||
}
|
||||
await updateSettings(
|
||||
_settings.copyWith(
|
||||
cyr2latProfiles: updated,
|
||||
selectedCyr2latProfileId: newSelectedId,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,20 +58,7 @@ class ChannelSettingsStore {
|
||||
}
|
||||
final prefs = PrefsManager.instance;
|
||||
final key = '$keyForCyr2Lat$channelIndex';
|
||||
final oldKey = '$_cyr2latKeyPrefix$channelIndex';
|
||||
bool? enabled = prefs.getBool(key);
|
||||
if (enabled == null) {
|
||||
// Attempt migration from legacy unscoped key on first load
|
||||
enabled = prefs.getBool(oldKey);
|
||||
prefs.remove(oldKey);
|
||||
if (enabled != null) {
|
||||
appLogger.info(
|
||||
'Migrating channel Cyr2Lat settings from legacy key $oldKey to scoped key $key',
|
||||
);
|
||||
await prefs.setBool(key, enabled);
|
||||
}
|
||||
}
|
||||
return enabled ?? false;
|
||||
return prefs.getBool(key) ?? false;
|
||||
}
|
||||
|
||||
Future<void> saveCyr2LatEnabled(int channelIndex, bool enabled) async {
|
||||
@@ -85,4 +72,32 @@ class ChannelSettingsStore {
|
||||
final key = '$keyForCyr2Lat$channelIndex';
|
||||
await prefs.setBool(key, enabled);
|
||||
}
|
||||
|
||||
Future<String?> loadCyr2LatProfileId(int channelIndex) async {
|
||||
if (publicKeyHex.isEmpty) {
|
||||
appLogger.warn(
|
||||
'Public key hex is not set. Cannot load channel settings.',
|
||||
);
|
||||
return null;
|
||||
}
|
||||
final prefs = PrefsManager.instance;
|
||||
final key = '${keyForCyr2Lat}profile_$channelIndex';
|
||||
return prefs.getString(key);
|
||||
}
|
||||
|
||||
Future<void> saveCyr2LatProfileId(int channelIndex, String? profileId) async {
|
||||
if (publicKeyHex.isEmpty) {
|
||||
appLogger.warn(
|
||||
'Public key hex is not set. Cannot save channel settings.',
|
||||
);
|
||||
return;
|
||||
}
|
||||
final prefs = PrefsManager.instance;
|
||||
final key = '${keyForCyr2Lat}profile_$channelIndex';
|
||||
if (profileId == null) {
|
||||
await prefs.remove(key);
|
||||
} else {
|
||||
await prefs.setString(key, profileId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,19 +58,6 @@ class ContactSettingsStore {
|
||||
}
|
||||
final prefs = PrefsManager.instance;
|
||||
final key = '$keyForCyr2Lat$contactKeyHex';
|
||||
final oldKey = '$_cyr2latKeyPrefix$contactKeyHex';
|
||||
bool? enabled = prefs.getBool(key);
|
||||
if (enabled == null) {
|
||||
// Attempt migration from legacy unscoped key on first load
|
||||
enabled = prefs.getBool(oldKey);
|
||||
prefs.remove(oldKey);
|
||||
if (enabled != null) {
|
||||
appLogger.info(
|
||||
'Migrating contact Cyr2Lat settings from legacy key $oldKey to scoped key $key',
|
||||
);
|
||||
await prefs.setBool(key, enabled);
|
||||
}
|
||||
}
|
||||
return prefs.getBool(key) ?? false;
|
||||
}
|
||||
|
||||
@@ -85,4 +72,35 @@ class ContactSettingsStore {
|
||||
final key = '$keyForCyr2Lat$contactKeyHex';
|
||||
await prefs.setBool(key, enabled);
|
||||
}
|
||||
|
||||
Future<String?> loadCyr2LatProfileId(String contactKeyHex) async {
|
||||
if (publicKeyHex.isEmpty) {
|
||||
appLogger.warn(
|
||||
'Public key hex is not set. Cannot load contact settings.',
|
||||
);
|
||||
return null;
|
||||
}
|
||||
final prefs = PrefsManager.instance;
|
||||
final key = '${keyForCyr2Lat}profile_$contactKeyHex';
|
||||
return prefs.getString(key);
|
||||
}
|
||||
|
||||
Future<void> saveCyr2LatProfileId(
|
||||
String contactKeyHex,
|
||||
String? profileId,
|
||||
) async {
|
||||
if (publicKeyHex.isEmpty) {
|
||||
appLogger.warn(
|
||||
'Public key hex is not set. Cannot save contact settings.',
|
||||
);
|
||||
return;
|
||||
}
|
||||
final prefs = PrefsManager.instance;
|
||||
final key = '${keyForCyr2Lat}profile_$contactKeyHex';
|
||||
if (profileId == null) {
|
||||
await prefs.remove(key);
|
||||
} else {
|
||||
await prefs.setString(key, profileId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user