Kaynağa Gözat

chore: update translations

0xJacky 1 hafta önce
ebeveyn
işleme
1130047461

+ 11 - 8
api/cluster/websocket.go

@@ -28,7 +28,6 @@ type Client struct {
 	send   chan WebSocketMessage
 	ctx    context.Context
 	cancel context.CancelFunc
-	mutex  sync.RWMutex
 }
 
 // Hub maintains the set of active clients and broadcasts messages to them
@@ -281,13 +280,17 @@ func (c *Client) readPump() {
 		return nil
 	})
 
-	for {
-		_, _, err := c.conn.ReadMessage()
-		if err != nil {
-			if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
-				logger.Error("Websocket error:", err)
+	go func() {
+		for {
+			_, _, err := c.conn.ReadMessage()
+			if err != nil {
+				if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
+					logger.Error("Websocket error:", err)
+				}
+				break
 			}
-			break
 		}
-	}
+	}()
+
+	<-c.ctx.Done()
 }

+ 190 - 0
app/src/components/Notification/notifications.ts

@@ -3,6 +3,196 @@
 /* eslint-disable ts/no-explicit-any */
 
 const notifications: Record<string, { title: () => string, content: (args: any) => string }> = {
+
+  // general module notifications
+  'Reload Remote Nginx Error': {
+    title: () => $gettext('Reload Remote Nginx Error'),
+    content: (args: any) => $gettext('Reload Nginx on %{node} failed, response: %{resp}', args, true),
+  },
+  'Reload Remote Nginx Success': {
+    title: () => $gettext('Reload Remote Nginx Success'),
+    content: (args: any) => $gettext('Reload Nginx on %{node} successfully', args, true),
+  },
+  'Restart Remote Nginx Error': {
+    title: () => $gettext('Restart Remote Nginx Error'),
+    content: (args: any) => $gettext('Restart Nginx on %{node} failed, response: %{resp}', args, true),
+  },
+  'Restart Remote Nginx Success': {
+    title: () => $gettext('Restart Remote Nginx Success'),
+    content: (args: any) => $gettext('Restart Nginx on %{node} successfully', args, true),
+  },
+  'Auto Backup Configuration Error': {
+    title: () => $gettext('Auto Backup Configuration Error'),
+    content: (args: any) => $gettext('Storage configuration validation failed for backup task %{backup_name}, error: %{error}', args, true),
+  },
+  'Auto Backup Failed': {
+    title: () => $gettext('Auto Backup Failed'),
+    content: (args: any) => $gettext('Backup task %{backup_name} failed to execute, error: %{error}', args, true),
+  },
+  'Auto Backup Storage Failed': {
+    title: () => $gettext('Auto Backup Storage Failed'),
+    content: (args: any) => $gettext('Backup task %{backup_name} failed during storage upload, error: %{error}', args, true),
+  },
+  'Auto Backup Completed': {
+    title: () => $gettext('Auto Backup Completed'),
+    content: (args: any) => $gettext('Backup task %{backup_name} completed successfully, file: %{file_path}', args, true),
+  },
+  'Certificate Expired': {
+    title: () => $gettext('Certificate Expired'),
+    content: (args: any) => $gettext('Certificate %{name} has expired', args, true),
+  },
+  'Certificate Expiration Notice': {
+    title: () => $gettext('Certificate Expiration Notice'),
+    content: (args: any) => $gettext('Certificate %{name} will expire in %{days} days', args, true),
+  },
+  'Certificate Expiring Soon': {
+    title: () => $gettext('Certificate Expiring Soon'),
+    content: (args: any) => $gettext('Certificate %{name} will expire in %{days} days', args, true),
+  },
+  'Certificate Expiring Soon_1': {
+    title: () => $gettext('Certificate Expiring Soon'),
+    content: (args: any) => $gettext('Certificate %{name} will expire in %{days} days', args, true),
+  },
+  'Certificate Expiring Soon_2': {
+    title: () => $gettext('Certificate Expiring Soon'),
+    content: (args: any) => $gettext('Certificate %{name} will expire in 1 day', args, true),
+  },
+  'Sync Certificate Error': {
+    title: () => $gettext('Sync Certificate Error'),
+    content: (args: any) => $gettext('Sync Certificate %{cert_name} to %{env_name} failed', args, true),
+  },
+  'Sync Certificate Success': {
+    title: () => $gettext('Sync Certificate Success'),
+    content: (args: any) => $gettext('Sync Certificate %{cert_name} to %{env_name} successfully', args, true),
+  },
+  'Sync Config Error': {
+    title: () => $gettext('Sync Config Error'),
+    content: (args: any) => $gettext('Sync config %{config_name} to %{env_name} failed', args, true),
+  },
+  'Sync Config Success': {
+    title: () => $gettext('Sync Config Success'),
+    content: (args: any) => $gettext('Sync config %{config_name} to %{env_name} successfully', args, true),
+  },
+  'Rename Remote Config Error': {
+    title: () => $gettext('Rename Remote Config Error'),
+    content: (args: any) => $gettext('Rename %{orig_path} to %{new_path} on %{env_name} failed', args, true),
+  },
+  'Rename Remote Config Success': {
+    title: () => $gettext('Rename Remote Config Success'),
+    content: (args: any) => $gettext('Rename %{orig_path} to %{new_path} on %{env_name} successfully', args, true),
+  },
+  'Delete Remote Config Error': {
+    title: () => $gettext('Delete Remote Config Error'),
+    content: (args: any) => $gettext('Delete %{path} on %{env_name} failed', args, true),
+  },
+  'Delete Remote Config Success': {
+    title: () => $gettext('Delete Remote Config Success'),
+    content: (args: any) => $gettext('Delete %{path} on %{env_name} successfully', args, true),
+  },
+  'External Notification Test': {
+    title: () => $gettext('External Notification Test'),
+    content: (args: any) => $gettext('This is a test message sent at %{timestamp} from Nginx UI.', args, true),
+  },
+  'Delete Remote Site Error': {
+    title: () => $gettext('Delete Remote Site Error'),
+    content: (args: any) => $gettext('Delete site %{name} from %{node} failed', args, true),
+  },
+  'Delete Remote Site Success': {
+    title: () => $gettext('Delete Remote Site Success'),
+    content: (args: any) => $gettext('Delete site %{name} from %{node} successfully', args, true),
+  },
+  'Disable Remote Site Error': {
+    title: () => $gettext('Disable Remote Site Error'),
+    content: (args: any) => $gettext('Disable site %{name} from %{node} failed', args, true),
+  },
+  'Disable Remote Site Success': {
+    title: () => $gettext('Disable Remote Site Success'),
+    content: (args: any) => $gettext('Disable site %{name} from %{node} successfully', args, true),
+  },
+  'Enable Remote Site Error': {
+    title: () => $gettext('Enable Remote Site Error'),
+    content: (args: any) => $gettext('Enable site %{name} on %{node} failed', args, true),
+  },
+  'Enable Remote Site Success': {
+    title: () => $gettext('Enable Remote Site Success'),
+    content: (args: any) => $gettext('Enable site %{name} on %{node} successfully', args, true),
+  },
+  'Enable Remote Site Maintenance Error': {
+    title: () => $gettext('Enable Remote Site Maintenance Error'),
+    content: (args: any) => $gettext('Enable site %{name} maintenance on %{node} failed', args, true),
+  },
+  'Enable Remote Site Maintenance Success': {
+    title: () => $gettext('Enable Remote Site Maintenance Success'),
+    content: (args: any) => $gettext('Enable site %{name} maintenance on %{node} successfully', args, true),
+  },
+  'Disable Remote Site Maintenance Error': {
+    title: () => $gettext('Disable Remote Site Maintenance Error'),
+    content: (args: any) => $gettext('Disable site %{name} maintenance on %{node} failed', args, true),
+  },
+  'Disable Remote Site Maintenance Success': {
+    title: () => $gettext('Disable Remote Site Maintenance Success'),
+    content: (args: any) => $gettext('Disable site %{name} maintenance on %{node} successfully', args, true),
+  },
+  'Rename Remote Site Error': {
+    title: () => $gettext('Rename Remote Site Error'),
+    content: (args: any) => $gettext('Rename site %{name} to %{new_name} on %{node} failed', args, true),
+  },
+  'Rename Remote Site Success': {
+    title: () => $gettext('Rename Remote Site Success'),
+    content: (args: any) => $gettext('Rename site %{name} to %{new_name} on %{node} successfully', args, true),
+  },
+  'Save Remote Site Error': {
+    title: () => $gettext('Save Remote Site Error'),
+    content: (args: any) => $gettext('Save site %{name} to %{node} failed', args, true),
+  },
+  'Save Remote Site Success': {
+    title: () => $gettext('Save Remote Site Success'),
+    content: (args: any) => $gettext('Save site %{name} to %{node} successfully', args, true),
+  },
+  'Delete Remote Stream Error': {
+    title: () => $gettext('Delete Remote Stream Error'),
+    content: (args: any) => $gettext('Delete stream %{name} from %{node} failed', args, true),
+  },
+  'Delete Remote Stream Success': {
+    title: () => $gettext('Delete Remote Stream Success'),
+    content: (args: any) => $gettext('Delete stream %{name} from %{node} successfully', args, true),
+  },
+  'Disable Remote Stream Error': {
+    title: () => $gettext('Disable Remote Stream Error'),
+    content: (args: any) => $gettext('Disable stream %{name} from %{node} failed', args, true),
+  },
+  'Disable Remote Stream Success': {
+    title: () => $gettext('Disable Remote Stream Success'),
+    content: (args: any) => $gettext('Disable stream %{name} from %{node} successfully', args, true),
+  },
+  'Enable Remote Stream Error': {
+    title: () => $gettext('Enable Remote Stream Error'),
+    content: (args: any) => $gettext('Enable stream %{name} on %{node} failed', args, true),
+  },
+  'Enable Remote Stream Success': {
+    title: () => $gettext('Enable Remote Stream Success'),
+    content: (args: any) => $gettext('Enable stream %{name} on %{node} successfully', args, true),
+  },
+  'Rename Remote Stream Error': {
+    title: () => $gettext('Rename Remote Stream Error'),
+    content: (args: any) => $gettext('Rename stream %{name} to %{new_name} on %{node} failed', args, true),
+  },
+  'Rename Remote Stream Success': {
+    title: () => $gettext('Rename Remote Stream Success'),
+    content: (args: any) => $gettext('Rename stream %{name} to %{new_name} on %{node} successfully', args, true),
+  },
+  'Save Remote Stream Error': {
+    title: () => $gettext('Save Remote Stream Error'),
+    content: (args: any) => $gettext('Save stream %{name} to %{node} failed', args, true),
+  },
+  'Save Remote Stream Success': {
+    title: () => $gettext('Save Remote Stream Success'),
+    content: (args: any) => $gettext('Save stream %{name} to %{node} successfully', args, true),
+  },
+  'All Recovery Codes Have Been Used': {
+    title: () => $gettext('All Recovery Codes Have Been Used'),
+    content: (args: any) => $gettext('Please generate new recovery codes in the preferences immediately to prevent lockout.', args, true),
+  },
 }
 
 export default notifications

