From dc8b82e997bb09ad4b922aa4490ab4fe4decb3c4 Mon Sep 17 00:00:00 2001 From: Massimo Pissarello Date: Sat, 14 Mar 2026 03:47:25 +0100 Subject: [PATCH 01/13] Translated using Weblate (Italian) Currently translated at 100.0% (806 of 806 strings) Translation: NetAlertX/core Translate-URL: https://hosted.weblate.org/projects/pialert/core/it/ --- front/php/templates/language/it_it.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/php/templates/language/it_it.json b/front/php/templates/language/it_it.json index 3ef418e9..e6f453b3 100644 --- a/front/php/templates/language/it_it.json +++ b/front/php/templates/language/it_it.json @@ -208,7 +208,7 @@ "Device_NoData_Help": "Se i dispositivi non vengono visualizzati dopo la scansione, controlla l'impostazione SCAN_SUBNETS e la documentazione.", "Device_NoData_Scanning": "In attesa della prima scansione: potrebbero volerci diversi minuti dopo la configurazione iniziale.", "Device_NoData_Title": "Ancora nessun dispositivo trovato", - "Device_NoMatch_Title": "", + "Device_NoMatch_Title": "Nessun dispositivo corrisponde al filtro attuale", "Device_Save_Failed": "Impossibile salvare il dispositivo", "Device_Save_Unauthorized": "Non autorizzato: token API non valido", "Device_Saved_Success": "Dispositivo salvato correttamente", From 23e16ae4fa1b06857b7b5f087942a2969bd988cf Mon Sep 17 00:00:00 2001 From: jokob-sk Date: Mon, 16 Mar 2026 21:03:47 +1100 Subject: [PATCH 02/13] PLG: sync handle mixed case Signed-off-by: jokob-sk --- front/plugins/sync/sync.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/front/plugins/sync/sync.py b/front/plugins/sync/sync.py index f6b0a3a7..514659b3 100755 --- a/front/plugins/sync/sync.py +++ b/front/plugins/sync/sync.py @@ -187,9 +187,10 @@ def main(): with open(file_path, 'r') as f: data = json.load(f) for device in data['data']: - if device['devMac'] not in unique_mac_addresses: + device['devMac'] = str(device['devMac']).lower() + if device['devMac'].lower() not in unique_mac_addresses: device['devSyncHubNode'] = syncHubNodeName - unique_mac_addresses.add(device['devMac']) + unique_mac_addresses.add(device['devMac'].lower()) device_data.append(device) # Rename the file to "processed_" + current name @@ -206,7 +207,7 @@ def main(): # Retrieve existing devMac values from the Devices table placeholders = ', '.join('?' for _ in unique_mac_addresses) cursor.execute(f'SELECT devMac FROM Devices WHERE devMac IN ({placeholders})', tuple(unique_mac_addresses)) - existing_mac_addresses = set(row[0] for row in cursor.fetchall()) + existing_mac_addresses = set(row[0].lower() for row in cursor.fetchall()) # insert devices into the last_result.log and thus CurrentScan table to manage state for device in device_data: @@ -229,7 +230,10 @@ def main(): db_columns = {row[1] for row in cursor.fetchall()} # Filter out existing devices - new_devices = [device for device in device_data if device['devMac'] not in existing_mac_addresses] + new_devices = [ + device for device in device_data + if device['devMac'].lower() not in existing_mac_addresses + ] mylog('verbose', [f'[{pluginName}] All devices: "{len(device_data)}"']) mylog('verbose', [f'[{pluginName}] New devices: "{len(new_devices)}"']) From d40d1795d2d831f4927ee2ce252fcf6f6f46969a Mon Sep 17 00:00:00 2001 From: mid Date: Tue, 17 Mar 2026 08:29:51 +0100 Subject: [PATCH 03/13] Translated using Weblate (Japanese) Currently translated at 100.0% (806 of 806 strings) Translation: NetAlertX/core Translate-URL: https://hosted.weblate.org/projects/pialert/core/ja/ --- front/php/templates/language/ja_jp.json | 116 ++++++++++++------------ 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/front/php/templates/language/ja_jp.json b/front/php/templates/language/ja_jp.json index 31cfb382..43f2a891 100644 --- a/front/php/templates/language/ja_jp.json +++ b/front/php/templates/language/ja_jp.json @@ -1,7 +1,7 @@ { - "API_CUSTOM_SQL_description": "カスタムSQLクエリを指定するとJSONファイルが生成され、table_custom_endpoint.jsonファイルエンドポイント経由で公開できます。", + "API_CUSTOM_SQL_description": "カスタムSQLクエリを指定するとJSONファイルが生成され、table_custom_endpoint.json ファイルエンドポイント 経由で公開できます。", "API_CUSTOM_SQL_name": "カスタムエンドポイント", - "API_TOKEN_description": "安全な通信のための API トークン。生成するか、任意の値を入力してください。リクエストヘッダーで送信され、SYNCプラグイン、GraphQLサーバー、その他のAPIエンドポイントで使用されます。APIドキュメントに記載の通り、API エンドポイントを使用して独自の連携機能を作成できます。", + "API_TOKEN_description": "安全な通信のための API トークン。生成するか、任意の値を入力してください。リクエストヘッダーで送信され、SYNC プラグイン、GraphQLサーバー、その他のAPIエンドポイントで使用されます。APIドキュメント に記載の通り、API エンドポイントを使用して独自の連携機能を作成できます。", "API_TOKEN_name": "APIトークン", "API_display_name": "API", "API_icon": "", @@ -27,7 +27,7 @@ "AppEvents_ObjectType": "オブジェクトタイプ", "AppEvents_Plugin": "プラグイン", "AppEvents_Type": "種別", - "BACKEND_API_URL_description": "フロントエンドからバックエンドに通信するために使用します。 デフォルトでは/serverに設定されており、通常変更する必要はありません。", + "BACKEND_API_URL_description": "フロントエンドからバックエンドに通信するために使用します。デフォルトでは /server に設定されており、通常変更する必要はありません。", "BACKEND_API_URL_name": "バックエンド API URL", "BackDevDetail_Actions_Ask_Run": "このアクションを実行してよろしいですか?", "BackDevDetail_Actions_Not_Registered": "登録されていないアクション: ", @@ -61,12 +61,12 @@ "BackDevices_Restore_okay": "復元が正常に完了しました。", "BackDevices_darkmode_disabled": "ダークモード無効化", "BackDevices_darkmode_enabled": "ダークモード有効化", - "CLEAR_NEW_FLAG_description": "有効にした場合(0で無効)、新規デバイスのフラグは初回検知時刻から指定された時間(1時間単位)が経過すると自動的に解除されます。", + "CLEAR_NEW_FLAG_description": "有効にした場合(0 で無効)、新規デバイス のフラグは 初回検知時刻 から指定された時間(1時間単位)が経過すると自動的に解除されます。", "CLEAR_NEW_FLAG_name": "新規フラグの解除", "CustProps_cant_remove": "削除できません。少なくとも1つのプロパティが必要です。", "DAYS_TO_KEEP_EVENTS_description": "これはメンテナンス設定です。イベントエントリを保持する日数を指定します。それより古いイベントは定期的に削除されます。プラグインイベント履歴にも適用されます。", "DAYS_TO_KEEP_EVENTS_name": "古いイベントの削除", - "DISCOVER_PLUGINS_description": "このオプションを無効にすると、初期化と設定の保存が高速化されます。無効にした場合、プラグインは検出されず、LOADED_PLUGINS設定に新しいプラグインを追加することはできません。", + "DISCOVER_PLUGINS_description": "このオプションを無効にすると、初期化と設定の保存が高速化されます。無効にした場合、プラグインは検出されず、LOADED_PLUGINS 設定に新しいプラグインを追加することはできません。", "DISCOVER_PLUGINS_name": "プラグインの検出", "DevDetail_Children_Title": "親子関係", "DevDetail_Copy_Device_Title": "デバイスから詳細をコピー", @@ -95,8 +95,8 @@ "DevDetail_MainInfo_Group": "グループ", "DevDetail_MainInfo_Location": "位置", "DevDetail_MainInfo_Name": "名前", - "DevDetail_MainInfo_Network": "ノード(MAC)", - "DevDetail_MainInfo_Network_Port": "ポート", + "DevDetail_MainInfo_Network": " ノード(MAC)", + "DevDetail_MainInfo_Network_Port": " ポート", "DevDetail_MainInfo_Network_Site": "サイト", "DevDetail_MainInfo_Network_Title": "ネットワーク詳細", "DevDetail_MainInfo_Owner": "所有者", @@ -118,7 +118,7 @@ "DevDetail_Nmap_buttonFast_text": "高速スキャン: デフォルトのスキャンよりも少ないポート数(100)をスキャンする(数秒)", "DevDetail_Nmap_buttonSkipDiscovery": "ホスト検出をスキップ", "DevDetail_Nmap_buttonSkipDiscovery_text": "ホスト検出をスキップ(-Pnオプション): ホスト検出なしのデフォルトスキャン", - "DevDetail_Nmap_resultsLink": "スキャン開始後、このページを離れても構いません。結果はapp_front.logファイルにも記録されます。", + "DevDetail_Nmap_resultsLink": "スキャン開始後、このページを離れても構いません。結果は app_front.log ファイルにも記録されます。", "DevDetail_Owner_hover": "このデバイスを所有者は誰ですか。自由入力欄。", "DevDetail_Periodselect_All": "全件", "DevDetail_Periodselect_LastMonth": "先月", @@ -185,7 +185,7 @@ "DevDetail_Vendor_hover": "ベンダーは自動検出されるべきです。カスタム値を上書きまたは追加できます。", "DevDetail_WOL_Title": " Wake-on-LAN", "DevDetail_button_AddIcon": "アイコンの追加", - "DevDetail_button_AddIcon_Help": "SVG HTMLタグまたはFont Awesome HTMLタグのアイコンを貼り付けてください。詳細はアイコンのドキュメントを参照してください。", + "DevDetail_button_AddIcon_Help": "SVG HTMLタグまたはFont Awesome HTMLタグのアイコンを貼り付けてください。詳細は アイコンのドキュメント を参照してください。", "DevDetail_button_AddIcon_Tooltip": "このデバイスに、ドロップダウンにない新しいアイコンを追加します。", "DevDetail_button_Delete": "デバイスの削除", "DevDetail_button_DeleteEvents": "イベントの削除", @@ -196,19 +196,19 @@ "DevDetail_button_OverwriteIcons_Warning": "このデバイスと同じデバイス種別を持つすべてのデバイスにアイコンを上書きしてもよろしいですか?", "DevDetail_button_Reset": "変更をリセット", "DevDetail_button_Save": "保存", - "DeviceEdit_ValidMacIp": "有効なMacIPアドレスを入力します.", + "DeviceEdit_ValidMacIp": "有効な MacIP アドレスを入力します.", "Device_MultiEdit": "マルチエディタ", - "Device_MultiEdit_Backup": "注意:以下の項目に誤った値を入力すると設定が破損します。まずデータベースまたはデバイスの設定をバックアップしてください(クリックしてダウンロード)。このファイルからデバイスを復元する方法については、バックアップのドキュメントを参照してください。変更を適用するには、更新したい各フィールドの保存アイコンをクリックしてください。", + "Device_MultiEdit_Backup": "注意:以下の項目に誤った値を入力すると設定が破損します。まずデータベースまたはデバイスの設定をバックアップしてください(クリックしてダウンロード )。このファイルからデバイスを復元する方法については、バックアップのドキュメント を参照してください。変更を適用するには、更新したい各フィールドの 保存 アイコンをクリックしてください。", "Device_MultiEdit_Fields": "フィールドの編集:", "Device_MultiEdit_MassActions": "大量のアクション:", "Device_MultiEdit_No_Devices": "デバイスが選択されていません。", "Device_MultiEdit_Tooltip": "注意。これをクリックすると、左側の値が上記で選択したすべてのデバイスに適用されます。", "Device_NextScan_Imminent": "まもなく...", "Device_NextScan_In": "次のスキャンまでおよそ ", - "Device_NoData_Help": "スキャン後にデバイスが表示されない場合は、SCAN_SUBNETS設定とドキュメントを確認してください。", + "Device_NoData_Help": "スキャン後にデバイスが表示されない場合は、SCAN_SUBNETS設定と ドキュメント を確認してください。", "Device_NoData_Scanning": "最初のスキャンを待機中 - 初期設定後、数分かかる場合があります。", "Device_NoData_Title": "デバイスが見つかりません", - "Device_NoMatch_Title": "", + "Device_NoMatch_Title": "このフィルタ条件に一致するデバイスはありません", "Device_Save_Failed": "デバイスの保存に失敗しました", "Device_Save_Unauthorized": "許可されていない - 無効なAPIトークン", "Device_Saved_Success": "デバイスが正常に保存されました", @@ -269,7 +269,7 @@ "Device_Tablelenght_all": "全件", "Device_Title": "デバイス", "Devices_Filters": "フィルター", - "ENABLE_PLUGINS_description": "プラグイン機能を有効にします。プラグインの読み込みにはより多くのハードウェアリソースを必要とするため、リソースが限られているシステムでは無効にすることをお勧めします。", + "ENABLE_PLUGINS_description": "プラグイン 機能を有効にします。プラグインの読み込みにはより多くのハードウェアリソースを必要とするため、リソースが限られているシステムでは無効にすることをお勧めします。", "ENABLE_PLUGINS_name": "有効プラグイン", "ENCRYPTION_KEY_description": "データ暗号化キー。", "ENCRYPTION_KEY_name": "暗号化キー", @@ -372,21 +372,21 @@ "Gen_Warning": "警告", "Gen_Work_In_Progress": "作業中、https://github.com/netalertx/NetAlertX/issues へのフィードバックの好機です", "Gen_create_new_device": "新規デバイス", - "Gen_create_new_device_info": "デバイスは通常、プラグインを使用して検出されます。ただし、特定のケースでは手動でデバイスを追加する必要がある場合があります。具体的なシナリオについては、リモートネットワークドキュメントを参照してください。", + "Gen_create_new_device_info": "デバイスは通常、プラグイン を使用して検出されます。ただし、特定のケースでは手動でデバイスを追加する必要がある場合があります。具体的なシナリオについては、リモートネットワークドキュメント を参照してください。", "General_display_name": "一般", "General_icon": "", - "HRS_TO_KEEP_NEWDEV_description": "これはデバイスを削除するメンテナンス設定です。有効にした場合(0で無効)、新規デバイスとしてマークされたデバイスの内、初回検知時刻が指定された時間より古いものは削除されます。新規デバイスX時間後に自動削除したい場合に使用してください。", + "HRS_TO_KEEP_NEWDEV_description": "これは デバイスを削除 するメンテナンス設定です。有効にした場合(0 で無効)、新規デバイス としてマークされたデバイスの内、初回検知時刻 が指定された時間より古いものは削除されます。新規デバイスX 時間後に自動削除したい場合に使用してください。", "HRS_TO_KEEP_NEWDEV_name": "新規デバイスの削除", - "HRS_TO_KEEP_OFFDEV_description": "これはデバイスを削除するメンテナンス設定です。有効にした場合(0で無効)、オフライン状態のデバイスの内、最終接続日時が指定された時間より古いものは削除されます。オフラインデバイスX時間経過後に自動削除したい場合に使用してください。", + "HRS_TO_KEEP_OFFDEV_description": "これは デバイスを削除 するメンテナンス設定です。有効にした場合(0 で無効)、オフライン 状態のデバイスの内、最終接続日時 が指定された時間より古いものは削除されます。オフラインデバイスX 時間経過後に自動削除したい場合に使用してください。", "HRS_TO_KEEP_OFFDEV_name": "オフラインデバイスを削除する", - "LOADED_PLUGINS_description": "読み込まれたプラグイン。プラグインの追加はアプリケーションの速度を低下させる可能性があります。有効化が必要なプラグインの種類やスキャンオプションについては、プラグインのドキュメントを参照してください。読み込まれなかったプラグインの設定は失われます。読み込まない設定にできるのは無効化されたプラグインのみです。", + "LOADED_PLUGINS_description": "読み込まれたプラグイン。プラグインの追加はアプリケーションの速度を低下させる可能性があります。有効化が必要なプラグインの種類やスキャンオプションについては、プラグインのドキュメント を参照してください。読み込まれなかったプラグインの設定は失われます。読み込まない設定にできるのは 無効化 されたプラグインのみです。", "LOADED_PLUGINS_name": "読み込まれたプラグイン", "LOG_LEVEL_description": "この設定により、より詳細なログ出力が有効になります。データベースへのイベント書き込みのデバッグに有用です。", "LOG_LEVEL_name": "追加のログ出力", "Loading": "読み込み中…", "Login_Box": "パスワードを入力してください", "Login_Default_PWD": "デフォルトパスワード「123456」は有効なままです。", - "Login_Info": "パスワードはSet Passwordプラグインで設定されます。ログインに問題がある場合はSETPWDのドキュメントを確認してください。", + "Login_Info": "パスワードはSet Passwordプラグインで設定されます。ログインに問題がある場合は SETPWDのドキュメント を確認してください。", "Login_Psw-box": "パスワード", "Login_Psw_alert": "パスワードアラート!", "Login_Psw_folder": "config フォルダ内。", @@ -403,31 +403,31 @@ "Maint_Restart_Server_noti_text": "バックエンドサーバーを再起動してもよろしいですか?アプリの不整合が発生する可能性があります。まず設定のバックアップを行ってください。

