Compare commits

..

37 Commits

Author SHA1 Message Date
jokob-sk
dbf7104dd0 docs, smtp logging 2025-07-04 07:41:01 +10:00
jokob-sk
1f26de4b76 docs, smtp logging 2025-07-04 07:21:18 +10:00
jokob-sk
ad43e4a2b2 docs
Some checks are pending
Code checks / check-url-paths (push) Waiting to run
docker / docker_dev (push) Waiting to run
Deploy MkDocs / deploy (push) Waiting to run
2025-07-03 07:42:10 +10:00
jokob-sk
171feda4fe docs 2025-07-03 07:41:10 +10:00
jokob-sk
e5a4e07b8b Merge branch 'main' of https://github.com/jokob-sk/NetAlertX 2025-07-03 07:40:09 +10:00
anton garcias
44a5600108 Translated using Weblate (Catalan)
Some checks are pending
Code checks / check-url-paths (push) Waiting to run
docker / docker_dev (push) Waiting to run
Deploy MkDocs / deploy (push) Waiting to run
Currently translated at 98.4% (739 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ca/
2025-07-02 03:01:52 +02:00
Ondřej Karaffa
d059c5c584 Translated using Weblate (Czech)
Currently translated at 7.9% (60 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/cs/
2025-07-02 03:01:51 +02:00
Ondřej Karaffa
523ff8e877 Translated using Weblate (Czech)
Currently translated at 7.9% (60 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/cs/
2025-07-02 03:01:50 +02:00
Ondřej Karaffa
ba9115bac1 Translated using Weblate (Czech)
Currently translated at 7.9% (60 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/cs/
2025-07-02 03:01:49 +02:00
Massimo Pissarello
11f6f50748 Translated using Weblate (Italian)
Currently translated at 100.0% (751 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/it/
2025-07-02 03:01:47 +02:00
jokob-sk
d85c52bceb Merge branch 'main' of https://github.com/jokob-sk/NetAlertX 2025-07-01 07:51:01 +10:00
jokob-sk
9cf1d7b461 lang 2025-07-01 07:50:57 +10:00
Hosted Weblate
e7a2a53d18 Merge branch 'origin/main' into Weblate.
Some checks failed
Code checks / check-url-paths (push) Has been cancelled
docker / docker_dev (push) Has been cancelled
Deploy MkDocs / deploy (push) Has been cancelled
2025-06-30 07:38:01 +02:00
Ettore Atalan
1ffdfc17fb Translated using Weblate (German)
Currently translated at 89.4% (672 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/de/
2025-06-30 07:38:01 +02:00
jokob-sk
190c6fb007 refactor db upgrade 2025-06-30 15:37:40 +10:00
Максим Горпиніч
0cd806fb74 Translated using Weblate (Ukrainian)
Some checks are pending
Code checks / check-url-paths (push) Waiting to run
docker / docker_dev (push) Waiting to run
Deploy MkDocs / deploy (push) Waiting to run
Currently translated at 100.0% (751 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/uk/
2025-06-29 09:02:07 +02:00
Sylvain Pichon
9f55471f0f Translated using Weblate (Catalan)
Currently translated at 97.3% (731 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ca/
2025-06-29 09:02:07 +02:00
HAMAD ABDULLA
4add27e83c Translated using Weblate (Arabic)
Currently translated at 98.4% (739 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ar/
2025-06-29 09:02:06 +02:00
Sylvain Pichon
7a3ab14fca Translated using Weblate (Turkish)
Currently translated at 66.1% (497 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/tr/
2025-06-29 09:02:04 +02:00
Sylvain Pichon
589af685ac Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 81.7% (614 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/zh_Hans/
2025-06-29 09:02:03 +02:00
Sylvain Pichon
8cb861df6c Translated using Weblate (Polish)
Currently translated at 81.3% (611 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pl/
2025-06-29 09:02:01 +02:00
Sylvain Pichon
5ebda7eb1a Translated using Weblate (Portuguese (Brazil))
Currently translated at 57.5% (432 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pt_BR/
2025-06-29 09:01:59 +02:00
Massimo Pissarello
e3bbd509c3 Translated using Weblate (Italian)
Currently translated at 98.4% (739 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/it/
2025-06-29 09:01:57 +02:00
Sylvain Pichon
65acca5380 Translated using Weblate (Norwegian Bokmål)
Currently translated at 80.6% (606 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/nb_NO/
2025-06-29 09:01:54 +02:00
Sylvain Pichon
e1d4a80e57 Translated using Weblate (French)
Currently translated at 100.0% (751 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/fr/
2025-06-29 09:01:52 +02:00
Sylvain Pichon
08f1db2641 Translated using Weblate (Spanish)
Currently translated at 97.3% (731 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/es/
2025-06-29 09:01:50 +02:00
Sylvain Pichon
d78b0b3929 Translated using Weblate (German)
Currently translated at 88.5% (665 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/de/
2025-06-29 09:01:48 +02:00
jokob-sk
14f376cacb Merge branch 'main' of https://github.com/jokob-sk/NetAlertX
Some checks are pending
Code checks / check-url-paths (push) Waiting to run
docker / docker_dev (push) Waiting to run
Deploy MkDocs / deploy (push) Waiting to run
2025-06-28 16:58:50 +10:00
jokob-sk
8ccbc12024 docs + hiding archived devices in Network view 2025-06-28 16:58:37 +10:00
jokob-sk
c646c36f4f docs + hiding archived devices in Network view 2025-06-28 16:46:05 +10:00
Safeguard
d5a5e7bcf9 Translated using Weblate (Russian)
Some checks failed
docker / docker_dev (push) Has been cancelled
Deploy MkDocs / deploy (push) Has been cancelled
Code checks / check-url-paths (push) Has been cancelled
Currently translated at 100.0% (751 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ru/
2025-06-27 11:01:49 +02:00
jokob-sk
73f6e6d785 docs #1095
Some checks are pending
Code checks / check-url-paths (push) Waiting to run
docker / docker_dev (push) Waiting to run
Deploy MkDocs / deploy (push) Waiting to run
2025-06-27 07:24:40 +10:00
Hosted Weblate
87b36562cc Merge branch 'origin/main' into Weblate.
Some checks are pending
Code checks / check-url-paths (push) Waiting to run
docker / docker_dev (push) Waiting to run
Deploy MkDocs / deploy (push) Waiting to run
2025-06-26 04:25:52 +00:00
Максим Горпиніч
7406b6688d Translated using Weblate (Ukrainian)
Currently translated at 100.0% (751 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/uk/
2025-06-26 04:25:50 +00:00
Sylvain Pichon
f58dd121d5 Translated using Weblate (French)
Currently translated at 100.0% (751 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/fr/
2025-06-26 04:25:49 +00:00
jokob-sk
443b10a990 docs 2025-06-26 14:25:20 +10:00
jokob-sk
e8e48a2cc4 integer causing normalization issue in MQTT #1102
Some checks are pending
Code checks / check-url-paths (push) Waiting to run
docker / docker_dev (push) Waiting to run
Deploy MkDocs / deploy (push) Waiting to run
2025-06-26 07:25:10 +10:00
38 changed files with 691 additions and 432 deletions

0
.github/ISSUE_TEMPLATE/documentation-feedback.yml vendored Normal file → Executable file
View File

0
.github/ISSUE_TEMPLATE/enhancement-request.yml vendored Normal file → Executable file
View File

0
.github/ISSUE_TEMPLATE/refactor-codequality-request.yml vendored Normal file → Executable file
View File

0
.github/ISSUE_TEMPLATE/security-report.yml vendored Normal file → Executable file
View File

0
.github/ISSUE_TEMPLATE/translation-request.yml vendored Normal file → Executable file
View File

0
.github/PULL_REQUEST_TEMPLATE/code-pr-template.md vendored Normal file → Executable file
View File

0
.github/PULL_REQUEST_TEMPLATE/docs-pr-template.md vendored Normal file → Executable file
View File

0
CODE_OF_CONDUCT.md Normal file → Executable file
View File

View File

@@ -28,11 +28,14 @@ Get visibility of what's going on on your WIFI/LAN network and enable presence d
Start NetAlertX in seconds with Docker: Start NetAlertX in seconds with Docker:
```bash ```bash
docker run -d \ docker run -d --rm --network=host \
--name=netalertx \ -v local_path/config:/app/config \
-p 20211:20211 \ -v local_path/db:/app/db \
-v /your/config/path:/config \ --mount type=tmpfs,target=/app/api \
jokobsk/netalertx -e PUID=200 -e PGID=300 \
-e TZ=Europe/Berlin \
-e PORT=20211 \
ghcr.io/jokob-sk/netalertx:latest
``` ```
Need help configuring it? Check the [usage guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/README.md) or [full documentation](https://jokob-sk.github.io/NetAlertX/). Need help configuring it? Check the [usage guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/README.md) or [full documentation](https://jokob-sk.github.io/NetAlertX/).
@@ -92,6 +95,7 @@ Supported browsers: Chrome, Firefox
- [[Development] API docs](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md) - [[Development] API docs](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md)
- [[Development] Custom Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS_DEV.md) - [[Development] Custom Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS_DEV.md)
...or explore all the [documentation here](https://jokob-sk.github.io/NetAlertX/).
## 🔐 Security & Privacy ## 🔐 Security & Privacy
@@ -120,17 +124,17 @@ A: No. All scans and data remain local, unless you set up cloud-based notificati
A: Yes! You can install it bare-metal. See the [bare metal installation guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HW_INSTALL.md). A: Yes! You can install it bare-metal. See the [bare metal installation guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HW_INSTALL.md).
**Q: Where is the data stored?** **Q: Where is the data stored?**
A: In the `/config` volume, mapped in Docker. Back up this folder regularly. A: In the `/config` and `/db` folders, mapped in Docker. Back up these folders regularly.
## 🐞 Known Issues ## 🐞 Known Issues
- Some scanners (e.g. ARP) may not detect devices on different subnets. - Some scanners (e.g. ARP) may not detect devices on different subnets. See the [Remote networks guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md) for workarounds.
- Wi-Fi-only networks may require alternate scanners for accurate detection. - Wi-Fi-only networks may require alternate scanners for accurate detection.
- Notification throttling may be needed for large networks to prevent spam. - Notification throttling may be needed for large networks to prevent spam.
- On some systems, elevated permissions (like `CAP_NET_RAW`) may be needed for low-level scanning. - On some systems, elevated permissions (like `CAP_NET_RAW`) may be needed for low-level scanning.
Check the [GitHub Issues](https://github.com/jokob-sk/NetAlertX/issues) for the latest bug reports and solutions. Check the [GitHub Issues](https://github.com/jokob-sk/NetAlertX/issues) for the latest bug reports and solutions and consult [the official documentation](https://jokob-sk.github.io/NetAlertX/).
## 📃 Everything else ## 📃 Everything else
<!--- --------------------------------------------------------------------- ---> <!--- --------------------------------------------------------------------- --->

78
docs/FIX_OFFLINE_DETECTION.md Executable file
View File

@@ -0,0 +1,78 @@
# Troubleshooting: Devices Show Offline When They Are Online
In some network setups, certain devices may intermittently appear as **offline** in NetAlertX, even though they are connected and responsive. This issue is often more noticeable with devices that have **higher IP addresses** within the subnet.
> [!NOTE]
>
> Network presence graph showing increased drop outs before enabling additional `ICMP` scans and continuous online presence after following this guide. This graph shows a sudden spike in drop outs probably caused by a device software update.
> ![before after presence](./img/FIX_OFFLINE_DETECTION/presence_graph_before_after.png)
## Symptoms
* Devices sporadically show as offline in the presence timeline.
* This behavior often affects devices with higher IPs (e.g., `192.168.1.240+`).
* Presence data appears inconsistent or unreliable despite the device being online.
## Cause
This issue is typically related to scanning limitations:
* **ARP scan timeouts** may prevent full subnet coverage.
* **Sole reliance on ARP** can result in missed detections:
* Some devices (like iPhones) suppress or reject frequent ARP requests.
* ARP responses may be blocked or delayed due to power-saving features or OS behavior.
* **Scanning frequency conflicts**, where devices ignore repeated scans within a short period.
## Recommended Fixes
To improve presence accuracy and reduce false offline states:
### ✅ Increase ARP Scan Timeout
Extend the ARP scanner timeout to ensure full subnet coverage:
```env
ARPSCAN_RUN_TIMEOUT=360
```
> Adjust based on your network size and device count.
### ✅ Add ICMP (Ping) Scanning
Enable the `ICMP` scan plugin to complement ARP detection. ICMP is often more reliable for detecting active hosts, especially when ARP fails.
### ✅ Use Multiple Detection Methods
A combined approach greatly improves detection robustness:
* `ARPSCAN` (default)
* `ICMP` (ping)
* `NMAPDEV` (nmap)
This hybrid strategy increases reliability, especially for down detection and alerting. See [other plugins](./PLUGINS.md) that might be compatible with your setup. See benefits and drawbacks of individual scan methods in their respective docs.
## Results
After increasing the ARP timeout and adding ICMP scanning (on select IP ranges), users typically report:
* More consistent presence graphs
* Fewer false offline events
* Better coverage across all IP ranges
## Summary
| Setting | Recommendation |
| --------------------- | --------------------------------------------- |
| `ARPSCAN_RUN_TIMEOUT` | Increase to ensure scans reach all IPs |
| `ICMP` Scan | Enable to detect devices ARP might miss |
| Multi-method Scanning | Use a mix of ARP, ICMP, and NMAP-based methods |
---
**Tip:** Each environment is unique. Consider fine-tuning scan settings based on your network size, device behavior, and desired detection accuracy.
Let us know in the [NetAlertX Discussions](https://github.com/jokob-sk/NetAlertX/discussions) if you have further feedback or edge cases.
See also [Remote Networks](./REMOTE_NETWORKS.md) for more advanced setups.

View File

@@ -1,6 +1,49 @@
# 📧 SMTP guides # 📧 SMTP server guides
## Using the GMX SMTP server The SMTP plugin supports any SMTP server. Here are some commonly used services to help speed up your configuration.
> [!NOTE]
> If you are using a self hosted SMTP server ssh into the container and verify (e.g. via ping) that your server is reachable from within the NetAlertX container. See also how to ssh into the container if you are running it as a [Home Assistant](./HOME_ASSISTANT.md) addon.
## Gmail
1. Create an app password by following the instructions from Google, you need to Enable 2FA for this to work.
[https://support.google.com/accounts/answer/185833](https://support.google.com/accounts/answer/185833)
2. Specify the following settings:
```python
SMTP_RUN='on_notification'
SMTP_SKIP_TLS=True
SMTP_FORCE_SSL=True
SMTP_PORT=465
SMTP_SERVER='smtp.gmail.com'
SMTP_PASS='16-digit passcode from google'
SMTP_REPORT_TO='some_target_email@gmail.com'
```
## Brevo
Brevo allows for 300 free emails per day as of time of writing.
1. Create an account on Brevo: https://www.brevo.com/free-smtp-server/
2. Click your name -> SMTP & API
3. Click Generate a new SMTP key
4. Save the details and fill in the NetAlertX settings as below.
```python
SMTP_SERVER='smtp-relay.brevo.com'
SMTP_PORT=587
SMTP_SKIP_LOGIN=False
SMTP_USER='user@email.com'
SMTP_PASS='xsmtpsib-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxx'
SMTP_SKIP_TLS=False
SMTP_FORCE_SSL=False
SMTP_REPORT_TO='some_target_email@gmail.com'
SMTP_REPORT_FROM='NetAlertX <user@email.com>'
```
## GMX
1. Go to your GMX account https://account.gmx.com 1. Go to your GMX account https://account.gmx.com
2. Under Security Options enable 2FA (Two-factor authentication) 2. Under Security Options enable 2FA (Two-factor authentication)
@@ -21,21 +64,3 @@
SMTP_REPORT_TO='some_target_email@gmail.com' SMTP_REPORT_TO='some_target_email@gmail.com'
``` ```
## Using the Gmail SMTP server
1. Create an app password by following the instructions from Google, you need to Enable 2FA for this to work.
[https://support.google.com/accounts/answer/185833](https://support.google.com/accounts/answer/185833)
2. Specify the following settings:
```python
SMTP_RUN='on_notification'
SMTP_SKIP_TLS=True
SMTP_FORCE_SSL=True
SMTP_PORT=465
SMTP_SERVER='smtp.gmail.com'
SMTP_PASS='16-digit passcode from google'
SMTP_REPORT_TO='some_target_email@gmail.com'
```

View File

@@ -22,4 +22,4 @@ For a comparison, this is how the UI looks like if you are on the latest stable
## Implementation details ## Implementation details
During build a [/app/front/buildtimestamp.txt](https://github.com/jokob-sk/NetAlertX/blob/092797e75ccfa8359444ad149e727358ac4da05f/Dockerfile#L44) file is created. The app then periodically checks if a new release is available with a newer timestamp in GitHub's rest-based JSON endpoint (check the `def isNewVersion():` method for details). During build a [/app/front/buildtimestamp.txt](https://github.com/jokob-sk/NetAlertX/blob/092797e75ccfa8359444ad149e727358ac4da05f/Dockerfile#L44) file is created. The app then periodically checks if a new release is available with a newer timestamp in GitHub's rest-based JSON endpoint (check the `def isNewVersion:` method for details).

60
docs/WORKFLOW_EXAMPLES.md Executable file
View File

@@ -0,0 +1,60 @@
# Workflow examples
Workflows in NetAlertX automate actions based on real-time events and conditions. Below are practical examples that demonstrate how to build automation using triggers, conditions, and actions.
## Un-archive devices if detected online
This workflow automatically unarchives a device if it was previously archived but has now been detected as online.
### 📋 Use Case
Sometimes devices are manually archived (e.g., no longer expected on the network), but they reappear unexpectedly. This workflow reverses the archive status when such devices are detected during a scan.
### ⚙️ Workflow Configuration
```json
{
"name": "Un-archive devices if detected online",
"trigger": {
"object_type": "Devices",
"event_type": "update"
},
"conditions": [
{
"logic": "AND",
"conditions": [
{
"field": "devIsArchived",
"operator": "equals",
"value": "1"
},
{
"field": "devPresentLastScan",
"operator": "equals",
"value": "1"
}
]
}
],
"actions": [
{
"type": "update_field",
"field": "devIsArchived",
"value": "0"
}
],
"enabled": "Yes"
}
```
### 🔍 Explanation
- Trigger: Listens for updates to device records.
- Conditions:
- `devIsArchived` is `1` (archived).
- `devPresentLastScan` is `1` (device was detected in the latest scan).
- Action: Updates the device to set `devIsArchived` to `0` (unarchived).
### ✅ Result
Whenever a previously archived device shows up during a network scan, it will be automatically unarchived — allowing it to reappear in your device lists and dashboards.

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 KiB

View File

@@ -163,7 +163,7 @@
devType as type, devType as type,
devLastIP as last_ip, devLastIP as last_ip,
(select devType from Devices a where devMac = "'.$node_mac.'") as node_type (select devType from Devices a where devMac = "'.$node_mac.'") as node_type
FROM Devices WHERE devParentMAC = "'.$node_mac.'" order by port, name asc'; FROM Devices WHERE devParentMAC = "'.$node_mac.'" and devIsArchived = 0 order by port, name asc';
global $db; global $db;
$func_result = $db->query($func_sql); $func_result = $db->query($func_sql);
@@ -279,7 +279,8 @@
a.devParentMAC as parent_mac, a.devParentMAC as parent_mac,
a.devIcon as node_icon a.devIcon as node_icon
FROM Devices a FROM Devices a
WHERE a.devType in (".$networkDeviceTypes.") WHERE a.devType in (".$networkDeviceTypes.")
AND devIsArchived = 0
) t1 ) t1
LEFT JOIN LEFT JOIN
( (
@@ -363,6 +364,7 @@
WHERE devParentMAC IS NULL WHERE devParentMAC IS NULL
OR devParentMAC IN ("", " ", "undefined", "null") OR devParentMAC IN ("", " ", "undefined", "null")
AND devMac NOT LIKE "%internet%" AND devMac NOT LIKE "%internet%"
AND devIsArchived = 0
ORDER BY name ASC;'; ORDER BY name ASC;';
global $db; global $db;

2
front/php/templates/language/ar_ar.json Normal file → Executable file
View File

@@ -750,4 +750,4 @@
"settings_update_item_warning": "تحذير تحديث العنصر", "settings_update_item_warning": "تحذير تحديث العنصر",
"test_event_icon": "أيقونة اختبار الحدث", "test_event_icon": "أيقونة اختبار الحدث",
"test_event_tooltip": "تلميح اختبار الحدث" "test_event_tooltip": "تلميح اختبار الحدث"
} }

18
front/php/templates/language/ca_ca.json Normal file → Executable file
View File

@@ -211,7 +211,7 @@
"Device_TableHead_AlertDown": "Cancel·lar alerta", "Device_TableHead_AlertDown": "Cancel·lar alerta",
"Device_TableHead_Connected_Devices": "Connexions", "Device_TableHead_Connected_Devices": "Connexions",
"Device_TableHead_CustomProps": "Props / Accions", "Device_TableHead_CustomProps": "Props / Accions",
"Device_TableHead_FQDN": "", "Device_TableHead_FQDN": "FQDN",
"Device_TableHead_Favorite": "Favorit", "Device_TableHead_Favorite": "Favorit",
"Device_TableHead_FirstSession": "Primera Sessió", "Device_TableHead_FirstSession": "Primera Sessió",
"Device_TableHead_GUID": "GUID", "Device_TableHead_GUID": "GUID",
@@ -359,11 +359,11 @@
"Maint_PurgeLog": "Registre de purga", "Maint_PurgeLog": "Registre de purga",
"Maint_RestartServer": "Reinici del servidor", "Maint_RestartServer": "Reinici del servidor",
"Maint_Restart_Server_noti_text": "Estàs segur que vols reiniciar el servidor backend? Això pot causar incongruència a l'aplicació. Abans fes còpia de seguretat de la vostra configuració. <br/> <br/> Nota: Això pot durar uns quants minuts.", "Maint_Restart_Server_noti_text": "Estàs segur que vols reiniciar el servidor backend? Això pot causar incongruència a l'aplicació. Abans fes còpia de seguretat de la vostra configuració. <br/> <br/> Nota: Això pot durar uns quants minuts.",
"Maintenance_InitCheck": "", "Maintenance_InitCheck": "Init Check",
"Maintenance_InitCheck_Checking": "", "Maintenance_InitCheck_Checking": "Comprovant…",
"Maintenance_InitCheck_QuickSetupGuide": "", "Maintenance_InitCheck_QuickSetupGuide": "Assegureu-vos de seguir la guia <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\"> de configuració ràpida</a>.",
"Maintenance_InitCheck_Success": "", "Maintenance_InitCheck_Success": "Aplicació inicialitzada amb èxit!",
"Maintenance_ReCheck": "", "Maintenance_ReCheck": "Tornar a comprovar",
"Maintenance_Running_Version": "Versió instal·lada", "Maintenance_Running_Version": "Versió instal·lada",
"Maintenance_Status": "Estat", "Maintenance_Status": "Estat",
"Maintenance_Title": "Eines de manteniment", "Maintenance_Title": "Eines de manteniment",
@@ -565,8 +565,8 @@
"Presence_Shortcut_Favorites": "Favorits", "Presence_Shortcut_Favorites": "Favorits",
"Presence_Shortcut_NewDevices": "Nous dispositius", "Presence_Shortcut_NewDevices": "Nous dispositius",
"Presence_Title": "Detecció de dispositius", "Presence_Title": "Detecció de dispositius",
"REFRESH_FQDN_description": "", "REFRESH_FQDN_description": "Re-escaneja tots dispositius i refresca el seu (FQDN). Si està desactivat, nomes s'escanegen els noms coneguts per fer-ho més ràpid. En aquest cas, FQDN s'actualitza només durant descoberta inicial de dispositius.",
"REFRESH_FQDN_name": "", "REFRESH_FQDN_name": "Refresc FQDN",
"REPORT_DASHBOARD_URL_description": "Aquesta URL s'utilitza com a base per generar enllaços en informes HTML (per exemple: correus electrònics). Introduïu la URL completa començant per <code>http://</code> incloent el número de port (sense barra inicial <code>/</code>).", "REPORT_DASHBOARD_URL_description": "Aquesta URL s'utilitza com a base per generar enllaços en informes HTML (per exemple: correus electrònics). Introduïu la URL completa començant per <code>http://</code> incloent el número de port (sense barra inicial <code>/</code>).",
"REPORT_DASHBOARD_URL_name": "URL NetAlertX", "REPORT_DASHBOARD_URL_name": "URL NetAlertX",
"REPORT_ERROR": "Si us plau, introdueix dins de la caixa de text els caràcters que veu a la imatge de sota. Això és requerit per evitar enviaments automàtics", "REPORT_ERROR": "Si us plau, introdueix dins de la caixa de text els caràcters que veu a la imatge de sota. Això és requerit per evitar enviaments automàtics",
@@ -750,4 +750,4 @@
"settings_update_item_warning": "Actualitza el valor sota. Sigues curós de seguir el format anterior. <b>No hi ha validació.</b>", "settings_update_item_warning": "Actualitza el valor sota. Sigues curós de seguir el format anterior. <b>No hi ha validació.</b>",
"test_event_icon": "fa-vial-circle-check", "test_event_icon": "fa-vial-circle-check",
"test_event_tooltip": "Deseu els canvis primer abans de comprovar la configuració." "test_event_tooltip": "Deseu els canvis primer abans de comprovar la configuració."
} }

102
front/php/templates/language/cs_cz.json Normal file → Executable file
View File

@@ -5,11 +5,11 @@
"API_TOKEN_name": "API token", "API_TOKEN_name": "API token",
"API_display_name": "API", "API_display_name": "API",
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>", "API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
"About_Design": "", "About_Design": "Designováno pro:",
"About_Exit": "", "About_Exit": "Odhlásit",
"About_Title": "", "About_Title": "Scanner síťové bezpečnosti a framework pro upozornění",
"AppEvents_AppEventProcessed": "Zpracováno", "AppEvents_AppEventProcessed": "Zpracováno",
"AppEvents_DateTimeCreated": "Zalogováno", "AppEvents_DateTimeCreated": "Objeveno",
"AppEvents_Extra": "Extra", "AppEvents_Extra": "Extra",
"AppEvents_GUID": "", "AppEvents_GUID": "",
"AppEvents_Helper1": "", "AppEvents_Helper1": "",
@@ -289,45 +289,45 @@
"Gen_Action": "", "Gen_Action": "",
"Gen_Add": "", "Gen_Add": "",
"Gen_AddDevice": "", "Gen_AddDevice": "",
"Gen_Add_All": "", "Gen_Add_All": "Přidat vše",
"Gen_All_Devices": "", "Gen_All_Devices": "Všechna zařízení",
"Gen_AreYouSure": "", "Gen_AreYouSure": "Jste si jistý?",
"Gen_Backup": "", "Gen_Backup": "Spustit zálohování",
"Gen_Cancel": "", "Gen_Cancel": "Zrušit",
"Gen_Change": "", "Gen_Change": "Změnit",
"Gen_Copy": "", "Gen_Copy": "Spustit",
"Gen_DataUpdatedUITakesTime": "", "Gen_DataUpdatedUITakesTime": "OK - může zabrat chvíli aktualizovat rozhraní, pokud běží scan.",
"Gen_Delete": "", "Gen_Delete": "Smazat",
"Gen_DeleteAll": "", "Gen_DeleteAll": "Smazat vše",
"Gen_Description": "", "Gen_Description": "Popis",
"Gen_Error": "", "Gen_Error": "Chyba",
"Gen_Filter": "", "Gen_Filter": "Filtr",
"Gen_Generate": "", "Gen_Generate": "Vygenerovat",
"Gen_LockedDB": "", "Gen_LockedDB": "CHYBA - Databáze je možná zamčená - Zkontrolujte F12 -> Nástroje pro vývojáře -> Konzole. nebo to zkuste později.",
"Gen_Offline": "", "Gen_Offline": "Offline",
"Gen_Okay": "", "Gen_Okay": "Ok",
"Gen_Online": "", "Gen_Online": "Online",
"Gen_Purge": "", "Gen_Purge": "Vyčistit",
"Gen_ReadDocs": "", "Gen_ReadDocs": "Přečíst více v dokumentaci.",
"Gen_Remove_All": "", "Gen_Remove_All": "Odstranit vše",
"Gen_Remove_Last": "", "Gen_Remove_Last": "Odstranit poslední",
"Gen_Reset": "", "Gen_Reset": "Vyresetovat",
"Gen_Restore": "", "Gen_Restore": "Spustit obnovu",
"Gen_Run": "", "Gen_Run": "Spustit",
"Gen_Save": "", "Gen_Save": "Uložit",
"Gen_Saved": "", "Gen_Saved": "Uloženo",
"Gen_Search": "", "Gen_Search": "Hledat",
"Gen_Select": "", "Gen_Select": "Vybrat",
"Gen_SelectIcon": "", "Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
"Gen_SelectToPreview": "", "Gen_SelectToPreview": "Vybrat na náhled",
"Gen_Selected_Devices": "", "Gen_Selected_Devices": "Vybraná zařízení:",
"Gen_Switch": "", "Gen_Switch": "Přepnout",
"Gen_Upd": "", "Gen_Upd": "Úspěšně aktualizováno",
"Gen_Upd_Fail": "", "Gen_Upd_Fail": "Aktualizace se nezdařila",
"Gen_Update": "", "Gen_Update": "Aktualizovat",
"Gen_Update_Value": "", "Gen_Update_Value": "Aktualizovat hodnotu",
"Gen_ValidIcon": "", "Gen_ValidIcon": "<i class=\"fa-solid fa-chevron-right \"></i>",
"Gen_Warning": "", "Gen_Warning": "Upozornění",
"Gen_Work_In_Progress": "", "Gen_Work_In_Progress": "",
"Gen_create_new_device": "", "Gen_create_new_device": "",
"Gen_create_new_device_info": "", "Gen_create_new_device_info": "",
@@ -704,13 +704,13 @@
"WF_Trigger": "", "WF_Trigger": "",
"WF_Trigger_event_type": "", "WF_Trigger_event_type": "",
"WF_Trigger_type": "", "WF_Trigger_type": "",
"add_icon_event_icon": "", "add_icon_event_icon": "fa-square-plus",
"add_icon_event_tooltip": "", "add_icon_event_tooltip": "Přidat novou ikonu",
"add_option_event_icon": "", "add_option_event_icon": "fa-square-plus",
"add_option_event_tooltip": "", "add_option_event_tooltip": "Přidat novou hodnotu",
"copy_icons_event_icon": "", "copy_icons_event_icon": "fa-copy",
"copy_icons_event_tooltip": "", "copy_icons_event_tooltip": "Přepiš ikony všech zařízení za stejný typ zařízení",
"devices_old": "", "devices_old": "Obnovuji…",
"general_event_description": "", "general_event_description": "",
"general_event_title": "", "general_event_title": "",
"go_to_node_event_icon": "", "go_to_node_event_icon": "",
@@ -750,4 +750,4 @@
"settings_update_item_warning": "", "settings_update_item_warning": "",
"test_event_icon": "", "test_event_icon": "",
"test_event_tooltip": "" "test_event_tooltip": ""
} }

18
front/php/templates/language/de_de.json Normal file → Executable file
View File

@@ -17,7 +17,7 @@
"About_Exit": "Abmelden", "About_Exit": "Abmelden",
"About_Title": "Netzwerksicherheitsscanner und Benachrichtigungsframework", "About_Title": "Netzwerksicherheitsscanner und Benachrichtigungsframework",
"AppEvents_AppEventProcessed": "Verarbeitet", "AppEvents_AppEventProcessed": "Verarbeitet",
"AppEvents_DateTimeCreated": "Protokolliert", "AppEvents_DateTimeCreated": "Entdeckt am",
"AppEvents_Extra": "Extra", "AppEvents_Extra": "Extra",
"AppEvents_GUID": "Anwendungsereignis-GUID", "AppEvents_GUID": "Anwendungsereignis-GUID",
"AppEvents_Helper1": "Helfer 1", "AppEvents_Helper1": "Helfer 1",
@@ -98,7 +98,7 @@
"DevDetail_GoToNetworkNode": "Zur Netzwerkseite des angegebenen Knotens navigieren.", "DevDetail_GoToNetworkNode": "Zur Netzwerkseite des angegebenen Knotens navigieren.",
"DevDetail_Icon": "Icon", "DevDetail_Icon": "Icon",
"DevDetail_Icon_Descr": "Geben Sie einen Font Awesome Icon-Namen ohne das Präfix „fa-“ ein oder die vollständige Klasse, z. B.: fa fa-brands fa-apple.", "DevDetail_Icon_Descr": "Geben Sie einen Font Awesome Icon-Namen ohne das Präfix „fa-“ ein oder die vollständige Klasse, z. B.: fa fa-brands fa-apple.",
"DevDetail_Loading": "Laden ...", "DevDetail_Loading": "Laden ",
"DevDetail_MainInfo_Comments": "Notiz", "DevDetail_MainInfo_Comments": "Notiz",
"DevDetail_MainInfo_Favorite": "Favorit", "DevDetail_MainInfo_Favorite": "Favorit",
"DevDetail_MainInfo_Group": "Gruppe", "DevDetail_MainInfo_Group": "Gruppe",
@@ -263,7 +263,7 @@
"ENCRYPTION_KEY_name": "Verschlüsselungsschlüssel", "ENCRYPTION_KEY_name": "Verschlüsselungsschlüssel",
"Email_display_name": "Email", "Email_display_name": "Email",
"Email_icon": "<i class=\"fa fa-at\"></i>", "Email_icon": "<i class=\"fa fa-at\"></i>",
"Events_Loading": "Laden...", "Events_Loading": "Laden",
"Events_Periodselect_All": "Alle Ereignisse", "Events_Periodselect_All": "Alle Ereignisse",
"Events_Periodselect_LastMonth": "Letzter Monat", "Events_Periodselect_LastMonth": "Letzter Monat",
"Events_Periodselect_LastWeek": "Letzte Woche", "Events_Periodselect_LastWeek": "Letzte Woche",
@@ -353,7 +353,7 @@
"LOADED_PLUGINS_name": "Geladene Plugins", "LOADED_PLUGINS_name": "Geladene Plugins",
"LOG_LEVEL_description": "Diese Einstellung aktiviert die erweiterte Protokollierung. Nützlich fürs Debuggen von in die Datenbank geschriebenen Events.", "LOG_LEVEL_description": "Diese Einstellung aktiviert die erweiterte Protokollierung. Nützlich fürs Debuggen von in die Datenbank geschriebenen Events.",
"LOG_LEVEL_name": "Erweiterte Protokollierung", "LOG_LEVEL_name": "Erweiterte Protokollierung",
"Loading": "Laden...", "Loading": "Laden",
"Login_Box": "Passwort eingeben", "Login_Box": "Passwort eingeben",
"Login_Default_PWD": "Standardpasswort \"123456\" noch immer aktiv.", "Login_Default_PWD": "Standardpasswort \"123456\" noch immer aktiv.",
"Login_Info": "", "Login_Info": "",
@@ -386,10 +386,10 @@
"Maint_RestartServer": "Server neu starten", "Maint_RestartServer": "Server neu starten",
"Maint_Restart_Server_noti_text": "Soll der Backend-Server wirklich neu gestartet werden? Das könnte Instabilitäten verursachen. Vorher ein Backup erstellen. <br/><br/>Hinweis: Das kann einige Minuten dauern.", "Maint_Restart_Server_noti_text": "Soll der Backend-Server wirklich neu gestartet werden? Das könnte Instabilitäten verursachen. Vorher ein Backup erstellen. <br/><br/>Hinweis: Das kann einige Minuten dauern.",
"Maintenance_InitCheck": "", "Maintenance_InitCheck": "",
"Maintenance_InitCheck_Checking": "", "Maintenance_InitCheck_Checking": "Prüfen …",
"Maintenance_InitCheck_QuickSetupGuide": "", "Maintenance_InitCheck_QuickSetupGuide": "",
"Maintenance_InitCheck_Success": "", "Maintenance_InitCheck_Success": "Anwendung erfolgreich initialisiert!",
"Maintenance_ReCheck": "Wiederhole Check", "Maintenance_ReCheck": "Prüfung wiederholen",
"Maintenance_Running_Version": "Installierte Version", "Maintenance_Running_Version": "Installierte Version",
"Maintenance_Status": "Status", "Maintenance_Status": "Status",
"Maintenance_Title": "Wartungswerkzeuge", "Maintenance_Title": "Wartungswerkzeuge",
@@ -597,7 +597,7 @@
"Presence_Key_OnlinePastMiss": "", "Presence_Key_OnlinePastMiss": "",
"Presence_Key_OnlinePastMiss_desc": "", "Presence_Key_OnlinePastMiss_desc": "",
"Presence_Key_OnlinePast_desc": "", "Presence_Key_OnlinePast_desc": "",
"Presence_Loading": "Laden...", "Presence_Loading": "Laden",
"Presence_Shortcut_AllDevices": "Meine Geräte", "Presence_Shortcut_AllDevices": "Meine Geräte",
"Presence_Shortcut_Archived": "Archiviert", "Presence_Shortcut_Archived": "Archiviert",
"Presence_Shortcut_Connected": "Verbunden", "Presence_Shortcut_Connected": "Verbunden",
@@ -831,4 +831,4 @@
"settings_update_item_warning": "", "settings_update_item_warning": "",
"test_event_icon": "", "test_event_icon": "",
"test_event_tooltip": "Speichere die Änderungen, bevor Sie die Einstellungen testen." "test_event_tooltip": "Speichere die Änderungen, bevor Sie die Einstellungen testen."
} }

4
front/php/templates/language/en_us.json Normal file → Executable file
View File

@@ -194,7 +194,7 @@
"DevDetail_button_Save": "Save", "DevDetail_button_Save": "Save",
"DeviceEdit_ValidMacIp": "Enter a valid <b>Mac</b> and <b>IP</b> address.", "DeviceEdit_ValidMacIp": "Enter a valid <b>Mac</b> and <b>IP</b> address.",
"Device_MultiEdit": "Multi-edit", "Device_MultiEdit": "Multi-edit",
"Device_MultiEdit_Backup": "Careful, entering wrong values below will break your setup. Please backup your database or Devices configuration first (<a href=\"php/server/devices.php?action=ExportCSV\">click to download <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Read how to recover Devices from this file in the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Backups documentation</a>. In order to apply your changes click the <b>Save<i class=\"fa-solid fa-save\"></i></b> icon on each field you want to update.", "Device_MultiEdit_Backup": "Careful, entering wrong values below will break your setup. Please backup your database or Devices configuration first (<a href=\"php/server/devices.php?action=ExportCSV\">click to download <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Read how to recover Devices from this file in the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Backups documentation</a>. In order to apply your changes click the <b>Save<i class=\"fa-solid fa-save\"></i></b> icon on each field you want to update.",
"Device_MultiEdit_Fields": "Edit fields:", "Device_MultiEdit_Fields": "Edit fields:",
"Device_MultiEdit_MassActions": "Mass actions:", "Device_MultiEdit_MassActions": "Mass actions:",
"Device_MultiEdit_Tooltip": "Careful. Clicking this will apply the value on the left to all devices selected above.", "Device_MultiEdit_Tooltip": "Careful. Clicking this will apply the value on the left to all devices selected above.",
@@ -750,4 +750,4 @@
"settings_update_item_warning": "Update the value below. Be careful to follow the previous format. <b>Validation is not performed.</b>", "settings_update_item_warning": "Update the value below. Be careful to follow the previous format. <b>Validation is not performed.</b>",
"test_event_icon": "fa-vial-circle-check", "test_event_icon": "fa-vial-circle-check",
"test_event_tooltip": "Save your changes at first before you test your settings." "test_event_tooltip": "Save your changes at first before you test your settings."
} }

2
front/php/templates/language/es_es.json Normal file → Executable file
View File

@@ -829,4 +829,4 @@
"settings_update_item_warning": "Actualice el valor a continuación. Tenga cuidado de seguir el formato anterior. <b>O la validación no se realiza.</b>", "settings_update_item_warning": "Actualice el valor a continuación. Tenga cuidado de seguir el formato anterior. <b>O la validación no se realiza.</b>",
"test_event_icon": "fa-vial-circle-check", "test_event_icon": "fa-vial-circle-check",
"test_event_tooltip": "Guarda tus cambios antes de probar nuevos ajustes." "test_event_tooltip": "Guarda tus cambios antes de probar nuevos ajustes."
} }

14
front/php/templates/language/fr_fr.json Normal file → Executable file
View File

@@ -9,7 +9,7 @@
"About_Exit": "Se déconnecter", "About_Exit": "Se déconnecter",
"About_Title": "Analyse de la sécurité du réseau et cadre de notification", "About_Title": "Analyse de la sécurité du réseau et cadre de notification",
"AppEvents_AppEventProcessed": "Traité(s)", "AppEvents_AppEventProcessed": "Traité(s)",
"AppEvents_DateTimeCreated": "Connecté", "AppEvents_DateTimeCreated": "Découvert le",
"AppEvents_Extra": "Extra", "AppEvents_Extra": "Extra",
"AppEvents_GUID": "GUID dévénements de l'application", "AppEvents_GUID": "GUID dévénements de l'application",
"AppEvents_Helper1": "Assistant 1", "AppEvents_Helper1": "Assistant 1",
@@ -341,7 +341,7 @@
"LOADED_PLUGINS_name": "Plugins chargés", "LOADED_PLUGINS_name": "Plugins chargés",
"LOG_LEVEL_description": "Ce paramètre active une journalisation dans les logs plus verbeuse. Cela est utile pour identifier les événements écrivant dans la base de données.", "LOG_LEVEL_description": "Ce paramètre active une journalisation dans les logs plus verbeuse. Cela est utile pour identifier les événements écrivant dans la base de données.",
"LOG_LEVEL_name": "Afficher des journaux de log additionnels", "LOG_LEVEL_name": "Afficher des journaux de log additionnels",
"Loading": "Chargement...", "Loading": "Chargement",
"Login_Box": "Saisir votre mot de passe", "Login_Box": "Saisir votre mot de passe",
"Login_Default_PWD": "Le mot de passe par défaut \"123456\" est encore actif.", "Login_Default_PWD": "Le mot de passe par défaut \"123456\" est encore actif.",
"Login_Info": "Les mots de passe sont définis via le plugin Set Password. Vérifiez la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">documentation de SETPWD</a> si vous rencontrez des difficultés à vous identifier.", "Login_Info": "Les mots de passe sont définis via le plugin Set Password. Vérifiez la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">documentation de SETPWD</a> si vous rencontrez des difficultés à vous identifier.",
@@ -360,7 +360,7 @@
"Maint_RestartServer": "Relancer le serveur", "Maint_RestartServer": "Relancer le serveur",
"Maint_Restart_Server_noti_text": "Êtes-vous sûr de vouloir relancer le serveur back-end? Cela peut causer des incohérences avec l'application. Sauvegarder vos paramètres en premier lieu. <br/> <br/> Remarque: cela peut prendre quelques minutes.", "Maint_Restart_Server_noti_text": "Êtes-vous sûr de vouloir relancer le serveur back-end? Cela peut causer des incohérences avec l'application. Sauvegarder vos paramètres en premier lieu. <br/> <br/> Remarque: cela peut prendre quelques minutes.",
"Maintenance_InitCheck": "Vérification initiale", "Maintenance_InitCheck": "Vérification initiale",
"Maintenance_InitCheck_Checking": "Vérification...", "Maintenance_InitCheck_Checking": "Vérification",
"Maintenance_InitCheck_QuickSetupGuide": "Assurez-vous de suivre le <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">guide de démarrage rapide</a>.", "Maintenance_InitCheck_QuickSetupGuide": "Assurez-vous de suivre le <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">guide de démarrage rapide</a>.",
"Maintenance_InitCheck_Success": "Application initialisée avec succès!", "Maintenance_InitCheck_Success": "Application initialisée avec succès!",
"Maintenance_ReCheck": "Relancer la vérification", "Maintenance_ReCheck": "Relancer la vérification",
@@ -446,7 +446,7 @@
"Maintenance_Tools_Tab_UISettings": "Paramètres de l'interface", "Maintenance_Tools_Tab_UISettings": "Paramètres de l'interface",
"Maintenance_arp_status": "État du scan", "Maintenance_arp_status": "État du scan",
"Maintenance_arp_status_off": "est actuellement désactivé", "Maintenance_arp_status_off": "est actuellement désactivé",
"Maintenance_arp_status_on": "scan(s) actuellement en cours", "Maintenance_arp_status_on": "scan en cours",
"Maintenance_built_on": "Construit sur", "Maintenance_built_on": "Construit sur",
"Maintenance_current_version": "Vous êtes à jour. Découvrez sur quoi <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">je travaille</a>.", "Maintenance_current_version": "Vous êtes à jour. Découvrez sur quoi <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">je travaille</a>.",
"Maintenance_database_backup": "Sauvegardes de base de données", "Maintenance_database_backup": "Sauvegardes de base de données",
@@ -710,7 +710,7 @@
"add_option_event_tooltip": "Ajouter une nouvelle valeur", "add_option_event_tooltip": "Ajouter une nouvelle valeur",
"copy_icons_event_icon": "fa-copy", "copy_icons_event_icon": "fa-copy",
"copy_icons_event_tooltip": "Remplace les icônes de tous les appareils du même type", "copy_icons_event_tooltip": "Remplace les icônes de tous les appareils du même type",
"devices_old": "Rafraichissement...", "devices_old": "Rafraichissement",
"general_event_description": "L'événement que vous avez lancé peut prendre du temps avant que les tâches de fond ne soit terminées. La durée d'exécution finira une fois que la file d'exécution ci-dessous sera vide (consulter les <a href='/maintenance.php#tab_Logging'>journaux d'erreur</a> si vous rencontrez des erreurs). <br/> <br/> File d'exécution:", "general_event_description": "L'événement que vous avez lancé peut prendre du temps avant que les tâches de fond ne soit terminées. La durée d'exécution finira une fois que la file d'exécution ci-dessous sera vide (consulter les <a href='/maintenance.php#tab_Logging'>journaux d'erreur</a> si vous rencontrez des erreurs). <br/> <br/> File d'exécution:",
"general_event_title": "Lancement d'un événement sur mesure", "general_event_title": "Lancement d'un événement sur mesure",
"go_to_node_event_icon": "fa-square-up-right", "go_to_node_event_icon": "fa-square-up-right",
@@ -735,7 +735,7 @@
"settings_imported_label": "Paramètres importés", "settings_imported_label": "Paramètres importés",
"settings_missing": "Tous les paramètres n'ont pas été chargés! La base de données est trop sollicitée, ou bien la séquence de démarrage de l'application est trop lourde. Cliquez sur le bouton de rafraîchissement 🔄 en haut.", "settings_missing": "Tous les paramètres n'ont pas été chargés! La base de données est trop sollicitée, ou bien la séquence de démarrage de l'application est trop lourde. Cliquez sur le bouton de rafraîchissement 🔄 en haut.",
"settings_missing_block": "Erreur: les paramètres ne sont pas correctement chargés. Cliquer sur le bouton de rafraîchissement 🔄 en haut; sinon, vous pouvez vérifier les journaux du navigateur pour plus de détails (F12).", "settings_missing_block": "Erreur: les paramètres ne sont pas correctement chargés. Cliquer sur le bouton de rafraîchissement 🔄 en haut; sinon, vous pouvez vérifier les journaux du navigateur pour plus de détails (F12).",
"settings_old": "Importation des paramètres et réinitialisation...", "settings_old": "Importation des paramètres et réinitialisation",
"settings_other_scanners": "Autres plugins activés, hors scanners d'appareils.", "settings_other_scanners": "Autres plugins activés, hors scanners d'appareils.",
"settings_other_scanners_icon": "fa-solid fa-recycle", "settings_other_scanners_icon": "fa-solid fa-recycle",
"settings_other_scanners_label": "Autres scanners", "settings_other_scanners_label": "Autres scanners",
@@ -750,4 +750,4 @@
"settings_update_item_warning": "Mettre à jour la valeur ci-dessous. Veillez à bien suivre le même format qu'auparavant. <b>Il n'y a pas de pas de contrôle.</b>", "settings_update_item_warning": "Mettre à jour la valeur ci-dessous. Veillez à bien suivre le même format qu'auparavant. <b>Il n'y a pas de pas de contrôle.</b>",
"test_event_icon": "fa-vial-circle-check", "test_event_icon": "fa-vial-circle-check",
"test_event_tooltip": "Enregistrer d'abord vos modifications avant de tester vôtre paramétrage." "test_event_tooltip": "Enregistrer d'abord vos modifications avant de tester vôtre paramétrage."
} }

24
front/php/templates/language/it_it.json Normal file → Executable file
View File

@@ -9,7 +9,7 @@
"About_Exit": "Esci", "About_Exit": "Esci",
"About_Title": "Scanner di sicurezza di rete e framework di notifica", "About_Title": "Scanner di sicurezza di rete e framework di notifica",
"AppEvents_AppEventProcessed": "Elaborato", "AppEvents_AppEventProcessed": "Elaborato",
"AppEvents_DateTimeCreated": "Loggato", "AppEvents_DateTimeCreated": "Scoperto il",
"AppEvents_Extra": "Extra", "AppEvents_Extra": "Extra",
"AppEvents_GUID": "GUID evento applicazione", "AppEvents_GUID": "GUID evento applicazione",
"AppEvents_Helper1": "Aiutante 1", "AppEvents_Helper1": "Aiutante 1",
@@ -86,7 +86,7 @@
"DevDetail_GoToNetworkNode": "Passa alla pagina Rete del nodo specificato.", "DevDetail_GoToNetworkNode": "Passa alla pagina Rete del nodo specificato.",
"DevDetail_Icon": "Icona", "DevDetail_Icon": "Icona",
"DevDetail_Icon_Descr": "Inserisci il nome di un'icona Font Awesome senza il prefisso fa- o con la classe completa, es.: fa fa-brands fa-apple.", "DevDetail_Icon_Descr": "Inserisci il nome di un'icona Font Awesome senza il prefisso fa- o con la classe completa, es.: fa fa-brands fa-apple.",
"DevDetail_Loading": "Caricamento...", "DevDetail_Loading": "Caricamento",
"DevDetail_MainInfo_Comments": "Commenti", "DevDetail_MainInfo_Comments": "Commenti",
"DevDetail_MainInfo_Favorite": "Preferito", "DevDetail_MainInfo_Favorite": "Preferito",
"DevDetail_MainInfo_Group": "Gruppo", "DevDetail_MainInfo_Group": "Gruppo",
@@ -177,7 +177,7 @@
"DevDetail_Tools_WOL": "Invia comando WoL a ", "DevDetail_Tools_WOL": "Invia comando WoL a ",
"DevDetail_Tools_WOL_noti": "Wake-on-LAN", "DevDetail_Tools_WOL_noti": "Wake-on-LAN",
"DevDetail_Tools_WOL_noti_text": "Il comando Wake-on-LAN viene inviato all'indirizzo di broadcast. Se la destinazione non si trova nella sottorete/VLAN di NetAlertX, il dispositivo di destinazione non risponderà.", "DevDetail_Tools_WOL_noti_text": "Il comando Wake-on-LAN viene inviato all'indirizzo di broadcast. Se la destinazione non si trova nella sottorete/VLAN di NetAlertX, il dispositivo di destinazione non risponderà.",
"DevDetail_Type_hover": "Il tipo del dispositivo. Se selezioni uno dei dispositivi di rete predefiniti (ad esempio: AP, Firewall, Router, Switch...) verranno visualizzati nella struttura di rete come possibili nodi della rete principale.", "DevDetail_Type_hover": "Il tipo del dispositivo. Se selezioni uno dei dispositivi di rete predefiniti (ad esempio: AP, Firewall, Router, Switch) verranno visualizzati nella struttura di rete come possibili nodi della rete principale.",
"DevDetail_Vendor_hover": "Il produttore dovrebbe essere rilevato automaticamente. Puoi sovrascrivere o aggiungere un valore personalizzato.", "DevDetail_Vendor_hover": "Il produttore dovrebbe essere rilevato automaticamente. Puoi sovrascrivere o aggiungere un valore personalizzato.",
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN", "DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
"DevDetail_button_AddIcon": "Aggiungi nuova icona", "DevDetail_button_AddIcon": "Aggiungi nuova icona",
@@ -251,7 +251,7 @@
"ENCRYPTION_KEY_name": "Chiave di crittografia", "ENCRYPTION_KEY_name": "Chiave di crittografia",
"Email_display_name": "E-mail", "Email_display_name": "E-mail",
"Email_icon": "<i class=\"fa fa-at\"></i>", "Email_icon": "<i class=\"fa fa-at\"></i>",
"Events_Loading": "Caricamento...", "Events_Loading": "Caricamento",
"Events_Periodselect_All": "Tutte le info", "Events_Periodselect_All": "Tutte le info",
"Events_Periodselect_LastMonth": "Ultimo mese", "Events_Periodselect_LastMonth": "Ultimo mese",
"Events_Periodselect_LastWeek": "Ultima settimana", "Events_Periodselect_LastWeek": "Ultima settimana",
@@ -341,7 +341,7 @@
"LOADED_PLUGINS_name": "Plugin caricati", "LOADED_PLUGINS_name": "Plugin caricati",
"LOG_LEVEL_description": "Questa impostazione abilita un log più dettagliato. Utile per il debug degli eventi salvati nel database.", "LOG_LEVEL_description": "Questa impostazione abilita un log più dettagliato. Utile per il debug degli eventi salvati nel database.",
"LOG_LEVEL_name": "Stampa log aggiuntivo", "LOG_LEVEL_name": "Stampa log aggiuntivo",
"Loading": "Caricamento...", "Loading": "Caricamento",
"Login_Box": "Inserisci la tua password", "Login_Box": "Inserisci la tua password",
"Login_Default_PWD": "La password predefinita \"123456\" è ancora attiva.", "Login_Default_PWD": "La password predefinita \"123456\" è ancora attiva.",
"Login_Info": "Le password vengono impostate tramite il plugin Set Password. Controlla la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">documentazione SETPWD</a> se riscontri problemi di accesso.", "Login_Info": "Le password vengono impostate tramite il plugin Set Password. Controlla la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">documentazione SETPWD</a> se riscontri problemi di accesso.",
@@ -360,7 +360,7 @@
"Maint_RestartServer": "Riavvia server", "Maint_RestartServer": "Riavvia server",
"Maint_Restart_Server_noti_text": "Sei sicuro di voler riavviare il server backend? Questo potrebbe causare incoerenze dell'app. Prima esegui il backup della tua configurazione. <br/> <br/> Nota: l'operazione potrebbe richiedere alcuni minuti.", "Maint_Restart_Server_noti_text": "Sei sicuro di voler riavviare il server backend? Questo potrebbe causare incoerenze dell'app. Prima esegui il backup della tua configurazione. <br/> <br/> Nota: l'operazione potrebbe richiedere alcuni minuti.",
"Maintenance_InitCheck": "Controllo iniziale", "Maintenance_InitCheck": "Controllo iniziale",
"Maintenance_InitCheck_Checking": "Controllo in corso...", "Maintenance_InitCheck_Checking": "Controllo in corso",
"Maintenance_InitCheck_QuickSetupGuide": "Assicurati di aver seguito la <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">guida di configurazione rapida</a>.", "Maintenance_InitCheck_QuickSetupGuide": "Assicurati di aver seguito la <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">guida di configurazione rapida</a>.",
"Maintenance_InitCheck_Success": "Applicazione inizializzata con successo!", "Maintenance_InitCheck_Success": "Applicazione inizializzata con successo!",
"Maintenance_ReCheck": "Riprova controllo", "Maintenance_ReCheck": "Riprova controllo",
@@ -446,7 +446,7 @@
"Maintenance_Tools_Tab_UISettings": "Impostazioni UI", "Maintenance_Tools_Tab_UISettings": "Impostazioni UI",
"Maintenance_arp_status": "Stato scansione", "Maintenance_arp_status": "Stato scansione",
"Maintenance_arp_status_off": "è attualmente disabilitato", "Maintenance_arp_status_off": "è attualmente disabilitato",
"Maintenance_arp_status_on": "scansioni attualmente in esecuzione", "Maintenance_arp_status_on": "scansione in corso",
"Maintenance_built_on": "Rilasciato il", "Maintenance_built_on": "Rilasciato il",
"Maintenance_current_version": "Sei aggiornato. Scopri <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">a cosa sto lavorando</a>.", "Maintenance_current_version": "Sei aggiornato. Scopri <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">a cosa sto lavorando</a>.",
"Maintenance_database_backup": "Backup DB", "Maintenance_database_backup": "Backup DB",
@@ -556,7 +556,7 @@
"Presence_Key_OnlinePastMiss": "Online in passato (non corrispondente)", "Presence_Key_OnlinePastMiss": "Online in passato (non corrispondente)",
"Presence_Key_OnlinePastMiss_desc": "Dispositivo online in passato, ma attualmente offline, ma la sessione di avvio potrebbe essere mancante o presentare dati in conflitto. (potrebbe trattarsi di un bug: invia una PR se sai come risolverlo, sono un po' perso nel codice qui)", "Presence_Key_OnlinePastMiss_desc": "Dispositivo online in passato, ma attualmente offline, ma la sessione di avvio potrebbe essere mancante o presentare dati in conflitto. (potrebbe trattarsi di un bug: invia una PR se sai come risolverlo, sono un po' perso nel codice qui)",
"Presence_Key_OnlinePast_desc": "Dispositivo online in passato, ma attualmente offline.", "Presence_Key_OnlinePast_desc": "Dispositivo online in passato, ma attualmente offline.",
"Presence_Loading": "Caricamento...", "Presence_Loading": "Caricamento",
"Presence_Shortcut_AllDevices": "Miei dispositivi", "Presence_Shortcut_AllDevices": "Miei dispositivi",
"Presence_Shortcut_Archived": "Archiviati", "Presence_Shortcut_Archived": "Archiviati",
"Presence_Shortcut_Connected": "Connessi", "Presence_Shortcut_Connected": "Connessi",
@@ -710,7 +710,7 @@
"add_option_event_tooltip": "Aggiungi nuovo valore", "add_option_event_tooltip": "Aggiungi nuovo valore",
"copy_icons_event_icon": "fa-copy", "copy_icons_event_icon": "fa-copy",
"copy_icons_event_tooltip": "Sovrascrivi le icone di tutti i dispositivi con lo stesso tipo di dispositivo", "copy_icons_event_tooltip": "Sovrascrivi le icone di tutti i dispositivi con lo stesso tipo di dispositivo",
"devices_old": "Aggiornamento...", "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 <a href='/maintenance.php#tab_Logging'>log degli errori</a> se riscontri problemi). <br/> <br/> 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 <a href='/maintenance.php#tab_Logging'>log degli errori</a> se riscontri problemi). <br/> <br/> Coda di esecuzione:",
"general_event_title": "Esecuzione di un evento ad-hoc", "general_event_title": "Esecuzione di un evento ad-hoc",
"go_to_node_event_icon": "fa-square-up-right", "go_to_node_event_icon": "fa-square-up-right",
@@ -735,7 +735,7 @@
"settings_imported_label": "Impostazioni importate", "settings_imported_label": "Impostazioni importate",
"settings_missing": "Non tutte le impostazioni sono state caricate! Carico elevato sul database o sulla sequenza di avvio dell'app. Fai clic sul pulsante 🔄 ricarica in alto.", "settings_missing": "Non tutte le impostazioni sono state caricate! Carico elevato sul database o sulla sequenza di avvio dell'app. Fai clic sul pulsante 🔄 ricarica in alto.",
"settings_missing_block": "Errore: impostazioni non caricate correttamente. Fai clic sul pulsante di ricarica 🔄 in alto, in alternativa, controlla il registro del browser per i dettagli (F12).", "settings_missing_block": "Errore: impostazioni non caricate correttamente. Fai clic sul pulsante di ricarica 🔄 in alto, in alternativa, controlla il registro del browser per i dettagli (F12).",
"settings_old": "Importazione impostazioni e riavvio in corso...", "settings_old": "Importazione impostazioni e riavvio in corso",
"settings_other_scanners": "Altri plugin, non scanner per dispositivi, che sono attualmente abilitati.", "settings_other_scanners": "Altri plugin, non scanner per dispositivi, che sono attualmente abilitati.",
"settings_other_scanners_icon": "fa-solid fa-recycle", "settings_other_scanners_icon": "fa-solid fa-recycle",
"settings_other_scanners_label": "Altri scanner", "settings_other_scanners_label": "Altri scanner",
@@ -744,10 +744,10 @@
"settings_publishers_info": "Carica più editori con l'impostazione <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>", "settings_publishers_info": "Carica più editori con l'impostazione <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
"settings_publishers_label": "Editori", "settings_publishers_label": "Editori",
"settings_readonly": "Impossibile LEGGERE o SCRIVERE <code>app.conf</code>. Prova a riavviare il contenitore e leggi la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">documentazione sulle autorizzazioni dei file</a>", "settings_readonly": "Impossibile LEGGERE o SCRIVERE <code>app.conf</code>. Prova a riavviare il contenitore e leggi la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">documentazione sulle autorizzazioni dei file</a>",
"settings_saved": "<br/>Impostazioni salvate. <br/> Aggiornamento in corso... <br/> <i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>", "settings_saved": "<br/>Impostazioni salvate. <br/> Aggiornamento in corso <br/> <i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
"settings_system_icon": "fa-solid fa-gear", "settings_system_icon": "fa-solid fa-gear",
"settings_system_label": "Sistema", "settings_system_label": "Sistema",
"settings_update_item_warning": "Aggiorna il valore qui sotto. Fai attenzione a seguire il formato precedente. <b>La convalida non viene eseguita.</b>", "settings_update_item_warning": "Aggiorna il valore qui sotto. Fai attenzione a seguire il formato precedente. <b>La convalida non viene eseguita.</b>",
"test_event_icon": "fa-vial-circle-check", "test_event_icon": "fa-vial-circle-check",
"test_event_tooltip": "Salva le modifiche prima di provare le nuove impostazioni." "test_event_tooltip": "Salva le modifiche prima di provare le nuove impostazioni."
} }

2
front/php/templates/language/nb_no.json Normal file → Executable file
View File

@@ -750,4 +750,4 @@
"settings_update_item_warning": "Oppdater verdien nedenfor. Pass på å følge forrige format. <b>Validering etterpå utføres ikke.</b>", "settings_update_item_warning": "Oppdater verdien nedenfor. Pass på å følge forrige format. <b>Validering etterpå utføres ikke.</b>",
"test_event_icon": "fa-vial-circle-check", "test_event_icon": "fa-vial-circle-check",
"test_event_tooltip": "Lagre endringene først, før du tester innstillingene dine." "test_event_tooltip": "Lagre endringene først, før du tester innstillingene dine."
} }

2
front/php/templates/language/pl_pl.json Normal file → Executable file
View File

@@ -750,4 +750,4 @@
"settings_update_item_warning": "Zaktualizuj poniższą wartość. Zachowaj ostrożność i postępuj zgodnie z poprzednim formatem. <b>Walidacja nie jest wykonywana.</b>", "settings_update_item_warning": "Zaktualizuj poniższą wartość. Zachowaj ostrożność i postępuj zgodnie z poprzednim formatem. <b>Walidacja nie jest wykonywana.</b>",
"test_event_icon": "fa-vial-circle-check", "test_event_icon": "fa-vial-circle-check",
"test_event_tooltip": "Zapisz zmiany zanim będziesz testować swoje ustawienia." "test_event_tooltip": "Zapisz zmiany zanim będziesz testować swoje ustawienia."
} }

2
front/php/templates/language/pt_br.json Normal file → Executable file
View File

@@ -750,4 +750,4 @@
"settings_update_item_warning": "", "settings_update_item_warning": "",
"test_event_icon": "", "test_event_icon": "",
"test_event_tooltip": "Guarde as alterações antes de testar as definições." "test_event_tooltip": "Guarde as alterações antes de testar as definições."
} }

22
front/php/templates/language/ru_ru.json Normal file → Executable file
View File

@@ -9,7 +9,7 @@
"About_Exit": "Зарегистрироваться", "About_Exit": "Зарегистрироваться",
"About_Title": "Сетевой сканер и система уведомлений", "About_Title": "Сетевой сканер и система уведомлений",
"AppEvents_AppEventProcessed": "Обработанный", "AppEvents_AppEventProcessed": "Обработанный",
"AppEvents_DateTimeCreated": "Журнал", "AppEvents_DateTimeCreated": "Обнаружено",
"AppEvents_Extra": "Дополнительно", "AppEvents_Extra": "Дополнительно",
"AppEvents_GUID": "GUID события приложения", "AppEvents_GUID": "GUID события приложения",
"AppEvents_Helper1": "Помощник 1", "AppEvents_Helper1": "Помощник 1",
@@ -86,7 +86,7 @@
"DevDetail_GoToNetworkNode": "Перейти на страницу Сеть данного узла.", "DevDetail_GoToNetworkNode": "Перейти на страницу Сеть данного узла.",
"DevDetail_Icon": "Значок", "DevDetail_Icon": "Значок",
"DevDetail_Icon_Descr": "Введите имя значка Font Awesome без префикса fa- или с полным классом, например: fa fa-brands fa-apple.", "DevDetail_Icon_Descr": "Введите имя значка Font Awesome без префикса fa- или с полным классом, например: fa fa-brands fa-apple.",
"DevDetail_Loading": "Загрузка...", "DevDetail_Loading": "Загрузка",
"DevDetail_MainInfo_Comments": "Комментарии", "DevDetail_MainInfo_Comments": "Комментарии",
"DevDetail_MainInfo_Favorite": "Избранное", "DevDetail_MainInfo_Favorite": "Избранное",
"DevDetail_MainInfo_Group": "Группа", "DevDetail_MainInfo_Group": "Группа",
@@ -194,7 +194,7 @@
"DevDetail_button_Save": "Сохранить", "DevDetail_button_Save": "Сохранить",
"DeviceEdit_ValidMacIp": "Введите действительный <b>Mac</b> и <b>IP</b> адрес.", "DeviceEdit_ValidMacIp": "Введите действительный <b>Mac</b> и <b>IP</b> адрес.",
"Device_MultiEdit": "Мультиредакт", "Device_MultiEdit": "Мультиредакт",
"Device_MultiEdit_Backup": "Будьте осторожны: ввод неправильных значений ниже приведет к поломке вашей настройки. Сначала сделайте резервную копию базы данных или конфигурации устройств (<a href=\"php/server/devices.php?action=ExportCSV\">нажмите для загрузки <i class=\"fa-solid fa-download fa-bounce\"></i></a>). О том, как восстановить Устройства из этого файла, читайте в разделе <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Документация о резервном копировании</a>.", "Device_MultiEdit_Backup": "Будьте осторожны: ввод неправильных значений ниже приведет к поломке вашей настройки. Сначала сделайте резервную копию базы данных или конфигурации устройств (<a href=\"php/server/devices.php?action=ExportCSV\">нажмите для загрузки <i class=\"fa-solid fa-download fa-bounce\"></i></a>). О том, как восстановить Устройства из этого файла, читайте в разделе <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Документация о резервном копировании</a>. Чтобы применить свои изменения, нажмите на значок <b> Сохранить <i class = \"fa-solid fa-save\"> </i> </b> в каждом поле, которое вы хотите обновить.",
"Device_MultiEdit_Fields": "Редактировать поля:", "Device_MultiEdit_Fields": "Редактировать поля:",
"Device_MultiEdit_MassActions": "Массовые действия:", "Device_MultiEdit_MassActions": "Массовые действия:",
"Device_MultiEdit_Tooltip": "Осторожно. При нажатии на эту кнопку значение слева будет применено ко всем устройствам, выбранным выше.", "Device_MultiEdit_Tooltip": "Осторожно. При нажатии на эту кнопку значение слева будет применено ко всем устройствам, выбранным выше.",
@@ -251,7 +251,7 @@
"ENCRYPTION_KEY_name": "Ключ шифрования", "ENCRYPTION_KEY_name": "Ключ шифрования",
"Email_display_name": "Эл. почта", "Email_display_name": "Эл. почта",
"Email_icon": "<i class=\"fa fa-at\"></i>", "Email_icon": "<i class=\"fa fa-at\"></i>",
"Events_Loading": "Загрузка...", "Events_Loading": "Загрузка",
"Events_Periodselect_All": "Вся информация", "Events_Periodselect_All": "Вся информация",
"Events_Periodselect_LastMonth": "Последний месяц", "Events_Periodselect_LastMonth": "Последний месяц",
"Events_Periodselect_LastWeek": "Последняя неделя", "Events_Periodselect_LastWeek": "Последняя неделя",
@@ -341,7 +341,7 @@
"LOADED_PLUGINS_name": "Загруженные плагины", "LOADED_PLUGINS_name": "Загруженные плагины",
"LOG_LEVEL_description": "Этот параметр включит более подробное ведение журнала. Полезно для отладки записи событий в базу данных.", "LOG_LEVEL_description": "Этот параметр включит более подробное ведение журнала. Полезно для отладки записи событий в базу данных.",
"LOG_LEVEL_name": "Распечатать дополнительный журнал", "LOG_LEVEL_name": "Распечатать дополнительный журнал",
"Loading": "Загрузка...", "Loading": "Загрузка",
"Login_Box": "Введите пароль", "Login_Box": "Введите пароль",
"Login_Default_PWD": "Пароль по умолчанию «123456» все еще активен.", "Login_Default_PWD": "Пароль по умолчанию «123456» все еще активен.",
"Login_Info": "Пароли устанавливаются через плагин Set Password. Если у вас возникли проблемы со входом в систему, проверьте <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">SEPWD документацию</a>.", "Login_Info": "Пароли устанавливаются через плагин Set Password. Если у вас возникли проблемы со входом в систему, проверьте <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">SEPWD документацию</a>.",
@@ -360,7 +360,7 @@
"Maint_RestartServer": "Перезапустить сервер", "Maint_RestartServer": "Перезапустить сервер",
"Maint_Restart_Server_noti_text": "Вы уверены, что хотите перезапустить внутренний сервер? Это может привести к несогласованности работы приложения. Сначала создайте резервную копию настроек. <br/> <br/> Примечание: Это может занять несколько минут.", "Maint_Restart_Server_noti_text": "Вы уверены, что хотите перезапустить внутренний сервер? Это может привести к несогласованности работы приложения. Сначала создайте резервную копию настроек. <br/> <br/> Примечание: Это может занять несколько минут.",
"Maintenance_InitCheck": "Инициализация проверки", "Maintenance_InitCheck": "Инициализация проверки",
"Maintenance_InitCheck_Checking": "Проверяется...", "Maintenance_InitCheck_Checking": "Проверяется",
"Maintenance_InitCheck_QuickSetupGuide": "Убедитесь, что вы следовали быстрому руководству по настройке <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\"></a>.", "Maintenance_InitCheck_QuickSetupGuide": "Убедитесь, что вы следовали быстрому руководству по настройке <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\"></a>.",
"Maintenance_InitCheck_Success": "Приложение инициализировано успешно!", "Maintenance_InitCheck_Success": "Приложение инициализировано успешно!",
"Maintenance_ReCheck": "Повторить проверку", "Maintenance_ReCheck": "Повторить проверку",
@@ -446,7 +446,7 @@
"Maintenance_Tools_Tab_UISettings": "Интерфейс", "Maintenance_Tools_Tab_UISettings": "Интерфейс",
"Maintenance_arp_status": "Состояние сканирования", "Maintenance_arp_status": "Состояние сканирования",
"Maintenance_arp_status_off": "в настоящее время отключен", "Maintenance_arp_status_off": "в настоящее время отключен",
"Maintenance_arp_status_on": "сканирование, выполняется в данный момент", "Maintenance_arp_status_on": "выполняется сканирование",
"Maintenance_built_on": "Сборка от", "Maintenance_built_on": "Сборка от",
"Maintenance_current_version": "Вы в курсе событий. Узнайте, над чем <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">я работаю</a>.", "Maintenance_current_version": "Вы в курсе событий. Узнайте, над чем <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">я работаю</a>.",
"Maintenance_database_backup": "Резервные копии БД", "Maintenance_database_backup": "Резервные копии БД",
@@ -556,7 +556,7 @@
"Presence_Key_OnlinePastMiss": "В прошлом в сети (несовпадение)", "Presence_Key_OnlinePastMiss": "В прошлом в сети (несовпадение)",
"Presence_Key_OnlinePastMiss_desc": "Устройство в прошлом было подключено к сети, но сейчас находится в автономном режиме, однако стартовый сеанс может отсутствовать или иметь противоречивые данные. (Возможно, это ошибка — отправьте PR, если знаете, как это исправить — здесь я немного запутался в коде)", "Presence_Key_OnlinePastMiss_desc": "Устройство в прошлом было подключено к сети, но сейчас находится в автономном режиме, однако стартовый сеанс может отсутствовать или иметь противоречивые данные. (Возможно, это ошибка — отправьте PR, если знаете, как это исправить — здесь я немного запутался в коде)",
"Presence_Key_OnlinePast_desc": "Устройство раньше было в сети, но в настоящее время не в сети.", "Presence_Key_OnlinePast_desc": "Устройство раньше было в сети, но в настоящее время не в сети.",
"Presence_Loading": "Загрузка...", "Presence_Loading": "Загрузка",
"Presence_Shortcut_AllDevices": "Мои устройства", "Presence_Shortcut_AllDevices": "Мои устройства",
"Presence_Shortcut_Archived": "Архив", "Presence_Shortcut_Archived": "Архив",
"Presence_Shortcut_Connected": "Подключенные", "Presence_Shortcut_Connected": "Подключенные",
@@ -710,7 +710,7 @@
"add_option_event_tooltip": "Добавить новое значение", "add_option_event_tooltip": "Добавить новое значение",
"copy_icons_event_icon": "fa-copy", "copy_icons_event_icon": "fa-copy",
"copy_icons_event_tooltip": "Заменить иконки всех устройств с одним и тем же типом устройства", "copy_icons_event_tooltip": "Заменить иконки всех устройств с одним и тем же типом устройства",
"devices_old": "Актуализируется...", "devices_old": "Актуализируется",
"general_event_description": "Событие, которое вы инициировали, может занять некоторое время, прежде чем фоновые процессы завершатся. Выполнение завершится, как только очередь выполнения, указанная ниже, опустеет (Проверьте <a href='/maintenance.php#tab_Logging'>журнал ошибок</a> при возникновении проблем). <br/> <br/>· · Очередь выполнения:", "general_event_description": "Событие, которое вы инициировали, может занять некоторое время, прежде чем фоновые процессы завершатся. Выполнение завершится, как только очередь выполнения, указанная ниже, опустеет (Проверьте <a href='/maintenance.php#tab_Logging'>журнал ошибок</a> при возникновении проблем). <br/> <br/>· · Очередь выполнения:",
"general_event_title": "Выполнение специального события", "general_event_title": "Выполнение специального события",
"go_to_node_event_icon": "fa-square-up-right", "go_to_node_event_icon": "fa-square-up-right",
@@ -735,7 +735,7 @@
"settings_imported_label": "Настройки импортированы", "settings_imported_label": "Настройки импортированы",
"settings_missing": "Не все настройки загружены! Высокая нагрузка на базу данных или последовательность запуска приложения. Нажмите кнопку 🔄 перезагрузить вверху.", "settings_missing": "Не все настройки загружены! Высокая нагрузка на базу данных или последовательность запуска приложения. Нажмите кнопку 🔄 перезагрузить вверху.",
"settings_missing_block": "Ошибка: Настройки загружены неправильно. Нажмите кнопку перезагрузки 🔄 вверху или проверьте журнал браузера для получения подробной информации (F12).", "settings_missing_block": "Ошибка: Настройки загружены неправильно. Нажмите кнопку перезагрузки 🔄 вверху или проверьте журнал браузера для получения подробной информации (F12).",
"settings_old": "Импорт настроек и повторная инициализация...", "settings_old": "Импорт настроек и повторная инициализация",
"settings_other_scanners": "Другие плагины сканера, не относящиеся к устройствам, которые в настоящее время включены.", "settings_other_scanners": "Другие плагины сканера, не относящиеся к устройствам, которые в настоящее время включены.",
"settings_other_scanners_icon": "fa-solid fa-recycle", "settings_other_scanners_icon": "fa-solid fa-recycle",
"settings_other_scanners_label": "Другие сканеры", "settings_other_scanners_label": "Другие сканеры",
@@ -750,4 +750,4 @@
"settings_update_item_warning": "Обновить значение ниже. Будьте осторожны, следуя предыдущему формату. <b>Проверка не выполняется.</b>", "settings_update_item_warning": "Обновить значение ниже. Будьте осторожны, следуя предыдущему формату. <b>Проверка не выполняется.</b>",
"test_event_icon": "fa-vial-circle-check", "test_event_icon": "fa-vial-circle-check",
"test_event_tooltip": "Сначала сохраните изменения, прежде чем проверять настройки." "test_event_tooltip": "Сначала сохраните изменения, прежде чем проверять настройки."
} }

2
front/php/templates/language/tr_tr.json Normal file → Executable file
View File

@@ -750,4 +750,4 @@
"settings_update_item_warning": "", "settings_update_item_warning": "",
"test_event_icon": "", "test_event_icon": "",
"test_event_tooltip": "" "test_event_tooltip": ""
} }

24
front/php/templates/language/uk_ua.json Normal file → Executable file
View File

@@ -9,7 +9,7 @@
"About_Exit": "Вийти", "About_Exit": "Вийти",
"About_Title": "Сканер безпеки мережі та структура сповіщень", "About_Title": "Сканер безпеки мережі та структура сповіщень",
"AppEvents_AppEventProcessed": "Оброблено", "AppEvents_AppEventProcessed": "Оброблено",
"AppEvents_DateTimeCreated": "Зареєстровано", "AppEvents_DateTimeCreated": "Виявлено",
"AppEvents_Extra": "Екстра", "AppEvents_Extra": "Екстра",
"AppEvents_GUID": "GUID події програми", "AppEvents_GUID": "GUID події програми",
"AppEvents_Helper1": "Помічник 1", "AppEvents_Helper1": "Помічник 1",
@@ -86,7 +86,7 @@
"DevDetail_GoToNetworkNode": "Перейдіть на сторінку Мережа даного вузла.", "DevDetail_GoToNetworkNode": "Перейдіть на сторінку Мережа даного вузла.",
"DevDetail_Icon": "значок", "DevDetail_Icon": "значок",
"DevDetail_Icon_Descr": "Введіть чудову назву значка шрифту без префікса fa- або з повним класом, наприклад: fa fa-бренди fa-яблуко.", "DevDetail_Icon_Descr": "Введіть чудову назву значка шрифту без префікса fa- або з повним класом, наприклад: fa fa-бренди fa-яблуко.",
"DevDetail_Loading": "Завантаження...", "DevDetail_Loading": "Завантаження",
"DevDetail_MainInfo_Comments": "Коментарі", "DevDetail_MainInfo_Comments": "Коментарі",
"DevDetail_MainInfo_Favorite": "улюблений", "DevDetail_MainInfo_Favorite": "улюблений",
"DevDetail_MainInfo_Group": "Група", "DevDetail_MainInfo_Group": "Група",
@@ -177,7 +177,7 @@
"DevDetail_Tools_WOL": "Надіслати команду WoL до ", "DevDetail_Tools_WOL": "Надіслати команду WoL до ",
"DevDetail_Tools_WOL_noti": "Wake-on -LAN", "DevDetail_Tools_WOL_noti": "Wake-on -LAN",
"DevDetail_Tools_WOL_noti_text": "Команда Wake-on-LAN надсилається на широкомовну адресу. Якщо ціль не входить до підмережі/VLAN NetAlertX, цільовий пристрій не відповідатиме.", "DevDetail_Tools_WOL_noti_text": "Команда Wake-on-LAN надсилається на широкомовну адресу. Якщо ціль не входить до підмережі/VLAN NetAlertX, цільовий пристрій не відповідатиме.",
"DevDetail_Type_hover": "Тип пристрою. Якщо вибрати будь-який із попередньо визначених мережевих пристроїв (наприклад, точку доступу, брандмауер, маршрутизатор, комутатор...), вони відображатимуться в конфігурації дерева мережі як можливий головний вузол мережі..", "DevDetail_Type_hover": "Тип пристрою. Якщо ви оберете будь-який із попередньо визначених мережевих пристроїв (наприклад: точка доступу, брандмауер, маршрутизатор, комутатор), вони відображатимуться в конфігурації дерева мережі як можливі батьківські вузли мережі.",
"DevDetail_Vendor_hover": "Постачальник має бути автоматично визначений. Ви можете перезаписати або додати власне значення.", "DevDetail_Vendor_hover": "Постачальник має бути автоматично визначений. Ви можете перезаписати або додати власне значення.",
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on- LAN", "DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on- LAN",
"DevDetail_button_AddIcon": "Додати новий значок", "DevDetail_button_AddIcon": "Додати новий значок",
@@ -251,7 +251,7 @@
"ENCRYPTION_KEY_name": "Ключ шифрування", "ENCRYPTION_KEY_name": "Ключ шифрування",
"Email_display_name": "Електронна пошта", "Email_display_name": "Електронна пошта",
"Email_icon": "<i class=\"fa fa-at\"></i>", "Email_icon": "<i class=\"fa fa-at\"></i>",
"Events_Loading": "Завантаження...", "Events_Loading": "Завантаження",
"Events_Periodselect_All": "Вся інформація", "Events_Periodselect_All": "Вся інформація",
"Events_Periodselect_LastMonth": "Останній місяць", "Events_Periodselect_LastMonth": "Останній місяць",
"Events_Periodselect_LastWeek": "Минулий тиждень", "Events_Periodselect_LastWeek": "Минулий тиждень",
@@ -341,7 +341,7 @@
"LOADED_PLUGINS_name": "Завантажені плагіни", "LOADED_PLUGINS_name": "Завантажені плагіни",
"LOG_LEVEL_description": "Цей параметр увімкне докладніше журналювання. Корисно для налагодження запису подій у базу даних.", "LOG_LEVEL_description": "Цей параметр увімкне докладніше журналювання. Корисно для налагодження запису подій у базу даних.",
"LOG_LEVEL_name": "Друк додаткового протоколювання", "LOG_LEVEL_name": "Друк додаткового протоколювання",
"Loading": "Завантаження...", "Loading": "Завантаження",
"Login_Box": "Введіть свій пароль", "Login_Box": "Введіть свій пароль",
"Login_Default_PWD": "Стандартний пароль \"123456\" все ще активний.", "Login_Default_PWD": "Стандартний пароль \"123456\" все ще активний.",
"Login_Info": "Паролі встановлюються за допомогою плагіна Set Password. Перегляньте <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">документи SETPWD</a>, якщо у вас виникли проблеми з входом.", "Login_Info": "Паролі встановлюються за допомогою плагіна Set Password. Перегляньте <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">документи SETPWD</a>, якщо у вас виникли проблеми з входом.",
@@ -360,7 +360,7 @@
"Maint_RestartServer": "Перезапустіть сервер", "Maint_RestartServer": "Перезапустіть сервер",
"Maint_Restart_Server_noti_text": "Ви впевнені, що бажаєте перезапустити внутрішній сервер? Це може спричинити неузгодженість програми. Спершу створіть резервну копію налаштувань. <br/> <br/> Примітка. Це може зайняти кілька хвилин.", "Maint_Restart_Server_noti_text": "Ви впевнені, що бажаєте перезапустити внутрішній сервер? Це може спричинити неузгодженість програми. Спершу створіть резервну копію налаштувань. <br/> <br/> Примітка. Це може зайняти кілька хвилин.",
"Maintenance_InitCheck": "Перевірка ініціалізації", "Maintenance_InitCheck": "Перевірка ініціалізації",
"Maintenance_InitCheck_Checking": "Перевірка...", "Maintenance_InitCheck_Checking": "Перевірка",
"Maintenance_InitCheck_QuickSetupGuide": "Переконайтеся, що ви дотримувалися інструкцій у <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">короткому посібнику з налаштування</a>.", "Maintenance_InitCheck_QuickSetupGuide": "Переконайтеся, що ви дотримувалися інструкцій у <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">короткому посібнику з налаштування</a>.",
"Maintenance_InitCheck_Success": "Застосунок успішно ініціалізовано!", "Maintenance_InitCheck_Success": "Застосунок успішно ініціалізовано!",
"Maintenance_ReCheck": "Повторна спроба перевірки", "Maintenance_ReCheck": "Повторна спроба перевірки",
@@ -446,7 +446,7 @@
"Maintenance_Tools_Tab_UISettings": "Налаштування інтерфейсу користувача", "Maintenance_Tools_Tab_UISettings": "Налаштування інтерфейсу користувача",
"Maintenance_arp_status": "Статус сканування", "Maintenance_arp_status": "Статус сканування",
"Maintenance_arp_status_off": "наразі вимкнено", "Maintenance_arp_status_off": "наразі вимкнено",
"Maintenance_arp_status_on": "сканування, що зараз виконується", "Maintenance_arp_status_on": "триває сканування",
"Maintenance_built_on": "Побудований на", "Maintenance_built_on": "Побудований на",
"Maintenance_current_version": "Ви в курсі подій. Перегляньте, над чим <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">я працюю</a>.", "Maintenance_current_version": "Ви в курсі подій. Перегляньте, над чим <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">я працюю</a>.",
"Maintenance_database_backup": "Резервне копіювання DB", "Maintenance_database_backup": "Резервне копіювання DB",
@@ -556,7 +556,7 @@
"Presence_Key_OnlinePastMiss": "Минулий онлайн (пропущений матч)", "Presence_Key_OnlinePastMiss": "Минулий онлайн (пропущений матч)",
"Presence_Key_OnlinePastMiss_desc": "Пристрій був онлайн, але зараз офлайн, але початковий сеанс може бути відсутнім або містить суперечливі дані. (може бути помилка - будь ласка, надішліть PR, якщо ви знаєте, як це виправити - я трохи загубився в коді тут)", "Presence_Key_OnlinePastMiss_desc": "Пристрій був онлайн, але зараз офлайн, але початковий сеанс може бути відсутнім або містить суперечливі дані. (може бути помилка - будь ласка, надішліть PR, якщо ви знаєте, як це виправити - я трохи загубився в коді тут)",
"Presence_Key_OnlinePast_desc": "Пристрій був онлайн, але зараз офлайн.", "Presence_Key_OnlinePast_desc": "Пристрій був онлайн, але зараз офлайн.",
"Presence_Loading": "Завантаження...", "Presence_Loading": "Завантаження",
"Presence_Shortcut_AllDevices": "Мої пристрої", "Presence_Shortcut_AllDevices": "Мої пристрої",
"Presence_Shortcut_Archived": "Архівовано", "Presence_Shortcut_Archived": "Архівовано",
"Presence_Shortcut_Connected": "Підключено", "Presence_Shortcut_Connected": "Підключено",
@@ -710,7 +710,7 @@
"add_option_event_tooltip": "Додати нове значення", "add_option_event_tooltip": "Додати нове значення",
"copy_icons_event_icon": "фа-копія", "copy_icons_event_icon": "фа-копія",
"copy_icons_event_tooltip": "Перезаписати піктограми всіх пристроїв одним типом пристрою", "copy_icons_event_tooltip": "Перезаписати піктограми всіх пристроїв одним типом пристрою",
"devices_old": "Освіжаючий...", "devices_old": "Освіжає…",
"general_event_description": "Подія, яку ви ініціювали, може зайняти деякий час, поки завершаться фонові процеси. Виконання завершилося, коли наведена нижче черга виконання спорожнилася (перевірте <a href='/maintenance.php#tab_Logging'>журнал помилок</a>, якщо виникнуть проблеми). <br/> <br/> Черга виконання:", "general_event_description": "Подія, яку ви ініціювали, може зайняти деякий час, поки завершаться фонові процеси. Виконання завершилося, коли наведена нижче черга виконання спорожнилася (перевірте <a href='/maintenance.php#tab_Logging'>журнал помилок</a>, якщо виникнуть проблеми). <br/> <br/> Черга виконання:",
"general_event_title": "Виконання спеціальної події", "general_event_title": "Виконання спеціальної події",
"go_to_node_event_icon": "fa-квадрат-вгору-вправо", "go_to_node_event_icon": "fa-квадрат-вгору-вправо",
@@ -735,7 +735,7 @@
"settings_imported_label": "Налаштування імпортовано", "settings_imported_label": "Налаштування імпортовано",
"settings_missing": "Не всі налаштування завантажено! Високе навантаження на базу даних або послідовність запуску програми. Натисніть кнопку 🔄 перезавантажити вгорі.", "settings_missing": "Не всі налаштування завантажено! Високе навантаження на базу даних або послідовність запуску програми. Натисніть кнопку 🔄 перезавантажити вгорі.",
"settings_missing_block": "Помилка: налаштування не завантажено належним чином. Натисніть кнопку перезавантаження 🔄 вгорі або подробиці перевірте в журналі браузера (F12).", "settings_missing_block": "Помилка: налаштування не завантажено належним чином. Натисніть кнопку перезавантаження 🔄 вгорі або подробиці перевірте в журналі браузера (F12).",
"settings_old": "Імпорт налаштувань і повторна ініціалізація...", "settings_old": "Імпорт налаштувань та повторна ініціалізація",
"settings_other_scanners": "Інші наразі ввімкнені плагіни сканера, не пов’язані з пристроєм.", "settings_other_scanners": "Інші наразі ввімкнені плагіни сканера, не пов’язані з пристроєм.",
"settings_other_scanners_icon": "fa -solid fa-recycle", "settings_other_scanners_icon": "fa -solid fa-recycle",
"settings_other_scanners_label": "Інші сканери", "settings_other_scanners_label": "Інші сканери",
@@ -744,10 +744,10 @@
"settings_publishers_info": "Завантажте більше видавців за допомогою параметра <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>", "settings_publishers_info": "Завантажте більше видавців за допомогою параметра <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
"settings_publishers_label": "Видавці", "settings_publishers_label": "Видавці",
"settings_readonly": "Неможливо ЧИТАТИ або ЗАПИСАТИ <code>app.conf</code>. Спробуйте перезапустити контейнер і прочитайте <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">документацію щодо дозволів на файли</a>", "settings_readonly": "Неможливо ЧИТАТИ або ЗАПИСАТИ <code>app.conf</code>. Спробуйте перезапустити контейнер і прочитайте <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">документацію щодо дозволів на файли</a>",
"settings_saved": "<br/>Налаштування збережено. <br/> Перезавантаження... <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>", "settings_saved": "<br/>Налаштування збережено. <br/> Перезавантаження <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
"settings_system_icon": "фа-твердий фа-передача", "settings_system_icon": "фа-твердий фа-передача",
"settings_system_label": "Система", "settings_system_label": "Система",
"settings_update_item_warning": "Оновіть значення нижче. Слідкуйте за попереднім форматом. <b>Перевірка не виконана.</b>", "settings_update_item_warning": "Оновіть значення нижче. Слідкуйте за попереднім форматом. <b>Перевірка не виконана.</b>",
"test_event_icon": "fa-vial-circle- check", "test_event_icon": "fa-vial-circle- check",
"test_event_tooltip": "Перш ніж перевіряти налаштування, збережіть зміни." "test_event_tooltip": "Перш ніж перевіряти налаштування, збережіть зміни."
} }