+ 0 - 1
app/src/components/SelfCheck/SelfCheck.vue

@@ -8,7 +8,6 @@ const { data, loading, fixing } = storeToRefs(store)
 
 onMounted(() => {
   store.check()
-  // selfCheck.timeoutCheck().catch(console.error)
 })
 </script>
 

+ 0 - 57
app/src/components/SelfCheck/tasks/frontend/sse.ts

@@ -1,57 +0,0 @@
-import type { FrontendTask } from '../types'
-import type { ReportStatusType } from '@/api/self_check'
-import { ReportStatus } from '@/api/self_check'
-import { useSSE } from '@/composables/useSSE'
-
-/**
- * SSE Task
- *
- * Checks if the application is able to connect to the backend through the Server-Sent Events protocol
- */
-const SSETask: FrontendTask = {
-  key: 'sse',
-  name: () => 'SSE',
-  description: () => $gettext('Support communication with the backend through the Server-Sent Events protocol. '
-    + 'If your Nginx UI is being used via an Nginx reverse proxy, '
-    + 'please refer to this link to write the corresponding configuration file: '
-    + 'https://nginxui.com/guide/nginx-proxy-example.html'),
-  check: async (): Promise<ReportStatusType> => {
-    try {
-      const connected = await new Promise<boolean>(resolve => {
-        const { connect, disconnect } = useSSE()
-
-        // Use the connect method from useSSE
-        connect({
-          url: '/api/self_check/sse',
-          onMessage: () => {
-            resolve(true)
-          },
-          onError: () => {
-            resolve(false)
-            disconnect()
-          },
-          reconnectInterval: 0,
-        })
-
-        // Set a timeout for the connection attempt
-        setTimeout(() => {
-          resolve(false)
-          disconnect()
-        }, 5000)
-      })
-
-      if (connected) {
-        return ReportStatus.Success
-      }
-      else {
-        return ReportStatus.Error
-      }
-    }
-    catch (error) {
-      console.error(error)
-      return ReportStatus.Error
-    }
-  },
-}
-
-export default SSETask

Dosya farkı çok büyük olduğundan ihmal edildi
+ 588 - 42
app/src/language/ar/app.po


Dosya farkı çok büyük olduğundan ihmal edildi
+ 549 - 67
app/src/language/de_DE/app.po


+ 550 - 18
app/src/language/en/app.po

@@ -1,3 +1,88 @@
+#: src/language/generate.ts:33
+msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}"
+msgstr ""
+
+#: src/language/generate.ts:34
+msgid "[Nginx UI] Backing up current certificate for later revocation"
+msgstr ""
+
+#: src/language/generate.ts:35
+msgid "[Nginx UI] Certificate renewed successfully"
+msgstr ""
+
+#: src/language/generate.ts:36
+msgid "[Nginx UI] Certificate successfully revoked"
+msgstr ""
+
+#: src/language/generate.ts:37
+msgid ""
+"[Nginx UI] Certificate was used for server, reloading server TLS certificate"
+msgstr ""
+
+#: src/language/generate.ts:38
+msgid "[Nginx UI] Creating client facilitates communication with the CA server"
+msgstr ""
+
+#: src/language/generate.ts:39
+msgid "[Nginx UI] Environment variables cleaned"
+msgstr ""
+
+#: src/language/generate.ts:40
+msgid "[Nginx UI] Finished"
+msgstr ""
+
+#: src/language/generate.ts:41
+msgid "[Nginx UI] Issued certificate successfully"
+msgstr ""
+
+#: src/language/generate.ts:42
+msgid "[Nginx UI] Obtaining certificate"
+msgstr ""
+
+#: src/language/generate.ts:43
+msgid "[Nginx UI] Preparing for certificate revocation"
+msgstr ""
+
+#: src/language/generate.ts:44
+msgid "[Nginx UI] Preparing lego configurations"
+msgstr ""
+
+#: src/language/generate.ts:45
+msgid "[Nginx UI] Reloading nginx"
+msgstr ""
+
+#: src/language/generate.ts:46
+msgid "[Nginx UI] Revocation completed"
+msgstr ""
+
+#: src/language/generate.ts:47
+msgid "[Nginx UI] Revoking certificate"
+msgstr ""
+
+#: src/language/generate.ts:48
+msgid "[Nginx UI] Revoking old certificate"
+msgstr ""
+
+#: src/language/generate.ts:49
+msgid "[Nginx UI] Setting DNS01 challenge provider"
+msgstr ""
+
+#: src/language/generate.ts:51
+msgid "[Nginx UI] Setting environment variables"
+msgstr ""
+
+#: src/language/generate.ts:50
+msgid "[Nginx UI] Setting HTTP01 challenge provider"
+msgstr ""
+
+#: src/language/generate.ts:52
+msgid "[Nginx UI] Writing certificate private key to disk"
+msgstr ""
+
+#: src/language/generate.ts:53
+msgid "[Nginx UI] Writing certificate to disk"
+msgstr ""
+
 #: src/components/SyncNodesPreview/SyncNodesPreview.vue:59
 msgid "* Includes nodes from group %{groupName} and manually selected nodes"
 msgstr ""
@@ -129,6 +214,7 @@ msgstr ""
 msgid "All"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:193
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgstr ""
@@ -238,7 +324,7 @@ msgstr ""
 msgid "Assistant"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:31
+#: src/components/SelfCheck/SelfCheck.vue:30
 msgid "Attempt to fix"
 msgstr ""
 
@@ -277,6 +363,22 @@ msgstr ""
 msgid "Auto Backup"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:37
+msgid "Auto Backup Completed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:25
+msgid "Auto Backup Configuration Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:29
+msgid "Auto Backup Failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:33
+msgid "Auto Backup Storage Failed"
+msgstr ""
+
 #: src/views/environments/list/Environment.vue:165
 #: src/views/nginx_log/NginxLog.vue:150
 msgid "Auto Refresh"
