diff --git a/.github/workflows/docker_prod.yml b/.github/workflows/docker_prod.yml index 6b5e7709..cdad6b35 100755 --- a/.github/workflows/docker_prod.yml +++ b/.github/workflows/docker_prod.yml @@ -13,7 +13,7 @@ on: release: types: [published] tags: - - '*.*.*' + - '*.[1-9]+[0-9]?.[1-9]+*' jobs: docker: runs-on: ubuntu-latest diff --git a/docker-compose.yml b/docker-compose.yml index 38bd6918..3371daa1 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -54,6 +54,7 @@ services: - ${DEV_LOCATION}/front/report.php:/home/pi/pialert/front/report.php - ${DEV_LOCATION}/front/workflows.php:/home/pi/pialert/front/workflows.php - ${DEV_LOCATION}/front/appEventsCore.php:/home/pi/pialert/front/appEventsCore.php + - ${DEV_LOCATION}/front/multiEditCore.php:/home/pi/pialert/front/multiEditCore.php - ${DEV_LOCATION}/front/donations.php:/home/pi/pialert/front/donations.php - ${DEV_LOCATION}/front/plugins:/home/pi/pialert/front/plugins # DELETE END anyone trying to use this file: comment out / delete ABOVE lines, they are only for development purposes diff --git a/front/css/pialert.css b/front/css/pialert.css index a7d4bb69..8cfd885f 100755 --- a/front/css/pialert.css +++ b/front/css/pialert.css @@ -1030,6 +1030,31 @@ input[readonly] { z-index: 100; } +/* Multi-edit adjustements */ +.box-header +{ + min-height: 55px; +} + +.red-hover-border:hover +{ + border-color: red !important; + border-width: 1px; + border-style: solid; + +} + +.red-hover-background:hover +{ + background-color: red !important; +} + +#multi-edit-form .form-group +{ + height: 45px; + +} + /* ----------------------------------------------------------------------------- Donations ----------------------------------------------------------------------------- */ diff --git a/front/deviceDetails.php b/front/deviceDetails.php index a40730b7..afb3e0b6 100755 --- a/front/deviceDetails.php +++ b/front/deviceDetails.php @@ -1471,23 +1471,7 @@ function setDeviceData (direction='', refreshCallback='') { }); } -// -------------------------------------------------------- -// Calls a backend function to add a front-end event to an execution queue -function updateApi() -{ - // value has to be in format event|param. e.g. run|ARPSCAN - action = `update_api|devices,appevents` - - $.ajax({ - method: "POST", - url: "php/server/util.php", - data: { function: "addToExecutionQueue", action: action }, - success: function(data, textStatus) { - console.log(data) - } - }) -} // ----------------------------------------------------------------------------- diff --git a/front/devices.php b/front/devices.php index a56b29b1..70d8fbec 100755 --- a/front/devices.php +++ b/front/devices.php @@ -120,7 +120,7 @@
= lang('Device_MultiEdit_Backup');?>
+devices.csv backup via the CSV Export feature under the Backup / Restore tab.",
+ "Device_MultiEdit_Fields": "Editable fields:",
+ "Device_MultiEdit_Tooltip": "Careful. Clicking this will apply the value on the left to all devices selected above.",
"Device_Searchbox": "Search",
"Device_Shortcut_AllDevices": "My Devices",
"Device_Shortcut_Archived": "Archived",
@@ -268,6 +272,7 @@
"Gen_Run": "Run",
"Gen_Save": "Save",
"Gen_Saved": "Saved",
+ "Gen_Selected_Devices": "Selected Devices:",
"Gen_Switch": "Switch",
"Gen_Upd": "Updated successfully",
"Gen_Upd_Fail": "Update failed",
diff --git a/front/php/templates/language/es_es.json b/front/php/templates/language/es_es.json
index a21eb0f9..b81222be 100755
--- a/front/php/templates/language/es_es.json
+++ b/front/php/templates/language/es_es.json
@@ -185,6 +185,10 @@
"DevDetail_button_OverwriteIcons_Warning": "\u00bfSobreescribir todos los iconos de todos los dispositivos con el mismo tipo que el dispositivo actual?",
"DevDetail_button_Reset": "Restablecer cambios",
"DevDetail_button_Save": "Guardar",
+ "Device_MultiEdit": "",
+ "Device_MultiEdit_Backup": "",
+ "Device_MultiEdit_Fields": "",
+ "Device_MultiEdit_Tooltip": "",
"Device_Searchbox": "B\u00fasqueda",
"Device_Shortcut_AllDevices": "Mis dispositivos",
"Device_Shortcut_Archived": "Archivado(s)",
@@ -278,6 +282,7 @@
"Gen_Run": "Ejecutar",
"Gen_Save": "Guardar",
"Gen_Saved": "Guardado",
+ "Gen_Selected_Devices": "",
"Gen_Switch": "Cambiar",
"Gen_Upd": "Actualizado correctamente",
"Gen_Upd_Fail": "Fallo al actualizar",
diff --git a/front/php/templates/language/fr_fr.json b/front/php/templates/language/fr_fr.json
index 640bcf60..c0d00045 100755
--- a/front/php/templates/language/fr_fr.json
+++ b/front/php/templates/language/fr_fr.json
@@ -175,6 +175,10 @@
"DevDetail_button_OverwriteIcons_Warning": "",
"DevDetail_button_Reset": "",
"DevDetail_button_Save": "Enregistrer",
+ "Device_MultiEdit": "",
+ "Device_MultiEdit_Backup": "",
+ "Device_MultiEdit_Fields": "",
+ "Device_MultiEdit_Tooltip": "",
"Device_Searchbox": "Rechercher",
"Device_Shortcut_AllDevices": "Tous les appareils",
"Device_Shortcut_Archived": "Archiv\u00e9",
@@ -268,6 +272,7 @@
"Gen_Run": "Lancer",
"Gen_Save": "Enregistrer",
"Gen_Saved": "Enregistr\u00e9",
+ "Gen_Selected_Devices": "",
"Gen_Switch": "Basculer",
"Gen_Upd": "",
"Gen_Upd_Fail": "",
diff --git a/front/php/templates/language/nb_no.json b/front/php/templates/language/nb_no.json
index e3757ebc..92399f78 100755
--- a/front/php/templates/language/nb_no.json
+++ b/front/php/templates/language/nb_no.json
@@ -175,6 +175,10 @@
"DevDetail_button_OverwriteIcons_Warning": "",
"DevDetail_button_Reset": "",
"DevDetail_button_Save": "",
+ "Device_MultiEdit": "",
+ "Device_MultiEdit_Backup": "",
+ "Device_MultiEdit_Fields": "",
+ "Device_MultiEdit_Tooltip": "",
"Device_Searchbox": "",
"Device_Shortcut_AllDevices": "",
"Device_Shortcut_Archived": "",
@@ -268,6 +272,7 @@
"Gen_Run": "",
"Gen_Save": "",
"Gen_Saved": "",
+ "Gen_Selected_Devices": "",
"Gen_Switch": "",
"Gen_Upd": "",
"Gen_Upd_Fail": "",
diff --git a/front/php/templates/language/ru_ru.json b/front/php/templates/language/ru_ru.json
old mode 100644
new mode 100755
index 4942bb18..7962d94d
--- a/front/php/templates/language/ru_ru.json
+++ b/front/php/templates/language/ru_ru.json
@@ -1,74 +1,74 @@
{
- "API_CUSTOM_SQL_description": "Вы можете указать пользовательский SQL-запрос, который будет генерировать файл JSON, а затем выдать его через table_custom_endpoint.json file endpoint.",
- "API_CUSTOM_SQL_name": "Пользовательская конечная точка",
+ "API_CUSTOM_SQL_description": "\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 SQL-\u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b JSON, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 table_custom_endpoint.json file endpoint.",
+ "API_CUSTOM_SQL_name": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430",
"API_display_name": "API",
"API_icon": "",
- "About_Design": "Разработан:",
- "About_Exit": "Зарегистрироваться",
- "About_Title": "Сетевая защита с открытым исходным кодом",
- "AppEvents_DateTimeCreated": "Журнал",
- "AppEvents_Extra": "Дополнительно",
- "AppEvents_GUID": "GUID события приложения",
- "AppEvents_Helper1": "Помощник 1",
- "AppEvents_Helper2": "Помощник 2",
- "AppEvents_Helper3": "Помощник 3",
- "AppEvents_ObjectForeignKey": "Внешний ключ",
- "AppEvents_ObjectIndex": "Индекс",
- "AppEvents_ObjectIsArchived": "Архивировано (во время входа в систему)",
- "AppEvents_ObjectIsNew": "Новый (во время входа в систему)",
- "AppEvents_ObjectPlugin": "Связанный плагин",
- "AppEvents_ObjectPrimaryID": "Первичный ID",
- "AppEvents_ObjectSecondaryID": "Вторичный ID",
- "AppEvents_ObjectStatus": "Состояние (во время входа в систему)",
- "AppEvents_ObjectStatusColumn": "Колонка состояния",
- "AppEvents_ObjectType": "Тип объекта",
- "AppEvents_Plugin": "Плагин",
- "AppEvents_Type": "Тип",
- "BackDevDetail_Actions_Ask_Run": "Вы хотите выполнить действие?",
- "BackDevDetail_Actions_Not_Registered": "Действие не зарегистрировано:· ",
- "BackDevDetail_Actions_Title_Run": "Запустить действие",
- "BackDevDetail_Copy_Ask": "Копировать данные с устройства из выпадающего списка (все на этой странице будет перезаписано)?",
- "BackDevDetail_Copy_Title": "Копировать детали",
- "BackDevDetail_Tools_WOL_error": "Команда НЕ была выполнена.",
- "BackDevDetail_Tools_WOL_okay": "Команда была выполнена.",
- "BackDevices_Arpscan_disabled": "Arp сканирование запрещено",
- "BackDevices_Arpscan_enabled": "Arp сканирование разрешено",
- "BackDevices_Backup_CopError": "Оригинальную базу данных не удалось сохранить.",
- "BackDevices_Backup_Failed": "Резервное копирование выполнено частично. Архив не может быть создан или пуст.",
- "BackDevices_Backup_okay": "Резервное копирование успешно выполнено с новым архивом",
- "BackDevices_DBTools_DelDevError_a": "Ошибка удаления устройства",
- "BackDevices_DBTools_DelDevError_b": "Ошибка удаления устройств",
- "BackDevices_DBTools_DelDev_a": "Устройство удалено",
- "BackDevices_DBTools_DelDev_b": "Устройства удалены",
- "BackDevices_DBTools_DelEvents": "События удалены",
- "BackDevices_DBTools_DelEventsError": "Ошибка удаления событий",
- "BackDevices_DBTools_ImportCSV": "Устройства из файла CSV были успешно импортированы.",
- "BackDevices_DBTools_ImportCSVError": "Не удалось импортировать файл CSV. Убедитесь, что формат правильный.",
- "BackDevices_DBTools_ImportCSVMissing": "CSV-файл не найден в/config/devices.csv.",
- "BackDevices_DBTools_Purge": "Самые старые резервные копии были удалены",
- "BackDevices_DBTools_UpdDev": "Устройство успешно обновлено",
- "BackDevices_DBTools_UpdDevError": "Ошибка обновления устройства",
- "BackDevices_DBTools_Upgrade": "База данных успешно обновлена",
- "BackDevices_DBTools_UpgradeError": "Обновление базы данных не удалось",
- "BackDevices_Device_UpdDevError": "Ошибка обновления устройств. Повторите попытку позже. Вероятно, база данных заблокирована из-за текущей задачи.",
- "BackDevices_Restore_CopError": "Исходную базу данных сохранить не удалось.",
- "BackDevices_Restore_Failed": "Восстановление не удалось. Пожалуйста, восстановите резервную копию вручную.",
- "BackDevices_Restore_okay": "Восстановление выполнено успешно.",
- "BackDevices_darkmode_disabled": "Темный режим отключен",
- "BackDevices_darkmode_enabled": "Темный режим включен",
- "DAYS_TO_KEEP_EVENTS_description": "Это настройка обслуживания. Здесь указывается количество дней, в течение которых будут храниться записи о событиях. Все старые мероприятия будут периодически удаляться. Также применимо к истории событий плагина.",
- "DAYS_TO_KEEP_EVENTS_name": "Удалить события старше",
- "DevDetail_Copy_Device_Title": " Скопировать данные с устройства",
- "DevDetail_Copy_Device_Tooltip": "Скопируйте данные с устройства из раскрывающегося списка. Все на этой странице будет перезаписано",
- "DevDetail_EveandAl_AlertAllEvents": "Оповещение обо всех событиях",
- "DevDetail_EveandAl_AlertDown": "Оповещение о доступности",
- "DevDetail_EveandAl_Archived": "Архив",
- "DevDetail_EveandAl_NewDevice": "Новое устройство",
- "DevDetail_EveandAl_NewDevice_Tooltip": "Будет показывать статус «Новое» для устройства и включать его в списки, когда фильтр «Новые устройства» активен. Не влияет на уведомления.",
- "DevDetail_EveandAl_RandomMAC": "Случайный MAC-адрес",
- "DevDetail_EveandAl_ScanCycle": "Сканировать устройство",
- "DevDetail_EveandAl_ScanCycle_a": "Сканировать Устройство",
- "DevDetail_EveandAl_ScanCycle_z": "Не сканировать устройство",
+ "About_Design": "\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d:",
+ "About_Exit": "\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f",
+ "About_Title": "\u0421\u0435\u0442\u0435\u0432\u0430\u044f \u0437\u0430\u0449\u0438\u0442\u0430 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c",
+ "AppEvents_DateTimeCreated": "\u0416\u0443\u0440\u043d\u0430\u043b",
+ "AppEvents_Extra": "\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e",
+ "AppEvents_GUID": "GUID \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f",
+ "AppEvents_Helper1": "\u041f\u043e\u043c\u043e\u0449\u043d\u0438\u043a 1",
+ "AppEvents_Helper2": "\u041f\u043e\u043c\u043e\u0449\u043d\u0438\u043a 2",
+ "AppEvents_Helper3": "\u041f\u043e\u043c\u043e\u0449\u043d\u0438\u043a 3",
+ "AppEvents_ObjectForeignKey": "\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u043a\u043b\u044e\u0447",
+ "AppEvents_ObjectIndex": "\u0418\u043d\u0434\u0435\u043a\u0441",
+ "AppEvents_ObjectIsArchived": "\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043e (\u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u0445\u043e\u0434\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443)",
+ "AppEvents_ObjectIsNew": "\u041d\u043e\u0432\u044b\u0439 (\u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u0445\u043e\u0434\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443)",
+ "AppEvents_ObjectPlugin": "\u0421\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d",
+ "AppEvents_ObjectPrimaryID": "\u041f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 ID",
+ "AppEvents_ObjectSecondaryID": "\u0412\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 ID",
+ "AppEvents_ObjectStatus": "\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (\u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u0445\u043e\u0434\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443)",
+ "AppEvents_ObjectStatusColumn": "\u041a\u043e\u043b\u043e\u043d\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f",
+ "AppEvents_ObjectType": "\u0422\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430",
+ "AppEvents_Plugin": "\u041f\u043b\u0430\u0433\u0438\u043d",
+ "AppEvents_Type": "\u0422\u0438\u043f",
+ "BackDevDetail_Actions_Ask_Run": "\u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435?",
+ "BackDevDetail_Actions_Not_Registered": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e:\u00b7 ",
+ "BackDevDetail_Actions_Title_Run": "\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435",
+ "BackDevDetail_Copy_Ask": "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0437 \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 (\u0432\u0441\u0435 \u043d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e)?",
+ "BackDevDetail_Copy_Title": "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0438",
+ "BackDevDetail_Tools_WOL_error": "\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u041d\u0415 \u0431\u044b\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.",
+ "BackDevDetail_Tools_WOL_okay": "\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0431\u044b\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.",
+ "BackDevices_Arpscan_disabled": "Arp \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e",
+ "BackDevices_Arpscan_enabled": "Arp \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e",
+ "BackDevices_Backup_CopError": "\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c.",
+ "BackDevices_Backup_Failed": "\u0420\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e. \u0410\u0440\u0445\u0438\u0432 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d \u0438\u043b\u0438 \u043f\u0443\u0441\u0442.",
+ "BackDevices_Backup_okay": "\u0420\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u0441 \u043d\u043e\u0432\u044b\u043c \u0430\u0440\u0445\u0438\u0432\u043e\u043c",
+ "BackDevices_DBTools_DelDevError_a": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430",
+ "BackDevices_DBTools_DelDevError_b": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432",
+ "BackDevices_DBTools_DelDev_a": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u043e",
+ "BackDevices_DBTools_DelDev_b": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u044b",
+ "BackDevices_DBTools_DelEvents": "\u0421\u043e\u0431\u044b\u0442\u0438\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u044b",
+ "BackDevices_DBTools_DelEventsError": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439",
+ "BackDevices_DBTools_ImportCSV": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 CSV \u0431\u044b\u043b\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b.",
+ "BackDevices_DBTools_ImportCSVError": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b CSV. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439.",
+ "BackDevices_DBTools_ImportCSVMissing": "CSV-\u0444\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0432/config/devices.csv.",
+ "BackDevices_DBTools_Purge": "\u0421\u0430\u043c\u044b\u0435 \u0441\u0442\u0430\u0440\u044b\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0435 \u043a\u043e\u043f\u0438\u0438 \u0431\u044b\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u044b",
+ "BackDevices_DBTools_UpdDev": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043e",
+ "BackDevices_DBTools_UpdDevError": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430",
+ "BackDevices_DBTools_Upgrade": "\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430",
+ "BackDevices_DBTools_UpgradeError": "\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c",
+ "BackDevices_Device_UpdDevError": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0438\u0437-\u0437\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438.",
+ "BackDevices_Restore_CopError": "\u0418\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c.",
+ "BackDevices_Restore_Failed": "\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u0432\u0440\u0443\u0447\u043d\u0443\u044e.",
+ "BackDevices_Restore_okay": "\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e.",
+ "BackDevices_darkmode_disabled": "\u0422\u0435\u043c\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d",
+ "BackDevices_darkmode_enabled": "\u0422\u0435\u043c\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0432\u043a\u043b\u044e\u0447\u0435\u043d",
+ "DAYS_TO_KEEP_EVENTS_description": "\u042d\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f. \u0417\u0434\u0435\u0441\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u043d\u0435\u0439, \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445. \u0412\u0441\u0435 \u0441\u0442\u0430\u0440\u044b\u0435 \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c\u0441\u044f. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u043a \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043f\u043b\u0430\u0433\u0438\u043d\u0430.",
+ "DAYS_TO_KEEP_EVENTS_name": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441\u0442\u0430\u0440\u0448\u0435",
+ "DevDetail_Copy_Device_Title": " \u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430",
+ "DevDetail_Copy_Device_Tooltip": "\u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0437 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0441\u043f\u0438\u0441\u043a\u0430. \u0412\u0441\u0435 \u043d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e",
+ "DevDetail_EveandAl_AlertAllEvents": "\u041e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u043e \u0432\u0441\u0435\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445",
+ "DevDetail_EveandAl_AlertDown": "\u041e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438",
+ "DevDetail_EveandAl_Archived": "\u0410\u0440\u0445\u0438\u0432",
+ "DevDetail_EveandAl_NewDevice": "\u041d\u043e\u0432\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e",
+ "DevDetail_EveandAl_NewDevice_Tooltip": "\u0411\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u00ab\u041d\u043e\u0432\u043e\u0435\u00bb \u0434\u043b\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0441\u043f\u0438\u0441\u043a\u0438, \u043a\u043e\u0433\u0434\u0430 \u0444\u0438\u043b\u044c\u0442\u0440 \u00ab\u041d\u043e\u0432\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u00bb \u0430\u043a\u0442\u0438\u0432\u0435\u043d. \u041d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f.",
+ "DevDetail_EveandAl_RandomMAC": "\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 MAC-\u0430\u0434\u0440\u0435\u0441",
+ "DevDetail_EveandAl_ScanCycle": "\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e",
+ "DevDetail_EveandAl_ScanCycle_a": "\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e",
+ "DevDetail_EveandAl_ScanCycle_z": "\u041d\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e",
"DevDetail_EveandAl_Skip": "",
"DevDetail_EveandAl_Title": "",
"DevDetail_Events_CheckBox": "",
@@ -175,6 +175,10 @@
"DevDetail_button_OverwriteIcons_Warning": "",
"DevDetail_button_Reset": "",
"DevDetail_button_Save": "",
+ "Device_MultiEdit": "",
+ "Device_MultiEdit_Backup": "",
+ "Device_MultiEdit_Fields": "",
+ "Device_MultiEdit_Tooltip": "",
"Device_Searchbox": "",
"Device_Shortcut_AllDevices": "",
"Device_Shortcut_Archived": "",
@@ -268,6 +272,7 @@
"Gen_Run": "",
"Gen_Save": "",
"Gen_Saved": "",
+ "Gen_Selected_Devices": "",
"Gen_Switch": "",
"Gen_Upd": "",
"Gen_Upd_Fail": "",
@@ -635,4 +640,4 @@
"settings_system_label": "",
"test_event_icon": "",
"test_event_tooltip": ""
-}
+}
\ No newline at end of file