Browse Source

refactor: self check

Jacky 2 months ago
parent
commit
63824d5724
34 changed files with 4133 additions and 2420 deletions
  1. 16 3
      app/src/api/self_check.ts
  2. 5 6
      app/src/components/SelfCheck/SelfCheck.vue
  3. 2 2
      app/src/components/SelfCheck/SelfCheckHeaderBanner.vue
  4. 29 4
      app/src/components/SelfCheck/store.ts
  5. 0 39
      app/src/components/SelfCheck/tasks/backend/index.ts
  6. 9 32
      app/src/components/SelfCheck/tasks/frontend/https-check.ts
  7. 14 27
      app/src/components/SelfCheck/tasks/frontend/websocket.ts
  8. 3 86
      app/src/components/SelfCheck/tasks/index.ts
  9. 5 18
      app/src/components/SelfCheck/tasks/types.ts
  10. 21 14
      app/src/constants/errors/self_check.ts
  11. 254 140
      app/src/language/ar/app.po
  12. 1 1
      app/src/language/container.ts
  13. 282 168
      app/src/language/de_DE/app.po
  14. 146 78
      app/src/language/en/app.po
  15. 273 162
      app/src/language/es/app.po
  16. 255 141
      app/src/language/fr_FR/app.po
  17. 40 18
      app/src/language/generate.ts
  18. 1 0
      app/src/language/index.ts
  19. 238 134
      app/src/language/ja_JP/app.po
  20. 269 143
      app/src/language/ko_KR/app.po
  21. 142 74
      app/src/language/messages.pot
  22. 249 144
      app/src/language/pt_PT/app.po
  23. 265 156
      app/src/language/ru_RU/app.po
  24. 278 166
      app/src/language/tr_TR/app.po
  25. 233 141
      app/src/language/uk_UA/app.po
  26. 248 140
      app/src/language/vi_VN/app.po
  27. 283 182
      app/src/language/zh_CN/app.po
  28. 312 157
      app/src/language/zh_TW/app.po
  29. 72 10
      cmd/translation/gettext.go
  30. 21 14
      internal/self_check/errors.go
  31. 78 0
      internal/self_check/nginx.go
  32. 1 1
      internal/self_check/nginx_conf.go
  33. 11 5
      internal/self_check/self_check.go
  34. 77 14
      internal/self_check/tasks.go

+ 16 - 3
app/src/api/self_check.ts

@@ -1,14 +1,27 @@
+import type { Container } from '@/language'
 import type { CosyError } from '@/lib/http'
 import http from '@/lib/http'
 import ws from '@/lib/websocket'
 
-export interface Report {
-  name: string
+export const ReportStatus = {
+  Success: 'success',
+  Warning: 'warning',
+  Error: 'error',
+} as const
+
+export type ReportStatusType = typeof ReportStatus[keyof typeof ReportStatus]
+
+export interface TaskReport {
+  key: string
+  name: Container
+  description: Container
+  fixable?: boolean
   err?: CosyError
+  status: ReportStatusType
 }
 
 const selfCheck = {
-  run(): Promise<Report[]> {
+  run(): Promise<TaskReport[]> {
     return http.get('/self_check')
   },
   fix(taskName: string) {

+ 5 - 6
app/src/components/SelfCheck/SelfCheck.vue

@@ -1,7 +1,6 @@
 <script setup lang="ts">
 import { CheckCircleOutlined, CloseCircleOutlined, WarningOutlined } from '@ant-design/icons-vue'
 import { useSelfCheckStore } from './store'
-import { taskManager } from './tasks'
 
 const store = useSelfCheckStore()
 
@@ -26,22 +25,22 @@ onMounted(() => {
     </template>
     <AList>
       <AListItem v-for="(item, index) in data" :key="index">
-        <template v-if="item.status === 'error'" #actions>
-          <AButton type="link" size="small" :loading="fixing[item.name]" @click="store.fix(item.name)">
+        <template v-if="item.status === 'error' && item.fixable" #actions>
+          <AButton type="link" size="small" :loading="fixing[item.key]" @click="store.fix(item.key)">
             {{ $gettext('Attempt to fix') }}
           </AButton>
         </template>
         <AListItemMeta>
           <template #title>
-            {{ taskManager.getTask(item.name)?.name?.() }}
+            {{ item.name?.() }}
           </template>
           <template #description>
             <div>
-              {{ taskManager.getTask(item.name)?.description?.() }}
+              {{ item.description?.() }}
             </div>
             <div v-if="item.status !== 'success'" class="mt-1">
               <ATag :color="item.status === 'warning' ? 'warning' : 'error'">
-                {{ item.message || item.err?.message || $gettext('Unknown issue') }}
+                {{ item.err?.message || $gettext('Unknown issue') }}
               </ATag>
             </div>
           </template>

+ 2 - 2
app/src/components/SelfCheck/SelfCheckHeaderBanner.vue

@@ -11,7 +11,7 @@ const props = defineProps<{
 
 const router = useRouter()
 const selfCheckStore = useSelfCheckStore()
-const { hasError } = storeToRefs(selfCheckStore)
+const { hasError, loading } = storeToRefs(selfCheckStore)
 
 const alertEl = useTemplateRef('alertEl')
 const { width: alertWidth } = useElementSize(alertEl)
@@ -32,7 +32,7 @@ onMounted(() => {
 </script>
 
 <template>
-  <div v-show="hasError">
+  <div v-show="hasError && !loading">
     <div ref="alertEl" class="self-check-alert" :style="{ visibility: shouldHideAlert ? 'hidden' : 'visible' }">
       <AAlert type="error" show-icon :message="$gettext('Self check failed, Nginx UI may not work properly')">
         <template #action>

+ 29 - 4
app/src/components/SelfCheck/store.ts

@@ -1,6 +1,7 @@
 import type { TaskReport } from './tasks'
+import selfCheck, { ReportStatus } from '@/api/self_check'
 import { debounce } from 'lodash'
-import { taskManager } from './tasks'
+import frontendTasks from './tasks/frontend'
 
 export const useSelfCheckStore = defineStore('selfCheck', () => {
   const data = ref<TaskReport[]>([])
@@ -14,7 +15,30 @@ export const useSelfCheckStore = defineStore('selfCheck', () => {
 
     loading.value = true
     try {
-      data.value = await taskManager.runAllChecks()
+      const backendReports = (await selfCheck.run()).map(r => {
+        return {
+          key: r.key,
+          name: () => $gettext(r.name.message, r.name.args),
+          description: () => $gettext(r.description.message, r.description.args),
+          type: 'backend' as const,
+          status: r.status,
+          fixable: r.fixable,
+          err: r.err,
+        }
+      })
+      const frontendReports = await Promise.all(
+        Object.entries(frontendTasks).map(async ([key, task]) => {
+          return {
+            key,
+            name: task.name,
+            description: task.description,
+            type: 'frontend' as const,
+            status: await task.check(),
+            fixable: false,
+          }
+        }),
+      )
+      data.value = [...backendReports, ...frontendReports]
     }
     catch (error) {
       console.error(error)
@@ -38,7 +62,8 @@ export const useSelfCheckStore = defineStore('selfCheck', () => {
 
     fixing[taskName] = true
     try {
-      await taskManager.fixTask(taskName)
+      await selfCheck.fix(taskName)
+      await nextTick()
       check()
     }
     finally {
@@ -47,7 +72,7 @@ export const useSelfCheckStore = defineStore('selfCheck', () => {
   }
 
   const hasError = computed(() => {
-    return requestError.value || data.value?.some(item => item.status === 'error')
+    return requestError.value || data.value?.some(item => item.status === ReportStatus.Error)
   })
 
   return { data, loading, fixing, hasError, check, fix }

+ 0 - 39
app/src/components/SelfCheck/tasks/backend/index.ts

@@ -1,39 +0,0 @@
-import type { BackendTask } from '../types'
-
-const backendTasks: Record<string, BackendTask> = {
-  'Directory-Sites': {
-    name: () => $gettext('Sites Directory'),
-    description: () => $gettext('Check if the sites-available and sites-enabled directories are under the nginx configuration directory.'),
-    type: 'backend',
-  },
-  'Directory-Streams': {
-    name: () => $gettext('Streams Directory'),
-    description: () => $gettext('Check if the streams-available and streams-enabled directories are under the nginx configuration directory.'),
-    type: 'backend',
-  },
-  'NginxConf-Sites-Enabled': {
-    name: () => $gettext('Nginx Conf Include Sites Enabled'),
-    description: () => $gettext('Check if the nginx.conf includes the sites-enabled directory.'),
-    type: 'backend',
-  },
-  'NginxConf-Streams-Enabled': {
-    name: () => $gettext('Nginx Conf Include Streams Enabled'),
-    description: () => $gettext('Check if the nginx.conf includes the streams-enabled directory.'),
-    type: 'backend',
-  },
-  'NginxConf-ConfD': {
-    name: () => $gettext('Nginx Conf Include Conf.d'),
-    description: () => $gettext('Check if the nginx.conf includes the conf.d directory.'),
-    type: 'backend',
-  },
-  'Docker-Socket': {
-    name: () => $gettext('Docker Socket'),
-    description: () => $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`.'),
-    type: 'backend',
-  },
-}
-
-export default backendTasks

+ 9 - 32
app/src/components/SelfCheck/tasks/frontend/https-check.ts

@@ -1,4 +1,6 @@
-import type { FrontendTask, TaskReport } from '../types'
+import type { ReportStatusType } from '@/api/self_check'
+import type { FrontendTask } from '../types'
+import { ReportStatus } from '@/api/self_check'
 
 /**
  * HTTPS Check Task
@@ -7,44 +9,19 @@ import type { FrontendTask, TaskReport } from '../types'
  * Warns (not errors) when HTTP is used outside of localhost/127.0.0.1
  */
 const HttpsCheckTask: FrontendTask = {
+  key: 'https-check',
   name: () => $gettext('HTTPS Protocol'),
-  description: () => $gettext('Check if HTTPS is enabled. Using HTTP outside localhost is insecure and prevents using Passkeys and clipboard features.'),
-  type: 'frontend',
-  check: async (): Promise<TaskReport> => {
+  description: () => $gettext('Check if HTTPS is enabled. Using HTTP outside localhost is insecure and prevents using Passkeys and clipboard features'),
+  check: async (): Promise<ReportStatusType> => {
     // Get current protocol and hostname
     const isSecure = window.location.protocol === 'https:'
     const isLocalhost = ['localhost', '127.0.0.1'].includes(window.location.hostname)
-
-    // Task name for the report
-    const name = 'Frontend-HttpsCheck'
-
     // Check result
-    if (isSecure) {
-      return {
-        name,
-        status: 'success',
-        type: 'frontend',
-        message: 'HTTPS protocol is enabled.',
-      }
-    }
-
-    if (isLocalhost) {
-      return {
-        name,
-        status: 'success',
-        type: 'frontend',
-        message: 'HTTP is acceptable for localhost.',
-      }
+    if (isSecure || isLocalhost) {
+      return ReportStatus.Success
     }
-
     // Return warning for non-localhost HTTP
-    return {
-      name,
-      status: 'warning',
-      type: 'frontend',
-      message: 'HTTP protocol detected. Consider enabling HTTPS for security features.',
-      err: new Error('HTTP protocol detected. Consider enabling HTTPS for security features.'),
-    }
+    return ReportStatus.Warning
   },
 }
 

+ 14 - 27
app/src/components/SelfCheck/tasks/frontend/websocket.ts

@@ -1,17 +1,20 @@
-import type { FrontendTask, TaskReport } from '../types'
-import selfCheck from '@/api/self_check'
+import type { ReportStatusType } from '@/api/self_check'
+import type { FrontendTask } from '../types'
+import selfCheck, { ReportStatus } from '@/api/self_check'
 
+/**
+ * WebSocket Task
+ *
+ * Checks if the application is able to connect to the backend through the WebSocket protocol
+ */
 const WebsocketTask: FrontendTask = {
+  key: 'websocket',
   name: () => 'WebSocket',
   description: () => $gettext('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'),
-  type: 'frontend',
-  check: async (): Promise<TaskReport> => {
-    // Task name for the report
-    const name = 'Frontend-Websocket'
-
+  check: async (): Promise<ReportStatusType> => {
     try {
       const connected = await new Promise<boolean>(resolve => {
         const ws = selfCheck.websocket()
@@ -28,31 +31,15 @@ const WebsocketTask: FrontendTask = {
       })
 
       if (connected) {
-        return {
-          name,
-          status: 'success',
-          type: 'frontend',
-          message: 'WebSocket connection successful.',
-        }
+        return ReportStatus.Success
       }
       else {
-        return {
-          name,
-          status: 'error',
-          type: 'frontend',
-          message: 'WebSocket connection failed.',
-          err: new Error('WebSocket connection failed.'),
-        }
+        return ReportStatus.Error
       }
     }
     catch (error) {
-      return {
-        name,
-        status: 'error',
-        type: 'frontend',
-        message: 'WebSocket connection error.',
-        err: error instanceof Error ? error : new Error(String(error)),
-      }
+      console.error(error)
+      return ReportStatus.Error
     }
   },
 }

+ 3 - 86
app/src/components/SelfCheck/tasks/index.ts

@@ -1,88 +1,5 @@
-import type { TaskDefinition, TaskReport, TaskStatus } from './types'
-import selfCheck from '@/api/self_check'
-import backendTasks from './backend'
-import frontendTasks from './frontend'
+import type { TaskReport } from './types'
 
-// Combine all tasks
-const allTasks: Record<string, TaskDefinition> = {
-  ...backendTasks,
-  ...frontendTasks,
+export {
+  type TaskReport,
 }
-
-// Task manager
-export const taskManager = {
-  // Get all task definitions
-  getAllTasks() {
-    return allTasks
-  },
-
-  // Execute all self-checks
-  async runAllChecks(): Promise<TaskReport[]> {
-    // Execute backend checks
-    const backendReports = await selfCheck.run()
-
-    // Convert backend reports to include status field
-    const convertedBackendReports = backendReports.map(report => {
-      const status: TaskStatus = report.err ? 'error' : 'success'
-      return {
-        ...report,
-        type: 'backend' as const,
-        status,
-      }
-    })
-
-    // Execute frontend checks - they now directly return TaskReport objects
-    const frontendReports = await Promise.all(
-      Object.entries(frontendTasks).map(async ([key, task]) => {
-        try {
-          return await task.check()
-        }
-        catch (err) {
-          // Fallback error handling in case a task throws instead of returning a report
-          return {
-            name: key,
-            type: 'frontend' as const,
-            status: 'error' as const,
-            message: 'Task execution failed',
-            err: err instanceof Error ? err : new Error(String(err)),
-          }
-        }
-      }),
-    )
-
-    // Merge results
-    return [
-      ...convertedBackendReports,
-      ...frontendReports,
-    ]
-  },
-
-  // Fix task
-  async fixTask(taskName: string): Promise<boolean> {
-    // Backend task
-    if (taskName in backendTasks) {
-      await selfCheck.fix(taskName)
-      return true
-    }
-
-    // Frontend task
-    if (taskName in frontendTasks) {
-      const task = frontendTasks[taskName]
-      if (task.fix) {
-        return await task.fix()
-      }
-      return false
-    }
-
-    return false
-  },
-
-  // Get task definition
-  getTask(taskName: string) {
-    return allTasks[taskName]
-  },
-}
-
-export default allTasks
-
-export * from './types'

+ 5 - 18
app/src/components/SelfCheck/tasks/types.ts

@@ -1,27 +1,14 @@
-import type { CosyError } from '@/lib/http'
+import type { ReportStatusType, TaskReport as SelfCheckTaskReport } from '@/api/self_check'
 
-export type TaskStatus = 'success' | 'warning' | 'error'
-
-export interface TaskDefinition {
+export interface TaskDefinition extends Pick<SelfCheckTaskReport, 'key' | 'fixable' | 'err'> {
   name: () => string
   description: () => string
-  type: 'backend' | 'frontend'
-}
-
-export interface BackendTask extends TaskDefinition {
-  type: 'backend'
 }
 
 export interface FrontendTask extends TaskDefinition {
-  type: 'frontend'
-  check: () => Promise<TaskReport>
-  fix?: () => Promise<boolean>
+  check: () => Promise<ReportStatusType>
 }
 
-export interface TaskReport {
-  name: string
-  status: TaskStatus
-  message?: string
-  err?: CosyError | Error
-  type: 'backend' | 'frontend'
+export interface TaskReport extends TaskDefinition {
+  status: ReportStatusType
 }

+ 21 - 14
app/src/constants/errors/self_check.ts

@@ -1,16 +1,23 @@
 export default {
-  4040: () => $gettext('Task not found'),
-  4041: () => $gettext('Failed to read nginx.conf'),
-  5001: () => $gettext('Failed to parse nginx.conf'),
-  4042: () => $gettext('Nginx conf no http block'),
-  4043: () => $gettext('Nginx conf not include sites-enabled'),
-  4044: () => $gettext('Nginx conf no stream block'),
-  4045: () => $gettext('Nginx conf not include stream-enabled'),
-  5002: () => $gettext('Failed to create backup'),
-  4046: () => $gettext('Sites-available directory not exist'),
-  4047: () => $gettext('Sites-enabled directory not exist'),
-  4048: () => $gettext('Streams-available directory not exist'),
-  4049: () => $gettext('Streams-enabled directory not exist'),
-  4050: () => $gettext('Nginx conf not include conf.d directory'),
-  4051: () => $gettext('Docker socket not exist'),
+  40400: () => $gettext('Task not found'),
+  40401: () => $gettext('Task is not fixable'),
+  40402: () => $gettext('Failed to read nginx.conf'),
+  50001: () => $gettext('Failed to parse nginx.conf'),
+  40403: () => $gettext('Nginx conf no http block'),
+  40404: () => $gettext('Nginx conf not include sites-enabled'),
+  40405: () => $gettext('Nginx conf no stream block'),
+  40406: () => $gettext('Nginx conf not include stream-enabled'),
+  50002: () => $gettext('Failed to create backup'),
+  40407: () => $gettext('Sites-available directory not exist'),
+  40408: () => $gettext('Sites-enabled directory not exist'),
+  40409: () => $gettext('Streams-available directory not exist'),
+  40410: () => $gettext('Streams-enabled directory not exist'),
+  40411: () => $gettext('Nginx conf not include conf.d directory'),
+  40412: () => $gettext('Docker socket not exist'),
+  40413: () => $gettext('Config directory not exist'),
+  40414: () => $gettext('Config entry file not exist'),
+  40415: () => $gettext('PID path not exist'),
+  40416: () => $gettext('Sbin path not exist'),
+  40417: () => $gettext('Access log path not exist'),
+  40418: () => $gettext('Error log path not exist'),
 }

+ 254 - 140
app/src/language/ar/app.po

@@ -4,59 +4,60 @@ msgid ""
 msgstr ""
 "PO-Revision-Date: 2024-10-29 14:39+0000\n"
 "Last-Translator: mosaati <mohammed.saati@gmail.com>\n"
-"Language-Team: Arabic "
-"<https://weblate.nginxui.com/projects/nginx-ui/frontend/ar/>\n"
+"Language-Team: Arabic <https://weblate.nginxui.com/projects/nginx-ui/"
+"frontend/ar/>\n"
 "Language: ar\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
 "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
 "X-Generator: Weblate 5.6.2\n"
 
-#: src/language/generate.ts:19
+#: src/language/generate.ts:47
 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}"
 msgstr ""
 "[Nginx UI] مستخدم ACME: %{name}، البريد الإلكتروني: %{email}، دليل CA: "
 "%{caDir}"
 
-#: src/language/generate.ts:13
+#: src/language/generate.ts:49
 msgid "[Nginx UI] Backing up current certificate for later revocation"
 msgstr "[Nginx UI] يتم إنشاء نسخة احتياطية من الشهادة الحالية لإلغائها لاحقًا"
 
-#: src/language/generate.ts:28
+#: src/language/generate.ts:6
 #, fuzzy
 msgid "[Nginx UI] Certificate renewed successfully"
 msgstr "تم المسح بنجاح"
 
-#: src/language/generate.ts:8
+#: src/language/generate.ts:37
 #, fuzzy
 msgid "[Nginx UI] Certificate successfully revoked"
 msgstr "تم إعادة تشغيل Nginx بنجاح"
 
-#: src/language/generate.ts:29
-msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate"
+#: src/language/generate.ts:13
+msgid ""
+"[Nginx UI] Certificate was used for server, reloading server TLS certificate"
 msgstr "[Nginx UI] تم استخدام الشهادة للخادم، إعادة تحميل شهادة TLS للخادم"
 
-#: src/language/generate.ts:24
+#: src/language/generate.ts:35
 #, fuzzy
 msgid "[Nginx UI] Creating client facilitates communication with the CA server"
 msgstr "يؤدي إنشاء العميل إلى تسهيل الاتصال بخادم CA"
 
-#: src/language/generate.ts:12
+#: src/language/generate.ts:36
 #, fuzzy
 msgid "[Nginx UI] Environment variables cleaned"
 msgstr "تم تنظيف متغيرات البيئة"
 
-#: src/language/generate.ts:21
+#: src/language/generate.ts:28
 msgid "[Nginx UI] Finished"
 msgstr "[Nginx UI] تم الانتهاء"
 
-#: src/language/generate.ts:4
+#: src/language/generate.ts:25
 #, fuzzy
 msgid "[Nginx UI] Issued certificate successfully"
 msgstr "تم إصدار الشهادة بنجاح"
 
-#: src/language/generate.ts:14
+#: src/language/generate.ts:50
 msgid "[Nginx UI] Obtaining certificate"
 msgstr "[Nginx UI] الحصول على الشهادة"
 
@@ -64,44 +65,44 @@ msgstr "[Nginx UI] الحصول على الشهادة"
 msgid "[Nginx UI] Preparing for certificate revocation"
 msgstr "[Nginx UI] التحضير لإلغاء الشهادة"
 
-#: src/language/generate.ts:18
+#: src/language/generate.ts:46
 msgid "[Nginx UI] Preparing lego configurations"
 msgstr "[Nginx UI] إعداد تكوينات ليغو"
 
-#: src/language/generate.ts:25
+#: src/language/generate.ts:19
 msgid "[Nginx UI] Reloading nginx"
 msgstr "[Nginx UI] إعادة تحميل nginx"
 
-#: src/language/generate.ts:16
+#: src/language/generate.ts:14
 msgid "[Nginx UI] Revocation completed"
 msgstr "[Nginx UI] اكتمال الإلغاء"
 
-#: src/language/generate.ts:7
+#: src/language/generate.ts:4
 msgid "[Nginx UI] Revoking certificate"
 msgstr "[Nginx UI] إلغاء الشهادة"
 
-#: src/language/generate.ts:26
+#: src/language/generate.ts:29
 msgid "[Nginx UI] Revoking old certificate"
 msgstr "[Nginx UI] إبطال الشهادة القديمة"
 
-#: src/language/generate.ts:20
+#: src/language/generate.ts:18
 msgid "[Nginx UI] Setting DNS01 challenge provider"
 msgstr "[Nginx UI] تعيين موفر تحدي DNS01"
 
-#: src/language/generate.ts:6
+#: src/language/generate.ts:27
 #, fuzzy
 msgid "[Nginx UI] Setting environment variables"
 msgstr "تعيين متغيرات البيئة"
 
-#: src/language/generate.ts:11
+#: src/language/generate.ts:48
 msgid "[Nginx UI] Setting HTTP01 challenge provider"
 msgstr "[Nginx UI] تعيين موفر تحدي HTTP01"
 
-#: src/language/generate.ts:15
+#: src/language/generate.ts:12
 msgid "[Nginx UI] Writing certificate private key to disk"
 msgstr "[Nginx UI] كتابة مفتاح الشهادة الخاص إلى القرص"
 
-#: src/language/generate.ts:27
+#: src/language/generate.ts:51
 msgid "[Nginx UI] Writing certificate to disk"
 msgstr "[Nginx UI] كتابة الشهادة على القرص"
 
@@ -122,6 +123,10 @@ msgstr "عن"
 msgid "Access Log"
 msgstr "سجلات الدخول"
 
+#: src/constants/errors/self_check.ts:21
+msgid "Access log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:90
 #: src/routes/modules/nginx_log.ts:17
 msgid "Access Logs"
@@ -337,7 +342,7 @@ msgstr "اطلب المساعدة من ChatGPT"
 msgid "Assistant"
 msgstr "المساعد"
 
-#: src/components/SelfCheck/SelfCheck.vue:31
+#: src/components/SelfCheck/SelfCheck.vue:30
 #, fuzzy
 msgid "Attempt to fix"
 msgstr "محاولات"
@@ -498,7 +503,8 @@ msgstr "ذاكرة التخزين المؤقت"
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178
 msgid "Cache items not accessed within this time will be removed"
-msgstr "سيتم إزالة عناصر الذاكرة المؤقتة التي لم يتم الوصول إليها خلال هذا الوقت"
+msgstr ""
+"سيتم إزالة عناصر الذاكرة المؤقتة التي لم يتم الوصول إليها خلال هذا الوقت"
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350
 msgid "Cache loader processing time threshold"
@@ -618,7 +624,7 @@ msgstr "انتهت صلاحية الشهادة"
 msgid "Certificate Expiring Soon"
 msgstr "شهادة على وشك الانتهاء"
 
-#: src/language/generate.ts:5
+#: src/language/generate.ts:33
 #, fuzzy
 msgid "Certificate not found: %{error}"
 msgstr "خطأ في فك تشفير الشهادة"
@@ -645,7 +651,7 @@ msgstr "الفاصل الزمني لتجديد الشهادة"
 msgid "Certificate renewed successfully"
 msgstr "تم المسح بنجاح"
 
-#: src/language/generate.ts:10
+#: src/language/generate.ts:11
 #, fuzzy
 msgid "Certificate revoked successfully"
 msgstr "تمت إزالة الشهادة بنجاح"
@@ -713,48 +719,70 @@ msgstr "تحقق مرة أخرى"
 msgid "Check again"
 msgstr "تحقق مرة أخرى"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:31
-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`."
-msgstr ""
-"تحقق مما إذا كان /var/run/docker.sock موجودًا. إذا كنت تستخدم صورة Docker "
-"الرسمية لـ Nginx UI، يرجى التأكد من أن مقبس Docker مثبت بهذه الطريقة: `-v "
-"/var/run/docker.sock:/var/run/docker.sock`."
-
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:11
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:14
+#, fuzzy
 msgid ""
 "Check if HTTPS is enabled. Using HTTP outside localhost is insecure and "
-"prevents using Passkeys and clipboard features."
+"prevents using Passkeys and clipboard features"
 msgstr ""
 "تحقق مما إذا كان HTTPS ممكّنًا. استخدام HTTP خارج localhost غير آمن ويمنع "
 "استخدام ميزات Passkeys والحافظة."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:26
-msgid "Check if the nginx.conf includes the conf.d directory."
+#: src/language/generate.ts:40
+msgid "Check if the docker socket exists."
+msgstr ""
+
+#: src/language/generate.ts:20
+msgid "Check if the nginx access log path exists"
+msgstr ""
+
+#: src/language/generate.ts:44
+#, fuzzy
+msgid "Check if the nginx configuration directory exists"
+msgstr "تحقق مما إذا كان ملف nginx.conf يتضمن دليل conf.d."
+
+#: src/language/generate.ts:9
+#, fuzzy
+msgid "Check if the nginx configuration entry file exists"
 msgstr "تحقق مما إذا كان ملف nginx.conf يتضمن دليل conf.d."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:16
-msgid "Check if the nginx.conf includes the sites-enabled directory."
+#: src/language/generate.ts:32
+msgid "Check if the nginx error log path exists"
+msgstr ""
+
+#: src/language/generate.ts:24
+msgid "Check if the nginx PID path exists"
+msgstr ""
+
+#: src/language/generate.ts:43
+#, fuzzy
+msgid "Check if the nginx.conf includes the conf.d directory"
+msgstr "تحقق مما إذا كان ملف nginx.conf يتضمن دليل conf.d."
+
+#: src/language/generate.ts:23
+#, fuzzy
+msgid "Check if the nginx.conf includes the sites-enabled directory"
 msgstr "تحقق مما إذا كان ملف nginx.conf يتضمن دليل sites-enabled."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:21
-msgid "Check if the nginx.conf includes the streams-enabled directory."
+#: src/language/generate.ts:5
+#, fuzzy
+msgid "Check if the nginx.conf includes the streams-enabled directory"
 msgstr "تحقق مما إذا كان ملف nginx.conf يتضمن دليل streams-enabled."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:6
+#: src/language/generate.ts:30
+#, fuzzy
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
-"nginx configuration directory."
+"nginx configuration directory"
 msgstr ""
 "تحقق مما إذا كانت الدلائل sites-available و sites-enabled موجودة ضمن دليل "
 "تكوين nginx."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:11
+#: src/language/generate.ts:38
+#, fuzzy
 msgid ""
-"Check if the streams-available and streams-enabled directories are under "
-"the nginx configuration directory."
+"Check if the streams-available and streams-enabled directories are under the "
+"nginx configuration directory"
 msgstr ""
 "تحقق مما إذا كانت الدلائل streams-available و streams-enabled موجودة ضمن "
 "دليل تكوين nginx."
@@ -855,6 +883,16 @@ msgstr "قارن مع التيار"
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr "مستوى الضغط ، 1 هو أدنى ، 9 هو الأعلى"
 
+#: src/constants/errors/self_check.ts:17
+#, fuzzy
+msgid "Config directory not exist"
+msgstr "قائمة السماح لمجلد سجلات Nginx"
+
+#: src/constants/errors/self_check.ts:18
+#, fuzzy
+msgid "Config entry file not exist"
+msgstr "قائمة السماح لمجلد سجلات Nginx"
+
 #: src/constants/errors/backup.ts:14
 #, fuzzy
 msgid "Config path is empty"
@@ -1346,11 +1384,11 @@ msgstr "هل تريد إزالة هذا المصدر؟"
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:30
-msgid "Docker Socket"
+#: src/language/generate.ts:10
+msgid "Docker socket exists"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:15
+#: src/constants/errors/self_check.ts:16
 msgid "Docker socket not exist"
 msgstr ""
 
@@ -1392,8 +1430,8 @@ msgid ""
 "Due to the security policies of some browsers, you cannot use passkeys on "
 "non-HTTPS websites, except when running on localhost."
 msgstr ""
-"نظرًا لسياسات الأمان لبعض المتصفحات، لا يمكنك استخدام مفاتيح المرور على "
-"مواقع الويب غير HTTPS، إلا عند التشغيل على localhost."
+"نظرًا لسياسات الأمان لبعض المتصفحات، لا يمكنك استخدام مفاتيح المرور على مواقع "
+"الويب غير HTTPS، إلا عند التشغيل على localhost."
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteList.vue:117
@@ -1596,6 +1634,10 @@ msgstr ""
 msgid "Error Log"
 msgstr "سجلات الأخطاء"
 
+#: src/constants/errors/self_check.ts:22
+msgid "Error log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:98
 #: src/routes/modules/nginx_log.ts:24
 msgid "Error Logs"
@@ -1688,7 +1730,7 @@ msgstr ""
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:9
+#: src/constants/errors/self_check.ts:10
 #, fuzzy
 msgid "Failed to create backup"
 msgstr "فشل في التفعيل %{msg}"
@@ -1785,7 +1827,7 @@ msgstr ""
 msgid "Failed to delete certificate"
 msgstr "فشل في الحصول على الشهادة"
 
-#: src/language/generate.ts:9
+#: src/language/generate.ts:26
 #, fuzzy
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "فشل في الحصول على الشهادة"
@@ -1904,7 +1946,7 @@ msgstr "فشل في التفعيل %{msg}"
 msgid "Failed to open zip file: {0}"
 msgstr "فشل في التفعيل %{msg}"
 
-#: src/constants/errors/self_check.ts:4
+#: src/constants/errors/self_check.ts:5
 msgid "Failed to parse nginx.conf"
 msgstr ""
 
@@ -1928,7 +1970,7 @@ msgstr "فشل في التفعيل %{msg}"
 msgid "Failed to read hash info file: {0}"
 msgstr "فشل في التفعيل %{msg}"
 
-#: src/constants/errors/self_check.ts:3
+#: src/constants/errors/self_check.ts:4
 #, fuzzy
 msgid "Failed to read nginx.conf"
 msgstr "فشل في التفعيل %{msg}"
@@ -2140,7 +2182,7 @@ msgstr "منفذ تحدي HTTP"
 msgid "HTTP01"
 msgstr "HTTP01"
 
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:13
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2154,8 +2196,8 @@ msgstr "إذا تُرك فارغًا، سيتم استخدام دليل CA ال
 
 #: src/views/nginx_log/NginxLogList.vue:81
 msgid ""
-"If logs are not indexed, please check if the log file is under the "
-"directory in Nginx.LogDirWhiteList."
+"If logs are not indexed, please check if the log file is under the directory "
+"in Nginx.LogDirWhiteList."
 msgstr ""
 
 #: src/views/preference/tabs/AuthSettings.vue:145
@@ -2499,8 +2541,11 @@ msgstr "أماكن"
 msgid "Log"
 msgstr "سجل"
 
-#: src/language/generate.ts:23
-msgid "Log file %{log_path} is not a regular file. "
+#: src/language/generate.ts:34
+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:67
@@ -2526,19 +2571,19 @@ msgstr "تدوير السجلات"
 
 #: src/views/preference/tabs/LogrotateSettings.vue:13
 msgid ""
-"Logrotate, by default, is enabled in most mainstream Linux distributions "
-"for users who install Nginx UI on the host machine, so you don't need to "
-"modify the parameters on this page. For users who install Nginx UI using "
-"Docker containers, you can manually enable this option. The crontab task "
-"scheduler of Nginx UI will execute the logrotate command at the interval "
-"you set in minutes."
+"Logrotate, by default, is enabled in most mainstream Linux distributions for "
+"users who install Nginx UI on the host machine, so you don't need to modify "
+"the parameters on this page. For users who install Nginx UI using Docker "
+"containers, you can manually enable this option. The crontab task scheduler "
+"of Nginx UI will execute the logrotate command at the interval you set in "
+"minutes."
 msgstr ""
 "بشكل افتراضي، يتم تفعيل تدوير السجلات في معظم توزيعات لينكس الرئيسية "
 "للمستخدمين الذين يقومون بتثبيت واجهة Nginx UI على الجهاز المضيف، لذا لا "
-"تحتاج إلى تعديل معايير في هذه الصفحة. بالنسبة للمستخدمين الذين يقومون "
-"بتثبيت واجهة Nginx UI باستخدام حاويات Docker، يمكنك تمكين هذا الخيار "
-"يدويًا. سيقوم مجدول المهام crontab الخاص بواجهة Nginx UI بتنفيذ أمر تدوير "
-"السجلات في الفاصل الزمني الذي تحدده بالدقائق."
+"تحتاج إلى تعديل معايير في هذه الصفحة. بالنسبة للمستخدمين الذين يقومون بتثبيت "
+"واجهة Nginx UI باستخدام حاويات Docker، يمكنك تمكين هذا الخيار يدويًا. سيقوم "
+"مجدول المهام crontab الخاص بواجهة Nginx UI بتنفيذ أمر تدوير السجلات في "
+"الفاصل الزمني الذي تحدده بالدقائق."
 
 #: src/views/site/components/SiteStatusSegmented.vue:138
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
@@ -2794,37 +2839,29 @@ msgstr "Nginx"
 msgid "Nginx Access Log Path"
 msgstr "مسار سجل الوصول لـ Nginx"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:25
+#: src/language/generate.ts:16
 #, fuzzy
-msgid "Nginx Conf Include Conf.d"
-msgstr "أمر إعادة تشغيل Nginx"
-
-#: src/components/SelfCheck/tasks/backend/index.ts:15
-msgid "Nginx Conf Include Sites Enabled"
-msgstr ""
-
-#: src/components/SelfCheck/tasks/backend/index.ts:20
-msgid "Nginx Conf Include Streams Enabled"
-msgstr ""
+msgid "Nginx access log path exists"
+msgstr "مسار سجل الوصول لـ Nginx"
 
-#: src/constants/errors/self_check.ts:5
+#: src/constants/errors/self_check.ts:6
 msgid "Nginx conf no http block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:7
+#: src/constants/errors/self_check.ts:8
 msgid "Nginx conf no stream block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:14
+#: src/constants/errors/self_check.ts:15
 #, fuzzy
 msgid "Nginx conf not include conf.d directory"
 msgstr "أمر إعادة تشغيل Nginx"
 
-#: src/constants/errors/self_check.ts:6
+#: src/constants/errors/self_check.ts:7
 msgid "Nginx conf not include sites-enabled"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:8
+#: src/constants/errors/self_check.ts:9
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 
@@ -2833,6 +2870,16 @@ msgstr ""
 msgid "Nginx config directory is not set"
 msgstr "قائمة السماح لمجلد سجلات Nginx"
 
+#: src/language/generate.ts:31
+#, fuzzy
+msgid "Nginx configuration directory exists"
+msgstr "مجلد تكوينات Nginx"
+
+#: src/language/generate.ts:15
+#, fuzzy
+msgid "Nginx configuration entry file exists"
+msgstr "خطأ في تحليل تكوين Nginx"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:138
 #, fuzzy
 msgid "Nginx configuration has been restored"
@@ -2870,6 +2917,11 @@ msgstr ""
 msgid "Nginx Error Log Path"
 msgstr "مسار سجل أخطاء Nginx"
 
+#: src/language/generate.ts:21
+#, fuzzy
+msgid "Nginx error log path exists"
+msgstr "مسار سجل أخطاء Nginx"
+
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/views/dashboard/NginxDashBoard.vue:112
@@ -2905,6 +2957,11 @@ msgstr ""
 msgid "Nginx PID Path"
 msgstr "مسار PID لـ Nginx"
 
+#: src/language/generate.ts:45
+#, fuzzy
+msgid "Nginx PID path exists"
+msgstr "مسار PID لـ Nginx"
+
 #: src/views/preference/tabs/NginxSettings.vue:40
 msgid "Nginx Reload Command"
 msgstr "أمر إعادة تحميل Nginx"
@@ -2963,10 +3020,25 @@ msgstr "خطأ في تحليل تكوين Nginx"
 #: src/components/SystemRestore/SystemRestoreContent.vue:336
 #, fuzzy
 msgid ""
-"Nginx UI configuration has been restored and will restart automatically in "
-"a few seconds."
+"Nginx UI configuration has been restored and will restart automatically in a "
+"few seconds."
 msgstr "خطأ في تحليل تكوين Nginx"
 
+#: src/language/generate.ts:8
+#, fuzzy
+msgid "Nginx.conf includes conf.d directory"
+msgstr "أمر إعادة تشغيل Nginx"
+
+#: src/language/generate.ts:42
+#, fuzzy
+msgid "Nginx.conf includes sites-enabled directory"
+msgstr "تحقق مما إذا كان ملف nginx.conf يتضمن دليل sites-enabled."
+
+#: src/language/generate.ts:39
+#, fuzzy
+msgid "Nginx.conf includes streams-enabled directory"
+msgstr "تحقق مما إذا كان ملف nginx.conf يتضمن دليل streams-enabled."
+
 #: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
@@ -3307,6 +3379,10 @@ msgstr "تم التعطيل بنجاح"
 msgid "Performing core upgrade"
 msgstr "تنفيذ ترقية النواة"
 
+#: src/constants/errors/self_check.ts:19
+msgid "PID path not exist"
+msgstr ""
+
 #: src/constants/errors/crypto.ts:2
 msgid "Plain text is empty"
 msgstr ""
@@ -3321,7 +3397,8 @@ msgstr ""
 msgid ""
 "Please enter a name for the passkey you wish to create and click the OK "
 "button below."
-msgstr "يرجى إدخال اسم لمفتاح المرور الذي ترغب في إنشائه ثم انقر على زر موافق أدناه."
+msgstr ""
+"يرجى إدخال اسم لمفتاح المرور الذي ترغب في إنشائه ثم انقر على زر موافق أدناه."
 
 #: src/components/TwoFA/Authorization.vue:85
 msgid "Please enter the OTP code:"
@@ -3358,8 +3435,8 @@ msgstr ""
 #: src/components/Notification/notifications.ts:166
 #: src/language/constants.ts:59
 msgid ""
-"Please generate new recovery codes in the preferences immediately to "
-"prevent lockout."
+"Please generate new recovery codes in the preferences immediately to prevent "
+"lockout."
 msgstr ""
 
 #: src/views/config/components/Rename.vue:65
@@ -3401,7 +3478,8 @@ msgid "Please log in."
 msgstr ""
 
 #: src/views/certificate/DNSCredential.vue:62
-msgid "Please note that the unit of time configurations below are all in seconds."
+msgid ""
+"Please note that the unit of time configurations below are all in seconds."
 msgstr "يرجى ملاحظة أن تكوين وحدات الوقت أدناه كلها بالثواني."
 
 #: src/views/install/components/InstallView.vue:100
@@ -3510,7 +3588,7 @@ msgstr "يقرأ"
 msgid "Receive"
 msgstr "يستقبل"
 
-#: src/components/SelfCheck/SelfCheck.vue:24
+#: src/components/SelfCheck/SelfCheck.vue:23
 msgid "Recheck"
 msgstr ""
 
@@ -3968,6 +4046,10 @@ msgstr "تم الحفظ بنجاح"
 msgid "Saved successfully"
 msgstr "تم الحفظ بنجاح"
 
+#: src/constants/errors/self_check.ts:20
+msgid "Sbin path not exist"
+msgstr ""
+
 #: src/views/preference/components/AuthSettings/TOTP.vue:69
 msgid "Scan the QR code with your mobile phone to add the account to the app."
 msgstr "امسح رمز الاستجابة السريعة بهاتفك المحمول لإضافة الحساب إلى التطبيق."
@@ -3998,7 +4080,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 ""
 
@@ -4069,14 +4151,14 @@ msgstr "تعيين موفر تحدي HTTP01"
 
 #: src/constants/errors/nginx_log.ts:8
 msgid ""
-"Settings.NginxLogSettings.AccessLogPath is empty, refer to "
-"https://nginxui.com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui."
+"com/guide/config-nginx.html for more information"
 msgstr ""
 
 #: src/constants/errors/nginx_log.ts:7
 msgid ""
-"Settings.NginxLogSettings.ErrorLogPath is empty, refer to "
-"https://nginxui.com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui."
+"com/guide/config-nginx.html for more information"
 msgstr ""
 
 #: src/views/install/components/InstallView.vue:64
@@ -4123,21 +4205,21 @@ msgstr "سجلات الموقع"
 msgid "Site not found"
 msgstr "لم يتم العثور على الملف"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:5
+#: src/language/generate.ts:7
 #, fuzzy
-msgid "Sites Directory"
+msgid "Sites directory exists"
 msgstr "مجلد"
 
 #: src/routes/modules/sites.ts:19
 msgid "Sites List"
 msgstr "قائمة المواقع"
 
-#: src/constants/errors/self_check.ts:10
+#: src/constants/errors/self_check.ts:11
 #, fuzzy
 msgid "Sites-available directory not exist"
 msgstr "مجلد"
 
-#: src/constants/errors/self_check.ts:11
+#: src/constants/errors/self_check.ts:12
 #, fuzzy
 msgid "Sites-enabled directory not exist"
 msgstr "مجلد"
@@ -4245,17 +4327,17 @@ msgstr "معطل"
 msgid "Stream not found"
 msgstr "لم يتم العثور على الملف"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:10
+#: src/language/generate.ts:41
 #, fuzzy
-msgid "Streams Directory"
+msgid "Streams directory exists"
 msgstr "مجلد"
 
-#: src/constants/errors/self_check.ts:12
+#: src/constants/errors/self_check.ts:13
 #, fuzzy
 msgid "Streams-available directory not exist"
 msgstr "مجلد"
 
-#: src/constants/errors/self_check.ts:13
+#: src/constants/errors/self_check.ts:14
 #, fuzzy
 msgid "Streams-enabled directory not exist"
 msgstr "مجلد"
@@ -4268,12 +4350,12 @@ msgstr ""
 msgid "Success"
 msgstr "نجاح"
 
-#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
+#: 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"
+"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/SystemRestore/SystemRestoreContent.vue:197
@@ -4387,6 +4469,11 @@ msgstr "نظام"
 msgid "System restored successfully."
 msgstr "تم إعادة تشغيل Nginx بنجاح"
 
+#: src/constants/errors/self_check.ts:3
+#, fuzzy
+msgid "Task is not fixable"
+msgstr "الرمز غير صالح"
+
 #: src/constants/errors/self_check.ts:2
 #, fuzzy
 msgid "Task not found"
@@ -4437,8 +4524,7 @@ msgstr "المدخل ليس مفتاح شهادة SSL"
 
 #: src/constants/errors/nginx_log.ts:2
 msgid ""
-"The log path is not under the paths in "
-"settings.NginxSettings.LogDirWhiteList"
+"The log path is not under the paths in settings.NginxSettings.LogDirWhiteList"
 msgstr ""
 
 #: src/views/preference/tabs/OpenAISettings.vue:23
@@ -4450,7 +4536,8 @@ msgid ""
 msgstr "يجب أن يحتوي اسم النموذج على حروف وأرقام ويونيكود وشرطات ونقاط فقط."
 
 #: src/views/preference/tabs/OpenAISettings.vue:90
-msgid "The model used for code completion, if not set, the chat model will be used."
+msgid ""
+"The model used for code completion, if not set, the chat model will be used."
 msgstr ""
 
 #: src/views/preference/tabs/NodeSettings.vue:18
@@ -4558,7 +4645,8 @@ msgid "This field should not be empty"
 msgstr "يجب ألا يكون هذا الحقل فارغًا"
 
 #: src/constants/form_errors.ts:6
-msgid "This field should only contain letters, unicode characters, numbers, and -_."
+msgid ""
+"This field should only contain letters, unicode characters, numbers, and -_."
 msgstr "يجب أن يحتوي هذا الحقل على حروف وأحرف يونيكود وأرقام و-_. فقط."
 
 #: src/views/dashboard/NginxDashBoard.vue:153
@@ -4598,7 +4686,8 @@ msgid ""
 msgstr ""
 
 #: src/views/environments/list/BatchUpgrader.vue:182
-msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
+msgid ""
+"This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr "سيتم ترقية أو إعادة تثبيت Nginx UI على %{nodeNames} إلى %{version}."
 
 #: src/views/preference/tabs/AuthSettings.vue:124
@@ -4646,8 +4735,8 @@ msgstr ""
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:15
 msgid ""
 "To make sure the certification auto-renewal can work normally, we need to "
-"add a location which can proxy the request from authority to backend, and "
-"we need to save this file and reload the Nginx. Are you sure you want to "
+"add a location which can proxy the request from authority to backend, and we "
+"need to save this file and reload the Nginx. Are you sure you want to "
 "continue?"
 msgstr ""
 "لضمان عمل تجديد الشهادة التلقائي بشكل طبيعي، نحتاج إلى إضافة موقع يمكنه "
@@ -4662,8 +4751,8 @@ msgid ""
 "local API."
 msgstr ""
 "لاستخدام نموذج كبير محلي، قم بنشره باستخدام vllm أو lmdeploy. فهي توفر نقطة "
-"نهاية API متوافقة مع OpenAI، لذا قم فقط بتعيين baseUrl إلىAPI المحلية "
-"الخاصة بك."
+"نهاية API متوافقة مع OpenAI، لذا قم فقط بتعيين baseUrl إلىAPI المحلية الخاصة "
+"بك."
 
 #: src/views/dashboard/NginxDashBoard.vue:57
 #, fuzzy
@@ -4742,7 +4831,7 @@ msgstr "نوع"
 msgid "Unknown"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:44
+#: src/components/SelfCheck/SelfCheck.vue:43
 msgid "Unknown issue"
 msgstr ""
 
@@ -4910,8 +4999,8 @@ msgstr "سنضيف سجل أو أكثر من سجلات TXT إلى سجلات DN
 
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:140
 msgid ""
-"We will remove the HTTPChallenge configuration from this file and reload "
-"the Nginx. Are you sure you want to continue?"
+"We will remove the HTTPChallenge configuration from this file and reload the "
+"Nginx. Are you sure you want to continue?"
 msgstr ""
 "سنقوم بإزالة تكوين HTTPChallenge من هذا الملف وإعادة تحميل Nginx. هل أنت "
 "متأكد أنك تريد المتابعة؟"
@@ -5003,8 +5092,8 @@ msgstr "نعم"
 
 #: src/views/terminal/Terminal.vue:135
 msgid ""
-"You are accessing this terminal over an insecure HTTP connection on a "
-"non-localhost domain. This may expose sensitive information."
+"You are accessing this terminal over an insecure HTTP connection on a non-"
+"localhost domain. This may expose sensitive information."
 msgstr ""
 
 #: src/views/system/Upgrade.vue:202
@@ -5030,7 +5119,8 @@ msgid ""
 msgstr "لم تقم بتكوين إعدادات Webauthn، لذا لا يمكنك إضافة مفتاح مرور."
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81
-msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
+msgid ""
+"You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
 msgstr ""
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94
@@ -5052,6 +5142,23 @@ msgstr ""
 msgid "Your passkeys"
 msgstr "مفاتيح المرور الخاصة بك"
 
+#~ 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`."
+#~ msgstr ""
+#~ "تحقق مما إذا كان /var/run/docker.sock موجودًا. إذا كنت تستخدم صورة Docker "
+#~ "الرسمية لـ Nginx UI، يرجى التأكد من أن مقبس Docker مثبت بهذه الطريقة: `-"
+#~ "v /var/run/docker.sock:/var/run/docker.sock`."
+
+#, fuzzy
+#~ msgid "Nginx Conf Include Conf.d"
+#~ msgstr "أمر إعادة تشغيل Nginx"
+
+#, fuzzy
+#~ msgid "Sites Directory"
+#~ msgstr "مجلد"
+
 #~ msgid "Format error %{msg}"
 #~ msgstr "خطأ في التنسيق %{msg}"
 
@@ -5060,8 +5167,8 @@ msgstr "مفاتيح المرور الخاصة بك"
 
 #, fuzzy
 #~ msgid ""
-#~ "When you enable/disable, delete, or save this stream, the nodes set in the "
-#~ "Node Group and the nodes selected below will be synchronized."
+#~ "When you enable/disable, delete, or save this stream, the nodes set in "
+#~ "the Node Group and the nodes selected below will be synchronized."
 #~ msgstr ""
 #~ "عند تفعيل/تعطيل، حذف، أو حفظ هذا الموقع، سيتم مزامنة العقد المحددة في فئة "
 #~ "الموقع والعقد المحددة أدناه."
@@ -5128,12 +5235,15 @@ msgstr "مفاتيح المرور الخاصة بك"
 #~ msgid "Please upgrade the remote Nginx UI to the latest version"
 #~ msgstr "يرجى ترقية واجهة Nginx البعيدة إلى أحدث إصدار"
 
-#~ msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: %{resp}"
+#~ msgid ""
+#~ "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: "
+#~ "%{resp}"
 #~ msgstr ""
 #~ "فشل إعادة تسمية %{orig_path} إلى %{new_path} على %{env_name}، الاستجابة: "
 #~ "%{resp}"
 
-#~ msgid "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
+#~ msgid ""
+#~ "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
 #~ msgstr ""
 #~ "خطأ في إعادة تسمية الموقع %{site} إلى %{new_site} على %{node}، الاستجابة: "
 #~ "%{resp}"
@@ -5148,18 +5258,20 @@ msgstr "مفاتيح المرور الخاصة بك"
 #~ "فشل مزامنة الشهادة %{cert_name} إلى %{env_name}، يرجى ترقية واجهة Nginx "
 #~ "البعيدة إلى أحدث إصدار"
 
-#~ msgid "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
+#~ msgid ""
+#~ "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
 #~ msgstr "فشل مزامنة الشهادة %{cert_name} إلى %{env_name}، الاستجابة: %{resp}"
 
 #~ msgid "Sync config %{config_name} to %{env_name} failed, response: %{resp}"
-#~ msgstr "فشل مزامنة التكوين %{config_name} إلى %{env_name}، الاستجابة: %{resp}"
+#~ msgstr ""
+#~ "فشل مزامنة التكوين %{config_name} إلى %{env_name}، الاستجابة: %{resp}"
 
 #~ msgid "Target"
 #~ msgstr "الهدف"
 
 #~ msgid ""
-#~ "If you lose your mobile phone, you can use the recovery code to reset your "
-#~ "2FA."
+#~ "If you lose your mobile phone, you can use the recovery code to reset "
+#~ "your 2FA."
 #~ msgstr ""
 #~ "إذا فقدت هاتفك المحمول، يمكنك استخدام رمز الاسترداد لإعادة تعيين المصادقة "
 #~ "الثنائية."
@@ -5167,7 +5279,8 @@ msgstr "مفاتيح المرور الخاصة بك"
 #~ msgid "Recovery Code:"
 #~ msgstr "رمز الاسترداد:"
 
-#~ msgid "The recovery code is only displayed once, please save it in a safe place."
+#~ msgid ""
+#~ "The recovery code is only displayed once, please save it in a safe place."
 #~ msgstr "رمز الاسترداد يُعرض مرة واحدة فقط، يرجى حفظه في مكان آمن."
 
 #~ msgid "Can't scan? Use text key binding"
@@ -5183,4 +5296,5 @@ msgstr "مفاتيح المرور الخاصة بك"
 #~ msgstr "اسم المستخدم أو كلمة المرور غير صحيحة"
 
 #~ msgid "Too many login failed attempts, please try again later"
-#~ msgstr "عدد كبير جدًا من محاولات تسجيل الدخول الفاشلة، يرجى المحاولة مرة أخرى لاحقًا"
+#~ msgstr ""
+#~ "عدد كبير جدًا من محاولات تسجيل الدخول الفاشلة، يرجى المحاولة مرة أخرى لاحقًا"

+ 1 - 1
app/src/language/container.ts

@@ -1,7 +1,7 @@
 export interface Container {
   message: string
   // eslint-disable-next-line ts/no-explicit-any
-  args: Record<string, any>
+  args?: Record<string, any>
 }
 
 function T(container: Container): string {

File diff suppressed because it is too large
+ 282 - 168
app/src/language/de_DE/app.po


+ 146 - 78
app/src/language/en/app.po

@@ -1,41 +1,41 @@
-#: src/language/generate.ts:19
+#: src/language/generate.ts:47
 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}"
 msgstr ""
 
-#: src/language/generate.ts:13
+#: src/language/generate.ts:49
 msgid "[Nginx UI] Backing up current certificate for later revocation"
 msgstr ""
 
-#: src/language/generate.ts:28
+#: src/language/generate.ts:6
 msgid "[Nginx UI] Certificate renewed successfully"
 msgstr ""
 
-#: src/language/generate.ts:8
+#: src/language/generate.ts:37
 msgid "[Nginx UI] Certificate successfully revoked"
 msgstr ""
 
-#: src/language/generate.ts:29
+#: src/language/generate.ts:13
 msgid ""
 "[Nginx UI] Certificate was used for server, reloading server TLS certificate"
 msgstr ""
 
-#: src/language/generate.ts:24
+#: src/language/generate.ts:35
 msgid "[Nginx UI] Creating client facilitates communication with the CA server"
 msgstr ""
 
-#: src/language/generate.ts:12
+#: src/language/generate.ts:36
 msgid "[Nginx UI] Environment variables cleaned"
 msgstr ""
 
-#: src/language/generate.ts:21
+#: src/language/generate.ts:28
 msgid "[Nginx UI] Finished"
 msgstr ""
 
-#: src/language/generate.ts:4
+#: src/language/generate.ts:25
 msgid "[Nginx UI] Issued certificate successfully"
 msgstr ""
 
-#: src/language/generate.ts:14
+#: src/language/generate.ts:50
 msgid "[Nginx UI] Obtaining certificate"
 msgstr ""
 
@@ -43,43 +43,43 @@ msgstr ""
 msgid "[Nginx UI] Preparing for certificate revocation"
 msgstr ""
 
-#: src/language/generate.ts:18
+#: src/language/generate.ts:46
 msgid "[Nginx UI] Preparing lego configurations"
 msgstr ""
 
-#: src/language/generate.ts:25
+#: src/language/generate.ts:19
 msgid "[Nginx UI] Reloading nginx"
 msgstr ""
 
-#: src/language/generate.ts:16
+#: src/language/generate.ts:14
 msgid "[Nginx UI] Revocation completed"
 msgstr ""
 
-#: src/language/generate.ts:7
+#: src/language/generate.ts:4
 msgid "[Nginx UI] Revoking certificate"
 msgstr ""
 
-#: src/language/generate.ts:26
+#: src/language/generate.ts:29
 msgid "[Nginx UI] Revoking old certificate"
 msgstr ""
 
-#: src/language/generate.ts:20
+#: src/language/generate.ts:18
 msgid "[Nginx UI] Setting DNS01 challenge provider"
 msgstr ""
 
-#: src/language/generate.ts:6
+#: src/language/generate.ts:27
 msgid "[Nginx UI] Setting environment variables"
 msgstr ""
 
-#: src/language/generate.ts:11
+#: src/language/generate.ts:48
 msgid "[Nginx UI] Setting HTTP01 challenge provider"
 msgstr ""
 
-#: src/language/generate.ts:15
+#: src/language/generate.ts:12
 msgid "[Nginx UI] Writing certificate private key to disk"
 msgstr ""
 
-#: src/language/generate.ts:27
+#: src/language/generate.ts:51
 msgid "[Nginx UI] Writing certificate to disk"
 msgstr ""
 
@@ -99,6 +99,10 @@ msgstr ""
 msgid "Access Log"
 msgstr ""
 
+#: src/constants/errors/self_check.ts:21
+msgid "Access log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:90
 #: src/routes/modules/nginx_log.ts:17
 msgid "Access Logs"
@@ -307,7 +311,7 @@ msgstr ""
 msgid "Assistant"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:31
+#: src/components/SelfCheck/SelfCheck.vue:30
 msgid "Attempt to fix"
 msgstr ""
 
@@ -578,7 +582,7 @@ msgstr ""
 msgid "Certificate Expiring Soon"
 msgstr ""
 
-#: src/language/generate.ts:5
+#: src/language/generate.ts:33
 msgid "Certificate not found: %{error}"
 msgstr ""
 
@@ -603,7 +607,7 @@ msgstr ""
 msgid "Certificate renewed successfully"
 msgstr ""
 
-#: src/language/generate.ts:10
+#: src/language/generate.ts:11
 msgid "Certificate revoked successfully"
 msgstr ""
 
@@ -661,41 +665,58 @@ msgstr ""
 msgid "Check again"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:31
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:14
 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`."
+"Check if HTTPS is enabled. Using HTTP outside localhost is insecure and "
+"prevents using Passkeys and clipboard features"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:11
-msgid ""
-"Check if HTTPS is enabled. Using HTTP outside localhost is insecure and "
-"prevents using Passkeys and clipboard features."
+#: src/language/generate.ts:40
+msgid "Check if the docker socket exists."
+msgstr ""
+
+#: src/language/generate.ts:20
+msgid "Check if the nginx access log path exists"
+msgstr ""
+
+#: src/language/generate.ts:44
+msgid "Check if the nginx configuration directory exists"
+msgstr ""
+
+#: src/language/generate.ts:9
+msgid "Check if the nginx configuration entry file exists"
+msgstr ""
+
+#: src/language/generate.ts:32
+msgid "Check if the nginx error log path exists"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:26
-msgid "Check if the nginx.conf includes the conf.d directory."
+#: src/language/generate.ts:24
+msgid "Check if the nginx PID path exists"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:16
-msgid "Check if the nginx.conf includes the sites-enabled directory."
+#: src/language/generate.ts:43
+msgid "Check if the nginx.conf includes the conf.d directory"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:21
-msgid "Check if the nginx.conf includes the streams-enabled directory."
+#: src/language/generate.ts:23
+msgid "Check if the nginx.conf includes the sites-enabled directory"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:6
+#: src/language/generate.ts:5
+msgid "Check if the nginx.conf includes the streams-enabled directory"
+msgstr ""
+
+#: src/language/generate.ts:30
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
-"nginx configuration directory."
+"nginx configuration directory"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:11
+#: src/language/generate.ts:38
 msgid ""
 "Check if the streams-available and streams-enabled directories are under the "
-"nginx configuration directory."
+"nginx configuration directory"
 msgstr ""
 
 #: src/constants/errors/crypto.ts:3
@@ -793,6 +814,14 @@ msgstr ""
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr ""
 
+#: src/constants/errors/self_check.ts:17
+msgid "Config directory not exist"
+msgstr ""
+
+#: src/constants/errors/self_check.ts:18
+msgid "Config entry file not exist"
+msgstr ""
+
 #: src/constants/errors/backup.ts:14
 msgid "Config path is empty"
 msgstr ""
@@ -1254,11 +1283,11 @@ msgstr ""
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:30
-msgid "Docker Socket"
+#: src/language/generate.ts:10
+msgid "Docker socket exists"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:15
+#: src/constants/errors/self_check.ts:16
 msgid "Docker socket not exist"
 msgstr ""
 
@@ -1483,6 +1512,10 @@ msgstr ""
 msgid "Error Log"
 msgstr ""
 
+#: src/constants/errors/self_check.ts:22
+msgid "Error log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:98
 #: src/routes/modules/nginx_log.ts:24
 msgid "Error Logs"
@@ -1570,7 +1603,7 @@ msgstr ""
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:9
+#: src/constants/errors/self_check.ts:10
 msgid "Failed to create backup"
 msgstr ""
 
@@ -1650,7 +1683,7 @@ msgstr ""
 msgid "Failed to delete certificate"
 msgstr ""
 
-#: src/language/generate.ts:9
+#: src/language/generate.ts:26
 msgid "Failed to delete certificate from database: %{error}"
 msgstr ""
 
@@ -1750,7 +1783,7 @@ msgstr ""
 msgid "Failed to open zip file: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:4
+#: src/constants/errors/self_check.ts:5
 msgid "Failed to parse nginx.conf"
 msgstr ""
 
@@ -1770,7 +1803,7 @@ msgstr ""
 msgid "Failed to read hash info file: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:3
+#: src/constants/errors/self_check.ts:4
 msgid "Failed to read nginx.conf"
 msgstr ""
 
@@ -1965,7 +1998,7 @@ msgstr ""
 msgid "HTTP01"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:13
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2303,8 +2336,11 @@ msgstr ""
 msgid "Log"
 msgstr ""
 
-#: src/language/generate.ts:23
-msgid "Log file %{log_path} is not a regular file. "
+#: src/language/generate.ts:34
+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:67
@@ -2581,35 +2617,27 @@ msgstr ""
 msgid "Nginx Access Log Path"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:25
-msgid "Nginx Conf Include Conf.d"
-msgstr ""
-
-#: src/components/SelfCheck/tasks/backend/index.ts:15
-msgid "Nginx Conf Include Sites Enabled"
-msgstr ""
-
-#: src/components/SelfCheck/tasks/backend/index.ts:20
-msgid "Nginx Conf Include Streams Enabled"
+#: src/language/generate.ts:16
+msgid "Nginx access log path exists"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:5
+#: src/constants/errors/self_check.ts:6
 msgid "Nginx conf no http block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:7
+#: src/constants/errors/self_check.ts:8
 msgid "Nginx conf no stream block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:14
+#: src/constants/errors/self_check.ts:15
 msgid "Nginx conf not include conf.d directory"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:6
+#: src/constants/errors/self_check.ts:7
 msgid "Nginx conf not include sites-enabled"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:8
+#: src/constants/errors/self_check.ts:9
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 
@@ -2617,6 +2645,14 @@ msgstr ""
 msgid "Nginx config directory is not set"
 msgstr ""
 
+#: src/language/generate.ts:31
+msgid "Nginx configuration directory exists"
+msgstr ""
+
+#: src/language/generate.ts:15
+msgid "Nginx configuration entry file exists"
+msgstr ""
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:138
 msgid "Nginx configuration has been restored"
 msgstr ""
@@ -2651,6 +2687,10 @@ msgstr ""
 msgid "Nginx Error Log Path"
 msgstr ""
 
+#: src/language/generate.ts:21
+msgid "Nginx error log path exists"
+msgstr ""
+
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/views/dashboard/NginxDashBoard.vue:112
@@ -2684,6 +2724,10 @@ msgstr ""
 msgid "Nginx PID Path"
 msgstr ""
 
+#: src/language/generate.ts:45
+msgid "Nginx PID path exists"
+msgstr ""
+
 #: src/views/preference/tabs/NginxSettings.vue:40
 msgid "Nginx Reload Command"
 msgstr ""
@@ -2740,6 +2784,18 @@ msgid ""
 "few seconds."
 msgstr ""
 
+#: src/language/generate.ts:8
+msgid "Nginx.conf includes conf.d directory"
+msgstr ""
+
+#: src/language/generate.ts:42
+msgid "Nginx.conf includes sites-enabled directory"
+msgstr ""
+
+#: src/language/generate.ts:39
+msgid "Nginx.conf includes streams-enabled directory"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
@@ -3061,6 +3117,10 @@ msgstr ""
 msgid "Performing core upgrade"
 msgstr ""
 
+#: src/constants/errors/self_check.ts:19
+msgid "PID path not exist"
+msgstr ""
+
 #: src/constants/errors/crypto.ts:2
 msgid "Plain text is empty"
 msgstr ""
@@ -3256,7 +3316,7 @@ msgstr ""
 msgid "Receive"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:24
+#: src/components/SelfCheck/SelfCheck.vue:23
 msgid "Recheck"
 msgstr ""
 
@@ -3682,6 +3742,10 @@ msgstr ""
 msgid "Saved successfully"
 msgstr ""
 
+#: src/constants/errors/self_check.ts:20
+msgid "Sbin path not exist"
+msgstr ""
+
 #: src/views/preference/components/AuthSettings/TOTP.vue:69
 msgid "Scan the QR code with your mobile phone to add the account to the app."
 msgstr ""
@@ -3711,7 +3775,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 ""
 
@@ -3827,19 +3891,19 @@ msgstr ""
 msgid "Site not found"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:5
-msgid "Sites Directory"
+#: src/language/generate.ts:7
+msgid "Sites directory exists"
 msgstr ""
 
 #: src/routes/modules/sites.ts:19
 msgid "Sites List"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:10
+#: src/constants/errors/self_check.ts:11
 msgid "Sites-available directory not exist"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:11
+#: src/constants/errors/self_check.ts:12
 msgid "Sites-enabled directory not exist"
 msgstr ""
 
@@ -3940,15 +4004,15 @@ msgstr ""
 msgid "Stream not found"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:10
-msgid "Streams Directory"
+#: src/language/generate.ts:41
+msgid "Streams directory exists"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:12
+#: src/constants/errors/self_check.ts:13
 msgid "Streams-available directory not exist"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:13
+#: src/constants/errors/self_check.ts:14
 msgid "Streams-enabled directory not exist"
 msgstr ""
 
@@ -3960,7 +4024,7 @@ msgstr ""
 msgid "Success"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
+#: 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 "
@@ -4072,6 +4136,10 @@ msgstr ""
 msgid "System restored successfully."
 msgstr ""
 
+#: src/constants/errors/self_check.ts:3
+msgid "Task is not fixable"
+msgstr ""
+
 #: src/constants/errors/self_check.ts:2
 msgid "Task not found"
 msgstr ""
@@ -4393,7 +4461,7 @@ msgstr ""
 msgid "Unknown"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:44
+#: src/components/SelfCheck/SelfCheck.vue:43
 msgid "Unknown issue"
 msgstr ""
 

File diff suppressed because it is too large
+ 273 - 162
app/src/language/es/app.po


+ 255 - 141
app/src/language/fr_FR/app.po

@@ -5,61 +5,63 @@ msgstr ""
 "POT-Creation-Date: \n"
 "PO-Revision-Date: 2025-02-13 01:42+0000\n"
 "Last-Translator: Picman <laforgejames@gmail.com>\n"
-"Language-Team: French "
-"<https://weblate.nginxui.com/projects/nginx-ui/frontend/fr/>\n"
+"Language-Team: French <https://weblate.nginxui.com/projects/nginx-ui/"
+"frontend/fr/>\n"
 "Language: fr_FR\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
 "X-Generator: Weblate 5.9.2\n"
 
-#: src/language/generate.ts:19
+#: src/language/generate.ts:47
 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}"
 msgstr ""
 "[Nginx UI] Utilisateur ACME : %{name}, Email : %{email}, Répertoire CA : "
 "%{caDir}"
 
-#: src/language/generate.ts:13
+#: src/language/generate.ts:49
 msgid "[Nginx UI] Backing up current certificate for later revocation"
-msgstr "[Nginx UI] Sauvegarde du certificat actuel pour une révocation ultérieure"
+msgstr ""
+"[Nginx UI] Sauvegarde du certificat actuel pour une révocation ultérieure"
 
-#: src/language/generate.ts:28
+#: src/language/generate.ts:6
 #, fuzzy
 msgid "[Nginx UI] Certificate renewed successfully"
 msgstr "Désactivé avec succès"
 
-#: src/language/generate.ts:8
+#: src/language/generate.ts:37
 #, fuzzy
 msgid "[Nginx UI] Certificate successfully revoked"
 msgstr "Nginx a redémarré avec succès"
 
-#: src/language/generate.ts:29
-msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate"
+#: src/language/generate.ts:13
+msgid ""
+"[Nginx UI] Certificate was used for server, reloading server TLS certificate"
 msgstr ""
 "[Nginx UI] Le certificat a été utilisé pour le serveur, rechargement du "
 "certificat TLS du serveur"
 
-#: src/language/generate.ts:24
+#: src/language/generate.ts:35
 #, fuzzy
 msgid "[Nginx UI] Creating client facilitates communication with the CA server"
 msgstr "La création du client facilite la communication avec le serveur CA"
 
-#: src/language/generate.ts:12
+#: src/language/generate.ts:36
 #, fuzzy
 msgid "[Nginx UI] Environment variables cleaned"
 msgstr "Définition des variables d'environnement"
 
-#: src/language/generate.ts:21
+#: src/language/generate.ts:28
 msgid "[Nginx UI] Finished"
 msgstr "[Nginx UI] Terminé"
 
-#: src/language/generate.ts:4
+#: src/language/generate.ts:25
 #, fuzzy
 msgid "[Nginx UI] Issued certificate successfully"
 msgstr "Certificat délivré avec succès"
 
-#: src/language/generate.ts:14
+#: src/language/generate.ts:50
 msgid "[Nginx UI] Obtaining certificate"
 msgstr "[Nginx UI] Obtention du certificat"
 
@@ -67,44 +69,44 @@ msgstr "[Nginx UI] Obtention du certificat"
 msgid "[Nginx UI] Preparing for certificate revocation"
 msgstr "[Nginx UI] Préparation de la révocation du certificat"
 
-#: src/language/generate.ts:18
+#: src/language/generate.ts:46
 msgid "[Nginx UI] Preparing lego configurations"
 msgstr "[Nginx UI] Préparation des configurations lego"
 
-#: src/language/generate.ts:25
+#: src/language/generate.ts:19
 msgid "[Nginx UI] Reloading nginx"
 msgstr "[Nginx UI] Rechargement de nginx"
 
-#: src/language/generate.ts:16
+#: src/language/generate.ts:14
 msgid "[Nginx UI] Revocation completed"
 msgstr "[Nginx UI] Révocation terminée"
 
-#: src/language/generate.ts:7
+#: src/language/generate.ts:4
 msgid "[Nginx UI] Revoking certificate"
 msgstr "[Nginx UI] Révoquer le certificat"
 
-#: src/language/generate.ts:26
+#: src/language/generate.ts:29
 msgid "[Nginx UI] Revoking old certificate"
 msgstr "[Nginx UI] Révoquer l'ancien certificat"
 
-#: src/language/generate.ts:20
+#: src/language/generate.ts:18
 msgid "[Nginx UI] Setting DNS01 challenge provider"
 msgstr "[Nginx UI] Configuration du fournisseur de défi DNS01"
 
-#: src/language/generate.ts:6
+#: src/language/generate.ts:27
 #, fuzzy
 msgid "[Nginx UI] Setting environment variables"
 msgstr "Définition des variables d'environnement"
 
-#: src/language/generate.ts:11
+#: src/language/generate.ts:48
 msgid "[Nginx UI] Setting HTTP01 challenge provider"
 msgstr "[Nginx UI] Configuration du fournisseur de défi HTTP01"
 
-#: src/language/generate.ts:15
+#: src/language/generate.ts:12
 msgid "[Nginx UI] Writing certificate private key to disk"
 msgstr "[Nginx UI] Écriture de la clé privée du certificat sur le disque"
 
-#: src/language/generate.ts:27
+#: src/language/generate.ts:51
 msgid "[Nginx UI] Writing certificate to disk"
 msgstr "[Nginx UI] Écriture du certificat sur le disque"
 
@@ -125,6 +127,10 @@ msgstr "À propos"
 msgid "Access Log"
 msgstr "Journaux d'accès"
 
+#: src/constants/errors/self_check.ts:21
+msgid "Access log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:90
 #: src/routes/modules/nginx_log.ts:17
 msgid "Access Logs"
@@ -356,7 +362,7 @@ msgstr "Modèle ChatGPT"
 msgid "Assistant"
 msgstr "Assistant"
 
-#: src/components/SelfCheck/SelfCheck.vue:31
+#: src/components/SelfCheck/SelfCheck.vue:30
 msgid "Attempt to fix"
 msgstr "Tenter de corriger"
 
@@ -409,7 +415,8 @@ msgstr "\"Redémarrage Automatique\""
 
 #: src/views/nginx_log/NginxLogList.vue:79
 msgid "Automatically indexed from site and stream configurations."
-msgstr "\"Indexé automatiquement à partir des configurations de site et de flux.\""
+msgstr ""
+"\"Indexé automatiquement à partir des configurations de site et de flux.\""
 
 #: src/views/certificate/CertificateEditor.vue:259
 #: src/views/config/ConfigEditor.vue:266 src/views/config/ConfigList.vue:112
@@ -435,8 +442,8 @@ msgstr "Retour"
 #: src/components/SystemRestore/SystemRestoreContent.vue:155
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgstr ""
-"La vérification de l'intégrité du fichier de sauvegarde a échoué, il a "
-"peut-être été falsifié"
+"La vérification de l'intégrité du fichier de sauvegarde a échoué, il a peut-"
+"être été falsifié"
 
 #: src/constants/errors/backup.ts:41
 msgid "Backup file not found: {0}"
@@ -501,7 +508,8 @@ msgstr "Mettre à niveau"
 
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:70
 msgid "Belows are selected items that you want to batch modify"
-msgstr "Ci-dessous sont sélectionnés les éléments que vous voulez modifier en masse"
+msgstr ""
+"Ci-dessous sont sélectionnés les éléments que vous voulez modifier en masse"
 
 #: src/constants/errors/nginx.ts:2
 msgid "Block is nil"
@@ -521,7 +529,8 @@ msgstr "Cache"
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178
 msgid "Cache items not accessed within this time will be removed"
-msgstr "Les éléments du cache non consultés pendant cette période seront supprimés"
+msgstr ""
+"Les éléments du cache non consultés pendant cette période seront supprimés"
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350
 msgid "Cache loader processing time threshold"
@@ -642,7 +651,7 @@ msgstr "Certificat expiré"
 msgid "Certificate Expiring Soon"
 msgstr "Certificat expirant bientôt"
 
-#: src/language/generate.ts:5
+#: src/language/generate.ts:33
 #, fuzzy
 msgid "Certificate not found: %{error}"
 msgstr "Erreur de décodage du certificat"
@@ -670,7 +679,7 @@ msgstr "Le certificat est valide"
 msgid "Certificate renewed successfully"
 msgstr "Désactivé avec succès"
 
-#: src/language/generate.ts:10
+#: src/language/generate.ts:11
 #, fuzzy
 msgid "Certificate revoked successfully"
 msgstr "Certificat supprimé avec succès"
@@ -735,50 +744,71 @@ msgstr "Revérifier"
 msgid "Check again"
 msgstr "Revérifier"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:31
-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`."
-msgstr ""
-"Vérifiez si /var/run/docker.sock existe. Si vous utilisez l'image Docker "
-"officielle de Nginx UI, assurez-vous que le socket Docker est monté comme "
-"ceci : `-v /var/run/docker.sock:/var/run/docker.sock`."
-
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:11
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:14
+#, fuzzy
 msgid ""
 "Check if HTTPS is enabled. Using HTTP outside localhost is insecure and "
-"prevents using Passkeys and clipboard features."
+"prevents using Passkeys and clipboard features"
 msgstr ""
 "Vérifiez si HTTPS est activé. L'utilisation de HTTP en dehors de localhost "
 "est non sécurisée et empêche l'utilisation des fonctionnalités Passkeys et "
 "presse-papiers."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:26
+#: src/language/generate.ts:40
+msgid "Check if the docker socket exists."
+msgstr ""
+
+#: src/language/generate.ts:20
+msgid "Check if the nginx access log path exists"
+msgstr ""
+
+#: src/language/generate.ts:44
 #, fuzzy
-msgid "Check if the nginx.conf includes the conf.d directory."
+msgid "Check if the nginx configuration directory exists"
 msgstr "Vérifie si le nginx.conf inclus le répertoire sites-enabled."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:16
-msgid "Check if the nginx.conf includes the sites-enabled directory."
+#: src/language/generate.ts:9
+#, fuzzy
+msgid "Check if the nginx configuration entry file exists"
 msgstr "Vérifie si le nginx.conf inclus le répertoire sites-enabled."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:21
-msgid "Check if the nginx.conf includes the streams-enabled directory."
+#: src/language/generate.ts:32
+msgid "Check if the nginx error log path exists"
+msgstr ""
+
+#: src/language/generate.ts:24
+msgid "Check if the nginx PID path exists"
+msgstr ""
+
+#: src/language/generate.ts:43
+#, fuzzy
+msgid "Check if the nginx.conf includes the conf.d directory"
+msgstr "Vérifie si le nginx.conf inclus le répertoire sites-enabled."
+
+#: src/language/generate.ts:23
+#, fuzzy
+msgid "Check if the nginx.conf includes the sites-enabled directory"
+msgstr "Vérifie si le nginx.conf inclus le répertoire sites-enabled."
+
+#: src/language/generate.ts:5
+#, fuzzy
+msgid "Check if the nginx.conf includes the streams-enabled directory"
 msgstr "Vérifie si le nginx.conf inclus le répertoire streams-enabled."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:6
+#: src/language/generate.ts:30
+#, fuzzy
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
-"nginx configuration directory."
+"nginx configuration directory"
 msgstr ""
 "Vérifie si les répertoires sites-available et sites-enabled sont dans le "
 "répertoire de configuration nginx."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:11
+#: src/language/generate.ts:38
+#, fuzzy
 msgid ""
-"Check if the streams-available and streams-enabled directories are under "
-"the nginx configuration directory."
+"Check if the streams-available and streams-enabled directories are under the "
+"nginx configuration directory"
 msgstr ""
 "Vérifie si les répertoires streams-available et strams-enabled sont dans le "
 "répertoire de configuration nginx."
@@ -885,6 +915,16 @@ msgstr "Comparez avec le courant"
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr "Le niveau de compression, 1 est le plus bas, 9 est le plus élevé"
 
+#: src/constants/errors/self_check.ts:17
+#, fuzzy
+msgid "Config directory not exist"
+msgstr "Erreur d'analyse de configuration Nginx"
+
+#: src/constants/errors/self_check.ts:18
+#, fuzzy
+msgid "Config entry file not exist"
+msgstr "Erreur d'analyse de configuration Nginx"
+
 #: src/constants/errors/backup.ts:14
 #, fuzzy
 msgid "Config path is empty"
@@ -1083,7 +1123,8 @@ msgstr "Custom"
 msgid ""
 "Customize the name of local node to be displayed in the environment "
 "indicator."
-msgstr "Personnaliser le nom du nœud local affiché dans l'indicateur d'environnement"
+msgstr ""
+"Personnaliser le nom du nœud local affiché dans l'indicateur d'environnement"
 
 #: src/routes/modules/dashboard.ts:10 src/views/config/ConfigEditor.vue:110
 #: src/views/config/ConfigEditor.vue:161 src/views/config/ConfigList.vue:67
@@ -1358,7 +1399,8 @@ msgstr "DNS01"
 
 #: src/components/AutoCertForm/AutoCertForm.vue:97
 msgid "Do not enable this option unless you are sure that you need it."
-msgstr "N'activez pas cette option sauf si vous êtes sûr d'en avoir avez besoin."
+msgstr ""
+"N'activez pas cette option sauf si vous êtes sûr d'en avoir avez besoin."
 
 #: src/views/site/components/SiteStatusSegmented.vue:93
 #, fuzzy
@@ -1397,11 +1439,11 @@ msgstr "Voulez-vous supprimer ce serveur ?"
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:30
-msgid "Docker Socket"
+#: src/language/generate.ts:10
+msgid "Docker socket exists"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:15
+#: src/constants/errors/self_check.ts:16
 msgid "Docker socket not exist"
 msgstr ""
 
@@ -1658,6 +1700,10 @@ msgstr ""
 msgid "Error Log"
 msgstr "Journaux d'erreurs"
 
+#: src/constants/errors/self_check.ts:22
+msgid "Error log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:98
 #: src/routes/modules/nginx_log.ts:24
 msgid "Error Logs"
@@ -1752,7 +1798,7 @@ msgstr ""
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:9
+#: src/constants/errors/self_check.ts:10
 #, fuzzy
 msgid "Failed to create backup"
 msgstr "Impossible d'activer %{msg}"
@@ -1849,7 +1895,7 @@ msgstr ""
 msgid "Failed to delete certificate"
 msgstr "Obtenir un certificat"
 
-#: src/language/generate.ts:9
+#: src/language/generate.ts:26
 #, fuzzy
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "Obtenir un certificat"
@@ -1968,7 +2014,7 @@ msgstr "Impossible d'activer %{msg}"
 msgid "Failed to open zip file: {0}"
 msgstr "Impossible d'activer %{msg}"
 
-#: src/constants/errors/self_check.ts:4
+#: src/constants/errors/self_check.ts:5
 #, fuzzy
 msgid "Failed to parse nginx.conf"
 msgstr "Erreur lecture nginx.conf"
@@ -1993,7 +2039,7 @@ msgstr "Impossible d'activer %{msg}"
 msgid "Failed to read hash info file: {0}"
 msgstr "Impossible d'activer %{msg}"
 
-#: src/constants/errors/self_check.ts:3
+#: src/constants/errors/self_check.ts:4
 #, fuzzy
 msgid "Failed to read nginx.conf"
 msgstr "Impossible d'activer %{msg}"
@@ -2209,7 +2255,7 @@ msgstr "Port de challenge HTTP"
 msgid "HTTP01"
 msgstr "HTTP01"
 
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:13
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2223,8 +2269,8 @@ msgstr "Si vide, le répertoire CA sera utilisé."
 
 #: src/views/nginx_log/NginxLogList.vue:81
 msgid ""
-"If logs are not indexed, please check if the log file is under the "
-"directory in Nginx.LogDirWhiteList."
+"If logs are not indexed, please check if the log file is under the directory "
+"in Nginx.LogDirWhiteList."
 msgstr ""
 
 #: src/views/preference/tabs/AuthSettings.vue:145
@@ -2243,8 +2289,8 @@ msgid ""
 "If you want to automatically revoke the old certificate, please enable this "
 "option."
 msgstr ""
-"Si votre domaine possède des entrées CNAME et que vous ne pouvez pas "
-"obtenir de certificats, activez cette option."
+"Si votre domaine possède des entrées CNAME et que vous ne pouvez pas obtenir "
+"de certificats, activez cette option."
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:70
 #, fuzzy
@@ -2258,8 +2304,8 @@ msgid ""
 "If your domain has CNAME records and you cannot obtain certificates, you "
 "need to enable this option."
 msgstr ""
-"Si votre domaine possède des entrées CNAME et que vous ne pouvez pas "
-"obtenir de certificats, activez cette option."
+"Si votre domaine possède des entrées CNAME et que vous ne pouvez pas obtenir "
+"de certificats, activez cette option."
 
 #: src/views/certificate/CertificateList/Certificate.vue:22
 #, fuzzy
@@ -2589,8 +2635,11 @@ msgstr "Localisations"
 msgid "Log"
 msgstr "Connexion"
 
-#: src/language/generate.ts:23
-msgid "Log file %{log_path} is not a regular file. "
+#: src/language/generate.ts:34
+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:67
@@ -2616,12 +2665,12 @@ msgstr ""
 
 #: src/views/preference/tabs/LogrotateSettings.vue:13
 msgid ""
-"Logrotate, by default, is enabled in most mainstream Linux distributions "
-"for users who install Nginx UI on the host machine, so you don't need to "
-"modify the parameters on this page. For users who install Nginx UI using "
-"Docker containers, you can manually enable this option. The crontab task "
-"scheduler of Nginx UI will execute the logrotate command at the interval "
-"you set in minutes."
+"Logrotate, by default, is enabled in most mainstream Linux distributions for "
+"users who install Nginx UI on the host machine, so you don't need to modify "
+"the parameters on this page. For users who install Nginx UI using Docker "
+"containers, you can manually enable this option. The crontab task scheduler "
+"of Nginx UI will execute the logrotate command at the interval you set in "
+"minutes."
 msgstr ""
 
 #: src/views/site/components/SiteStatusSegmented.vue:138
@@ -2646,8 +2695,8 @@ msgid ""
 "Make sure you have configured a reverse proxy for .well-known directory to "
 "HTTPChallengePort before obtaining the certificate."
 msgstr ""
-"Assurez vous d'avoir configuré un reverse proxy pour le répertoire "
-".well-known vers HTTPChallengePort avant d'obtenir le certificat."
+"Assurez vous d'avoir configuré un reverse proxy pour le répertoire .well-"
+"known vers HTTPChallengePort avant d'obtenir le certificat."
 
 #: src/routes/modules/config.ts:10 src/views/config/ConfigEditor.vue:115
 #: src/views/config/ConfigEditor.vue:166 src/views/config/ConfigList.vue:72
@@ -2887,37 +2936,29 @@ msgstr "Journal Nginx"
 msgid "Nginx Access Log Path"
 msgstr "Chemin du journal d'accès Nginx"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:25
+#: src/language/generate.ts:16
 #, fuzzy
-msgid "Nginx Conf Include Conf.d"
-msgstr "Commande de démarrage du terminal"
-
-#: src/components/SelfCheck/tasks/backend/index.ts:15
-msgid "Nginx Conf Include Sites Enabled"
-msgstr ""
-
-#: src/components/SelfCheck/tasks/backend/index.ts:20
-msgid "Nginx Conf Include Streams Enabled"
-msgstr ""
+msgid "Nginx access log path exists"
+msgstr "Chemin du journal d'accès Nginx"
 
-#: src/constants/errors/self_check.ts:5
+#: src/constants/errors/self_check.ts:6
 msgid "Nginx conf no http block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:7
+#: src/constants/errors/self_check.ts:8
 msgid "Nginx conf no stream block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:14
+#: src/constants/errors/self_check.ts:15
 #, fuzzy
 msgid "Nginx conf not include conf.d directory"
 msgstr "Vérifie si le nginx.conf inclus le répertoire sites-enabled."
 
-#: src/constants/errors/self_check.ts:6
+#: src/constants/errors/self_check.ts:7
 msgid "Nginx conf not include sites-enabled"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:8
+#: src/constants/errors/self_check.ts:9
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 
@@ -2926,6 +2967,16 @@ msgstr ""
 msgid "Nginx config directory is not set"
 msgstr "Erreur d'analyse de configuration Nginx"
 
+#: src/language/generate.ts:31
+#, fuzzy
+msgid "Nginx configuration directory exists"
+msgstr "Erreur d'analyse de configuration Nginx"
+
+#: src/language/generate.ts:15
+#, fuzzy
+msgid "Nginx configuration entry file exists"
+msgstr "Erreur d'analyse de configuration Nginx"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:138
 #, fuzzy
 msgid "Nginx configuration has been restored"
@@ -2964,6 +3015,11 @@ msgstr ""
 msgid "Nginx Error Log Path"
 msgstr "Chemin du journal des erreurs Nginx"
 
+#: src/language/generate.ts:21
+#, fuzzy
+msgid "Nginx error log path exists"
+msgstr "Chemin du journal des erreurs Nginx"
+
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/views/dashboard/NginxDashBoard.vue:112
@@ -2999,6 +3055,11 @@ msgstr ""
 msgid "Nginx PID Path"
 msgstr "Chemin du journal des erreurs Nginx"
 
+#: src/language/generate.ts:45
+#, fuzzy
+msgid "Nginx PID path exists"
+msgstr "Chemin du journal des erreurs Nginx"
+
 #: src/views/preference/tabs/NginxSettings.vue:40
 #, fuzzy
 msgid "Nginx Reload Command"
@@ -3058,10 +3119,25 @@ msgstr "Erreur d'analyse de configuration Nginx"
 #: src/components/SystemRestore/SystemRestoreContent.vue:336
 #, fuzzy
 msgid ""
-"Nginx UI configuration has been restored and will restart automatically in "
-"a few seconds."
+"Nginx UI configuration has been restored and will restart automatically in a "
+"few seconds."
 msgstr "Erreur d'analyse de configuration Nginx"
 
+#: src/language/generate.ts:8
+#, fuzzy
+msgid "Nginx.conf includes conf.d directory"
+msgstr "Vérifie si le nginx.conf inclus le répertoire sites-enabled."
+
+#: src/language/generate.ts:42
+#, fuzzy
+msgid "Nginx.conf includes sites-enabled directory"
+msgstr "Vérifie si le nginx.conf inclus le répertoire sites-enabled."
+
+#: src/language/generate.ts:39
+#, fuzzy
+msgid "Nginx.conf includes streams-enabled directory"
+msgstr "Vérifie si le nginx.conf inclus le répertoire streams-enabled."
+
 #: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
@@ -3396,6 +3472,10 @@ msgstr "Désactivé avec succès"
 msgid "Performing core upgrade"
 msgstr "Exécution de la mise à niveau du core"
 
+#: src/constants/errors/self_check.ts:19
+msgid "PID path not exist"
+msgstr ""
+
 #: src/constants/errors/crypto.ts:2
 msgid "Plain text is empty"
 msgstr ""
@@ -3449,8 +3529,8 @@ msgstr ""
 #: src/components/Notification/notifications.ts:166
 #: src/language/constants.ts:59
 msgid ""
-"Please generate new recovery codes in the preferences immediately to "
-"prevent lockout."
+"Please generate new recovery codes in the preferences immediately to prevent "
+"lockout."
 msgstr ""
 
 #: src/views/config/components/Rename.vue:65
@@ -3496,7 +3576,8 @@ msgid "Please log in."
 msgstr ""
 
 #: src/views/certificate/DNSCredential.vue:62
-msgid "Please note that the unit of time configurations below are all in seconds."
+msgid ""
+"Please note that the unit of time configurations below are all in seconds."
 msgstr ""
 
 #: src/views/install/components/InstallView.vue:100
@@ -3607,7 +3688,7 @@ msgstr "Lectures"
 msgid "Receive"
 msgstr "Recevoir"
 
-#: src/components/SelfCheck/SelfCheck.vue:24
+#: src/components/SelfCheck/SelfCheck.vue:23
 msgid "Recheck"
 msgstr ""
 
@@ -4088,6 +4169,10 @@ msgstr "Sauvegarde réussie"
 msgid "Saved successfully"
 msgstr "Enregistré avec succès"
 
+#: src/constants/errors/self_check.ts:20
+msgid "Sbin path not exist"
+msgstr ""
+
 #: src/views/preference/components/AuthSettings/TOTP.vue:69
 msgid "Scan the QR code with your mobile phone to add the account to the app."
 msgstr ""
@@ -4118,7 +4203,7 @@ msgstr ""
 msgid "Selector"
 msgstr "Sélecteur"
 
-#: 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 ""
 
@@ -4189,14 +4274,14 @@ msgstr "Utilisation du fournisseur de challenge HTTP01"
 
 #: src/constants/errors/nginx_log.ts:8
 msgid ""
-"Settings.NginxLogSettings.AccessLogPath is empty, refer to "
-"https://nginxui.com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui."
+"com/guide/config-nginx.html for more information"
 msgstr ""
 
 #: src/constants/errors/nginx_log.ts:7
 msgid ""
-"Settings.NginxLogSettings.ErrorLogPath is empty, refer to "
-"https://nginxui.com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui."
+"com/guide/config-nginx.html for more information"
 msgstr ""
 
 #: src/views/install/components/InstallView.vue:64
@@ -4243,21 +4328,21 @@ msgstr "Journaux du site"
 msgid "Site not found"
 msgstr "Fichier introuvable"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:5
+#: src/language/generate.ts:7
 #, fuzzy
-msgid "Sites Directory"
+msgid "Sites directory exists"
 msgstr "Directive"
 
 #: src/routes/modules/sites.ts:19
 msgid "Sites List"
 msgstr "Liste des sites"
 
-#: src/constants/errors/self_check.ts:10
+#: src/constants/errors/self_check.ts:11
 #, fuzzy
 msgid "Sites-available directory not exist"
 msgstr "Directive"
 
-#: src/constants/errors/self_check.ts:11
+#: src/constants/errors/self_check.ts:12
 #, fuzzy
 msgid "Sites-enabled directory not exist"
 msgstr "Directive"
@@ -4369,17 +4454,17 @@ msgstr "Auto Cert"
 msgid "Stream not found"
 msgstr "Fichier introuvable"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:10
+#: src/language/generate.ts:41
 #, fuzzy
-msgid "Streams Directory"
+msgid "Streams directory exists"
 msgstr "Directive"
 
-#: src/constants/errors/self_check.ts:12
+#: src/constants/errors/self_check.ts:13
 #, fuzzy
 msgid "Streams-available directory not exist"
 msgstr "Directive"
 
-#: src/constants/errors/self_check.ts:13
+#: src/constants/errors/self_check.ts:14
 #, fuzzy
 msgid "Streams-enabled directory not exist"
 msgstr "Directive"
@@ -4392,12 +4477,12 @@ msgstr ""
 msgid "Success"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
+#: 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"
+"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/SystemRestore/SystemRestoreContent.vue:197
@@ -4520,6 +4605,11 @@ msgstr "Système"
 msgid "System restored successfully."
 msgstr "Nginx a redémarré avec succès"
 
+#: src/constants/errors/self_check.ts:3
+#, fuzzy
+msgid "Task is not fixable"
+msgstr "Fichier introuvable"
+
 #: src/constants/errors/self_check.ts:2
 #, fuzzy
 msgid "Task not found"
@@ -4570,8 +4660,7 @@ msgstr "Chemin de la clé du certificat SSL"
 
 #: src/constants/errors/nginx_log.ts:2
 msgid ""
-"The log path is not under the paths in "
-"settings.NginxSettings.LogDirWhiteList"
+"The log path is not under the paths in settings.NginxSettings.LogDirWhiteList"
 msgstr ""
 
 #: src/views/preference/tabs/OpenAISettings.vue:23
@@ -4582,7 +4671,8 @@ msgid ""
 msgstr ""
 
 #: src/views/preference/tabs/OpenAISettings.vue:90
-msgid "The model used for code completion, if not set, the chat model will be used."
+msgid ""
+"The model used for code completion, if not set, the chat model will be used."
 msgstr ""
 
 #: src/views/preference/tabs/NodeSettings.vue:18
@@ -4689,7 +4779,8 @@ msgid "This field should not be empty"
 msgstr ""
 
 #: src/constants/form_errors.ts:6
-msgid "This field should only contain letters, unicode characters, numbers, and -_."
+msgid ""
+"This field should only contain letters, unicode characters, numbers, and -_."
 msgstr ""
 
 #: src/views/dashboard/NginxDashBoard.vue:153
@@ -4730,7 +4821,8 @@ msgstr ""
 
 #: src/views/environments/list/BatchUpgrader.vue:182
 #, fuzzy
-msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
+msgid ""
+"This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr "Dupliqué avec succès"
 
 #: src/views/preference/tabs/AuthSettings.vue:124
@@ -4774,12 +4866,12 @@ msgstr ""
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:15
 msgid ""
 "To make sure the certification auto-renewal can work normally, we need to "
-"add a location which can proxy the request from authority to backend, and "
-"we need to save this file and reload the Nginx. Are you sure you want to "
+"add a location which can proxy the request from authority to backend, and we "
+"need to save this file and reload the Nginx. Are you sure you want to "
 "continue?"
 msgstr ""
-"Pour nous assurer que le renouvellement automatique de la certification "
-"peut fonctionner normalement, nous devons ajouter un emplacement qui peut "
+"Pour nous assurer que le renouvellement automatique de la certification peut "
+"fonctionner normalement, nous devons ajouter un emplacement qui peut "
 "transmettre la demande de l'autorité au backend, et nous devons enregistrer "
 "ce fichier et recharger le Nginx. Êtes-vous sûr de vouloir continuer?"
 
@@ -4861,7 +4953,7 @@ msgstr "Type"
 msgid "Unknown"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:44
+#: src/components/SelfCheck/SelfCheck.vue:43
 msgid "Unknown issue"
 msgstr ""
 
@@ -5034,8 +5126,8 @@ msgstr ""
 
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:140
 msgid ""
-"We will remove the HTTPChallenge configuration from this file and reload "
-"the Nginx. Are you sure you want to continue?"
+"We will remove the HTTPChallenge configuration from this file and reload the "
+"Nginx. Are you sure you want to continue?"
 msgstr ""
 "Nous allons supprimer la configuration HTTPChallenge de ce fichier et "
 "recharger le Nginx. Êtes-vous sûr de vouloir continuer?"
@@ -5121,8 +5213,8 @@ msgstr "Oui"
 
 #: src/views/terminal/Terminal.vue:135
 msgid ""
-"You are accessing this terminal over an insecure HTTP connection on a "
-"non-localhost domain. This may expose sensitive information."
+"You are accessing this terminal over an insecure HTTP connection on a non-"
+"localhost domain. This may expose sensitive information."
 msgstr ""
 
 #: src/views/system/Upgrade.vue:202
@@ -5148,7 +5240,8 @@ msgid ""
 msgstr ""
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81
-msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
+msgid ""
+"You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
 msgstr ""
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94
@@ -5170,6 +5263,23 @@ msgstr ""
 msgid "Your passkeys"
 msgstr ""
 
+#~ 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`."
+#~ msgstr ""
+#~ "Vérifiez si /var/run/docker.sock existe. Si vous utilisez l'image Docker "
+#~ "officielle de Nginx UI, assurez-vous que le socket Docker est monté comme "
+#~ "ceci : `-v /var/run/docker.sock:/var/run/docker.sock`."
+
+#, fuzzy
+#~ msgid "Nginx Conf Include Conf.d"
+#~ msgstr "Commande de démarrage du terminal"
+
+#, fuzzy
+#~ msgid "Sites Directory"
+#~ msgstr "Directive"
+
 #~ msgid "Format error %{msg}"
 #~ msgstr "Erreur de format %{msg}"
 
@@ -5243,11 +5353,14 @@ msgstr ""
 #~ msgstr "Dupliqué avec succès"
 
 #, fuzzy
-#~ msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: %{resp}"
+#~ msgid ""
+#~ "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: "
+#~ "%{resp}"
 #~ msgstr "Dupliqué avec succès"
 
 #, fuzzy
-#~ msgid "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
+#~ msgid ""
+#~ "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
 #~ msgstr "Dupliqué avec succès"
 
 #, fuzzy
@@ -5261,7 +5374,8 @@ msgstr ""
 #~ msgstr "Dupliqué avec succès"
 
 #, fuzzy
-#~ msgid "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
+#~ msgid ""
+#~ "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
 #~ msgstr "Dupliqué avec succès"
 
 #, fuzzy
@@ -5350,8 +5464,8 @@ msgstr ""
 #~ "Please note that the unit of time configurations below are all in seconds."
 #~ msgstr ""
 #~ "Veuillez remplir les identifiants d'authentification de l'API fournis par "
-#~ "votre fournisseur DNS. Nous ajouterons un ou plusieurs enregistrements TXT "
-#~ "aux enregistrements DNS de votre domaine pour la vérification de la "
+#~ "votre fournisseur DNS. Nous ajouterons un ou plusieurs enregistrements "
+#~ "TXT aux enregistrements DNS de votre domaine pour la vérification de la "
 #~ "propriété. Une fois la vérification terminée, les enregistrements seront "
 #~ "supprimés. Veuillez noter que les configurations de temps ci-dessous sont "
 #~ "toutes en secondes."

+ 40 - 18
app/src/language/generate.ts

@@ -1,30 +1,52 @@
 // This file is auto-generated. DO NOT EDIT MANUALLY.
 
 export const msg = [
-  $gettext('[Nginx UI] Issued certificate successfully'),
-  $gettext('Certificate not found: %{error}'),
-  $gettext('[Nginx UI] Setting environment variables'),
-  $gettext('[Nginx UI] Revoking certificate'),
-  $gettext('[Nginx UI] Certificate successfully revoked'),
-  $gettext('Failed to delete certificate from database: %{error}'),
-  $gettext('Certificate revoked successfully'),
+  $gettext('Nginx configuration directory exists'),
+  $gettext('Check if the nginx PID path exists'),
+  $gettext('Nginx access log path exists'),
   $gettext('[Nginx UI] Setting HTTP01 challenge provider'),
-  $gettext('[Nginx UI] Environment variables cleaned'),
-  $gettext('[Nginx UI] Backing up current certificate for later revocation'),
-  $gettext('[Nginx UI] Obtaining certificate'),
-  $gettext('[Nginx UI] Writing certificate private key to disk'),
-  $gettext('[Nginx UI] Revocation completed'),
+  $gettext('[Nginx UI] Reloading nginx'),
+  $gettext('[Nginx UI] Certificate was used for server, reloading server TLS certificate'),
+  $gettext('[Nginx UI] Revoking certificate'),
+  $gettext('Sites directory exists'),
+  $gettext('Nginx error log path exists'),
+  $gettext('[Nginx UI] Issued certificate successfully'),
   $gettext('Failed to revoke certificate: %{error}'),
+  $gettext('[Nginx UI] Setting DNS01 challenge provider'),
+  $gettext('Check if the nginx.conf includes the sites-enabled directory'),
+  $gettext('Nginx configuration entry file exists'),
+  $gettext('Check if the nginx access log path exists'),
+  $gettext('Certificate not found: %{error}'),
   $gettext('[Nginx UI] Preparing lego configurations'),
   $gettext('[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}'),
-  $gettext('[Nginx UI] Setting DNS01 challenge provider'),
-  $gettext('[Nginx UI] Finished'),
-  $gettext('[Nginx UI] Preparing for certificate revocation'),
-  $gettext('Log file %{log_path} is not a regular file. '),
   $gettext('[Nginx UI] Creating client facilitates communication with the CA server'),
-  $gettext('[Nginx UI] Reloading nginx'),
+  $gettext('[Nginx UI] Environment variables cleaned'),
+  $gettext('[Nginx UI] Writing certificate private key to disk'),
+  $gettext('Nginx.conf includes conf.d directory'),
+  $gettext('Check if the nginx.conf includes the conf.d directory'),
+  $gettext('[Nginx UI] Finished'),
   $gettext('[Nginx UI] Revoking old certificate'),
+  $gettext('Check if the nginx configuration directory exists'),
+  $gettext('Nginx PID path exists'),
+  $gettext('Check if the nginx error log path exists'),
+  $gettext('[Nginx UI] Backing up current certificate for later revocation'),
+  $gettext('Check if the nginx configuration entry file exists'),
+  $gettext('Failed to delete certificate from database: %{error}'),
+  $gettext('[Nginx UI] Preparing for certificate revocation'),
+  $gettext('Nginx.conf includes sites-enabled directory'),
+  $gettext('Docker socket exists'),
+  $gettext('Check if the docker socket exists.'),
+  $gettext('Certificate revoked successfully'),
+  $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 UI] Obtaining certificate'),
   $gettext('[Nginx UI] Writing certificate to disk'),
+  $gettext('[Nginx UI] Revocation completed'),
+  $gettext('[Nginx UI] Certificate successfully revoked'),
+  $gettext('Nginx.conf includes streams-enabled directory'),
+  $gettext('Check if the nginx.conf includes the streams-enabled directory'),
+  $gettext('[Nginx UI] Setting environment variables'),
   $gettext('[Nginx UI] Certificate renewed successfully'),
-  $gettext('[Nginx UI] Certificate was used for server, reloading server TLS certificate'),
+  $gettext('Check if the sites-available and sites-enabled directories are under the nginx configuration directory'),
+  $gettext('Streams directory exists'),
+  $gettext('Check if the streams-available and streams-enabled directories are under the nginx configuration directory'),
 ]

+ 1 - 0
app/src/language/index.ts

@@ -1 +1,2 @@
 export { default as T } from './container'
+export type { Container } from './container'

+ 238 - 134
app/src/language/ja_JP/app.po

@@ -5,55 +5,60 @@ msgid ""
 msgstr ""
 "PO-Revision-Date: 2024-09-23 19:14+0000\n"
 "Last-Translator: Kohki Makimoto <kohki.makimoto@gmail.com>\n"
-"Language-Team: Japanese "
-"<https://weblate.nginxui.com/projects/nginx-ui/frontend/ja/>\n"
+"Language-Team: Japanese <https://weblate.nginxui.com/projects/nginx-ui/"
+"frontend/ja/>\n"
 "Language: ja_JP\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 "X-Generator: Weblate 5.6.2\n"
 
-#: src/language/generate.ts:19
+#: src/language/generate.ts:47
 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}"
-msgstr "[Nginx UI] ACME ユーザー: %{name}、メール: %{email}、CA ディレクトリ: %{caDir}"
+msgstr ""
+"[Nginx UI] ACME ユーザー: %{name}、メール: %{email}、CA ディレクトリ: "
+"%{caDir}"
 
-#: src/language/generate.ts:13
+#: src/language/generate.ts:49
 msgid "[Nginx UI] Backing up current certificate for later revocation"
 msgstr "[Nginx UI] 現在の証明書を後で失効させるためにバックアップ中"
 
-#: src/language/generate.ts:28
+#: src/language/generate.ts:6
 #, fuzzy
 msgid "[Nginx UI] Certificate renewed successfully"
 msgstr "正常に削除しました"
 
-#: src/language/generate.ts:8
+#: src/language/generate.ts:37
 #, fuzzy
 msgid "[Nginx UI] Certificate successfully revoked"
 msgstr "証明書の削除に成功しました"
 
-#: src/language/generate.ts:29
-msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate"
-msgstr "[Nginx UI] サーバーで証明書が使用されました、サーバーのTLS証明書を再読み込み中"
+#: src/language/generate.ts:13
+msgid ""
+"[Nginx UI] Certificate was used for server, reloading server TLS certificate"
+msgstr ""
+"[Nginx UI] サーバーで証明書が使用されました、サーバーのTLS証明書を再読み込み"
+"中"
 
-#: src/language/generate.ts:24
+#: src/language/generate.ts:35
 msgid "[Nginx UI] Creating client facilitates communication with the CA server"
 msgstr "[Nginx UI] CA サーバーとの通信を容易にするクライアントを作成中"
 
-#: src/language/generate.ts:12
+#: src/language/generate.ts:36
 #, fuzzy
 msgid "[Nginx UI] Environment variables cleaned"
 msgstr "環境変数を削除する"
 
-#: src/language/generate.ts:21
+#: src/language/generate.ts:28
 msgid "[Nginx UI] Finished"
 msgstr "[Nginx UI] 完了しました"
 
-#: src/language/generate.ts:4
+#: src/language/generate.ts:25
 #, fuzzy
 msgid "[Nginx UI] Issued certificate successfully"
 msgstr "証明書の削除に成功しました"
 
-#: src/language/generate.ts:14
+#: src/language/generate.ts:50
 msgid "[Nginx UI] Obtaining certificate"
 msgstr "[Nginx UI] 証明書を取得中"
 
@@ -61,44 +66,44 @@ msgstr "[Nginx UI] 証明書を取得中"
 msgid "[Nginx UI] Preparing for certificate revocation"
 msgstr "[Nginx UI] 証明書の失効準備中"
 
-#: src/language/generate.ts:18
+#: src/language/generate.ts:46
 msgid "[Nginx UI] Preparing lego configurations"
 msgstr "[Nginx UI] Lego 設定の準備中"
 
-#: src/language/generate.ts:25
+#: src/language/generate.ts:19
 msgid "[Nginx UI] Reloading nginx"
 msgstr "[Nginx UI] Nginx を再読み込み中"
 
-#: src/language/generate.ts:16
+#: src/language/generate.ts:14
 msgid "[Nginx UI] Revocation completed"
 msgstr "[Nginx UI] 失効が完了しました"
 
-#: src/language/generate.ts:7
+#: src/language/generate.ts:4
 msgid "[Nginx UI] Revoking certificate"
 msgstr "[Nginx UI] 証明書を失効中"
 
-#: src/language/generate.ts:26
+#: src/language/generate.ts:29
 msgid "[Nginx UI] Revoking old certificate"
 msgstr "[Nginx UI] 古い証明書を失効中"
 
-#: src/language/generate.ts:20
+#: src/language/generate.ts:18
 msgid "[Nginx UI] Setting DNS01 challenge provider"
 msgstr "[Nginx UI] DNS01 チャレンジプロバイダーを設定中"
 
-#: src/language/generate.ts:6
+#: src/language/generate.ts:27
 #, fuzzy
 msgid "[Nginx UI] Setting environment variables"
 msgstr "環境変数を削除する"
 
-#: src/language/generate.ts:11
+#: src/language/generate.ts:48
 msgid "[Nginx UI] Setting HTTP01 challenge provider"
 msgstr "[Nginx UI] HTTP01 チャレンジプロバイダーの設定"
 
-#: src/language/generate.ts:15
+#: src/language/generate.ts:12
 msgid "[Nginx UI] Writing certificate private key to disk"
 msgstr "[Nginx UI] 証明書の秘密鍵をディスクに書き込んでいます"
 
-#: src/language/generate.ts:27
+#: src/language/generate.ts:51
 msgid "[Nginx UI] Writing certificate to disk"
 msgstr "[Nginx UI] 証明書をディスクに書き込み中"
 
@@ -119,6 +124,10 @@ msgstr "Nginx UI について"
 msgid "Access Log"
 msgstr "アクセスログ"
 
+#: src/constants/errors/self_check.ts:21
+msgid "Access log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:90
 #: src/routes/modules/nginx_log.ts:17
 msgid "Access Logs"
@@ -335,7 +344,7 @@ msgstr "ChatGPTに助けを求める"
 msgid "Assistant"
 msgstr "アシスタント"
 
-#: src/components/SelfCheck/SelfCheck.vue:31
+#: src/components/SelfCheck/SelfCheck.vue:30
 #, fuzzy
 msgid "Attempt to fix"
 msgstr "試行回数"
@@ -413,7 +422,9 @@ msgstr "\"戻る\""
 
 #: src/components/SystemRestore/SystemRestoreContent.vue:155
 msgid "Backup file integrity check failed, it may have been tampered with"
-msgstr "「バックアップファイルの整合性チェックに失敗しました。改ざんされている可能性があります」"
+msgstr ""
+"「バックアップファイルの整合性チェックに失敗しました。改ざんされている可能性"
+"があります」"
 
 #: src/constants/errors/backup.ts:41
 msgid "Backup file not found: {0}"
@@ -538,8 +549,8 @@ msgid ""
 "Calculated based on worker_processes * worker_connections. Actual "
 "performance depends on hardware, configuration, and workload"
 msgstr ""
-"worker_processes * worker_connections "
-"に基づいて計算されます。実際のパフォーマンスはハードウェア、設定、およびワークロードに依存します"
+"worker_processes * worker_connections に基づいて計算されます。実際のパフォー"
+"マンスはハードウェア、設定、およびワークロードに依存します"
 
 #: src/components/ChatGPT/ChatGPT.vue:356
 #: src/components/NgxConfigEditor/NgxServer.vue:54
@@ -613,7 +624,7 @@ msgstr "証明書の有効期限が切れました"
 msgid "Certificate Expiring Soon"
 msgstr "証明書の有効期限が近づいています"
 
-#: src/language/generate.ts:5
+#: src/language/generate.ts:33
 #, fuzzy
 msgid "Certificate not found: %{error}"
 msgstr "証明書のデコードエラー"
@@ -640,7 +651,7 @@ msgstr "証明書更新間隔"
 msgid "Certificate renewed successfully"
 msgstr "正常に削除しました"
 
-#: src/language/generate.ts:10
+#: src/language/generate.ts:11
 #, fuzzy
 msgid "Certificate revoked successfully"
 msgstr "証明書の削除に成功しました"
@@ -698,47 +709,73 @@ msgstr "再確認"
 msgid "Check again"
 msgstr "再確認"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:31
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:14
+#, fuzzy
 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`."
+"Check if HTTPS is enabled. Using HTTP outside localhost is insecure and "
+"prevents using Passkeys and clipboard features"
 msgstr ""
-"/var/run/docker.sock が存在するか確認してください。Nginx UI 公式 Docker "
-"イメージを使用している場合は、Docker ソケットが次のようにマウントされていることを確認してください: `-v "
-"/var/run/docker.sock:/var/run/docker.sock`."
+"HTTPS が有効かどうかを確認します。localhost 以外で HTTP を使用すると安全では"
+"なく、Passkeys やクリップボード機能の使用が妨げられます。"
 
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:11
-msgid ""
-"Check if HTTPS is enabled. Using HTTP outside localhost is insecure and "
-"prevents using Passkeys and clipboard features."
+#: src/language/generate.ts:40
+msgid "Check if the docker socket exists."
+msgstr ""
+
+#: src/language/generate.ts:20
+msgid "Check if the nginx access log path exists"
 msgstr ""
-"HTTPS が有効かどうかを確認します。localhost 以外で HTTP を使用すると安全ではなく、Passkeys "
-"やクリップボード機能の使用が妨げられます。"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:26
-msgid "Check if the nginx.conf includes the conf.d directory."
+#: src/language/generate.ts:44
+#, fuzzy
+msgid "Check if the nginx configuration directory exists"
+msgstr "nginx.conf に conf.d ディレクトリが含まれているか確認します。"
+
+#: src/language/generate.ts:9
+#, fuzzy
+msgid "Check if the nginx configuration entry file exists"
 msgstr "nginx.conf に conf.d ディレクトリが含まれているか確認します。"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:16
-msgid "Check if the nginx.conf includes the sites-enabled directory."
+#: src/language/generate.ts:32
+msgid "Check if the nginx error log path exists"
+msgstr ""
+
+#: src/language/generate.ts:24
+msgid "Check if the nginx PID path exists"
+msgstr ""
+
+#: src/language/generate.ts:43
+#, fuzzy
+msgid "Check if the nginx.conf includes the conf.d directory"
+msgstr "nginx.conf に conf.d ディレクトリが含まれているか確認します。"
+
+#: src/language/generate.ts:23
+#, fuzzy
+msgid "Check if the nginx.conf includes the sites-enabled directory"
 msgstr "nginx.conf に sites-enabled ディレクトリが含まれているか確認します。"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:21
-msgid "Check if the nginx.conf includes the streams-enabled directory."
+#: src/language/generate.ts:5
+#, fuzzy
+msgid "Check if the nginx.conf includes the streams-enabled directory"
 msgstr "nginx.conf に streams-enabled ディレクトリが含まれているか確認します。"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:6
+#: src/language/generate.ts:30
+#, fuzzy
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
-"nginx configuration directory."
-msgstr "sites-available と sites-enabled ディレクトリが nginx の設定ディレクトリ配下にあるか確認します。"
+"nginx configuration directory"
+msgstr ""
+"sites-available と sites-enabled ディレクトリが nginx の設定ディレクトリ配下"
+"にあるか確認します。"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:11
+#: src/language/generate.ts:38
+#, fuzzy
 msgid ""
-"Check if the streams-available and streams-enabled directories are under "
-"the nginx configuration directory."
-msgstr "streams-available と streams-enabled ディレクトリが nginx の設定ディレクトリ配下にあるか確認します。"
+"Check if the streams-available and streams-enabled directories are under the "
+"nginx configuration directory"
+msgstr ""
+"streams-available と streams-enabled ディレクトリが nginx の設定ディレクトリ"
+"配下にあるか確認します。"
 
 #: src/constants/errors/crypto.ts:3
 msgid "Cipher text is too short"
@@ -762,7 +799,8 @@ msgstr "正常に削除しました"
 #: src/components/SystemRestore/SystemRestoreContent.vue:194
 #: src/components/SystemRestore/SystemRestoreContent.vue:271
 msgid "Click or drag backup file to this area to upload"
-msgstr "この領域にバックアップファイルをクリックまたはドラッグしてアップロードします"
+msgstr ""
+"この領域にバックアップファイルをクリックまたはドラッグしてアップロードします"
 
 #: src/views/preference/components/AuthSettings/TOTP.vue:110
 msgid "Click to copy"
@@ -836,6 +874,14 @@ msgstr "電流と比較してください"
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr "圧縮レベル、1は最も低く、9は最高です"
 
+#: src/constants/errors/self_check.ts:17
+msgid "Config directory not exist"
+msgstr ""
+
+#: src/constants/errors/self_check.ts:18
+msgid "Config entry file not exist"
+msgstr ""
+
 #: src/constants/errors/backup.ts:14
 #, fuzzy
 msgid "Config path is empty"
@@ -932,7 +978,8 @@ msgstr "CPU使用率"
 
 #: src/views/dashboard/components/ResourceUsageCard.vue:38
 msgid "CPU usage is relatively high, consider optimizing Nginx configuration"
-msgstr "CPU使用率が比較的高いため、Nginxの設定を最適化することを検討してください"
+msgstr ""
+"CPU使用率が比較的高いため、Nginxの設定を最適化することを検討してください"
 
 #: src/views/dashboard/ServerAnalytic.vue:195
 msgid "CPU:"
@@ -963,7 +1010,9 @@ msgstr "フォルダーを作成"
 msgid ""
 "Create system backups including Nginx configuration and Nginx UI settings. "
 "Backup files will be automatically downloaded to your computer."
-msgstr "Nginx 設定と Nginx UI 設定を含むシステムバックアップを作成します。バックアップファイルは自動的にコンピュータにダウンロードされます。"
+msgstr ""
+"Nginx 設定と Nginx UI 設定を含むシステムバックアップを作成します。バックアッ"
+"プファイルは自動的にコンピュータにダウンロードされます。"
 
 #: src/views/environments/group/columns.ts:31
 #: src/views/notification/notificationColumns.tsx:59
@@ -1067,13 +1116,11 @@ msgstr "証明書"
 msgid "Delete Permanently"
 msgstr "完全に削除"
 
-#: src/components/Notification/notifications.ts:69
-#: src/language/constants.ts:50
+#: src/components/Notification/notifications.ts:69 src/language/constants.ts:50
 msgid "Delete Remote Site Error"
 msgstr "リモートサイト削除エラー"
 
-#: src/components/Notification/notifications.ts:73
-#: src/language/constants.ts:49
+#: src/components/Notification/notifications.ts:73 src/language/constants.ts:49
 msgid "Delete Remote Site Success"
 msgstr "リモートサイトの削除に成功しました"
 
@@ -1310,11 +1357,11 @@ msgstr ""
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:30
-msgid "Docker Socket"
+#: src/language/generate.ts:10
+msgid "Docker socket exists"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:15
+#: src/constants/errors/self_check.ts:16
 msgid "Docker socket not exist"
 msgstr ""
 
@@ -1539,6 +1586,10 @@ msgstr ""
 msgid "Error Log"
 msgstr ""
 
+#: src/constants/errors/self_check.ts:22
+msgid "Error log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:98
 #: src/routes/modules/nginx_log.ts:24
 msgid "Error Logs"
@@ -1626,7 +1677,7 @@ msgstr ""
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:9
+#: src/constants/errors/self_check.ts:10
 msgid "Failed to create backup"
 msgstr ""
 
@@ -1706,7 +1757,7 @@ msgstr ""
 msgid "Failed to delete certificate"
 msgstr ""
 
-#: src/language/generate.ts:9
+#: src/language/generate.ts:26
 msgid "Failed to delete certificate from database: %{error}"
 msgstr ""
 
@@ -1806,7 +1857,7 @@ msgstr ""
 msgid "Failed to open zip file: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:4
+#: src/constants/errors/self_check.ts:5
 msgid "Failed to parse nginx.conf"
 msgstr ""
 
@@ -1826,7 +1877,7 @@ msgstr ""
 msgid "Failed to read hash info file: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:3
+#: src/constants/errors/self_check.ts:4
 msgid "Failed to read nginx.conf"
 msgstr ""
 
@@ -2023,7 +2074,7 @@ msgstr ""
 msgid "HTTP01"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:13
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2037,8 +2088,8 @@ msgstr ""
 
 #: src/views/nginx_log/NginxLogList.vue:81
 msgid ""
-"If logs are not indexed, please check if the log file is under the "
-"directory in Nginx.LogDirWhiteList."
+"If logs are not indexed, please check if the log file is under the directory "
+"in Nginx.LogDirWhiteList."
 msgstr ""
 
 #: src/views/preference/tabs/AuthSettings.vue:145
@@ -2365,8 +2416,11 @@ msgstr ""
 msgid "Log"
 msgstr ""
 
-#: src/language/generate.ts:23
-msgid "Log file %{log_path} is not a regular file. "
+#: src/language/generate.ts:34
+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:67
@@ -2391,12 +2445,12 @@ msgstr ""
 
 #: src/views/preference/tabs/LogrotateSettings.vue:13
 msgid ""
-"Logrotate, by default, is enabled in most mainstream Linux distributions "
-"for users who install Nginx UI on the host machine, so you don't need to "
-"modify the parameters on this page. For users who install Nginx UI using "
-"Docker containers, you can manually enable this option. The crontab task "
-"scheduler of Nginx UI will execute the logrotate command at the interval "
-"you set in minutes."
+"Logrotate, by default, is enabled in most mainstream Linux distributions for "
+"users who install Nginx UI on the host machine, so you don't need to modify "
+"the parameters on this page. For users who install Nginx UI using Docker "
+"containers, you can manually enable this option. The crontab task scheduler "
+"of Nginx UI will execute the logrotate command at the interval you set in "
+"minutes."
 msgstr ""
 
 #: src/views/site/components/SiteStatusSegmented.vue:138
@@ -2647,35 +2701,27 @@ msgstr ""
 msgid "Nginx Access Log Path"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:25
-msgid "Nginx Conf Include Conf.d"
-msgstr ""
-
-#: src/components/SelfCheck/tasks/backend/index.ts:15
-msgid "Nginx Conf Include Sites Enabled"
-msgstr ""
-
-#: src/components/SelfCheck/tasks/backend/index.ts:20
-msgid "Nginx Conf Include Streams Enabled"
+#: src/language/generate.ts:16
+msgid "Nginx access log path exists"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:5
+#: src/constants/errors/self_check.ts:6
 msgid "Nginx conf no http block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:7
+#: src/constants/errors/self_check.ts:8
 msgid "Nginx conf no stream block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:14
+#: src/constants/errors/self_check.ts:15
 msgid "Nginx conf not include conf.d directory"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:6
+#: src/constants/errors/self_check.ts:7
 msgid "Nginx conf not include sites-enabled"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:8
+#: src/constants/errors/self_check.ts:9
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 
@@ -2683,6 +2729,16 @@ msgstr ""
 msgid "Nginx config directory is not set"
 msgstr ""
 
+#: src/language/generate.ts:31
+#, fuzzy
+msgid "Nginx configuration directory exists"
+msgstr "設定"
+
+#: src/language/generate.ts:15
+#, fuzzy
+msgid "Nginx configuration entry file exists"
+msgstr "設定"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:138
 msgid "Nginx configuration has been restored"
 msgstr ""
@@ -2719,6 +2775,10 @@ msgstr ""
 msgid "Nginx Error Log Path"
 msgstr ""
 
+#: src/language/generate.ts:21
+msgid "Nginx error log path exists"
+msgstr ""
+
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/views/dashboard/NginxDashBoard.vue:112
@@ -2752,6 +2812,10 @@ msgstr ""
 msgid "Nginx PID Path"
 msgstr ""
 
+#: src/language/generate.ts:45
+msgid "Nginx PID path exists"
+msgstr ""
+
 #: src/views/preference/tabs/NginxSettings.vue:40
 msgid "Nginx Reload Command"
 msgstr ""
@@ -2804,10 +2868,25 @@ msgstr ""
 
 #: src/components/SystemRestore/SystemRestoreContent.vue:336
 msgid ""
-"Nginx UI configuration has been restored and will restart automatically in "
-"a few seconds."
+"Nginx UI configuration has been restored and will restart automatically in a "
+"few seconds."
 msgstr ""
 
+#: src/language/generate.ts:8
+#, fuzzy
+msgid "Nginx.conf includes conf.d directory"
+msgstr "nginx.conf に conf.d ディレクトリが含まれているか確認します。"
+
+#: src/language/generate.ts:42
+#, fuzzy
+msgid "Nginx.conf includes sites-enabled directory"
+msgstr "nginx.conf に sites-enabled ディレクトリが含まれているか確認します。"
+
+#: src/language/generate.ts:39
+#, fuzzy
+msgid "Nginx.conf includes streams-enabled directory"
+msgstr "nginx.conf に streams-enabled ディレクトリが含まれているか確認します。"
+
 #: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
@@ -3132,6 +3211,10 @@ msgstr "正常に作成されました"
 msgid "Performing core upgrade"
 msgstr ""
 
+#: src/constants/errors/self_check.ts:19
+msgid "PID path not exist"
+msgstr ""
+
 #: src/constants/errors/crypto.ts:2
 msgid "Plain text is empty"
 msgstr ""
@@ -3180,8 +3263,8 @@ msgstr ""
 #: src/components/Notification/notifications.ts:166
 #: src/language/constants.ts:59
 msgid ""
-"Please generate new recovery codes in the preferences immediately to "
-"prevent lockout."
+"Please generate new recovery codes in the preferences immediately to prevent "
+"lockout."
 msgstr ""
 
 #: src/views/config/components/Rename.vue:65
@@ -3223,7 +3306,8 @@ msgid "Please log in."
 msgstr ""
 
 #: src/views/certificate/DNSCredential.vue:62
-msgid "Please note that the unit of time configurations below are all in seconds."
+msgid ""
+"Please note that the unit of time configurations below are all in seconds."
 msgstr ""
 
 #: src/views/install/components/InstallView.vue:100
@@ -3328,7 +3412,7 @@ msgstr ""
 msgid "Receive"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:24
+#: src/components/SelfCheck/SelfCheck.vue:23
 msgid "Recheck"
 msgstr ""
 
@@ -3759,6 +3843,10 @@ msgstr ""
 msgid "Saved successfully"
 msgstr ""
 
+#: src/constants/errors/self_check.ts:20
+msgid "Sbin path not exist"
+msgstr ""
+
 #: src/views/preference/components/AuthSettings/TOTP.vue:69
 msgid "Scan the QR code with your mobile phone to add the account to the app."
 msgstr ""
@@ -3788,7 +3876,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 ""
 
@@ -3854,14 +3942,14 @@ msgstr ""
 
 #: src/constants/errors/nginx_log.ts:8
 msgid ""
-"Settings.NginxLogSettings.AccessLogPath is empty, refer to "
-"https://nginxui.com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui."
+"com/guide/config-nginx.html for more information"
 msgstr ""
 
 #: src/constants/errors/nginx_log.ts:7
 msgid ""
-"Settings.NginxLogSettings.ErrorLogPath is empty, refer to "
-"https://nginxui.com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui."
+"com/guide/config-nginx.html for more information"
 msgstr ""
 
 #: src/views/install/components/InstallView.vue:64
@@ -3905,20 +3993,20 @@ msgstr ""
 msgid "Site not found"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:5
+#: src/language/generate.ts:7
 #, fuzzy
-msgid "Sites Directory"
+msgid "Sites directory exists"
 msgstr "ディレクトリ"
 
 #: src/routes/modules/sites.ts:19
 msgid "Sites List"
 msgstr "サイト一覧"
 
-#: src/constants/errors/self_check.ts:10
+#: src/constants/errors/self_check.ts:11
 msgid "Sites-available directory not exist"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:11
+#: src/constants/errors/self_check.ts:12
 msgid "Sites-enabled directory not exist"
 msgstr ""
 
@@ -4019,16 +4107,16 @@ msgstr ""
 msgid "Stream not found"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:10
+#: src/language/generate.ts:41
 #, fuzzy
-msgid "Streams Directory"
+msgid "Streams directory exists"
 msgstr "ディレクトリ"
 
-#: src/constants/errors/self_check.ts:12
+#: src/constants/errors/self_check.ts:13
 msgid "Streams-available directory not exist"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:13
+#: src/constants/errors/self_check.ts:14
 msgid "Streams-enabled directory not exist"
 msgstr ""
 
@@ -4040,12 +4128,12 @@ msgstr ""
 msgid "Success"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
+#: 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"
+"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/SystemRestore/SystemRestoreContent.vue:197
@@ -4156,6 +4244,10 @@ msgstr "システム"
 msgid "System restored successfully."
 msgstr "正常に作成されました"
 
+#: src/constants/errors/self_check.ts:3
+msgid "Task is not fixable"
+msgstr ""
+
 #: src/constants/errors/self_check.ts:2
 msgid "Task not found"
 msgstr ""
@@ -4200,8 +4292,7 @@ msgstr ""
 
 #: src/constants/errors/nginx_log.ts:2
 msgid ""
-"The log path is not under the paths in "
-"settings.NginxSettings.LogDirWhiteList"
+"The log path is not under the paths in settings.NginxSettings.LogDirWhiteList"
 msgstr ""
 
 #: src/views/preference/tabs/OpenAISettings.vue:23
@@ -4212,7 +4303,8 @@ msgid ""
 msgstr ""
 
 #: src/views/preference/tabs/OpenAISettings.vue:90
-msgid "The model used for code completion, if not set, the chat model will be used."
+msgid ""
+"The model used for code completion, if not set, the chat model will be used."
 msgstr ""
 
 #: src/views/preference/tabs/NodeSettings.vue:18
@@ -4309,7 +4401,8 @@ msgid "This field should not be empty"
 msgstr ""
 
 #: src/constants/form_errors.ts:6
-msgid "This field should only contain letters, unicode characters, numbers, and -_."
+msgid ""
+"This field should only contain letters, unicode characters, numbers, and -_."
 msgstr ""
 
 #: src/views/dashboard/NginxDashBoard.vue:153
@@ -4349,7 +4442,8 @@ msgid ""
 msgstr ""
 
 #: src/views/environments/list/BatchUpgrader.vue:182
-msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
+msgid ""
+"This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr ""
 
 #: src/views/preference/tabs/AuthSettings.vue:124
@@ -4393,8 +4487,8 @@ msgstr ""
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:15
 msgid ""
 "To make sure the certification auto-renewal can work normally, we need to "
-"add a location which can proxy the request from authority to backend, and "
-"we need to save this file and reload the Nginx. Are you sure you want to "
+"add a location which can proxy the request from authority to backend, and we "
+"need to save this file and reload the Nginx. Are you sure you want to "
 "continue?"
 msgstr ""
 
@@ -4474,7 +4568,7 @@ msgstr ""
 msgid "Unknown"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:44
+#: src/components/SelfCheck/SelfCheck.vue:43
 msgid "Unknown issue"
 msgstr ""
 
@@ -4641,8 +4735,8 @@ msgstr ""
 
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:140
 msgid ""
-"We will remove the HTTPChallenge configuration from this file and reload "
-"the Nginx. Are you sure you want to continue?"
+"We will remove the HTTPChallenge configuration from this file and reload the "
+"Nginx. Are you sure you want to continue?"
 msgstr ""
 
 #: src/views/preference/tabs/AuthSettings.vue:97
@@ -4725,8 +4819,8 @@ msgstr "はい"
 
 #: src/views/terminal/Terminal.vue:135
 msgid ""
-"You are accessing this terminal over an insecure HTTP connection on a "
-"non-localhost domain. This may expose sensitive information."
+"You are accessing this terminal over an insecure HTTP connection on a non-"
+"localhost domain. This may expose sensitive information."
 msgstr ""
 
 #: src/views/system/Upgrade.vue:202
@@ -4752,7 +4846,8 @@ msgid ""
 msgstr ""
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81
-msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
+msgid ""
+"You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
 msgstr ""
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94
@@ -4773,3 +4868,12 @@ msgstr ""
 #: src/views/preference/components/AuthSettings/Passkey.vue:75
 msgid "Your passkeys"
 msgstr ""
+
+#~ 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`."
+#~ msgstr ""
+#~ "/var/run/docker.sock が存在するか確認してください。Nginx UI 公式 Docker イ"
+#~ "メージを使用している場合は、Docker ソケットが次のようにマウントされている"
+#~ "ことを確認してください: `-v /var/run/docker.sock:/var/run/docker.sock`."

+ 269 - 143
app/src/language/ko_KR/app.po

@@ -5,57 +5,60 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "PO-Revision-Date: 2025-04-07 12:21+0000\n"
 "Last-Translator: jkh0kr <admin@jkh.kr>\n"
-"Language-Team: Korean "
-"<https://weblate.nginxui.com/projects/nginx-ui/frontend/ko/>\n"
+"Language-Team: Korean <https://weblate.nginxui.com/projects/nginx-ui/"
+"frontend/ko/>\n"
 "Language: ko_KR\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Weblate 5.10.4\n"
 
-#: src/language/generate.ts:19
+#: src/language/generate.ts:47
 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}"
-msgstr "[Nginx UI] ACME 사용자: %{name}, 이메일: %{email}, CA 디렉터리: %{caDir}"
+msgstr ""
+"[Nginx UI] ACME 사용자: %{name}, 이메일: %{email}, CA 디렉터리: %{caDir}"
 
-#: src/language/generate.ts:13
+#: src/language/generate.ts:49
 msgid "[Nginx UI] Backing up current certificate for later revocation"
 msgstr "[Nginx UI] 현재 인증서를 나중에 취소하기 위해 백업 중"
 
-#: src/language/generate.ts:28
+#: src/language/generate.ts:6
 #, fuzzy
 msgid "[Nginx UI] Certificate renewed successfully"
 msgstr "성공적으로 제거됨"
 
-#: src/language/generate.ts:8
+#: src/language/generate.ts:37
 #, fuzzy
 msgid "[Nginx UI] Certificate successfully revoked"
 msgstr "Nginx가 성공적으로 재시작됨"
 
-#: src/language/generate.ts:29
-msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate"
-msgstr "[Nginx UI] 서버에 인증서가 사용되었습니다, 서버 TLS 인증서 다시 불러오는 중"
+#: src/language/generate.ts:13
+msgid ""
+"[Nginx UI] Certificate was used for server, reloading server TLS certificate"
+msgstr ""
+"[Nginx UI] 서버에 인증서가 사용되었습니다, 서버 TLS 인증서 다시 불러오는 중"
 
-#: src/language/generate.ts:24
+#: src/language/generate.ts:35
 #, fuzzy
 msgid "[Nginx UI] Creating client facilitates communication with the CA server"
 msgstr "클라이언트 생성은 CA 서버와의 통신을 용이하게 합니다"
 
-#: src/language/generate.ts:12
+#: src/language/generate.ts:36
 #, fuzzy
 msgid "[Nginx UI] Environment variables cleaned"
 msgstr "환경 변수 설정"
 
-#: src/language/generate.ts:21
+#: src/language/generate.ts:28
 msgid "[Nginx UI] Finished"
 msgstr "[Nginx UI] 완료됨"
 
-#: src/language/generate.ts:4
+#: src/language/generate.ts:25
 #, fuzzy
 msgid "[Nginx UI] Issued certificate successfully"
 msgstr "성공적으로 활성화됨"
 
-#: src/language/generate.ts:14
+#: src/language/generate.ts:50
 msgid "[Nginx UI] Obtaining certificate"
 msgstr "[Nginx UI] 인증서 획득 중"
 
@@ -63,44 +66,44 @@ msgstr "[Nginx UI] 인증서 획득 중"
 msgid "[Nginx UI] Preparing for certificate revocation"
 msgstr "[Nginx UI] 인증서 해지 준비 중"
 
-#: src/language/generate.ts:18
+#: src/language/generate.ts:46
 msgid "[Nginx UI] Preparing lego configurations"
 msgstr "[Nginx UI] 레고 구성 준비 중"
 
-#: src/language/generate.ts:25
+#: src/language/generate.ts:19
 msgid "[Nginx UI] Reloading nginx"
 msgstr "[Nginx UI] Nginx 다시 로드 중"
 
-#: src/language/generate.ts:16
+#: src/language/generate.ts:14
 msgid "[Nginx UI] Revocation completed"
 msgstr "[Nginx UI] 해지 완료"
 
-#: src/language/generate.ts:7
+#: src/language/generate.ts:4
 msgid "[Nginx UI] Revoking certificate"
 msgstr "[Nginx UI] 인증서 취소 중"
 
-#: src/language/generate.ts:26
+#: src/language/generate.ts:29
 msgid "[Nginx UI] Revoking old certificate"
 msgstr "[Nginx UI] 이전 인증서 취소 중"
 
-#: src/language/generate.ts:20
+#: src/language/generate.ts:18
 msgid "[Nginx UI] Setting DNS01 challenge provider"
 msgstr "[Nginx UI] DNS01 챌린지 공급자 설정 중"
 
-#: src/language/generate.ts:6
+#: src/language/generate.ts:27
 #, fuzzy
 msgid "[Nginx UI] Setting environment variables"
 msgstr "환경 변수 설정"
 
-#: src/language/generate.ts:11
+#: src/language/generate.ts:48
 msgid "[Nginx UI] Setting HTTP01 challenge provider"
 msgstr "[Nginx UI] HTTP01 챌린지 공급자 설정 중"
 
-#: src/language/generate.ts:15
+#: src/language/generate.ts:12
 msgid "[Nginx UI] Writing certificate private key to disk"
 msgstr "[Nginx UI] 인증서 개인 키를 디스크에 기록 중"
 
-#: src/language/generate.ts:27
+#: src/language/generate.ts:51
 msgid "[Nginx UI] Writing certificate to disk"
 msgstr "[Nginx UI] 인증서를 디스크에 작성 중"
 
@@ -121,6 +124,10 @@ msgstr "대하여"
 msgid "Access Log"
 msgstr "접근 로그"
 
+#: src/constants/errors/self_check.ts:21
+msgid "Access log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:90
 #: src/routes/modules/nginx_log.ts:17
 msgid "Access Logs"
@@ -331,7 +338,7 @@ msgstr "ChatGPT에게 도움 요청"
 msgid "Assistant"
 msgstr "어시스턴트"
 
-#: src/components/SelfCheck/SelfCheck.vue:31
+#: src/components/SelfCheck/SelfCheck.vue:30
 msgid "Attempt to fix"
 msgstr "수정 시도"
 
@@ -534,8 +541,8 @@ msgid ""
 "Calculated based on worker_processes * worker_connections. Actual "
 "performance depends on hardware, configuration, and workload"
 msgstr ""
-"worker_processes * worker_connections를 기반으로 계산되었습니다. 실제 성능은 하드웨어, 구성 및 작업량에 "
-"따라 달라집니다"
+"worker_processes * worker_connections를 기반으로 계산되었습니다. 실제 성능은 "
+"하드웨어, 구성 및 작업량에 따라 달라집니다"
 
 #: src/components/ChatGPT/ChatGPT.vue:356
 #: src/components/NgxConfigEditor/NgxServer.vue:54
@@ -611,7 +618,7 @@ msgstr "인증서 만료됨"
 msgid "Certificate Expiring Soon"
 msgstr "인증서 만료 임박"
 
-#: src/language/generate.ts:5
+#: src/language/generate.ts:33
 #, fuzzy
 msgid "Certificate not found: %{error}"
 msgstr "인증서 디코드 오류"
@@ -638,7 +645,7 @@ msgstr "인증서 갱신 간격"
 msgid "Certificate renewed successfully"
 msgstr "성공적으로 제거됨"
 
-#: src/language/generate.ts:10
+#: src/language/generate.ts:11
 #, fuzzy
 msgid "Certificate revoked successfully"
 msgstr "인증서가 성공적으로 제거되었습니다"
@@ -700,46 +707,73 @@ msgstr "다시 확인"
 msgid "Check again"
 msgstr "다시 확인"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:31
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:14
+#, fuzzy
 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`."
+"Check if HTTPS is enabled. Using HTTP outside localhost is insecure and "
+"prevents using Passkeys and clipboard features"
 msgstr ""
-"/var/run/docker.sock이 존재하는지 확인하세요. Nginx UI 공식 Docker 이미지를 사용 중이라면 Docker "
-"소켓이 다음과 같이 마운트되었는지 확인하세요: `-v /var/run/docker.sock:/var/run/docker.sock`."
+"HTTPS가 활성화되었는지 확인하세요. localhost 외부에서 HTTP를 사용하는 것은 안"
+"전하지 않으며 Passkeys 및 클립보드 기능 사용을 방해요."
 
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:11
-msgid ""
-"Check if HTTPS is enabled. Using HTTP outside localhost is insecure and "
-"prevents using Passkeys and clipboard features."
+#: src/language/generate.ts:40
+msgid "Check if the docker socket exists."
+msgstr ""
+
+#: src/language/generate.ts:20
+msgid "Check if the nginx access log path exists"
 msgstr ""
-"HTTPS가 활성화되었는지 확인하세요. localhost 외부에서 HTTP를 사용하는 것은 안전하지 않으며 Passkeys 및 클립보드 "
-"기능 사용을 방해요."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:26
-msgid "Check if the nginx.conf includes the conf.d directory."
+#: src/language/generate.ts:44
+#, fuzzy
+msgid "Check if the nginx configuration directory exists"
 msgstr "nginx.conf에 conf.d 디렉터리가 포함되어 있는지 확인하세요."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:16
-msgid "Check if the nginx.conf includes the sites-enabled directory."
+#: src/language/generate.ts:9
+#, fuzzy
+msgid "Check if the nginx configuration entry file exists"
+msgstr "nginx.conf에 conf.d 디렉터리가 포함되어 있는지 확인하세요."
+
+#: src/language/generate.ts:32
+msgid "Check if the nginx error log path exists"
+msgstr ""
+
+#: src/language/generate.ts:24
+msgid "Check if the nginx PID path exists"
+msgstr ""
+
+#: src/language/generate.ts:43
+#, fuzzy
+msgid "Check if the nginx.conf includes the conf.d directory"
+msgstr "nginx.conf에 conf.d 디렉터리가 포함되어 있는지 확인하세요."
+
+#: src/language/generate.ts:23
+#, fuzzy
+msgid "Check if the nginx.conf includes the sites-enabled directory"
 msgstr "nginx.conf에 sites-enabled 디렉터리가 포함되어 있는지 확인하세요."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:21
-msgid "Check if the nginx.conf includes the streams-enabled directory."
+#: src/language/generate.ts:5
+#, fuzzy
+msgid "Check if the nginx.conf includes the streams-enabled directory"
 msgstr "nginx.conf에 streams-enabled 디렉터리가 포함되어 있는지 확인하세요."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:6
+#: src/language/generate.ts:30
+#, fuzzy
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
-"nginx configuration directory."
-msgstr "sites-available 및 sites-enabled 디렉터리가 nginx 구성 디렉터리 아래에 있는지 확인합니다."
+"nginx configuration directory"
+msgstr ""
+"sites-available 및 sites-enabled 디렉터리가 nginx 구성 디렉터리 아래에 있는"
+"지 확인합니다."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:11
+#: src/language/generate.ts:38
+#, fuzzy
 msgid ""
-"Check if the streams-available and streams-enabled directories are under "
-"the nginx configuration directory."
-msgstr "streams-available 및 streams-enabled 디렉터리가 nginx 구성 디렉터리 아래에 있는지 확인합니다."
+"Check if the streams-available and streams-enabled directories are under the "
+"nginx configuration directory"
+msgstr ""
+"streams-available 및 streams-enabled 디렉터리가 nginx 구성 디렉터리 아래에 있"
+"는지 확인합니다."
 
 #: src/constants/errors/crypto.ts:3
 msgid "Cipher text is too short"
@@ -837,6 +871,16 @@ msgstr "현재와 ​​비교하십시오"
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr "압축 수준, 1은 가장 낮고 9는 가장 높습니다"
 
+#: src/constants/errors/self_check.ts:17
+#, fuzzy
+msgid "Config directory not exist"
+msgstr "Nginx 구성 오류름"
+
+#: src/constants/errors/self_check.ts:18
+#, fuzzy
+msgid "Config entry file not exist"
+msgstr "Nginx 구성 오류름"
+
 #: src/constants/errors/backup.ts:14
 #, fuzzy
 msgid "Config path is empty"
@@ -965,7 +1009,9 @@ msgstr "다른 것 생성하기"
 msgid ""
 "Create system backups including Nginx configuration and Nginx UI settings. "
 "Backup files will be automatically downloaded to your computer."
-msgstr "Nginx 구성 및 Nginx UI 설정을 포함한 시스템 백업을 생성합니다. 백업 파일은 자동으로 컴퓨터에 다운로드됩니다."
+msgstr ""
+"Nginx 구성 및 Nginx UI 설정을 포함한 시스템 백업을 생성합니다. 백업 파일은 자"
+"동으로 컴퓨터에 다운로드됩니다."
 
 #: src/views/environments/group/columns.ts:31
 #: src/views/notification/notificationColumns.tsx:59
@@ -1331,11 +1377,11 @@ msgstr "이 업스트림을 제거하시겠습니까?"
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:30
-msgid "Docker Socket"
+#: src/language/generate.ts:10
+msgid "Docker socket exists"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:15
+#: src/constants/errors/self_check.ts:16
 msgid "Docker socket not exist"
 msgstr ""
 
@@ -1353,7 +1399,8 @@ msgstr "도메인"
 
 #: src/views/certificate/CertificateEditor.vue:112
 msgid "Domains list is empty, try to reopen Auto Cert for %{config}"
-msgstr "도메인 목록이 비어 있습니다. %{config}에 대한 자동 인증서를 다시 열어보세요"
+msgstr ""
+"도메인 목록이 비어 있습니다. %{config}에 대한 자동 인증서를 다시 열어보세요"
 
 #: src/language/constants.ts:27
 msgid "Download latest release error"
@@ -1581,6 +1628,10 @@ msgstr ""
 msgid "Error Log"
 msgstr "오류 로그"
 
+#: src/constants/errors/self_check.ts:22
+msgid "Error log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:98
 #: src/routes/modules/nginx_log.ts:24
 msgid "Error Logs"
@@ -1674,7 +1725,7 @@ msgstr ""
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:9
+#: src/constants/errors/self_check.ts:10
 #, fuzzy
 msgid "Failed to create backup"
 msgstr "%{msg} 활성화 실패"
@@ -1771,7 +1822,7 @@ msgstr ""
 msgid "Failed to delete certificate"
 msgstr "인증서 획득 실패"
 
-#: src/language/generate.ts:9
+#: src/language/generate.ts:26
 #, fuzzy
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "인증서 획득 실패"
@@ -1890,7 +1941,7 @@ msgstr "%{msg} 활성화 실패"
 msgid "Failed to open zip file: {0}"
 msgstr "%{msg} 활성화 실패"
 
-#: src/constants/errors/self_check.ts:4
+#: src/constants/errors/self_check.ts:5
 msgid "Failed to parse nginx.conf"
 msgstr ""
 
@@ -1912,7 +1963,7 @@ msgstr "%{msg} 활성화 실패"
 msgid "Failed to read hash info file: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:3
+#: src/constants/errors/self_check.ts:4
 msgid "Failed to read nginx.conf"
 msgstr ""
 
@@ -2123,7 +2174,7 @@ msgstr "HTTP 검증 포트"
 msgid "HTTP01"
 msgstr "HTTP01"
 
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:13
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2137,8 +2188,8 @@ msgstr ""
 
 #: src/views/nginx_log/NginxLogList.vue:81
 msgid ""
-"If logs are not indexed, please check if the log file is under the "
-"directory in Nginx.LogDirWhiteList."
+"If logs are not indexed, please check if the log file is under the directory "
+"in Nginx.LogDirWhiteList."
 msgstr ""
 
 #: src/views/preference/tabs/AuthSettings.vue:145
@@ -2486,8 +2537,11 @@ msgstr "위치들"
 msgid "Log"
 msgstr "로그인"
 
-#: src/language/generate.ts:23
-msgid "Log file %{log_path} is not a regular file. "
+#: src/language/generate.ts:34
+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:67
@@ -2512,16 +2566,18 @@ msgstr "로그관리"
 
 #: src/views/preference/tabs/LogrotateSettings.vue:13
 msgid ""
-"Logrotate, by default, is enabled in most mainstream Linux distributions "
-"for users who install Nginx UI on the host machine, so you don't need to "
-"modify the parameters on this page. For users who install Nginx UI using "
-"Docker containers, you can manually enable this option. The crontab task "
-"scheduler of Nginx UI will execute the logrotate command at the interval "
-"you set in minutes."
-msgstr ""
-"Logrotate는 대부분의 주류 리눅스 배포판에서Nginx UI를 호스트 머신에 설치하는 사용자에게 기본적으로 활성화되어 있으므로이 "
-"페이지의 매개 변수를 수정할 필요가 없습니다. 도커 컨테이너를 사용하여 Nginx UI를 설치하는사용자는이 옵션을 수동으로 활성화할 수 "
-"있습니다. Nginx UI의 크론탭 작업 스케줄러는설정한 간격 (분 단위)에서 logrotate 명령을 실행합니다."
+"Logrotate, by default, is enabled in most mainstream Linux distributions for "
+"users who install Nginx UI on the host machine, so you don't need to modify "
+"the parameters on this page. For users who install Nginx UI using Docker "
+"containers, you can manually enable this option. The crontab task scheduler "
+"of Nginx UI will execute the logrotate command at the interval you set in "
+"minutes."
+msgstr ""
+"Logrotate는 대부분의 주류 리눅스 배포판에서Nginx UI를 호스트 머신에 설치하는 "
+"사용자에게 기본적으로 활성화되어 있으므로이 페이지의 매개 변수를 수정할 필요"
+"가 없습니다. 도커 컨테이너를 사용하여 Nginx UI를 설치하는사용자는이 옵션을 수"
+"동으로 활성화할 수 있습니다. Nginx UI의 크론탭 작업 스케줄러는설정한 간격 "
+"(분 단위)에서 logrotate 명령을 실행합니다."
 
 #: src/views/site/components/SiteStatusSegmented.vue:138
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
@@ -2545,8 +2601,8 @@ msgid ""
 "Make sure you have configured a reverse proxy for .well-known directory to "
 "HTTPChallengePort before obtaining the certificate."
 msgstr ""
-"인증서를 획득하기 전에 .well-known 디렉토리에 대한역방향 프록시를 HTTPChallengePort(기본값: 9180)로 "
-"구성했는지 확인하세요."
+"인증서를 획득하기 전에 .well-known 디렉토리에 대한역방향 프록시를 "
+"HTTPChallengePort(기본값: 9180)로 구성했는지 확인하세요."
 
 #: src/routes/modules/config.ts:10 src/views/config/ConfigEditor.vue:115
 #: src/views/config/ConfigEditor.vue:166 src/views/config/ConfigList.vue:72
@@ -2787,37 +2843,29 @@ msgstr "Nginx"
 msgid "Nginx Access Log Path"
 msgstr "Nginx 접근 로그 경로"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:25
+#: src/language/generate.ts:16
 #, fuzzy
-msgid "Nginx Conf Include Conf.d"
-msgstr "터미널 시작 명령"
-
-#: src/components/SelfCheck/tasks/backend/index.ts:15
-msgid "Nginx Conf Include Sites Enabled"
-msgstr ""
-
-#: src/components/SelfCheck/tasks/backend/index.ts:20
-msgid "Nginx Conf Include Streams Enabled"
-msgstr ""
+msgid "Nginx access log path exists"
+msgstr "Nginx 접근 로그 경로"
 
-#: src/constants/errors/self_check.ts:5
+#: src/constants/errors/self_check.ts:6
 msgid "Nginx conf no http block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:7
+#: src/constants/errors/self_check.ts:8
 msgid "Nginx conf no stream block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:14
+#: src/constants/errors/self_check.ts:15
 #, fuzzy
 msgid "Nginx conf not include conf.d directory"
 msgstr "터미널 시작 명령"
 
-#: src/constants/errors/self_check.ts:6
+#: src/constants/errors/self_check.ts:7
 msgid "Nginx conf not include sites-enabled"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:8
+#: src/constants/errors/self_check.ts:9
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 
@@ -2826,6 +2874,16 @@ msgstr ""
 msgid "Nginx config directory is not set"
 msgstr "Nginx 구성 오류름"
 
+#: src/language/generate.ts:31
+#, fuzzy
+msgid "Nginx configuration directory exists"
+msgstr "Nginx 구성 오류름"
+
+#: src/language/generate.ts:15
+#, fuzzy
+msgid "Nginx configuration entry file exists"
+msgstr "Nginx 구성 오류름"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:138
 #, fuzzy
 msgid "Nginx configuration has been restored"
@@ -2865,6 +2923,11 @@ msgstr ""
 msgid "Nginx Error Log Path"
 msgstr "Nginx 오류 로그 경로"
 
+#: src/language/generate.ts:21
+#, fuzzy
+msgid "Nginx error log path exists"
+msgstr "Nginx 오류 로그 경로"
+
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/views/dashboard/NginxDashBoard.vue:112
@@ -2899,6 +2962,11 @@ msgstr ""
 msgid "Nginx PID Path"
 msgstr "Nginx 오류 로그 경로"
 
+#: src/language/generate.ts:45
+#, fuzzy
+msgid "Nginx PID path exists"
+msgstr "Nginx 오류 로그 경로"
+
 #: src/views/preference/tabs/NginxSettings.vue:40
 msgid "Nginx Reload Command"
 msgstr ""
@@ -2959,10 +3027,25 @@ msgstr "Nginx 구성 오류름"
 #: src/components/SystemRestore/SystemRestoreContent.vue:336
 #, fuzzy
 msgid ""
-"Nginx UI configuration has been restored and will restart automatically in "
-"a few seconds."
+"Nginx UI configuration has been restored and will restart automatically in a "
+"few seconds."
 msgstr "Nginx 구성 오류름"
 
+#: src/language/generate.ts:8
+#, fuzzy
+msgid "Nginx.conf includes conf.d directory"
+msgstr "터미널 시작 명령"
+
+#: src/language/generate.ts:42
+#, fuzzy
+msgid "Nginx.conf includes sites-enabled directory"
+msgstr "nginx.conf에 sites-enabled 디렉터리가 포함되어 있는지 확인하세요."
+
+#: src/language/generate.ts:39
+#, fuzzy
+msgid "Nginx.conf includes streams-enabled directory"
+msgstr "nginx.conf에 streams-enabled 디렉터리가 포함되어 있는지 확인하세요."
+
 #: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
@@ -3299,6 +3382,10 @@ msgstr "성공적으로 비활성화됨"
 msgid "Performing core upgrade"
 msgstr "핵심 업그레이드 수행 중"
 
+#: src/constants/errors/self_check.ts:19
+msgid "PID path not exist"
+msgstr ""
+
 #: src/constants/errors/crypto.ts:2
 msgid "Plain text is empty"
 msgstr ""
@@ -3342,13 +3429,15 @@ 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 "먼저 인증서 > DNS 자격 증명에 자격 증명을 추가한 다음,DNS 제공자의 API를 요청하려면 아래 자격 증명 중 하나를 선택해주세요."
+msgstr ""
+"먼저 인증서 > DNS 자격 증명에 자격 증명을 추가한 다음,DNS 제공자의 API를 요청"
+"하려면 아래 자격 증명 중 하나를 선택해주세요."
 
 #: src/components/Notification/notifications.ts:166
 #: src/language/constants.ts:59
 msgid ""
-"Please generate new recovery codes in the preferences immediately to "
-"prevent lockout."
+"Please generate new recovery codes in the preferences immediately to prevent "
+"lockout."
 msgstr ""
 
 #: src/views/config/components/Rename.vue:65
@@ -3393,7 +3482,8 @@ msgid "Please log in."
 msgstr ""
 
 #: src/views/certificate/DNSCredential.vue:62
-msgid "Please note that the unit of time configurations below are all in seconds."
+msgid ""
+"Please note that the unit of time configurations below are all in seconds."
 msgstr "아래의 시간 설정 단위는 모두 초 단위임을 유의해주세요."
 
 #: src/views/install/components/InstallView.vue:100
@@ -3505,7 +3595,7 @@ msgstr "읽기"
 msgid "Receive"
 msgstr "수신"
 
-#: src/components/SelfCheck/SelfCheck.vue:24
+#: src/components/SelfCheck/SelfCheck.vue:23
 msgid "Recheck"
 msgstr ""
 
@@ -3989,6 +4079,10 @@ msgstr "성공적으로 저장됨"
 msgid "Saved successfully"
 msgstr "성공적으로 저장됨"
 
+#: src/constants/errors/self_check.ts:20
+msgid "Sbin path not exist"
+msgstr ""
+
 #: src/views/preference/components/AuthSettings/TOTP.vue:69
 msgid "Scan the QR code with your mobile phone to add the account to the app."
 msgstr ""
@@ -4018,7 +4112,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 ""
 
@@ -4087,14 +4181,14 @@ msgstr "HTTP01 공급자 설정"
 
 #: src/constants/errors/nginx_log.ts:8
 msgid ""
-"Settings.NginxLogSettings.AccessLogPath is empty, refer to "
-"https://nginxui.com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui."
+"com/guide/config-nginx.html for more information"
 msgstr ""
 
 #: src/constants/errors/nginx_log.ts:7
 msgid ""
-"Settings.NginxLogSettings.ErrorLogPath is empty, refer to "
-"https://nginxui.com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui."
+"com/guide/config-nginx.html for more information"
 msgstr ""
 
 #: src/views/install/components/InstallView.vue:64
@@ -4142,20 +4236,20 @@ msgstr "사이트 로그"
 msgid "Site not found"
 msgstr "파일을 찾을 수 없음"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:5
+#: src/language/generate.ts:7
 #, fuzzy
-msgid "Sites Directory"
+msgid "Sites directory exists"
 msgstr "디렉토리"
 
 #: src/routes/modules/sites.ts:19
 msgid "Sites List"
 msgstr "사이트 목록"
 
-#: src/constants/errors/self_check.ts:10
+#: src/constants/errors/self_check.ts:11
 msgid "Sites-available directory not exist"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:11
+#: src/constants/errors/self_check.ts:12
 msgid "Sites-enabled directory not exist"
 msgstr ""
 
@@ -4267,16 +4361,16 @@ msgstr "비활성화됨"
 msgid "Stream not found"
 msgstr "파일을 찾을 수 없음"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:10
+#: src/language/generate.ts:41
 #, fuzzy
-msgid "Streams Directory"
+msgid "Streams directory exists"
 msgstr "디렉토리"
 
-#: src/constants/errors/self_check.ts:12
+#: src/constants/errors/self_check.ts:13
 msgid "Streams-available directory not exist"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:13
+#: src/constants/errors/self_check.ts:14
 #, fuzzy
 msgid "Streams-enabled directory not exist"
 msgstr "디렉토리"
@@ -4289,12 +4383,12 @@ msgstr ""
 msgid "Success"
 msgstr "성공"
 
-#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
+#: 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"
+"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/SystemRestore/SystemRestoreContent.vue:197
@@ -4415,6 +4509,11 @@ msgstr "시스템"
 msgid "System restored successfully."
 msgstr "Nginx가 성공적으로 재시작됨"
 
+#: src/constants/errors/self_check.ts:3
+#, fuzzy
+msgid "Task is not fixable"
+msgstr "토큰이 유효하지 않습니다"
+
 #: src/constants/errors/self_check.ts:2
 #, fuzzy
 msgid "Task not found"
@@ -4439,7 +4538,9 @@ msgid ""
 "The certificate for the domain will be checked 30 minutes, and will be "
 "renewed if it has been more than 1 week or the period you set in settings "
 "since it was last issued."
-msgstr "도메인의 인증서는 매 시간 확인되며,마지막으로 발급된 지 1개월이 경과한 경우 갱신됩니다."
+msgstr ""
+"도메인의 인증서는 매 시간 확인되며,마지막으로 발급된 지 1개월이 경과한 경우 "
+"갱신됩니다."
 
 #: src/views/install/components/InstallForm.vue:48
 msgid "The filename cannot contain the following characters: %{c}"
@@ -4462,8 +4563,7 @@ msgstr "Certificate Status"
 
 #: src/constants/errors/nginx_log.ts:2
 msgid ""
-"The log path is not under the paths in "
-"settings.NginxSettings.LogDirWhiteList"
+"The log path is not under the paths in settings.NginxSettings.LogDirWhiteList"
 msgstr ""
 
 #: src/views/preference/tabs/OpenAISettings.vue:23
@@ -4474,7 +4574,8 @@ msgid ""
 msgstr ""
 
 #: src/views/preference/tabs/OpenAISettings.vue:90
-msgid "The model used for code completion, if not set, the chat model will be used."
+msgid ""
+"The model used for code completion, if not set, the chat model will be used."
 msgstr ""
 
 #: src/views/preference/tabs/NodeSettings.vue:18
@@ -4580,7 +4681,8 @@ msgid "This field should not be empty"
 msgstr "이 필드는 비워둘 수 없습니다"
 
 #: src/constants/form_errors.ts:6
-msgid "This field should only contain letters, unicode characters, numbers, and -_."
+msgid ""
+"This field should only contain letters, unicode characters, numbers, and -_."
 msgstr ""
 
 #: src/views/dashboard/NginxDashBoard.vue:153
@@ -4620,7 +4722,8 @@ msgid ""
 msgstr ""
 
 #: src/views/environments/list/BatchUpgrader.vue:182
-msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
+msgid ""
+"This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr ""
 
 #: src/views/preference/tabs/AuthSettings.vue:124
@@ -4664,12 +4767,13 @@ msgstr ""
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:15
 msgid ""
 "To make sure the certification auto-renewal can work normally, we need to "
-"add a location which can proxy the request from authority to backend, and "
-"we need to save this file and reload the Nginx. Are you sure you want to "
+"add a location which can proxy the request from authority to backend, and we "
+"need to save this file and reload the Nginx. Are you sure you want to "
 "continue?"
 msgstr ""
-"인증서 자동 갱신이 정상적으로 작동하도록 하려면,권한에서 백엔드로 요청을 프록시할 수 있는 위치를 추가해야 하며,이 파일을 저장하고 "
-"Nginx를 다시로드해야 합니다.계속하시겠습니까?"
+"인증서 자동 갱신이 정상적으로 작동하도록 하려면,권한에서 백엔드로 요청을 프록"
+"시할 수 있는 위치를 추가해야 하며,이 파일을 저장하고 Nginx를 다시로드해야 합"
+"니다.계속하시겠습니까?"
 
 #: src/views/preference/tabs/OpenAISettings.vue:36
 msgid ""
@@ -4749,7 +4853,7 @@ msgstr "유형"
 msgid "Unknown"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:44
+#: src/components/SelfCheck/SelfCheck.vue:43
 msgid "Unknown issue"
 msgstr ""
 
@@ -4921,13 +5025,17 @@ msgstr ""
 msgid ""
 "We will add one or more TXT records to the DNS records of your domain for "
 "ownership verification."
-msgstr "도메인 소유권 검증을 위해 도메인의 DNS레코드에 하나 이상의 TXT 레코드를 추가할 것입니다."
+msgstr ""
+"도메인 소유권 검증을 위해 도메인의 DNS레코드에 하나 이상의 TXT 레코드를 추가"
+"할 것입니다."
 
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:140
 msgid ""
-"We will remove the HTTPChallenge configuration from this file and reload "
-"the Nginx. Are you sure you want to continue?"
-msgstr "이 파일에서 HTTPChallenge 구성을 제거하고 Nginx를 다시 로드할 예정입니다. 계속하시겠습니까?"
+"We will remove the HTTPChallenge configuration from this file and reload the "
+"Nginx. Are you sure you want to continue?"
+msgstr ""
+"이 파일에서 HTTPChallenge 구성을 제거하고 Nginx를 다시 로드할 예정입니다. 계"
+"속하시겠습니까?"
 
 #: src/views/preference/tabs/AuthSettings.vue:97
 msgid "Webauthn"
@@ -5010,8 +5118,8 @@ msgstr "예"
 
 #: src/views/terminal/Terminal.vue:135
 msgid ""
-"You are accessing this terminal over an insecure HTTP connection on a "
-"non-localhost domain. This may expose sensitive information."
+"You are accessing this terminal over an insecure HTTP connection on a non-"
+"localhost domain. This may expose sensitive information."
 msgstr ""
 
 #: src/views/system/Upgrade.vue:202
@@ -5037,7 +5145,8 @@ msgid ""
 msgstr ""
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81
-msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
+msgid ""
+"You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
 msgstr ""
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94
@@ -5059,6 +5168,19 @@ msgstr ""
 msgid "Your passkeys"
 msgstr ""
 
+#~ 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`."
+#~ msgstr ""
+#~ "/var/run/docker.sock이 존재하는지 확인하세요. Nginx UI 공식 Docker 이미지"
+#~ "를 사용 중이라면 Docker 소켓이 다음과 같이 마운트되었는지 확인하세요: `-"
+#~ "v /var/run/docker.sock:/var/run/docker.sock`."
+
+#, fuzzy
+#~ msgid "Nginx Conf Include Conf.d"
+#~ msgstr "터미널 시작 명령"
+
 #, fuzzy
 #~ msgid "Format error %{msg}"
 #~ msgstr "형식 오류 %{msg}"
@@ -5122,11 +5244,14 @@ msgstr ""
 #~ msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
 #, fuzzy
-#~ msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: %{resp}"
+#~ msgid ""
+#~ "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: "
+#~ "%{resp}"
 #~ msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
 #, fuzzy
-#~ msgid "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
+#~ msgid ""
+#~ "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
 #~ msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
 #, fuzzy
@@ -5140,7 +5265,8 @@ msgstr ""
 #~ msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
 #, fuzzy
-#~ msgid "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
+#~ msgid ""
+#~ "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
 #~ msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
 #, fuzzy

+ 142 - 74
app/src/language/messages.pot

@@ -2,43 +2,43 @@ msgid ""
 msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 
-#: src/language/generate.ts:19
+#: src/language/generate.ts:47
 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}"
 msgstr ""
 
-#: src/language/generate.ts:13
+#: src/language/generate.ts:49
 msgid "[Nginx UI] Backing up current certificate for later revocation"
 msgstr ""
 
-#: src/language/generate.ts:28
+#: src/language/generate.ts:6
 msgid "[Nginx UI] Certificate renewed successfully"
 msgstr ""
 
-#: src/language/generate.ts:8
+#: src/language/generate.ts:37
 msgid "[Nginx UI] Certificate successfully revoked"
 msgstr ""
 
-#: src/language/generate.ts:29
+#: src/language/generate.ts:13
 msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate"
 msgstr ""
 
-#: src/language/generate.ts:24
+#: src/language/generate.ts:35
 msgid "[Nginx UI] Creating client facilitates communication with the CA server"
 msgstr ""
 
-#: src/language/generate.ts:12
+#: src/language/generate.ts:36
 msgid "[Nginx UI] Environment variables cleaned"
 msgstr ""
 
-#: src/language/generate.ts:21
+#: src/language/generate.ts:28
 msgid "[Nginx UI] Finished"
 msgstr ""
 
-#: src/language/generate.ts:4
+#: src/language/generate.ts:25
 msgid "[Nginx UI] Issued certificate successfully"
 msgstr ""
 
-#: src/language/generate.ts:14
+#: src/language/generate.ts:50
 msgid "[Nginx UI] Obtaining certificate"
 msgstr ""
 
@@ -46,43 +46,43 @@ msgstr ""
 msgid "[Nginx UI] Preparing for certificate revocation"
 msgstr ""
 
-#: src/language/generate.ts:18
+#: src/language/generate.ts:46
 msgid "[Nginx UI] Preparing lego configurations"
 msgstr ""
 
-#: src/language/generate.ts:25
+#: src/language/generate.ts:19
 msgid "[Nginx UI] Reloading nginx"
 msgstr ""
 
-#: src/language/generate.ts:16
+#: src/language/generate.ts:14
 msgid "[Nginx UI] Revocation completed"
 msgstr ""
 
-#: src/language/generate.ts:7
+#: src/language/generate.ts:4
 msgid "[Nginx UI] Revoking certificate"
 msgstr ""
 
-#: src/language/generate.ts:26
+#: src/language/generate.ts:29
 msgid "[Nginx UI] Revoking old certificate"
 msgstr ""
 
-#: src/language/generate.ts:20
+#: src/language/generate.ts:18
 msgid "[Nginx UI] Setting DNS01 challenge provider"
 msgstr ""
 
-#: src/language/generate.ts:6
+#: src/language/generate.ts:27
 msgid "[Nginx UI] Setting environment variables"
 msgstr ""
 
-#: src/language/generate.ts:11
+#: src/language/generate.ts:48
 msgid "[Nginx UI] Setting HTTP01 challenge provider"
 msgstr ""
 
-#: src/language/generate.ts:15
+#: src/language/generate.ts:12
 msgid "[Nginx UI] Writing certificate private key to disk"
 msgstr ""
 
-#: src/language/generate.ts:27
+#: src/language/generate.ts:51
 msgid "[Nginx UI] Writing certificate to disk"
 msgstr ""
 
@@ -102,6 +102,10 @@ msgstr ""
 msgid "Access Log"
 msgstr ""
 
+#: src/constants/errors/self_check.ts:21
+msgid "Access log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:90
 #: src/routes/modules/nginx_log.ts:17
 msgid "Access Logs"
@@ -314,7 +318,7 @@ msgstr ""
 msgid "Assistant"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:31
+#: src/components/SelfCheck/SelfCheck.vue:30
 msgid "Attempt to fix"
 msgstr ""
 
@@ -585,7 +589,7 @@ msgstr ""
 msgid "Certificate Expiring Soon"
 msgstr ""
 
-#: src/language/generate.ts:5
+#: src/language/generate.ts:33
 msgid "Certificate not found: %{error}"
 msgstr ""
 
@@ -610,7 +614,7 @@ msgstr ""
 msgid "Certificate renewed successfully"
 msgstr ""
 
-#: src/language/generate.ts:10
+#: src/language/generate.ts:11
 msgid "Certificate revoked successfully"
 msgstr ""
 
@@ -668,32 +672,52 @@ msgstr ""
 msgid "Check again"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:31
-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`."
+#: 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/components/SelfCheck/tasks/frontend/https-check.ts:11
-msgid "Check if HTTPS is enabled. Using HTTP outside localhost is insecure and prevents using Passkeys and clipboard features."
+#: src/language/generate.ts:40
+msgid "Check if the docker socket exists."
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:26
-msgid "Check if the nginx.conf includes the conf.d directory."
+#: src/language/generate.ts:20
+msgid "Check if the nginx access log path exists"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:16
-msgid "Check if the nginx.conf includes the sites-enabled directory."
+#: src/language/generate.ts:44
+msgid "Check if the nginx configuration directory exists"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:21
-msgid "Check if the nginx.conf includes the streams-enabled directory."
+#: src/language/generate.ts:9
+msgid "Check if the nginx configuration entry file exists"
+msgstr ""
+
+#: src/language/generate.ts:32
+msgid "Check if the nginx error log path exists"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:6
-msgid "Check if the sites-available and sites-enabled directories are under the nginx configuration directory."
+#: src/language/generate.ts:24
+msgid "Check if the nginx PID path exists"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:11
-msgid "Check if the streams-available and streams-enabled directories are under the nginx configuration directory."
+#: src/language/generate.ts:43
+msgid "Check if the nginx.conf includes the conf.d directory"
+msgstr ""
+
+#: src/language/generate.ts:23
+msgid "Check if the nginx.conf includes the sites-enabled directory"
+msgstr ""
+
+#: src/language/generate.ts:5
+msgid "Check if the nginx.conf includes the streams-enabled directory"
+msgstr ""
+
+#: src/language/generate.ts:30
+msgid "Check if the sites-available and sites-enabled directories are under the nginx configuration directory"
+msgstr ""
+
+#: src/language/generate.ts:38
+msgid "Check if the streams-available and streams-enabled directories are under the nginx configuration directory"
 msgstr ""
 
 #: src/constants/errors/crypto.ts:3
@@ -791,6 +815,14 @@ msgstr ""
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr ""
 
+#: src/constants/errors/self_check.ts:17
+msgid "Config directory not exist"
+msgstr ""
+
+#: src/constants/errors/self_check.ts:18
+msgid "Config entry file not exist"
+msgstr ""
+
 #: src/constants/errors/backup.ts:14
 msgid "Config path is empty"
 msgstr ""
@@ -1257,11 +1289,11 @@ msgstr ""
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:30
-msgid "Docker Socket"
+#: src/language/generate.ts:10
+msgid "Docker socket exists"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:15
+#: src/constants/errors/self_check.ts:16
 msgid "Docker socket not exist"
 msgstr ""
 
@@ -1489,6 +1521,10 @@ msgstr ""
 msgid "Error Log"
 msgstr ""
 
+#: src/constants/errors/self_check.ts:22
+msgid "Error log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:98
 #: src/routes/modules/nginx_log.ts:24
 msgid "Error Logs"
@@ -1576,7 +1612,7 @@ msgstr ""
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:9
+#: src/constants/errors/self_check.ts:10
 msgid "Failed to create backup"
 msgstr ""
 
@@ -1656,7 +1692,7 @@ msgstr ""
 msgid "Failed to delete certificate"
 msgstr ""
 
-#: src/language/generate.ts:9
+#: src/language/generate.ts:26
 msgid "Failed to delete certificate from database: %{error}"
 msgstr ""
 
@@ -1756,7 +1792,7 @@ msgstr ""
 msgid "Failed to open zip file: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:4
+#: src/constants/errors/self_check.ts:5
 msgid "Failed to parse nginx.conf"
 msgstr ""
 
@@ -1776,7 +1812,7 @@ msgstr ""
 msgid "Failed to read hash info file: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:3
+#: src/constants/errors/self_check.ts:4
 msgid "Failed to read nginx.conf"
 msgstr ""
 
@@ -1970,7 +2006,7 @@ msgstr ""
 msgid "HTTP01"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:13
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2297,8 +2333,8 @@ msgstr ""
 msgid "Log"
 msgstr ""
 
-#: src/language/generate.ts:23
-msgid "Log file %{log_path} is not a regular file. "
+#: src/language/generate.ts:34
+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
@@ -2578,35 +2614,27 @@ msgstr ""
 msgid "Nginx Access Log Path"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:25
-msgid "Nginx Conf Include Conf.d"
-msgstr ""
-
-#: src/components/SelfCheck/tasks/backend/index.ts:15
-msgid "Nginx Conf Include Sites Enabled"
-msgstr ""
-
-#: src/components/SelfCheck/tasks/backend/index.ts:20
-msgid "Nginx Conf Include Streams Enabled"
+#: src/language/generate.ts:16
+msgid "Nginx access log path exists"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:5
+#: src/constants/errors/self_check.ts:6
 msgid "Nginx conf no http block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:7
+#: src/constants/errors/self_check.ts:8
 msgid "Nginx conf no stream block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:14
+#: src/constants/errors/self_check.ts:15
 msgid "Nginx conf not include conf.d directory"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:6
+#: src/constants/errors/self_check.ts:7
 msgid "Nginx conf not include sites-enabled"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:8
+#: src/constants/errors/self_check.ts:9
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 
@@ -2614,6 +2642,14 @@ msgstr ""
 msgid "Nginx config directory is not set"
 msgstr ""
 
+#: src/language/generate.ts:31
+msgid "Nginx configuration directory exists"
+msgstr ""
+
+#: src/language/generate.ts:15
+msgid "Nginx configuration entry file exists"
+msgstr ""
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:138
 msgid "Nginx configuration has been restored"
 msgstr ""
@@ -2648,6 +2684,10 @@ msgstr ""
 msgid "Nginx Error Log Path"
 msgstr ""
 
+#: src/language/generate.ts:21
+msgid "Nginx error log path exists"
+msgstr ""
+
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/views/dashboard/NginxDashBoard.vue:112
@@ -2682,6 +2722,10 @@ msgstr ""
 msgid "Nginx PID Path"
 msgstr ""
 
+#: src/language/generate.ts:45
+msgid "Nginx PID path exists"
+msgstr ""
+
 #: src/views/preference/tabs/NginxSettings.vue:40
 msgid "Nginx Reload Command"
 msgstr ""
@@ -2738,6 +2782,18 @@ msgstr ""
 msgid "Nginx UI configuration has been restored and will restart automatically in a few seconds."
 msgstr ""
 
+#: src/language/generate.ts:8
+msgid "Nginx.conf includes conf.d directory"
+msgstr ""
+
+#: src/language/generate.ts:42
+msgid "Nginx.conf includes sites-enabled directory"
+msgstr ""
+
+#: src/language/generate.ts:39
+msgid "Nginx.conf includes streams-enabled directory"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
@@ -3055,6 +3111,10 @@ msgstr ""
 msgid "Performing core upgrade"
 msgstr ""
 
+#: src/constants/errors/self_check.ts:19
+msgid "PID path not exist"
+msgstr ""
+
 #: src/constants/errors/crypto.ts:2
 msgid "Plain text is empty"
 msgstr ""
@@ -3239,7 +3299,7 @@ msgstr ""
 msgid "Receive"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:24
+#: src/components/SelfCheck/SelfCheck.vue:23
 msgid "Recheck"
 msgstr ""
 
@@ -3659,6 +3719,10 @@ msgstr ""
 msgid "Saved successfully"
 msgstr ""
 
+#: src/constants/errors/self_check.ts:20
+msgid "Sbin path not exist"
+msgstr ""
+
 #: src/views/preference/components/AuthSettings/TOTP.vue:69
 msgid "Scan the QR code with your mobile phone to add the account to the app."
 msgstr ""
@@ -3688,7 +3752,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 ""
@@ -3800,19 +3864,19 @@ msgstr ""
 msgid "Site not found"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:5
-msgid "Sites Directory"
+#: src/language/generate.ts:7
+msgid "Sites directory exists"
 msgstr ""
 
 #: src/routes/modules/sites.ts:19
 msgid "Sites List"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:10
+#: src/constants/errors/self_check.ts:11
 msgid "Sites-available directory not exist"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:11
+#: src/constants/errors/self_check.ts:12
 msgid "Sites-enabled directory not exist"
 msgstr ""
 
@@ -3915,15 +3979,15 @@ msgstr ""
 msgid "Stream not found"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:10
-msgid "Streams Directory"
+#: src/language/generate.ts:41
+msgid "Streams directory exists"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:12
+#: src/constants/errors/self_check.ts:13
 msgid "Streams-available directory not exist"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:13
+#: src/constants/errors/self_check.ts:14
 msgid "Streams-enabled directory not exist"
 msgstr ""
 
@@ -3936,7 +4000,7 @@ msgstr ""
 msgid "Success"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
+#: 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 ""
 
@@ -4048,6 +4112,10 @@ msgstr ""
 msgid "System restored successfully."
 msgstr ""
 
+#: src/constants/errors/self_check.ts:3
+msgid "Task is not fixable"
+msgstr ""
+
 #: src/constants/errors/self_check.ts:2
 msgid "Task not found"
 msgstr ""
@@ -4321,7 +4389,7 @@ msgstr ""
 msgid "Unknown"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:44
+#: src/components/SelfCheck/SelfCheck.vue:43
 msgid "Unknown issue"
 msgstr ""
 

+ 249 - 144
app/src/language/pt_PT/app.po

@@ -4,60 +4,62 @@ msgid ""
 msgstr ""
 "PO-Revision-Date: 2024-08-12 17:09+0000\n"
 "Last-Translator: Kleiser Sarifo <kleiser.sarifo@gmail.com>\n"
-"Language-Team: Portuguese (Portugal) "
-"<https://weblate.nginxui.com/projects/nginx-ui/frontend/pt_PT/>\n"
+"Language-Team: Portuguese (Portugal) <https://weblate.nginxui.com/projects/"
+"nginx-ui/frontend/pt_PT/>\n"
 "Language: pt_PT\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
 "X-Generator: Weblate 5.6.2\n"
 
-#: src/language/generate.ts:19
+#: src/language/generate.ts:47
 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}"
-msgstr "[Nginx UI] Utilizador ACME: %{name}, Email: %{email}, Diretório CA: %{caDir}"
+msgstr ""
+"[Nginx UI] Utilizador ACME: %{name}, Email: %{email}, Diretório CA: %{caDir}"
 
-#: src/language/generate.ts:13
+#: src/language/generate.ts:49
 msgid "[Nginx UI] Backing up current certificate for later revocation"
 msgstr ""
 "[Nginx UI] A fazer cópia de segurança do certificado atual para posterior "
 "revogação"
 
-#: src/language/generate.ts:28
+#: src/language/generate.ts:6
 #, fuzzy
 msgid "[Nginx UI] Certificate renewed successfully"
 msgstr "Limpo com sucesso"
 
-#: src/language/generate.ts:8
+#: src/language/generate.ts:37
 #, fuzzy
 msgid "[Nginx UI] Certificate successfully revoked"
 msgstr "Nginx reiniciado com sucesso"
 
-#: src/language/generate.ts:29
-msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate"
+#: src/language/generate.ts:13
+msgid ""
+"[Nginx UI] Certificate was used for server, reloading server TLS certificate"
 msgstr ""
 "[Nginx UI] O certificado foi usado para o servidor, a recarregar o "
 "certificado TLS do servidor"
 
-#: src/language/generate.ts:24
+#: src/language/generate.ts:35
 #, fuzzy
 msgid "[Nginx UI] Creating client facilitates communication with the CA server"
 msgstr "Criar cliente facilita comunicação com o servidor CA"
 
-#: src/language/generate.ts:12
+#: src/language/generate.ts:36
 #, fuzzy
 msgid "[Nginx UI] Environment variables cleaned"
 msgstr "Variáveis de ambiente limpas"
 
-#: src/language/generate.ts:21
+#: src/language/generate.ts:28
 msgid "[Nginx UI] Finished"
 msgstr "[Nginx UI] Concluído"
 
-#: src/language/generate.ts:4
+#: src/language/generate.ts:25
 #, fuzzy
 msgid "[Nginx UI] Issued certificate successfully"
 msgstr "Certificado emitido com sucesso"
 
-#: src/language/generate.ts:14
+#: src/language/generate.ts:50
 msgid "[Nginx UI] Obtaining certificate"
 msgstr "[Nginx UI] A obter certificado"
 
@@ -65,44 +67,44 @@ msgstr "[Nginx UI] A obter certificado"
 msgid "[Nginx UI] Preparing for certificate revocation"
 msgstr "[Nginx UI] Preparando para a revogação do certificado"
 
-#: src/language/generate.ts:18
+#: src/language/generate.ts:46
 msgid "[Nginx UI] Preparing lego configurations"
 msgstr "[Nginx UI] A preparar configurações do lego"
 
-#: src/language/generate.ts:25
+#: src/language/generate.ts:19
 msgid "[Nginx UI] Reloading nginx"
 msgstr "[Nginx UI] A recarregar o nginx"
 
-#: src/language/generate.ts:16
+#: src/language/generate.ts:14
 msgid "[Nginx UI] Revocation completed"
 msgstr "[Nginx UI] Revogação concluída"
 
-#: src/language/generate.ts:7
+#: src/language/generate.ts:4
 msgid "[Nginx UI] Revoking certificate"
 msgstr "[Nginx UI] Revogar certificado"
 
-#: src/language/generate.ts:26
+#: src/language/generate.ts:29
 msgid "[Nginx UI] Revoking old certificate"
 msgstr "[Nginx UI] Revogar certificado antigo"
 
-#: src/language/generate.ts:20
+#: src/language/generate.ts:18
 msgid "[Nginx UI] Setting DNS01 challenge provider"
 msgstr "[Nginx UI] A configurar o fornecedor de desafio DNS01"
 
-#: src/language/generate.ts:6
+#: src/language/generate.ts:27
 #, fuzzy
 msgid "[Nginx UI] Setting environment variables"
 msgstr "Definindo variáveis de ambiente"
 
-#: src/language/generate.ts:11
+#: src/language/generate.ts:48
 msgid "[Nginx UI] Setting HTTP01 challenge provider"
 msgstr "[Nginx UI] A configurar o fornecedor de desafio HTTP01"
 
-#: src/language/generate.ts:15
+#: src/language/generate.ts:12
 msgid "[Nginx UI] Writing certificate private key to disk"
 msgstr "[Nginx UI] A gravar a chave privada do certificado no disco"
 
-#: src/language/generate.ts:27
+#: src/language/generate.ts:51
 msgid "[Nginx UI] Writing certificate to disk"
 msgstr "[Nginx UI] A escrever o certificado no disco"
 
@@ -123,6 +125,10 @@ msgstr "Sobre"
 msgid "Access Log"
 msgstr "Logs de Acesso"
 
+#: src/constants/errors/self_check.ts:21
+msgid "Access log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:90
 #: src/routes/modules/nginx_log.ts:17
 msgid "Access Logs"
@@ -210,8 +216,7 @@ msgstr "Modo Avançado"
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:99
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr ""
-"Depois, atualize esta página e clique em adicionar chave de acesso "
-"novamente."
+"Depois, atualize esta página e clique em adicionar chave de acesso novamente."
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:118
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:419
@@ -341,7 +346,7 @@ msgstr "Pedir ajuda ao ChatGPT"
 msgid "Assistant"
 msgstr "Assistente"
 
-#: src/components/SelfCheck/SelfCheck.vue:31
+#: src/components/SelfCheck/SelfCheck.vue:30
 #, fuzzy
 msgid "Attempt to fix"
 msgstr "Tentativas"
@@ -627,7 +632,7 @@ msgstr "Certificado expirado"
 msgid "Certificate Expiring Soon"
 msgstr "Certificado a expirar em breve"
 
-#: src/language/generate.ts:5
+#: src/language/generate.ts:33
 #, fuzzy
 msgid "Certificate not found: %{error}"
 msgstr "Erro de descodificação do certificado"
@@ -654,7 +659,7 @@ msgstr "Intervalo de Renovação do Certificado"
 msgid "Certificate renewed successfully"
 msgstr "Limpo com sucesso"
 
-#: src/language/generate.ts:10
+#: src/language/generate.ts:11
 #, fuzzy
 msgid "Certificate revoked successfully"
 msgstr "Certificado removido com sucesso"
@@ -714,48 +719,70 @@ msgstr "Verificar de novo"
 msgid "Check again"
 msgstr "Verificar de novo"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:31
-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`."
-msgstr ""
-"Verifique se /var/run/docker.sock existe. Se estiver a utilizar a imagem "
-"Docker oficial do Nginx UI, certifique-se de que o socket Docker está "
-"montado da seguinte forma: `-v /var/run/docker.sock:/var/run/docker.sock`."
-
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:11
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:14
+#, fuzzy
 msgid ""
 "Check if HTTPS is enabled. Using HTTP outside localhost is insecure and "
-"prevents using Passkeys and clipboard features."
+"prevents using Passkeys and clipboard features"
 msgstr ""
 "Verifique se o HTTPS está ativado. Usar HTTP fora do localhost é inseguro e "
 "impede a utilização de Passkeys e funcionalidades da área de transferência."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:26
-msgid "Check if the nginx.conf includes the conf.d directory."
+#: src/language/generate.ts:40
+msgid "Check if the docker socket exists."
+msgstr ""
+
+#: src/language/generate.ts:20
+msgid "Check if the nginx access log path exists"
+msgstr ""
+
+#: src/language/generate.ts:44
+#, fuzzy
+msgid "Check if the nginx configuration directory exists"
+msgstr "Verifique se o nginx.conf inclui o diretório conf.d."
+
+#: src/language/generate.ts:9
+#, fuzzy
+msgid "Check if the nginx configuration entry file exists"
+msgstr "Verifique se o nginx.conf inclui o diretório conf.d."
+
+#: src/language/generate.ts:32
+msgid "Check if the nginx error log path exists"
+msgstr ""
+
+#: src/language/generate.ts:24
+msgid "Check if the nginx PID path exists"
+msgstr ""
+
+#: src/language/generate.ts:43
+#, fuzzy
+msgid "Check if the nginx.conf includes the conf.d directory"
 msgstr "Verifique se o nginx.conf inclui o diretório conf.d."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:16
-msgid "Check if the nginx.conf includes the sites-enabled directory."
+#: src/language/generate.ts:23
+#, fuzzy
+msgid "Check if the nginx.conf includes the sites-enabled directory"
 msgstr "Verifique se o nginx.conf inclui o diretório sites-enabled."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:21
-msgid "Check if the nginx.conf includes the streams-enabled directory."
+#: src/language/generate.ts:5
+#, fuzzy
+msgid "Check if the nginx.conf includes the streams-enabled directory"
 msgstr "Verifique se o nginx.conf inclui o diretório streams-enabled."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:6
+#: src/language/generate.ts:30
+#, fuzzy
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
-"nginx configuration directory."
+"nginx configuration directory"
 msgstr ""
 "Verifique se os diretórios sites-available e sites-enabled estão no "
 "diretório de configuração do nginx."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:11
+#: src/language/generate.ts:38
+#, fuzzy
 msgid ""
-"Check if the streams-available and streams-enabled directories are under "
-"the nginx configuration directory."
+"Check if the streams-available and streams-enabled directories are under the "
+"nginx configuration directory"
 msgstr ""
 "Verifique se os diretórios streams-available e streams-enabled estão no "
 "diretório de configuração do nginx."
@@ -782,7 +809,8 @@ msgstr "Limpo com sucesso"
 #: src/components/SystemRestore/SystemRestoreContent.vue:194
 #: src/components/SystemRestore/SystemRestoreContent.vue:271
 msgid "Click or drag backup file to this area to upload"
-msgstr "Clique ou arraste o arquivo de backup para esta área para fazer o upload"
+msgstr ""
+"Clique ou arraste o arquivo de backup para esta área para fazer o upload"
 
 #: src/views/preference/components/AuthSettings/TOTP.vue:110
 msgid "Click to copy"
@@ -856,6 +884,14 @@ msgstr "Compare com a corrente"
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr "O nível de compressão, 1 é mais baixo, 9 é mais alto"
 
+#: src/constants/errors/self_check.ts:17
+msgid "Config directory not exist"
+msgstr ""
+
+#: src/constants/errors/self_check.ts:18
+msgid "Config entry file not exist"
+msgstr ""
+
 #: src/constants/errors/backup.ts:14
 #, fuzzy
 msgid "Config path is empty"
@@ -1359,11 +1395,11 @@ msgstr "Remover este upstream?"
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:30
-msgid "Docker Socket"
+#: src/language/generate.ts:10
+msgid "Docker socket exists"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:15
+#: src/constants/errors/self_check.ts:16
 msgid "Docker socket not exist"
 msgstr ""
 
@@ -1381,7 +1417,8 @@ msgstr "Domínio"
 
 #: src/views/certificate/CertificateEditor.vue:112
 msgid "Domains list is empty, try to reopen Auto Cert for %{config}"
-msgstr "A lista de domínios está vazia, tente reabrir o Auto Cert para %{config}"
+msgstr ""
+"A lista de domínios está vazia, tente reabrir o Auto Cert para %{config}"
 
 #: src/language/constants.ts:27
 msgid "Download latest release error"
@@ -1605,6 +1642,10 @@ msgstr ""
 msgid "Error Log"
 msgstr "Logs de Erro"
 
+#: src/constants/errors/self_check.ts:22
+msgid "Error log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:98
 #: src/routes/modules/nginx_log.ts:24
 msgid "Error Logs"
@@ -1694,7 +1735,7 @@ msgstr ""
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:9
+#: src/constants/errors/self_check.ts:10
 #, fuzzy
 msgid "Failed to create backup"
 msgstr "Falha ao Activar %{msg}"
@@ -1781,7 +1822,7 @@ msgstr ""
 msgid "Failed to delete certificate"
 msgstr "Obtenção de Certificado Falhou"
 
-#: src/language/generate.ts:9
+#: src/language/generate.ts:26
 #, fuzzy
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "Obtenção de Certificado Falhou"
@@ -1897,7 +1938,7 @@ msgstr "Falha ao Activar %{msg}"
 msgid "Failed to open zip file: {0}"
 msgstr "Falha ao Activar %{msg}"
 
-#: src/constants/errors/self_check.ts:4
+#: src/constants/errors/self_check.ts:5
 msgid "Failed to parse nginx.conf"
 msgstr ""
 
@@ -1919,7 +1960,7 @@ msgstr "Falha ao Activar %{msg}"
 msgid "Failed to read hash info file: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:3
+#: src/constants/errors/self_check.ts:4
 msgid "Failed to read nginx.conf"
 msgstr ""
 
@@ -2127,7 +2168,7 @@ msgstr "Porta para HTTP Challenge"
 msgid "HTTP01"
 msgstr "HTTP01"
 
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:13
 #, fuzzy
 msgid "HTTPS Protocol"
 msgstr "HTTP Port"
@@ -2142,8 +2183,8 @@ msgstr "Se for deixado em branco, será utilizado o diretório CA padrão."
 
 #: src/views/nginx_log/NginxLogList.vue:81
 msgid ""
-"If logs are not indexed, please check if the log file is under the "
-"directory in Nginx.LogDirWhiteList."
+"If logs are not indexed, please check if the log file is under the directory "
+"in Nginx.LogDirWhiteList."
 msgstr ""
 
 #: src/views/preference/tabs/AuthSettings.vue:145
@@ -2152,8 +2193,8 @@ msgid ""
 "ban threshold minutes, the ip will be banned for a period of time."
 msgstr ""
 "Se o número de tentativas de início de sessão falhadas de um IP atingir o "
-"máximo de tentativas em minutos de limite de banimento, o IP será banido "
-"por um período de tempo."
+"máximo de tentativas em minutos de limite de banimento, o IP será banido por "
+"um período de tempo."
 
 #: src/components/AutoCertForm/AutoCertForm.vue:116
 #, fuzzy
@@ -2487,8 +2528,11 @@ msgstr "Localizações"
 msgid "Log"
 msgstr "Log"
 
-#: src/language/generate.ts:23
-msgid "Log file %{log_path} is not a regular file. "
+#: src/language/generate.ts:34
+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:67
@@ -2514,12 +2558,12 @@ msgstr "Logrotate"
 
 #: src/views/preference/tabs/LogrotateSettings.vue:13
 msgid ""
-"Logrotate, by default, is enabled in most mainstream Linux distributions "
-"for users who install Nginx UI on the host machine, so you don't need to "
-"modify the parameters on this page. For users who install Nginx UI using "
-"Docker containers, you can manually enable this option. The crontab task "
-"scheduler of Nginx UI will execute the logrotate command at the interval "
-"you set in minutes."
+"Logrotate, by default, is enabled in most mainstream Linux distributions for "
+"users who install Nginx UI on the host machine, so you don't need to modify "
+"the parameters on this page. For users who install Nginx UI using Docker "
+"containers, you can manually enable this option. The crontab task scheduler "
+"of Nginx UI will execute the logrotate command at the interval you set in "
+"minutes."
 msgstr ""
 "O Logrotate, por defeito, está activado na maioria das distribuições Linux "
 "convencionais para utilizadores que instalam o Nginx UI na máquina host, "
@@ -2780,35 +2824,28 @@ msgstr "Nginx"
 msgid "Nginx Access Log Path"
 msgstr "Caminho para Logs de Acesso do Nginx"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:25
-msgid "Nginx Conf Include Conf.d"
-msgstr ""
-
-#: src/components/SelfCheck/tasks/backend/index.ts:15
-msgid "Nginx Conf Include Sites Enabled"
-msgstr ""
-
-#: src/components/SelfCheck/tasks/backend/index.ts:20
-msgid "Nginx Conf Include Streams Enabled"
-msgstr ""
+#: src/language/generate.ts:16
+#, fuzzy
+msgid "Nginx access log path exists"
+msgstr "Caminho para Logs de Acesso do Nginx"
 
-#: src/constants/errors/self_check.ts:5
+#: src/constants/errors/self_check.ts:6
 msgid "Nginx conf no http block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:7
+#: src/constants/errors/self_check.ts:8
 msgid "Nginx conf no stream block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:14
+#: src/constants/errors/self_check.ts:15
 msgid "Nginx conf not include conf.d directory"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:6
+#: src/constants/errors/self_check.ts:7
 msgid "Nginx conf not include sites-enabled"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:8
+#: src/constants/errors/self_check.ts:9
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 
@@ -2816,6 +2853,16 @@ msgstr ""
 msgid "Nginx config directory is not set"
 msgstr ""
 
+#: src/language/generate.ts:31
+#, fuzzy
+msgid "Nginx configuration directory exists"
+msgstr "Erro na análise de configuração do Nginx"
+
+#: src/language/generate.ts:15
+#, fuzzy
+msgid "Nginx configuration entry file exists"
+msgstr "Erro na análise de configuração do Nginx"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:138
 #, fuzzy
 msgid "Nginx configuration has been restored"
@@ -2854,6 +2901,11 @@ msgstr ""
 msgid "Nginx Error Log Path"
 msgstr "Caminho para Logs de Erro do Nginx"
 
+#: src/language/generate.ts:21
+#, fuzzy
+msgid "Nginx error log path exists"
+msgstr "Caminho para Logs de Erro do Nginx"
+
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/views/dashboard/NginxDashBoard.vue:112
@@ -2888,6 +2940,11 @@ msgstr ""
 msgid "Nginx PID Path"
 msgstr "Caminho para Logs de Erro do Nginx"
 
+#: src/language/generate.ts:45
+#, fuzzy
+msgid "Nginx PID path exists"
+msgstr "Caminho para Logs de Erro do Nginx"
+
 #: src/views/preference/tabs/NginxSettings.vue:40
 msgid "Nginx Reload Command"
 msgstr ""
@@ -2942,10 +2999,25 @@ msgstr "Erro na análise de configuração do Nginx"
 
 #: src/components/SystemRestore/SystemRestoreContent.vue:336
 msgid ""
-"Nginx UI configuration has been restored and will restart automatically in "
-"a few seconds."
+"Nginx UI configuration has been restored and will restart automatically in a "
+"few seconds."
 msgstr ""
 
+#: src/language/generate.ts:8
+#, fuzzy
+msgid "Nginx.conf includes conf.d directory"
+msgstr "Verifique se o nginx.conf inclui o diretório conf.d."
+
+#: src/language/generate.ts:42
+#, fuzzy
+msgid "Nginx.conf includes sites-enabled directory"
+msgstr "Verifique se o nginx.conf inclui o diretório sites-enabled."
+
+#: src/language/generate.ts:39
+#, fuzzy
+msgid "Nginx.conf includes streams-enabled directory"
+msgstr "Verifique se o nginx.conf inclui o diretório streams-enabled."
+
 #: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
@@ -3130,7 +3202,8 @@ msgstr ""
 
 #: src/views/certificate/DNSCredential.vue:59
 msgid "Once the verification is complete, the records will be removed."
-msgstr "Assim que a verificação estiver concluída, os registos serão removidos."
+msgstr ""
+"Assim que a verificação estiver concluída, os registos serão removidos."
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:103
@@ -3278,6 +3351,10 @@ msgstr "Configuração de Domínio criado com Sucesso"
 msgid "Performing core upgrade"
 msgstr "Executando actualização do core"
 
+#: src/constants/errors/self_check.ts:19
+msgid "PID path not exist"
+msgstr ""
+
 #: src/constants/errors/crypto.ts:2
 msgid "Plain text is empty"
 msgstr ""
@@ -3332,8 +3409,8 @@ msgstr ""
 #: src/components/Notification/notifications.ts:166
 #: src/language/constants.ts:59
 msgid ""
-"Please generate new recovery codes in the preferences immediately to "
-"prevent lockout."
+"Please generate new recovery codes in the preferences immediately to prevent "
+"lockout."
 msgstr ""
 
 #: src/views/config/components/Rename.vue:65
@@ -3380,8 +3457,10 @@ msgid "Please log in."
 msgstr ""
 
 #: src/views/certificate/DNSCredential.vue:62
-msgid "Please note that the unit of time configurations below are all in seconds."
-msgstr "Note que as definições da unidade de tempo abaixo estão todas em segundos."
+msgid ""
+"Please note that the unit of time configurations below are all in seconds."
+msgstr ""
+"Note que as definições da unidade de tempo abaixo estão todas em segundos."
 
 #: src/views/install/components/InstallView.vue:100
 msgid "Please resolve all issues before proceeding with installation"
@@ -3490,7 +3569,7 @@ msgstr "Leituras"
 msgid "Receive"
 msgstr "Receber"
 
-#: src/components/SelfCheck/SelfCheck.vue:24
+#: src/components/SelfCheck/SelfCheck.vue:23
 msgid "Recheck"
 msgstr ""
 
@@ -3966,6 +4045,10 @@ msgstr "Salvo com sucesso"
 msgid "Saved successfully"
 msgstr "Salvo com sucesso"
 
+#: src/constants/errors/self_check.ts:20
+msgid "Sbin path not exist"
+msgstr ""
+
 #: src/views/preference/components/AuthSettings/TOTP.vue:69
 msgid "Scan the QR code with your mobile phone to add the account to the app."
 msgstr ""
@@ -3997,7 +4080,7 @@ msgstr ""
 msgid "Selector"
 msgstr "Seletor"
 
-#: 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 ""
 
@@ -4067,14 +4150,14 @@ msgstr "Definindo provedor de HTTP01 challenge"
 
 #: src/constants/errors/nginx_log.ts:8
 msgid ""
-"Settings.NginxLogSettings.AccessLogPath is empty, refer to "
-"https://nginxui.com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui."
+"com/guide/config-nginx.html for more information"
 msgstr ""
 
 #: src/constants/errors/nginx_log.ts:7
 msgid ""
-"Settings.NginxLogSettings.ErrorLogPath is empty, refer to "
-"https://nginxui.com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui."
+"com/guide/config-nginx.html for more information"
 msgstr ""
 
 #: src/views/install/components/InstallView.vue:64
@@ -4120,20 +4203,20 @@ msgstr "Logs do Site"
 msgid "Site not found"
 msgstr "Ficheiro não encontrado"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:5
+#: src/language/generate.ts:7
 #, fuzzy
-msgid "Sites Directory"
+msgid "Sites directory exists"
 msgstr "Directório"
 
 #: src/routes/modules/sites.ts:19
 msgid "Sites List"
 msgstr "Lista de Sites"
 
-#: src/constants/errors/self_check.ts:10
+#: src/constants/errors/self_check.ts:11
 msgid "Sites-available directory not exist"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:11
+#: src/constants/errors/self_check.ts:12
 msgid "Sites-enabled directory not exist"
 msgstr ""
 
@@ -4238,16 +4321,16 @@ msgstr ""
 msgid "Stream not found"
 msgstr "Ficheiro não encontrado"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:10
+#: src/language/generate.ts:41
 #, fuzzy
-msgid "Streams Directory"
+msgid "Streams directory exists"
 msgstr "Directório"
 
-#: src/constants/errors/self_check.ts:12
+#: src/constants/errors/self_check.ts:13
 msgid "Streams-available directory not exist"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:13
+#: src/constants/errors/self_check.ts:14
 msgid "Streams-enabled directory not exist"
 msgstr ""
 
@@ -4259,12 +4342,12 @@ msgstr ""
 msgid "Success"
 msgstr "Sucesso"
 
-#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
+#: 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"
+"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/SystemRestore/SystemRestoreContent.vue:197
@@ -4296,11 +4379,13 @@ msgstr "Sincronizar Certificado"
 #: src/components/Notification/notifications.ts:46
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
-msgstr "Sincronização do Certificado %{cert_name} para %{env_name} feito com sucesso"
+msgstr ""
+"Sincronização do Certificado %{cert_name} para %{env_name} feito com sucesso"
 
 #: src/components/Notification/notifications.ts:50
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
-msgstr "Sincronização do Certificado %{cert_name} para %{env_name} feito com sucesso"
+msgstr ""
+"Sincronização do Certificado %{cert_name} para %{env_name} feito com sucesso"
 
 #: src/components/Notification/notifications.ts:45 src/language/constants.ts:39
 msgid "Sync Certificate Error"
@@ -4384,6 +4469,11 @@ msgstr "Sistema"
 msgid "System restored successfully."
 msgstr "Nginx reiniciado com sucesso"
 
+#: src/constants/errors/self_check.ts:3
+#, fuzzy
+msgid "Task is not fixable"
+msgstr "Token inválida"
+
 #: src/constants/errors/self_check.ts:2
 #, fuzzy
 msgid "Task not found"
@@ -4409,8 +4499,8 @@ msgid ""
 "since it was last issued."
 msgstr ""
 "O certificado do domínio será verificado 30 minutos e será renovado se já "
-"tiver passado mais de 1 semana ou o período que definiu nas definições "
-"desde a última emissão."
+"tiver passado mais de 1 semana ou o período que definiu nas definições desde "
+"a última emissão."
 
 #: src/views/install/components/InstallForm.vue:48
 msgid "The filename cannot contain the following characters: %{c}"
@@ -4435,8 +4525,7 @@ msgstr "O valor introduzido não é uma Chave de Certificado SSL"
 
 #: src/constants/errors/nginx_log.ts:2
 msgid ""
-"The log path is not under the paths in "
-"settings.NginxSettings.LogDirWhiteList"
+"The log path is not under the paths in settings.NginxSettings.LogDirWhiteList"
 msgstr ""
 
 #: src/views/preference/tabs/OpenAISettings.vue:23
@@ -4450,7 +4539,8 @@ msgstr ""
 "travessões e pontos."
 
 #: src/views/preference/tabs/OpenAISettings.vue:90
-msgid "The model used for code completion, if not set, the chat model will be used."
+msgid ""
+"The model used for code completion, if not set, the chat model will be used."
 msgstr ""
 
 #: src/views/preference/tabs/NodeSettings.vue:18
@@ -4490,8 +4580,8 @@ msgid ""
 "version. To avoid potential errors, please upgrade the remote Nginx UI to "
 "match the local version."
 msgstr ""
-"A versão remota do Nginx UI não é compatível com a versão local do Nginx "
-"UI. Para evitar possíveis erros, atualize a versão remota do Nginx UI para "
+"A versão remota do Nginx UI não é compatível com a versão local do Nginx UI. "
+"Para evitar possíveis erros, atualize a versão remota do Nginx UI para "
 "corresponder à versão local."
 
 #: src/components/AutoCertForm/AutoCertForm.vue:43
@@ -4562,7 +4652,8 @@ msgstr "Este campo não pode estar vazio"
 
 #: src/constants/form_errors.ts:6
 #, fuzzy
-msgid "This field should only contain letters, unicode characters, numbers, and -_."
+msgid ""
+"This field should only contain letters, unicode characters, numbers, and -_."
 msgstr ""
 "O nome do modelo deve conter apenas letras, unicode, números, hífens, "
 "travessões e pontos."
@@ -4604,10 +4695,10 @@ msgid ""
 msgstr ""
 
 #: src/views/environments/list/BatchUpgrader.vue:182
-msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
+msgid ""
+"This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr ""
-"Isto vai actualizar ou reinstalar o Nginx UI em %{nodeNames} para "
-"%{version}."
+"Isto vai actualizar ou reinstalar o Nginx UI em %{nodeNames} para %{version}."
 
 #: src/views/preference/tabs/AuthSettings.vue:124
 msgid "Throttle"
@@ -4652,8 +4743,8 @@ msgstr ""
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:15
 msgid ""
 "To make sure the certification auto-renewal can work normally, we need to "
-"add a location which can proxy the request from authority to backend, and "
-"we need to save this file and reload the Nginx. Are you sure you want to "
+"add a location which can proxy the request from authority to backend, and we "
+"need to save this file and reload the Nginx. Are you sure you want to "
 "continue?"
 msgstr ""
 "Para garantir que a renovação automática da certificação funciona "
@@ -4741,7 +4832,7 @@ msgstr "Tipo"
 msgid "Unknown"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:44
+#: src/components/SelfCheck/SelfCheck.vue:43
 msgid "Unknown issue"
 msgstr ""
 
@@ -4912,8 +5003,8 @@ msgstr ""
 
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:140
 msgid ""
-"We will remove the HTTPChallenge configuration from this file and reload "
-"the Nginx. Are you sure you want to continue?"
+"We will remove the HTTPChallenge configuration from this file and reload the "
+"Nginx. Are you sure you want to continue?"
 msgstr ""
 "Removeremos a configuração HTTPChallenge deste ficheiro e reiniciaremos o "
 "Nginx. Tem a certeza de que quer continuar?"
@@ -4998,8 +5089,8 @@ msgstr "Sim"
 
 #: src/views/terminal/Terminal.vue:135
 msgid ""
-"You are accessing this terminal over an insecure HTTP connection on a "
-"non-localhost domain. This may expose sensitive information."
+"You are accessing this terminal over an insecure HTTP connection on a non-"
+"localhost domain. This may expose sensitive information."
 msgstr ""
 
 #: src/views/system/Upgrade.vue:202
@@ -5025,7 +5116,8 @@ msgid ""
 msgstr ""
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81
-msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
+msgid ""
+"You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
 msgstr ""
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94
@@ -5047,6 +5139,15 @@ msgstr ""
 msgid "Your passkeys"
 msgstr ""
 
+#~ 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`."
+#~ msgstr ""
+#~ "Verifique se /var/run/docker.sock existe. Se estiver a utilizar a imagem "
+#~ "Docker oficial do Nginx UI, certifique-se de que o socket Docker está "
+#~ "montado da seguinte forma: `-v /var/run/docker.sock:/var/run/docker.sock`."
+
 #~ msgid "Deploy successfully"
 #~ msgstr "Deploy sucedido"
 
@@ -5068,7 +5169,9 @@ msgstr ""
 #~ msgstr "Ambiente"
 
 #~ msgid "Failed to save, syntax error(s) was detected in the configuration."
-#~ msgstr "Falha ao salvar, erro(s) de sintaxe detectados no ficheiro de configuração."
+#~ msgstr ""
+#~ "Falha ao salvar, erro(s) de sintaxe detectados no ficheiro de "
+#~ "configuração."
 
 #~ msgid "File"
 #~ msgstr "Ficheiro"
@@ -5077,11 +5180,11 @@ msgstr ""
 #~ msgstr "Erro de Formato %{msg}"
 
 #~ msgid ""
-#~ "If you lose your mobile phone, you can use the recovery code to reset your "
-#~ "2FA."
+#~ "If you lose your mobile phone, you can use the recovery code to reset "
+#~ "your 2FA."
 #~ msgstr ""
-#~ "Se perder o seu telemóvel, pode utilizar o código de recuperação para repor "
-#~ "o seu 2FA."
+#~ "Se perder o seu telemóvel, pode utilizar o código de recuperação para "
+#~ "repor o seu 2FA."
 
 #~ msgid "Incorrect username or password"
 #~ msgstr "Utilizador ou senha incorrectos"
@@ -5109,7 +5212,8 @@ msgstr ""
 #~ "Sincronização do Certificado %{cert_name} para %{env_name} falhou, por "
 #~ "favor actualize a versão remota do Nginx UI para a última versão"
 
-#~ msgid "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
+#~ msgid ""
+#~ "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
 #~ msgstr ""
 #~ "Sincronização do Certificado %{cert_name} para %{env_name} falhou, "
 #~ "resposta: %{resp}"
@@ -5129,7 +5233,8 @@ msgstr ""
 #~ msgid "Target"
 #~ msgstr "Destino"
 
-#~ msgid "The recovery code is only displayed once, please save it in a safe place."
+#~ msgid ""
+#~ "The recovery code is only displayed once, please save it in a safe place."
 #~ msgstr ""
 #~ "O código de recuperação é apresentado apenas uma vez, guarde-o num local "
 #~ "seguro."

+ 265 - 156
app/src/language/ru_RU/app.po

@@ -7,61 +7,62 @@ msgstr ""
 "POT-Creation-Date: \n"
 "PO-Revision-Date: 2025-03-28 02:45+0300\n"
 "Last-Translator: Artyom Isrofilov <artyom@isrofilov.ru>\n"
-"Language-Team: Russian "
-"<https://weblate.nginxui.com/projects/nginx-ui/frontend/ru/>\n"
+"Language-Team: Russian <https://weblate.nginxui.com/projects/nginx-ui/"
+"frontend/ru/>\n"
 "Language: ru_RU\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 3.5\n"
 
-#: src/language/generate.ts:19
+#: src/language/generate.ts:47
 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}"
-msgstr "[Nginx UI] Пользователь ACME: %{name}, Email: %{email}, Каталог CA: %{caDir}"
+msgstr ""
+"[Nginx UI] Пользователь ACME: %{name}, Email: %{email}, Каталог CA: %{caDir}"
 
-#: src/language/generate.ts:13
+#: src/language/generate.ts:49
 msgid "[Nginx UI] Backing up current certificate for later revocation"
 msgstr ""
-"[Nginx UI] Резервное копирование текущего сертификата для последующего "
-"отзыва"
+"[Nginx UI] Резервное копирование текущего сертификата для последующего отзыва"
 
-#: src/language/generate.ts:28
+#: src/language/generate.ts:6
 #, fuzzy
 msgid "[Nginx UI] Certificate renewed successfully"
 msgstr "Сертификат успешно продлен"
 
-#: src/language/generate.ts:8
+#: src/language/generate.ts:37
 #, fuzzy
 msgid "[Nginx UI] Certificate successfully revoked"
 msgstr "Nginx успешно перезапущен"
 
-#: src/language/generate.ts:29
-msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate"
+#: src/language/generate.ts:13
+msgid ""
+"[Nginx UI] Certificate was used for server, reloading server TLS certificate"
 msgstr ""
-"[Nginx UI] Сертификат использовался для сервера, перезагрузка "
-"TLS-сертификата сервера"
+"[Nginx UI] Сертификат использовался для сервера, перезагрузка TLS-"
+"сертификата сервера"
 
-#: src/language/generate.ts:24
+#: src/language/generate.ts:35
 #, fuzzy
 msgid "[Nginx UI] Creating client facilitates communication with the CA server"
 msgstr "Создание клиента облегчает связь с сервером CA"
 
-#: src/language/generate.ts:12
+#: src/language/generate.ts:36
 #, fuzzy
 msgid "[Nginx UI] Environment variables cleaned"
 msgstr "Переменные окружения очищены"
 
-#: src/language/generate.ts:21
+#: src/language/generate.ts:28
 msgid "[Nginx UI] Finished"
 msgstr "[Nginx UI] Завершено"
 
-#: src/language/generate.ts:4
+#: src/language/generate.ts:25
 #, fuzzy
 msgid "[Nginx UI] Issued certificate successfully"
 msgstr "Сертификат успешно выдан"
 
-#: src/language/generate.ts:14
+#: src/language/generate.ts:50
 msgid "[Nginx UI] Obtaining certificate"
 msgstr "[Nginx UI] Получение сертификата"
 
@@ -69,44 +70,44 @@ msgstr "[Nginx UI] Получение сертификата"
 msgid "[Nginx UI] Preparing for certificate revocation"
 msgstr "[Nginx UI] Подготовка к отзыву сертификата"
 
-#: src/language/generate.ts:18
+#: src/language/generate.ts:46
 msgid "[Nginx UI] Preparing lego configurations"
 msgstr "[Nginx UI] Подготовка конфигураций lego"
 
-#: src/language/generate.ts:25
+#: src/language/generate.ts:19
 msgid "[Nginx UI] Reloading nginx"
 msgstr "[Nginx UI] Перезагрузка nginx"
 
-#: src/language/generate.ts:16
+#: src/language/generate.ts:14
 msgid "[Nginx UI] Revocation completed"
 msgstr "[Nginx UI] Отзыв завершен"
 
-#: src/language/generate.ts:7
+#: src/language/generate.ts:4
 msgid "[Nginx UI] Revoking certificate"
 msgstr "[Nginx UI] Отзыв сертификата"
 
-#: src/language/generate.ts:26
+#: src/language/generate.ts:29
 msgid "[Nginx UI] Revoking old certificate"
 msgstr "[Nginx UI] Отзыв старого сертификата"
 
-#: src/language/generate.ts:20
+#: src/language/generate.ts:18
 msgid "[Nginx UI] Setting DNS01 challenge provider"
 msgstr "[Nginx UI] Настройка провайдера проверки DNS01"
 
-#: src/language/generate.ts:6
+#: src/language/generate.ts:27
 #, fuzzy
 msgid "[Nginx UI] Setting environment variables"
 msgstr "Настройка переменных сред"
 
-#: src/language/generate.ts:11
+#: src/language/generate.ts:48
 msgid "[Nginx UI] Setting HTTP01 challenge provider"
 msgstr "[Nginx UI] Настройка провайдера HTTP01-проверки"
 
-#: src/language/generate.ts:15
+#: src/language/generate.ts:12
 msgid "[Nginx UI] Writing certificate private key to disk"
 msgstr "[Nginx UI] Запись закрытого ключа сертификата на диск"
 
-#: src/language/generate.ts:27
+#: src/language/generate.ts:51
 msgid "[Nginx UI] Writing certificate to disk"
 msgstr "[Nginx UI] Запись сертификата на диск"
 
@@ -127,6 +128,10 @@ msgstr "О проекте"
 msgid "Access Log"
 msgstr "Журналы доступа"
 
+#: src/constants/errors/self_check.ts:21
+msgid "Access log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:90
 #: src/routes/modules/nginx_log.ts:17
 msgid "Access Logs"
@@ -213,7 +218,8 @@ msgstr "Расширенный режим"
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:99
 msgid "Afterwards, refresh this page and click add passkey again."
-msgstr "После этого обновите эту страницу и снова нажмите «Добавить ключ доступа»."
+msgstr ""
+"После этого обновите эту страницу и снова нажмите «Добавить ключ доступа»."
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:118
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:419
@@ -338,7 +344,7 @@ msgstr "Обратитесь за помощью к ChatGPT"
 msgid "Assistant"
 msgstr "Ассистент"
 
-#: src/components/SelfCheck/SelfCheck.vue:31
+#: src/components/SelfCheck/SelfCheck.vue:30
 msgid "Attempt to fix"
 msgstr "Попытка исправить"
 
@@ -501,8 +507,7 @@ msgstr "Кэш"
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178
 msgid "Cache items not accessed within this time will be removed"
 msgstr ""
-"Элементы кэша, к которым не обращались в течение этого времени, будут "
-"удалены"
+"Элементы кэша, к которым не обращались в течение этого времени, будут удалены"
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350
 msgid "Cache loader processing time threshold"
@@ -621,7 +626,7 @@ msgstr "Сертификат истёк"
 msgid "Certificate Expiring Soon"
 msgstr "Сертификат скоро истекает"
 
-#: src/language/generate.ts:5
+#: src/language/generate.ts:33
 #, fuzzy
 msgid "Certificate not found: %{error}"
 msgstr "Ошибка декодирования сертификата"
@@ -647,7 +652,7 @@ msgstr "Интервал обновления сертификата"
 msgid "Certificate renewed successfully"
 msgstr "Сертификат успешно продлен"
 
-#: src/language/generate.ts:10
+#: src/language/generate.ts:11
 #, fuzzy
 msgid "Certificate revoked successfully"
 msgstr "Сертификат успешно удален"
@@ -707,48 +712,70 @@ msgstr "Проверить повторно"
 msgid "Check again"
 msgstr "Проверить повторно"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:31
-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`."
-msgstr ""
-"Проверьте, существует ли /var/run/docker.sock. Если вы используете "
-"официальный образ Docker Nginx UI, убедитесь, что сокет Docker подключен "
-"следующим образом: `-v /var/run/docker.sock:/var/run/docker.sock`."
-
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:11
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:14
+#, fuzzy
 msgid ""
 "Check if HTTPS is enabled. Using HTTP outside localhost is insecure and "
-"prevents using Passkeys and clipboard features."
+"prevents using Passkeys and clipboard features"
 msgstr ""
 "Проверьте, включён ли HTTPS. Использование HTTP вне localhost небезопасно и "
 "блокирует функции Passkeys и буфера обмена."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:26
-msgid "Check if the nginx.conf includes the conf.d directory."
+#: src/language/generate.ts:40
+msgid "Check if the docker socket exists."
+msgstr ""
+
+#: src/language/generate.ts:20
+msgid "Check if the nginx access log path exists"
+msgstr ""
+
+#: src/language/generate.ts:44
+#, fuzzy
+msgid "Check if the nginx configuration directory exists"
+msgstr "Проверьте, включает ли файл nginx.conf каталог conf.d."
+
+#: src/language/generate.ts:9
+#, fuzzy
+msgid "Check if the nginx configuration entry file exists"
 msgstr "Проверьте, включает ли файл nginx.conf каталог conf.d."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:16
-msgid "Check if the nginx.conf includes the sites-enabled directory."
+#: src/language/generate.ts:32
+msgid "Check if the nginx error log path exists"
+msgstr ""
+
+#: src/language/generate.ts:24
+msgid "Check if the nginx PID path exists"
+msgstr ""
+
+#: src/language/generate.ts:43
+#, fuzzy
+msgid "Check if the nginx.conf includes the conf.d directory"
+msgstr "Проверьте, включает ли файл nginx.conf каталог conf.d."
+
+#: src/language/generate.ts:23
+#, fuzzy
+msgid "Check if the nginx.conf includes the sites-enabled directory"
 msgstr "Проверьте, включает ли файл nginx.conf каталог sites-enabled."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:21
-msgid "Check if the nginx.conf includes the streams-enabled directory."
+#: src/language/generate.ts:5
+#, fuzzy
+msgid "Check if the nginx.conf includes the streams-enabled directory"
 msgstr "Проверьте, включает ли файл nginx.conf каталог streams-enabled."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:6
+#: src/language/generate.ts:30
+#, fuzzy
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
-"nginx configuration directory."
+"nginx configuration directory"
 msgstr ""
 "Проверьте, находятся ли каталоги sites-available и sites-enabled в каталоге "
 "конфигурации nginx."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:11
+#: src/language/generate.ts:38
+#, fuzzy
 msgid ""
-"Check if the streams-available and streams-enabled directories are under "
-"the nginx configuration directory."
+"Check if the streams-available and streams-enabled directories are under the "
+"nginx configuration directory"
 msgstr ""
 "Проверьте, находятся ли каталоги streams-available и streams-enabled в "
 "директории конфигурации nginx."
@@ -851,6 +878,16 @@ msgstr "Сравните с током"
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr "Уровень сжатия, 1 самый низкий, 9 - самый высокий"
 
+#: src/constants/errors/self_check.ts:17
+#, fuzzy
+msgid "Config directory not exist"
+msgstr "Белый список директорий для логов Nginx"
+
+#: src/constants/errors/self_check.ts:18
+#, fuzzy
+msgid "Config entry file not exist"
+msgstr "Белый список директорий для логов Nginx"
+
 #: src/constants/errors/backup.ts:14
 #, fuzzy
 msgid "Config path is empty"
@@ -1348,11 +1385,11 @@ msgstr "Хотите удалить этот сервер?"
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:30
-msgid "Docker Socket"
+#: src/language/generate.ts:10
+msgid "Docker socket exists"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:15
+#: src/constants/errors/self_check.ts:16
 msgid "Docker socket not exist"
 msgstr ""
 
@@ -1370,7 +1407,8 @@ msgstr "Домен"
 
 #: src/views/certificate/CertificateEditor.vue:112
 msgid "Domains list is empty, try to reopen Auto Cert for %{config}"
-msgstr "Список доменов пуст, попробуйте заново создать авто-сертификат для %{config}"
+msgstr ""
+"Список доменов пуст, попробуйте заново создать авто-сертификат для %{config}"
 
 #: src/language/constants.ts:27
 msgid "Download latest release error"
@@ -1595,6 +1633,10 @@ msgstr ""
 msgid "Error Log"
 msgstr "Ошибка логирования"
 
+#: src/constants/errors/self_check.ts:22
+msgid "Error log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:98
 #: src/routes/modules/nginx_log.ts:24
 msgid "Error Logs"
@@ -1686,7 +1728,7 @@ msgstr ""
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:9
+#: src/constants/errors/self_check.ts:10
 #, fuzzy
 msgid "Failed to create backup"
 msgstr "Не удалось включить %{msg}"
@@ -1783,7 +1825,7 @@ msgstr ""
 msgid "Failed to delete certificate"
 msgstr "Не удалось получить сертификат"
 
-#: src/language/generate.ts:9
+#: src/language/generate.ts:26
 #, fuzzy
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "Не удалось получить сертификат"
@@ -1902,7 +1944,7 @@ msgstr "Не удалось включить %{msg}"
 msgid "Failed to open zip file: {0}"
 msgstr "Не удалось включить %{msg}"
 
-#: src/constants/errors/self_check.ts:4
+#: src/constants/errors/self_check.ts:5
 msgid "Failed to parse nginx.conf"
 msgstr ""
 
@@ -1924,7 +1966,7 @@ msgstr "Не удалось включить %{msg}"
 msgid "Failed to read hash info file: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:3
+#: src/constants/errors/self_check.ts:4
 msgid "Failed to read nginx.conf"
 msgstr ""
 
@@ -2012,8 +2054,8 @@ msgid ""
 "Follow the instructions in the dialog to complete the passkey registration "
 "process."
 msgstr ""
-"Следуйте инструкциям в всплывающем окне, чтобы завершить процесс "
-"регистрации ключа доступа."
+"Следуйте инструкциям в всплывающем окне, чтобы завершить процесс регистрации "
+"ключа доступа."
 
 #: src/views/preference/tabs/NodeSettings.vue:42
 #: src/views/preference/tabs/NodeSettings.vue:54
@@ -2136,7 +2178,7 @@ msgstr "Порт HTTP Challenge"
 msgid "HTTP01"
 msgstr "HTTP01"
 
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:13
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2150,8 +2192,8 @@ msgstr "Если оставить пустым, будет использова
 
 #: src/views/nginx_log/NginxLogList.vue:81
 msgid ""
-"If logs are not indexed, please check if the log file is under the "
-"directory in Nginx.LogDirWhiteList."
+"If logs are not indexed, please check if the log file is under the directory "
+"in Nginx.LogDirWhiteList."
 msgstr ""
 
 #: src/views/preference/tabs/AuthSettings.vue:145
@@ -2174,7 +2216,8 @@ msgstr ""
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:70
 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear."
-msgstr "Если ваш браузер поддерживает WebAuthn Passkey, появится диалоговое окно."
+msgstr ""
+"Если ваш браузер поддерживает WebAuthn Passkey, появится диалоговое окно."
 
 #: src/components/AutoCertForm/AutoCertForm.vue:107
 msgid ""
@@ -2493,8 +2536,11 @@ msgstr "Локации"
 msgid "Log"
 msgstr "Журнал"
 
-#: src/language/generate.ts:23
-msgid "Log file %{log_path} is not a regular file. "
+#: src/language/generate.ts:34
+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:67
@@ -2520,18 +2566,18 @@ msgstr "Прокрутка"
 
 #: src/views/preference/tabs/LogrotateSettings.vue:13
 msgid ""
-"Logrotate, by default, is enabled in most mainstream Linux distributions "
-"for users who install Nginx UI on the host machine, so you don't need to "
-"modify the parameters on this page. For users who install Nginx UI using "
-"Docker containers, you can manually enable this option. The crontab task "
-"scheduler of Nginx UI will execute the logrotate command at the interval "
-"you set in minutes."
+"Logrotate, by default, is enabled in most mainstream Linux distributions for "
+"users who install Nginx UI on the host machine, so you don't need to modify "
+"the parameters on this page. For users who install Nginx UI using Docker "
+"containers, you can manually enable this option. The crontab task scheduler "
+"of Nginx UI will execute the logrotate command at the interval you set in "
+"minutes."
 msgstr ""
 "Logrotate по умолчанию включен в большинстве основных дистрибутивов Linux "
 "для пользователей, которые устанавливают Nginx UI на хост-машину, поэтому "
-"вам не нужно изменять параметры на этой странице. Для пользователей, "
-"которые устанавливают Nginx UI с использованием Docker-контейнеров, вы "
-"можете вручную включить эту опцию. Планировщик задач crontab Nginx UI будет "
+"вам не нужно изменять параметры на этой странице. Для пользователей, которые "
+"устанавливают Nginx UI с использованием Docker-контейнеров, вы можете "
+"вручную включить эту опцию. Планировщик задач crontab Nginx UI будет "
 "выполнять команду logrotate с интервалом, который вы установите в минутах."
 
 #: src/views/site/components/SiteStatusSegmented.vue:138
@@ -2788,37 +2834,29 @@ msgstr "Nginx"
 msgid "Nginx Access Log Path"
 msgstr "Путь для Nginx Access Log"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:25
+#: src/language/generate.ts:16
 #, fuzzy
-msgid "Nginx Conf Include Conf.d"
-msgstr "Терминальная команда запуска"
-
-#: src/components/SelfCheck/tasks/backend/index.ts:15
-msgid "Nginx Conf Include Sites Enabled"
-msgstr ""
-
-#: src/components/SelfCheck/tasks/backend/index.ts:20
-msgid "Nginx Conf Include Streams Enabled"
-msgstr ""
+msgid "Nginx access log path exists"
+msgstr "Путь для Nginx Access Log"
 
-#: src/constants/errors/self_check.ts:5
+#: src/constants/errors/self_check.ts:6
 msgid "Nginx conf no http block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:7
+#: src/constants/errors/self_check.ts:8
 msgid "Nginx conf no stream block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:14
+#: src/constants/errors/self_check.ts:15
 #, fuzzy
 msgid "Nginx conf not include conf.d directory"
 msgstr "Терминальная команда запуска"
 
-#: src/constants/errors/self_check.ts:6
+#: src/constants/errors/self_check.ts:7
 msgid "Nginx conf not include sites-enabled"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:8
+#: src/constants/errors/self_check.ts:9
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 
@@ -2827,6 +2865,16 @@ msgstr ""
 msgid "Nginx config directory is not set"
 msgstr "Белый список директорий для логов Nginx"
 
+#: src/language/generate.ts:31
+#, fuzzy
+msgid "Nginx configuration directory exists"
+msgstr "Ошибка разбора конфигурации Nginx"
+
+#: src/language/generate.ts:15
+#, fuzzy
+msgid "Nginx configuration entry file exists"
+msgstr "Ошибка разбора конфигурации Nginx"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:138
 #, fuzzy
 msgid "Nginx configuration has been restored"
@@ -2865,6 +2913,11 @@ msgstr ""
 msgid "Nginx Error Log Path"
 msgstr "Путь для Nginx Error Log"
 
+#: src/language/generate.ts:21
+#, fuzzy
+msgid "Nginx error log path exists"
+msgstr "Путь для Nginx Error Log"
+
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/views/dashboard/NginxDashBoard.vue:112
@@ -2901,6 +2954,11 @@ msgstr ""
 msgid "Nginx PID Path"
 msgstr "Путь для Nginx Error Log"
 
+#: src/language/generate.ts:45
+#, fuzzy
+msgid "Nginx PID path exists"
+msgstr "Путь для Nginx Error Log"
+
 #: src/views/preference/tabs/NginxSettings.vue:40
 msgid "Nginx Reload Command"
 msgstr "Команда перезагрузки Nginx"
@@ -2959,10 +3017,25 @@ msgstr "Ошибка разбора конфигурации Nginx"
 #: src/components/SystemRestore/SystemRestoreContent.vue:336
 #, fuzzy
 msgid ""
-"Nginx UI configuration has been restored and will restart automatically in "
-"a few seconds."
+"Nginx UI configuration has been restored and will restart automatically in a "
+"few seconds."
 msgstr "Ошибка разбора конфигурации Nginx"
 
+#: src/language/generate.ts:8
+#, fuzzy
+msgid "Nginx.conf includes conf.d directory"
+msgstr "Терминальная команда запуска"
+
+#: src/language/generate.ts:42
+#, fuzzy
+msgid "Nginx.conf includes sites-enabled directory"
+msgstr "Проверьте, включает ли файл nginx.conf каталог sites-enabled."
+
+#: src/language/generate.ts:39
+#, fuzzy
+msgid "Nginx.conf includes streams-enabled directory"
+msgstr "Проверьте, включает ли файл nginx.conf каталог streams-enabled."
+
 #: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
@@ -3299,6 +3372,10 @@ msgstr "Отключено успешно"
 msgid "Performing core upgrade"
 msgstr "Выполнение обновления ядра"
 
+#: src/constants/errors/self_check.ts:19
+msgid "PID path not exist"
+msgstr ""
+
 #: src/constants/errors/crypto.ts:2
 msgid "Plain text is empty"
 msgstr ""
@@ -3335,8 +3412,8 @@ msgid ""
 "Please fill in the API authentication credentials provided by your DNS "
 "provider."
 msgstr ""
-"Пожалуйста, заполните учетные данные API, предоставленные вашим "
-"DNS-провайдером."
+"Пожалуйста, заполните учетные данные API, предоставленные вашим DNS-"
+"провайдером."
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:106
 msgid "Please fill in the required fields"
@@ -3354,8 +3431,8 @@ msgstr ""
 #: src/components/Notification/notifications.ts:166
 #: src/language/constants.ts:59
 msgid ""
-"Please generate new recovery codes in the preferences immediately to "
-"prevent lockout."
+"Please generate new recovery codes in the preferences immediately to prevent "
+"lockout."
 msgstr ""
 
 #: src/views/config/components/Rename.vue:65
@@ -3401,7 +3478,8 @@ msgid "Please log in."
 msgstr ""
 
 #: src/views/certificate/DNSCredential.vue:62
-msgid "Please note that the unit of time configurations below are all in seconds."
+msgid ""
+"Please note that the unit of time configurations below are all in seconds."
 msgstr ""
 "Обратите внимание, что единица измерения времени в конфигурациях ниже "
 "указана в секундах."
@@ -3512,7 +3590,7 @@ msgstr "Чтение"
 msgid "Receive"
 msgstr "Принято"
 
-#: src/components/SelfCheck/SelfCheck.vue:24
+#: src/components/SelfCheck/SelfCheck.vue:23
 msgid "Recheck"
 msgstr ""
 
@@ -3539,8 +3617,8 @@ msgid ""
 "Recovery codes are used to access your account when you lose access to your "
 "2FA device. Each code can only be used once."
 msgstr ""
-"Коды восстановления используются для доступа к аккаунту при утере "
-"2FA-устройства. Каждый код можно использовать только один раз."
+"Коды восстановления используются для доступа к аккаунту при утере 2FA-"
+"устройства. Каждый код можно использовать только один раз."
 
 #: src/views/preference/tabs/CertSettings.vue:40
 msgid "Recursive Nameservers"
@@ -3975,6 +4053,10 @@ msgstr "Сохранено успешно"
 msgid "Saved successfully"
 msgstr "Успешно сохранено"
 
+#: src/constants/errors/self_check.ts:20
+msgid "Sbin path not exist"
+msgstr ""
+
 #: src/views/preference/components/AuthSettings/TOTP.vue:69
 msgid "Scan the QR code with your mobile phone to add the account to the app."
 msgstr ""
@@ -4007,7 +4089,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 ""
 
@@ -4077,14 +4159,14 @@ msgstr "Настройка провайдера проверки HTTP01"
 
 #: src/constants/errors/nginx_log.ts:8
 msgid ""
-"Settings.NginxLogSettings.AccessLogPath is empty, refer to "
-"https://nginxui.com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui."
+"com/guide/config-nginx.html for more information"
 msgstr ""
 
 #: src/constants/errors/nginx_log.ts:7
 msgid ""
-"Settings.NginxLogSettings.ErrorLogPath is empty, refer to "
-"https://nginxui.com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui."
+"com/guide/config-nginx.html for more information"
 msgstr ""
 
 #: src/views/install/components/InstallView.vue:64
@@ -4131,20 +4213,20 @@ msgstr "Журналы сайта"
 msgid "Site not found"
 msgstr "Файл не найден"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:5
+#: src/language/generate.ts:7
 #, fuzzy
-msgid "Sites Directory"
+msgid "Sites directory exists"
 msgstr "Каталог"
 
 #: src/routes/modules/sites.ts:19
 msgid "Sites List"
 msgstr "Список сайтов"
 
-#: src/constants/errors/self_check.ts:10
+#: src/constants/errors/self_check.ts:11
 msgid "Sites-available directory not exist"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:11
+#: src/constants/errors/self_check.ts:12
 msgid "Sites-enabled directory not exist"
 msgstr ""
 
@@ -4251,16 +4333,16 @@ msgstr "Авто Сертификат"
 msgid "Stream not found"
 msgstr "Файл не найден"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:10
+#: src/language/generate.ts:41
 #, fuzzy
-msgid "Streams Directory"
+msgid "Streams directory exists"
 msgstr "Каталог"
 
-#: src/constants/errors/self_check.ts:12
+#: src/constants/errors/self_check.ts:13
 msgid "Streams-available directory not exist"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:13
+#: src/constants/errors/self_check.ts:14
 #, fuzzy
 msgid "Streams-enabled directory not exist"
 msgstr "Каталог"
@@ -4273,12 +4355,12 @@ msgstr ""
 msgid "Success"
 msgstr "Успех"
 
-#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
+#: 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"
+"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/SystemRestore/SystemRestoreContent.vue:197
@@ -4394,6 +4476,11 @@ msgstr "Система"
 msgid "System restored successfully."
 msgstr "Nginx успешно перезапущен"
 
+#: src/constants/errors/self_check.ts:3
+#, fuzzy
+msgid "Task is not fixable"
+msgstr "Токен недействителен"
+
 #: src/constants/errors/self_check.ts:2
 #, fuzzy
 msgid "Task not found"
@@ -4445,8 +4532,7 @@ msgstr "Введенные данные не являются ключом SSL 
 
 #: src/constants/errors/nginx_log.ts:2
 msgid ""
-"The log path is not under the paths in "
-"settings.NginxSettings.LogDirWhiteList"
+"The log path is not under the paths in settings.NginxSettings.LogDirWhiteList"
 msgstr ""
 
 #: src/views/preference/tabs/OpenAISettings.vue:23
@@ -4460,7 +4546,8 @@ msgstr ""
 "точки."
 
 #: src/views/preference/tabs/OpenAISettings.vue:90
-msgid "The model used for code completion, if not set, the chat model will be used."
+msgid ""
+"The model used for code completion, if not set, the chat model will be used."
 msgstr ""
 
 #: src/views/preference/tabs/NodeSettings.vue:18
@@ -4509,8 +4596,8 @@ msgid ""
 "The server_name in the current configuration must be the domain name you "
 "need to get the certificate, supportmultiple domains."
 msgstr ""
-"server_name в текущей конфигурации должен быть доменным именем, для "
-"которого вам нужно получить сертификат, поддержка нескольких доменов."
+"server_name в текущей конфигурации должен быть доменным именем, для которого "
+"вам нужно получить сертификат, поддержка нескольких доменов."
 
 #: src/views/preference/tabs/CertSettings.vue:22
 #: src/views/preference/tabs/HTTPSettings.vue:14
@@ -4572,7 +4659,8 @@ msgstr "Это поле обязательно к заполнению"
 
 #: src/constants/form_errors.ts:6
 #, fuzzy
-msgid "This field should only contain letters, unicode characters, numbers, and -_."
+msgid ""
+"This field should only contain letters, unicode characters, numbers, and -_."
 msgstr ""
 "Имя модели должно содержать только буквы, юникод, цифры, дефисы, тире и "
 "точки."
@@ -4614,7 +4702,8 @@ msgid ""
 msgstr ""
 
 #: src/views/environments/list/BatchUpgrader.vue:182
-msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
+msgid ""
+"This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr ""
 "Это обновит или переустановит интерфейс Nginx на %{nodeNames} до версии "
 "%{version}."
@@ -4662,8 +4751,8 @@ msgstr ""
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:15
 msgid ""
 "To make sure the certification auto-renewal can work normally, we need to "
-"add a location which can proxy the request from authority to backend, and "
-"we need to save this file and reload the Nginx. Are you sure you want to "
+"add a location which can proxy the request from authority to backend, and we "
+"need to save this file and reload the Nginx. Are you sure you want to "
 "continue?"
 msgstr ""
 "Чтобы убедиться, что автоматическое обновление сертификата может работать "
@@ -4751,7 +4840,7 @@ msgstr "Тип"
 msgid "Unknown"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:44
+#: src/components/SelfCheck/SelfCheck.vue:43
 msgid "Unknown issue"
 msgstr ""
 
@@ -4923,11 +5012,11 @@ msgstr ""
 
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:140
 msgid ""
-"We will remove the HTTPChallenge configuration from this file and reload "
-"the Nginx. Are you sure you want to continue?"
+"We will remove the HTTPChallenge configuration from this file and reload the "
+"Nginx. Are you sure you want to continue?"
 msgstr ""
-"Мы удалим конфигурацию HTTPChallenge из этого файла и перезагрузим Nginx. "
-"Вы уверены, что хотите продолжить?"
+"Мы удалим конфигурацию HTTPChallenge из этого файла и перезагрузим Nginx. Вы "
+"уверены, что хотите продолжить?"
 
 #: src/views/preference/tabs/AuthSettings.vue:97
 msgid "Webauthn"
@@ -5010,8 +5099,8 @@ msgstr "Да"
 
 #: src/views/terminal/Terminal.vue:135
 msgid ""
-"You are accessing this terminal over an insecure HTTP connection on a "
-"non-localhost domain. This may expose sensitive information."
+"You are accessing this terminal over an insecure HTTP connection on a non-"
+"localhost domain. This may expose sensitive information."
 msgstr ""
 
 #: src/views/system/Upgrade.vue:202
@@ -5037,7 +5126,8 @@ msgid ""
 msgstr ""
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81
-msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
+msgid ""
+"You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
 msgstr ""
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94
@@ -5059,11 +5149,25 @@ msgstr "Ваши старые коды больше не будут работа
 msgid "Your passkeys"
 msgstr ""
 
+#~ 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`."
+#~ msgstr ""
+#~ "Проверьте, существует ли /var/run/docker.sock. Если вы используете "
+#~ "официальный образ Docker Nginx UI, убедитесь, что сокет Docker подключен "
+#~ "следующим образом: `-v /var/run/docker.sock:/var/run/docker.sock`."
+
+#, fuzzy
+#~ msgid "Nginx Conf Include Conf.d"
+#~ msgstr "Терминальная команда запуска"
+
 #~ msgid "Format error %{msg}"
 #~ msgstr "Ошибка формата %{msg}"
 
 #~ msgid "Failed to save, syntax error(s) was detected in the configuration."
-#~ msgstr "Не удалось сохранить, обнаружены синтаксические ошибки в конфигурации."
+#~ msgstr ""
+#~ "Не удалось сохранить, обнаружены синтаксические ошибки в конфигурации."
 
 #, fuzzy
 #~ msgid "Access Token"
@@ -5126,13 +5230,16 @@ msgstr ""
 #~ "Синхронизация конфигурации %{cert_name} с %{env_name} не удалась, "
 #~ "пожалуйста, обновите удаленный Nginx UI до последней версии"
 
-#~ msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: %{resp}"
-#~ msgstr ""
-#~ "Переименование %{orig_path} в %{new_path} на %{env_name} не удалось, ответ: "
+#~ msgid ""
+#~ "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: "
 #~ "%{resp}"
+#~ msgstr ""
+#~ "Переименование %{orig_path} в %{new_path} на %{env_name} не удалось, "
+#~ "ответ: %{resp}"
 
 #, fuzzy
-#~ msgid "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
+#~ msgid ""
+#~ "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
 #~ msgstr "Переименование %{orig_path} в %{new_path} на %{env_name} успешно"
 
 #, fuzzy
@@ -5148,15 +5255,16 @@ msgstr ""
 #~ "Синхронизация сертификата %{cert_name} с %{env_name} не удалась, "
 #~ "пожалуйста, обновите удаленный интерфейс Nginx до последней версии"
 
-#~ msgid "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
+#~ msgid ""
+#~ "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
 #~ msgstr ""
 #~ "Синхронизация сертификата %{cert_name} с %{env_name} не удалась, ответ: "
 #~ "%{resp}"
 
 #~ msgid "Sync config %{config_name} to %{env_name} failed, response: %{resp}"
 #~ msgstr ""
-#~ "Синхронизация конфигурации %{config_name} с %{env_name} не удалась, ответ: "
-#~ "%{resp}"
+#~ "Синхронизация конфигурации %{config_name} с %{env_name} не удалась, "
+#~ "ответ: %{resp}"
 
 #~ msgid "Target"
 #~ msgstr "Цель"
@@ -5165,8 +5273,8 @@ msgstr ""
 #~ msgstr "Файл"
 
 #~ msgid ""
-#~ "If you lose your mobile phone, you can use the recovery code to reset your "
-#~ "2FA."
+#~ "If you lose your mobile phone, you can use the recovery code to reset "
+#~ "your 2FA."
 #~ msgstr ""
 #~ "Если вы потеряете свой мобильный телефон, вы можете использовать код "
 #~ "восстановления для сброса 2FA."
@@ -5180,10 +5288,11 @@ msgstr ""
 #~ msgid "Server error"
 #~ msgstr "Ошибка сервера"
 
-#~ msgid "The recovery code is only displayed once, please save it in a safe place."
+#~ msgid ""
+#~ "The recovery code is only displayed once, please save it in a safe place."
 #~ msgstr ""
-#~ "Код восстановления отображается только один раз, пожалуйста, сохраните его "
-#~ "в безопасном месте."
+#~ "Код восстановления отображается только один раз, пожалуйста, сохраните "
+#~ "его в безопасном месте."
 
 #~ msgid "Too many login failed attempts, please try again later"
 #~ msgstr "Слишком много неудачных попыток входа, попробуйте позже"

File diff suppressed because it is too large
+ 278 - 166
app/src/language/tr_TR/app.po


+ 233 - 141
app/src/language/uk_UA/app.po

@@ -4,63 +4,64 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "PO-Revision-Date: 2025-04-16 15:12+0000\n"
 "Last-Translator: sergio_from_tauri <dedysobr@gmail.com>\n"
-"Language-Team: Ukrainian "
-"<https://weblate.nginxui.com/projects/nginx-ui/frontend/uk/>\n"
+"Language-Team: Ukrainian <https://weblate.nginxui.com/projects/nginx-ui/"
+"frontend/uk/>\n"
 "Language: uk_UA\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
 "X-Generator: Weblate 5.11\n"
 
-#: src/language/generate.ts:19
+#: src/language/generate.ts:47
 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}"
 msgstr ""
-"[Nginx UI] Користувач ACME: %{name}, Електронна пошта: %{email}, Каталог "
-"CA: %{caDir}"
+"[Nginx UI] Користувач ACME: %{name}, Електронна пошта: %{email}, Каталог CA: "
+"%{caDir}"
 
-#: src/language/generate.ts:13
+#: src/language/generate.ts:49
 msgid "[Nginx UI] Backing up current certificate for later revocation"
 msgstr ""
 "[Nginx UI] Резервне копіювання поточного сертифіката для подальшого "
 "відкликання"
 
-#: src/language/generate.ts:28
+#: src/language/generate.ts:6
 #, fuzzy
 msgid "[Nginx UI] Certificate renewed successfully"
 msgstr "Сертифікат успішно поновлено"
 
-#: src/language/generate.ts:8
+#: src/language/generate.ts:37
 #, fuzzy
 msgid "[Nginx UI] Certificate successfully revoked"
 msgstr "Сертифікат успішно видалено"
 
-#: src/language/generate.ts:29
-msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate"
+#: src/language/generate.ts:13
+msgid ""
+"[Nginx UI] Certificate was used for server, reloading server TLS certificate"
 msgstr ""
-"[Nginx UI] Сертифікат використовувався для сервера, перезавантаження "
-"TLS-сертифіката сервера"
+"[Nginx UI] Сертифікат використовувався для сервера, перезавантаження TLS-"
+"сертифіката сервера"
 
-#: src/language/generate.ts:24
+#: src/language/generate.ts:35
 msgid "[Nginx UI] Creating client facilitates communication with the CA server"
 msgstr "[Nginx UI] Створення клієнта для спрощення зв’язку з сервером CA"
 
-#: src/language/generate.ts:12
+#: src/language/generate.ts:36
 #, fuzzy
 msgid "[Nginx UI] Environment variables cleaned"
 msgstr "Змінні навколишнього середовища очищення"
 
-#: src/language/generate.ts:21
+#: src/language/generate.ts:28
 msgid "[Nginx UI] Finished"
 msgstr "[Nginx UI] Завершено"
 
-#: src/language/generate.ts:4
+#: src/language/generate.ts:25
 #, fuzzy
 msgid "[Nginx UI] Issued certificate successfully"
 msgstr "Сертифікат успішно видалено"
 
-#: src/language/generate.ts:14
+#: src/language/generate.ts:50
 msgid "[Nginx UI] Obtaining certificate"
 msgstr "[Nginx UI] Отримання сертифіката"
 
@@ -68,44 +69,44 @@ msgstr "[Nginx UI] Отримання сертифіката"
 msgid "[Nginx UI] Preparing for certificate revocation"
 msgstr "[Nginx UI] Підготовка до відкликання сертифіката"
 
-#: src/language/generate.ts:18
+#: src/language/generate.ts:46
 msgid "[Nginx UI] Preparing lego configurations"
 msgstr "[Nginx UI] Підготовка конфігурацій lego"
 
-#: src/language/generate.ts:25
+#: src/language/generate.ts:19
 msgid "[Nginx UI] Reloading nginx"
 msgstr "[Nginx UI] Перезавантаження nginx"
 
-#: src/language/generate.ts:16
+#: src/language/generate.ts:14
 msgid "[Nginx UI] Revocation completed"
 msgstr "[Nginx UI] Відкликання завершено"
 
-#: src/language/generate.ts:7
+#: src/language/generate.ts:4
 msgid "[Nginx UI] Revoking certificate"
 msgstr "[Nginx UI] Відкликання сертифіката"
 
-#: src/language/generate.ts:26
+#: src/language/generate.ts:29
 msgid "[Nginx UI] Revoking old certificate"
 msgstr "[Nginx UI] Відкликання старого сертифіката"
 
-#: src/language/generate.ts:20
+#: src/language/generate.ts:18
 msgid "[Nginx UI] Setting DNS01 challenge provider"
 msgstr "[Nginx UI] Налаштування провайдера виклику DNS01"
 
-#: src/language/generate.ts:6
+#: src/language/generate.ts:27
 #, fuzzy
 msgid "[Nginx UI] Setting environment variables"
 msgstr "Змінні навколишнього середовища очищення"
 
-#: src/language/generate.ts:11
+#: src/language/generate.ts:48
 msgid "[Nginx UI] Setting HTTP01 challenge provider"
 msgstr "[Nginx UI] Налаштування провайдера HTTP01-виклику"
 
-#: src/language/generate.ts:15
+#: src/language/generate.ts:12
 msgid "[Nginx UI] Writing certificate private key to disk"
 msgstr "[Nginx UI] Запис приватного ключа сертифіката на диск"
 
-#: src/language/generate.ts:27
+#: src/language/generate.ts:51
 msgid "[Nginx UI] Writing certificate to disk"
 msgstr "[Nginx UI] Запис сертифіката на диск"
 
@@ -125,6 +126,10 @@ msgstr "Про программу"
 msgid "Access Log"
 msgstr "Логи доступу"
 
+#: src/constants/errors/self_check.ts:21
+msgid "Access log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:90
 #: src/routes/modules/nginx_log.ts:17
 msgid "Access Logs"
@@ -211,7 +216,8 @@ msgstr "Розширений режим"
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:99
 msgid "Afterwards, refresh this page and click add passkey again."
-msgstr "Після цього оновіть цю сторінку та натисніть «Додати ключ доступу» знову."
+msgstr ""
+"Після цього оновіть цю сторінку та натисніть «Додати ключ доступу» знову."
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:118
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:419
@@ -337,7 +343,7 @@ msgstr "Запитати допомоги у ChatGPT"
 msgid "Assistant"
 msgstr "Помічник"
 
-#: src/components/SelfCheck/SelfCheck.vue:31
+#: src/components/SelfCheck/SelfCheck.vue:30
 msgid "Attempt to fix"
 msgstr "Спробувати виправити"
 
@@ -413,7 +419,8 @@ msgstr "Резервна копія"
 
 #: src/components/SystemRestore/SystemRestoreContent.vue:155
 msgid "Backup file integrity check failed, it may have been tampered with"
-msgstr "Перевірка цілісності резервного файлу не вдалася, можливо, його було змінено"
+msgstr ""
+"Перевірка цілісності резервного файлу не вдалася, можливо, його було змінено"
 
 #: src/constants/errors/backup.ts:41
 msgid "Backup file not found: {0}"
@@ -493,7 +500,8 @@ msgstr "Кеш"
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178
 msgid "Cache items not accessed within this time will be removed"
-msgstr "Елементи кешу, до яких не було звернень протягом цього часу, будуть видалені"
+msgstr ""
+"Елементи кешу, до яких не було звернень протягом цього часу, будуть видалені"
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350
 msgid "Cache loader processing time threshold"
@@ -556,7 +564,8 @@ msgstr "Скасувати"
 
 #: src/constants/errors/user.ts:11
 msgid "Cannot change initial user password in demo mode"
-msgstr "Не вдається змінити початковий пароль користувача в демонстраційному режимі"
+msgstr ""
+"Не вдається змінити початковий пароль користувача в демонстраційному режимі"
 
 #: src/components/ConfigHistory/DiffViewer.vue:67
 #: src/components/ConfigHistory/DiffViewer.vue:84
@@ -611,7 +620,7 @@ msgstr "Термін дії сертифіката закінчився"
 msgid "Certificate Expiring Soon"
 msgstr "Сертифікат незабаром закінчується"
 
-#: src/language/generate.ts:5
+#: src/language/generate.ts:33
 #, fuzzy
 msgid "Certificate not found: %{error}"
 msgstr "Помилка декодування сертифіката"
@@ -637,7 +646,7 @@ msgstr "Інтервал оновлення сертифіката"
 msgid "Certificate renewed successfully"
 msgstr "Сертифікат успішно поновлено"
 
-#: src/language/generate.ts:10
+#: src/language/generate.ts:11
 #, fuzzy
 msgid "Certificate revoked successfully"
 msgstr "Сертифікат успішно видалено"
@@ -700,48 +709,70 @@ msgstr "Перевірити"
 msgid "Check again"
 msgstr "Перевірте ще раз"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:31
-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`."
-msgstr ""
-"Перевірте, чи існує /var/run/docker.sock. Якщо ви використовуєте офіційний "
-"Docker-образ Nginx UI, переконайтеся, що сокет Docker підключено таким "
-"чином: `-v /var/run/docker.sock:/var/run/docker.sock`."
-
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:11
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:14
+#, fuzzy
 msgid ""
 "Check if HTTPS is enabled. Using HTTP outside localhost is insecure and "
-"prevents using Passkeys and clipboard features."
+"prevents using Passkeys and clipboard features"
 msgstr ""
 "Перевірте, чи ввімкнено HTTPS. Використання HTTP поза localhost є "
 "небезпечним і блокує функції Passkeys та буфера обміну."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:26
-msgid "Check if the nginx.conf includes the conf.d directory."
+#: src/language/generate.ts:40
+msgid "Check if the docker socket exists."
+msgstr ""
+
+#: src/language/generate.ts:20
+msgid "Check if the nginx access log path exists"
+msgstr ""
+
+#: src/language/generate.ts:44
+#, fuzzy
+msgid "Check if the nginx configuration directory exists"
 msgstr "Перевірте, чи файл nginx.conf містить каталог conf.d."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:16
-msgid "Check if the nginx.conf includes the sites-enabled directory."
+#: src/language/generate.ts:9
+#, fuzzy
+msgid "Check if the nginx configuration entry file exists"
+msgstr "Перевірте, чи файл nginx.conf містить каталог conf.d."
+
+#: src/language/generate.ts:32
+msgid "Check if the nginx error log path exists"
+msgstr ""
+
+#: src/language/generate.ts:24
+msgid "Check if the nginx PID path exists"
+msgstr ""
+
+#: src/language/generate.ts:43
+#, fuzzy
+msgid "Check if the nginx.conf includes the conf.d directory"
+msgstr "Перевірте, чи файл nginx.conf містить каталог conf.d."
+
+#: src/language/generate.ts:23
+#, fuzzy
+msgid "Check if the nginx.conf includes the sites-enabled directory"
 msgstr "Перевірте, чи включає файл nginx.conf каталог sites-enabled."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:21
-msgid "Check if the nginx.conf includes the streams-enabled directory."
+#: src/language/generate.ts:5
+#, fuzzy
+msgid "Check if the nginx.conf includes the streams-enabled directory"
 msgstr "Перевірте, чи включає файл nginx.conf каталог streams-enabled."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:6
+#: src/language/generate.ts:30
+#, fuzzy
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
-"nginx configuration directory."
+"nginx configuration directory"
 msgstr ""
 "Перевірте, чи знаходяться каталоги sites-available та sites-enabled у "
 "каталозі конфігурації nginx."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:11
+#: src/language/generate.ts:38
+#, fuzzy
 msgid ""
-"Check if the streams-available and streams-enabled directories are under "
-"the nginx configuration directory."
+"Check if the streams-available and streams-enabled directories are under the "
+"nginx configuration directory"
 msgstr ""
 "Перевірте, чи каталоги streams-available та streams-enabled знаходяться в "
 "каталозі конфігурації nginx."
@@ -843,6 +874,14 @@ msgstr "Порівняйте з струмом"
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr "Рівень стиснення, 1 найнижчий, 9 - найвищий"
 
+#: src/constants/errors/self_check.ts:17
+msgid "Config directory not exist"
+msgstr ""
+
+#: src/constants/errors/self_check.ts:18
+msgid "Config entry file not exist"
+msgstr ""
+
 #: src/constants/errors/backup.ts:14
 msgid "Config path is empty"
 msgstr "Конфігурація порожній"
@@ -958,8 +997,7 @@ msgstr "Створити резервну копію"
 msgid "Create File"
 msgstr "Створити файл"
 
-#: src/views/config/components/Mkdir.vue:47
-#: src/views/config/ConfigList.vue:129
+#: src/views/config/components/Mkdir.vue:47 src/views/config/ConfigList.vue:129
 msgid "Create Folder"
 msgstr "Створити папку"
 
@@ -1023,8 +1061,8 @@ msgstr ""
 "\"Вірність\" означає точність до змісту та наміру оригінального тексту;\n"
 "\"Плавність\" означає, що переклад має бути зрозумілим та легким для "
 "сприйняття;\n"
-"\"Витонченість\" означає прагнення до культурної естетики перекладу та "
-"краси мови.\n"
+"\"Витонченість\" означає прагнення до культурної естетики перекладу та краси "
+"мови.\n"
 "Мета полягає у створенні перекладу, який був би вірним духу оригіналу,\n"
 "а також відповідав цільовій мові, культурі та естетичним уподобанням "
 "читачів.\n"
@@ -1065,12 +1103,11 @@ msgstr "Користувацький"
 msgid ""
 "Customize the name of local node to be displayed in the environment "
 "indicator."
-msgstr "Налаштуйте назву локального вузла для відображення в індикаторі середовища."
+msgstr ""
+"Налаштуйте назву локального вузла для відображення в індикаторі середовища."
 
-#: src/routes/modules/dashboard.ts:10
-#: src/views/config/ConfigEditor.vue:110
-#: src/views/config/ConfigEditor.vue:161
-#: src/views/config/ConfigList.vue:67
+#: src/routes/modules/dashboard.ts:10 src/views/config/ConfigEditor.vue:110
+#: src/views/config/ConfigEditor.vue:161 src/views/config/ConfigList.vue:67
 msgid "Dashboard"
 msgstr "Панель керування"
 
@@ -1088,7 +1125,8 @@ msgstr "Розшифрування не вдалося"
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150
 msgid "Define shared memory zone name and size, e.g. proxy_cache:10m"
-msgstr "Вкажіть назву та розмір зони спільної пам'яті, наприклад proxy_cache:10m"
+msgstr ""
+"Вкажіть назву та розмір зони спільної пам'яті, наприклад proxy_cache:10m"
 
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129
@@ -1109,13 +1147,11 @@ msgstr "Видалити сертифікат"
 msgid "Delete Permanently"
 msgstr "Видалити назавжди"
 
-#: src/components/Notification/notifications.ts:69
-#: src/language/constants.ts:50
+#: src/components/Notification/notifications.ts:69 src/language/constants.ts:50
 msgid "Delete Remote Site Error"
 msgstr "Помилка видалення віддаленого сайту"
 
-#: src/components/Notification/notifications.ts:73
-#: src/language/constants.ts:49
+#: src/components/Notification/notifications.ts:73 src/language/constants.ts:49
 msgid "Delete Remote Site Success"
 msgstr "Віддалений сайт успішно видалено"
 
@@ -1386,11 +1422,11 @@ msgstr ""
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:30
-msgid "Docker Socket"
+#: src/language/generate.ts:10
+msgid "Docker socket exists"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:15
+#: src/constants/errors/self_check.ts:16
 msgid "Docker socket not exist"
 msgstr ""
 
@@ -1616,6 +1652,10 @@ msgstr ""
 msgid "Error Log"
 msgstr ""
 
+#: src/constants/errors/self_check.ts:22
+msgid "Error log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:98
 #: src/routes/modules/nginx_log.ts:24
 msgid "Error Logs"
@@ -1703,7 +1743,7 @@ msgstr ""
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:9
+#: src/constants/errors/self_check.ts:10
 msgid "Failed to create backup"
 msgstr ""
 
@@ -1783,7 +1823,7 @@ msgstr ""
 msgid "Failed to delete certificate"
 msgstr ""
 
-#: src/language/generate.ts:9
+#: src/language/generate.ts:26
 msgid "Failed to delete certificate from database: %{error}"
 msgstr ""
 
@@ -1883,7 +1923,7 @@ msgstr ""
 msgid "Failed to open zip file: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:4
+#: src/constants/errors/self_check.ts:5
 msgid "Failed to parse nginx.conf"
 msgstr ""
 
@@ -1903,7 +1943,7 @@ msgstr ""
 msgid "Failed to read hash info file: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:3
+#: src/constants/errors/self_check.ts:4
 msgid "Failed to read nginx.conf"
 msgstr ""
 
@@ -2098,7 +2138,7 @@ msgstr ""
 msgid "HTTP01"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:13
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2112,8 +2152,8 @@ msgstr ""
 
 #: src/views/nginx_log/NginxLogList.vue:81
 msgid ""
-"If logs are not indexed, please check if the log file is under the "
-"directory in Nginx.LogDirWhiteList."
+"If logs are not indexed, please check if the log file is under the directory "
+"in Nginx.LogDirWhiteList."
 msgstr ""
 
 #: src/views/preference/tabs/AuthSettings.vue:145
@@ -2436,8 +2476,11 @@ msgstr ""
 msgid "Log"
 msgstr ""
 
-#: src/language/generate.ts:23
-msgid "Log file %{log_path} is not a regular file. "
+#: src/language/generate.ts:34
+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:67
@@ -2462,12 +2505,12 @@ msgstr ""
 
 #: src/views/preference/tabs/LogrotateSettings.vue:13
 msgid ""
-"Logrotate, by default, is enabled in most mainstream Linux distributions "
-"for users who install Nginx UI on the host machine, so you don't need to "
-"modify the parameters on this page. For users who install Nginx UI using "
-"Docker containers, you can manually enable this option. The crontab task "
-"scheduler of Nginx UI will execute the logrotate command at the interval "
-"you set in minutes."
+"Logrotate, by default, is enabled in most mainstream Linux distributions for "
+"users who install Nginx UI on the host machine, so you don't need to modify "
+"the parameters on this page. For users who install Nginx UI using Docker "
+"containers, you can manually enable this option. The crontab task scheduler "
+"of Nginx UI will execute the logrotate command at the interval you set in "
+"minutes."
 msgstr ""
 
 #: src/views/site/components/SiteStatusSegmented.vue:138
@@ -2714,35 +2757,27 @@ msgstr ""
 msgid "Nginx Access Log Path"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:25
-msgid "Nginx Conf Include Conf.d"
-msgstr ""
-
-#: src/components/SelfCheck/tasks/backend/index.ts:15
-msgid "Nginx Conf Include Sites Enabled"
-msgstr ""
-
-#: src/components/SelfCheck/tasks/backend/index.ts:20
-msgid "Nginx Conf Include Streams Enabled"
+#: src/language/generate.ts:16
+msgid "Nginx access log path exists"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:5
+#: src/constants/errors/self_check.ts:6
 msgid "Nginx conf no http block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:7
+#: src/constants/errors/self_check.ts:8
 msgid "Nginx conf no stream block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:14
+#: src/constants/errors/self_check.ts:15
 msgid "Nginx conf not include conf.d directory"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:6
+#: src/constants/errors/self_check.ts:7
 msgid "Nginx conf not include sites-enabled"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:8
+#: src/constants/errors/self_check.ts:9
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 
@@ -2750,6 +2785,15 @@ msgstr ""
 msgid "Nginx config directory is not set"
 msgstr ""
 
+#: src/language/generate.ts:31
+#, fuzzy
+msgid "Nginx configuration directory exists"
+msgstr "Історія конфігурації"
+
+#: src/language/generate.ts:15
+msgid "Nginx configuration entry file exists"
+msgstr ""
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:138
 msgid "Nginx configuration has been restored"
 msgstr ""
@@ -2784,6 +2828,10 @@ msgstr ""
 msgid "Nginx Error Log Path"
 msgstr ""
 
+#: src/language/generate.ts:21
+msgid "Nginx error log path exists"
+msgstr ""
+
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/views/dashboard/NginxDashBoard.vue:112
@@ -2817,6 +2865,10 @@ msgstr ""
 msgid "Nginx PID Path"
 msgstr ""
 
+#: src/language/generate.ts:45
+msgid "Nginx PID path exists"
+msgstr ""
+
 #: src/views/preference/tabs/NginxSettings.vue:40
 msgid "Nginx Reload Command"
 msgstr ""
@@ -2869,10 +2921,25 @@ msgstr ""
 
 #: src/components/SystemRestore/SystemRestoreContent.vue:336
 msgid ""
-"Nginx UI configuration has been restored and will restart automatically in "
-"a few seconds."
+"Nginx UI configuration has been restored and will restart automatically in a "
+"few seconds."
 msgstr ""
 
+#: src/language/generate.ts:8
+#, fuzzy
+msgid "Nginx.conf includes conf.d directory"
+msgstr "Перевірте, чи файл nginx.conf містить каталог conf.d."
+
+#: src/language/generate.ts:42
+#, fuzzy
+msgid "Nginx.conf includes sites-enabled directory"
+msgstr "Перевірте, чи включає файл nginx.conf каталог sites-enabled."
+
+#: src/language/generate.ts:39
+#, fuzzy
+msgid "Nginx.conf includes streams-enabled directory"
+msgstr "Перевірте, чи включає файл nginx.conf каталог streams-enabled."
+
 #: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
@@ -3194,6 +3261,10 @@ msgstr ""
 msgid "Performing core upgrade"
 msgstr ""
 
+#: src/constants/errors/self_check.ts:19
+msgid "PID path not exist"
+msgstr ""
+
 #: src/constants/errors/crypto.ts:2
 msgid "Plain text is empty"
 msgstr ""
@@ -3242,8 +3313,8 @@ msgstr ""
 #: src/components/Notification/notifications.ts:166
 #: src/language/constants.ts:59
 msgid ""
-"Please generate new recovery codes in the preferences immediately to "
-"prevent lockout."
+"Please generate new recovery codes in the preferences immediately to prevent "
+"lockout."
 msgstr ""
 
 #: src/views/config/components/Rename.vue:65
@@ -3285,7 +3356,8 @@ msgid "Please log in."
 msgstr ""
 
 #: src/views/certificate/DNSCredential.vue:62
-msgid "Please note that the unit of time configurations below are all in seconds."
+msgid ""
+"Please note that the unit of time configurations below are all in seconds."
 msgstr ""
 
 #: src/views/install/components/InstallView.vue:100
@@ -3388,7 +3460,7 @@ msgstr ""
 msgid "Receive"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:24
+#: src/components/SelfCheck/SelfCheck.vue:23
 msgid "Recheck"
 msgstr ""
 
@@ -3814,6 +3886,10 @@ msgstr ""
 msgid "Saved successfully"
 msgstr ""
 
+#: src/constants/errors/self_check.ts:20
+msgid "Sbin path not exist"
+msgstr ""
+
 #: src/views/preference/components/AuthSettings/TOTP.vue:69
 msgid "Scan the QR code with your mobile phone to add the account to the app."
 msgstr ""
@@ -3843,7 +3919,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 ""
 
@@ -3909,14 +3985,14 @@ msgstr ""
 
 #: src/constants/errors/nginx_log.ts:8
 msgid ""
-"Settings.NginxLogSettings.AccessLogPath is empty, refer to "
-"https://nginxui.com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui."
+"com/guide/config-nginx.html for more information"
 msgstr ""
 
 #: src/constants/errors/nginx_log.ts:7
 msgid ""
-"Settings.NginxLogSettings.ErrorLogPath is empty, refer to "
-"https://nginxui.com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui."
+"com/guide/config-nginx.html for more information"
 msgstr ""
 
 #: src/views/install/components/InstallView.vue:64
@@ -3959,19 +4035,19 @@ msgstr ""
 msgid "Site not found"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:5
-msgid "Sites Directory"
+#: src/language/generate.ts:7
+msgid "Sites directory exists"
 msgstr ""
 
 #: src/routes/modules/sites.ts:19
 msgid "Sites List"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:10
+#: src/constants/errors/self_check.ts:11
 msgid "Sites-available directory not exist"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:11
+#: src/constants/errors/self_check.ts:12
 msgid "Sites-enabled directory not exist"
 msgstr ""
 
@@ -4072,15 +4148,15 @@ msgstr ""
 msgid "Stream not found"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:10
-msgid "Streams Directory"
+#: src/language/generate.ts:41
+msgid "Streams directory exists"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:12
+#: src/constants/errors/self_check.ts:13
 msgid "Streams-available directory not exist"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:13
+#: src/constants/errors/self_check.ts:14
 msgid "Streams-enabled directory not exist"
 msgstr ""
 
@@ -4092,12 +4168,12 @@ msgstr ""
 msgid "Success"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
+#: 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"
+"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/SystemRestore/SystemRestoreContent.vue:197
@@ -4204,6 +4280,10 @@ msgstr ""
 msgid "System restored successfully."
 msgstr ""
 
+#: src/constants/errors/self_check.ts:3
+msgid "Task is not fixable"
+msgstr ""
+
 #: src/constants/errors/self_check.ts:2
 msgid "Task not found"
 msgstr ""
@@ -4248,8 +4328,7 @@ msgstr ""
 
 #: src/constants/errors/nginx_log.ts:2
 msgid ""
-"The log path is not under the paths in "
-"settings.NginxSettings.LogDirWhiteList"
+"The log path is not under the paths in settings.NginxSettings.LogDirWhiteList"
 msgstr ""
 
 #: src/views/preference/tabs/OpenAISettings.vue:23
@@ -4260,7 +4339,8 @@ msgid ""
 msgstr ""
 
 #: src/views/preference/tabs/OpenAISettings.vue:90
-msgid "The model used for code completion, if not set, the chat model will be used."
+msgid ""
+"The model used for code completion, if not set, the chat model will be used."
 msgstr ""
 
 #: src/views/preference/tabs/NodeSettings.vue:18
@@ -4357,7 +4437,8 @@ msgid "This field should not be empty"
 msgstr ""
 
 #: src/constants/form_errors.ts:6
-msgid "This field should only contain letters, unicode characters, numbers, and -_."
+msgid ""
+"This field should only contain letters, unicode characters, numbers, and -_."
 msgstr ""
 
 #: src/views/dashboard/NginxDashBoard.vue:153
@@ -4397,7 +4478,8 @@ msgid ""
 msgstr ""
 
 #: src/views/environments/list/BatchUpgrader.vue:182
-msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
+msgid ""
+"This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr ""
 
 #: src/views/preference/tabs/AuthSettings.vue:124
@@ -4441,8 +4523,8 @@ msgstr ""
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:15
 msgid ""
 "To make sure the certification auto-renewal can work normally, we need to "
-"add a location which can proxy the request from authority to backend, and "
-"we need to save this file and reload the Nginx. Are you sure you want to "
+"add a location which can proxy the request from authority to backend, and we "
+"need to save this file and reload the Nginx. Are you sure you want to "
 "continue?"
 msgstr ""
 
@@ -4524,7 +4606,7 @@ msgstr ""
 msgid "Unknown"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:44
+#: src/components/SelfCheck/SelfCheck.vue:43
 msgid "Unknown issue"
 msgstr ""
 
@@ -4689,8 +4771,8 @@ msgstr ""
 
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:140
 msgid ""
-"We will remove the HTTPChallenge configuration from this file and reload "
-"the Nginx. Are you sure you want to continue?"
+"We will remove the HTTPChallenge configuration from this file and reload the "
+"Nginx. Are you sure you want to continue?"
 msgstr ""
 
 #: src/views/preference/tabs/AuthSettings.vue:97
@@ -4773,8 +4855,8 @@ msgstr "Так"
 
 #: src/views/terminal/Terminal.vue:135
 msgid ""
-"You are accessing this terminal over an insecure HTTP connection on a "
-"non-localhost domain. This may expose sensitive information."
+"You are accessing this terminal over an insecure HTTP connection on a non-"
+"localhost domain. This may expose sensitive information."
 msgstr ""
 
 #: src/views/system/Upgrade.vue:202
@@ -4800,7 +4882,8 @@ msgid ""
 msgstr ""
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81
-msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
+msgid ""
+"You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
 msgstr ""
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94
@@ -4821,3 +4904,12 @@ msgstr ""
 #: src/views/preference/components/AuthSettings/Passkey.vue:75
 msgid "Your passkeys"
 msgstr ""
+
+#~ 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`."
+#~ msgstr ""
+#~ "Перевірте, чи існує /var/run/docker.sock. Якщо ви використовуєте "
+#~ "офіційний Docker-образ Nginx UI, переконайтеся, що сокет Docker "
+#~ "підключено таким чином: `-v /var/run/docker.sock:/var/run/docker.sock`."

+ 248 - 140
app/src/language/vi_VN/app.po

@@ -5,54 +5,56 @@ msgstr ""
 "Language-Team: none\n"
 "Language: vi_VN\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: src/language/generate.ts:19
+#: src/language/generate.ts:47
 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}"
-msgstr "[Nginx UI] Người dùng ACME: %{name}, Email: %{email}, Thư mục CA: %{caDir}"
+msgstr ""
+"[Nginx UI] Người dùng ACME: %{name}, Email: %{email}, Thư mục CA: %{caDir}"
 
-#: src/language/generate.ts:13
+#: src/language/generate.ts:49
 msgid "[Nginx UI] Backing up current certificate for later revocation"
 msgstr "[Nginx UI] Đang sao lưu chứng chỉ hiện tại để thu hồi sau này"
 
-#: src/language/generate.ts:28
+#: src/language/generate.ts:6
 #, fuzzy
 msgid "[Nginx UI] Certificate renewed successfully"
 msgstr "Đã xóa thành công"
 
-#: src/language/generate.ts:8
+#: src/language/generate.ts:37
 #, fuzzy
 msgid "[Nginx UI] Certificate successfully revoked"
 msgstr "Restart Nginx thành công"
 
-#: src/language/generate.ts:29
-msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate"
+#: src/language/generate.ts:13
+msgid ""
+"[Nginx UI] Certificate was used for server, reloading server TLS certificate"
 msgstr ""
-"[Nginx UI] Chứng chỉ đã được sử dụng cho máy chủ, đang tải lại chứng chỉ "
-"TLS của máy chủ"
+"[Nginx UI] Chứng chỉ đã được sử dụng cho máy chủ, đang tải lại chứng chỉ TLS "
+"của máy chủ"
 
-#: src/language/generate.ts:24
+#: src/language/generate.ts:35
 #, fuzzy
 msgid "[Nginx UI] Creating client facilitates communication with the CA server"
 msgstr "Tạo client để giao tiếp với CA server"
 
-#: src/language/generate.ts:12
+#: src/language/generate.ts:36
 #, fuzzy
 msgid "[Nginx UI] Environment variables cleaned"
 msgstr "Đặt biến môi trường"
 
-#: src/language/generate.ts:21
+#: src/language/generate.ts:28
 msgid "[Nginx UI] Finished"
 msgstr "[Nginx UI] Đã hoàn thành"
 
-#: src/language/generate.ts:4
+#: src/language/generate.ts:25
 #, fuzzy
 msgid "[Nginx UI] Issued certificate successfully"
 msgstr "Cấp chứng chỉ thành công"
 
-#: src/language/generate.ts:14
+#: src/language/generate.ts:50
 msgid "[Nginx UI] Obtaining certificate"
 msgstr "[Nginx UI] Đang lấy chứng chỉ"
 
@@ -60,44 +62,44 @@ msgstr "[Nginx UI] Đang lấy chứng chỉ"
 msgid "[Nginx UI] Preparing for certificate revocation"
 msgstr "[Nginx UI] Chuẩn bị thu hồi chứng chỉ"
 
-#: src/language/generate.ts:18
+#: src/language/generate.ts:46
 msgid "[Nginx UI] Preparing lego configurations"
 msgstr "[Nginx UI] Đang chuẩn bị cấu hình lego"
 
-#: src/language/generate.ts:25
+#: src/language/generate.ts:19
 msgid "[Nginx UI] Reloading nginx"
 msgstr "[Nginx UI] Đang tải lại nginx"
 
-#: src/language/generate.ts:16
+#: src/language/generate.ts:14
 msgid "[Nginx UI] Revocation completed"
 msgstr "[Nginx UI] Đã hoàn tất thu hồi"
 
-#: src/language/generate.ts:7
+#: src/language/generate.ts:4
 msgid "[Nginx UI] Revoking certificate"
 msgstr "[Nginx UI] Đang thu hồi chứng chỉ"
 
-#: src/language/generate.ts:26
+#: src/language/generate.ts:29
 msgid "[Nginx UI] Revoking old certificate"
 msgstr "[Nginx UI] Đang thu hồi chứng chỉ cũ"
 
-#: src/language/generate.ts:20
+#: src/language/generate.ts:18
 msgid "[Nginx UI] Setting DNS01 challenge provider"
 msgstr "[Nginx UI] Đang thiết lập nhà cung cấp thử thách DNS01"
 
-#: src/language/generate.ts:6
+#: src/language/generate.ts:27
 #, fuzzy
 msgid "[Nginx UI] Setting environment variables"
 msgstr "Đặt biến môi trường"
 
-#: src/language/generate.ts:11
+#: src/language/generate.ts:48
 msgid "[Nginx UI] Setting HTTP01 challenge provider"
 msgstr "[Nginx UI] Đang thiết lập nhà cung cấp thử thách HTTP01"
 
-#: src/language/generate.ts:15
+#: src/language/generate.ts:12
 msgid "[Nginx UI] Writing certificate private key to disk"
 msgstr "[Nginx UI] Đang ghi khóa riêng của chứng chỉ vào ổ đĩa"
 
-#: src/language/generate.ts:27
+#: src/language/generate.ts:51
 msgid "[Nginx UI] Writing certificate to disk"
 msgstr "[Nginx UI] Đang ghi chứng chỉ vào ổ đĩa"
 
@@ -118,6 +120,10 @@ msgstr "Tác giả"
 msgid "Access Log"
 msgstr "Log truy cập"
 
+#: src/constants/errors/self_check.ts:21
+msgid "Access log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:90
 #: src/routes/modules/nginx_log.ts:17
 msgid "Access Logs"
@@ -348,7 +354,7 @@ msgstr "Hỏi ChatGPT"
 msgid "Assistant"
 msgstr "Trợ lý"
 
-#: src/components/SelfCheck/SelfCheck.vue:31
+#: src/components/SelfCheck/SelfCheck.vue:30
 msgid "Attempt to fix"
 msgstr "Cố gắng sửa chữa"
 
@@ -427,7 +433,8 @@ msgstr "Quay lại"
 
 #: src/components/SystemRestore/SystemRestoreContent.vue:155
 msgid "Backup file integrity check failed, it may have been tampered with"
-msgstr "Kiểm tra tính toàn vẹn của tập tin sao lưu thất bại, có thể đã bị can thiệp"
+msgstr ""
+"Kiểm tra tính toàn vẹn của tập tin sao lưu thất bại, có thể đã bị can thiệp"
 
 #: src/constants/errors/backup.ts:41
 msgid "Backup file not found: {0}"
@@ -632,7 +639,7 @@ msgstr "Chứng chỉ đã hết hạn"
 msgid "Certificate Expiring Soon"
 msgstr "Chứng chỉ sắp hết hạn"
 
-#: src/language/generate.ts:5
+#: src/language/generate.ts:33
 #, fuzzy
 msgid "Certificate not found: %{error}"
 msgstr "Lỗi giải mã chứng chỉ"
@@ -660,7 +667,7 @@ msgstr "Chứng chỉ SSL hợp lệ"
 msgid "Certificate renewed successfully"
 msgstr "Đã xóa thành công"
 
-#: src/language/generate.ts:10
+#: src/language/generate.ts:11
 #, fuzzy
 msgid "Certificate revoked successfully"
 msgstr "Đã xóa chứng chỉ thành công"
@@ -726,48 +733,70 @@ msgstr "Kiểm tra lại"
 msgid "Check again"
 msgstr "Kiểm tra lại"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:31
-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`."
-msgstr ""
-"Kiểm tra xem /var/run/docker.sock có tồn tại không. Nếu bạn đang sử dụng "
-"Docker Image chính thức của Nginx UI, hãy đảm bảo rằng ổ cắm Docker được "
-"gắn như sau: `-v /var/run/docker.sock:/var/run/docker.sock`."
-
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:11
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:14
+#, fuzzy
 msgid ""
 "Check if HTTPS is enabled. Using HTTP outside localhost is insecure and "
-"prevents using Passkeys and clipboard features."
+"prevents using Passkeys and clipboard features"
 msgstr ""
 "Kiểm tra xem HTTPS đã được bật chưa. Sử dụng HTTP bên ngoài localhost không "
 "an toàn và ngăn chặn việc sử dụng tính năng Passkeys cùng khay nhớ tạm."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:26
-msgid "Check if the nginx.conf includes the conf.d directory."
+#: src/language/generate.ts:40
+msgid "Check if the docker socket exists."
+msgstr ""
+
+#: src/language/generate.ts:20
+msgid "Check if the nginx access log path exists"
+msgstr ""
+
+#: src/language/generate.ts:44
+#, fuzzy
+msgid "Check if the nginx configuration directory exists"
+msgstr "Kiểm tra xem tệp nginx.conf có bao gồm thư mục conf.d không."
+
+#: src/language/generate.ts:9
+#, fuzzy
+msgid "Check if the nginx configuration entry file exists"
+msgstr "Kiểm tra xem tệp nginx.conf có bao gồm thư mục conf.d không."
+
+#: src/language/generate.ts:32
+msgid "Check if the nginx error log path exists"
+msgstr ""
+
+#: src/language/generate.ts:24
+msgid "Check if the nginx PID path exists"
+msgstr ""
+
+#: src/language/generate.ts:43
+#, fuzzy
+msgid "Check if the nginx.conf includes the conf.d directory"
 msgstr "Kiểm tra xem tệp nginx.conf có bao gồm thư mục conf.d không."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:16
-msgid "Check if the nginx.conf includes the sites-enabled directory."
+#: src/language/generate.ts:23
+#, fuzzy
+msgid "Check if the nginx.conf includes the sites-enabled directory"
 msgstr "Kiểm tra xem tệp nginx.conf có bao gồm thư mục sites-enabled không."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:21
-msgid "Check if the nginx.conf includes the streams-enabled directory."
+#: src/language/generate.ts:5
+#, fuzzy
+msgid "Check if the nginx.conf includes the streams-enabled directory"
 msgstr "Kiểm tra xem tệp nginx.conf có bao gồm thư mục streams-enabled không."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:6
+#: src/language/generate.ts:30
+#, fuzzy
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
-"nginx configuration directory."
+"nginx configuration directory"
 msgstr ""
 "Kiểm tra xem các thư mục sites-available và sites-enabled có nằm trong thư "
 "mục cấu hình nginx hay không."
 
-#: src/components/SelfCheck/tasks/backend/index.ts:11
+#: src/language/generate.ts:38
+#, fuzzy
 msgid ""
-"Check if the streams-available and streams-enabled directories are under "
-"the nginx configuration directory."
+"Check if the streams-available and streams-enabled directories are under the "
+"nginx configuration directory"
 msgstr ""
 "Kiểm tra xem các thư mục streams-available và streams-enabled có nằm trong "
 "thư mục cấu hình nginx hay không."
@@ -870,6 +899,16 @@ msgstr "So sánh với hiện tại"
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr "Mức nén, 1 là thấp nhất, 9 là cao nhất"
 
+#: src/constants/errors/self_check.ts:17
+#, fuzzy
+msgid "Config directory not exist"
+msgstr "Lỗi phân tích cú pháp cấu hình Nginx"
+
+#: src/constants/errors/self_check.ts:18
+#, fuzzy
+msgid "Config entry file not exist"
+msgstr "Lỗi phân tích cú pháp cấu hình Nginx"
+
 #: src/constants/errors/backup.ts:14
 #, fuzzy
 msgid "Config path is empty"
@@ -1000,8 +1039,8 @@ msgid ""
 "Create system backups including Nginx configuration and Nginx UI settings. "
 "Backup files will be automatically downloaded to your computer."
 msgstr ""
-"Tạo bản sao lưu hệ thống bao gồm cấu hình Nginx và cài đặt Nginx UI. Các "
-"tệp sao lưu sẽ tự động được tải xuống máy tính của bạn."
+"Tạo bản sao lưu hệ thống bao gồm cấu hình Nginx và cài đặt Nginx UI. Các tệp "
+"sao lưu sẽ tự động được tải xuống máy tính của bạn."
 
 #: src/views/environments/group/columns.ts:31
 #: src/views/notification/notificationColumns.tsx:59
@@ -1085,7 +1124,8 @@ msgstr "Mô tả"
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150
 msgid "Define shared memory zone name and size, e.g. proxy_cache:10m"
-msgstr "Xác định tên và kích thước vùng bộ nhớ dùng chung, ví dụ proxy_cache:10m"
+msgstr ""
+"Xác định tên và kích thước vùng bộ nhớ dùng chung, ví dụ proxy_cache:10m"
 
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129
@@ -1375,11 +1415,11 @@ msgstr "Bạn muốn xóa máy chủ này ?"
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/backend/index.ts:30
-msgid "Docker Socket"
+#: src/language/generate.ts:10
+msgid "Docker socket exists"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:15
+#: src/constants/errors/self_check.ts:16
 msgid "Docker socket not exist"
 msgstr ""
 
@@ -1631,6 +1671,10 @@ msgstr ""
 msgid "Error Log"
 msgstr "Log lỗi"
 
+#: src/constants/errors/self_check.ts:22
+msgid "Error log path not exist"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LogEntry.vue:98
 #: src/routes/modules/nginx_log.ts:24
 msgid "Error Logs"
@@ -1724,7 +1768,7 @@ msgstr ""
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:9
+#: src/constants/errors/self_check.ts:10
 #, fuzzy
 msgid "Failed to create backup"
 msgstr "Không thể bật %{msg}"
@@ -1821,7 +1865,7 @@ msgstr ""
 msgid "Failed to delete certificate"
 msgstr "Nhận chứng chỉ"
 
-#: src/language/generate.ts:9
+#: src/language/generate.ts:26
 #, fuzzy
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "Nhận chứng chỉ"
@@ -1940,7 +1984,7 @@ msgstr "Không thể bật %{msg}"
 msgid "Failed to open zip file: {0}"
 msgstr "Không thể bật %{msg}"
 
-#: src/constants/errors/self_check.ts:4
+#: src/constants/errors/self_check.ts:5
 msgid "Failed to parse nginx.conf"
 msgstr ""
 
@@ -1962,7 +2006,7 @@ msgstr "Không thể bật %{msg}"
 msgid "Failed to read hash info file: {0}"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:3
+#: src/constants/errors/self_check.ts:4
 msgid "Failed to read nginx.conf"
 msgstr ""
 
@@ -2172,7 +2216,7 @@ msgstr ""
 msgid "HTTP01"
 msgstr ""
 
-#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:13
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2186,8 +2230,8 @@ msgstr ""
 
 #: src/views/nginx_log/NginxLogList.vue:81
 msgid ""
-"If logs are not indexed, please check if the log file is under the "
-"directory in Nginx.LogDirWhiteList."
+"If logs are not indexed, please check if the log file is under the directory "
+"in Nginx.LogDirWhiteList."
 msgstr ""
 
 #: src/views/preference/tabs/AuthSettings.vue:145
@@ -2536,8 +2580,11 @@ msgstr "Locations"
 msgid "Log"
 msgstr "Log"
 
-#: src/language/generate.ts:23
-msgid "Log file %{log_path} is not a regular file. "
+#: src/language/generate.ts:34
+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:67
@@ -2562,12 +2609,12 @@ msgstr ""
 
 #: src/views/preference/tabs/LogrotateSettings.vue:13
 msgid ""
-"Logrotate, by default, is enabled in most mainstream Linux distributions "
-"for users who install Nginx UI on the host machine, so you don't need to "
-"modify the parameters on this page. For users who install Nginx UI using "
-"Docker containers, you can manually enable this option. The crontab task "
-"scheduler of Nginx UI will execute the logrotate command at the interval "
-"you set in minutes."
+"Logrotate, by default, is enabled in most mainstream Linux distributions for "
+"users who install Nginx UI on the host machine, so you don't need to modify "
+"the parameters on this page. For users who install Nginx UI using Docker "
+"containers, you can manually enable this option. The crontab task scheduler "
+"of Nginx UI will execute the logrotate command at the interval you set in "
+"minutes."
 msgstr ""
 
 #: src/views/site/components/SiteStatusSegmented.vue:138
@@ -2592,9 +2639,8 @@ msgid ""
 "Make sure you have configured a reverse proxy for .well-known directory to "
 "HTTPChallengePort before obtaining the certificate."
 msgstr ""
-"Đảm bảo rằng bạn đã định cấu hình proxy ngược (reverse proxy) thư mục "
-".well-known tới HTTPChallengePort (default: 9180) trước khi ký chứng chỉ "
-"SSL."
+"Đảm bảo rằng bạn đã định cấu hình proxy ngược (reverse proxy) thư mục .well-"
+"known tới HTTPChallengePort (default: 9180) trước khi ký chứng chỉ SSL."
 
 #: src/routes/modules/config.ts:10 src/views/config/ConfigEditor.vue:115
 #: src/views/config/ConfigEditor.vue:166 src/views/config/ConfigList.vue:72
@@ -2834,36 +2880,29 @@ msgstr ""
 msgid "Nginx Access Log Path"
 msgstr "Vị trí lưu log truy cập (Access log) của Nginx"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:25
-msgid "Nginx Conf Include Conf.d"
-msgstr ""
-
-#: src/components/SelfCheck/tasks/backend/index.ts:15
-msgid "Nginx Conf Include Sites Enabled"
-msgstr ""
-
-#: src/components/SelfCheck/tasks/backend/index.ts:20
-msgid "Nginx Conf Include Streams Enabled"
-msgstr ""
+#: src/language/generate.ts:16
+#, fuzzy
+msgid "Nginx access log path exists"
+msgstr "Vị trí lưu log truy cập (Access log) của Nginx"
 
-#: src/constants/errors/self_check.ts:5
+#: src/constants/errors/self_check.ts:6
 msgid "Nginx conf no http block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:7
+#: src/constants/errors/self_check.ts:8
 msgid "Nginx conf no stream block"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:14
+#: src/constants/errors/self_check.ts:15
 #, fuzzy
 msgid "Nginx conf not include conf.d directory"
 msgstr "Lỗi phân tích cú pháp cấu hình Nginx"
 
-#: src/constants/errors/self_check.ts:6
+#: src/constants/errors/self_check.ts:7
 msgid "Nginx conf not include sites-enabled"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:8
+#: src/constants/errors/self_check.ts:9
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 
@@ -2872,6 +2911,16 @@ msgstr ""
 msgid "Nginx config directory is not set"
 msgstr "Lỗi phân tích cú pháp cấu hình Nginx"
 
+#: src/language/generate.ts:31
+#, fuzzy
+msgid "Nginx configuration directory exists"
+msgstr "Lỗi phân tích cú pháp cấu hình Nginx"
+
+#: src/language/generate.ts:15
+#, fuzzy
+msgid "Nginx configuration entry file exists"
+msgstr "Lỗi phân tích cú pháp cấu hình Nginx"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:138
 #, fuzzy
 msgid "Nginx configuration has been restored"
@@ -2910,6 +2959,11 @@ msgstr ""
 msgid "Nginx Error Log Path"
 msgstr "Vị trí lưu log lỗi (Error log) của Nginx"
 
+#: src/language/generate.ts:21
+#, fuzzy
+msgid "Nginx error log path exists"
+msgstr "Vị trí lưu log lỗi (Error log) của Nginx"
+
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/views/dashboard/NginxDashBoard.vue:112
@@ -2944,6 +2998,11 @@ msgstr ""
 msgid "Nginx PID Path"
 msgstr "Vị trí lưu log lỗi (Error log) của Nginx"
 
+#: src/language/generate.ts:45
+#, fuzzy
+msgid "Nginx PID path exists"
+msgstr "Vị trí lưu log lỗi (Error log) của Nginx"
+
 #: src/views/preference/tabs/NginxSettings.vue:40
 msgid "Nginx Reload Command"
 msgstr ""
@@ -3002,10 +3061,25 @@ msgstr "Lỗi phân tích cú pháp cấu hình Nginx"
 #: src/components/SystemRestore/SystemRestoreContent.vue:336
 #, fuzzy
 msgid ""
-"Nginx UI configuration has been restored and will restart automatically in "
-"a few seconds."
+"Nginx UI configuration has been restored and will restart automatically in a "
+"few seconds."
+msgstr "Lỗi phân tích cú pháp cấu hình Nginx"
+
+#: src/language/generate.ts:8
+#, fuzzy
+msgid "Nginx.conf includes conf.d directory"
 msgstr "Lỗi phân tích cú pháp cấu hình Nginx"
 
+#: src/language/generate.ts:42
+#, fuzzy
+msgid "Nginx.conf includes sites-enabled directory"
+msgstr "Kiểm tra xem tệp nginx.conf có bao gồm thư mục sites-enabled không."
+
+#: src/language/generate.ts:39
+#, fuzzy
+msgid "Nginx.conf includes streams-enabled directory"
+msgstr "Kiểm tra xem tệp nginx.conf có bao gồm thư mục streams-enabled không."
+
 #: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
@@ -3342,6 +3416,10 @@ msgstr "Đã tắt thành công"
 msgid "Performing core upgrade"
 msgstr "Nâng cấp core"
 
+#: src/constants/errors/self_check.ts:19
+msgid "PID path not exist"
+msgstr ""
+
 #: src/constants/errors/crypto.ts:2
 msgid "Plain text is empty"
 msgstr ""
@@ -3375,7 +3453,8 @@ msgstr ""
 msgid ""
 "Please fill in the API authentication credentials provided by your DNS "
 "provider."
-msgstr "Vui lòng điền thông tin xác thực API do nhà cung cấp DNS của bạn cung cấp"
+msgstr ""
+"Vui lòng điền thông tin xác thực API do nhà cung cấp DNS của bạn cung cấp"
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:106
 msgid "Please fill in the required fields"
@@ -3386,14 +3465,14 @@ 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 ""
-"Trước tiên, vui lòng thêm thông tin xác thực trong Chứng chỉ > Thông tin "
-"xác thực DNS, sau đó chọn nhà cung cấp DNS"
+"Trước tiên, vui lòng thêm thông tin xác thực trong Chứng chỉ > Thông tin xác "
+"thực DNS, sau đó chọn nhà cung cấp DNS"
 
 #: src/components/Notification/notifications.ts:166
 #: src/language/constants.ts:59
 msgid ""
-"Please generate new recovery codes in the preferences immediately to "
-"prevent lockout."
+"Please generate new recovery codes in the preferences immediately to prevent "
+"lockout."
 msgstr ""
 
 #: src/views/config/components/Rename.vue:65
@@ -3411,14 +3490,16 @@ msgstr "Vui lòng nhập username!"
 msgid ""
 "Please input name, this will be used as the filename of the new "
 "configuration!"
-msgstr "Vui lòng nhập tên, tên này sẽ được sử dụng làm tên tệp của cấu hình mới!"
+msgstr ""
+"Vui lòng nhập tên, tên này sẽ được sử dụng làm tên tệp của cấu hình mới!"
 
 #: src/views/site/site_list/SiteDuplicate.vue:33
 #, fuzzy
 msgid ""
 "Please input name, this will be used as the filename of the new "
 "configuration."
-msgstr "Vui lòng nhập tên, tên này sẽ được sử dụng làm tên tệp của cấu hình mới!"
+msgstr ""
+"Vui lòng nhập tên, tên này sẽ được sử dụng làm tên tệp của cấu hình mới!"
 
 #: src/views/install/components/InstallForm.vue:26
 msgid "Please input your E-mail!"
@@ -3438,7 +3519,8 @@ msgid "Please log in."
 msgstr ""
 
 #: src/views/certificate/DNSCredential.vue:62
-msgid "Please note that the unit of time configurations below are all in seconds."
+msgid ""
+"Please note that the unit of time configurations below are all in seconds."
 msgstr "Lưu ý đơn vị cấu hình thời gian bên dưới được tính bằng giây."
 
 #: src/views/install/components/InstallView.vue:100
@@ -3545,7 +3627,7 @@ msgstr "Đọc"
 msgid "Receive"
 msgstr "Nhận"
 
-#: src/components/SelfCheck/SelfCheck.vue:24
+#: src/components/SelfCheck/SelfCheck.vue:23
 msgid "Recheck"
 msgstr ""
 
@@ -4029,6 +4111,10 @@ msgstr "Lưu thành công"
 msgid "Saved successfully"
 msgstr "Lưu thành công"
 
+#: src/constants/errors/self_check.ts:20
+msgid "Sbin path not exist"
+msgstr ""
+
 #: src/views/preference/components/AuthSettings/TOTP.vue:69
 msgid "Scan the QR code with your mobile phone to add the account to the app."
 msgstr ""
@@ -4058,7 +4144,7 @@ msgstr ""
 msgid "Selector"
 msgstr "Bộ chọn"
 
-#: 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 ""
 
@@ -4128,14 +4214,14 @@ msgstr "Sử dụng HTTP01 để xác thực SSL"
 
 #: src/constants/errors/nginx_log.ts:8
 msgid ""
-"Settings.NginxLogSettings.AccessLogPath is empty, refer to "
-"https://nginxui.com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui."
+"com/guide/config-nginx.html for more information"
 msgstr ""
 
 #: src/constants/errors/nginx_log.ts:7
 msgid ""
-"Settings.NginxLogSettings.ErrorLogPath is empty, refer to "
-"https://nginxui.com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui."
+"com/guide/config-nginx.html for more information"
 msgstr ""
 
 #: src/views/install/components/InstallView.vue:64
@@ -4183,20 +4269,20 @@ msgstr "Logs"
 msgid "Site not found"
 msgstr "Không tìm thấy tệp tin"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:5
+#: src/language/generate.ts:7
 #, fuzzy
-msgid "Sites Directory"
+msgid "Sites directory exists"
 msgstr "Thư mục"
 
 #: src/routes/modules/sites.ts:19
 msgid "Sites List"
 msgstr "Danh sách Website"
 
-#: src/constants/errors/self_check.ts:10
+#: src/constants/errors/self_check.ts:11
 msgid "Sites-available directory not exist"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:11
+#: src/constants/errors/self_check.ts:12
 msgid "Sites-enabled directory not exist"
 msgstr ""
 
@@ -4304,16 +4390,16 @@ msgstr "Đã tắt"
 msgid "Stream not found"
 msgstr "Không tìm thấy tệp tin"
 
-#: src/components/SelfCheck/tasks/backend/index.ts:10
+#: src/language/generate.ts:41
 #, fuzzy
-msgid "Streams Directory"
+msgid "Streams directory exists"
 msgstr "Thư mục"
 
-#: src/constants/errors/self_check.ts:12
+#: src/constants/errors/self_check.ts:13
 msgid "Streams-available directory not exist"
 msgstr ""
 
-#: src/constants/errors/self_check.ts:13
+#: src/constants/errors/self_check.ts:14
 #, fuzzy
 msgid "Streams-enabled directory not exist"
 msgstr "Thư mục"
@@ -4326,12 +4412,12 @@ msgstr ""
 msgid "Success"
 msgstr "Thành công"
 
-#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
+#: 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"
+"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/SystemRestore/SystemRestoreContent.vue:197
@@ -4452,6 +4538,11 @@ msgstr "Thông tin"
 msgid "System restored successfully."
 msgstr "Restart Nginx thành công"
 
+#: src/constants/errors/self_check.ts:3
+#, fuzzy
+msgid "Task is not fixable"
+msgstr "Không tìm thấy tệp tin"
+
 #: src/constants/errors/self_check.ts:2
 #, fuzzy
 msgid "Task not found"
@@ -4500,8 +4591,7 @@ msgstr ""
 
 #: src/constants/errors/nginx_log.ts:2
 msgid ""
-"The log path is not under the paths in "
-"settings.NginxSettings.LogDirWhiteList"
+"The log path is not under the paths in settings.NginxSettings.LogDirWhiteList"
 msgstr ""
 
 #: src/views/preference/tabs/OpenAISettings.vue:23
@@ -4512,7 +4602,8 @@ msgid ""
 msgstr ""
 
 #: src/views/preference/tabs/OpenAISettings.vue:90
-msgid "The model used for code completion, if not set, the chat model will be used."
+msgid ""
+"The model used for code completion, if not set, the chat model will be used."
 msgstr ""
 
 #: src/views/preference/tabs/NodeSettings.vue:18
@@ -4552,7 +4643,8 @@ msgstr ""
 msgid ""
 "The server_name in the current configuration must be the domain name you "
 "need to get the certificate, supportmultiple domains."
-msgstr "Lưu ý: server_name trong cấu hình hiện tại phải là tên miền bạn muốn ký SSL."
+msgstr ""
+"Lưu ý: server_name trong cấu hình hiện tại phải là tên miền bạn muốn ký SSL."
 
 #: src/views/preference/tabs/CertSettings.vue:22
 #: src/views/preference/tabs/HTTPSettings.vue:14
@@ -4613,7 +4705,8 @@ msgid "This field should not be empty"
 msgstr "Trường này không được để trống"
 
 #: src/constants/form_errors.ts:6
-msgid "This field should only contain letters, unicode characters, numbers, and -_."
+msgid ""
+"This field should only contain letters, unicode characters, numbers, and -_."
 msgstr ""
 
 #: src/views/dashboard/NginxDashBoard.vue:153
@@ -4653,7 +4746,8 @@ msgid ""
 msgstr ""
 
 #: src/views/environments/list/BatchUpgrader.vue:182
-msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
+msgid ""
+"This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr ""
 
 #: src/views/preference/tabs/AuthSettings.vue:124
@@ -4697,13 +4791,13 @@ msgstr ""
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:15
 msgid ""
 "To make sure the certification auto-renewal can work normally, we need to "
-"add a location which can proxy the request from authority to backend, and "
-"we need to save this file and reload the Nginx. Are you sure you want to "
+"add a location which can proxy the request from authority to backend, and we "
+"need to save this file and reload the Nginx. Are you sure you want to "
 "continue?"
 msgstr ""
-"Để đảm bảo tính năng tự động gia hạn chứng chỉ có thể hoạt động bình "
-"thường, chúng tôi cần thêm một vị trí có thể ủy quyền yêu cầu từ cơ quan có "
-"thẩm quyền đến chương trình phụ trợ và chúng tôi cần lưu tệp này và tải lại "
+"Để đảm bảo tính năng tự động gia hạn chứng chỉ có thể hoạt động bình thường, "
+"chúng tôi cần thêm một vị trí có thể ủy quyền yêu cầu từ cơ quan có thẩm "
+"quyền đến chương trình phụ trợ và chúng tôi cần lưu tệp này và tải lại "
 "Nginx. Bạn có chắc chắn muốn Tiếp tục?"
 
 #: src/views/preference/tabs/OpenAISettings.vue:36
@@ -4784,7 +4878,7 @@ msgstr "Loại"
 msgid "Unknown"
 msgstr ""
 
-#: src/components/SelfCheck/SelfCheck.vue:44
+#: src/components/SelfCheck/SelfCheck.vue:43
 msgid "Unknown issue"
 msgstr ""
 
@@ -4962,8 +5056,8 @@ msgstr ""
 
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:140
 msgid ""
-"We will remove the HTTPChallenge configuration from this file and reload "
-"the Nginx. Are you sure you want to continue?"
+"We will remove the HTTPChallenge configuration from this file and reload the "
+"Nginx. Are you sure you want to continue?"
 msgstr ""
 "Chúng tôi sẽ xóa cấu hình HTTPChallenge khỏi tệp này và tải lại Nginx. Bạn "
 "có muốn tiếp tục không?"
@@ -5049,8 +5143,8 @@ msgstr "Có"
 
 #: src/views/terminal/Terminal.vue:135
 msgid ""
-"You are accessing this terminal over an insecure HTTP connection on a "
-"non-localhost domain. This may expose sensitive information."
+"You are accessing this terminal over an insecure HTTP connection on a non-"
+"localhost domain. This may expose sensitive information."
 msgstr ""
 
 #: src/views/system/Upgrade.vue:202
@@ -5076,7 +5170,8 @@ msgid ""
 msgstr ""
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81
-msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
+msgid ""
+"You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
 msgstr ""
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94
@@ -5098,6 +5193,15 @@ msgstr ""
 msgid "Your passkeys"
 msgstr ""
 
+#~ 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`."
+#~ msgstr ""
+#~ "Kiểm tra xem /var/run/docker.sock có tồn tại không. Nếu bạn đang sử dụng "
+#~ "Docker Image chính thức của Nginx UI, hãy đảm bảo rằng ổ cắm Docker được "
+#~ "gắn như sau: `-v /var/run/docker.sock:/var/run/docker.sock`."
+
 #, fuzzy
 #~ msgid "Format error %{msg}"
 #~ msgstr "Lưu lỗi %{msg}"
@@ -5162,11 +5266,14 @@ msgstr ""
 #~ msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
 #, fuzzy
-#~ msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: %{resp}"
+#~ msgid ""
+#~ "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: "
+#~ "%{resp}"
 #~ msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
 #, fuzzy
-#~ msgid "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
+#~ msgid ""
+#~ "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
 #~ msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
 #, fuzzy
@@ -5180,7 +5287,8 @@ msgstr ""
 #~ msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
 #, fuzzy
-#~ msgid "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
+#~ msgid ""
+#~ "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
 #~ msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
 #, fuzzy

File diff suppressed because it is too large
+ 283 - 182
app/src/language/zh_CN/app.po


File diff suppressed because it is too large
+ 312 - 157
app/src/language/zh_TW/app.po


+ 72 - 10
cmd/translation/gettext.go

@@ -1,4 +1,4 @@
-// go run .
+//go:generate go run .
 package main
 
 import (
@@ -88,16 +88,16 @@ func findTranslationC(filePath string, calls map[string]bool) {
 		return
 	}
 
-	// Create regex pattern based on the alias
-	pattern := fmt.Sprintf(`%s\.C\(\s*["']([^"']*(?:\\["'][^"']*)*)["']`, alias)
-	cCallRegex := regexp.MustCompile(pattern)
+	// First pre-process the file content to handle multi-line string concatenation
+	// Replace newlines and spaces between string concatenation to make them easier to parse
+	preprocessed := regexp.MustCompile(`"\s*\+\s*(\r?\n)?\s*"`).ReplaceAllString(fileContent, "")
 
-	// Handle backtick strings separately (multi-line strings)
-	backtickPattern := fmt.Sprintf(`%s\.C\(\s*\x60([^\x60]*)\x60`, alias)
-	backtickRegex := regexp.MustCompile(backtickPattern)
+	// Create regex pattern for translation.C calls
+	pattern := fmt.Sprintf(`%s\.C\(\s*"([^"]+)"`, alias)
+	cCallRegex := regexp.MustCompile(pattern)
 
-	// Find all matches with regular quotes
-	matches := cCallRegex.FindAllStringSubmatch(fileContent, -1)
+	// Find all matches
+	matches := cCallRegex.FindAllStringSubmatch(preprocessed, -1)
 	for _, match := range matches {
 		if len(match) >= 2 {
 			message := match[1]
@@ -112,6 +112,10 @@ func findTranslationC(filePath string, calls map[string]bool) {
 		}
 	}
 
+	// Handle backtick strings separately (multi-line strings)
+	backtickPattern := fmt.Sprintf(`%s\.C\(\s*\x60([^\x60]*)\x60`, alias)
+	backtickRegex := regexp.MustCompile(backtickPattern)
+
 	// Find all matches with backticks
 	backtickMatches := backtickRegex.FindAllStringSubmatch(fileContent, -1)
 	for _, match := range backtickMatches {
@@ -124,6 +128,61 @@ func findTranslationC(filePath string, calls map[string]bool) {
 			}
 		}
 	}
+
+	// Use a more direct approach to handle multi-line string concatenation
+	// This regex finds translation.C calls with string concatenation
+	// concatPattern := fmt.Sprintf(`%s\.C\(\s*"(.*?)"\s*(?:\+\s*"(.*?)")+\s*\)`, alias)
+	// concatRegex := regexp.MustCompile(concatPattern)
+
+	// We need to handle this specifically by manually parsing the file
+	translationStart := fmt.Sprintf(`%s\.C\(`, alias)
+	lines := strings.Split(fileContent, "\n")
+
+	for i := 0; i < len(lines); i++ {
+		if strings.Contains(lines[i], translationStart) && strings.Contains(lines[i], `"`) && strings.Contains(lines[i], `+`) {
+			// Potential multi-line concatenated string found
+			// startLine := i
+			var concatenatedParts []string
+			currentLine := lines[i]
+
+			// Extract the first part
+			firstPartMatch := regexp.MustCompile(`C\(\s*"([^"]*)"`)
+			fMatches := firstPartMatch.FindStringSubmatch(currentLine)
+			if len(fMatches) >= 2 {
+				concatenatedParts = append(concatenatedParts, fMatches[1])
+			}
+
+			// Look for continuation lines with string parts
+			for j := i + 1; j < len(lines) && j < i+10; j++ { // Limit to 10 lines
+				if strings.Contains(lines[j], `"`) && !strings.Contains(lines[j], translationStart) {
+					// Extract string parts
+					partMatch := regexp.MustCompile(`"([^"]*)"`)
+					pMatches := partMatch.FindAllStringSubmatch(lines[j], -1)
+					for _, pm := range pMatches {
+						if len(pm) >= 2 {
+							concatenatedParts = append(concatenatedParts, pm[1])
+						}
+					}
+
+					// If we find a closing parenthesis, we've reached the end
+					if strings.Contains(lines[j], `)`) {
+						break
+					}
+				} else if !strings.Contains(lines[j], `+`) {
+					// If the line doesn't contain a +, we've likely reached the end
+					break
+				}
+			}
+
+			// Combine all parts
+			if len(concatenatedParts) > 0 {
+				message := strings.Join(concatenatedParts, "")
+				if _, exists := calls[message]; !exists {
+					calls[message] = true
+				}
+			}
+		}
+	}
 }
 
 // findTranslationAlias finds the alias for the translation package in import statements
@@ -184,8 +243,11 @@ func generateSingleTSFile(root string, calls map[string]bool) {
 
 	// Write each translation message
 	for message := range calls {
-		// Escape single quotes in the message for JavaScript
+		// Escape single quotes and handle newlines in the message for JavaScript
 		escapedMessage := strings.ReplaceAll(message, "'", "\\'")
+		// Replace newlines with space to ensure proper formatting in the generated TS file
+		escapedMessage = strings.ReplaceAll(escapedMessage, "\n", " ")
+		escapedMessage = strings.ReplaceAll(escapedMessage, "\r", "")
 		writer.WriteString(fmt.Sprintf("  $gettext('%s'),\n", escapedMessage))
 	}
 

+ 21 - 14
internal/self_check/errors.go

@@ -4,18 +4,25 @@ import "github.com/uozi-tech/cosy"
 
 var (
 	e                                   = cosy.NewErrorScope("self_check")
-	ErrTaskNotFound                     = e.New(4040, "Task not found")
-	ErrFailedToReadNginxConf            = e.New(4041, "Failed to read nginx.conf")
-	ErrParseNginxConf                   = e.New(5001, "Failed to parse nginx.conf")
-	ErrNginxConfNoHttpBlock             = e.New(4042, "Nginx conf no http block")
-	ErrNginxConfNotIncludeSitesEnabled  = e.New(4043, "Nginx conf not include sites-enabled")
-	ErrorNginxConfNoStreamBlock         = e.New(4044, "Nginx conf no stream block")
-	ErrNginxConfNotIncludeStreamEnabled = e.New(4045, "Nginx conf not include stream-enabled")
-	ErrFailedToCreateBackup             = e.New(5002, "Failed to create backup")
-	ErrSitesAvailableNotExist           = e.New(4046, "Sites-available directory not exist")
-	ErrSitesEnabledNotExist             = e.New(4047, "Sites-enabled directory not exist")
-	ErrStreamAvailableNotExist          = e.New(4048, "Streams-available directory not exist")
-	ErrStreamEnabledNotExist            = e.New(4049, "Streams-enabled directory not exist")
-	ErrNginxConfNotIncludeConfD         = e.New(4050, "Nginx conf not include conf.d directory")
-	ErrDockerSocketNotExist             = e.New(4051, "Docker socket not exist")
+	ErrTaskNotFound                     = e.New(40400, "Task not found")
+	ErrTaskNotFixable                   = e.New(40401, "Task is not fixable")
+	ErrFailedToReadNginxConf            = e.New(40402, "Failed to read nginx.conf")
+	ErrParseNginxConf                   = e.New(50001, "Failed to parse nginx.conf")
+	ErrNginxConfNoHttpBlock             = e.New(40403, "Nginx conf no http block")
+	ErrNginxConfNotIncludeSitesEnabled  = e.New(40404, "Nginx conf not include sites-enabled")
+	ErrNginxConfNoStreamBlock           = e.New(40405, "Nginx conf no stream block")
+	ErrNginxConfNotIncludeStreamEnabled = e.New(40406, "Nginx conf not include stream-enabled")
+	ErrFailedToCreateBackup             = e.New(50002, "Failed to create backup")
+	ErrSitesAvailableNotExist           = e.New(40407, "Sites-available directory not exist")
+	ErrSitesEnabledNotExist             = e.New(40408, "Sites-enabled directory not exist")
+	ErrStreamAvailableNotExist          = e.New(40409, "Streams-available directory not exist")
+	ErrStreamEnabledNotExist            = e.New(40410, "Streams-enabled directory not exist")
+	ErrNginxConfNotIncludeConfD         = e.New(40411, "Nginx conf not include conf.d directory")
+	ErrDockerSocketNotExist             = e.New(40412, "Docker socket not exist")
+	ErrConfigDirNotExist                = e.New(40413, "Config directory not exist")
+	ErrConfigEntryFileNotExist          = e.New(40414, "Config entry file not exist")
+	ErrPIDPathNotExist                  = e.New(40415, "PID path not exist")
+	ErrSbinPathNotExist                 = e.New(40416, "Sbin path not exist")
+	ErrAccessLogPathNotExist            = e.New(40417, "Access log path not exist")
+	ErrErrorLogPathNotExist             = e.New(40418, "Error log path not exist")
 )

+ 78 - 0
internal/self_check/nginx.go

@@ -0,0 +1,78 @@
+package self_check
+
+import (
+	"github.com/0xJacky/Nginx-UI/internal/helper"
+	"github.com/0xJacky/Nginx-UI/internal/nginx"
+)
+
+// CheckConfigDir checks if the config directory exists
+func CheckConfigDir() error {
+	dir := nginx.GetConfPath()
+	if dir == "" {
+		return ErrConfigDirNotExist
+	}
+	if !helper.FileExists(dir) {
+		return ErrConfigDirNotExist
+	}
+	return nil
+}
+
+// CheckConfigEntryFile checks if the config entry file exists
+func CheckConfigEntryFile() error {
+	dir := nginx.GetConfPath()
+	if dir == "" {
+		return ErrConfigEntryFileNotExist
+	}
+	if !helper.FileExists(dir) {
+		return ErrConfigEntryFileNotExist
+	}
+	return nil
+}
+
+// CheckPIDPath checks if the PID path exists
+func CheckPIDPath() error {
+	path := nginx.GetPIDPath()
+	if path == "" {
+		return ErrPIDPathNotExist
+	}
+	if !helper.FileExists(path) {
+		return ErrPIDPathNotExist
+	}
+	return nil
+}
+
+// CheckSbinPath checks if the sbin path exists
+func CheckSbinPath() error {
+	path := nginx.GetSbinPath()
+	if path == "" {
+		return ErrSbinPathNotExist
+	}
+	if !helper.FileExists(path) {
+		return ErrSbinPathNotExist
+	}
+	return nil
+}
+
+// CheckAccessLogPath checks if the access log path exists
+func CheckAccessLogPath() error {
+	path := nginx.GetAccessLogPath()
+	if path == "" {
+		return ErrAccessLogPathNotExist
+	}
+	if !helper.FileExists(path) {
+		return ErrAccessLogPathNotExist
+	}
+	return nil
+}
+
+// CheckErrorLogPath checks if the error log path exists
+func CheckErrorLogPath() error {
+	path := nginx.GetErrorLogPath()
+	if path == "" {
+		return ErrErrorLogPathNotExist
+	}
+	if !helper.FileExists(path) {
+		return ErrErrorLogPathNotExist
+	}
+	return nil
+}

+ 1 - 1
internal/self_check/nginx_conf.go

@@ -75,7 +75,7 @@ func CheckNginxConfIncludeStreams() error {
 		}
 	}
 
-	return ErrorNginxConfNoStreamBlock
+	return ErrNginxConfNoStreamBlock
 }
 
 // FixNginxConfIncludeSites attempts to fix nginx.conf include sites-enabled

+ 11 - 5
internal/self_check/self_check.go

@@ -6,27 +6,33 @@ import (
 	"github.com/uozi-tech/cosy"
 )
 
-
-
 func Run() (reports Reports) {
 	reports = make(Reports, 0)
 	for _, task := range selfCheckTasks {
 		var cErr *cosy.Error
+		status := ReportStatusSuccess
 		if err := task.CheckFunc(); err != nil {
 			errors.As(err, &cErr)
+			status = ReportStatusError
 		}
 		reports = append(reports, &Report{
-			Name: task.Name,
-			Err:  cErr,
+			Name:        task.Name,
+			Description: task.Description,
+			Fixable:     task.FixFunc != nil,
+			Err:         cErr,
+			Status:      status,
 		})
 	}
 	return
 }
 
 func AttemptFix(taskName string) (err error) {
-	task, ok := selfCheckTaskMap[taskName]
+	task, ok := selfCheckTaskMap.Get(taskName)
 	if !ok {
 		return ErrTaskNotFound
 	}
+	if task.FixFunc == nil {
+		return ErrTaskNotFixable
+	}
 	return task.FixFunc()
 }

+ 77 - 14
internal/self_check/tasks.go

@@ -2,60 +2,123 @@ package self_check
 
 import (
 	"github.com/0xJacky/Nginx-UI/internal/helper"
+	"github.com/0xJacky/Nginx-UI/internal/translation"
+	"github.com/elliotchance/orderedmap/v3"
 	"github.com/uozi-tech/cosy"
 )
 
 type Task struct {
-	Name      string
-	CheckFunc func() error
-	FixFunc   func() error
+	Key         string
+	Name        *translation.Container
+	Description *translation.Container
+	CheckFunc   func() error
+	FixFunc     func() error
 }
 
+type ReportStatus string
+
+const (
+	ReportStatusSuccess ReportStatus = "success"
+	ReportStatusWarning ReportStatus = "warning"
+	ReportStatusError   ReportStatus = "error"
+)
+
 type Report struct {
-	Name string      `json:"name"`
-	Err  *cosy.Error `json:"err,omitempty"`
+	Name        *translation.Container `json:"name"`
+	Description *translation.Container `json:"description,omitempty"`
+	Fixable     bool                   `json:"fixable"`
+	Err         *cosy.Error            `json:"err,omitempty"`
+	Status      ReportStatus           `json:"status"`
 }
 
 type Reports []*Report
 
 var selfCheckTasks = []*Task{
 	{
-		Name:      "Directory-Sites",
+		Key:  "Directory-Sites",
+		Name: translation.C("Sites directory exists"),
+		Description: translation.C("Check if the " +
+			"sites-available and sites-enabled directories are " +
+			"under the nginx configuration directory"),
 		CheckFunc: CheckSitesDirectory,
 		FixFunc:   FixSitesDirectory,
 	},
 	{
-		Name:      "Directory-Streams",
+		Key:  "Directory-Streams",
+		Name: translation.C("Streams directory exists"),
+		Description: translation.C("Check if the " +
+			"streams-available and streams-enabled directories are " +
+			"under the nginx configuration directory"),
 		CheckFunc: CheckStreamDirectory,
 		FixFunc:   FixStreamDirectory,
 	},
 	{
-		Name:      "NginxConf-Sites-Enabled",
+		Key:  "NginxConf-Sites-Enabled",
+		Name: translation.C("Nginx.conf includes sites-enabled directory"),
+		Description: translation.C("Check if the nginx.conf includes the " +
+			"sites-enabled directory"),
 		CheckFunc: CheckNginxConfIncludeSites,
 		FixFunc:   FixNginxConfIncludeSites,
 	},
 	{
-		Name:      "NginxConf-Streams-Enabled",
+		Key:  "NginxConf-Streams-Enabled",
+		Name: translation.C("Nginx.conf includes streams-enabled directory"),
+		Description: translation.C("Check if the nginx.conf includes the " +
+			"streams-enabled directory"),
 		CheckFunc: CheckNginxConfIncludeStreams,
 		FixFunc:   FixNginxConfIncludeStreams,
 	},
 	{
-		Name:      "NginxConf-ConfD",
+		Key:  "NginxConf-ConfD",
+		Name: translation.C("Nginx.conf includes conf.d directory"),
+		Description: translation.C("Check if the nginx.conf includes the " +
+			"conf.d directory"),
 		CheckFunc: CheckNginxConfIncludeConfD,
 		FixFunc:   FixNginxConfIncludeConfD,
 	},
+	{
+		Key:         "NginxConf-Directory",
+		Name:        translation.C("Nginx configuration directory exists"),
+		Description: translation.C("Check if the nginx configuration directory exists"),
+		CheckFunc:   CheckConfigDir,
+	},
+	{
+		Key:         "NginxConf-Entry-File",
+		Name:        translation.C("Nginx configuration entry file exists"),
+		Description: translation.C("Check if the nginx configuration entry file exists"),
+		CheckFunc:   CheckConfigEntryFile,
+	},
+	{
+		Key:         "NginxPID-Path",
+		Name:        translation.C("Nginx PID path exists"),
+		Description: translation.C("Check if the nginx PID path exists"),
+		CheckFunc:   CheckPIDPath,
+	},
+	{
+		Key:         "NginxAccessLog-Path",
+		Name:        translation.C("Nginx access log path exists"),
+		Description: translation.C("Check if the nginx access log path exists"),
+		CheckFunc:   CheckAccessLogPath,
+	},
+	{
+		Key:         "NginxErrorLog-Path",
+		Name:        translation.C("Nginx error log path exists"),
+		Description: translation.C("Check if the nginx error log path exists"),
+		CheckFunc:   CheckErrorLogPath,
+	},
 }
 
-var selfCheckTaskMap = make(map[string]*Task)
+var selfCheckTaskMap = orderedmap.NewOrderedMap[string, *Task]()
 
 func init() {
 	for _, task := range selfCheckTasks {
-		selfCheckTaskMap[task.Name] = task
+		selfCheckTaskMap.Set(task.Key, task)
 	}
 	if helper.InNginxUIOfficialDocker() {
 		selfCheckTasks = append(selfCheckTasks, &Task{
-			Name:      "Docker-Socket",
-			CheckFunc: CheckDockerSocket,
+			Name:        translation.C("Docker socket exists"),
+			Description: translation.C("Check if the docker socket exists."),
+			CheckFunc:   CheckDockerSocket,
 		})
 	}
 }

Some files were not shown because too many files changed in this diff