@@ -372,6 +474,19 @@ msgstr ""
 msgid "Backup Schedule"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:38
+msgid "Backup task %{backup_name} completed successfully, file: %{file_path}"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:34
+msgid ""
+"Backup task %{backup_name} failed during storage upload, error: %{error}"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:30
+msgid "Backup task %{backup_name} failed to execute, error: %{error}"
+msgstr ""
+
 #: src/views/backup/AutoBackup/AutoBackup.vue:24
 msgid "Backup Type"
 msgstr ""
@@ -542,6 +657,20 @@ msgstr ""
 msgid "certificate"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:42
+msgid "Certificate %{name} has expired"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:54
+msgid "Certificate %{name} will expire in %{days} days"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:58
+msgid "Certificate %{name} will expire in 1 day"
+msgstr ""
+
 #: src/views/certificate/components/CertificateDownload.vue:36
 msgid "Certificate content and private key content cannot be empty"
 msgstr ""
@@ -550,6 +679,20 @@ msgstr ""
 msgid "Certificate decode error"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:45
+msgid "Certificate Expiration Notice"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:41
+msgid "Certificate Expired"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:49
+#: src/components/Notification/notifications.ts:53
+#: src/components/Notification/notifications.ts:57
+msgid "Certificate Expiring Soon"
+msgstr ""
+
 #: src/views/certificate/components/CertificateDownload.vue:70
 msgid "Certificate files downloaded successfully"
 msgstr ""
@@ -558,6 +701,10 @@ msgstr ""
 msgid "Certificate name cannot be empty"
 msgstr ""
 
+#: src/language/generate.ts:4
+msgid "Certificate not found: %{error}"
+msgstr ""
+
 #: src/constants/errors/cert.ts:5
 msgid "Certificate parse error"
 msgstr ""
@@ -579,6 +726,10 @@ msgstr ""
 msgid "Certificate renewed successfully"
 msgstr ""
 
+#: src/language/generate.ts:5
+msgid "Certificate revoked successfully"
+msgstr ""
+
 #: src/views/certificate/components/AutoCertManagement.vue:67
 #: src/views/site/site_edit/components/Cert/Cert.vue:58
 msgid "Certificate Status"
@@ -646,12 +797,90 @@ msgstr ""
 msgid "Check again"
 msgstr ""
 
+#: src/language/generate.ts:6
+msgid ""
+"Check if /var/run/docker.sock exists. If you are using Nginx UI Official "
+"Docker Image, please make sure the docker socket is mounted like this: `-v /"
+"var/run/docker.sock:/var/run/docker.sock`. Nginx UI official image uses /var/"
+"run/docker.sock to communicate with the host Docker Engine via Docker Client "
+"API. This feature is used to control Nginx in another container and perform "
+"container replacement rather than binary replacement during OTA upgrades of "
+"Nginx UI to ensure container dependencies are also upgraded. If you don't "
+"need this feature, please add the environment variable "
+"NGINX_UI_IGNORE_DOCKER_SOCKET=true to the container."
+msgstr ""
+
 #: src/components/SelfCheck/tasks/frontend/https-check.ts:14
 msgid ""
 "Check if HTTPS is enabled. Using HTTP outside localhost is insecure and "
 "prevents using Passkeys and clipboard features"
 msgstr ""
 
+#: src/language/generate.ts:8
+msgid ""
+"Check if the nginx access log path exists. By default, this path is obtained "
+"from 'nginx -V'. If it cannot be obtained or the obtained path does not "
+"point to a valid, existing file, an error will be reported. In this case, "
+"you need to modify the configuration file to specify the access log path."
+"Refer to the docs for more details: https://nginxui.com/zh_CN/guide/config-"
+"nginx.html#accesslogpath"
+msgstr ""
+
+#: src/language/generate.ts:9
+msgid "Check if the nginx configuration directory exists"
+msgstr ""
+
+#: src/language/generate.ts:10
+msgid "Check if the nginx configuration entry file exists"
+msgstr ""
+
+#: src/language/generate.ts:11
+msgid ""
+"Check if the nginx error log path exists. By default, this path is obtained "
+"from 'nginx -V'. If it cannot be obtained or the obtained path does not "
+"point to a valid, existing file, an error will be reported. In this case, "
+"you need to modify the configuration file to specify the error log path. "
+"Refer to the docs for more details: https://nginxui.com/zh_CN/guide/config-"
+"nginx.html#errorlogpath"
+msgstr ""
+
+#: src/language/generate.ts:7
+msgid ""
+"Check if the nginx PID path exists. By default, this path is obtained from "
+"'nginx -V'. If it cannot be obtained, an error will be reported. In this "
+"case, you need to modify the configuration file to specify the Nginx PID "
+"path.Refer to the docs for more details: https://nginxui.com/zh_CN/guide/"
+"config-nginx.html#pidpath"
+msgstr ""
+
+#: src/language/generate.ts:12
+msgid "Check if the nginx sbin path exists"
+msgstr ""
+
+#: src/language/generate.ts:13
+msgid "Check if the nginx.conf includes the conf.d directory"
+msgstr ""
+
+#: src/language/generate.ts:14
+msgid "Check if the nginx.conf includes the sites-enabled directory"
+msgstr ""
+
+#: src/language/generate.ts:15
+msgid "Check if the nginx.conf includes the streams-enabled directory"
+msgstr ""
+
+#: src/language/generate.ts:16
+msgid ""
+"Check if the sites-available and sites-enabled directories are under the "
+"nginx configuration directory"
+msgstr ""
+
+#: src/language/generate.ts:17
+msgid ""
+"Check if the streams-available and streams-enabled directories are under the "
+"nginx configuration directory"
+msgstr ""
+
 #: src/constants/errors/crypto.ts:3
 msgid "Cipher text is too short"
 msgstr ""
@@ -1028,6 +1257,14 @@ msgstr ""
 msgid "Delete"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:86
+msgid "Delete %{path} on %{env_name} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:90
+msgid "Delete %{path} on %{env_name} successfully"
+msgstr ""
+
 #: src/views/certificate/components/RemoveCert.vue:95
 msgid "Delete Certificate"
 msgstr ""
@@ -1040,18 +1277,51 @@ msgstr ""
 msgid "Delete Permanently"
 msgstr ""
 
-#: src/language/constants.ts:50
+#: src/components/Notification/notifications.ts:85
+msgid "Delete Remote Config Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:89
+msgid "Delete Remote Config Success"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:97 src/language/constants.ts:50
 msgid "Delete Remote Site Error"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:101
 #: src/language/constants.ts:49
 msgid "Delete Remote Site Success"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:153
+msgid "Delete Remote Stream Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:157
+msgid "Delete Remote Stream Success"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:98
+msgid "Delete site %{name} from %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:102
+msgid "Delete site %{name} from %{node} successfully"
+msgstr ""
+
 #: src/views/site/site_list/SiteList.vue:48
 msgid "Delete site: %{site_name}"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:154
+msgid "Delete stream %{name} from %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:158
+msgid "Delete stream %{name} from %{node} successfully"
+msgstr ""
+
 #: src/views/stream/StreamList.vue:47
 msgid "Delete stream: %{stream_name}"
 msgstr ""
@@ -1138,14 +1408,56 @@ msgstr ""
 msgid "Disable auto-renewal failed for %{name}"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:105
 #: src/language/constants.ts:52
 msgid "Disable Remote Site Error"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:129
+msgid "Disable Remote Site Maintenance Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:133
+msgid "Disable Remote Site Maintenance Success"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:109
 #: src/language/constants.ts:51
 msgid "Disable Remote Site Success"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:161
+msgid "Disable Remote Stream Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:165
+msgid "Disable Remote Stream Success"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:106
+msgid "Disable site %{name} from %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:110
+msgid "Disable site %{name} from %{node} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:130
+msgid "Disable site %{name} maintenance on %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:134
+msgid "Disable site %{name} maintenance on %{node} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:162
+msgid "Disable stream %{name} from %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:166
+msgid "Disable stream %{name} from %{node} successfully"
+msgstr ""
+
 #: src/views/backup/AutoBackup/AutoBackup.vue:175
 #: src/views/environments/list/envColumns.tsx:60
 #: src/views/environments/list/envColumns.tsx:78
@@ -1216,6 +1528,10 @@ msgstr ""
 msgid "Docker client not initialized"
 msgstr ""
 