注:この操作には数分かかる場合があります。", "Maintenance_InitCheck": "初期化チェック", "Maintenance_InitCheck_Checking": "確認中…", - "Maintenance_InitCheck_QuickSetupGuide": "クイックセットアップガイドに従ったことを確認してください。", + "Maintenance_InitCheck_QuickSetupGuide": "クイックセットアップガイド に従ったことを確認してください。", "Maintenance_InitCheck_Success": "アプリケーションの初期化に成功!", "Maintenance_ReCheck": "再チェック", "Maintenance_Running_Version": "インストールバージョン", "Maintenance_Status": "状態", "Maintenance_Title": "メンテナンスツール", "Maintenance_Tool_DownloadConfig": "設定エクスポート", - "Maintenance_Tool_DownloadConfig_text": "app.confファイルに保存されている構成設定の完全なバックアップをダウンロードしてください。", + "Maintenance_Tool_DownloadConfig_text": "app.conf ファイルに保存されている構成設定の完全なバックアップをダウンロードしてください。", "Maintenance_Tool_DownloadWorkflows": "ワークフローのエクスポート", - "Maintenance_Tool_DownloadWorkflows_text": "workflows.jsonファイルに保存されているワークフロー設定の完全なバックアップをダウンロードしてください。", + "Maintenance_Tool_DownloadWorkflows_text": "workflows.json ファイルに保存されているワークフロー設定の完全なバックアップをダウンロードしてください。", "Maintenance_Tool_ExportCSV": "デバイスエクスポート(csv)", "Maintenance_Tool_ExportCSV_noti": "デバイスエクスポート(csv)", "Maintenance_Tool_ExportCSV_noti_text": "CSVファイルを生成してよろしいですか?", - "Maintenance_Tool_ExportCSV_text": "ネットワークノードとデバイス間の接続関係を含むデバイス一覧を記載したCSV(カンマ区切り値)ファイルを生成します。この操作は、CSVバックアッププラグインを有効化することで実行できます。", + "Maintenance_Tool_ExportCSV_text": "ネットワークノードとデバイス間の接続関係を含むデバイス一覧を記載したCSV(カンマ区切り値)ファイルを生成します。この操作は、CSVバックアップ プラグインを有効化することで実行できます。", "Maintenance_Tool_ImportCSV": "デバイスインポート(csv)", "Maintenance_Tool_ImportCSV_noti": "デバイスインポート(csv)", - "Maintenance_Tool_ImportCSV_noti_text": "CSVファイルを本当にインポートしますか?これによりデータベース内のデバイスが完全に上書きされます。", - "Maintenance_Tool_ImportCSV_text": "この機能を使用する前に、必ずバックアップを作成してください。ネットワークノードとデバイス間の接続関係を含むデバイス一覧を記載したCSV(カンマ区切り値)ファイルをインポートします。そのためには、devices.csv という名前のCSVファイルを/configフォルダに配置してください。", + "Maintenance_Tool_ImportCSV_noti_text": "CSVファイルを本当にインポートしますか?これによりデータベース内のデバイスが完全に 上書き されます。", + "Maintenance_Tool_ImportCSV_text": "この機能を使用する前に、必ずバックアップを作成してください。ネットワークノードとデバイス間の接続関係を含むデバイス一覧を記載したCSV(カンマ区切り値)ファイルをインポートします。そのためには、devices.csv という名前のCSVファイルを /config フォルダに配置してください。", "Maintenance_Tool_ImportConfig_noti": "設定のインポート (app.conf)", "Maintenance_Tool_ImportPastedCSV": "デバイスのインポート(csv貼り付け)", - "Maintenance_Tool_ImportPastedCSV_noti_text": "貼り付けたCSVを本当にインポートしますか?これによりデータベース内のデバイスが完全に上書きされます。", + "Maintenance_Tool_ImportPastedCSV_noti_text": "貼り付けたCSVを本当にインポートしますか?これによりデータベース内のデバイスが完全に 上書き されます。", "Maintenance_Tool_ImportPastedCSV_text": "この機能を使用する前に、必ずバックアップを作成してください。ネットワークノードとデバイス間の接続関係を含むデバイス一覧が記載されたCSV(カンマ区切り値)ファイルをインポートします。", "Maintenance_Tool_ImportPastedConfig": "設定のインポート(貼り付け)", - "Maintenance_Tool_ImportPastedConfig_noti_text": "貼り付けた設定を本当にインポートしますか?これによりapp.confファイルが完全に上書きされます。", - "Maintenance_Tool_ImportPastedConfig_text": "アプリケーション設定をすべて含むapp.confファイルをインポートします。まず設定のエクスポートで現在のapp.confファイルをダウンロードすることをお勧めします。", + "Maintenance_Tool_ImportPastedConfig_noti_text": "貼り付けた設定を本当にインポートしますか?これにより app.conf ファイルが完全に 上書き されます。", + "Maintenance_Tool_ImportPastedConfig_text": "アプリケーション設定をすべて含む app.conf ファイルをインポートします。まず 設定のエクスポート で現在の app.conf ファイルをダウンロードすることをお勧めします。", "Maintenance_Tool_UnlockFields": "デバイスフィールドのロック解除", "Maintenance_Tool_UnlockFields_noti": "デバイスフィールドのロック解除", "Maintenance_Tool_UnlockFields_noti_text": "全デバイスのデバイスフィールドのソース値(LOCKED/USER)をすべてクリアしてもよろしいですか? この操作は元に戻せません。", @@ -435,7 +435,7 @@ "Maintenance_Tool_arpscansw": "arpスキャンの切り替え(オン/オフ)", "Maintenance_Tool_arpscansw_noti": "arpスキャンをオンまたはオフにする", "Maintenance_Tool_arpscansw_noti_text": "スキャンをオフにした場合、再度有効化されるまでオフのままとなります。", - "Maintenance_Tool_arpscansw_text": "ARPスキャンの有効化または無効化。スキャンを無効化した場合、再度有効化されるまで無効状態が維持されます。アクティブなスキャンはキャンセルされません。", + "Maintenance_Tool_arpscansw_text": "arpスキャンの有効化または無効化。スキャンを無効化した場合、再度有効化されるまで無効状態が維持されます。アクティブなスキャンはキャンセルされません。", "Maintenance_Tool_backup": "DBバックアップ", "Maintenance_Tool_backup_noti": "DBバックアップ", "Maintenance_Tool_backup_noti_text": "データベースのバックアップを実行してもよろしいですか? 現在スキャンが実行されていないことを確認してください。", @@ -475,7 +475,7 @@ "Maintenance_Tool_del_unknowndev_noti_text": "すべての(Unknown)のデバイスと(name not found)のデバイスを削除してもよろしいですか?", "Maintenance_Tool_del_unknowndev_text": "この機能を使用する前に、必ずバックアップを作成してください。削除操作は元に戻せません。データベースから(Unknown)という名前のデバイスをすべて削除します。", "Maintenance_Tool_del_unlockFields_selecteddev_text": "これにより、選択したデバイスの「LOCKED/USER」フィールドのロックが解除されます。この操作は取り消せません。", - "Maintenance_Tool_displayed_columns_text": "デバイスページの列の表示状態と順序を変更します。", + "Maintenance_Tool_displayed_columns_text": " デバイス ページの列の表示状態と順序を変更します。", "Maintenance_Tool_drag_me": "ドラッグして列を並べ替え。", "Maintenance_Tool_order_columns_text": "Maintenance_Tool_order_columns_text", "Maintenance_Tool_purgebackup": "バックアップ除去", @@ -500,7 +500,7 @@ "Maintenance_arp_status_off": "無効化中", "Maintenance_arp_status_on": "スキャン中", "Maintenance_built_on": "ビルド日", - "Maintenance_current_version": "最新です。現在の取り組みをご覧ください。", + "Maintenance_current_version": "最新です。現在の取り組み をご覧ください。", "Maintenance_database_backup": "DBバックアップ", "Maintenance_database_backup_found": "バックアップが見つかりました", "Maintenance_database_backup_total": "総ディスク使用量", @@ -512,13 +512,13 @@ "Maintenance_lang_selector_empty": "言語を選択", "Maintenance_lang_selector_lable": "言語を選択", "Maintenance_lang_selector_text": "変更はクライアント側で行われるため、現在のブラウザにのみ影響します。", - "Maintenance_new_version": "新しいバージョンが利用可能です。リリースノートを確認してください。", + "Maintenance_new_version": "新しいバージョンが利用可能です。リリースノート を確認してください。", "Maintenance_themeselector_apply": "適用", "Maintenance_themeselector_empty": "スキンを選択", "Maintenance_themeselector_lable": "スキンを選択", "Maintenance_themeselector_text": "変更はサーバー側で行われるため、使用中のすべてのデバイスに影響します。", "Maintenance_version": "アプリのアップデート", - "NETWORK_DEVICE_TYPES_description": "ネットワークビューにおいてネットワーク機器として使用できるデバイス種別。デバイス種別は、デバイス詳細の特定のデバイスにおける種別設定と一致する必要があります。デバイスに追加するには+ボタンを使用してください。既存の種別を削除せず、新しい種別のみを追加してください。", + "NETWORK_DEVICE_TYPES_description": "ネットワークビューにおいてネットワーク機器として使用できるデバイス種別。デバイス種別は、デバイス詳細の特定のデバイスにおける 種別 設定と一致する必要があります。デバイスに追加するには + ボタンを使用してください。既存の種別を削除せず、新しい種別のみを追加してください。", "NETWORK_DEVICE_TYPES_name": "ネットワーク機器の種別", "Navigation_About": "概要", "Navigation_AppEvents": "アプリイベント", @@ -536,7 +536,7 @@ "Navigation_Settings": "設定", "Navigation_SystemInfo": "システム情報", "Navigation_Workflows": "ワークフロー", - "Network_Assign": "上記ネットワークノードに接続", + "Network_Assign": "上記 ネットワークノードに接続", "Network_Cant_Assign": "ルートインターネットノードを子リーフノードとして割り当てることはできません.", "Network_Cant_Assign_No_Node_Selected": "割り当てられません、親ノードが選択されていません。", "Network_Configuration_Error": "設定エラー", @@ -546,7 +546,7 @@ "Network_ManageAdd_Name": "デバイス名", "Network_ManageAdd_Name_text": "特殊文字を含まない名前", "Network_ManageAdd_Port": "ポート数", - "Network_ManageAdd_Port_text": "Wi-FiおよびPLCの場合は空欄にしてください", + "Network_ManageAdd_Port_text": "wifiおよびplcの場合は空欄にしてください", "Network_ManageAdd_Submit": "デバイス追加", "Network_ManageAdd_Type": "デバイス種別", "Network_ManageAdd_Type_text": "-- 種別選択 --", @@ -562,19 +562,19 @@ "Network_ManageEdit_Name": "新規デバイス名", "Network_ManageEdit_Name_text": "特殊文字を含まない名前", "Network_ManageEdit_Port": " 新規ポート数", - "Network_ManageEdit_Port_text": "Wi-FiおよびPLCの場合は空欄にしてください", + "Network_ManageEdit_Port_text": "wifiおよびplcの場合は空欄にしてください", "Network_ManageEdit_Submit": "変更を保存", "Network_ManageEdit_Type": "新規デバイス種別", "Network_ManageEdit_Type_text": "-- 種別選択 --", "Network_ManageLeaf": "割り当ての管理", "Network_ManageUnassign": "割り当て解除", - "Network_NoAssignedDevices": "このネットワークノードには割り当てられたデバイス(リーフノード)がありません。以下のデバイスから1つを割り当てるか、デバイス内の任意のデバイスの詳細タブに移動し、そこでネットワークノード(MAC)ポートに割り当ててください。", + "Network_NoAssignedDevices": "このネットワークノードには割り当てられたデバイス(リーフノード)がありません。以下のデバイスから1つを割り当てるか、 デバイス 内の任意のデバイスの 詳細 タブに移動し、そこでネットワーク ノード(MAC) ポート に割り当ててください。", "Network_NoDevices": "設定するデバイスがありません", "Network_Node": "ネットワークノード", "Network_Node_Name": "ノード名", "Network_Parent": "上位のネットワーク機器", "Network_Root": "ルートノード", - "Network_Root_Not_Configured": "インターネットルートデバイス種別フィールドで、ゲートウェイなどのネットワーク機器種別を選択し、この画面の設定を開始してください。