2
front/php/templates/language/zh_cn.json Normal file → Executable file
View File

@@ -750,4 +750,4 @@
"settings_update_item_warning": "更新下面的值。请注意遵循先前的格式。<b>未执行验证。</b>", "settings_update_item_warning": "更新下面的值。请注意遵循先前的格式。<b>未执行验证。</b>",
"test_event_icon": "", "test_event_icon": "",
"test_event_tooltip": "在测试设置之前,请先保存更改。" "test_event_tooltip": "在测试设置之前,请先保存更改。"
} }

View File

@@ -66,14 +66,13 @@ def main():
new_notifications = notifications.getNew() new_notifications = notifications.getNew()
# mylog('verbose', [f'[{pluginName}] new_notifications: ', new_notifications]) # mylog('verbose', [f'[{pluginName}] new_notifications: ', new_notifications])
# mylog('verbose', [f'[{pluginName}] SMTP_SERVER: ', get_setting_value("SMTP_SERVER")]) mylog('verbose', [f'[{pluginName}] SMTP_SERVER: ', get_setting_value("SMTP_SERVER")])
# mylog('verbose', [f'[{pluginName}] SMTP_PORT: ', get_setting_value("SMTP_PORT")]) mylog('verbose', [f'[{pluginName}] SMTP_PORT: ', get_setting_value("SMTP_PORT")])
# mylog('verbose', [f'[{pluginName}] SMTP_SKIP_LOGIN: ', get_setting_value("SMTP_SKIP_LOGIN")]) mylog('verbose', [f'[{pluginName}] SMTP_SKIP_LOGIN: ', get_setting_value("SMTP_SKIP_LOGIN")])
# mylog('verbose', [f'[{pluginName}] SMTP_USER: ', get_setting_value("SMTP_USER")]) # mylog('verbose', [f'[{pluginName}] SMTP_USER: ', get_setting_value("SMTP_USER")])
# mylog('verbose', [f'[{pluginName}] SMTP_PASS: ', get_setting_value("SMTP_PASS")]) # mylog('verbose', [f'[{pluginName}] SMTP_PASS: ', get_setting_value("SMTP_PASS")])
mylog('verbose', [f'[{pluginName}] SMTP_SKIP_TLS: ', get_setting_value("SMTP_SKIP_TLS")])
# mylog('verbose', [f'[{pluginName}] SMTP_SKIP_TLS: ', get_setting_value("SMTP_SKIP_TLS")]) mylog('verbose', [f'[{pluginName}] SMTP_FORCE_SSL: ', get_setting_value("SMTP_FORCE_SSL")])
# mylog('verbose', [f'[{pluginName}] SMTP_FORCE_SSL: ', get_setting_value("SMTP_FORCE_SSL")])
# mylog('verbose', [f'[{pluginName}] SMTP_REPORT_TO: ', get_setting_value("SMTP_REPORT_TO")]) # mylog('verbose', [f'[{pluginName}] SMTP_REPORT_TO: ', get_setting_value("SMTP_REPORT_TO")])
# mylog('verbose', [f'[{pluginName}] SMTP_REPORT_FROM: ', get_setting_value("SMTP_REPORT_FROM")]) # mylog('verbose', [f'[{pluginName}] SMTP_REPORT_FROM: ', get_setting_value("SMTP_REPORT_FROM")])