+#: src/language/generate.ts:18
+msgid "Docker socket exists"
+msgstr ""
+
 #: src/constants/errors/self_check.ts:16
 msgid "Docker socket not exist"
 msgstr ""
@@ -1363,14 +1679,56 @@ msgstr ""
 msgid "Enable Proxy Cache"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:113
 #: src/language/constants.ts:54
 msgid "Enable Remote Site Error"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:121
+msgid "Enable Remote Site Maintenance Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:125
+msgid "Enable Remote Site Maintenance Success"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:117
 #: src/language/constants.ts:53
 msgid "Enable Remote Site Success"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:169
+msgid "Enable Remote Stream Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:173
+msgid "Enable Remote Stream Success"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:122
+msgid "Enable site %{name} maintenance on %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:126
+msgid "Enable site %{name} maintenance on %{node} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:114
+msgid "Enable site %{name} on %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:118
+msgid "Enable site %{name} on %{node} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:170
+msgid "Enable stream %{name} on %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:174
+msgid "Enable stream %{name} on %{node} successfully"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:172
 msgid "Enable stub_status module"
 msgstr ""
@@ -1523,6 +1881,10 @@ msgstr ""
 msgid "External notification configuration not found"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:93
+msgid "External Notification Test"
+msgstr ""
+
 #: src/views/preference/Preference.vue:58
 #: src/views/preference/tabs/ExternalNotify.vue:41
 msgid "External Notify"
@@ -1677,6 +2039,10 @@ msgstr ""
 msgid "Failed to delete certificate"
 msgstr ""
 
+#: src/language/generate.ts:19
+msgid "Failed to delete certificate from database: %{error}"
+msgstr ""
+
 #: src/views/site/components/SiteStatusSelect.vue:73
 #: src/views/stream/components/StreamStatusSelect.vue:45
 msgid "Failed to disable %{msg}"
@@ -1843,6 +2209,10 @@ msgstr ""
 msgid "Failed to revoke certificate"
 msgstr ""
 
+#: src/language/generate.ts:20
+msgid "Failed to revoke certificate: %{error}"
+msgstr ""
+
 #: src/views/dashboard/components/ParamsOptimization.vue:91
 msgid "Failed to save Nginx performance settings"
 msgstr ""
@@ -2476,6 +2846,13 @@ msgstr ""
 msgid "Log"
 msgstr ""
 
+#: src/language/generate.ts:21
+msgid ""
+"Log file %{log_path} is not a regular file. If you are using nginx-ui in "
+"docker container, please refer to https://nginxui.com/zh_CN/guide/config-"
+"nginx-log.html for more information."
+msgstr ""
+
 #: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:88
 msgid "Log List"
 msgstr ""
@@ -2813,6 +3190,10 @@ msgstr ""
 msgid "Nginx Access Log Path"
 msgstr ""
 
+#: src/language/generate.ts:23
+msgid "Nginx access log path exists"
+msgstr ""
+
 #: src/views/backup/AutoBackup/AutoBackup.vue:28
 #: src/views/backup/AutoBackup/AutoBackup.vue:40
 msgid "Nginx and Nginx UI Config"
@@ -2842,6 +3223,14 @@ msgstr ""
 msgid "Nginx config directory is not set"
 msgstr ""
 
+#: src/language/generate.ts:24
+msgid "Nginx configuration directory exists"
+msgstr ""
+
+#: src/language/generate.ts:25
+msgid "Nginx configuration entry file exists"
+msgstr ""
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:138
 msgid "Nginx configuration has been restored"
 msgstr ""
@@ -2876,6 +3265,10 @@ msgstr ""
 msgid "Nginx Error Log Path"
 msgstr ""
 
+#: src/language/generate.ts:26
+msgid "Nginx error log path exists"
+msgstr ""
+
 #: src/constants/errors/nginx.ts:2
 msgid "Nginx error: {0}"
 msgstr ""
@@ -2913,6 +3306,10 @@ msgstr ""
 msgid "Nginx PID Path"
 msgstr ""
 
+#: src/language/generate.ts:22
+msgid "Nginx PID path exists"
+msgstr ""
+
 #: src/views/preference/tabs/NginxSettings.vue:40
 msgid "Nginx Reload Command"
 msgstr ""
@@ -2942,6 +3339,10 @@ msgstr ""
 msgid "Nginx restarted successfully"
 msgstr ""
 
+#: src/language/generate.ts:27
+msgid "Nginx sbin path exists"
+msgstr ""
+
 #: src/views/preference/tabs/NginxSettings.vue:37
 msgid "Nginx Test Config Command"
 msgstr ""
@@ -2969,6 +3370,18 @@ msgid ""
 "few seconds."
 msgstr ""
 
+#: src/language/generate.ts:28
+msgid "Nginx.conf includes conf.d directory"
+msgstr ""
+
+#: src/language/generate.ts:29
+msgid "Nginx.conf includes sites-enabled directory"
+msgstr ""
+
+#: src/language/generate.ts:30
+msgid "Nginx.conf includes streams-enabled directory"
+msgstr ""
+
 #: src/components/ChatGPT/ChatMessageInput.vue:17
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:111
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:99
@@ -3426,6 +3839,7 @@ msgid ""
 "select one of the credentialsbelow to request the API of the DNS provider."
 msgstr ""
 
+#: src/components/Notification/notifications.ts:194
 #: src/language/constants.ts:59
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -3652,7 +4066,7 @@ msgstr ""
 msgid "Receive"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:24
+#: src/components/SelfCheck/SelfCheck.vue:23
 msgid "Recheck"
 msgstr ""
 
@@ -3736,6 +4150,22 @@ msgstr ""
 msgid "Reload nginx failed: {0}"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:10
+msgid "Reload Nginx on %{node} failed, response: %{resp}"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:14
+msgid "Reload Nginx on %{node} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:9
+msgid "Reload Remote Nginx Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:13
+msgid "Reload Remote Nginx Success"
+msgstr ""
+
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:52
 msgid "Reload request failed, please check your network connection"
 msgstr ""
@@ -3775,22 +4205,56 @@ msgstr ""
 msgid "Rename"
 msgstr ""
 
-#: src/language/constants.ts:42
+#: src/components/Notification/notifications.ts:78
+msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:82
+msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:77 src/language/constants.ts:42
 msgid "Rename Remote Config Error"
 msgstr ""
 
-#: src/language/constants.ts:41
+#: src/components/Notification/notifications.ts:81 src/language/constants.ts:41
 msgid "Rename Remote Config Success"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:137
 #: src/language/constants.ts:56
 msgid "Rename Remote Site Error"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:141
 #: src/language/constants.ts:55
 msgid "Rename Remote Site Success"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:177
+msgid "Rename Remote Stream Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:181
+msgid "Rename Remote Stream Success"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:138
+msgid "Rename site %{name} to %{new_name} on %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:142
+msgid "Rename site %{name} to %{new_name} on %{node} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:178
+msgid "Rename stream %{name} to %{new_name} on %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:182
+msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
+msgstr ""
+
 #: src/views/config/components/Rename.vue:43
 msgid "Rename successfully"
 msgstr ""
@@ -3869,6 +4333,22 @@ msgstr ""
 msgid "Restart Nginx"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:18
+msgid "Restart Nginx on %{node} failed, response: %{resp}"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:22
+msgid "Restart Nginx on %{node} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:17
+msgid "Restart Remote Nginx Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:21
+msgid "Restart Remote Nginx Success"
+msgstr ""
+
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:72
 msgid "Restart request failed, please check your network connection"
 msgstr ""
@@ -4078,14 +4558,40 @@ msgstr ""
 msgid "Save Directive"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:145
 #: src/language/constants.ts:48
 msgid "Save Remote Site Error"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:149
 #: src/language/constants.ts:47
 msgid "Save Remote Site Success"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:185
+msgid "Save Remote Stream Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:189
+msgid "Save Remote Stream Success"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:146
+msgid "Save site %{name} to %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:150
+msgid "Save site %{name} to %{node} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:186
+msgid "Save stream %{name} to %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:190
+msgid "Save stream %{name} to %{node} successfully"
+msgstr ""
+
 #: src/language/curd.ts:36
 msgid "Save successful"
 msgstr ""
@@ -4192,7 +4698,7 @@ msgstr ""
 msgid "Selector"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:16 src/routes/modules/system.ts:19
+#: src/components/SelfCheck/SelfCheck.vue:15 src/routes/modules/system.ts:19
 msgid "Self Check"
 msgstr ""
 