詳細なドキュメントはネットワークの設定方法ページガイドでご覧いただけます", + "Network_Root_Not_Configured": "インターネットルートデバイス種別 フィールドで、ゲートウェイ などのネットワーク機器種別を選択し、この画面の設定を開始してください。

詳細なドキュメントは ネットワークの設定方法ページ ガイドでご覧いただけます", "Network_Root_Unconfigurable": "設定不可のルート", "Network_ShowArchived": "アーカイブを表示", "Network_ShowOffline": "オフラインを表示", @@ -585,13 +585,13 @@ "Network_UnassignedDevices": "未割り当てデバイス", "Notifications_All": "すべての通知", "Notifications_Mark_All_Read": "すべて既読にする", - "PIALERT_WEB_PASSWORD_description": "デフォルトのパスワードは123456です。パスワードを変更するには、コンテナ内で/app/back/pialert-cliを実行するか、SETPWD_RUNパスワード設定プラグインを使用してください。", + "PIALERT_WEB_PASSWORD_description": "デフォルトのパスワードは 123456 です。パスワードを変更するには、コンテナ内で /app/back/pialert-cli を実行するか、SETPWD_RUN パスワード設定プラグイン を使用してください。", "PIALERT_WEB_PASSWORD_name": "ログインパスワード", "PIALERT_WEB_PROTECTION_description": "有効にするとログインダイアログが表示されます。インスタンスにロックアウトされた場合は、以下をよくご確認ください。", "PIALERT_WEB_PROTECTION_name": "ログインを有効化", "PLUGINS_KEEP_HIST_description": "プラグイン履歴スキャン結果のエントリをいくつ保持すべきか(デバイス固有ではなく、プラグインごとに)。", "PLUGINS_KEEP_HIST_name": "プラグイン履歴", - "PRAGMA_JOURNAL_SIZE_LIMIT_description": "SQLite WAL(Write-Ahead Log)の自動チェックポイント発生前の最大サイズ(MB単位)。低い値(10~20 MB)ではディスク/ストレージ使用量を削減しますが、スキャン時のCPU使用率が増加します。高い値(50~100 MB)は操作中のCPUスパイクを軽減しますが、RAMとディスク容量をより多く消費する可能性があります。デフォルトの50 MBは両者のバランスを取ります。SDカードを搭載したNASデバイスなどのリソース制約のあるシステムで有用です。設定保存後、変更を有効にするにはサーバーを再起動してください。", + "PRAGMA_JOURNAL_SIZE_LIMIT_description": "SQLite WAL(Write-Ahead Log)の自動チェックポイント発生前の最大サイズ(MB単位)。低い値(10~20 MB)ではディスク/ストレージ使用量を削減しますが、スキャン時のCPU使用率が増加します。高い値(50~100 MB)は操作中のCPUスパイクを軽減しますが、RAMとディスク容量をより多く消費する可能性があります。デフォルトの 50 MB は両者のバランスを取ります。SDカードを搭載したNASデバイスなどのリソース制約のあるシステムで有用です。設定保存後、変更を有効にするにはサーバーを再起動してください。", "PRAGMA_JOURNAL_SIZE_LIMIT_name": "WALサイズ制限(MB)", "Plugins_DeleteAll": "すべて削除(フィルターは無視されます)", "Plugins_Filters_Mac": "Macフィルター", @@ -628,12 +628,12 @@ "REPORT_DASHBOARD_URL_description": "このURLは、HTMLレポート(例:メール)内のリンク生成のベースとして使用されます。ポート番号を含め、http:// で始まる完全なURLを入力してください(末尾のスラッシュ / は不要です)。", "REPORT_DASHBOARD_URL_name": "NetAlertX URL", "REPORT_ERROR": "お探しのページは一時的に利用できません、数秒後に再度お試しください", - "REPORT_MAIL_description": "有効化すると、購読した変更点のリストが記載されたメールが送信されます。以下のSMTP設定に関連する残りの設定もすべて入力してください。問題が発生した場合は、LOG_LEVELdebugに設定し、エラーログを確認してください。", + "REPORT_MAIL_description": "有効化すると、購読した変更点のリストが記載されたメールが送信されます。以下のSMTP設定に関連する残りの設定もすべて入力してください。問題が発生した場合は、LOG_LEVELdebug に設定し、エラーログ を確認してください。", "REPORT_MAIL_name": "メールを有効化", "REPORT_TITLE": "レポート", "RandomMAC_hover": "このデバイスはランダムなMACアドレスを使用しています", "Reports_Sent_Log": "送信レポートログ", - "SCAN_SUBNETS_description": "ほとんどのネットワーク内スキャナー(ARP-SCAN、NMAP、NSLOOKUP、DIG)は、特定のネットワークインターフェースとサブネットをスキャンすることに依存しています。この設定に関するヘルプについては、サブネットのドキュメントを確認してください。特にVLAN、サポートされているVLANの種類、ネットワークマスクとインターフェースの確認方法についてです。