View File

@@ -53,5 +53,6 @@ As address, you can either use the public IP of the Freebox, or the unique domai
## Other info ## Other info
- Version: 1.0 - Version: 1.0
- Author: [KayJay7](https://github.com/KayJay7) & [Lucide](https://github.com/Lucide) - Author: [KayJay7](https://github.com/KayJay7), [Lucide](https://github.com/Lucide)
- Maintainers: [mathoudebine](https://github.com/mathoudebine)
- Release Date: 2-Dec-2024 - Release Date: 2-Dec-2024

View File

@@ -43,11 +43,12 @@ nav:
- Reverse Proxy: REVERSE_PROXY.md - Reverse Proxy: REVERSE_PROXY.md
- Webhooks (n8n): WEBHOOK_N8N.md - Webhooks (n8n): WEBHOOK_N8N.md
- Workflows: WORKFLOWS.md - Workflows: WORKFLOWS.md
- Workflow Examples: WORKFLOW_EXAMPLES.md
- Docker Swarm: DOCKER_SWARM.md - Docker Swarm: DOCKER_SWARM.md
- Help: - Help:
- Common issues: COMMON_ISSUES.md - Common issues: COMMON_ISSUES.md
- Random MAC: RANDOM_MAC.md - Random MAC: RANDOM_MAC.md
- Incorrect Offline Detection: FIX_OFFLINE_DETECTION.md
- Device guides: - Device guides:
- Editing Devices: - Editing Devices:
- Management: DEVICE_MANAGEMENT.md - Management: DEVICE_MANAGEMENT.md

View File

@@ -38,6 +38,14 @@ Run the script with the required parameters:
### Example Commands ### Example Commands
#### Install Requirements
You will need to install dependencies in the container:
```bash
pip install paramiko
```
#### Using Password Authentication #### Using Password Authentication
```sh ```sh
./script.py --host 192.168.1.1 --username admin --password mypassword --output /tmp/dnsmasq.leases ./script.py --host 192.168.1.1 --username admin --password mypassword --output /tmp/dnsmasq.leases

View File

@@ -78,8 +78,8 @@ def main ():
db.open() db.open()
sql = db.sql # To-Do replace with the db class sql = db.sql # To-Do replace with the db class
# Upgrade DB if needed # Init DB
db.upgradeDB() db.initDB()
# Initialize the WorkflowManager # Initialize the WorkflowManager
workflow_manager = WorkflowManager(db) workflow_manager = WorkflowManager(db)

View File

@@ -10,6 +10,7 @@ from const import fullDbPath, sql_devices_stats, sql_devices_all, sql_generateGu
from logger import mylog from logger import mylog
from helper import json_obj, initOrSetParam, row_to_json, timeNowTZ from helper import json_obj, initOrSetParam, row_to_json, timeNowTZ
from workflows.app_events import AppEvent_obj from workflows.app_events import AppEvent_obj
from db.db_upgrade import ensure_column, ensure_views, ensure_CurrentScan, ensure_plugins_tables, ensure_Parameters, ensure_Settings
class DB(): class DB():
""" """
@@ -76,287 +77,35 @@ class DB():
return arr return arr
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
def upgradeDB(self): def initDB(self):
""" """
Check the current tables in the DB and upgrade them if neccessary Check the current tables in the DB and upgrade them if neccessary
""" """
# ------------------------------------------------------------------------- # Add Devices fields if missing
# Alter Devices table
# -------------------------------------------------------------------------
# VIEWS
self.sql.execute(""" DROP VIEW IF EXISTS Events_Devices;""")
self.sql.execute(""" CREATE VIEW Events_Devices AS
SELECT *
FROM Events
LEFT JOIN Devices ON eve_MAC = devMac;
""")
self.sql.execute(""" DROP VIEW IF EXISTS LatestEventsPerMAC;""")
self.sql.execute("""CREATE VIEW LatestEventsPerMAC AS
WITH RankedEvents AS (
SELECT
e.*,
ROW_NUMBER() OVER (PARTITION BY e.eve_MAC ORDER BY e.eve_DateTime DESC) AS row_num
FROM Events AS e
)
SELECT
e.*,
d.*,
c.*
FROM RankedEvents AS e
LEFT JOIN Devices AS d ON e.eve_MAC = d.devMac
INNER JOIN CurrentScan AS c ON e.eve_MAC = c.cur_MAC
WHERE e.row_num = 1;""")
self.sql.execute(""" DROP VIEW IF EXISTS Sessions_Devices;""")
self.sql.execute("""CREATE VIEW Sessions_Devices AS SELECT * FROM Sessions LEFT JOIN "Devices" ON ses_MAC = devMac;""")
# add fields if missing
# devFQDN missing? # devFQDN
devFQDN_missing = self.sql.execute (""" if ensure_column(self.sql, "Devices", "devFQDN", "TEXT") is False:
SELECT COUNT(*) AS CNTREC FROM pragma_table_info('Devices') WHERE name='devFQDN' return # addition failed
""").fetchone()[0] == 0
if devFQDN_missing:
mylog('verbose', ["[upgradeDB] Adding devFQDN to the Devices table"])
self.sql.execute("""
ALTER TABLE "Devices" ADD "devFQDN" TEXT
""")
# -------------------------------------------------------------------------
# Settings table setup # Settings table setup
# ------------------------------------------------------------------------- ensure_Settings(self.sql)
# Parameters tables setup
ensure_Parameters(self.sql)
# Re-creating Settings table
mylog('verbose', ["[upgradeDB] Re-creating Settings table"])
self.sql.execute(""" DROP TABLE IF EXISTS Settings;""")
self.sql.execute("""
CREATE TABLE "Settings" (
"setKey" TEXT,
"setName" TEXT,
"setDescription" TEXT,
"setType" TEXT,
"setOptions" TEXT,
"setGroup" TEXT,
"setValue" TEXT,
"setEvents" TEXT,
"setOverriddenByEnv" INTEGER
);
""")
# Create Pholus_Scan table if missing
mylog('verbose', ["[upgradeDB] Removing Pholus_Scan table"])
self.sql.execute("""DROP TABLE IF EXISTS Pholus_Scan""")
# -------------------------------------------------------------------------
# Parameters table setup
# -------------------------------------------------------------------------
# Re-creating Parameters table
mylog('verbose', ["[upgradeDB] Re-creating Parameters table"])
self.sql.execute("DROP TABLE Parameters;")
self.sql.execute("""
CREATE TABLE "Parameters" (
"par_ID" TEXT PRIMARY KEY,
"par_Value" TEXT
);
""")
# -------------------------------------------------------------------------
# Plugins tables setup # Plugins tables setup
# ------------------------------------------------------------------------- ensure_plugins_tables(self.sql)
# Plugin state
sql_Plugins_Objects = """ CREATE TABLE IF NOT EXISTS Plugins_Objects(
"Index" INTEGER,
Plugin TEXT NOT NULL,
Object_PrimaryID TEXT NOT NULL,
Object_SecondaryID TEXT NOT NULL,
DateTimeCreated TEXT NOT NULL,
DateTimeChanged TEXT NOT NULL,
Watched_Value1 TEXT NOT NULL,
Watched_Value2 TEXT NOT NULL,
Watched_Value3 TEXT NOT NULL,
Watched_Value4 TEXT NOT NULL,
Status TEXT NOT NULL,
Extra TEXT NOT NULL,
UserData TEXT NOT NULL,
ForeignKey TEXT NOT NULL,
SyncHubNodeName TEXT,
"HelpVal1" TEXT,
"HelpVal2" TEXT,
"HelpVal3" TEXT,
"HelpVal4" TEXT,
ObjectGUID TEXT,
PRIMARY KEY("Index" AUTOINCREMENT)
); """
self.sql.execute(sql_Plugins_Objects)
# Plugin execution results
sql_Plugins_Events = """ CREATE TABLE IF NOT EXISTS Plugins_Events(
"Index" INTEGER,
Plugin TEXT NOT NULL,
Object_PrimaryID TEXT NOT NULL,
Object_SecondaryID TEXT NOT NULL,
DateTimeCreated TEXT NOT NULL,
DateTimeChanged TEXT NOT NULL,
Watched_Value1 TEXT NOT NULL,
Watched_Value2 TEXT NOT NULL,
Watched_Value3 TEXT NOT NULL,
Watched_Value4 TEXT NOT NULL,
Status TEXT NOT NULL,
Extra TEXT NOT NULL,
UserData TEXT NOT NULL,
ForeignKey TEXT NOT NULL,
SyncHubNodeName TEXT,
"HelpVal1" TEXT,
"HelpVal2" TEXT,
"HelpVal3" TEXT,
"HelpVal4" TEXT,
PRIMARY KEY("Index" AUTOINCREMENT)
); """
self.sql.execute(sql_Plugins_Events)
# Plugin execution history
sql_Plugins_History = """ CREATE TABLE IF NOT EXISTS Plugins_History(
"Index" INTEGER,
Plugin TEXT NOT NULL,
Object_PrimaryID TEXT NOT NULL,
Object_SecondaryID TEXT NOT NULL,
DateTimeCreated TEXT NOT NULL,
DateTimeChanged TEXT NOT NULL,
Watched_Value1 TEXT NOT NULL,
Watched_Value2 TEXT NOT NULL,
Watched_Value3 TEXT NOT NULL,
Watched_Value4 TEXT NOT NULL,
Status TEXT NOT NULL,
Extra TEXT NOT NULL,
UserData TEXT NOT NULL,
ForeignKey TEXT NOT NULL,
SyncHubNodeName TEXT,
"HelpVal1" TEXT,
"HelpVal2" TEXT,
"HelpVal3" TEXT,
"HelpVal4" TEXT,
PRIMARY KEY("Index" AUTOINCREMENT)
); """
self.sql.execute(sql_Plugins_History)
# -------------------------------------------------------------------------
# Plugins_Language_Strings table setup
# -------------------------------------------------------------------------
# Dynamically generated language strings
self.sql.execute("DROP TABLE IF EXISTS Plugins_Language_Strings;")
self.sql.execute(""" CREATE TABLE IF NOT EXISTS Plugins_Language_Strings(
"Index" INTEGER,
Language_Code TEXT NOT NULL,
String_Key TEXT NOT NULL,
String_Value TEXT NOT NULL,
Extra TEXT NOT NULL,
PRIMARY KEY("Index" AUTOINCREMENT)
); """)
self.commitDB()
# -------------------------------------------------------------------------
# CurrentScan table setup # CurrentScan table setup
# ------------------------------------------------------------------------- ensure_CurrentScan(self.sql)
# indicates, if CurrentScan table is available
# 🐛 CurrentScan DEBUG: comment out below when debugging to keep the CurrentScan table after restarts/scan finishes
self.sql.execute("DROP TABLE IF EXISTS CurrentScan;")
self.sql.execute(""" CREATE TABLE IF NOT EXISTS CurrentScan (
cur_MAC STRING(50) NOT NULL COLLATE NOCASE,
cur_IP STRING(50) NOT NULL COLLATE NOCASE,
cur_Vendor STRING(250),
cur_ScanMethod STRING(10),
cur_Name STRING(250),
cur_LastQuery STRING(250),
cur_DateTime STRING(250),
cur_SyncHubNodeName STRING(50),
cur_NetworkSite STRING(250),
cur_SSID STRING(250),
cur_NetworkNodeMAC STRING(250),
cur_PORT STRING(250),
cur_Type STRING(250),
UNIQUE(cur_MAC)
);
""")
self.commitDB()
# -------------------------------------------------------------------------
# Create the LatestEventsPerMAC view
# -------------------------------------------------------------------------
# Dynamically generated language strings
self.sql.execute(""" CREATE VIEW IF NOT EXISTS LatestEventsPerMAC AS
WITH RankedEvents AS (
SELECT
e.*,
ROW_NUMBER() OVER (PARTITION BY e.eve_MAC ORDER BY e.eve_DateTime DESC) AS row_num
FROM Events AS e
)
SELECT
e.*,
d.*,
c.*
FROM RankedEvents AS e
LEFT JOIN Devices AS d ON e.eve_MAC = d.devMac
INNER JOIN CurrentScan AS c ON e.eve_MAC = c.cur_MAC
WHERE e.row_num = 1;
""")
# handling the Convert_Events_to_Sessions / Sessions screens
self.sql.execute("""DROP VIEW IF EXISTS Convert_Events_to_Sessions;""")
self.sql.execute("""CREATE VIEW Convert_Events_to_Sessions AS SELECT EVE1.eve_MAC,
EVE1.eve_IP,
EVE1.eve_EventType AS eve_EventTypeConnection,
EVE1.eve_DateTime AS eve_DateTimeConnection,
CASE WHEN EVE2.eve_EventType IN ('Disconnected', 'Device Down') OR
EVE2.eve_EventType IS NULL THEN EVE2.eve_EventType ELSE '<missing event>' END AS eve_EventTypeDisconnection,
CASE WHEN EVE2.eve_EventType IN ('Disconnected', 'Device Down') THEN EVE2.eve_DateTime ELSE NULL END AS eve_DateTimeDisconnection,
CASE WHEN EVE2.eve_EventType IS NULL THEN 1 ELSE 0 END AS eve_StillConnected,
EVE1.eve_AdditionalInfo
FROM Events AS EVE1
LEFT JOIN
Events AS EVE2 ON EVE1.eve_PairEventRowID = EVE2.RowID
WHERE EVE1.eve_EventType IN ('New Device', 'Connected','Down Reconnected')
UNION
SELECT eve_MAC,
eve_IP,
'<missing event>' AS eve_EventTypeConnection,
NULL AS eve_DateTimeConnection,
eve_EventType AS eve_EventTypeDisconnection,
eve_DateTime AS eve_DateTimeDisconnection,
0 AS eve_StillConnected,
eve_AdditionalInfo
FROM Events AS EVE1
WHERE (eve_EventType = 'Device Down' OR
eve_EventType = 'Disconnected') AND
EVE1.eve_PairEventRowID IS NULL;
""")
self.commitDB()
# Views
ensure_views(self.sql)
# commit changes
self.commitDB()
# Init the AppEvent database table # Init the AppEvent database table
AppEvent_obj(self) AppEvent_obj(self)

330
server/db/db_upgrade.py Executable file
View File

@@ -0,0 +1,330 @@
import sys
# Register NetAlertX directories
INSTALL_PATH="/app"
sys.path.extend([f"{INSTALL_PATH}/server"])
from logger import mylog
from messaging.in_app import write_notification
def ensure_column(sql, table: str, column_name: str, column_type: str) -> bool:
"""
Ensures a column exists in the specified table. If missing, attempts to add it.
Returns True on success, False on failure.
Parameters:
- sql: database cursor or connection wrapper (must support execute() and fetchall()).
- table: name of the table (e.g., "Devices").
- column_name: name of the column to ensure.
- column_type: SQL type of the column (e.g., "TEXT", "INTEGER", "BOOLEAN").
"""
try:
# Get actual columns from DB
sql.execute(f'PRAGMA table_info("{table}")')
actual_columns = [row[1] for row in sql.fetchall()]
# Check if target column is already present
if column_name in actual_columns:
return True # Already exists
# Define the expected columns (hardcoded base schema) [v25.5.24] - available in teh default app.db
expected_columns = [
'devMac', 'devName', 'devOwner', 'devType', 'devVendor',
'devFavorite', 'devGroup', 'devComments', 'devFirstConnection',
'devLastConnection', 'devLastIP', 'devStaticIP', 'devScan',
'devLogEvents', 'devAlertEvents', 'devAlertDown', 'devSkipRepeated',
'devLastNotification', 'devPresentLastScan', 'devIsNew',
'devLocation', 'devIsArchived', 'devParentMAC', 'devParentPort',
'devIcon', 'devGUID', 'devSite', 'devSSID', 'devSyncHubNode',
'devSourcePlugin', 'devCustomProps'
]
# Check for mismatches in base schema
missing = set(expected_columns) - set(actual_columns)
extra = set(actual_columns) - set(expected_columns)
if missing:
msg = (f"[db_upgrade] ⚠ ERROR: Unexpected DB structure "
f"(missing: {', '.join(missing) if missing else 'none'}, "
f"extra: {', '.join(extra) if extra else 'none'}) - "
"aborting schema change to prevent corruption. "
"Check https://github.com/jokob-sk/NetAlertX/blob/main/docs/UPDATES.md")
mylog('none', [msg])
write_notification(msg)
return False
if extra:
msg = f'[db_upgrade] Extra DB columns detected in {table}: {', '.join(extra)}'
mylog('none', [msg])
# Add missing column
mylog('verbose', [f"[db_upgrade] Adding '{column_name}' ({column_type}) to {table} table"])
sql.execute(f'ALTER TABLE "{table}" ADD "{column_name}" {column_type}')
return True
except Exception as e:
mylog('none', [f"[db_upgrade] ERROR while adding '{column_name}': {e}"])
return False
def ensure_views(sql) -> bool:
"""
Ensures required views exist.
Parameters:
- sql: database cursor or connection wrapper (must support execute() and fetchall()).
"""
sql.execute(""" DROP VIEW IF EXISTS Events_Devices;""")
sql.execute(""" CREATE VIEW Events_Devices AS
SELECT *
FROM Events
LEFT JOIN Devices ON eve_MAC = devMac;
""")
sql.execute(""" DROP VIEW IF EXISTS LatestEventsPerMAC;""")
sql.execute("""CREATE VIEW LatestEventsPerMAC AS
WITH RankedEvents AS (
SELECT
e.*,
ROW_NUMBER() OVER (PARTITION BY e.eve_MAC ORDER BY e.eve_DateTime DESC) AS row_num
FROM Events AS e
)
SELECT
e.*,
d.*,
c.*
FROM RankedEvents AS e
LEFT JOIN Devices AS d ON e.eve_MAC = d.devMac
INNER JOIN CurrentScan AS c ON e.eve_MAC = c.cur_MAC
WHERE e.row_num = 1;""")
sql.execute(""" DROP VIEW IF EXISTS Sessions_Devices;""")
sql.execute("""CREATE VIEW Sessions_Devices AS SELECT * FROM Sessions LEFT JOIN "Devices" ON ses_MAC = devMac;""")
sql.execute(""" CREATE VIEW IF NOT EXISTS LatestEventsPerMAC AS
WITH RankedEvents AS (
SELECT
e.*,
ROW_NUMBER() OVER (PARTITION BY e.eve_MAC ORDER BY e.eve_DateTime DESC) AS row_num
FROM Events AS e
)
SELECT
e.*,
d.*,
c.*
FROM RankedEvents AS e
LEFT JOIN Devices AS d ON e.eve_MAC = d.devMac
INNER JOIN CurrentScan AS c ON e.eve_MAC = c.cur_MAC
WHERE e.row_num = 1;
""")
# handling the Convert_Events_to_Sessions / Sessions screens
sql.execute("""DROP VIEW IF EXISTS Convert_Events_to_Sessions;""")
sql.execute("""CREATE VIEW Convert_Events_to_Sessions AS SELECT EVE1.eve_MAC,
EVE1.eve_IP,
EVE1.eve_EventType AS eve_EventTypeConnection,
EVE1.eve_DateTime AS eve_DateTimeConnection,
CASE WHEN EVE2.eve_EventType IN ('Disconnected', 'Device Down') OR
EVE2.eve_EventType IS NULL THEN EVE2.eve_EventType ELSE '<missing event>' END AS eve_EventTypeDisconnection,
CASE WHEN EVE2.eve_EventType IN ('Disconnected', 'Device Down') THEN EVE2.eve_DateTime ELSE NULL END AS eve_DateTimeDisconnection,
CASE WHEN EVE2.eve_EventType IS NULL THEN 1 ELSE 0 END AS eve_StillConnected,
EVE1.eve_AdditionalInfo
FROM Events AS EVE1
LEFT JOIN
Events AS EVE2 ON EVE1.eve_PairEventRowID = EVE2.RowID
WHERE EVE1.eve_EventType IN ('New Device', 'Connected','Down Reconnected')
UNION
SELECT eve_MAC,
eve_IP,
'<missing event>' AS eve_EventTypeConnection,
NULL AS eve_DateTimeConnection,
eve_EventType AS eve_EventTypeDisconnection,
eve_DateTime AS eve_DateTimeDisconnection,
0 AS eve_StillConnected,
eve_AdditionalInfo
FROM Events AS EVE1
WHERE (eve_EventType = 'Device Down' OR
eve_EventType = 'Disconnected') AND
EVE1.eve_PairEventRowID IS NULL;
""")
return True
def ensure_CurrentScan(sql) -> bool:
"""
Ensures required CurrentScan table exist.
Parameters:
- sql: database cursor or connection wrapper (must support execute() and fetchall()).
"""
# 🐛 CurrentScan DEBUG: comment out below when debugging to keep the CurrentScan table after restarts/scan finishes
sql.execute("DROP TABLE IF EXISTS CurrentScan;")
sql.execute(""" CREATE TABLE IF NOT EXISTS CurrentScan (
cur_MAC STRING(50) NOT NULL COLLATE NOCASE,
cur_IP STRING(50) NOT NULL COLLATE NOCASE,
cur_Vendor STRING(250),
cur_ScanMethod STRING(10),
cur_Name STRING(250),
cur_LastQuery STRING(250),
cur_DateTime STRING(250),
cur_SyncHubNodeName STRING(50),
cur_NetworkSite STRING(250),
cur_SSID STRING(250),
cur_NetworkNodeMAC STRING(250),
cur_PORT STRING(250),
cur_Type STRING(250),
UNIQUE(cur_MAC)
);
""")
return True
def ensure_Parameters(sql) -> bool:
"""
Ensures required Parameters table exist.
Parameters:
- sql: database cursor or connection wrapper (must support execute() and fetchall()).
"""
# Re-creating Parameters table
mylog('verbose', ["[db_upgrade] Re-creating Parameters table"])
sql.execute("DROP TABLE Parameters;")
sql.execute("""
CREATE TABLE "Parameters" (
"par_ID" TEXT PRIMARY KEY,
"par_Value" TEXT
);
""")
return True
def ensure_Settings(sql) -> bool:
"""
Ensures required Settings table exist.
Parameters:
- sql: database cursor or connection wrapper (must support execute() and fetchall()).
"""
# Re-creating Settings table
mylog('verbose', ["[db_upgrade] Re-creating Settings table"])
sql.execute(""" DROP TABLE IF EXISTS Settings;""")
sql.execute("""
CREATE TABLE "Settings" (
"setKey" TEXT,
"setName" TEXT,
"setDescription" TEXT,
"setType" TEXT,
"setOptions" TEXT,
"setGroup" TEXT,
"setValue" TEXT,
"setEvents" TEXT,
"setOverriddenByEnv" INTEGER
);
""")
return True
def ensure_plugins_tables(sql) -> bool:
"""
Ensures required plugins tables exist.
Parameters:
- sql: database cursor or connection wrapper (must support execute() and fetchall()).
"""
# Plugin state
sql_Plugins_Objects = """ CREATE TABLE IF NOT EXISTS Plugins_Objects(
"Index" INTEGER,
Plugin TEXT NOT NULL,
Object_PrimaryID TEXT NOT NULL,
Object_SecondaryID TEXT NOT NULL,
DateTimeCreated TEXT NOT NULL,
DateTimeChanged TEXT NOT NULL,
Watched_Value1 TEXT NOT NULL,
Watched_Value2 TEXT NOT NULL,
Watched_Value3 TEXT NOT NULL,
Watched_Value4 TEXT NOT NULL,
Status TEXT NOT NULL,
Extra TEXT NOT NULL,
UserData TEXT NOT NULL,
ForeignKey TEXT NOT NULL,
SyncHubNodeName TEXT,
"HelpVal1" TEXT,
"HelpVal2" TEXT,
"HelpVal3" TEXT,
"HelpVal4" TEXT,
ObjectGUID TEXT,
PRIMARY KEY("Index" AUTOINCREMENT)
); """
sql.execute(sql_Plugins_Objects)
# Plugin execution results
sql_Plugins_Events = """ CREATE TABLE IF NOT EXISTS Plugins_Events(
"Index" INTEGER,
Plugin TEXT NOT NULL,
Object_PrimaryID TEXT NOT NULL,
Object_SecondaryID TEXT NOT NULL,
DateTimeCreated TEXT NOT NULL,
DateTimeChanged TEXT NOT NULL,
Watched_Value1 TEXT NOT NULL,
Watched_Value2 TEXT NOT NULL,
Watched_Value3 TEXT NOT NULL,
Watched_Value4 TEXT NOT NULL,
Status TEXT NOT NULL,
Extra TEXT NOT NULL,
UserData TEXT NOT NULL,
ForeignKey TEXT NOT NULL,
SyncHubNodeName TEXT,
"HelpVal1" TEXT,
"HelpVal2" TEXT,
"HelpVal3" TEXT,
"HelpVal4" TEXT,
PRIMARY KEY("Index" AUTOINCREMENT)
); """
sql.execute(sql_Plugins_Events)
# Plugin execution history
sql_Plugins_History = """ CREATE TABLE IF NOT EXISTS Plugins_History(
"Index" INTEGER,
Plugin TEXT NOT NULL,
Object_PrimaryID TEXT NOT NULL,
Object_SecondaryID TEXT NOT NULL,
DateTimeCreated TEXT NOT NULL,
DateTimeChanged TEXT NOT NULL,
Watched_Value1 TEXT NOT NULL,
Watched_Value2 TEXT NOT NULL,
Watched_Value3 TEXT NOT NULL,
Watched_Value4 TEXT NOT NULL,
Status TEXT NOT NULL,
Extra TEXT NOT NULL,
UserData TEXT NOT NULL,
ForeignKey TEXT NOT NULL,
SyncHubNodeName TEXT,
"HelpVal1" TEXT,
"HelpVal2" TEXT,
"HelpVal3" TEXT,
"HelpVal4" TEXT,
PRIMARY KEY("Index" AUTOINCREMENT)
); """
sql.execute(sql_Plugins_History)
# Dynamically generated language strings
sql.execute("DROP TABLE IF EXISTS Plugins_Language_Strings;")
sql.execute(""" CREATE TABLE IF NOT EXISTS Plugins_Language_Strings(
"Index" INTEGER,
Language_Code TEXT NOT NULL,
String_Key TEXT NOT NULL,
String_Value TEXT NOT NULL,
Extra TEXT NOT NULL,
PRIMARY KEY("Index" AUTOINCREMENT)
); """)
return True

View File

@@ -495,6 +495,8 @@ def sanitize_SQL_input(val):
# Function to normalize the string and remove diacritics # Function to normalize the string and remove diacritics
def normalize_string(text): def normalize_string(text):
# Normalize the text to 'NFD' to separate base characters and diacritics # Normalize the text to 'NFD' to separate base characters and diacritics
if not isinstance(text, str):
text = str(text)
normalized_text = unicodedata.normalize('NFD', text) normalized_text = unicodedata.normalize('NFD', text)
# Filter out diacritics and unwanted characters # Filter out diacritics and unwanted characters
return ''.join(c for c in normalized_text if unicodedata.category(c) != 'Mn') return ''.join(c for c in normalized_text if unicodedata.category(c) != 'Mn')