@@ -4328,6 +4834,10 @@ msgstr ""
 msgid "Site not found"
 msgstr ""
 
+#: src/language/generate.ts:31
+msgid "Sites directory exists"
+msgstr ""
+
 #: src/routes/modules/sites.ts:19
 msgid "Sites List"
 msgstr ""
@@ -4457,6 +4967,12 @@ msgstr ""
 msgid "Storage Configuration"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:26
+msgid ""
+"Storage configuration validation failed for backup task %{backup_name}, "
+"error: %{error}"
+msgstr ""
+
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:120
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:54
 msgid "Storage Path"
@@ -4484,6 +5000,10 @@ msgstr ""
 msgid "Stream not found"
 msgstr ""
 
+#: src/language/generate.ts:32
+msgid "Streams directory exists"
+msgstr ""
+
 #: src/constants/errors/self_check.ts:13
 msgid "Streams-available directory not exist"
 msgstr ""
@@ -4511,14 +5031,6 @@ msgstr ""
 msgid "Sunday"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/frontend/sse.ts:14
-msgid ""
-"Support communication with the backend through the Server-Sent Events "
-"protocol. If your Nginx UI is being used via an Nginx reverse proxy, please "
-"refer to this link to write the corresponding configuration file: https://"
-"nginxui.com/guide/nginx-proxy-example.html"
-msgstr ""
-
 #: src/components/SelfCheck/tasks/frontend/websocket.ts:13
 msgid ""
 "Support communication with the backend through the WebSocket protocol. If "
@@ -4562,19 +5074,35 @@ msgstr ""
 msgid "Sync Certificate"
 msgstr ""
 
-#: src/language/constants.ts:39
+#: src/components/Notification/notifications.ts:62
+msgid "Sync Certificate %{cert_name} to %{env_name} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:66
+msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:61 src/language/constants.ts:39
 msgid "Sync Certificate Error"
 msgstr ""
 
-#: src/language/constants.ts:38
+#: src/components/Notification/notifications.ts:65 src/language/constants.ts:38
 msgid "Sync Certificate Success"
 msgstr ""
 
-#: src/language/constants.ts:45
+#: src/components/Notification/notifications.ts:70
+msgid "Sync config %{config_name} to %{env_name} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:74
+msgid "Sync config %{config_name} to %{env_name} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:69 src/language/constants.ts:45
 msgid "Sync Config Error"
 msgstr ""
 
-#: src/language/constants.ts:44
+#: src/components/Notification/notifications.ts:73 src/language/constants.ts:44
 msgid "Sync Config Success"
 msgstr ""
 
@@ -4808,6 +5336,10 @@ msgid ""
 "_./:"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:94
+msgid "This is a test message sent at %{timestamp} from Nginx UI."
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:175
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "

Dosya farkı çok büyük olduğundan ihmal edildi
+ 533 - 62
app/src/language/es/app.po


Dosya farkı çok büyük olduğundan ihmal edildi
+ 535 - 55
app/src/language/fr_FR/app.po


+ 50 - 0
app/src/language/generate.ts

@@ -1,4 +1,54 @@
 // This file is auto-generated. DO NOT EDIT MANUALLY.
 
 export const msg = [
+  $gettext('Certificate not found: %{error}'),
+  $gettext('Certificate revoked successfully'),
+  $gettext('Check if /var/run/docker.sock exists. If you are using Nginx UI Official Docker Image, please make sure the docker socket is mounted like this: `-v /var/run/docker.sock:/var/run/docker.sock`. Nginx UI official image uses /var/run/docker.sock to communicate with the host Docker Engine via Docker Client API. This feature is used to control Nginx in another container and perform container replacement rather than binary replacement during OTA upgrades of Nginx UI to ensure container dependencies are also upgraded. If you don\'t need this feature, please add the environment variable NGINX_UI_IGNORE_DOCKER_SOCKET=true to the container.'),
+  $gettext('Check if the nginx PID path exists. By default, this path is obtained from \'nginx -V\'. If it cannot be obtained, an error will be reported. In this case, you need to modify the configuration file to specify the Nginx PID path.Refer to the docs for more details: https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath'),
+  $gettext('Check if the nginx access log path exists. By default, this path is obtained from \'nginx -V\'. If it cannot be obtained or the obtained path does not point to a valid, existing file, an error will be reported. In this case, you need to modify the configuration file to specify the access log path.Refer to the docs for more details: https://nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath'),
+  $gettext('Check if the nginx configuration directory exists'),
+  $gettext('Check if the nginx configuration entry file exists'),
+  $gettext('Check if the nginx error log path exists. By default, this path is obtained from \'nginx -V\'. If it cannot be obtained or the obtained path does not point to a valid, existing file, an error will be reported. In this case, you need to modify the configuration file to specify the error log path. Refer to the docs for more details: https://nginxui.com/zh_CN/guide/config-nginx.html#errorlogpath'),
+  $gettext('Check if the nginx sbin path exists'),
+  $gettext('Check if the nginx.conf includes the conf.d directory'),
+  $gettext('Check if the nginx.conf includes the sites-enabled directory'),
+  $gettext('Check if the nginx.conf includes the streams-enabled directory'),
+  $gettext('Check if the sites-available and sites-enabled directories are under the nginx configuration directory'),
+  $gettext('Check if the streams-available and streams-enabled directories are under the nginx configuration directory'),
+  $gettext('Docker socket exists'),
+  $gettext('Failed to delete certificate from database: %{error}'),
+  $gettext('Failed to revoke certificate: %{error}'),
+  $gettext('Log file %{log_path} is not a regular file. If you are using nginx-ui in docker container, please refer to https://nginxui.com/zh_CN/guide/config-nginx-log.html for more information.'),
+  $gettext('Nginx PID path exists'),
+  $gettext('Nginx access log path exists'),
+  $gettext('Nginx configuration directory exists'),
+  $gettext('Nginx configuration entry file exists'),
+  $gettext('Nginx error log path exists'),
+  $gettext('Nginx sbin path exists'),
+  $gettext('Nginx.conf includes conf.d directory'),
+  $gettext('Nginx.conf includes sites-enabled directory'),
+  $gettext('Nginx.conf includes streams-enabled directory'),
+  $gettext('Sites directory exists'),
+  $gettext('Streams directory exists'),
+  $gettext('[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}'),
+  $gettext('[Nginx UI] Backing up current certificate for later revocation'),
+  $gettext('[Nginx UI] Certificate renewed successfully'),
+  $gettext('[Nginx UI] Certificate successfully revoked'),
+  $gettext('[Nginx UI] Certificate was used for server, reloading server TLS certificate'),
+  $gettext('[Nginx UI] Creating client facilitates communication with the CA server'),
+  $gettext('[Nginx UI] Environment variables cleaned'),
+  $gettext('[Nginx UI] Finished'),
+  $gettext('[Nginx UI] Issued certificate successfully'),
+  $gettext('[Nginx UI] Obtaining certificate'),
+  $gettext('[Nginx UI] Preparing for certificate revocation'),
+  $gettext('[Nginx UI] Preparing lego configurations'),
+  $gettext('[Nginx UI] Reloading nginx'),
+  $gettext('[Nginx UI] Revocation completed'),
+  $gettext('[Nginx UI] Revoking certificate'),
+  $gettext('[Nginx UI] Revoking old certificate'),
+  $gettext('[Nginx UI] Setting DNS01 challenge provider'),
+  $gettext('[Nginx UI] Setting HTTP01 challenge provider'),
+  $gettext('[Nginx UI] Setting environment variables'),
+  $gettext('[Nginx UI] Writing certificate private key to disk'),
+  $gettext('[Nginx UI] Writing certificate to disk'),
 ]

Dosya farkı çok büyük olduğundan ihmal edildi
+ 553 - 53
app/src/language/ja_JP/app.po


Dosya farkı çok büyük olduğundan ihmal edildi
+ 554 - 54
app/src/language/ko_KR/app.po


+ 513 - 7
app/src/language/messages.pot

@@ -2,6 +2,90 @@ msgid ""
 msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 
