diff --git a/.gitignore b/.gitignore
index 933ebc9d..b2804d3f 100755
--- a/.gitignore
+++ b/.gitignore
@@ -21,3 +21,11 @@ __pycache__/
**/pialert.conf_bak
**/pialert.db_bak
.*.swp
+
+front/img/account/*
+**/account.php
+**/account.js
+front/css/account.css
+
+docker-compose.yml.ffsb42
+.env.omada.ffsb42
diff --git a/README.md b/README.md
index 09015925..cc4f7e47 100755
--- a/README.md
+++ b/README.md
@@ -92,7 +92,6 @@ Thank you to all the wonderful people who are sponsoring this project.
| All Sponsors |
|---|
-| [iptvcld](https://github.com/iptvcld) |
diff --git a/back/app.conf b/back/app.conf
index bfc6cc34..c122d021 100755
--- a/back/app.conf
+++ b/back/app.conf
@@ -17,7 +17,7 @@
# Scan multiple interfaces (eth1 and eth0):
# SCAN_SUBNETS = [ '192.168.1.0/24 --interface=eth1', '192.168.1.0/24 --interface=eth0' ]
-SCAN_SUBNETS=['192.168.1.0/24 --interface=eth1']
+SCAN_SUBNETS=['192.168.1.0/24 --interface=eth0']
TIMEZONE='Europe/Berlin'
LOADED_PLUGINS = ['ARPSCAN','CSVBCKP','DBCLNP', 'INTRNT','MAINT','NEWDEV','NSLOOKUP','NTFPRCS', 'PHOLUS','SETPWD','SMTP', 'SYNC', 'VNDRPDT', 'WORKFLOWS']
diff --git a/docker-compose.yml b/docker-compose.yml
index 06e13f02..8bb12e09 100755
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -54,6 +54,7 @@ services:
- ${DEV_LOCATION}/front/presence.php:/app/front/presence.php
- ${DEV_LOCATION}/front/settings.php:/app/front/settings.php
- ${DEV_LOCATION}/front/systeminfo.php:/app/front/systeminfo.php
+ - ${DEV_LOCATION}/front/account.php:/app/front/account.php
- ${DEV_LOCATION}/front/report.php:/app/front/report.php
- ${DEV_LOCATION}/front/workflows.php:/app/front/workflows.php
- ${DEV_LOCATION}/front/appEventsCore.php:/app/front/appEventsCore.php
diff --git a/front/deviceDetails.php b/front/deviceDetails.php
index 03c44d92..2847d15f 100755
--- a/front/deviceDetails.php
+++ b/front/deviceDetails.php
@@ -1149,7 +1149,7 @@ function initializeCalendar () {
} else {
setTimeout(() => {
updateIconPreview('#txtIcon')
- }, 100);
+ }, 500);
hideSpinner()
}
diff --git a/front/devices.php b/front/devices.php
index f5e8001a..092a845b 100755
--- a/front/devices.php
+++ b/front/devices.php
@@ -143,9 +143,23 @@
var tableOrder = [[3,'desc'], [0,'asc']];
var tableColumnHide = [];
+ var tableColumnOrder = [];
+ var tableColumnVisible = [];
- //initialize the table headers in the correct order
- var headersDefaultOrder = [
+
+
+
+ // Read parameters & Initialize components
+ callAfterAppInitialized(main)
+ showSpinner();
+
+
+
+// -----------------------------------------------------------------------------
+function main () {
+
+ //initialize the table headers in the correct order
+ var headersDefaultOrder = [
getString('Device_TableHead_Name'),
getString('Device_TableHead_Owner'),
getString('Device_TableHead_Type'),
@@ -173,16 +187,8 @@
// generate default order lists of given length
var columnsStr = JSON.stringify(Array.from({ length: headersDefaultOrder.length }, (_, i) => i));
- var tableColumnOrder = Array.from({ length: headersDefaultOrder.length }, (_, i) => i);
- var tableColumnVisible = tableColumnOrder;
-
- // Read parameters & Initialize components
- showSpinner();
- main();
-
-
-// -----------------------------------------------------------------------------
-function main () {
+ tableColumnOrder = Array.from({ length: headersDefaultOrder.length }, (_, i) => i);
+ tableColumnVisible = tableColumnOrder;
handleLoadingDialog()
diff --git a/front/js/common.js b/front/js/common.js
index d659ff71..20b5322b 100755
--- a/front/js/common.js
+++ b/front/js/common.js
@@ -10,9 +10,10 @@
// -----------------------------------------------------------------------------
var timerRefreshData = ''
-var emptyArr = ['undefined', "", undefined, null, 'null'];
-var UI_LANG = "English";
-var settingsJSON = {}
+var emptyArr = ['undefined', "", undefined, null, 'null'];
+var UI_LANG = "English";
+const allLanguages = ["en_us", "es_es", "de_de", "fr_fr", "it_it", "ru_ru", "nb_no", "pl_pl", "zh_cn"]; // needs to be same as in lang.php
+var settingsJSON = {}
// -----------------------------------------------------------------------------
@@ -207,98 +208,123 @@ function getSetting (key) {
// -----------------------------------------------------------------------------
// Get language string
// -----------------------------------------------------------------------------
-function cacheStrings()
-{
+function cacheStrings() {
return new Promise((resolve, reject) => {
- if(!getCache('completedCalls').includes('cacheStrings'))
- {
- // handle core strings and translations
- var allLanguages = ["en_us", "es_es", "de_de", "fr_fr", "it_it", "ru_ru", "nb_no", "pl_pl", "zh_cn"]; // needs to be same as in lang.php
-
- allLanguages.forEach(function (language_code) {
- $.get(`php/templates/language/${language_code}.json?nocache=${Date.now()}`, function (res) {
- // Iterate over each language
- Object.entries(res).forEach(([key, value]) => {
- // Store translations for each key-value pair
- setCache(`pia_lang_${key}_${language_code}`, value)
- });
-
- // handle strings and translations from plugins
- $.get(`api/table_plugins_language_strings.json?nocache=${Date.now()}`, function(res) {
-
- data = res["data"];
-
- data.forEach((langString) => {
- setCache(`pia_lang_${langString.String_Key}_${langString.Language_Code}`, langString.String_Value)
- });
- }).then(() => handleSuccess('cacheStrings', resolve())).catch(() => handleFailure('cacheStrings', reject("cacheStrings already completed"))); // handle AJAX synchronization
+
+ // Create a promise for each language
+ const languagePromises = allLanguages.map((language_code) => {
+ return new Promise((resolveLang, rejectLang) => {
+ // Fetch core strings and translations
+ $.get(`php/templates/language/${language_code}.json?nocache=${Date.now()}`)
+ .done((res) => {
+ // Iterate over each key-value pair and store the translations
+ Object.entries(res).forEach(([key, value]) => {
+ setCache(`pia_lang_${key}_${language_code}`, value);
+ });
+
+ // Fetch strings and translations from plugins
+ $.get(`api/table_plugins_language_strings.json?nocache=${Date.now()}`)
+ .done((pluginRes) => {
+ const data = pluginRes["data"];
+
+ // Store plugin translations
+ data.forEach((langString) => {
+ setCache(`pia_lang_${langString.String_Key}_${langString.Language_Code}`, langString.String_Value);
+ });
+
+ // Handle successful completion of language processing
+ handleSuccess(`cacheStrings[${language_code}]`, resolveLang);
+ })
+ .fail((pluginError) => {
+ // Handle failure in plugin strings fetching
+ rejectLang(pluginError);
+ });
+ })
+ .fail((error) => {
+ // Handle failure in core strings fetching
+ rejectLang(error);
+ });
});
});
- }
+
+ // Wait for all language promises to complete
+ Promise.all(languagePromises)
+ .then(() => {
+ // All languages processed successfully
+ resolve();
+ })
+ .catch((error) => {
+ // Handle failure in any of the language processing
+ handleFailure('cacheStrings', reject);
+ });
+
});
}
+// -----------------------------------------------------------------------------
// Get translated language string
-function getString (key) {
+function getString(key) {
- // handle initial load to make sure everything is set-up and cached
- handleFirstLoad(getString)
-
- UI_LANG = getSetting("UI_LANG");
+ function fetchString(key) {
+ UI_LANG = getSetting("UI_LANG");
- lang_code = 'en_us';
+ let lang_code = 'en_us';
- switch(UI_LANG)
- {
- case 'English':
- lang_code = 'en_us';
- break;
- case 'Spanish':
- lang_code = 'es_es';
- break;
- case 'German':
- lang_code = 'de_de';
- break;
- case 'French':
- lang_code = 'fr_fr';
- break;
- case 'Norwegian':
- lang_code = 'nb_no';
- break;
- case 'Polish (pl_pl)':
- lang_code = 'pl_pl';
- break;
- case 'Portuguese (pt_br)':
- lang_code = 'pt_br';
- break;
- case 'Turkish (tr_tr)':
- lang_code = 'tr_tr';
- break;
- case 'Italian (it_it)':
- lang_code = 'it_it';
- break;
- case 'Russian':
- lang_code = 'ru_ru';
- break;
- case 'Chinese (zh_cn)':
- lang_code = 'zh_cn';
- break;
- }
- result = getCache(`pia_lang_${key}_${lang_code}`, true);
+ switch (UI_LANG) {
+ case 'English':
+ lang_code = 'en_us';
+ break;
+ case 'Spanish':
+ lang_code = 'es_es';
+ break;
+ case 'German':
+ lang_code = 'de_de';
+ break;
+ case 'French':
+ lang_code = 'fr_fr';
+ break;
+ case 'Norwegian':
+ lang_code = 'nb_no';
+ break;
+ case 'Polish (pl_pl)':
+ lang_code = 'pl_pl';
+ break;
+ case 'Portuguese (pt_br)':
+ lang_code = 'pt_br';
+ break;
+ case 'Turkish (tr_tr)':
+ lang_code = 'tr_tr';
+ break;
+ case 'Italian (it_it)':
+ lang_code = 'it_it';
+ break;
+ case 'Russian':
+ lang_code = 'ru_ru';
+ break;
+ case 'Chinese (zh_cn)':
+ lang_code = 'zh_cn';
+ break;
+ }
+ let result = getCache(`pia_lang_${key}_${lang_code}`, true);
- if(isEmpty(result))
- {
- result = getCache(`pia_lang_${key}_en_us`, true);
+ if (isEmpty(result)) {
+ result = getCache(`pia_lang_${key}_en_us`, true);
+ }
+
+ return result;
}
- return result;
+ if (isAppInitialized()) {
+ return fetchString(key);
+ } else {
+ callAfterAppInitialized(() => fetchString(key));
+ }
}
-
// -----------------------------------------------------------------------------
// String utilities
// -----------------------------------------------------------------------------
@@ -334,6 +360,15 @@ function isValidBase64(str) {
}
+function isValidJSON(jsonString) {
+ try {
+ JSON.parse(jsonString);
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
// -----------------------------------------------------------------------------
// General utilities
// -----------------------------------------------------------------------------
@@ -835,7 +870,7 @@ function getDeviceDataByMac(macAddress, dbColumn) {
}
// -----------------------------------------------------------------------------
-// Cache teh devices as one JSON
+// Cache the devices as one JSON
function cacheDevices()
{
@@ -918,6 +953,8 @@ function showSpinner(stringKey='Loading')
text = getString(stringKey)
}
+ text = isEmpty(text) ? "Loading" : text;
+
if($("#loadingSpinner").length)
{
$("#loadingSpinner").show();
@@ -1102,6 +1139,8 @@ function arraysContainSameValues(arr1, arr2) {
const sessionStorageKey = "myScriptExecuted_common_js";
var completedCalls = []
var completedCalls_final = ['cacheSettings', 'cacheStrings', 'cacheDevices'];
+var completedCallsCount = 0;
+var completedCallsCount_final = allLanguages.length + 2; // number of language files + cacheDevices + cacheSettings
// -----------------------------------------------------------------------------
// Clearing all the caches
@@ -1139,10 +1178,24 @@ async function handleFirstLoad(callback) {
}
}
+// -----------------------------------------------------------------------------
+// Execute callback once app initialized
+function callAfterAppInitialized(callback) {
+ if (!isAppInitialized()) {
+ setTimeout(() => {
+ callAfterAppInitialized(callback)
+ }, 500);
+ } else
+ {
+ callback();
+ }
+}
+
// -----------------------------------------------------------------------------
// Check if the code has been executed before by checking sessionStorage
function isAppInitialized() {
- return arraysContainSameValues(getCache("completedCalls").split(',').filter(Boolean), completedCalls_final);
+ // return arraysContainSameValues(getCache("completedCalls").split(',').filter(Boolean), completedCalls_final);
+ return (parseInt(getCache("completedCallsCount")) == completedCallsCount_final);
}
// Define a function that will execute the code only once
@@ -1151,9 +1204,10 @@ async function executeOnce() {
if (!isAppInitialized()) {
try {
- await cacheStrings();
- await cacheSettings();
await cacheDevices();
+ await cacheSettings();
+ await cacheStrings();
+
console.log("✅ All AJAX callbacks have completed");
onAllCallsComplete();
} catch (error) {
@@ -1166,8 +1220,20 @@ async function executeOnce() {
// Function to handle successful completion of an AJAX call
const handleSuccess = (callName) => {
console.log(`AJAX call successful: ${callName}`);
- completedCalls.push(callName);
- setCache('completedCalls', mergeUniqueArrays(getCache('completedCalls').split(','), [callName]));
+ // completedCalls.push(callName);
+ // setCache('completedCalls', mergeUniqueArrays(getCache('completedCalls').split(','), [callName]));
+
+ val = getCache('completedCallsCount');
+
+ if(val == "")
+ {
+ val = 0;
+ } else
+ {
+ val = parseInt(val)
+ }
+
+ setCache('completedCallsCount', val + 1)
};
// -----------------------------------------------------------------------------
@@ -1190,6 +1256,10 @@ const onAllCallsComplete = () => {
sessionStorage.setItem(sessionStorageKey + '_time', millisecondsNow);
console.log('✔ Cache initialized');
+ // setTimeout(() => {
+ // location.reload()
+ // }, 10);
+
} else {
// If not all strings are initialized, retry initialization
console.log('❌ Not all strings are initialized. Retrying...');
@@ -1199,14 +1269,13 @@ const onAllCallsComplete = () => {
// Call any other initialization functions here if needed
- // No need for location.reload() here
};
// Function to check if all necessary strings are initialized
const areAllStringsInitialized = () => {
// Implement logic to check if all necessary strings are initialized
// Return true if all strings are initialized, false otherwise
- return getString('UI_LANG') != ""
+ return getString('UI_LANG_name') != ""
};
// Call the function to execute the code
diff --git a/front/js/db_methods.js b/front/js/db_methods.js
index 363f273f..c0373a99 100755
--- a/front/js/db_methods.js
+++ b/front/js/db_methods.js
@@ -89,7 +89,7 @@ function checkDbLock() {
type: "GET",
success: function (response) {
- console.log(response);
+ // console.log(response);
if (response == 0) {
// console.log('Database is not locked');
$(".header-status-locked-db").hide();
diff --git a/front/js/settings_utils.js b/front/js/settings_utils.js
index a810e41f..52ae1b81 100755
--- a/front/js/settings_utils.js
+++ b/front/js/settings_utils.js
@@ -259,7 +259,8 @@ function addList(element, clearInput = true) {
.attr("value", input)
.text(input);
- const el = $(`#${toId}`).append(newOption);
+ // add new option
+ $(`#${toId}`).append(newOption);
// clear input
if (clearInput) {
@@ -269,6 +270,7 @@ function addList(element, clearInput = true) {
// Initialize interaction options only for the newly added option
initListInteractionOptions(newOption);
+ // flag something changes to prevent navigating from page
settingsChanged();
}
@@ -279,31 +281,6 @@ function removeFromList(element) {
.find("option:last")
.remove();
}
-// ---------------------------------------------------------
-function addInterface() {
- ipMask = $("#ipMask").val();
- ipInterface = $("#ipInterface").val();
-
- full = ipMask + " --interface=" + ipInterface;
-
- console.log(full);
-
- if (ipMask == "" || ipInterface == "") {
- showModalOk(
- "Validation error",
- "Specify both, the network mask and the interface"
- );
- } else {
- $("#SCAN_SUBNETS").append(
- $("").attr("value", full).text(full)
- );
-
- $("#ipMask").val("");
- $("#ipInterface").val("");
-
- settingsChanged();
- }
-}
// -------------------------------------------------------------------
// Function to remove an item from the select element
@@ -555,7 +532,7 @@ function generateOptionsOrSetOptions(
transformers = [] // Transformers to be applied to the values
) {
- console.log(codeName);
+ // console.log(codeName);
// NOTE {value} options to replace with a setting or SQL value are handled in the cacheSettings() function
options = arrayToObject(createArray(getSettingOptions(codeName)))
diff --git a/front/js/ui_components.js b/front/js/ui_components.js
index 9158b185..40a5f0fe 100755
--- a/front/js/ui_components.js
+++ b/front/js/ui_components.js
@@ -11,16 +11,7 @@
// -----------------------------------------------------------------------------
// Initialize device selectors / pickers fields
// -----------------------------------------------------------------------------
-function initDeviceSelectors() {
-
- // console.log(devicesList)
- // Retrieve device list from session variable
- var devicesListAll_JSON = getCache('devicesListAll_JSON');
-
- var devicesList = JSON.parse(devicesListAll_JSON);
-
- // console.log(devicesList);
-
+function initDeviceSelectors(devicesListAll_JSON) {
// Check if both device list exists
if (devicesListAll_JSON) {
@@ -78,52 +69,6 @@ function initDeviceSelectors() {
-// // -----------------------------------------------------------------------------
-// // (ASYNC) Initiate dropdown
-// function generateSetOptions(settingKey, // Identifier for the setting
-// valuesArray, // Array of values to be pre-selected in the dropdown
-// targetLocation, // ID of the HTML element where dropdown should be rendered (will be replaced)
-// callbackToGenerateEntries, // Callback function to generate entries based on options
-// targetField, // Target field or element where selected value should be applied or updated
-// nameTransformer) // callback to transform the name (e.g. base64)
-// {
-
-// var optionsHtml = ""
-
-// // NOTE {value} options to replace with a setting or SQL value are handled in the cacheSettings() function
-// optionsArray = createArray(getSettingOptions(settingKey))
-
-
-// // check if the result is a SQL query
-// if(optionsArray.length > 0 && isSQLQuery(optionsArray[0]))
-// {
-
-// if (settingKey == "NEWDEV_dev_Network_Node_MAC_ADDR") {
-// console.log("isSQLQuery in generateSetOptions");
-
-// }
-// readData(optionsArray[0], callbackToGenerateEntries, valuesArray, targetLocation, targetField, nameTransformer);
-
-// } else // this should be already an array, e.g. from a setting or pre-defined
-// {
-// optionsArray.forEach(option => {
-// let selected = valuesArray.includes(option) ? 'selected' : '';
-// optionsHtml += ``;
-// });
-
-// // Replace the specified placeholder div with the resulting HTML
-// setTimeout(() => {
-
-// $("#" + targetLocation).replaceWith(optionsHtml);
-
-// }, 50);
-// }
-
-
-
-// }
-
-
// -----------------------------------------------------------------------------
// Hide elements on the page based on the supplied setting
function hideUIelements(settingKey) {
@@ -290,42 +235,57 @@ function getCellValue(row, index) {
// initialize
// -----------------------------------------------------------------------------
+function initSelect2() {
-setTimeout(() => {
+ // Retrieve device list from session variable
+ var devicesListAll_JSON = getCache('devicesListAll_JSON');
- initDeviceSelectors();
+ // check if cache ready
+ if(isValidJSON(devicesListAll_JSON))
+ {
+ // prepare HTML DOM before initializing the frotend
+ initDeviceSelectors(devicesListAll_JSON)
-
- // --------------------------------------------------------
- //Initialize Select2 Elements and make them sortable
-
- $(function () {
- // Iterate over each Select2 dropdown
- $('.select2').each(function() {
- var selectEl = $(this).select2();
-
- // Apply sortable functionality to the dropdown's dropdown-container
- selectEl.next().children().children().children().sortable({
- containment: 'parent',
- update: function () {
- var sortedValues = $(this).children().map(function() {
- return $(this).attr('title');
- }).get();
-
- var sortedOptions = selectEl.find('option').sort(function(a, b) {
- return sortedValues.indexOf($(a).text()) - sortedValues.indexOf($(b).text());
- });
-
- // Replace all options in selectEl
- selectEl.empty().append(sortedOptions);
-
- // Trigger change event on Select2
- selectEl.trigger('change');
- }
- });
+
+ // --------------------------------------------------------
+ //Initialize Select2 Elements and make them sortable
+ $(function () {
+ // Iterate over each Select2 dropdown
+ $('.select2').each(function() {
+ var selectEl = $(this).select2();
+
+ // Apply sortable functionality to the dropdown's dropdown-container
+ selectEl.next().children().children().children().sortable({
+ containment: 'parent',
+ update: function () {
+ var sortedValues = $(this).children().map(function() {
+ return $(this).attr('title');
+ }).get();
+
+ var sortedOptions = selectEl.find('option').sort(function(a, b) {
+ return sortedValues.indexOf($(a).text()) - sortedValues.indexOf($(b).text());
+ });
+
+ // Replace all options in selectEl
+ selectEl.empty().append(sortedOptions);
+
+ // Trigger change event on Select2
+ selectEl.trigger('change');
+ }
+ });
+ });
});
- });
-
+ } else // cache not ready try later
+ {
+ setTimeout(() => {
+ initSelect2()
+ }, 1000);
+ }
+}
+
+// try to initialize select2
+setTimeout(() => {
+ initSelect2()
}, 500);
diff --git a/front/multiEditCore.php b/front/multiEditCore.php
index c8f6bb38..987327ab 100755
--- a/front/multiEditCore.php
+++ b/front/multiEditCore.php
@@ -101,10 +101,19 @@
for (let j = i * elementsPerColumn; j < Math.min((i + 1) * elementsPerColumn, columns.length); j++) {
const setTypeObject = JSON.parse(columns[j].Type.replace(/'/g, '"'));
- // console.log(setTypeObject);
- const lastElementObj = setTypeObject.elements[setTypeObject.elements.length - 1]
+ // console.log(setTypeObject); 🔽
+ // const lastElementObj = setTypeObject.elements[setTypeObject.elements.length - 1]
- const { elementType, elementOptions = [], transformers = [] } = lastElementObj;
+ // get the element with the input value(s)
+ let elementsWithInputValue = setTypeObject.elements.filter(element => element.elementHasInputValue === 1);
+
+ // if none found, take last
+ if(elementsWithInputValue.length == 0)
+ {
+ elementsWithInputValue = setTypeObject.elements[setTypeObject.elements.length - 1]
+ }
+
+ const { elementType, elementOptions = [], transformers = [] } = elementsWithInputValue;
const {
inputType,
readOnly,
@@ -123,8 +132,8 @@
// console.log(setTypeObject);
// console.log(inputType);
- // render based on element type
- if (lastElementObj.elementType === 'select') {
+ // render based on element type
+ if (elementsWithInputValue.elementType === 'select') {
targetLocation = columns[j].Code_Name + "_generateSetOptions"
@@ -154,7 +163,7 @@
}
- } else if (lastElementObj.elementType === 'input'){
+ } else if (elementsWithInputValue.elementType === 'input'){
// Add classes specifically for checkboxes
inputType === 'checkbox' ? inputClass = 'checkbox' : inputClass = 'form-control';
diff --git a/front/network.php b/front/network.php
index 88bcfa86..a85ac2d4 100755
--- a/front/network.php
+++ b/front/network.php
@@ -673,7 +673,9 @@
(!emptyArr.includes(nodeData.data.port )) ? port = nodeData.data.port : port = "";
- (port == "" || port == 0 ) ? portBckgIcon = `` : portBckgIcon = ``;
+ (port == "" || port == 0 || port == 'None' ) ? portBckgIcon = `` : portBckgIcon = ``;
+
+ portHtml = (port == "" || port == 0 || port == 'None' ) ? "" : port
// Build HTML for individual nodes in the network diagram
deviceIcon = (!emptyArr.includes(nodeData.data.icon )) ?
@@ -682,7 +684,7 @@
` : "";
devicePort = `
- ${port}
+ ${portHtml}
${portBckgIcon}
diff --git a/front/php/templates/language/de_de.json b/front/php/templates/language/de_de.json
old mode 100644
new mode 100755
diff --git a/front/php/templates/language/en_us.json b/front/php/templates/language/en_us.json
old mode 100644
new mode 100755
diff --git a/front/php/templates/language/es_es.json b/front/php/templates/language/es_es.json
old mode 100644
new mode 100755
index dad937c1..4ddf3a3c
--- a/front/php/templates/language/es_es.json
+++ b/front/php/templates/language/es_es.json
@@ -394,11 +394,11 @@
"Maintenance_Tool_ExportCSV_text": "Genere un archivo CSV (valor separado por comas) que contenga la lista de Dispositivos incluyendo las relaciones de red entre los Nodos de red y los dispositivos conectados. También puedes activarlo accediendo a esta URL your NetAlertX url/php/server/devices.php?action=ExportCSV o activando el plugin Copia de seguridad CSV.",
"Maintenance_Tool_ImportCSV": "Importación CSV",
"Maintenance_Tool_ImportCSV_noti": "Importación CSV",
- "Maintenance_Tool_ImportCSV_noti_text": "¿Está seguro de que quiere importar el archivo CSV? Esto sobrescribirá completamente los dispositivos de su base de datos.",
+ "Maintenance_Tool_ImportCSV_noti_text": "¿Estás seguro de que quieres importar el archivo CSV? Esto sobrescribirá completamente los dispositivos en su base de datos.",
"Maintenance_Tool_ImportCSV_text": "Antes de usar esta función, haga una copia de seguridad. Importe un archivo CSV (valor separado por comas) que contiene la lista de dispositivos, incluidas las relaciones de red entre nodos de red y dispositivos conectados. Para hacer eso, coloque el archivo CSV llamado devices.csv en su carpeta /config .",
- "Maintenance_Tool_ImportPastedCSV": "",
- "Maintenance_Tool_ImportPastedCSV_noti_text": "",
- "Maintenance_Tool_ImportPastedCSV_text": "",
+ "Maintenance_Tool_ImportPastedCSV": "Importar CSV (Pegar)",
+ "Maintenance_Tool_ImportPastedCSV_noti_text": "¿Seguro que desea importar el CSV pegado? Esto sobrescribirá completamente los dispositivos en su base de datos.",
+ "Maintenance_Tool_ImportPastedCSV_text": "Antes de usar esta función, por favor haga una copia de seguridad. Importar un archivo CSV (valor separado por comas) que contiene la lista de Dispositivos incluyendo las relaciones de red entre los Nodos de red y los dispositivos conectados.",
"Maintenance_Tool_arpscansw": "Activar arp-scan (on/off)",
"Maintenance_Tool_arpscansw_noti": "Activar arp-scan on or off",
"Maintenance_Tool_arpscansw_noti_text": "Cuando el escaneo se ha apagado, permanece apagado hasta que se active nuevamente.",
@@ -735,7 +735,7 @@
"Webhooks_icon": "",
"Webhooks_settings_group": " Webhooks",
"devices_old": "Volviendo a actualizar....",
- "general_event_description": "El evento que has activado puede tardar un poco hasta que finalicen los procesos en segundo plano. La ejecución finalizó una vez que se vació la cola de ejecución de abajo (Compruebe el registro de errores si encuentra problemas).
Cola de ejecución:",
+ "general_event_description": "El evento que ha desencadenado puede tardar un tiempo hasta que finalicen los procesos en segundo plano. La ejecución finalizó una vez que se vació la siguiente cola de ejecución (compruebe el registro de errores si tiene problemas).
Cola de ejecución:",
"general_event_title": "Ejecutar un evento ad-hoc",
"report_guid": "Guía de las notificaciones:",
"report_guid_missing": "No se ha encontrado la notificación vinculada. Hay un pequeño retraso entre las notificaciones enviadas recientemente y su disponibilidad. Actualiza tu página y la caché después de unos segundos. También es posible que la notificación seleccionada se haya eliminado durante el mantenimiento, tal y como se especifica en la configuración de DBCLNP_NOTIFI_HIST.
En su lugar, se muestra la notificación más reciente. La notificación que falta tiene el siguiente GUID:",
diff --git a/front/php/templates/language/fr_fr.json b/front/php/templates/language/fr_fr.json
old mode 100755
new mode 100644
index 58480fb5..cd561c11
--- a/front/php/templates/language/fr_fr.json
+++ b/front/php/templates/language/fr_fr.json
@@ -8,7 +8,7 @@
"About_Title": "Analyse de la sécurité du réseau et cadre de notification",
"AppEvents_DateTimeCreated": "Journalisé",
"AppEvents_Extra": "Extra",
- "AppEvents_GUID": "",
+ "AppEvents_GUID": "GUID d’événement d’application",
"AppEvents_Helper1": "Helper 1",
"AppEvents_Helper2": "Helper 2",
"AppEvents_Helper3": "Helper 3",
@@ -35,7 +35,7 @@
"BackDevices_Arpscan_enabled": "Apr-Scan Activé",
"BackDevices_Backup_CopError": "La base de donnée initiale n'a pas pu être sauvegardée.",
"BackDevices_Backup_Failed": "La sauvegarde a été partiellement complétée. L'archive n'a pas pu être crée ou est vide.",
- "BackDevices_Backup_okay": "",
+ "BackDevices_Backup_okay": "La sauvegarde s'est déroulée avec succès avec la nouvelle archive",
"BackDevices_DBTools_DelDevError_a": "Erreur lors de la suppression de l'appareil",
"BackDevices_DBTools_DelDevError_b": "Erreur lors de la suppression des appareils",
"BackDevices_DBTools_DelDev_a": "Appareil supprimé",
@@ -56,15 +56,15 @@
"BackDevices_Restore_okay": "Restauration exécutée avec succès.",
"BackDevices_darkmode_disabled": "Mode sombre désactivé",
"BackDevices_darkmode_enabled": "Mode sombre activé",
- "DAYS_TO_KEEP_EVENTS_description": "",
+ "DAYS_TO_KEEP_EVENTS_description": "Il s'agit d'un paramètre de maintenance. Il indique le nombre de jours pendant lesquels les entrées d'événements seront conservées. Tous les événements plus anciens seront supprimés périodiquement. S'applique également à l'historique des événements du plugin.",
"DAYS_TO_KEEP_EVENTS_name": "Supprimer les événements plus anciens que",
- "DevDetail_Copy_Device_Title": "",
- "DevDetail_Copy_Device_Tooltip": "",
+ "DevDetail_Copy_Device_Title": " Copier les détails de l'appareil",
+ "DevDetail_Copy_Device_Tooltip": "Copier les détails de l'appareil dans la liste déroulante. Tout ce qui se trouve sur cette page sera écrasé",
"DevDetail_EveandAl_AlertAllEvents": "Alerter tous les événements",
"DevDetail_EveandAl_AlertDown": "Alerte de panne",
"DevDetail_EveandAl_Archived": "Archivés",
"DevDetail_EveandAl_NewDevice": "Nouvel appareil",
- "DevDetail_EveandAl_NewDevice_Tooltip": "",
+ "DevDetail_EveandAl_NewDevice_Tooltip": "Affiche le statut Nouveau pour l'appareil et l'inclut dans les listes lorsque le filtre Nouveaux Appareils est actif. N'affecte pas les notifications.",
"DevDetail_EveandAl_RandomMAC": "MAC aléatoire",
"DevDetail_EveandAl_ScanCycle": "",
"DevDetail_EveandAl_ScanCycle_a": "",
diff --git a/front/php/templates/language/it_it.json b/front/php/templates/language/it_it.json
old mode 100644
new mode 100755
index dcda6d2f..5dec73e6
--- a/front/php/templates/language/it_it.json
+++ b/front/php/templates/language/it_it.json
@@ -370,11 +370,11 @@
"Maintenance_Tool_ExportCSV_text": "Genera un file CSV (comma separated value) contenente la lista dei dispositivi incluse le relazioni di rete tra i nodi di rete e i dispositivi connessi. Puoi anche eseguire questa azione accedendo all'URL il_tuo_NetAlertX/php/server/devices.php?action=ExportCSV o abilitando il plugin Backup CSV.",
"Maintenance_Tool_ImportCSV": "Importa CSV",
"Maintenance_Tool_ImportCSV_noti": "Importa CSV",
- "Maintenance_Tool_ImportCSV_noti_text": "Sei sicuro di voler importare il file CSV? Questa operazione sovrascriverà tutti i dispositivi presenti nel database.",
+ "Maintenance_Tool_ImportCSV_noti_text": "Sei sicuro di voler importare il file CSV? Questa operazione sovrascriverà tutti i dispositivi presenti nel database.",
"Maintenance_Tool_ImportCSV_text": "Prima di utilizzare questa funzione, esegui un backup. Importa un file CSV (comma separated value) contenente la lista dei dispositivi incluse le relazioni di rete tra i nodi di rete e i dispositivi connessi. Per far ciò posiziona il file CSV denominato devices.csv nella cartella /config.",
- "Maintenance_Tool_ImportPastedCSV": "",
- "Maintenance_Tool_ImportPastedCSV_noti_text": "",
- "Maintenance_Tool_ImportPastedCSV_text": "",
+ "Maintenance_Tool_ImportPastedCSV": "Importazione CSV (incolla)",
+ "Maintenance_Tool_ImportPastedCSV_noti_text": "Sei sicuro di voler importare il CSV incollato? Questo sovrascriverà completamente i dispositivi nel tuo database.",
+ "Maintenance_Tool_ImportPastedCSV_text": "Prima di utilizzare questa funzione, esegui un backup. Importa un file CSV (valori separati da virgole) contenente l'elenco dei dispositivi, comprese le relazioni di rete tra i nodi di rete e i dispositivi collegati.",
"Maintenance_Tool_arpscansw": "Attiva/disattiva arp-Scan",
"Maintenance_Tool_arpscansw_noti": "Attiva o disattiva arp-Scan",
"Maintenance_Tool_arpscansw_noti_text": "Una volta disattivata la scansione rimane disattivata finché non viene nuovamente attivata.",
@@ -655,7 +655,7 @@
"UI_REFRESH_description": "Inserisci il numero di secondi dopo il quale la UI si ricarica. Imposta a 0 per disabilitare.",
"UI_REFRESH_name": "Aggiorna automaticamente la UI",
"devices_old": "Aggiornamento...",
- "general_event_description": "L'evento che hai attivato potrebbe richiedere del tempo prima che i processi in background vengano completati. L'esecuzione è terminata una volta che la coda di esecuzione sottostante si è svuotata (controlla il log degli errori se riscontri problemi).
Coda di esecuzione:",
+ "general_event_description": "L'evento che hai attivato potrebbe richiedere del tempo prima che i processi in background vengano completati. L'esecuzione è terminata una volta che la coda di esecuzione sottostante si è svuotata (controlla il log degli errori se riscontri problemi).
Coda di esecuzione:",
"general_event_title": "Esecuzione di un evento ad-hoc",
"report_guid": "GUID notifica:",
"report_guid_missing": "Notifica collegata non trovata. C'è un piccolo ritardo tra la disponibilità delle notifiche inviate di recente e la loro disponibilità. Aggiorna la pagina e la cache dopo alcuni secondi. È anche possibile che la notifica selezionata sia stata eliminata durante la manutenzione come specificato nell'impostazione DBCLNP_NOTIFI_HIST.
Viene invece visualizzata l'ultima notifica. La notifica mancante ha il seguente GUID:",
diff --git a/front/php/templates/language/nb_no.json b/front/php/templates/language/nb_no.json
old mode 100644
new mode 100755
diff --git a/front/php/templates/language/pl_pl.json b/front/php/templates/language/pl_pl.json
old mode 100644
new mode 100755
diff --git a/front/php/templates/language/pt_br.json b/front/php/templates/language/pt_br.json
index 74f59937..e32d9bc1 100755
--- a/front/php/templates/language/pt_br.json
+++ b/front/php/templates/language/pt_br.json
@@ -56,15 +56,15 @@
"BackDevices_Restore_okay": "Restauração executada com sucesso.",
"BackDevices_darkmode_disabled": "Modo Noturno Desabilitado",
"BackDevices_darkmode_enabled": "Modo Noturno Habilitado",
- "DAYS_TO_KEEP_EVENTS_description": "",
+ "DAYS_TO_KEEP_EVENTS_description": "Esta é uma definição de manutenção. Especifica o número de dias de entradas de eventos que serão mantidas. Todos os eventos mais antigos serão eliminados periodicamente. Também se aplica ao Histórico de eventos do plug-in.",
"DAYS_TO_KEEP_EVENTS_name": "Excluir eventos mais antigos que",
"DevDetail_Copy_Device_Title": " Copiar detalhes do dispositivo",
- "DevDetail_Copy_Device_Tooltip": "",
+ "DevDetail_Copy_Device_Tooltip": "Copiar detalhes do dispositivo a partir da lista pendente. Tudo o que se encontra nesta página será substituído",
"DevDetail_EveandAl_AlertAllEvents": "Alerte Todos os Eventos",
"DevDetail_EveandAl_AlertDown": "Alerta Desligado",
"DevDetail_EveandAl_Archived": "Arquivado",
"DevDetail_EveandAl_NewDevice": "Novo Dispositivo",
- "DevDetail_EveandAl_NewDevice_Tooltip": "",
+ "DevDetail_EveandAl_NewDevice_Tooltip": "Mostra o estado Novo do dispositivo e inclui-o nas listas quando o filtro Novos dispositivos está ativo. Não afecta as notificações.",
"DevDetail_EveandAl_RandomMAC": "MAC Aleatório",
"DevDetail_EveandAl_ScanCycle": "Rastrear dispositivo",
"DevDetail_EveandAl_ScanCycle_a": "Rastrear Dispositivo",
@@ -72,194 +72,194 @@
"DevDetail_EveandAl_Skip": "Pular notificações repetidas para",
"DevDetail_EveandAl_Title": " Configuração de Eventos & Alertas",
"DevDetail_Events_CheckBox": "Esconder Eventos de Conexão",
- "DevDetail_GoToNetworkNode": "",
+ "DevDetail_GoToNetworkNode": "Navega para a página Rede do nó indicado.",
"DevDetail_Icon": "Icone",
- "DevDetail_Icon_Descr": "",
- "DevDetail_Loading": "",
- "DevDetail_MainInfo_Comments": "",
- "DevDetail_MainInfo_Favorite": "",
- "DevDetail_MainInfo_Group": "",
- "DevDetail_MainInfo_Location": "",
- "DevDetail_MainInfo_Name": "",
- "DevDetail_MainInfo_Network": "",
- "DevDetail_MainInfo_Network_Port": "",
- "DevDetail_MainInfo_Network_Site": "",
- "DevDetail_MainInfo_Network_Title": "",
- "DevDetail_MainInfo_Owner": "",
- "DevDetail_MainInfo_SSID": "",
- "DevDetail_MainInfo_Title": "",
- "DevDetail_MainInfo_Type": "",
- "DevDetail_MainInfo_Vendor": "",
- "DevDetail_MainInfo_mac": "",
- "DevDetail_Network_Node_hover": "",
- "DevDetail_Network_Port_hover": "",
- "DevDetail_Nmap_Scans": "",
- "DevDetail_Nmap_Scans_desc": "",
- "DevDetail_Nmap_buttonDefault": "",
- "DevDetail_Nmap_buttonDefault_text": "",
- "DevDetail_Nmap_buttonDetail": "",
- "DevDetail_Nmap_buttonDetail_text": "",
- "DevDetail_Nmap_buttonFast": "",
- "DevDetail_Nmap_buttonFast_text": "",
- "DevDetail_Nmap_buttonSkipDiscovery": "",
- "DevDetail_Nmap_buttonSkipDiscovery_text": "",
- "DevDetail_Nmap_resultsLink": "",
- "DevDetail_Owner_hover": "",
- "DevDetail_Periodselect_All": "",
- "DevDetail_Periodselect_LastMonth": "",
- "DevDetail_Periodselect_LastWeek": "",
- "DevDetail_Periodselect_LastYear": "",
- "DevDetail_Periodselect_today": "",
- "DevDetail_Run_Actions_Title": "",
- "DevDetail_Run_Actions_Tooltip": "",
- "DevDetail_SessionInfo_FirstSession": "",
- "DevDetail_SessionInfo_LastIP": "",
- "DevDetail_SessionInfo_LastSession": "",
- "DevDetail_SessionInfo_StaticIP": "",
- "DevDetail_SessionInfo_Status": "",
- "DevDetail_SessionInfo_Title": "",
- "DevDetail_SessionTable_Additionalinfo": "",
- "DevDetail_SessionTable_Connection": "",
- "DevDetail_SessionTable_Disconnection": "",
- "DevDetail_SessionTable_Duration": "",
- "DevDetail_SessionTable_IP": "",
- "DevDetail_SessionTable_Order": "",
- "DevDetail_Shortcut_CurrentStatus": "",
- "DevDetail_Shortcut_DownAlerts": "",
- "DevDetail_Shortcut_Presence": "",
- "DevDetail_Shortcut_Sessions": "",
- "DevDetail_Tab_Details": "",
- "DevDetail_Tab_Events": "",
- "DevDetail_Tab_EventsTableDate": "",
- "DevDetail_Tab_EventsTableEvent": "",
- "DevDetail_Tab_EventsTableIP": "",
- "DevDetail_Tab_EventsTableInfo": "",
- "DevDetail_Tab_Nmap": "",
- "DevDetail_Tab_NmapEmpty": "",
- "DevDetail_Tab_NmapTableExtra": "",
- "DevDetail_Tab_NmapTableHeader": "",
- "DevDetail_Tab_NmapTableIndex": "",
- "DevDetail_Tab_NmapTablePort": "",
- "DevDetail_Tab_NmapTableService": "",
- "DevDetail_Tab_NmapTableState": "",
- "DevDetail_Tab_NmapTableText": "",
- "DevDetail_Tab_NmapTableTime": "",
- "DevDetail_Tab_Plugins": "",
- "DevDetail_Tab_Presence": "",
- "DevDetail_Tab_Sessions": "",
- "DevDetail_Tab_Tools": "",
- "DevDetail_Tab_Tools_Internet_Info_Description": "",
- "DevDetail_Tab_Tools_Internet_Info_Error": "",
- "DevDetail_Tab_Tools_Internet_Info_Start": "",
- "DevDetail_Tab_Tools_Internet_Info_Title": "",
- "DevDetail_Tab_Tools_Nslookup_Description": "",
- "DevDetail_Tab_Tools_Nslookup_Error": "",
- "DevDetail_Tab_Tools_Nslookup_Start": "",
- "DevDetail_Tab_Tools_Nslookup_Title": "",
- "DevDetail_Tab_Tools_Speedtest_Description": "",
- "DevDetail_Tab_Tools_Speedtest_Start": "",
- "DevDetail_Tab_Tools_Speedtest_Title": "",
- "DevDetail_Tab_Tools_Traceroute_Description": "",
- "DevDetail_Tab_Tools_Traceroute_Error": "",
- "DevDetail_Tab_Tools_Traceroute_Start": "",
- "DevDetail_Tab_Tools_Traceroute_Title": "",
- "DevDetail_Tools_WOL": "",
- "DevDetail_Tools_WOL_noti": "",
- "DevDetail_Tools_WOL_noti_text": "",
- "DevDetail_Type_hover": "",
- "DevDetail_Vendor_hover": "",
- "DevDetail_WOL_Title": "",
- "DevDetail_button_AddIcon": "",
- "DevDetail_button_AddIcon_Help": "",
- "DevDetail_button_AddIcon_Tooltip": "",
- "DevDetail_button_Delete": "",
- "DevDetail_button_DeleteEvents": "",
- "DevDetail_button_DeleteEvents_Warning": "",
- "DevDetail_button_OverwriteIcons": "",
- "DevDetail_button_OverwriteIcons_Tooltip": "",
- "DevDetail_button_OverwriteIcons_Warning": "",
- "DevDetail_button_Reset": "",
- "DevDetail_button_Save": "",
- "Device_MultiEdit": "",
- "Device_MultiEdit_Backup": "",
- "Device_MultiEdit_Fields": "",
- "Device_MultiEdit_MassActions": "",
- "Device_MultiEdit_Tooltip": "",
- "Device_Searchbox": "",
- "Device_Shortcut_AllDevices": "",
- "Device_Shortcut_Archived": "",
- "Device_Shortcut_Connected": "",
- "Device_Shortcut_Devices": "",
- "Device_Shortcut_DownAlerts": "",
- "Device_Shortcut_DownOnly": "",
- "Device_Shortcut_Favorites": "",
- "Device_Shortcut_NewDevices": "",
- "Device_Shortcut_OnlineChart": "",
- "Device_TableHead_Connected_Devices": "",
- "Device_TableHead_Favorite": "",
- "Device_TableHead_FirstSession": "",
- "Device_TableHead_GUID": "",
- "Device_TableHead_Group": "",
- "Device_TableHead_Icon": "",
- "Device_TableHead_LastIP": "",
+ "DevDetail_Icon_Descr": "Introduza o nome de um ícone fantástico do tipo de letra sem o prefixo fa- ou com a classe completa, por exemplo: fa fa-brands fa-apple.",
+ "DevDetail_Loading": "A carregar...",
+ "DevDetail_MainInfo_Comments": "Comentários",
+ "DevDetail_MainInfo_Favorite": "Favorito",
+ "DevDetail_MainInfo_Group": "Grupo",
+ "DevDetail_MainInfo_Location": "Localização",
+ "DevDetail_MainInfo_Name": "Nome",
+ "DevDetail_MainInfo_Network": " Node (MAC)",
+ "DevDetail_MainInfo_Network_Port": "Porta",
+ "DevDetail_MainInfo_Network_Site": "Site",
+ "DevDetail_MainInfo_Network_Title": " Rede",
+ "DevDetail_MainInfo_Owner": "Proprietário",
+ "DevDetail_MainInfo_SSID": "SSID",
+ "DevDetail_MainInfo_Title": " Informações principais",
+ "DevDetail_MainInfo_Type": "Tipo",
+ "DevDetail_MainInfo_Vendor": "Vendedor",
+ "DevDetail_MainInfo_mac": "MAC",
+ "DevDetail_Network_Node_hover": "Selecione o dispositivo de rede principal ao qual o dispositivo atual está conectado, para preencher a árvore Rede.",
+ "DevDetail_Network_Port_hover": "A porta a que este dispositivo está ligado no dispositivo de rede principal. Se for deixado vazio, é apresentado um ícone wifi na árvore Rede.",
+ "DevDetail_Nmap_Scans": "Varreduras manuais do Nmap",
+ "DevDetail_Nmap_Scans_desc": "Aqui você pode executar varreduras manuais NMAP. Você também pode agendar varreduras automáticas regulares de NMAP através do plugin Serviços & Ports (NMAP). Cabeça para Configurações para descobrir mais",
+ "DevDetail_Nmap_buttonDefault": "Verificação predefinida",
+ "DevDetail_Nmap_buttonDefault_text": "Scan padrão: Nmap verifica as 1.000 portas superiores para cada protocolo de digitalização solicitado. Isto atinge cerca de 93% das portas TCP e 49% das portas UDP. (cerca de 5 segundos)",
+ "DevDetail_Nmap_buttonDetail": "Verificação Detalhada",
+ "DevDetail_Nmap_buttonDetail_text": "Verificação detalhada: Verificação predefinida com deteção de SO activada, deteção de versão, verificação de scripts e traceroute (até 30 segundos ou mais)",
+ "DevDetail_Nmap_buttonFast": "Verificação rápida",
+ "DevDetail_Nmap_buttonFast_text": "Verificação rápida: Verifica menos portas (100) do que a verificação predefinida (alguns segundos)",
+ "DevDetail_Nmap_buttonSkipDiscovery": "Saltar descoberta do host",
+ "DevDetail_Nmap_buttonSkipDiscovery_text": "Ignorar a descoberta do host (-Pn opção): Verificação padrão sem descoberta do host",
+ "DevDetail_Nmap_resultsLink": "Você pode deixar esta página depois de iniciar uma varredura. Os resultados também estarão disponíveis no arquivo app_front.log.",
+ "DevDetail_Owner_hover": "Quem é o dono deste dispositivo. Campo de texto gratuito.",
+ "DevDetail_Periodselect_All": "Todas as informações",
+ "DevDetail_Periodselect_LastMonth": "Último mês",
+ "DevDetail_Periodselect_LastWeek": "Semana passada",
+ "DevDetail_Periodselect_LastYear": "Ano passado",
+ "DevDetail_Periodselect_today": "Hoje",
+ "DevDetail_Run_Actions_Title": " Executar ação no dispositivo",
+ "DevDetail_Run_Actions_Tooltip": "Execute uma ação no dispositivo atual da lista suspensa.",
+ "DevDetail_SessionInfo_FirstSession": "Primeira sessão",
+ "DevDetail_SessionInfo_LastIP": "Último IP",
+ "DevDetail_SessionInfo_LastSession": "Último offline",
+ "DevDetail_SessionInfo_StaticIP": "IP estático",
+ "DevDetail_SessionInfo_Status": "Estado",
+ "DevDetail_SessionInfo_Title": " Informações de Sessão",
+ "DevDetail_SessionTable_Additionalinfo": "Informações adicionais",
+ "DevDetail_SessionTable_Connection": "Conexão",
+ "DevDetail_SessionTable_Disconnection": "Desconexão",
+ "DevDetail_SessionTable_Duration": "Duração",
+ "DevDetail_SessionTable_IP": "IP",
+ "DevDetail_SessionTable_Order": "Ordem",
+ "DevDetail_Shortcut_CurrentStatus": "Estado atual",
+ "DevDetail_Shortcut_DownAlerts": "Alertas para baixo",
+ "DevDetail_Shortcut_Presence": "Presença",
+ "DevDetail_Shortcut_Sessions": "Sessões",
+ "DevDetail_Tab_Details": " Detalhes",
+ "DevDetail_Tab_Events": " Eventos",
+ "DevDetail_Tab_EventsTableDate": "Data",
+ "DevDetail_Tab_EventsTableEvent": "Tipo de evento",
+ "DevDetail_Tab_EventsTableIP": "IP",
+ "DevDetail_Tab_EventsTableInfo": "Informações adicionais",
+ "DevDetail_Tab_Nmap": "",
+ "DevDetail_Tab_NmapEmpty": "Nenhuma porta detectada com Nmap neste dispositivo.",
+ "DevDetail_Tab_NmapTableExtra": "Adicional",
+ "DevDetail_Tab_NmapTableHeader": "Resultados da verificação programada",
+ "DevDetail_Tab_NmapTableIndex": "Índice",
+ "DevDetail_Tab_NmapTablePort": "Porta",
+ "DevDetail_Tab_NmapTableService": "Serviço",
+ "DevDetail_Tab_NmapTableState": "Estado",
+ "DevDetail_Tab_NmapTableText": "Configure uma programação em Configurações",
+ "DevDetail_Tab_NmapTableTime": "Tempo",
+ "DevDetail_Tab_Plugins": " Plugins",
+ "DevDetail_Tab_Presence": " Presença",
+ "DevDetail_Tab_Sessions": " Sessões",
+ "DevDetail_Tab_Tools": " Ferramentas",
+ "DevDetail_Tab_Tools_Internet_Info_Description": "A ferramenta info Internet exibe informações sobre a conexão com a Internet, como endereço IP, cidade, país, código de área e fuso horário.",
+ "DevDetail_Tab_Tools_Internet_Info_Error": "Um erro ocorreu",
+ "DevDetail_Tab_Tools_Internet_Info_Start": "Iniciar informações da Internet",
+ "DevDetail_Tab_Tools_Internet_Info_Title": "Info Internet",
+ "DevDetail_Tab_Tools_Nslookup_Description": "Nslookup é uma ferramenta de linha de comando usada para consultar o Sistema de Nomes de Domínio (DNS). DNS é um sistema que traduz nomes de domínio, como www.google.com, em endereços IP, como 172.217.0.142.",
+ "DevDetail_Tab_Tools_Nslookup_Error": "Erro: O endereço IP não é válido",
+ "DevDetail_Tab_Tools_Nslookup_Start": "Iniciar Nslookup",
+ "DevDetail_Tab_Tools_Nslookup_Title": "Nslookup",
+ "DevDetail_Tab_Tools_Speedtest_Description": "A ferramenta Speedtest mede a velocidade de download, velocidade de upload e latência da conexão de internet.",
+ "DevDetail_Tab_Tools_Speedtest_Start": "Iniciar Speedtest",
+ "DevDetail_Tab_Tools_Speedtest_Title": "Speedtest Online",
+ "DevDetail_Tab_Tools_Traceroute_Description": "Traceroute é um comando de diagnóstico de rede usado para rastrear o caminho que os pacotes de dados levam de um host para outro.
O comando usa o Protocolo de Mensagem de Controle da Internet (ICMP) para enviar pacotes para nós intermediários na rota, cada nó intermediário responde com um pacote ICMP time-out (TTL timed out) .
A saída do comando traceroute exibe o endereço IP de cada nó intermediário na rota.
O comando traceroute pode ser usado para diagnosticar problemas de rede, como atrasos, perda de pacotes e rotas bloqueadas.
Também pode ser usado para identificar a localização de um nó intermediário em uma rede.",
+ "DevDetail_Tab_Tools_Traceroute_Error": "Erro: O endereço IP não é válido",
+ "DevDetail_Tab_Tools_Traceroute_Start": "Iniciar Traceroute",
+ "DevDetail_Tab_Tools_Traceroute_Title": "Rastreamento",
+ "DevDetail_Tools_WOL": "Enviar comando WoL ",
+ "DevDetail_Tools_WOL_noti": "Wake-on-LAN",
+ "DevDetail_Tools_WOL_noti_text": "O comando Wake-on-LAN é enviado para o endereço de transmissão. Se o alvo não estiver na sub-rede/VLAN do NetAlertX, o dispositivo de destino não responderá.",
+ "DevDetail_Type_hover": "O tipo do dispositivo. Se você selecionar qualquer um dos dispositivos de rede pré-definidos (por exemplo: AP, Firewall, Router, Switch...) eles aparecerão na configuração da árvore de rede como possíveis nós de rede pai.",
+ "DevDetail_Vendor_hover": "O fornecedor deve ser auto-detectado. Você pode substituir ou adicionar seu valor personalizado.",
+ "DevDetail_WOL_Title": "",
+ "DevDetail_button_AddIcon": "Adicionar novo ícone",
+ "DevDetail_button_AddIcon_Help": "Cole uma tag HTML SVG ou um ícone de tag HTML Font Awesome. Leia a documentação sobre ícones para obter detalhes.",
+ "DevDetail_button_AddIcon_Tooltip": "Adicione um novo ícone a este dispositivo que ainda não esteja disponível no menu suspenso.",
+ "DevDetail_button_Delete": "Excluir dispositivo",
+ "DevDetail_button_DeleteEvents": "Excluir eventos",
+ "DevDetail_button_DeleteEvents_Warning": "Tem certeza de que deseja excluir todos os eventos deste dispositivo?
(isso limpará o Histórico de eventos e as sessões e poderá ajudar com constantes (persistentes) notificações)",
+ "DevDetail_button_OverwriteIcons": "Substituir ícones",
+ "DevDetail_button_OverwriteIcons_Tooltip": "Substituir ícones de todos os dispositivos pelo mesmo tipo de dispositivo",
+ "DevDetail_button_OverwriteIcons_Warning": "Tem certeza de que deseja substituir todos os ícones de todos os dispositivos pelo mesmo tipo de dispositivo do tipo de dispositivo atual?",
+ "DevDetail_button_Reset": "Redefinir alterações",
+ "DevDetail_button_Save": "Salvar",
+ "Device_MultiEdit": "Edição múltipla",
+ "Device_MultiEdit_Backup": "Cuidado, inserir valores errados abaixo interromperá sua configuração. Faça backup do seu banco de dados ou da configuração dos dispositivos primeiro (clique para baixar ). Leia como recuperar dispositivos deste arquivo no Documentação de backups.",
+ "Device_MultiEdit_Fields": "Editar campos:",
+ "Device_MultiEdit_MassActions": "Ações em massa:",
+ "Device_MultiEdit_Tooltip": "Cuidadoso. Clicar aqui aplicará o valor à esquerda a todos os dispositivos selecionados acima.",
+ "Device_Searchbox": "Procurar",
+ "Device_Shortcut_AllDevices": "Meus dispositivos",
+ "Device_Shortcut_Archived": "Arquivado",
+ "Device_Shortcut_Connected": "Conectado",
+ "Device_Shortcut_Devices": "Dispositivos",
+ "Device_Shortcut_DownAlerts": "Inativo e off-line",
+ "Device_Shortcut_DownOnly": "Inativo",
+ "Device_Shortcut_Favorites": "Favoritos",
+ "Device_Shortcut_NewDevices": "Novos dispositivos",
+ "Device_Shortcut_OnlineChart": "Presença do dispositivo",
+ "Device_TableHead_Connected_Devices": "Conexões",
+ "Device_TableHead_Favorite": "Favorito",
+ "Device_TableHead_FirstSession": "Primeira sessão",
+ "Device_TableHead_GUID": "GUID",
+ "Device_TableHead_Group": "Grupo",
+ "Device_TableHead_Icon": "Ícone",
+ "Device_TableHead_LastIP": "Último IP",
"Device_TableHead_LastIPOrder": "",
- "Device_TableHead_LastSession": "",
- "Device_TableHead_Location": "",
- "Device_TableHead_MAC": "",
- "Device_TableHead_MAC_full": "",
- "Device_TableHead_Name": "",
- "Device_TableHead_NetworkSite": "",
- "Device_TableHead_Owner": "",
- "Device_TableHead_Parent_MAC": "",
- "Device_TableHead_Port": "",
- "Device_TableHead_RowID": "",
- "Device_TableHead_Rowid": "",
- "Device_TableHead_SSID": "",
- "Device_TableHead_Status": "",
- "Device_TableHead_SyncHubNodeName": "",
- "Device_TableHead_Type": "",
- "Device_TableHead_Vendor": "",
- "Device_Table_Not_Network_Device": "",
- "Device_Table_info": "",
- "Device_Table_nav_next": "",
- "Device_Table_nav_prev": "",
- "Device_Tablelenght": "",
- "Device_Tablelenght_all": "",
- "Device_Title": "",
- "Donations_Others": "",
- "Donations_Platforms": "",
- "Donations_Text": "",
- "Donations_Title": "",
- "ENABLE_PLUGINS_description": "",
- "ENABLE_PLUGINS_name": "",
- "Email_display_name": "",
- "Email_icon": "",
- "Events_Loading": "",
- "Events_Periodselect_All": "",
- "Events_Periodselect_LastMonth": "",
- "Events_Periodselect_LastWeek": "",
- "Events_Periodselect_LastYear": "",
- "Events_Periodselect_today": "",
- "Events_Searchbox": "",
- "Events_Shortcut_AllEvents": "",
+ "Device_TableHead_LastSession": "Último off-line",
+ "Device_TableHead_Location": "Localização",
+ "Device_TableHead_MAC": "MAC aleatório",
+ "Device_TableHead_MAC_full": "MAC completo",
+ "Device_TableHead_Name": "Nome",
+ "Device_TableHead_NetworkSite": "Site da rede",
+ "Device_TableHead_Owner": "Proprietário",
+ "Device_TableHead_Parent_MAC": "Nó pai MAC",
+ "Device_TableHead_Port": "Porta",
+ "Device_TableHead_RowID": "ID da linha",
+ "Device_TableHead_Rowid": "ID da linha",
+ "Device_TableHead_SSID": "SSID",
+ "Device_TableHead_Status": "Status",
+ "Device_TableHead_SyncHubNodeName": "Nó de sincronização",
+ "Device_TableHead_Type": "Tipo",
+ "Device_TableHead_Vendor": "Fornecedor",
+ "Device_Table_Not_Network_Device": "Não configurado como um dispositivo de rede",
+ "Device_Table_info": "Mostrando _START_ de _END_ do _TOTAL_ entradas",
+ "Device_Table_nav_next": "Próximo",
+ "Device_Table_nav_prev": "Anterior",
+ "Device_Tablelenght": "Mostrar entradas do _MENU_",
+ "Device_Tablelenght_all": "Todos",
+ "Device_Title": "Dispositivos",
+ "Donations_Others": "Outros",
+ "Donations_Platforms": "Plataformas de patrocinadores",
+ "Donations_Text": "Ei 👋! Obrigado por clicar neste item de menu 😅 Estou tentando coletar algumas doações para melhorar o software. Além disso, isso me ajudaria a não ficar exausto, para que eu pudesse oferecer suporte a este aplicativo por mais tempo. Qualquer pequeno patrocínio (recorrente ou não) me faz querer colocar mais esforço neste aplicativo. Eu adoraria encurtar minha semana de trabalho e no tempo restante focar totalmente no NetAlertX. Você obteria mais funcionalidades, um aplicativo mais sofisticado e menos bugs. Obrigado pela leitura - sou grato por qualquer apoio ❤🙏 TL;DR: Ao me apoiar, você obtém:
Atualizações regulares para manter seus dados e sua família seguros 🔄