ネットワーク内スキャナーの代替手段として、NetAlertXがネットワークにアクセスする必要のない他のデバイススキャナー/インポーター(UNIFI、dhcp.leases、PiHoleなど)を有効化できます。

注:スキャン時間自体は確認するIPアドレス数に依存するため、適切なネットワークマスクとインターフェースで慎重に設定してください。", + "SCAN_SUBNETS_description": "ほとんどのネットワーク内スキャナー(ARP-SCAN、NMAP、NSLOOKUP、DIG)は、特定のネットワークインターフェースとサブネットをスキャンすることに依存しています。この設定に関するヘルプについては、サブネットのドキュメント を確認してください。特にVLAN、サポートされているVLANの種類、ネットワークマスクとインターフェースの確認方法についてです。

ネットワーク内スキャナーの代替手段として、NetAlertX がネットワークにアクセスする必要のない他のデバイススキャナー/インポーター(UNIFI、dhcp.leases、PiHoleなど)を有効化できます。

注:スキャン時間自体は確認するIPアドレス数に依存するため、適切なネットワークマスクとインターフェースで慎重に設定してください。", "SCAN_SUBNETS_name": "スキャン対象ネットワーク", "SYSTEM_TITLE": "システム情報", "Setting_Override": "上書き値", @@ -641,7 +641,7 @@ "Settings_Metadata_Toggle": "指定された設定のメタデータを表示/非表示にする。", "Settings_Show_Description": "説明を表示", "Settings_device_Scanners_desync": "⚠デバイススキャナーのスケジュールが同期されていません。", - "Settings_device_Scanners_desync_popup": "デバイススキャナーのスケジュール(*_RUN_SCHD)は同一ではありません。これにより、デバイスのオンライン/オフライン通知に一貫性が生じます。意図的な場合を除き、有効化されているすべての🔍デバイススキャナーで同一のスケジュールを使用してください。", + "Settings_device_Scanners_desync_popup": "デバイススキャナーのスケジュール(*_RUN_SCHD)は同一ではありません。これにより、デバイスのオンライン/オフライン通知に一貫性が生じます。意図的な場合を除き、有効化されているすべての 🔍デバイススキャナー で同一のスケジュールを使用してください。", "Speedtest_Results": "スピードテスト結果", "Systeminfo_AvailableIps": "利用可能なIP", "Systeminfo_CPU": "CPU", @@ -718,22 +718,22 @@ "Systeminfo_System_Uptime": "稼働時間:", "Systeminfo_This_Client": "使用中のクライアント", "Systeminfo_USB_Devices": "USBデバイス", - "TICKER_MIGRATE_TO_NETALERTX": "⚠古いマウント位置が検出されました。新しい/data/configおよび/data/dbフォルダとnetalertxコンテナへの移行については、このガイドに従ってください。", - "TIMEZONE_description": "統計情報を正しく表示するためのタイムゾーン。タイムゾーンはこちらで確認してください。", + "TICKER_MIGRATE_TO_NETALERTX": "⚠古いマウント位置が検出されました。新しい /data/config および /data/db フォルダと netalertx コンテナへの移行については、このガイド に従ってください。", + "TIMEZONE_description": "統計情報を正しく表示するためのタイムゾーン。タイムゾーンは こちら で確認してください。", "TIMEZONE_name": "タイムゾーン", "UI_DEV_SECTIONS_description": "デバイスページで非表示にするUI要素を選択してください。", "UI_DEV_SECTIONS_name": "デバイスセクションを非表示", - "UI_ICONS_description": "事前定義済みアイコンの一覧。注意して操作してください。アイコン追加の推奨方法は、アイコンのドキュメントに記載されています。base64エンコードされたSVG HTMLまたはFont Awesome HTMLタグを追加できます。", + "UI_ICONS_description": "事前定義済みアイコンの一覧。注意して操作してください。アイコン追加の推奨方法は、アイコンのドキュメント に記載されています。base64エンコードされたSVG HTMLまたはFont Awesome HTMLタグを追加できます。", "UI_ICONS_name": "事前定義済みアイコン", - "UI_LANG_description": "お好みのUI言語を選択してください。翻訳のお手伝いや言語の提案は、Weblateのオンラインポータルで行えます。", + "UI_LANG_description": "お好みのUI言語を選択してください。翻訳のお手伝いや言語の提案は、Weblate のオンラインポータルで行えます。", "UI_LANG_name": "UI言語", - "UI_MY_DEVICES_description": "デフォルトのマイデバイスビューに表示すべきデバイスの状態。", + "UI_MY_DEVICES_description": "デフォルトの マイデバイス ビューに表示すべきデバイスの状態。", "UI_MY_DEVICES_name": "自分のデバイスビューに表示", - "UI_NOT_RANDOM_MAC_description": "ランダムデバイスとしてマークすべきでないMACプレフィックス。例えば52と入力すると、52:xx:xx:xx:xx:xxで始まるデバイスがランダムMACアドレスを持つデバイスとしてマークされるのを除外します。", + "UI_NOT_RANDOM_MAC_description": "ランダムデバイスとしてマークすべきでないMACプレフィックス。例えば 52 と入力すると、52:xx:xx:xx:xx:xx で始まるデバイスがランダムMACアドレスを持つデバイスとしてマークされるのを除外します。", "UI_NOT_RANDOM_MAC_name": "ランダムとしてマークしない", - "UI_PRESENCE_description": "デバイスページ内のデバイス状態チャートに表示するステータスを選択してください。", + "UI_PRESENCE_description": "デバイス ページ内の デバイス状態 チャートに表示するステータスを選択してください。", "UI_PRESENCE_name": "検出チャートの表示", - "UI_REFRESH_description": "UIが再読み込みされるまでの秒数を指定します。無効にするには0を設定してください。", + "UI_REFRESH_description": "UIが再読み込みされるまでの秒数を指定します。無効にするには 0 を設定してください。", "UI_REFRESH_name": "UI自動更新", "VERSION_description": "バージョンまたはタイムスタンプヘルパー値で、アプリがアップグレードされたかどうかを確認します。", "VERSION_name": "バージョンまたはタイムスタンプ", @@ -767,13 +767,13 @@ "add_option_event_tooltip": "値の追加", "copy_icons_event_tooltip": "同じ種別の全デバイスにアイコンを上書き", "devices_old": "リフレッシュ中…", - "general_event_description": "トリガーされたイベントは、バックグラウンド処理が完了するまで時間がかかる場合があります。以下の実行キューが空になると処理は終了します(問題が発生した場合はエラーログを確認してください)。