+#: src/language/generate.ts:33
+msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}"
+msgstr ""
+
+#: src/language/generate.ts:34
+msgid "[Nginx UI] Backing up current certificate for later revocation"
+msgstr ""
+
+#: src/language/generate.ts:35
+msgid "[Nginx UI] Certificate renewed successfully"
+msgstr ""
+
+#: src/language/generate.ts:36
+msgid "[Nginx UI] Certificate successfully revoked"
+msgstr ""
+
+#: src/language/generate.ts:37
+msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate"
+msgstr ""
+
+#: src/language/generate.ts:38
+msgid "[Nginx UI] Creating client facilitates communication with the CA server"
+msgstr ""
+
+#: src/language/generate.ts:39
+msgid "[Nginx UI] Environment variables cleaned"
+msgstr ""
+
+#: src/language/generate.ts:40
+msgid "[Nginx UI] Finished"
+msgstr ""
+
+#: src/language/generate.ts:41
+msgid "[Nginx UI] Issued certificate successfully"
+msgstr ""
+
+#: src/language/generate.ts:42
+msgid "[Nginx UI] Obtaining certificate"
+msgstr ""
+
+#: src/language/generate.ts:43
+msgid "[Nginx UI] Preparing for certificate revocation"
+msgstr ""
+
+#: src/language/generate.ts:44
+msgid "[Nginx UI] Preparing lego configurations"
+msgstr ""
+
+#: src/language/generate.ts:45
+msgid "[Nginx UI] Reloading nginx"
+msgstr ""
+
+#: src/language/generate.ts:46
+msgid "[Nginx UI] Revocation completed"
+msgstr ""
+
+#: src/language/generate.ts:47
+msgid "[Nginx UI] Revoking certificate"
+msgstr ""
+
+#: src/language/generate.ts:48
+msgid "[Nginx UI] Revoking old certificate"
+msgstr ""
+
+#: src/language/generate.ts:49
+msgid "[Nginx UI] Setting DNS01 challenge provider"
+msgstr ""
+
+#: src/language/generate.ts:51
+msgid "[Nginx UI] Setting environment variables"
+msgstr ""
+
+#: src/language/generate.ts:50
+msgid "[Nginx UI] Setting HTTP01 challenge provider"
+msgstr ""
+
+#: src/language/generate.ts:52
+msgid "[Nginx UI] Writing certificate private key to disk"
+msgstr ""
+
+#: src/language/generate.ts:53
+msgid "[Nginx UI] Writing certificate to disk"
+msgstr ""
+
 #: src/components/SyncNodesPreview/SyncNodesPreview.vue:59
 msgid "* Includes nodes from group %{groupName} and manually selected nodes"
 msgstr ""
@@ -138,6 +222,7 @@ msgstr ""
 msgid "All"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:193
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgstr ""
@@ -245,7 +330,7 @@ msgstr ""
 msgid "Assistant"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:31
+#: src/components/SelfCheck/SelfCheck.vue:30
 msgid "Attempt to fix"
 msgstr ""
 
@@ -284,6 +369,22 @@ msgstr ""
 msgid "Auto Backup"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:37
+msgid "Auto Backup Completed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:25
+msgid "Auto Backup Configuration Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:29
+msgid "Auto Backup Failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:33
+msgid "Auto Backup Storage Failed"
+msgstr ""
+
 #: src/views/environments/list/Environment.vue:165
 #: src/views/nginx_log/NginxLog.vue:150
 msgid "Auto Refresh"
@@ -381,6 +482,18 @@ msgstr ""
 msgid "Backup Schedule"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:38
+msgid "Backup task %{backup_name} completed successfully, file: %{file_path}"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:34
+msgid "Backup task %{backup_name} failed during storage upload, error: %{error}"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:30
+msgid "Backup task %{backup_name} failed to execute, error: %{error}"
+msgstr ""
+
 #: src/views/backup/AutoBackup/AutoBackup.vue:24
 msgid "Backup Type"
 msgstr ""
@@ -550,6 +663,20 @@ msgstr ""
 msgid "certificate"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:42
+msgid "Certificate %{name} has expired"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:54
+msgid "Certificate %{name} will expire in %{days} days"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:58
+msgid "Certificate %{name} will expire in 1 day"
+msgstr ""
+
 #: src/views/certificate/components/CertificateDownload.vue:36
 msgid "Certificate content and private key content cannot be empty"
 msgstr ""
@@ -558,6 +685,20 @@ msgstr ""
 msgid "Certificate decode error"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:45
+msgid "Certificate Expiration Notice"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:41
+msgid "Certificate Expired"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:49
+#: src/components/Notification/notifications.ts:53
+#: src/components/Notification/notifications.ts:57
+msgid "Certificate Expiring Soon"
+msgstr ""
+
 #: src/views/certificate/components/CertificateDownload.vue:70
 msgid "Certificate files downloaded successfully"
 msgstr ""
@@ -566,6 +707,10 @@ msgstr ""
 msgid "Certificate name cannot be empty"
 msgstr ""
 
+#: src/language/generate.ts:4
+msgid "Certificate not found: %{error}"
+msgstr ""
+
 #: src/constants/errors/cert.ts:5
 msgid "Certificate parse error"
 msgstr ""
@@ -587,6 +732,10 @@ msgstr ""
 msgid "Certificate renewed successfully"
 msgstr ""
 
+#: src/language/generate.ts:5
+msgid "Certificate revoked successfully"
+msgstr ""
+
 #: src/views/certificate/components/AutoCertManagement.vue:67
 #: src/views/site/site_edit/components/Cert/Cert.vue:58
 msgid "Certificate Status"
@@ -654,10 +803,58 @@ msgstr ""
 msgid "Check again"
 msgstr ""
 
+#: src/language/generate.ts:6
+msgid "Check if /var/run/docker.sock exists. If you are using Nginx UI Official Docker Image, please make sure the docker socket is mounted like this: `-v /var/run/docker.sock:/var/run/docker.sock`. Nginx UI official image uses /var/run/docker.sock to communicate with the host Docker Engine via Docker Client API. This feature is used to control Nginx in another container and perform container replacement rather than binary replacement during OTA upgrades of Nginx UI to ensure container dependencies are also upgraded. If you don't need this feature, please add the environment variable NGINX_UI_IGNORE_DOCKER_SOCKET=true to the container."
+msgstr ""
+
 #: src/components/SelfCheck/tasks/frontend/https-check.ts:14
 msgid "Check if HTTPS is enabled. Using HTTP outside localhost is insecure and prevents using Passkeys and clipboard features"
 msgstr ""
 
+#: src/language/generate.ts:8
+msgid "Check if the nginx access log path exists. By default, this path is obtained from 'nginx -V'. If it cannot be obtained or the obtained path does not point to a valid, existing file, an error will be reported. In this case, you need to modify the configuration file to specify the access log path.Refer to the docs for more details: https://nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath"
+msgstr ""
+
+#: src/language/generate.ts:9
+msgid "Check if the nginx configuration directory exists"
+msgstr ""
+
+#: src/language/generate.ts:10
+msgid "Check if the nginx configuration entry file exists"
+msgstr ""
+
+#: src/language/generate.ts:11
+msgid "Check if the nginx error log path exists. By default, this path is obtained from 'nginx -V'. If it cannot be obtained or the obtained path does not point to a valid, existing file, an error will be reported. In this case, you need to modify the configuration file to specify the error log path. Refer to the docs for more details: https://nginxui.com/zh_CN/guide/config-nginx.html#errorlogpath"
+msgstr ""
+
+#: src/language/generate.ts:7
+msgid "Check if the nginx PID path exists. By default, this path is obtained from 'nginx -V'. If it cannot be obtained, an error will be reported. In this case, you need to modify the configuration file to specify the Nginx PID path.Refer to the docs for more details: https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath"
+msgstr ""
+
+#: src/language/generate.ts:12
+msgid "Check if the nginx sbin path exists"
+msgstr ""
+
+#: src/language/generate.ts:13
+msgid "Check if the nginx.conf includes the conf.d directory"
+msgstr ""
+
+#: src/language/generate.ts:14
+msgid "Check if the nginx.conf includes the sites-enabled directory"
+msgstr ""
+
+#: src/language/generate.ts:15
+msgid "Check if the nginx.conf includes the streams-enabled directory"
+msgstr ""
+
+#: src/language/generate.ts:16
+msgid "Check if the sites-available and sites-enabled directories are under the nginx configuration directory"
+msgstr ""
+
+#: src/language/generate.ts:17
+msgid "Check if the streams-available and streams-enabled directories are under the nginx configuration directory"
+msgstr ""
+
 #: src/constants/errors/crypto.ts:3
 msgid "Cipher text is too short"
 msgstr ""
@@ -1035,6 +1232,14 @@ msgstr ""
 msgid "Delete"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:86
+msgid "Delete %{path} on %{env_name} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:90
+msgid "Delete %{path} on %{env_name} successfully"
+msgstr ""
+
 #: src/views/certificate/components/RemoveCert.vue:95
 msgid "Delete Certificate"
 msgstr ""
@@ -1047,18 +1252,52 @@ msgstr ""
 msgid "Delete Permanently"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:85
+msgid "Delete Remote Config Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:89
+msgid "Delete Remote Config Success"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:97
 #: src/language/constants.ts:50
 msgid "Delete Remote Site Error"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:101
 #: src/language/constants.ts:49
 msgid "Delete Remote Site Success"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:153
+msgid "Delete Remote Stream Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:157
+msgid "Delete Remote Stream Success"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:98
+msgid "Delete site %{name} from %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:102
+msgid "Delete site %{name} from %{node} successfully"
+msgstr ""
+
 #: src/views/site/site_list/SiteList.vue:48
 msgid "Delete site: %{site_name}"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:154
+msgid "Delete stream %{name} from %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:158
+msgid "Delete stream %{name} from %{node} successfully"
+msgstr ""
+
 #: src/views/stream/StreamList.vue:47
 msgid "Delete stream: %{stream_name}"
 msgstr ""
@@ -1147,14 +1386,56 @@ msgstr ""
 msgid "Disable auto-renewal failed for %{name}"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:105
 #: src/language/constants.ts:52
 msgid "Disable Remote Site Error"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:129
+msgid "Disable Remote Site Maintenance Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:133
+msgid "Disable Remote Site Maintenance Success"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:109
 #: src/language/constants.ts:51
 msgid "Disable Remote Site Success"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:161
+msgid "Disable Remote Stream Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:165
+msgid "Disable Remote Stream Success"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:106
+msgid "Disable site %{name} from %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:110
+msgid "Disable site %{name} from %{node} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:130
+msgid "Disable site %{name} maintenance on %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:134
+msgid "Disable site %{name} maintenance on %{node} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:162
+msgid "Disable stream %{name} from %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:166
+msgid "Disable stream %{name} from %{node} successfully"
+msgstr ""
+
 #: src/views/backup/AutoBackup/AutoBackup.vue:175
 #: src/views/environments/list/envColumns.tsx:60
 #: src/views/environments/list/envColumns.tsx:78
@@ -1226,6 +1507,10 @@ msgstr ""
 msgid "Docker client not initialized"
 msgstr ""
 
+#: src/language/generate.ts:18
+msgid "Docker socket exists"
+msgstr ""
+
 #: src/constants/errors/self_check.ts:16
 msgid "Docker socket not exist"
 msgstr ""
@@ -1371,14 +1656,56 @@ msgstr ""
 msgid "Enable Proxy Cache"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:113
 #: src/language/constants.ts:54
 msgid "Enable Remote Site Error"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:121
+msgid "Enable Remote Site Maintenance Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:125
+msgid "Enable Remote Site Maintenance Success"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:117
 #: src/language/constants.ts:53
 msgid "Enable Remote Site Success"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:169
+msgid "Enable Remote Stream Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:173
+msgid "Enable Remote Stream Success"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:122
+msgid "Enable site %{name} maintenance on %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:126
+msgid "Enable site %{name} maintenance on %{node} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:114
+msgid "Enable site %{name} on %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:118
+msgid "Enable site %{name} on %{node} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:170
+msgid "Enable stream %{name} on %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:174
+msgid "Enable stream %{name} on %{node} successfully"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:172
 msgid "Enable stub_status module"
 msgstr ""
@@ -1529,6 +1856,10 @@ msgstr ""
 msgid "External notification configuration not found"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:93
+msgid "External Notification Test"
+msgstr ""
+
 #: src/views/preference/Preference.vue:58
 #: src/views/preference/tabs/ExternalNotify.vue:41
 msgid "External Notify"
@@ -1683,6 +2014,10 @@ msgstr ""
 msgid "Failed to delete certificate"
 msgstr ""
 
+#: src/language/generate.ts:19
+msgid "Failed to delete certificate from database: %{error}"
+msgstr ""
+
 #: src/views/site/components/SiteStatusSelect.vue:73
 #: src/views/stream/components/StreamStatusSelect.vue:45
 msgid "Failed to disable %{msg}"
@@ -1849,6 +2184,10 @@ msgstr ""
 msgid "Failed to revoke certificate"
 msgstr ""
 
+#: src/language/generate.ts:20
+msgid "Failed to revoke certificate: %{error}"
+msgstr ""
+
 #: src/views/dashboard/components/ParamsOptimization.vue:91
 msgid "Failed to save Nginx performance settings"
 msgstr ""
@@ -2468,6 +2807,10 @@ msgstr ""
 msgid "Log"
 msgstr ""
 
+#: src/language/generate.ts:21
+msgid "Log file %{log_path} is not a regular file. If you are using nginx-ui in docker container, please refer to https://nginxui.com/zh_CN/guide/config-nginx-log.html for more information."
+msgstr ""
+
 #: src/routes/modules/nginx_log.ts:39
 #: src/views/nginx_log/NginxLogList.vue:88
 msgid "Log List"
@@ -2804,6 +3147,10 @@ msgstr ""
 msgid "Nginx Access Log Path"
 msgstr ""
 
+#: src/language/generate.ts:23
+msgid "Nginx access log path exists"
+msgstr ""
+
 #: src/views/backup/AutoBackup/AutoBackup.vue:28
 #: src/views/backup/AutoBackup/AutoBackup.vue:40
 msgid "Nginx and Nginx UI Config"
@@ -2833,6 +3180,14 @@ msgstr ""
 msgid "Nginx config directory is not set"
 msgstr ""
 
+#: src/language/generate.ts:24
+msgid "Nginx configuration directory exists"
+msgstr ""
+
+#: src/language/generate.ts:25
+msgid "Nginx configuration entry file exists"
+msgstr ""
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:138
 msgid "Nginx configuration has been restored"
 msgstr ""
@@ -2867,6 +3222,10 @@ msgstr ""
 msgid "Nginx Error Log Path"
 msgstr ""
 
+#: src/language/generate.ts:26
+msgid "Nginx error log path exists"
+msgstr ""
+
 #: src/constants/errors/nginx.ts:2
 msgid "Nginx error: {0}"
 msgstr ""
@@ -2905,6 +3264,10 @@ msgstr ""
 msgid "Nginx PID Path"
 msgstr ""
 
+#: src/language/generate.ts:22
+msgid "Nginx PID path exists"
+msgstr ""
+
 #: src/views/preference/tabs/NginxSettings.vue:40
 msgid "Nginx Reload Command"
 msgstr ""
@@ -2935,6 +3298,10 @@ msgstr ""
 msgid "Nginx restarted successfully"
 msgstr ""
 
+#: src/language/generate.ts:27
+msgid "Nginx sbin path exists"
+msgstr ""
+
 #: src/views/preference/tabs/NginxSettings.vue:37
 msgid "Nginx Test Config Command"
 msgstr ""
@@ -2961,6 +3328,18 @@ msgstr ""
 msgid "Nginx UI configuration has been restored and will restart automatically in a few seconds."
 msgstr ""
 
+#: src/language/generate.ts:28
+msgid "Nginx.conf includes conf.d directory"
+msgstr ""
+
+#: src/language/generate.ts:29
+msgid "Nginx.conf includes sites-enabled directory"
+msgstr ""
+
+#: src/language/generate.ts:30
+msgid "Nginx.conf includes streams-enabled directory"
+msgstr ""
+
 #: src/components/ChatGPT/ChatMessageInput.vue:17
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:111
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:99
@@ -3407,6 +3786,7 @@ msgstr ""
 msgid "Please first add credentials in Certification > DNS Credentials, and then select one of the credentialsbelow to request the API of the DNS provider."
 msgstr ""
 
+#: src/components/Notification/notifications.ts:194
 #: src/language/constants.ts:59
 msgid "Please generate new recovery codes in the preferences immediately to prevent lockout."
 msgstr ""
@@ -3630,7 +4010,7 @@ msgstr ""
 msgid "Receive"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:24
+#: src/components/SelfCheck/SelfCheck.vue:23
 msgid "Recheck"
 msgstr ""
 
@@ -3711,6 +4091,22 @@ msgstr ""
 msgid "Reload nginx failed: {0}"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:10