実行キュー:", + "general_event_description": "トリガーされたイベントは、バックグラウンド処理が完了するまで時間がかかる場合があります。以下の実行キューが空になると処理は終了します(問題が発生した場合は エラーログ を確認してください)。

実行キュー:", "general_event_title": "アドホックイベントの実行", "go_to_device_event_tooltip": "デバイスに移動", "go_to_node_event_tooltip": "指定されたノードのネットワークページに移動する", "new_version_available": "新しいバージョンが利用可能です。", - "report_guid": "通知GUID:", - "report_guid_missing": "リンクされた通知が見つかりません。送信された通知が利用可能になるまで、わずかな遅延が生じます。数秒後にページとキャッシュを更新してください。また、DBCLNP_NOTIFI_HIST設定で指定されているメンテナンス中に、選択した通知が削除された可能性もあります。

代わりに最新の通知が表示されます。欠落している通知のGUIDは以下の通りです:", + "report_guid": "通知guid:", + "report_guid_missing": "リンクされた通知が見つかりません。送信された通知が利用可能になるまで、わずかな遅延が生じます。数秒後にページとキャッシュを更新してください。また、DBCLNP_NOTIFI_HIST 設定で指定されているメンテナンス中に、選択した通知が削除された可能性もあります。

代わりに最新の通知が表示されます。欠落している通知のGUIDは以下の通りです:", "report_select_format": "フォーマット選択:", "report_time": "通知時刻:", "run_event_tooltip": "設定を有効にし、実行する前にまず変更を保存してください。", @@ -782,7 +782,7 @@ "settings_core_label": "Core", "settings_device_scanners": "デバイススキャナーは、CurrentScanデータベーステーブルに書き込みを行うデバイスを発見するために使用されます。", "settings_device_scanners_icon": "fa-solid fa-magnifying-glass-plus", - "settings_device_scanners_info": "LOADED_PLUGINS設定でより多くのデバイススキャナーを読み込みます", + "settings_device_scanners_info": "LOADED_PLUGINS 設定でより多くのデバイススキャナーを読み込みます", "settings_device_scanners_label": "デバイススキャナー", "settings_enabled": "有効な設定", "settings_enabled_icon": "fa-solid fa-toggle-on", @@ -797,10 +797,10 @@ "settings_other_scanners_label": "その他のスキャナー", "settings_publishers": "有効化された通知ゲートウェイ - 設定に応じて通知を送信する発行元。", "settings_publishers_icon": "fa-solid fa-paper-plane", - "settings_publishers_info": "LOADED_PLUGINS設定でさらに多くのパブリッシャーを読み込みます", + "settings_publishers_info": "LOADED_PLUGINS 設定でさらに多くのパブリッシャーを読み込みます", "settings_publishers_label": "パブリッシャー", - "settings_readonly": "app.confの読み取りまたは書き込みができません。コンテナを再起動し、ファイルの権限に関するドキュメントを参照してください", - "settings_saved": "
設定が保存されました。
再読込中…

", + "settings_readonly": "app.conf の読み取りまたは書き込みができません。コンテナを再起動し、ファイルの権限に関するドキュメント を参照してください", + "settings_saved": "
設定が保存されました。
再読込中…

", "settings_system_icon": "fa-solid fa-gear", "settings_system_label": "システム", "settings_update_item_warning": "以下の値を更新してください。以前のフォーマットに従うよう注意してください。検証は行われません。", From 4a81a4594c4e6f7c6c65abd736eb3f1083190f77 Mon Sep 17 00:00:00 2001 From: Safeguard Date: Thu, 19 Mar 2026 18:35:13 +0100 Subject: [PATCH 04/13] Translated using Weblate (Russian) Currently translated at 100.0% (806 of 806 strings) Translation: NetAlertX/core Translate-URL: https://hosted.weblate.org/projects/pialert/core/ru/ --- front/php/templates/language/ru_ru.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/php/templates/language/ru_ru.json b/front/php/templates/language/ru_ru.json index 22e67343..502f2a29 100644 --- a/front/php/templates/language/ru_ru.json +++ b/front/php/templates/language/ru_ru.json @@ -208,7 +208,7 @@ "Device_NoData_Help": "Если устройства не отображаются после сканирования, проверьте настройку SCAN_SUBNETS и документацию.", "Device_NoData_Scanning": "Ожидание первого сканирования — это может занять несколько минут после первоначальной настройки.", "Device_NoData_Title": "Устройства пока не найдены", - "Device_NoMatch_Title": "", + "Device_NoMatch_Title": "Нет устройств, соответствующих текущему фильтру", "Device_Save_Failed": "Не удалось сохранить устройство", "Device_Save_Unauthorized": "Не авторизован - недействительный токен API", "Device_Saved_Success": "Устройство успешно сохранено", From 2bcb77f29348a79cbb5964f3d742a30e36245282 Mon Sep 17 00:00:00 2001 From: Sylvain Pichon Date: Sun, 22 Mar 2026 07:38:19 +0100 Subject: [PATCH 05/13] Translated using Weblate (French) Currently translated at 99.7% (804 of 806 strings) Translation: NetAlertX/core Translate-URL: https://hosted.weblate.org/projects/pialert/core/fr/ --- front/php/templates/language/fr_fr.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/front/php/templates/language/fr_fr.json b/front/php/templates/language/fr_fr.json index 6c9cbd39..601446c0 100644 --- a/front/php/templates/language/fr_fr.json +++ b/front/php/templates/language/fr_fr.json @@ -208,7 +208,7 @@ "Device_NoData_Help": "Si les appareils n'apparaissent pas après le scan, vérifiez vos paramètres SCAN_SUBNETS et la documentation.", "Device_NoData_Scanning": "En attente du premier scan - cela peut prendre quelques minutes après le premier paramétrage.", "Device_NoData_Title": "Aucun appareil trouvé pour le moment", - "Device_NoMatch_Title": "", + "Device_NoMatch_Title": "Aucun appareil ne correspond au filtre actuel", "Device_Save_Failed": "Erreur à l'enregistrement de l'appareil", "Device_Save_Unauthorized": "Non autorisé - Jeton d'API invalide", "Device_Saved_Success": "Appareil enregistré avec succès", @@ -232,7 +232,7 @@ "Device_TableHead_FQDN": "Nom de domaine FQDN", "Device_TableHead_Favorite": "Favori", "Device_TableHead_FirstSession": "Première session", - "Device_TableHead_Flapping": "", + "Device_TableHead_Flapping": "Flapping", "Device_TableHead_GUID": "GUID", "Device_TableHead_Group": "Groupe", "Device_TableHead_IPv4": "IPv4", @@ -337,7 +337,7 @@ "Gen_Down": "En panne", "Gen_Error": "Erreur", "Gen_Filter": "Filtrer", - "Gen_Flapping": "", + "Gen_Flapping": "Flapping", "Gen_Generate": "Générer", "Gen_InvalidMac": "Adresse MAC invalide.", "Gen_Invalid_Value": "Une valeur invalide a été renseignée", @@ -591,8 +591,8 @@ "PIALERT_WEB_PROTECTION_name": "Activer la connexion par login", "PLUGINS_KEEP_HIST_description": "Combien d'entrées de résultats de scan doivent être conservés dans l'historique des plugins (par plugin, pas par appareil).", "PLUGINS_KEEP_HIST_name": "Historique des plugins", - "PRAGMA_JOURNAL_SIZE_LIMIT_description": "", - "PRAGMA_JOURNAL_SIZE_LIMIT_name": "", + "PRAGMA_JOURNAL_SIZE_LIMIT_description": "Taille maximale du SQLite WAL (Write-Ahead Log) en Mo avant le déclenchement automatique des points de contrôle. Des valeurs basses (10-20 Mo) réduisent l'utilisation du disque/stockage mais augmentent l'utilisation du CPU durant ces scans. Des valeurs élevées (50-100 Mo) réduisent les pics CPU durant les opérations mais peuvent utiliser plus de RAM et d'espace disque. Par défaut, 50 Mo est un compromis entre ces 2. Utilise pour les systèmes à ressources limitées comme des NAS avec des cartes SD. Redémarrer le serveur pour que le changement soit effective après avoir sauvegardé ce paramètre.", + "PRAGMA_JOURNAL_SIZE_LIMIT_name": "Limite de taille du WAL (Mo)", "Plugins_DeleteAll": "Tout supprimer (ne prend pas en compte les filtres)", "Plugins_Filters_Mac": "Filtrer par MAC", "Plugins_History": "Historique des événements", From 84eb4d2c92a89e9edab230efd6d007e2f463fbae Mon Sep 17 00:00:00 2001 From: jokob-sk Date: Wed, 25 Mar 2026 06:43:06 +1100 Subject: [PATCH 06/13] DOCS: pin mkdocs version Signed-off-by: jokob-sk --- .github/workflows/mkdocs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/mkdocs.yml b/.github/workflows/mkdocs.yml index 64bc73d8..c67a00bd 100755 --- a/.github/workflows/mkdocs.yml +++ b/.github/workflows/mkdocs.yml @@ -18,14 +18,14 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: '3.9' + python-version: '3.11' - name: Install MkDocs run: | pip install \ mkdocs==1.6.0 \ mkdocs-material==9.5.21 \ - mkdocs-github-admonitions-plugin==0.0.4 + mkdocs-github-admonitions-plugin==0.1.1 - name: Build MkDocs run: mkdocs build From 21f6a538304b0ba5c1f7a25b4737257e483bfba5 Mon Sep 17 00:00:00 2001 From: Alvise Bruniera Date: Thu, 26 Mar 2026 16:03:45 +0100 Subject: [PATCH 07/13] freebox plugin version 2 --- front/plugins/freebox/README.md | 16 +-------- front/plugins/freebox/freebox.py | 34 ++++++++++--------- .../aiofreebox/freebox_certificate.pem | 15 -------- requirements.txt | 2 +- 4 files changed, 20 insertions(+), 47 deletions(-) delete mode 100755 install/production-filesystem/opt/venv/lib/python3.12/site-packages/aiofreebox/freebox_certificate.pem diff --git a/front/plugins/freebox/README.md b/front/plugins/freebox/README.md index 527ad047..e6e84722 100755 --- a/front/plugins/freebox/README.md +++ b/front/plugins/freebox/README.md @@ -28,31 +28,17 @@ Limitations: - The Freebox must be your gateway - The device must be in the same lan as the Freebox -### Offline setup (recommended) - -Use this configuration if you wish to connect to your Freebox even when you are offline, or the Freebox is not your gateway. - -Find the local IP address of your Freebox, if it is your gateway, you can find the address on your computer/smartphone network configuration (usually it's `192.168.1.1`). Go in the plugin settings and set the IP as address and `80` as the port (do *not* use `443` as the port). This configuration works regardless of your internet connection and poses little limitations. - -Limitations: -- *If* there is no internet connection, the plugin will fallback to HTTP (not HTTPS) - -For more detail: the plugin will connect to the specified address and port to fetch information about the Freebox, then it will either connect in HTTPS through the Freebox's unique domain name, or connect over HTTP if there is no internet connection. The freebox does offer an HTTPS port on the local network, but the certificate will be invalid for the local IP, and the connection will be aborted. - ### Remote setup Use this configuration if you wish to connect to your Freebox through the internet. You still need to pair from the local network. -If the Freebox is not your gateway, configure a NAT and follow the [offline setup](#offline-setup-recommended). - If the Freebox is your gateway you need to find its HTTPS (or HTTP if you prefer) public port. This can be found either in the Freeboxe's web interface and by navigating to `settings>access management`, or (just for the HTTPS port) by visiting http://mafreebox.freebox.fr:80/api_version from the local network (you can use the local ip as well). This is the port you need to access your Freebox through the internet As address, you can either use the public IP of the Freebox, or the unique domain name you found on http://mafreebox.freebox.fr:80/api_version listed as `api_domain`. - ## Other info -- Version: 1.0 +- Version: 2.0 - Author: [KayJay7](https://github.com/KayJay7), [Lucide](https://github.com/Lucide) - Maintainers: [mathoudebine](https://github.com/mathoudebine) - Release Date: 2-Dec-2024 \ No newline at end of file diff --git a/front/plugins/freebox/freebox.py b/front/plugins/freebox/freebox.py index eb81eb80..a31fe10c 100755 --- a/front/plugins/freebox/freebox.py +++ b/front/plugins/freebox/freebox.py @@ -8,10 +8,11 @@ from datetime import datetime from pathlib import Path from typing import cast import socket -import aiofreepybox -from aiofreepybox import Freepybox -from aiofreepybox.api.lan import Lan -from aiofreepybox.exceptions import NotOpenError, AuthorizationError +import freebox_api +from freebox_api import Freepybox +from freebox_api.api.lan import Lan +from freebox_api.api.system import System +from freebox_api.exceptions import NotOpenError, AuthorizationError # Define the installation path and extend the system path for plugin imports INSTALL_PATH = os.getenv('NETALERTX_APP', '/app') @@ -83,8 +84,7 @@ def map_device_type(type: str): async def get_device_data(api_version: int, api_address: str, api_port: int): # ensure existence of db path - config_base = Path(os.getenv("NETALERTX_CONFIG", "/data/config")) - data_dir = config_base / "freeboxdb" + data_dir = Path(os.getenv("NETALERTX_CONFIG", "/data/config")) / "freeboxdb" data_dir.mkdir(parents=True, exist_ok=True) # Instantiate Freepybox class using default application descriptor @@ -93,25 +93,27 @@ async def get_device_data(api_version: int, api_address: str, api_port: int): app_desc={ "app_id": "netalertx", "app_name": "NetAlertX", - "app_version": aiofreepybox.__version__, + "app_version": freebox_api.__version__, "device_name": socket.gethostname(), }, api_version="v" + str(api_version), - data_dir=data_dir, + token_file=data_dir / "token", ) # Connect to the freebox # Be ready to authorize the application on the Freebox if you run this # for the first time try: - await fbx.open(host=api_address, port=api_port) + await fbx.open(host=api_address, port=str(api_port)) except NotOpenError as e: mylog("verbose", [f"[{pluginName}] Error connecting to freebox: {e}"]) + return (),() except AuthorizationError as e: mylog("verbose", [f"[{pluginName}] Auth error: {str(e)}"]) + return (),() # get also info of the freebox itself - config = await fbx.system.get_config() + config = await cast(System, fbx.system).get_config() freebox = await cast(Lan, fbx.lan).get_config() hosts = await cast(Lan, fbx.lan).get_hosts_list() assert config is not None @@ -146,14 +148,14 @@ def main(): mylog("verbose", [hosts]) plugin_objects.add_object( - primaryId=freebox["mac"], - secondaryId=freebox["ip"], - watched1=freebox["name"], - watched2=freebox["operator"], + primaryId=freebox["mac"], # type: ignore + secondaryId=freebox["ip"], # type: ignore + watched1=freebox["name"], # type: ignore + watched2=freebox["operator"], # type: ignore watched3="Gateway", watched4=timeNowUTC(), extra="", - foreignKey=freebox["mac"], + foreignKey=freebox["mac"], # type: ignore ) for host in hosts: # Check if 'l3connectivities' exists and is a list @@ -175,7 +177,7 @@ def main(): # Optional: Log or handle hosts without 'l3connectivities' mylog("verbose", [f"[{pluginName}] Host missing 'l3connectivities': {host}"]) - # commit result + # Commit result plugin_objects.write_result_file() return 0 diff --git a/install/production-filesystem/opt/venv/lib/python3.12/site-packages/aiofreebox/freebox_certificate.pem b/install/production-filesystem/opt/venv/lib/python3.12/site-packages/aiofreebox/freebox_certificate.pem deleted file mode 100755 index 1a329f07..00000000 --- a/install/production-filesystem/opt/venv/lib/python3.12/site-packages/aiofreebox/freebox_certificate.pem +++ /dev/null @@ -1,15 +0,0 @@ - ------BEGIN CERTIFICATE----- -MIICOjCCAcCgAwIBAgIUI0Tu7zsrBJACQIZgLMJobtbdNn4wCgYIKoZIzj0EAwIw -TDELMAkGA1UEBhMCSVQxDjAMBgNVBAgMBUl0YWx5MQ4wDAYDVQQKDAVJbGlhZDEd -MBsGA1UEAwwUSWxpYWRib3ggRUNDIFJvb3QgQ0EwHhcNMjAxMTI3MDkzODEzWhcN -NDAxMTIyMDkzODEzWjBMMQswCQYDVQQGEwJJVDEOMAwGA1UECAwFSXRhbHkxDjAM -BgNVBAoMBUlsaWFkMR0wGwYDVQQDDBRJbGlhZGJveCBFQ0MgUm9vdCBDQTB2MBAG -ByqGSM49AgEGBSuBBAAiA2IABMryJyb2loHNAioY8IztN5MI3UgbVHVP/vZwcnre -ZvJOyDvE4HJgIti5qmfswlnMzpNbwf/MkT+7HAU8jJoTorRm1wtAnQ9cWD3Ebv79 -RPwtjjy3Bza3SgdVxmd6fWPUKaNjMGEwHQYDVR0OBBYEFDUij/4lpoJ+kOXRyrcM -jf2RPzOqMB8GA1UdIwQYMBaAFDUij/4lpoJ+kOXRyrcMjf2RPzOqMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQC6eUV1 -pFh4UpJOTc1JToztN4ttnQR6rIzxMZ6mNCe+nhjkohWp24pr7BpUYSbEizYCMAQ6 -LCiBKV2j7QQGy7N1aBmdur17ZepYzR1YV0eI+Kd978aZggsmhjXENQYVTmm/XA== ------END CERTIFICATE----- diff --git a/requirements.txt b/requirements.txt index 9d03b87b..f713720d 100755 --- a/requirements.txt +++ b/requirements.txt @@ -30,7 +30,7 @@ six urllib3 httplib2 gunicorn -git+https://github.com/foreign-sub/aiofreepybox.git +freebox-api mcp psutil pydantic>=2.0,<3.0 From e30bdc526b450937a358ec2da55ce67a07f8d83f Mon Sep 17 00:00:00 2001 From: Alvise Bruniera Date: Thu, 26 Mar 2026 17:14:56 +0100 Subject: [PATCH 08/13] updated freebox requirements --- front/plugins/freebox/freebox.py | 25 +++++++++++++------------ install/proxmox/requirements.txt | 2 +- install/ubuntu24/requirements.txt | 2 +- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/front/plugins/freebox/freebox.py b/front/plugins/freebox/freebox.py index a31fe10c..02bdc7f6 100755 --- a/front/plugins/freebox/freebox.py +++ b/front/plugins/freebox/freebox.py @@ -107,10 +107,10 @@ async def get_device_data(api_version: int, api_address: str, api_port: int): await fbx.open(host=api_address, port=str(api_port)) except NotOpenError as e: mylog("verbose", [f"[{pluginName}] Error connecting to freebox: {e}"]) - return (),() + return None, [] except AuthorizationError as e: mylog("verbose", [f"[{pluginName}] Auth error: {str(e)}"]) - return (),() + return None, [] # get also info of the freebox itself config = await cast(System, fbx.system).get_config() @@ -147,16 +147,17 @@ def main(): mylog("verbose", [freebox]) mylog("verbose", [hosts]) - plugin_objects.add_object( - primaryId=freebox["mac"], # type: ignore - secondaryId=freebox["ip"], # type: ignore - watched1=freebox["name"], # type: ignore - watched2=freebox["operator"], # type: ignore - watched3="Gateway", - watched4=timeNowUTC(), - extra="", - foreignKey=freebox["mac"], # type: ignore - ) + if freebox: + plugin_objects.add_object( + primaryId=freebox["mac"], + secondaryId=freebox["ip"], + watched1=freebox["name"], + watched2=freebox["operator"], + watched3="Gateway", + watched4=timeNowUTC(), + extra="", + foreignKey=freebox["mac"], + ) for host in hosts: # Check if 'l3connectivities' exists and is a list if "l3connectivities" in host and isinstance(host["l3connectivities"], list): diff --git a/install/proxmox/requirements.txt b/install/proxmox/requirements.txt index 6948ea66..2c858b95 100755 --- a/install/proxmox/requirements.txt +++ b/install/proxmox/requirements.txt @@ -24,4 +24,4 @@ librouteros yattag zeroconf psutil -git+https://github.com/foreign-sub/aiofreepybox.git +freebox-api diff --git a/install/ubuntu24/requirements.txt b/install/ubuntu24/requirements.txt index 6948ea66..2c858b95 100755 --- a/install/ubuntu24/requirements.txt +++ b/install/ubuntu24/requirements.txt @@ -24,4 +24,4 @@ librouteros yattag zeroconf psutil -git+https://github.com/foreign-sub/aiofreepybox.git +freebox-api From 8b80a6d59c9b874c31e7b0820422e826ef8427a1 Mon Sep 17 00:00:00 2001 From: navnitan-7 Date: Tue, 31 Mar 2026 02:08:15 +0530 Subject: [PATCH 09/13] Security: jQuery ajaxConvert cross-domain script mitigation (CVE-2015-9251) Backport upstream jQuery gh-2432 logic in bundled DataTables/jQuery: skip inferred script conversion for cross-domain ajax responses. Refs: https://github.com/jquery/jquery/commit/2546bb35b89413da5198d54a4539e4ed0aaf6e49 Made-with: Cursor --- front/lib/datatables/datatables.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/front/lib/datatables/datatables.js b/front/lib/datatables/datatables.js index 6336121b..2027407d 100755 --- a/front/lib/datatables/datatables.js +++ b/front/lib/datatables/datatables.js @@ -9059,6 +9059,11 @@ function ajaxConvert( s, response, jqXHR, isSuccess ) { // Convert response if prev dataType is non-auto and differs from current } else if ( prev !== "*" && prev !== current ) { + // Mitigate possible XSS vulnerability (gh-2432) + if ( s.crossDomain && current === "script" ) { + continue; + } + // Seek a direct converter conv = converters[ prev + " " + current ] || converters[ "* " + current ]; From cfa75178a46ee6935e9a6e5e23af51896c0da775 Mon Sep 17 00:00:00 2001 From: jokob-sk Date: Fri, 3 Apr 2026 12:38:38 +1100 Subject: [PATCH 10/13] en_us has to be first --- .../php/templates/language/language_definitions/languages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/php/templates/language/language_definitions/languages.json b/front/php/templates/language/language_definitions/languages.json index b106a0e4..eeec2772 100644 --- a/front/php/templates/language/language_definitions/languages.json +++ b/front/php/templates/language/language_definitions/languages.json @@ -1,11 +1,11 @@ { "default": "en_us", "languages": [ + { "code": "en_us", "display": "English (en_us)" }, { "code": "ar_ar", "display": "Arabic (ar_ar)" }, { "code": "ca_ca", "display": "Catalan (ca_ca)" }, { "code": "cs_cz", "display": "Czech (cs_cz)" }, { "code": "de_de", "display": "German (de_de)" }, - { "code": "en_us", "display": "English (en_us)" }, { "code": "es_es", "display": "Spanish (es_es)" }, { "code": "fa_fa", "display": "Farsi (fa_fa)" }, { "code": "id_id", "display": "Indonesian (id_id)" }, From 4c117db4635fcac91ecf634db4464617a9a22b19 Mon Sep 17 00:00:00 2001 From: sebingel Date: Fri, 3 Apr 2026 18:28:48 +0000 Subject: [PATCH 11/13] Fix elementOptions: rename typo 'ordeable' to 'orderable' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The key 'ordeable' in elementOptions was a long-standing typo for the correct English word 'orderable'. Since the JS check in settings_utils.js used the same misspelled key, the feature appeared to work — but it was relying on the consistent propagation of a typo across the entire codebase. Two pre-existing entries in front/plugins/ui_settings/config.json already used the correct spelling 'orderable', but these had no effect because the JavaScript check (option.ordeable === 'true') never matched them. As a result, orderable behavior was silently disabled for those two settings. Changes: - front/js/settings_utils.js: renamed option.ordeable → option.orderable and isOrdeable → isOrderable (6 occurrences, lines 792/823/824/880/1079/ 1192/1228). The JS key check is the authoritative definition of the elementOptions property name, so this must change atomically with all config files. - server/initialise.py:245: renamed "ordeable" → "orderable" in the hardcoded JSON string for LOADED_PLUGINS setting. This string is the source-of-truth for that setting's elementOptions and is not auto- generated from the plugin config files. - front/plugins/*/config.json (33 files, 90 occurrences): renamed all "ordeable": "true" entries to "orderable": "true" via sed. All plugins used the typo consistently; they must be updated in the same commit to avoid a broken intermediate state. The two formerly broken 'orderable' entries in ui_settings/config.json are now matched by the corrected JS check and work as intended. Fixes netalertx/NetAlertX#1584 Co-Authored-By: Claude Opus 4.6 --- front/js/settings_utils.js | 14 +++++++------- front/plugins/__template/config.json | 4 ++-- front/plugins/adguard_import/config.json | 4 ++-- front/plugins/arp_scan/config.json | 8 ++++---- front/plugins/asuswrt_import/config.json | 4 ++-- front/plugins/avahi_scan/config.json | 4 ++-- front/plugins/ddns_update/config.json | 4 ++-- front/plugins/dhcp_leases/config.json | 8 ++++---- front/plugins/dhcp_servers/config.json | 4 ++-- front/plugins/dig_scan/config.json | 4 ++-- front/plugins/freebox/config.json | 4 ++-- front/plugins/icmp_scan/config.json | 4 ++-- front/plugins/internet_ip/config.json | 8 ++++---- front/plugins/internet_speedtest/config.json | 4 ++-- front/plugins/ipneigh/config.json | 4 ++-- front/plugins/luci_import/config.json | 4 ++-- front/plugins/mikrotik_scan/config.json | 4 ++-- front/plugins/nbtscan_scan/config.json | 4 ++-- front/plugins/newdev_template/config.json | 6 +++--- front/plugins/nmap_dev_scan/config.json | 4 ++-- front/plugins/nmap_scan/config.json | 4 ++-- front/plugins/notification_processing/config.json | 2 +- front/plugins/nslookup_scan/config.json | 4 ++-- front/plugins/omada_sdn_imp/config.json | 8 ++++---- front/plugins/omada_sdn_openapi/config.json | 8 ++++---- front/plugins/pihole_api_scan/config.json | 4 ++-- front/plugins/pihole_scan/config.json | 8 ++++---- front/plugins/snmp_discovery/config.json | 8 ++++---- front/plugins/sync/config.json | 6 +++--- front/plugins/ui_settings/config.json | 14 +++++++------- front/plugins/unifi_api_import/config.json | 4 ++-- front/plugins/unifi_import/config.json | 8 ++++---- front/plugins/vendor_update/config.json | 8 ++++---- front/plugins/website_monitor/config.json | 4 ++-- server/initialise.py | 2 +- 35 files changed, 98 insertions(+), 98 deletions(-) diff --git a/front/js/settings_utils.js b/front/js/settings_utils.js index dfafde44..2c64e92a 100755 --- a/front/js/settings_utils.js +++ b/front/js/settings_utils.js @@ -789,7 +789,7 @@ const handleElementOptions = (setKey, elementOptions, transformers, val) => { let inputType = "text"; let readOnly = ""; let isMultiSelect = false; - let isOrdeable = false; + let isOrderable = false; let cssClasses = ""; let placeholder = ""; let suffix = ""; @@ -820,8 +820,8 @@ const handleElementOptions = (setKey, elementOptions, transformers, val) => { if (option.multiple === "true") { isMultiSelect = true; } - if (option.ordeable === "true") { - isOrdeable = true; + if (option.orderable === "true") { + isOrderable = true; } if (option.editable === "true") { editable = true; @@ -877,7 +877,7 @@ const handleElementOptions = (setKey, elementOptions, transformers, val) => { inputType, readOnly, isMultiSelect, - isOrdeable, + isOrderable, cssClasses, placeholder, suffix, @@ -1076,7 +1076,7 @@ function collectSetting(prefix, setCodeName, setType, settingsArray) { }, array: () => { let temps = []; - if (opts.isOrdeable) { + if (opts.isOrderable) { temps = $(`#${setCodeName}`).val(); } else { const sel = $(`#${setCodeName}`).attr("my-editable") === "true" ? "" : ":selected"; @@ -1189,7 +1189,7 @@ function generateFormHtml(settingsData, set, overrideValue, overrideOptions, ori inputType, readOnly, isMultiSelect, - isOrdeable, + isOrderable, cssClasses, placeholder, suffix, @@ -1225,7 +1225,7 @@ function generateFormHtml(settingsData, set, overrideValue, overrideOptions, ori switch (elementType) { case 'select': const multi = isMultiSelect ? "multiple" : ""; - const addCss = isOrdeable ? "select2 select2-hidden-accessible" : ""; + const addCss = isOrderable ? "select2 select2-hidden-accessible" : ""; inputHtml += `