+msgid "Reload Nginx on %{node} failed, response: %{resp}"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:14
+msgid "Reload Nginx on %{node} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:9
+msgid "Reload Remote Nginx Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:13
+msgid "Reload Remote Nginx Success"
+msgstr ""
+
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:52
 msgid "Reload request failed, please check your network connection"
 msgstr ""
@@ -3750,22 +4146,58 @@ msgstr ""
 msgid "Rename"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:78
+msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:82
+msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:77
 #: src/language/constants.ts:42
 msgid "Rename Remote Config Error"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:81
 #: src/language/constants.ts:41
 msgid "Rename Remote Config Success"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:137
 #: src/language/constants.ts:56
 msgid "Rename Remote Site Error"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:141
 #: src/language/constants.ts:55
 msgid "Rename Remote Site Success"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:177
+msgid "Rename Remote Stream Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:181
+msgid "Rename Remote Stream Success"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:138
+msgid "Rename site %{name} to %{new_name} on %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:142
+msgid "Rename site %{name} to %{new_name} on %{node} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:178
+msgid "Rename stream %{name} to %{new_name} on %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:182
+msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
+msgstr ""
+
 #: src/views/config/components/Rename.vue:43
 msgid "Rename successfully"
 msgstr ""
@@ -3842,6 +4274,22 @@ msgstr ""
 msgid "Restart Nginx"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:18
+msgid "Restart Nginx on %{node} failed, response: %{resp}"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:22
+msgid "Restart Nginx on %{node} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:17
+msgid "Restart Remote Nginx Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:21
+msgid "Restart Remote Nginx Success"
+msgstr ""
+
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:72
 msgid "Restart request failed, please check your network connection"
 msgstr ""
@@ -4049,14 +4497,40 @@ msgstr ""
 msgid "Save Directive"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:145
 #: src/language/constants.ts:48
 msgid "Save Remote Site Error"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:149
 #: src/language/constants.ts:47
 msgid "Save Remote Site Success"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:185
+msgid "Save Remote Stream Error"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:189
+msgid "Save Remote Stream Success"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:146
+msgid "Save site %{name} to %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:150
+msgid "Save site %{name} to %{node} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:186
+msgid "Save stream %{name} to %{node} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:190
+msgid "Save stream %{name} to %{node} successfully"
+msgstr ""
+
 #: src/language/curd.ts:36
 msgid "Save successful"
 msgstr ""
@@ -4165,7 +4639,7 @@ msgstr ""
 msgid "Selector"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:16
+#: src/components/SelfCheck/SelfCheck.vue:15
 #: src/routes/modules/system.ts:19
 msgid "Self Check"
 msgstr ""
@@ -4297,6 +4771,10 @@ msgstr ""
 msgid "Site not found"
 msgstr ""
 
+#: src/language/generate.ts:31
+msgid "Sites directory exists"
+msgstr ""
+
 #: src/routes/modules/sites.ts:19
 msgid "Sites List"
 msgstr ""
@@ -4428,6 +4906,10 @@ msgstr ""
 msgid "Storage Configuration"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:26
+msgid "Storage configuration validation failed for backup task %{backup_name}, error: %{error}"
+msgstr ""
+
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:120
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:54
 msgid "Storage Path"
@@ -4455,6 +4937,10 @@ msgstr ""
 msgid "Stream not found"
 msgstr ""
 
+#: src/language/generate.ts:32
+msgid "Streams directory exists"
+msgstr ""
+
 #: src/constants/errors/self_check.ts:13
 msgid "Streams-available directory not exist"
 msgstr ""
@@ -4483,10 +4969,6 @@ msgstr ""
 msgid "Sunday"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/frontend/sse.ts:14
-msgid "Support communication with the backend through the Server-Sent Events protocol. If your Nginx UI is being used via an Nginx reverse proxy, please refer to this link to write the corresponding configuration file: https://nginxui.com/guide/nginx-proxy-example.html"
-msgstr ""
-
 #: src/components/SelfCheck/tasks/frontend/websocket.ts:13
 msgid "Support communication with the backend through the WebSocket protocol. If your Nginx UI is being used via an Nginx reverse proxy, please refer to this link to write the corresponding configuration file: https://nginxui.com/guide/nginx-proxy-example.html"
 msgstr ""
@@ -4528,18 +5010,38 @@ msgstr ""
 msgid "Sync Certificate"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:62
+msgid "Sync Certificate %{cert_name} to %{env_name} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:66
+msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:61
 #: src/language/constants.ts:39
 msgid "Sync Certificate Error"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:65
 #: src/language/constants.ts:38
 msgid "Sync Certificate Success"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:70
+msgid "Sync config %{config_name} to %{env_name} failed"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:74
+msgid "Sync config %{config_name} to %{env_name} successfully"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:69
 #: src/language/constants.ts:45
 msgid "Sync Config Error"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:73
 #: src/language/constants.ts:44
 msgid "Sync Config Success"
 msgstr ""
@@ -4754,6 +5256,10 @@ msgstr ""
 msgid "This field should only contain letters, unicode characters, numbers, and -_./:"
 msgstr ""
 
+#: src/components/Notification/notifications.ts:94
+msgid "This is a test message sent at %{timestamp} from Nginx UI."
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:175
 msgid "This module provides Nginx request statistics, connection count, etc. data. After enabling it, you can view performance statistics"
 msgstr ""

Dosya farkı çok büyük olduğundan ihmal edildi
+ 547 - 55
app/src/language/pt_PT/app.po


Dosya farkı çok büyük olduğundan ihmal edildi
+ 572 - 56
app/src/language/ru_RU/app.po


Dosya farkı çok büyük olduğundan ihmal edildi
+ 594 - 50
app/src/language/tr_TR/app.po


Dosya farkı çok büyük olduğundan ihmal edildi
+ 541 - 55
app/src/language/uk_UA/app.po


Dosya farkı çok büyük olduğundan ihmal edildi
+ 579 - 53
app/src/language/vi_VN/app.po


Dosya farkı çok büyük olduğundan ihmal edildi
+ 595 - 43
app/src/language/zh_CN/app.po


Dosya farkı çok büyük olduğundan ihmal edildi
+ 593 - 44
app/src/language/zh_TW/app.po


+ 2 - 2
cmd/lego_config/main.go

@@ -24,7 +24,7 @@ type GitHubRelease struct {
 }
 
 const (
-	githubAPIURL = "https://api.github.com/repos/go-acme/lego/releases/latest"
+	githubAPIURL = "https://cloud.nginxui.com/https://api.github.com/repos/go-acme/lego/releases/latest"
 	configDir    = "internal/cert/config"
 )
 
@@ -97,7 +97,7 @@ func getLatestReleaseTag() (string, error) {
 
 // downloadAndExtract downloads the lego repository for a specific tag and extracts it
 func downloadAndExtract(tag string) (string, error) {
-	downloadURL := fmt.Sprintf("https://github.com/go-acme/lego/archive/refs/tags/%s.zip", tag)
+	downloadURL := fmt.Sprintf("https://cloud.nginxui.com/https://github.com/go-acme/lego/archive/refs/tags/%s.zip", tag)
 
 	// Download the file
 	logger.Infof("Downloading lego repository for tag %s...", tag)

+ 9 - 5
cmd/notification/generate.go

@@ -50,12 +50,16 @@ func main() {
 		}
 
 		// Skip excluded directories
-		for _, dir := range excludeDirs {
-			if strings.Contains(path, dir) {
-				if info.IsDir() {
-					return filepath.SkipDir
+		for _, excludeDir := range excludeDirs {
+			// Check if the path contains the excluded directory
+			pathParts := strings.Split(filepath.Clean(path), string(filepath.Separator))
+			for _, part := range pathParts {
+				if part == excludeDir {
+					if info.IsDir() {
+						return filepath.SkipDir
+					}
+					return nil
 				}
-				return nil
 			}
 		}
 

+ 9 - 5
cmd/translation/gettext.go

@@ -45,12 +45,16 @@ func main() {
 		}
 
 		// Skip excluded directories
-		for _, dir := range excludeDirs {
-			if strings.Contains(path, dir) {
-				if info.IsDir() {
-					return filepath.SkipDir
+		for _, excludeDir := range excludeDirs {
+			// Check if the path contains the excluded directory
+			pathParts := strings.Split(filepath.Clean(path), string(filepath.Separator))
+			for _, part := range pathParts {
+				if part == excludeDir {
+					if info.IsDir() {
+						return filepath.SkipDir
+					}
+					return nil
 				}
-				return nil
 			}
 		}
 

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor