فهرست منبع

feat(install): self check before install

Jacky 1 هفته پیش
والد
کامیت
455c9497b7
36فایلهای تغییر یافته به همراه2103 افزوده شده و 1832 حذف شده
  1. 2 1
      .devcontainer/devcontainer.json
  2. 1 0
      .gitignore
  3. 9 0
      .vscode/settings.json
  4. 14 11
      api/system/router.go
  5. 1 0
      app/components.d.ts
  6. 12 0
      app/src/components/SelfCheck/SelfCheck.vue
  7. 3 0
      app/src/components/SelfCheck/index.ts
  8. 0 0
      app/src/components/SelfCheck/tasks/backend/index.ts
  9. 0 0
      app/src/components/SelfCheck/tasks/frontend/https-check.ts
  10. 0 0
      app/src/components/SelfCheck/tasks/frontend/index.ts
  11. 0 0
      app/src/components/SelfCheck/tasks/frontend/websocket.ts
  12. 0 0
      app/src/components/SelfCheck/tasks/index.ts
  13. 0 0
      app/src/components/SelfCheck/tasks/types.ts
  14. 119 106
      app/src/language/ar/app.po
  15. 145 135
      app/src/language/de_DE/app.po
  16. 59 35
      app/src/language/en/app.po
  17. 150 139
      app/src/language/es/app.po
  18. 119 106
      app/src/language/fr_FR/app.po
  19. 95 38
      app/src/language/ja/app.po
  20. 117 112
      app/src/language/ko_KR/app.po
  21. 57 35
      app/src/language/messages.pot
  22. 128 115
      app/src/language/ru_RU/app.po
  23. 162 165
      app/src/language/tr_TR/app.po
  24. 106 88
      app/src/language/uk_UA/app.po
  25. 114 100
      app/src/language/vi_VN/app.po
  26. 162 202
      app/src/language/zh_CN/app.po
  27. 160 199
      app/src/language/zh_TW/app.po
  28. 1 1
      app/src/routes/modules/system.ts
  29. 3 244
      app/src/views/install/Install.vue
  30. 25 0
      app/src/views/install/components/InstallFooter.vue
  31. 128 0
      app/src/views/install/components/InstallForm.vue
  32. 29 0
      app/src/views/install/components/InstallHeader.vue
  33. 159 0
      app/src/views/install/components/InstallView.vue
  34. 15 0
      app/src/views/install/components/TimeoutAlert.vue
  35. 7 0
      app/src/views/system/SelfCheck.vue
  36. 1 0
      router/routers.go

+ 2 - 1
.devcontainer/devcontainer.json

@@ -29,7 +29,8 @@
         "github.copilot",
         "golang.go",
         "vue.volar",
-        "ms-azuretools.vscode-docker"
+        "ms-azuretools.vscode-docker",
+        "akino.i18n-gettext"
       ]
     }
   },

+ 1 - 0
.gitignore

@@ -18,3 +18,4 @@ internal/**/*.gen.go
 .devcontainer/go-path
 .devcontainer/data
 .devcontainer/casdoor.pem
+.vscode/.i18n-gettext.secret

+ 9 - 0
.vscode/settings.json

@@ -0,0 +1,9 @@
+{
+  "i18n-gettext.localesConfig": {
+        "type": "nested",
+        "basePath": "app/src/language",
+        "pattern": "${locale}/${domain}.po",
+        "defaultDomain": "app",
+        "sourceLanguage": "en"
+    },
+}

+ 14 - 11
api/system/router.go

@@ -5,6 +5,14 @@ import (
 	"github.com/gin-gonic/gin"
 )
 
+func authIfInstalled(ctx *gin.Context) {
+	if installLockStatus() || isInstallTimeoutExceeded() {
+		middleware.AuthRequired()(ctx)
+	} else {
+		ctx.Next()
+	}
+}
+
 func InitPublicRouter(r *gin.RouterGroup) {
 	r.GET("install", InstallLockCheck)
 	r.POST("install", middleware.EncryptedParams(), InstallNginxUI)
@@ -14,23 +22,18 @@ func InitPublicRouter(r *gin.RouterGroup) {
 func InitPrivateRouter(r *gin.RouterGroup) {
 	r.GET("upgrade/release", GetRelease)
 	r.GET("upgrade/current", GetCurrentVersion)
-	r.GET("self_check", SelfCheck)
-	r.POST("self_check/:name/fix", SelfCheckFix)
 
-	// Backup endpoint only
 	r.GET("system/backup", CreateBackup)
 }
 
+func InitSelfCheckRouter(r *gin.RouterGroup) {
+	r.GET("self_check", authIfInstalled, SelfCheck)
+	r.POST("self_check/:name/fix", authIfInstalled, SelfCheckFix)
+}
+
 func InitBackupRestoreRouter(r *gin.RouterGroup) {
 	r.POST("system/backup/restore",
-		func(ctx *gin.Context) {
-			// If system is installed, verify user authentication
-			if installLockStatus() {
-				middleware.AuthRequired()(ctx)
-			} else {
-				ctx.Next()
-			}
-		},
+		authIfInstalled,
 		middleware.EncryptedForm(),
 		RestoreBackup)
 }

+ 1 - 0
app/components.d.ts

@@ -106,6 +106,7 @@ declare module 'vue' {
     ReactiveFromNowReactiveFromNow: typeof import('./src/components/ReactiveFromNow/ReactiveFromNow.vue')['default']
     RouterLink: typeof import('vue-router')['RouterLink']
     RouterView: typeof import('vue-router')['RouterView']
+    SelfCheckSelfCheck: typeof import('./src/components/SelfCheck/SelfCheck.vue')['default']
     SensitiveStringSensitiveString: typeof import('./src/components/SensitiveString/SensitiveString.vue')['default']
     SetLanguageSetLanguage: typeof import('./src/components/SetLanguage/SetLanguage.vue')['default']
     StdDesignStdDataDisplayStdBatchEdit: typeof import('./src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue')['default']

+ 12 - 0
app/src/views/system/SelfCheck/SelfCheck.vue → app/src/components/SelfCheck/SelfCheck.vue

@@ -4,6 +4,7 @@ import { CheckCircleOutlined, CloseCircleOutlined, WarningOutlined } from '@ant-
 import { taskManager } from './tasks'
 
 const data = ref<TaskReport[]>()
+const requestError = ref(false)
 const loading = ref(false)
 
 async function check() {
@@ -11,6 +12,9 @@ async function check() {
   try {
     data.value = await taskManager.runAllChecks()
   }
+  catch {
+    requestError.value = true
+  }
   finally {
     loading.value = false
   }
@@ -32,6 +36,14 @@ async function fix(taskName: string) {
     fixing[taskName] = false
   }
 }
+
+const hasError = computed(() => {
+  return requestError.value || data.value?.some(item => item.status === 'error')
+})
+
+defineExpose({
+  hasError,
+})
 </script>
 
 <template>

+ 3 - 0
app/src/components/SelfCheck/index.ts

@@ -0,0 +1,3 @@
+import SelfCheck from './SelfCheck.vue'
+
+export default SelfCheck

+ 0 - 0
app/src/views/system/SelfCheck/tasks/backend/index.ts → app/src/components/SelfCheck/tasks/backend/index.ts


+ 0 - 0
app/src/views/system/SelfCheck/tasks/frontend/https-check.ts → app/src/components/SelfCheck/tasks/frontend/https-check.ts


+ 0 - 0
app/src/views/system/SelfCheck/tasks/frontend/index.ts → app/src/components/SelfCheck/tasks/frontend/index.ts


+ 0 - 0
app/src/views/system/SelfCheck/tasks/frontend/websocket.ts → app/src/components/SelfCheck/tasks/frontend/websocket.ts


+ 0 - 0
app/src/views/system/SelfCheck/tasks/index.ts → app/src/components/SelfCheck/tasks/index.ts


+ 0 - 0
app/src/views/system/SelfCheck/tasks/types.ts → app/src/components/SelfCheck/tasks/types.ts


+ 119 - 106
app/src/language/ar/app.po

@@ -4,10 +4,10 @@ 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"
@@ -245,7 +245,7 @@ msgstr "اطلب المساعدة من ChatGPT"
 msgid "Assistant"
 msgstr "المساعد"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:50
+#: src/components/SelfCheck/SelfCheck.vue:62
 #, fuzzy
 msgid "Attempt to fix"
 msgstr "محاولات"
@@ -612,41 +612,41 @@ msgstr ""
 msgid "Check again"
 msgstr "تحقق مرة أخرى"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:31
+#: 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`."
+"Docker Image, please make sure the docker socket is mounted like this: `-v "
+"/var/run/docker.sock:/var/run/docker.sock`."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:11
+#: 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."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:26
+#: src/components/SelfCheck/tasks/backend/index.ts:26
 msgid "Check if the nginx.conf includes the conf.d directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:16
+#: src/components/SelfCheck/tasks/backend/index.ts:16
 msgid "Check if the nginx.conf includes the sites-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:21
+#: src/components/SelfCheck/tasks/backend/index.ts:21
 msgid "Check if the nginx.conf includes the streams-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:6
+#: src/components/SelfCheck/tasks/backend/index.ts:6
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
 "nginx configuration directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:11
+#: src/components/SelfCheck/tasks/backend/index.ts:11
 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 ""
 
 #: src/constants/errors/crypto.ts:3
@@ -942,7 +942,7 @@ msgstr "قم بتخصيص اسم العقدة المحلية ليتم عرضها
 msgid "Dashboard"
 msgstr "لوحة المعلومات"
 
-#: src/views/install/Install.vue:167
+#: src/views/install/components/InstallForm.vue:109
 msgid "Database (Optional, default: database)"
 msgstr "قاعدة البيانات (اختياري، الافتراضي: قاعدة البيانات)"
 
@@ -1237,7 +1237,7 @@ msgstr "هل تريد إزالة هذا المصدر؟"
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:30
+#: src/components/SelfCheck/tasks/backend/index.ts:30
 msgid "Docker Socket"
 msgstr ""
 
@@ -1279,8 +1279,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
@@ -1321,7 +1321,7 @@ msgstr "تعديل البث"
 msgid "Email"
 msgstr "بريد إلكتروني"
 
-#: src/views/install/Install.vue:136
+#: src/views/install/components/InstallForm.vue:78
 msgid "Email (*)"
 msgstr "البريد الإلكتروني (*)"
 
@@ -2017,7 +2017,7 @@ msgstr "منفذ تحدي HTTP"
 msgid "HTTP01"
 msgstr "HTTP01"
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2031,8 +2031,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
@@ -2122,19 +2122,26 @@ msgstr "أدخل رمز الاسترداد:"
 msgid "Insecure Skip Verify"
 msgstr ""
 
-#: src/routes/modules/auth.ts:8 src/views/install/Install.vue:183
+#: src/routes/modules/auth.ts:8
+#: src/views/install/components/InstallForm.vue:124
+#: src/views/install/components/InstallHeader.vue:9
 msgid "Install"
 msgstr "تثبيت"
 
-#: src/views/install/Install.vue:91
+#: src/views/install/components/InstallForm.vue:60
 msgid "Install successfully"
 msgstr "تم التثبيت بنجاح"
 
+#: src/views/install/components/InstallView.vue:62
+#, fuzzy
+msgid "Installation"
+msgstr "تثبيت"
+
 #: src/constants/errors/system.ts:3
 msgid "Installation is not allowed after 10 minutes of system startup"
 msgstr ""
 
-#: src/views/install/Install.vue:125
+#: src/views/install/components/TimeoutAlert.vue:11
 msgid ""
 "Installation is not allowed after 10 minutes of system startup, please "
 "restart the Nginx UI."
@@ -2392,19 +2399,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
@@ -2628,7 +2635,7 @@ msgstr "إجمالي استقبال الشبكة"
 msgid "Network Total Send"
 msgstr "إجمالي إرسال الشبكة"
 
-#: src/views/install/Install.vue:131
+#: src/views/install/components/InstallView.vue:106
 #, fuzzy
 msgid "New Installation"
 msgstr "تثبيت"
@@ -2646,6 +2653,7 @@ msgid "New version released"
 msgstr "تم إصدار نسخة جديدة"
 
 #: src/views/certificate/components/WildcardCertificate.vue:89
+#: src/views/install/components/InstallView.vue:93
 #: src/views/site/site_add/SiteAdd.vue:123
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:214
 msgid "Next"
@@ -2659,16 +2667,16 @@ msgstr "Nginx"
 msgid "Nginx Access Log Path"
 msgstr "مسار سجل الوصول لـ Nginx"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:25
+#: src/components/SelfCheck/tasks/backend/index.ts:25
 #, fuzzy
 msgid "Nginx Conf Include Conf.d"
 msgstr "أمر إعادة تشغيل Nginx"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:15
+#: src/components/SelfCheck/tasks/backend/index.ts:15
 msgid "Nginx Conf Include Sites Enabled"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:20
+#: src/components/SelfCheck/tasks/backend/index.ts:20
 msgid "Nginx Conf Include Streams Enabled"
 msgstr ""
 
@@ -2828,8 +2836,8 @@ 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/components/ChatGPT/ChatGPT.vue:374
@@ -3118,7 +3126,7 @@ msgstr ""
 msgid "Password"
 msgstr "كلمة المرور"
 
-#: src/views/install/Install.vue:156
+#: src/views/install/components/InstallForm.vue:98
 msgid "Password (*)"
 msgstr "كلمة المرور (*)"
 
@@ -3127,7 +3135,7 @@ msgstr "كلمة المرور (*)"
 msgid "Password incorrect"
 msgstr "اسم المستخدم أو كلمة المرور غير صحيحة"
 
-#: src/views/install/Install.vue:72
+#: src/views/install/components/InstallForm.vue:42
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 
@@ -3186,8 +3194,7 @@ 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:"
@@ -3224,8 +3231,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
@@ -3249,28 +3256,31 @@ msgid ""
 "configuration."
 msgstr "يرجى إدخال الاسم، سيتم استخدامه كاسم الملف للتكوين الجديد."
 
-#: src/views/install/Install.vue:56
+#: src/views/install/components/InstallForm.vue:26
 msgid "Please input your E-mail!"
 msgstr "يرجى إدخال بريدك الإلكتروني!"
 
-#: src/views/install/Install.vue:68 src/views/other/Login.vue:47
+#: src/views/install/components/InstallForm.vue:38 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgstr "يرجى إدخال كلمة المرور الخاصة بك!"
 
-#: src/views/install/Install.vue:62 src/views/other/Login.vue:41
+#: src/views/install/components/InstallForm.vue:32 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgstr "يرجى إدخال اسم المستخدم الخاص بك!"
 
-#: src/views/install/Install.vue:108
+#: src/views/install/components/InstallView.vue:47
 #: src/views/system/Backup/SystemRestore.vue: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."
+msgid "Please note that the unit of time configurations below are all in seconds."
 msgstr "يرجى ملاحظة أن تكوين وحدات الوقت أدناه كلها بالثواني."
 
+#: src/views/install/components/InstallView.vue:99
+msgid "Please resolve all issues before proceeding with installation"
+msgstr ""
+
 #: src/views/system/Backup/BackupCreator.vue:107
 msgid "Please save this security token, you will need it for restoration:"
 msgstr ""
@@ -3373,7 +3383,7 @@ msgstr "يقرأ"
 msgid "Receive"
 msgstr "يستقبل"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:43
+#: src/components/SelfCheck/SelfCheck.vue:55
 msgid "Recheck"
 msgstr ""
 
@@ -3690,7 +3700,7 @@ msgstr "إعادة التشغيل"
 msgid "Restore completed successfully"
 msgstr "تم الحذف بنجاح"
 
-#: src/views/install/Install.vue:188
+#: src/views/install/components/InstallView.vue:109
 #, fuzzy
 msgid "Restore from Backup"
 msgstr "نظام"
@@ -3861,7 +3871,7 @@ msgstr ""
 msgid "Selector"
 msgstr "المحدد"
 
-#: src/routes/modules/system.ts:19 src/views/system/SelfCheck/SelfCheck.vue:38
+#: src/components/SelfCheck/SelfCheck.vue:50 src/routes/modules/system.ts:19
 msgid "Self Check"
 msgstr ""
 
@@ -3927,14 +3937,18 @@ 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:63
+msgid "Setup your Nginx UI"
 msgstr ""
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
@@ -3977,7 +3991,7 @@ msgstr "سجلات الموقع"
 msgid "Site not found"
 msgstr "لم يتم العثور على الملف"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:5
+#: src/components/SelfCheck/tasks/backend/index.ts:5
 #, fuzzy
 msgid "Sites Directory"
 msgstr "مجلد"
@@ -4099,7 +4113,7 @@ msgstr "معطل"
 msgid "Stream not found"
 msgstr "لم يتم العثور على الملف"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:10
+#: src/components/SelfCheck/tasks/backend/index.ts:10
 #, fuzzy
 msgid "Streams Directory"
 msgstr "مجلد"
@@ -4122,12 +4136,12 @@ msgstr ""
 msgid "Success"
 msgstr "نجاح"
 
-#: src/views/system/SelfCheck/tasks/frontend/websocket.ts:6
+#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
 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
@@ -4221,6 +4235,11 @@ msgstr "نظام"
 msgid "System Backup"
 msgstr "نظام"
 
+#: src/views/install/components/InstallView.vue:58
+#, fuzzy
+msgid "System Check"
+msgstr "نظام"
+
 #: src/views/certificate/components/ACMEUserSelector.vue:88
 msgid "System Initial User"
 msgstr "مستخدم النظام الأولي"
@@ -4230,7 +4249,7 @@ msgstr "مستخدم النظام الأولي"
 msgid "System Restore"
 msgstr "نظام"
 
-#: src/views/install/Install.vue:104
+#: src/views/install/components/InstallView.vue:43
 #: src/views/system/Backup/SystemRestore.vue:6
 #, fuzzy
 msgid "System restored successfully."
@@ -4263,7 +4282,7 @@ msgstr ""
 "سيتم فحص شهادة النطاق لمدة 30 دقيقة، وسيتم تجديدها إذا مر أكثر من أسبوع أو "
 "الفترة التي حددتها في الإعدادات منذ إصدارها الأخير."
 
-#: src/views/install/Install.vue:78
+#: src/views/install/components/InstallForm.vue:48
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "لا يمكن أن يحتوي اسم الملف على الأحرف التالية: %{c}"
 
@@ -4286,7 +4305,8 @@ 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
@@ -4298,8 +4318,7 @@ 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
@@ -4407,8 +4426,7 @@ 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
@@ -4448,8 +4466,7 @@ 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
@@ -4497,8 +4514,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 ""
 "لضمان عمل تجديد الشهادة التلقائي بشكل طبيعي، نحتاج إلى إضافة موقع يمكنه "
@@ -4513,8 +4530,8 @@ msgid ""
 "local API."
 msgstr ""
 "لاستخدام نموذج كبير محلي، قم بنشره باستخدام vllm أو lmdeploy. فهي توفر نقطة "
-"نهاية API متوافقة مع OpenAI، لذا قم فقط بتعيين baseUrl إلىAPI المحلية الخاصة "
-"بك."
+"نهاية API متوافقة مع OpenAI، لذا قم فقط بتعيين baseUrl إلىAPI المحلية "
+"الخاصة بك."
 
 #: src/views/dashboard/NginxDashBoard.vue:57
 #, fuzzy
@@ -4593,7 +4610,7 @@ msgstr "نوع"
 msgid "Unknown"
 msgstr ""
 
-#: src/views/system/SelfCheck/SelfCheck.vue:63
+#: src/components/SelfCheck/SelfCheck.vue:75
 msgid "Unknown issue"
 msgstr ""
 
@@ -4678,7 +4695,7 @@ msgstr ""
 msgid "Username"
 msgstr "اسم المستخدم"
 
-#: src/views/install/Install.vue:146
+#: src/views/install/components/InstallForm.vue:88
 msgid "Username (*)"
 msgstr "اسم المستخدم (*)"
 
@@ -4697,6 +4714,10 @@ msgstr ""
 msgid "Verify Backup File Integrity"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:59
+msgid "Verify system requirements"
+msgstr "تحقق من متطلبات النظام"
+
 #: src/views/environments/list/envColumns.tsx:31
 msgid "Version"
 msgstr "إصدار"
@@ -4732,7 +4753,7 @@ msgstr "عرض"
 #: src/composables/usePerformanceMetrics.ts:114
 #: src/views/dashboard/components/PerformanceTablesCard.vue:73
 msgid "Waiting processes"
-msgstr ""
+msgstr "عمليات الانتظار"
 
 #: src/constants/index.ts:23 src/views/config/InspectConfig.vue:33
 #: src/views/notification/notificationColumns.tsx:22
@@ -4757,8 +4778,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. هل أنت "
 "متأكد أنك تريد المتابعة؟"
@@ -4850,8 +4871,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
@@ -4877,8 +4898,7 @@ 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
@@ -4908,8 +4928,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 ""
 #~ "عند تفعيل/تعطيل، حذف، أو حفظ هذا الموقع، سيتم مزامنة العقد المحددة في فئة "
 #~ "الموقع والعقد المحددة أدناه."
@@ -4976,15 +4996,12 @@ 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}"
@@ -4999,20 +5016,18 @@ 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 ""
 #~ "إذا فقدت هاتفك المحمول، يمكنك استخدام رمز الاسترداد لإعادة تعيين المصادقة "
 #~ "الثنائية."
@@ -5020,8 +5035,7 @@ 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"
@@ -5037,5 +5051,4 @@ msgstr "مفاتيح المرور الخاصة بك"
 #~ msgstr "اسم المستخدم أو كلمة المرور غير صحيحة"
 
 #~ msgid "Too many login failed attempts, please try again later"
-#~ msgstr ""
-#~ "عدد كبير جدًا من محاولات تسجيل الدخول الفاشلة، يرجى المحاولة مرة أخرى لاحقًا"
+#~ msgstr "عدد كبير جدًا من محاولات تسجيل الدخول الفاشلة، يرجى المحاولة مرة أخرى لاحقًا"

+ 145 - 135
app/src/language/de_DE/app.po

@@ -5,7 +5,7 @@ msgstr ""
 "Language-Team: none\n"
 "Language: de_DE\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"
 
@@ -259,7 +259,7 @@ msgstr "Frage ChatGPT um Hilfe"
 msgid "Assistant"
 msgstr "Assistent"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:50
+#: src/components/SelfCheck/SelfCheck.vue:62
 #, fuzzy
 msgid "Attempt to fix"
 msgstr "Versuche"
@@ -404,8 +404,7 @@ msgstr "Stapel-Upgrade"
 
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:70
 msgid "Belows are selected items that you want to batch modify"
-msgstr ""
-"Hier sind die ausgewählten Elemente, die Sie stapelweise ändern möchten"
+msgstr "Hier sind die ausgewählten Elemente, die Sie stapelweise ändern möchten"
 
 #: src/constants/errors/nginx.ts:2
 msgid "Block is nil"
@@ -629,41 +628,41 @@ msgstr ""
 msgid "Check again"
 msgstr "Erneut prüfen"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:31
+#: 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`."
+"Docker Image, please make sure the docker socket is mounted like this: `-v "
+"/var/run/docker.sock:/var/run/docker.sock`."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:11
+#: 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."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:26
+#: src/components/SelfCheck/tasks/backend/index.ts:26
 msgid "Check if the nginx.conf includes the conf.d directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:16
+#: src/components/SelfCheck/tasks/backend/index.ts:16
 msgid "Check if the nginx.conf includes the sites-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:21
+#: src/components/SelfCheck/tasks/backend/index.ts:21
 msgid "Check if the nginx.conf includes the streams-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:6
+#: src/components/SelfCheck/tasks/backend/index.ts:6
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
 "nginx configuration directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:11
+#: src/components/SelfCheck/tasks/backend/index.ts:11
 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 ""
 
 #: src/constants/errors/crypto.ts:3
@@ -958,15 +957,14 @@ msgstr "Benutzerdefiniert"
 msgid ""
 "Customize the name of local node to be displayed in the environment "
 "indicator."
-msgstr ""
-"Name des lokalen Knotens anpassen, der im Umgebungsindikator angezeigt wird."
+msgstr "Name des lokalen Knotens anpassen, der im Umgebungsindikator angezeigt wird."
 
 #: 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 "Übersicht"
 
-#: src/views/install/Install.vue:167
+#: src/views/install/components/InstallForm.vue:109
 msgid "Database (Optional, default: database)"
 msgstr "Datenbank (Optional, Standard: database)"
 
@@ -1274,7 +1272,7 @@ msgstr "Bist du sicher, dass du diese Richtlinie löschen möchtest?"
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:30
+#: src/components/SelfCheck/tasks/backend/index.ts:30
 msgid "Docker Socket"
 msgstr ""
 
@@ -1314,9 +1312,9 @@ msgid ""
 "Due to the security policies of some browsers, you cannot use passkeys on "
 "non-HTTPS websites, except when running on localhost."
 msgstr ""
-"Aufgrund der Sicherheitsrichtlinien einiger Browser kannst du Passkeys nicht "
-"auf Nicht-HTTPS-Websites verwenden, außer wenn sie auf localhost ausgeführt "
-"werden."
+"Aufgrund der Sicherheitsrichtlinien einiger Browser kannst du Passkeys "
+"nicht auf Nicht-HTTPS-Websites verwenden, außer wenn sie auf localhost "
+"ausgeführt werden."
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteList.vue:117
@@ -1360,7 +1358,7 @@ msgstr "Seite bearbeiten"
 msgid "Email"
 msgstr "Email (*)"
 
-#: src/views/install/Install.vue:136
+#: src/views/install/components/InstallForm.vue:78
 msgid "Email (*)"
 msgstr "Email (*)"
 
@@ -2061,7 +2059,7 @@ msgstr ""
 msgid "HTTP01"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2075,8 +2073,8 @@ msgstr "Wenn leer, wird das Standard-CA-Verzeichnis verwendet."
 
 #: 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
@@ -2170,20 +2168,27 @@ msgstr "Füge den Wiederherstellungscode ein:"
 msgid "Insecure Skip Verify"
 msgstr ""
 
-#: src/routes/modules/auth.ts:8 src/views/install/Install.vue:183
+#: src/routes/modules/auth.ts:8
+#: src/views/install/components/InstallForm.vue:124
+#: src/views/install/components/InstallHeader.vue:9
 msgid "Install"
 msgstr "Installieren"
 
-#: src/views/install/Install.vue:91
+#: src/views/install/components/InstallForm.vue:60
 #, fuzzy
 msgid "Install successfully"
 msgstr "Aktualisierung erfolgreich"
 
+#: src/views/install/components/InstallView.vue:62
+#, fuzzy
+msgid "Installation"
+msgstr "Installieren"
+
 #: src/constants/errors/system.ts:3
 msgid "Installation is not allowed after 10 minutes of system startup"
 msgstr ""
 
-#: src/views/install/Install.vue:125
+#: src/views/install/components/TimeoutAlert.vue:11
 msgid ""
 "Installation is not allowed after 10 minutes of system startup, please "
 "restart the Nginx UI."
@@ -2452,19 +2457,19 @@ 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."
-msgstr ""
-"Logrotate ist standardmäßig in den meisten gängigen Linux-Distributionen für "
-"Benutzer aktiviert, die Nginx UI auf dem Host-Rechner installieren, sodass "
-"du die Parameter auf dieser Seite nicht ändern musst. Wenn du Nginx UI mit "
-"Docker-Containern installierst, kannst du diese Option manuell aktivieren. "
-"Der Crontab-Aufgabenplaner von Nginx UI führt den Logrotate-Befehl in dem "
-"von dir in Minuten festgelegten Intervall aus."
+"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 ist standardmäßig in den meisten gängigen Linux-Distributionen "
+"für Benutzer aktiviert, die Nginx UI auf dem Host-Rechner installieren, "
+"sodass du die Parameter auf dieser Seite nicht ändern musst. Wenn du Nginx "
+"UI mit Docker-Containern installierst, kannst du diese Option manuell "
+"aktivieren. Der Crontab-Aufgabenplaner von Nginx UI führt den "
+"Logrotate-Befehl in dem von dir in Minuten festgelegten Intervall aus."
 
 #: src/views/site/components/SiteStatusSegmented.vue:138
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
@@ -2697,7 +2702,7 @@ msgstr "Gesamter Netzwerkempfang"
 msgid "Network Total Send"
 msgstr "Gesamter Netzwerkversand"
 
-#: src/views/install/Install.vue:131
+#: src/views/install/components/InstallView.vue:106
 #, fuzzy
 msgid "New Installation"
 msgstr "Installieren"
@@ -2717,6 +2722,7 @@ msgid "New version released"
 msgstr "Neue Version veröffentlicht"
 
 #: src/views/certificate/components/WildcardCertificate.vue:89
+#: src/views/install/components/InstallView.vue:93
 #: src/views/site/site_add/SiteAdd.vue:123
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:214
 msgid "Next"
@@ -2730,16 +2736,16 @@ msgstr ""
 msgid "Nginx Access Log Path"
 msgstr "Nginx Zugriffslog-Pfad"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:25
+#: src/components/SelfCheck/tasks/backend/index.ts:25
 #, fuzzy
 msgid "Nginx Conf Include Conf.d"
 msgstr "Beffehl zum Neustarten von Nginx"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:15
+#: src/components/SelfCheck/tasks/backend/index.ts:15
 msgid "Nginx Conf Include Sites Enabled"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:20
+#: src/components/SelfCheck/tasks/backend/index.ts:20
 msgid "Nginx Conf Include Streams Enabled"
 msgstr ""
 
@@ -2903,8 +2909,8 @@ msgstr "Name der Konfiguration"
 #: 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 "Name der Konfiguration"
 
 #: src/components/ChatGPT/ChatGPT.vue:374
@@ -2997,8 +3003,8 @@ msgid ""
 "certificates, please synchronize them to the remote nodes in advance."
 msgstr ""
 "Hinweis: Wenn die Konfigurationsdatei andere Konfigurationen oder "
-"Zertifikate enthält, synchronisiere sie bitte im Voraus mit den Remote-"
-"Knoten."
+"Zertifikate enthält, synchronisiere sie bitte im Voraus mit den "
+"Remote-Knoten."
 
 #: src/views/notification/Notification.vue:28
 #, fuzzy
@@ -3101,8 +3107,7 @@ msgstr ""
 
 #: src/views/certificate/DNSCredential.vue:59
 msgid "Once the verification is complete, the records will be removed."
-msgstr ""
-"Sobaöd die Überprüfung abgeschlossen ist, werden die Einträge entfernt."
+msgstr "Sobaöd die Überprüfung abgeschlossen ist, werden die Einträge entfernt."
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:103
@@ -3200,7 +3205,7 @@ msgstr ""
 msgid "Password"
 msgstr "Passwort"
 
-#: src/views/install/Install.vue:156
+#: src/views/install/components/InstallForm.vue:98
 msgid "Password (*)"
 msgstr "Passwort (*)"
 
@@ -3209,7 +3214,7 @@ msgstr "Passwort (*)"
 msgid "Password incorrect"
 msgstr "Benuztername oder Passwort ist falsch"
 
-#: src/views/install/Install.vue:72
+#: src/views/install/components/InstallForm.vue:42
 msgid "Password length cannot exceed 20 characters"
 msgstr "Passwort darf nicht länger als 20 Zeichen sein"
 
@@ -3291,8 +3296,8 @@ msgid ""
 "Please fill in the API authentication credentials provided by your DNS "
 "provider."
 msgstr ""
-"Bitte fülle die API-Authentifizierungsdaten aus, die dir von deinem DNS-"
-"Provider zur Verfügung gestellt wurden."
+"Bitte fülle die API-Authentifizierungsdaten aus, die dir von deinem "
+"DNS-Provider zur Verfügung gestellt wurden."
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:106
 msgid "Please fill in the required fields"
@@ -3303,15 +3308,15 @@ 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 ""
-"Bitte füge zuerst Anmeldeinformationen in Zertifikation > DNS-"
-"Anmeldeinformationen hinzu und wähle dann eine der unten aufgeführten "
+"Bitte füge zuerst Anmeldeinformationen in Zertifikation > "
+"DNS-Anmeldeinformationen hinzu und wähle dann eine der unten aufgeführten "
 "Anmeldeinformationen aus, um die API des DNS-Anbieters anzufordern."
 
 #: 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
@@ -3341,29 +3346,32 @@ msgstr ""
 "Bitte gib einen Namen ein, der als Dateiname der neuen Konfiguration "
 "verwendet wird."
 
-#: src/views/install/Install.vue:56
+#: src/views/install/components/InstallForm.vue:26
 msgid "Please input your E-mail!"
 msgstr "Bitte gib deine E-Mail-Adresse ein!"
 
-#: src/views/install/Install.vue:68 src/views/other/Login.vue:47
+#: src/views/install/components/InstallForm.vue:38 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgstr "Bitte gib dein Passwort ein!"
 
-#: src/views/install/Install.vue:62 src/views/other/Login.vue:41
+#: src/views/install/components/InstallForm.vue:32 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgstr "Bitte gib deinen Benutzernamen ein!"
 
-#: src/views/install/Install.vue:108
+#: src/views/install/components/InstallView.vue:47
 #: src/views/system/Backup/SystemRestore.vue: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."
+msgid "Please note that the unit of time configurations below are all in seconds."
+msgstr ""
+"Bitte beachte, dass die Zeiteinheiten der unten aufgeführten "
+"Konfigurationen alle in Sekunden angegeben sind."
+
+#: src/views/install/components/InstallView.vue:99
+msgid "Please resolve all issues before proceeding with installation"
 msgstr ""
-"Bitte beachte, dass die Zeiteinheiten der unten aufgeführten Konfigurationen "
-"alle in Sekunden angegeben sind."
 
 #: src/views/system/Backup/BackupCreator.vue:107
 msgid "Please save this security token, you will need it for restoration:"
@@ -3467,7 +3475,7 @@ msgstr "Aufrufe"
 msgid "Receive"
 msgstr "Empfangen"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:43
+#: src/components/SelfCheck/SelfCheck.vue:55
 msgid "Recheck"
 msgstr ""
 
@@ -3805,7 +3813,7 @@ msgstr "Starte neu"
 msgid "Restore completed successfully"
 msgstr "Erfolgreich deaktiviert"
 
-#: src/views/install/Install.vue:188
+#: src/views/install/components/InstallView.vue:109
 #, fuzzy
 msgid "Restore from Backup"
 msgstr "System"
@@ -3952,8 +3960,7 @@ msgstr "Speichern erfolgreich"
 
 #: 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 ""
-"Scanne den QR-Code mit deinem Handy, um das Konto zur App hinzuzufügen."
+msgstr "Scanne den QR-Code mit deinem Handy, um das Konto zur App hinzuzufügen."
 
 #: src/views/certificate/DNSChallenge.vue:90
 msgid "SDK"
@@ -3981,7 +3988,7 @@ msgstr ""
 msgid "Selector"
 msgstr "Auswähler"
 
-#: src/routes/modules/system.ts:19 src/views/system/SelfCheck/SelfCheck.vue:38
+#: src/components/SelfCheck/SelfCheck.vue:50 src/routes/modules/system.ts:19
 msgid "Self Check"
 msgstr ""
 
@@ -4047,14 +4054,18 @@ msgstr "Setze HTTP01-Challengeanbieter"
 
 #: 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:63
+msgid "Setup your Nginx UI"
 msgstr ""
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
@@ -4098,7 +4109,7 @@ msgstr "Liste der Seiten"
 msgid "Site not found"
 msgstr "File Not Found"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:5
+#: src/components/SelfCheck/tasks/backend/index.ts:5
 #, fuzzy
 msgid "Sites Directory"
 msgstr "Anweisung"
@@ -4224,7 +4235,7 @@ msgstr "Deaktiviert"
 msgid "Stream not found"
 msgstr "File Not Found"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:10
+#: src/components/SelfCheck/tasks/backend/index.ts:10
 #, fuzzy
 msgid "Streams Directory"
 msgstr "Anweisung"
@@ -4245,12 +4256,12 @@ msgstr ""
 msgid "Success"
 msgstr "Erfolg"
 
-#: src/views/system/SelfCheck/tasks/frontend/websocket.ts:6
+#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
 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
@@ -4351,6 +4362,11 @@ msgstr "System"
 msgid "System Backup"
 msgstr "System"
 
+#: src/views/install/components/InstallView.vue:58
+#, fuzzy
+msgid "System Check"
+msgstr "System"
+
 #: src/views/certificate/components/ACMEUserSelector.vue:88
 msgid "System Initial User"
 msgstr "System-Startbenutzer"
@@ -4360,7 +4376,7 @@ msgstr "System-Startbenutzer"
 msgid "System Restore"
 msgstr "System"
 
-#: src/views/install/Install.vue:104
+#: src/views/install/components/InstallView.vue:43
 #: src/views/system/Backup/SystemRestore.vue:6
 #, fuzzy
 msgid "System restored successfully."
@@ -4394,7 +4410,7 @@ msgstr ""
 "Das Zertifikat für die Domain wird alle Stunde überprüft und erneuert, wenn "
 "es seit der letzten Ausstellung vor mehr als 1 Monat ausgestellt wurde."
 
-#: src/views/install/Install.vue:78
+#: src/views/install/components/InstallForm.vue:48
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "Der Dateiname darf die folgenden Zeichen nicht enthalten: %{c}"
 
@@ -4417,7 +4433,8 @@ msgstr "Zertifikatsstatus"
 
 #: 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
@@ -4430,8 +4447,7 @@ msgstr ""
 "Doppelpunkte und Punkte enthalten."
 
 #: 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
@@ -4470,9 +4486,9 @@ msgid ""
 "version. To avoid potential errors, please upgrade the remote Nginx UI to "
 "match the local version."
 msgstr ""
-"Die Version vom entfernten Nginx-UI ist nicht mit der lokalen Nginx-UI-"
-"Version kompatibel. Um potenzielle Fehler zu vermeiden, aktualisiere bitte "
-"das entfernte Nginx-UI, um die lokale Version anzupassen."
+"Die Version vom entfernten Nginx-UI ist nicht mit der lokalen "
+"Nginx-UI-Version kompatibel. Um potenzielle Fehler zu vermeiden, "
+"aktualisiere bitte das entfernte Nginx-UI, um die lokale Version anzupassen."
 
 #: src/components/AutoCertForm/AutoCertForm.vue:43
 #, fuzzy
@@ -4480,8 +4496,8 @@ msgid ""
 "The server_name in the current configuration must be the domain name you "
 "need to get the certificate, supportmultiple domains."
 msgstr ""
-"Beachten: Der server_name in der aktuellen Konfiguration muss der Domainname "
-"sein, für den das Zertifikat benötigt wird."
+"Beachten: Der server_name in der aktuellen Konfiguration muss der "
+"Domainname sein, für den das Zertifikat benötigt wird."
 
 #: src/views/preference/tabs/CertSettings.vue:22
 #: src/views/preference/tabs/HTTPSettings.vue:14
@@ -4540,10 +4556,8 @@ msgid "This field should not be empty"
 msgstr "Dieses Feld darf nicht leer sein"
 
 #: src/constants/form_errors.ts:6
-msgid ""
-"This field should only contain letters, unicode characters, numbers, and -_."
-msgstr ""
-"Dieses Feld sollte nur Buchstaben, Unicode-Zeichen, Zahlen und -_ enthalten."
+msgid "This field should only contain letters, unicode characters, numbers, and -_."
+msgstr "Dieses Feld sollte nur Buchstaben, Unicode-Zeichen, Zahlen und -_ enthalten."
 
 #: src/views/dashboard/NginxDashBoard.vue:153
 msgid ""
@@ -4582,8 +4596,7 @@ 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 ""
 "Dies wird das Nginx UI auf %{nodeNames} auf %{version} aktualisieren oder "
 "neu installieren."
@@ -4635,8 +4648,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 ""
 "Um sicherzustellen, dass die automatische Zertifikatserneuerung normal "
@@ -4648,9 +4661,9 @@ msgid ""
 "provide an OpenAI-compatible API endpoint, so just set the baseUrl to your "
 "local API."
 msgstr ""
-"Um ein lokales großes Modell zu verwenden, implementiere es mit ollama, vllm "
-"oder lmdeploy. Sie bieten einen OpenAI-kompatiblen API-Endpunkt, also setze "
-"die baseUrl auf deine lokale API."
+"Um ein lokales großes Modell zu verwenden, implementiere es mit ollama, "
+"vllm oder lmdeploy. Sie bieten einen OpenAI-kompatiblen API-Endpunkt, also "
+"setze die baseUrl auf deine lokale API."
 
 #: src/views/dashboard/NginxDashBoard.vue:57
 #, fuzzy
@@ -4703,8 +4716,8 @@ msgid ""
 "TOTP is a two-factor authentication method that uses a time-based one-time "
 "password algorithm."
 msgstr ""
-"TOTP ist eine Zwei-Faktor-Authentifizierungsmethode, die einen zeitbasierten "
-"Einmalpasswortalgorithmus verwendet."
+"TOTP ist eine Zwei-Faktor-Authentifizierungsmethode, die einen "
+"zeitbasierten Einmalpasswortalgorithmus verwendet."
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:197
 msgid "Trash"
@@ -4725,7 +4738,7 @@ msgstr "Typ"
 msgid "Unknown"
 msgstr ""
 
-#: src/views/system/SelfCheck/SelfCheck.vue:63
+#: src/components/SelfCheck/SelfCheck.vue:75
 msgid "Unknown issue"
 msgstr ""
 
@@ -4815,7 +4828,7 @@ msgstr ""
 msgid "Username"
 msgstr "Benutzername"
 
-#: src/views/install/Install.vue:146
+#: src/views/install/components/InstallForm.vue:88
 msgid "Username (*)"
 msgstr "Benutzername (*)"
 
@@ -4834,9 +4847,13 @@ msgstr ""
 msgid "Verify Backup File Integrity"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:59
+msgid "Verify system requirements"
+msgstr "Überprüfen Sie die Systemanforderungen"
+
 #: src/views/environments/list/envColumns.tsx:31
 msgid "Version"
-msgstr ""
+msgstr "Version"
 
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:488
 #: src/views/nginx_log/NginxLogList.vue:97
@@ -4871,7 +4888,7 @@ msgstr "Anzeigen"
 #: src/composables/usePerformanceMetrics.ts:114
 #: src/views/dashboard/components/PerformanceTablesCard.vue:73
 msgid "Waiting processes"
-msgstr ""
+msgstr "Warteverfahren"
 
 #: src/constants/index.ts:23 src/views/config/InspectConfig.vue:33
 #: src/views/notification/notificationColumns.tsx:22
@@ -4898,8 +4915,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 ""
 "Wir werden die HTTPChallenge-Konfiguration aus dieser Datei entfernen und "
 "das Nginx neu laden. Möchtest du fortfahren?"
@@ -4934,8 +4951,9 @@ msgid ""
 "When you enable/disable, delete, or save this site, the nodes set in the "
 "Node Group and the nodes selected below will be synchronized."
 msgstr ""
-"Wenn du diese Seite aktivierst/deaktivierst, löschst oder speicherst, werden "
-"die Knoten, die in der Seitenkategorie festgelegt sind, und die unten "
+"Wenn du diese Seite aktivierst/deaktivierst, löschst oder speicherst, "
+"werden die Knoten, die in der Seitenkategorie festgelegt sind, und die "
+"unten "
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140
 msgid ""
@@ -4992,8 +5010,8 @@ msgstr "Ja"
 
 #: 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
@@ -5021,8 +5039,7 @@ msgstr ""
 "keinen Passkey hinzufügen."
 
 #: 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
@@ -5049,13 +5066,12 @@ msgstr "Deine Passkeys"
 #~ msgstr "Fehler beim Speichern %{msg}"
 
 #~ msgid "Failed to save, syntax error(s) was detected in the configuration."
-#~ msgstr ""
-#~ "Fehler beim Speichern, Syntaxfehler wurden in der Konfiguration erkannt."
+#~ msgstr "Fehler beim Speichern, Syntaxfehler wurden in der Konfiguration erkannt."
 
 #, 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 ""
 #~ "Wenn du diese Seite aktivierst/deaktivierst, löschst oder speicherst, "
 #~ "werden die Knoten, die in der Seitenkategorie festgelegt sind, und die "
@@ -5128,14 +5144,11 @@ msgstr "Deine Passkeys"
 #~ msgstr "Speichern erfolgreich"
 
 #, 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 "Speichern erfolgreich"
 
 #, 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 "Speichern erfolgreich"
 
 #, fuzzy
@@ -5149,8 +5162,7 @@ msgstr "Deine Passkeys"
 #~ msgstr "Speichern erfolgreich"
 
 #, fuzzy
-#~ msgid ""
-#~ "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
+#~ msgid "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
 #~ msgstr "Speichern erfolgreich"
 
 #, fuzzy
@@ -5170,8 +5182,8 @@ msgstr "Deine Passkeys"
 #~ msgstr "Datei"
 
 #~ 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 ""
 #~ "Wenn du dein Handy verlierst, kannst du den Wiederherstellungscode "
 #~ "verwenden, um dein 2FA zurückzusetzen."
@@ -5185,15 +5197,13 @@ msgstr "Deine Passkeys"
 #~ msgid "Server error"
 #~ msgstr "Serverfehler"
 
-#~ 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 ""
 #~ "Der Wiederherstellungscode wird nur einmal angezeigt, bitte speichere ihn "
 #~ "an einem sicheren Ort."
 
 #~ msgid "Too many login failed attempts, please try again later"
-#~ msgstr ""
-#~ "Zu viele fehlgeschlagene Anmeldeversuche, bitte versuche es später erneut"
+#~ msgstr "Zu viele fehlgeschlagene Anmeldeversuche, bitte versuche es später erneut"
 
 #, fuzzy
 #~ msgid ""

+ 59 - 35
app/src/language/en/app.po

@@ -257,7 +257,7 @@ msgstr ""
 msgid "Assistant"
 msgstr ""
 
-#: src/views/system/SelfCheck/SelfCheck.vue:50
+#: src/components/SelfCheck/SelfCheck.vue:62
 msgid "Attempt to fix"
 msgstr ""
 
@@ -622,38 +622,38 @@ msgstr ""
 msgid "Check again"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:31
+#: 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 ""
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:11
+#: 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."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:26
+#: src/components/SelfCheck/tasks/backend/index.ts:26
 msgid "Check if the nginx.conf includes the conf.d directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:16
+#: src/components/SelfCheck/tasks/backend/index.ts:16
 msgid "Check if the nginx.conf includes the sites-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:21
+#: src/components/SelfCheck/tasks/backend/index.ts:21
 msgid "Check if the nginx.conf includes the streams-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:6
+#: src/components/SelfCheck/tasks/backend/index.ts:6
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
 "nginx configuration directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:11
+#: src/components/SelfCheck/tasks/backend/index.ts:11
 msgid ""
 "Check if the streams-available and streams-enabled directories are under the "
 "nginx configuration directory."
@@ -955,7 +955,7 @@ msgstr ""
 msgid "Dashboard"
 msgstr "Dashboard"
 
-#: src/views/install/Install.vue:167
+#: src/views/install/components/InstallForm.vue:109
 msgid "Database (Optional, default: database)"
 msgstr "Database (Optional, default: database)"
 
@@ -1262,7 +1262,7 @@ msgstr "Are you sure you want to remove this directive?"
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:30
+#: src/components/SelfCheck/tasks/backend/index.ts:30
 msgid "Docker Socket"
 msgstr ""
 
@@ -1344,7 +1344,7 @@ msgstr "Edit Site"
 msgid "Email"
 msgstr "Email (*)"
 
-#: src/views/install/Install.vue:136
+#: src/views/install/components/InstallForm.vue:78
 msgid "Email (*)"
 msgstr "Email (*)"
 
@@ -2048,7 +2048,7 @@ msgstr ""
 msgid "HTTP01"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2147,20 +2147,27 @@ msgstr ""
 msgid "Insecure Skip Verify"
 msgstr ""
 
-#: src/routes/modules/auth.ts:8 src/views/install/Install.vue:183
+#: src/routes/modules/auth.ts:8
+#: src/views/install/components/InstallForm.vue:124
+#: src/views/install/components/InstallHeader.vue:9
 msgid "Install"
 msgstr "Install"
 
-#: src/views/install/Install.vue:91
+#: src/views/install/components/InstallForm.vue:60
 #, fuzzy
 msgid "Install successfully"
 msgstr "Enabled successfully"
 
+#: src/views/install/components/InstallView.vue:62
+#, fuzzy
+msgid "Installation"
+msgstr "Install"
+
 #: src/constants/errors/system.ts:3
 msgid "Installation is not allowed after 10 minutes of system startup"
 msgstr ""
 
-#: src/views/install/Install.vue:125
+#: src/views/install/components/TimeoutAlert.vue:11
 msgid ""
 "Installation is not allowed after 10 minutes of system startup, please "
 "restart the Nginx UI."
@@ -2669,7 +2676,7 @@ msgstr "Network Total Receive"
 msgid "Network Total Send"
 msgstr "Network Total Send"
 
-#: src/views/install/Install.vue:131
+#: src/views/install/components/InstallView.vue:106
 #, fuzzy
 msgid "New Installation"
 msgstr "Install"
@@ -2689,6 +2696,7 @@ msgid "New version released"
 msgstr ""
 
 #: src/views/certificate/components/WildcardCertificate.vue:89
+#: src/views/install/components/InstallView.vue:93
 #: src/views/site/site_add/SiteAdd.vue:123
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:214
 msgid "Next"
@@ -2702,15 +2710,15 @@ msgstr ""
 msgid "Nginx Access Log Path"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:25
+#: src/components/SelfCheck/tasks/backend/index.ts:25
 msgid "Nginx Conf Include Conf.d"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:15
+#: src/components/SelfCheck/tasks/backend/index.ts:15
 msgid "Nginx Conf Include Sites Enabled"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:20
+#: src/components/SelfCheck/tasks/backend/index.ts:20
 msgid "Nginx Conf Include Streams Enabled"
 msgstr ""
 
@@ -3158,7 +3166,7 @@ msgstr ""
 msgid "Password"
 msgstr "Password"
 
-#: src/views/install/Install.vue:156
+#: src/views/install/components/InstallForm.vue:98
 msgid "Password (*)"
 msgstr "Password (*)"
 
@@ -3167,7 +3175,7 @@ msgstr "Password (*)"
 msgid "Password incorrect"
 msgstr "Password"
 
-#: src/views/install/Install.vue:72
+#: src/views/install/components/InstallForm.vue:42
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 
@@ -3287,19 +3295,19 @@ msgid ""
 "configuration."
 msgstr ""
 
-#: src/views/install/Install.vue:56
+#: src/views/install/components/InstallForm.vue:26
 msgid "Please input your E-mail!"
 msgstr "Please input your E-mail!"
 
-#: src/views/install/Install.vue:68 src/views/other/Login.vue:47
+#: src/views/install/components/InstallForm.vue:38 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgstr "Please input your password!"
 
-#: src/views/install/Install.vue:62 src/views/other/Login.vue:41
+#: src/views/install/components/InstallForm.vue:32 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgstr "Please input your username!"
 
-#: src/views/install/Install.vue:108
+#: src/views/install/components/InstallView.vue:47
 #: src/views/system/Backup/SystemRestore.vue:10
 msgid "Please log in."
 msgstr ""
@@ -3309,6 +3317,10 @@ msgid ""
 "Please note that the unit of time configurations below are all in seconds."
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:99
+msgid "Please resolve all issues before proceeding with installation"
+msgstr ""
+
 #: src/views/system/Backup/BackupCreator.vue:107
 msgid "Please save this security token, you will need it for restoration:"
 msgstr ""
@@ -3409,7 +3421,7 @@ msgstr "Reads"
 msgid "Receive"
 msgstr "Receive"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:43
+#: src/components/SelfCheck/SelfCheck.vue:55
 msgid "Recheck"
 msgstr ""
 
@@ -3745,7 +3757,7 @@ msgstr ""
 msgid "Restore completed successfully"
 msgstr "Disabled successfully"
 
-#: src/views/install/Install.vue:188
+#: src/views/install/components/InstallView.vue:109
 #, fuzzy
 msgid "Restore from Backup"
 msgstr "Created at"
@@ -3921,7 +3933,7 @@ msgstr ""
 msgid "Selector"
 msgstr "Directive"
 
-#: src/routes/modules/system.ts:19 src/views/system/SelfCheck/SelfCheck.vue:38
+#: src/components/SelfCheck/SelfCheck.vue:50 src/routes/modules/system.ts:19
 msgid "Self Check"
 msgstr ""
 
@@ -3995,6 +4007,10 @@ msgid ""
 "com/guide/config-nginx.html for more information"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:63
+msgid "Setup your Nginx UI"
+msgstr ""
+
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
 msgid "Shared Memory Zone"
 msgstr ""
@@ -4036,7 +4052,7 @@ msgstr "Sites List"
 msgid "Site not found"
 msgstr "File Not Found"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:5
+#: src/components/SelfCheck/tasks/backend/index.ts:5
 #, fuzzy
 msgid "Sites Directory"
 msgstr "Directive"
@@ -4164,7 +4180,7 @@ msgstr "Disabled"
 msgid "Stream not found"
 msgstr "File Not Found"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:10
+#: src/components/SelfCheck/tasks/backend/index.ts:10
 #, fuzzy
 msgid "Streams Directory"
 msgstr "Directive"
@@ -4187,7 +4203,7 @@ msgstr ""
 msgid "Success"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/websocket.ts:6
+#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
 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 "
@@ -4293,6 +4309,10 @@ msgstr ""
 msgid "System Backup"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:58
+msgid "System Check"
+msgstr ""
+
 #: src/views/certificate/components/ACMEUserSelector.vue:88
 msgid "System Initial User"
 msgstr ""
@@ -4301,7 +4321,7 @@ msgstr ""
 msgid "System Restore"
 msgstr ""
 
-#: src/views/install/Install.vue:104
+#: src/views/install/components/InstallView.vue:43
 #: src/views/system/Backup/SystemRestore.vue:6
 #, fuzzy
 msgid "System restored successfully."
@@ -4335,7 +4355,7 @@ msgstr ""
 "The certificate for the domain will be checked every hour, and will be "
 "renewed if it has been more than 1 month since it was last issued."
 
-#: src/views/install/Install.vue:78
+#: src/views/install/components/InstallForm.vue:48
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "The filename cannot contain the following characters: %{c}"
 
@@ -4643,7 +4663,7 @@ msgstr ""
 msgid "Unknown"
 msgstr ""
 
-#: src/views/system/SelfCheck/SelfCheck.vue:63
+#: src/components/SelfCheck/SelfCheck.vue:75
 msgid "Unknown issue"
 msgstr ""
 
@@ -4733,7 +4753,7 @@ msgstr ""
 msgid "Username"
 msgstr "Username"
 
-#: src/views/install/Install.vue:146
+#: src/views/install/components/InstallForm.vue:88
 msgid "Username (*)"
 msgstr "Username (*)"
 
@@ -4753,6 +4773,10 @@ msgstr ""
 msgid "Verify Backup File Integrity"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:59
+msgid "Verify system requirements"
+msgstr ""
+
 #: src/views/environments/list/envColumns.tsx:31
 msgid "Version"
 msgstr ""

+ 150 - 139
app/src/language/es/app.po

@@ -7,11 +7,11 @@ msgstr ""
 "POT-Creation-Date: \n"
 "PO-Revision-Date: 2024-11-06 18:26+0000\n"
 "Last-Translator: Kcho <kcholoren@gmail.com>\n"
-"Language-Team: Spanish <https://weblate.nginxui.com/projects/nginx-ui/"
-"frontend/es/>\n"
+"Language-Team: Spanish "
+"<https://weblate.nginxui.com/projects/nginx-ui/frontend/es/>\n"
 "Language: es\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.6.2\n"
@@ -250,7 +250,7 @@ msgstr "Preguntar por ayuda a ChatGPT"
 msgid "Assistant"
 msgstr "Asistente"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:50
+#: src/components/SelfCheck/SelfCheck.vue:62
 #, fuzzy
 msgid "Attempt to fix"
 msgstr "Intentos"
@@ -611,41 +611,41 @@ msgstr ""
 msgid "Check again"
 msgstr "Intentar nuevamente"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:31
+#: 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`."
+"Docker Image, please make sure the docker socket is mounted like this: `-v "
+"/var/run/docker.sock:/var/run/docker.sock`."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:11
+#: 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."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:26
+#: src/components/SelfCheck/tasks/backend/index.ts:26
 msgid "Check if the nginx.conf includes the conf.d directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:16
+#: src/components/SelfCheck/tasks/backend/index.ts:16
 msgid "Check if the nginx.conf includes the sites-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:21
+#: src/components/SelfCheck/tasks/backend/index.ts:21
 msgid "Check if the nginx.conf includes the streams-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:6
+#: src/components/SelfCheck/tasks/backend/index.ts:6
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
 "nginx configuration directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:11
+#: src/components/SelfCheck/tasks/backend/index.ts:11
 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 ""
 
 #: src/constants/errors/crypto.ts:3
@@ -943,7 +943,7 @@ msgstr ""
 msgid "Dashboard"
 msgstr "Panel"
 
-#: src/views/install/Install.vue:167
+#: src/views/install/components/InstallForm.vue:109
 msgid "Database (Optional, default: database)"
 msgstr "Base de datos (Opcional, default: database)"
 
@@ -1238,7 +1238,7 @@ msgstr "¿Quieres eliminar esta transmisión?"
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:30
+#: src/components/SelfCheck/tasks/backend/index.ts:30
 msgid "Docker Socket"
 msgstr ""
 
@@ -1257,8 +1257,8 @@ msgstr "Dominio"
 #: src/views/certificate/components/CertificateEditor.vue:112
 msgid "Domains list is empty, try to reopen Auto Cert for %{config}"
 msgstr ""
-"La lista de dominios está vacía, intente reabrir la certificación automática "
-"para %{config}"
+"La lista de dominios está vacía, intente reabrir la certificación "
+"automática para %{config}"
 
 #: src/language/constants.ts:27
 msgid "Download latest release error"
@@ -1279,8 +1279,8 @@ msgid ""
 "non-HTTPS websites, except when running on localhost."
 msgstr ""
 "Debido a las políticas de seguridad de algunos navegadores, no es posible "
-"utilizar claves de acceso en sitios web que no sean HTTPS, excepto cuando se "
-"ejecutan en el host local."
+"utilizar claves de acceso en sitios web que no sean HTTPS, excepto cuando "
+"se ejecutan en el host local."
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteList.vue:117
@@ -1321,7 +1321,7 @@ msgstr "Editar Transmisión"
 msgid "Email"
 msgstr "Correo"
 
-#: src/views/install/Install.vue:136
+#: src/views/install/components/InstallForm.vue:78
 msgid "Email (*)"
 msgstr "Correo (*)"
 
@@ -2017,7 +2017,7 @@ msgstr "Puerto de desafío HTTP"
 msgid "HTTP01"
 msgstr "HTTP01"
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2031,8 +2031,8 @@ msgstr "Si se deja en blanco, se utilizará el directorio CA predeterminado."
 
 #: 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
@@ -2055,8 +2055,7 @@ msgstr ""
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:70
 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear."
-msgstr ""
-"Si su navegador admite WebAuthn Passkey, aparecerá un cuadro de diálogo."
+msgstr "Si su navegador admite WebAuthn Passkey, aparecerá un cuadro de diálogo."
 
 #: src/components/AutoCertForm/AutoCertForm.vue:107
 msgid ""
@@ -2124,19 +2123,26 @@ msgstr "Ingrese el código de recuperación:"
 msgid "Insecure Skip Verify"
 msgstr ""
 
-#: src/routes/modules/auth.ts:8 src/views/install/Install.vue:183
+#: src/routes/modules/auth.ts:8
+#: src/views/install/components/InstallForm.vue:124
+#: src/views/install/components/InstallHeader.vue:9
 msgid "Install"
 msgstr "Instalar"
 
-#: src/views/install/Install.vue:91
+#: src/views/install/components/InstallForm.vue:60
 msgid "Install successfully"
 msgstr "Instalación exitosa"
 
+#: src/views/install/components/InstallView.vue:62
+#, fuzzy
+msgid "Installation"
+msgstr "Instalar"
+
 #: src/constants/errors/system.ts:3
 msgid "Installation is not allowed after 10 minutes of system startup"
 msgstr ""
 
-#: src/views/install/Install.vue:125
+#: src/views/install/components/TimeoutAlert.vue:11
 msgid ""
 "Installation is not allowed after 10 minutes of system startup, please "
 "restart the Nginx UI."
@@ -2393,20 +2399,20 @@ msgstr "Rotación de logs"
 
 #: 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, de forma predeterminada, está habilitado en la mayoría de las "
 "distribuciones de Linux para los usuarios que instalan Nginx UI en la "
 "máquina host, por lo que no es necesario modificar los parámetros en esta "
 "página. Para los usuarios que instalan Nginx UI usando contenedores Docker, "
 "pueden habilitar esta opción manualmente. El programador de tareas crontab "
-"de Nginx UI ejecutará el comando logrotate en el intervalo que establezca en "
-"minutos."
+"de Nginx UI ejecutará el comando logrotate en el intervalo que establezca "
+"en minutos."
 
 #: src/views/site/components/SiteStatusSegmented.vue:138
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
@@ -2429,8 +2435,8 @@ msgid ""
 "Make sure you have configured a reverse proxy for .well-known directory to "
 "HTTPChallengePort before obtaining the certificate."
 msgstr ""
-"Asegúrese de haber configurado un proxy reverso para el directorio .well-"
-"known en HTTPChallengePort antes de obtener el certificado."
+"Asegúrese de haber configurado un proxy reverso para el directorio "
+".well-known en HTTPChallengePort antes de obtener el certificado."
 
 #: src/routes/modules/config.ts:10 src/views/config/ConfigEditor.vue:115
 #: src/views/config/ConfigEditor.vue:166 src/views/config/ConfigList.vue:72
@@ -2630,7 +2636,7 @@ msgstr "Total recibido por la red"
 msgid "Network Total Send"
 msgstr "Total enviado por la red"
 
-#: src/views/install/Install.vue:131
+#: src/views/install/components/InstallView.vue:106
 #, fuzzy
 msgid "New Installation"
 msgstr "Instalar"
@@ -2648,6 +2654,7 @@ msgid "New version released"
 msgstr "Se liberó una nueva versión"
 
 #: src/views/certificate/components/WildcardCertificate.vue:89
+#: src/views/install/components/InstallView.vue:93
 #: src/views/site/site_add/SiteAdd.vue:123
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:214
 msgid "Next"
@@ -2661,16 +2668,16 @@ msgstr "Nginx"
 msgid "Nginx Access Log Path"
 msgstr "Ruta de registro de acceso de Nginx"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:25
+#: src/components/SelfCheck/tasks/backend/index.ts:25
 #, fuzzy
 msgid "Nginx Conf Include Conf.d"
 msgstr "Comando de inicio de terminal"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:15
+#: src/components/SelfCheck/tasks/backend/index.ts:15
 msgid "Nginx Conf Include Sites Enabled"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:20
+#: src/components/SelfCheck/tasks/backend/index.ts:20
 msgid "Nginx Conf Include Streams Enabled"
 msgstr ""
 
@@ -2833,8 +2840,8 @@ msgstr "Error de análisis de configuración de 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 "Error de análisis de configuración de Nginx"
 
 #: src/components/ChatGPT/ChatGPT.vue:374
@@ -3119,14 +3126,14 @@ msgid ""
 msgstr ""
 "Las llaves de acceso son credenciales de autenticación web que validan su "
 "identidad mediante el tacto, el reconocimiento facial, una contraseña de "
-"dispositivo o un PIN. Se pueden utilizar como reemplazo de contraseña o como "
-"método de autenticación de dos factores."
+"dispositivo o un PIN. Se pueden utilizar como reemplazo de contraseña o "
+"como método de autenticación de dos factores."
 
 #: src/views/other/Login.vue:183 src/views/user/userColumns.tsx:18
 msgid "Password"
 msgstr "Contraseña"
 
-#: src/views/install/Install.vue:156
+#: src/views/install/components/InstallForm.vue:98
 msgid "Password (*)"
 msgstr "Contraseña (*)"
 
@@ -3135,7 +3142,7 @@ msgstr "Contraseña (*)"
 msgid "Password incorrect"
 msgstr "El nombre de usuario o contraseña son incorrectos"
 
-#: src/views/install/Install.vue:72
+#: src/views/install/components/InstallForm.vue:42
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 
@@ -3218,8 +3225,8 @@ msgid ""
 "Please fill in the API authentication credentials provided by your DNS "
 "provider."
 msgstr ""
-"Por favor, complete las credenciales de autenticación API proporcionadas por "
-"su proveedor de DNS."
+"Por favor, complete las credenciales de autenticación API proporcionadas "
+"por su proveedor de DNS."
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:106
 msgid "Please fill in the required fields"
@@ -3231,14 +3238,14 @@ msgid ""
 "select one of the credentialsbelow to request the API of the DNS provider."
 msgstr ""
 "Primero agregue las credenciales en Certificación > Credenciales de DNS y "
-"luego seleccione una de las credenciales de aquí debajo para llamar a la API "
-"del proveedor de DNS."
+"luego seleccione una de las credenciales de aquí debajo para llamar a la "
+"API del proveedor de 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
@@ -3266,30 +3273,33 @@ msgstr ""
 "Ingrese el nombre por favor, este se usará como el nombre de archivo de la "
 "nueva configuración."
 
-#: src/views/install/Install.vue:56
+#: src/views/install/components/InstallForm.vue:26
 msgid "Please input your E-mail!"
 msgstr "¡Por favor ingrese su correo electrónico!"
 
-#: src/views/install/Install.vue:68 src/views/other/Login.vue:47
+#: src/views/install/components/InstallForm.vue:38 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgstr "¡Por favor ingrese su contraseña!"
 
-#: src/views/install/Install.vue:62 src/views/other/Login.vue:41
+#: src/views/install/components/InstallForm.vue:32 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgstr "¡Por favor ingrese su nombre de usuario!"
 
-#: src/views/install/Install.vue:108
+#: src/views/install/components/InstallView.vue:47
 #: src/views/system/Backup/SystemRestore.vue: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."
+msgid "Please note that the unit of time configurations below are all in seconds."
 msgstr ""
 "Tenga en cuenta que las siguientes configuraciones de unidades de tiempo "
 "están todas en segundos."
 
+#: src/views/install/components/InstallView.vue:99
+msgid "Please resolve all issues before proceeding with installation"
+msgstr ""
+
 #: src/views/system/Backup/BackupCreator.vue:107
 msgid "Please save this security token, you will need it for restoration:"
 msgstr ""
@@ -3393,7 +3403,7 @@ msgstr "Lecturas"
 msgid "Receive"
 msgstr "Recibido"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:43
+#: src/components/SelfCheck/SelfCheck.vue:55
 msgid "Recheck"
 msgstr ""
 
@@ -3717,7 +3727,7 @@ msgstr "Reiniciando"
 msgid "Restore completed successfully"
 msgstr "Borrado exitoso"
 
-#: src/views/install/Install.vue:188
+#: src/views/install/components/InstallView.vue:109
 #, fuzzy
 msgid "Restore from Backup"
 msgstr "Sistema"
@@ -3892,7 +3902,7 @@ msgstr ""
 msgid "Selector"
 msgstr "Seleccionador"
 
-#: src/routes/modules/system.ts:19 src/views/system/SelfCheck/SelfCheck.vue:38
+#: src/components/SelfCheck/SelfCheck.vue:50 src/routes/modules/system.ts:19
 msgid "Self Check"
 msgstr ""
 
@@ -3958,14 +3968,18 @@ msgstr "Usando el proveedor de desafíos 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:63
+msgid "Setup your Nginx UI"
 msgstr ""
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
@@ -4008,7 +4022,7 @@ msgstr "Registros del sitio"
 msgid "Site not found"
 msgstr "Archivo no Encontrado"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:5
+#: src/components/SelfCheck/tasks/backend/index.ts:5
 #, fuzzy
 msgid "Sites Directory"
 msgstr "Directorio"
@@ -4128,7 +4142,7 @@ msgstr "Certificado automático"
 msgid "Stream not found"
 msgstr "Archivo no Encontrado"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:10
+#: src/components/SelfCheck/tasks/backend/index.ts:10
 #, fuzzy
 msgid "Streams Directory"
 msgstr "Directorio"
@@ -4150,12 +4164,12 @@ msgstr ""
 msgid "Success"
 msgstr "Éxito"
 
-#: src/views/system/SelfCheck/tasks/frontend/websocket.ts:6
+#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
 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
@@ -4251,6 +4265,11 @@ msgstr "Sistema"
 msgid "System Backup"
 msgstr "Sistema"
 
+#: src/views/install/components/InstallView.vue:58
+#, fuzzy
+msgid "System Check"
+msgstr "Sistema"
+
 #: src/views/certificate/components/ACMEUserSelector.vue:88
 msgid "System Initial User"
 msgstr "Usuario inicial del sistema"
@@ -4260,7 +4279,7 @@ msgstr "Usuario inicial del sistema"
 msgid "System Restore"
 msgstr "Sistema"
 
-#: src/views/install/Install.vue:104
+#: src/views/install/components/InstallView.vue:43
 #: src/views/system/Backup/SystemRestore.vue:6
 #, fuzzy
 msgid "System restored successfully."
@@ -4294,10 +4313,9 @@ msgstr ""
 "renovado si ha pasado más de 1 semana o el período que configuró en ajustes "
 "desde que fue emitido por última vez."
 
-#: src/views/install/Install.vue:78
+#: src/views/install/components/InstallForm.vue:48
 msgid "The filename cannot contain the following characters: %{c}"
-msgstr ""
-"El nombre del archivo no puede contener los siguientes caracteres: %{c}"
+msgstr "El nombre del archivo no puede contener los siguientes caracteres: %{c}"
 
 #: src/views/preference/tabs/NodeSettings.vue:37
 #, fuzzy
@@ -4318,7 +4336,8 @@ msgstr "La entrada no es una clave 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
@@ -4332,8 +4351,7 @@ msgstr ""
 "rayas y puntos."
 
 #: 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
@@ -4364,8 +4382,8 @@ msgid ""
 "The Public Security Number should only contain letters, unicode, numbers, "
 "hyphens, dashes, colons, and dots."
 msgstr ""
-"El nombre del servidor solo debe contener letras, Unicode, números, guiones, "
-"rayas y puntos."
+"El nombre del servidor solo debe contener letras, Unicode, números, "
+"guiones, rayas y puntos."
 
 #: src/views/dashboard/Environments.vue:148
 msgid ""
@@ -4445,8 +4463,7 @@ msgstr "Este campo no debe estar vacío"
 
 #: 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 ""
 "El nombre del modelo solo debe contener letras, unicode, números, guiones, "
 "rayas y puntos."
@@ -4488,8 +4505,7 @@ 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 ""
 "Esto actualizará o reinstalará la interfaz de usuario de Nginx en "
 "%{nodeNames} a %{version}."
@@ -4533,21 +4549,21 @@ msgid ""
 "and restart Nginx UI."
 msgstr ""
 "Para garantizar la seguridad, no se puede agregar la configuración de "
-"Webauthn a través de la UI. Configure manualmente lo siguiente en el archivo "
-"de configuración app.ini y reinicie Nginx UI."
+"Webauthn a través de la UI. Configure manualmente lo siguiente en el "
+"archivo de configuración app.ini y reinicie Nginx UI."
 
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:33
 #: 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 garantizar que la renovación automática del certificado pueda funcionar "
-"con normalidad, debemos agregar una ubicación para transmitir la solicitud "
-"de la autoridad al backend, y debemos guardar este archivo y volver a cargar "
-"Nginx. ¿Estás seguro de que quieres continuar?"
+"Para garantizar que la renovación automática del certificado pueda "
+"funcionar con normalidad, debemos agregar una ubicación para transmitir la "
+"solicitud de la autoridad al backend, y debemos guardar este archivo y "
+"volver a cargar Nginx. ¿Estás seguro de que quieres continuar?"
 
 #: src/views/preference/tabs/OpenAISettings.vue:36
 #, fuzzy
@@ -4633,7 +4649,7 @@ msgstr "Tipo"
 msgid "Unknown"
 msgstr ""
 
-#: src/views/system/SelfCheck/SelfCheck.vue:63
+#: src/components/SelfCheck/SelfCheck.vue:75
 msgid "Unknown issue"
 msgstr ""
 
@@ -4719,7 +4735,7 @@ msgstr ""
 msgid "Username"
 msgstr "Nombre de usuario"
 
-#: src/views/install/Install.vue:146
+#: src/views/install/components/InstallForm.vue:88
 msgid "Username (*)"
 msgstr "Nombre de usuario (*)"
 
@@ -4738,6 +4754,10 @@ msgstr ""
 msgid "Verify Backup File Integrity"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:59
+msgid "Verify system requirements"
+msgstr "Verificar los requisitos del sistema"
+
 #: src/views/environments/list/envColumns.tsx:31
 msgid "Version"
 msgstr "Versión"
@@ -4773,7 +4793,7 @@ msgstr "Ver"
 #: src/composables/usePerformanceMetrics.ts:114
 #: src/views/dashboard/components/PerformanceTablesCard.vue:73
 msgid "Waiting processes"
-msgstr ""
+msgstr "Procesos de espera"
 
 #: src/constants/index.ts:23 src/views/config/InspectConfig.vue:33
 #: src/views/notification/notificationColumns.tsx:22
@@ -4800,8 +4820,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 ""
 "Eliminaremos la configuración de HTTPChallenge de este archivo y "
 "recargaremos Nginx. ¿Estás seguro de que quieres continuar?"
@@ -4894,8 +4914,8 @@ msgstr "Si"
 
 #: 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
@@ -4923,8 +4943,7 @@ msgstr ""
 "llave de acceso."
 
 #: 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
@@ -4950,14 +4969,12 @@ msgstr "Sus llaves de acceso"
 #~ msgstr "Error de formato %{msg}"
 
 #~ msgid "Failed to save, syntax error(s) was detected in the configuration."
-#~ msgstr ""
-#~ "No se pudo guardar, se detectó un error(es) de sintaxis en la "
-#~ "configuración."
+#~ msgstr "No se pudo guardar, se detectó un error(es) de sintaxis en la configuración."
 
 #, 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 ""
 #~ "Cuando habilite/deshabilite, elimine o guarde este sitio, los nodos "
 #~ "configurados en la categoría del sitio y los nodos seleccionados a "
@@ -4999,8 +5016,7 @@ msgstr "Sus llaves de acceso"
 #~ msgstr "Desplegado con éxito"
 
 #~ msgid "Disable site %{site} on %{node} error, response: %{resp}"
-#~ msgstr ""
-#~ "Error al deshabilitar el sitio %{site} en %{node}, respuesta: %{resp}"
+#~ msgstr "Error al deshabilitar el sitio %{site} en %{node}, respuesta: %{resp}"
 
 #~ msgid "Do you want to deploy this file to remote server?"
 #~ msgid_plural "Do you want to deploy this file to remote servers?"
@@ -5023,26 +5039,23 @@ msgstr "Sus llaves de acceso"
 #~ msgid "Please upgrade the remote Nginx UI to the latest version"
 #~ msgstr ""
 #~ "Sincronización de la configuración %{cert_name} a %{env_name} falló, por "
-#~ "favor actualiza la interfaz de usuario de Nginx en el servidor remoto a "
-#~ "la última versión"
+#~ "favor actualiza la interfaz de usuario de Nginx en el servidor remoto a la "
+#~ "última versión"
 
-#~ 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 ""
 #~ "Renombrar %{orig_path} a %{new_path} en %{env_name} falló, respuesta: "
 #~ "%{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 "Renombrar %{orig_path} a %{new_path} en %{env_name} con éxito"
 
 #, fuzzy
 #~ msgid "Save site %{site} to %{node} error, response: %{resp}"
 #~ msgstr ""
-#~ "Sincronización del Certificado %{cert_name} a %{env_name} falló, "
-#~ "respuesta: %{resp}"
+#~ "Sincronización del Certificado %{cert_name} a %{env_name} falló, respuesta: "
+#~ "%{resp}"
 
 #~ msgid ""
 #~ "Sync Certificate %{cert_name} to %{env_name} failed, please upgrade the "
@@ -5051,11 +5064,10 @@ msgstr "Sus llaves de acceso"
 #~ "Sincronización del Certificado %{cert_name} a %{env_name} fallida, por "
 #~ "favor actualice la interfaz de Nginx remota a la última versión"
 
-#~ msgid ""
-#~ "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
+#~ msgid "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
 #~ msgstr ""
-#~ "Sincronización del Certificado %{cert_name} a %{env_name} falló, "
-#~ "respuesta: %{resp}"
+#~ "Sincronización del Certificado %{cert_name} a %{env_name} falló, respuesta: "
+#~ "%{resp}"
 
 #~ msgid "Sync config %{config_name} to %{env_name} failed, response: %{resp}"
 #~ msgstr ""
@@ -5072,8 +5084,8 @@ msgstr "Sus llaves de acceso"
 #~ msgstr "Archivo"
 
 #~ 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 ""
 #~ "Si pierde su teléfono móvil, puede usar el código de recuperación para "
 #~ "restablecer su 2FA."
@@ -5087,11 +5099,10 @@ msgstr "Sus llaves de acceso"
 #~ msgid "Server error"
 #~ msgstr "Error del servidor"
 
-#~ 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 ""
-#~ "El código de recuperación se muestra solo una vez, por favor guárdalo en "
-#~ "un lugar seguro."
+#~ "El código de recuperación se muestra solo una vez, por favor guárdalo en un "
+#~ "lugar seguro."
 
 #~ msgid "Too many login failed attempts, please try again later"
 #~ msgstr ""
@@ -5172,9 +5183,9 @@ msgstr "Sus llaves de acceso"
 #~ "Once the verification is complete, the records will be removed.\n"
 #~ "Please note that the unit of time configurations below are all in seconds."
 #~ msgstr ""
-#~ "Complete las credenciales de autenticación de la API proporcionadas por "
-#~ "su proveedor de DNS. Agregaremos uno o más registros TXT a los registros "
-#~ "DNS de su dominio para verificar la propiedad. Una vez que se complete la "
+#~ "Complete las credenciales de autenticación de la API proporcionadas por su "
+#~ "proveedor de DNS. Agregaremos uno o más registros TXT a los registros DNS "
+#~ "de su dominio para verificar la propiedad. Una vez que se complete la "
 #~ "verificación, se eliminarán los registros. Tenga en cuenta que las "
 #~ "configuraciones de tiempo que aparecen debajo están todas en segundos."
 
@@ -5197,13 +5208,13 @@ msgstr "Sus llaves de acceso"
 #~ msgstr "Sincronización de operaciones"
 
 #~ msgid ""
-#~ "Such as Reload and Configs, regex can configure as `/api/nginx/reload|/"
-#~ "api/nginx/test|/api/config/.+`, please see system api"
+#~ "Such as Reload and Configs, regex can configure as "
+#~ "`/api/nginx/reload|/api/nginx/test|/api/config/.+`, please see system api"
 #~ msgstr ""
 #~ "Las reglas de sincronización de operación de `Recarga` y `Gestión de "
-#~ "Configuración` se pueden configurar como `/api/nginx/reload|/api/nginx/"
-#~ "test|/api/config/.+`, consulte la API del sistema para obtener más "
-#~ "detalles"
+#~ "Configuración` se pueden configurar como "
+#~ "`/api/nginx/reload|/api/nginx/test|/api/config/.+`, consulte la API del "
+#~ "sistema para obtener más detalles"
 
 #~ msgid "SyncApiRegex"
 #~ msgstr "Expresión Regular de la API"

+ 119 - 106
app/src/language/fr_FR/app.po

@@ -5,11 +5,11 @@ 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"
@@ -122,8 +122,7 @@ msgstr "Mode avancé"
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:99
 msgid "Afterwards, refresh this page and click add passkey again."
-msgstr ""
-"Après, rechargez la page et cliquez de nouveau sur ajouter une clé d'accès."
+msgstr "Après, rechargez la page et cliquez de nouveau sur ajouter une clé d'accès."
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:118
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:419
@@ -263,7 +262,7 @@ msgstr "Modèle ChatGPT"
 msgid "Assistant"
 msgstr ""
 
-#: src/views/system/SelfCheck/SelfCheck.vue:50
+#: src/components/SelfCheck/SelfCheck.vue:62
 msgid "Attempt to fix"
 msgstr "Tenter de corriger"
 
@@ -407,8 +406,7 @@ 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"
@@ -631,33 +629,33 @@ msgstr ""
 msgid "Check again"
 msgstr "Revérifier"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:31
+#: 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`."
+"Docker Image, please make sure the docker socket is mounted like this: `-v "
+"/var/run/docker.sock:/var/run/docker.sock`."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:11
+#: 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."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:26
+#: src/components/SelfCheck/tasks/backend/index.ts:26
 #, 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/views/system/SelfCheck/tasks/backend/index.ts:16
+#: src/components/SelfCheck/tasks/backend/index.ts:16
 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/views/system/SelfCheck/tasks/backend/index.ts:21
+#: src/components/SelfCheck/tasks/backend/index.ts:21
 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/views/system/SelfCheck/tasks/backend/index.ts:6
+#: src/components/SelfCheck/tasks/backend/index.ts:6
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
 "nginx configuration directory."
@@ -665,10 +663,10 @@ msgstr ""
 "Vérifie si les répertoires sites-available et sites-enabled sont dans le "
 "répertoire de configuration nginx."
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:11
+#: src/components/SelfCheck/tasks/backend/index.ts:11
 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."
@@ -965,15 +963,14 @@ 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
 msgid "Dashboard"
 msgstr "Dashboard"
 
-#: src/views/install/Install.vue:167
+#: src/views/install/components/InstallForm.vue:109
 msgid "Database (Optional, default: database)"
 msgstr "Base de données (Facultatif, par défaut : database)"
 
@@ -1241,8 +1238,7 @@ 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
@@ -1281,7 +1277,7 @@ msgstr "Voulez-vous supprimer ce serveur ?"
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:30
+#: src/components/SelfCheck/tasks/backend/index.ts:30
 msgid "Docker Socket"
 msgstr ""
 
@@ -1369,7 +1365,7 @@ msgstr "Modifier le site"
 msgid "Email"
 msgstr "Email (*)"
 
-#: src/views/install/Install.vue:136
+#: src/views/install/components/InstallForm.vue:78
 msgid "Email (*)"
 msgstr "Email (*)"
 
@@ -2079,7 +2075,7 @@ msgstr "Port de challenge HTTP"
 msgid "HTTP01"
 msgstr "HTTP01"
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2093,8 +2089,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
@@ -2113,8 +2109,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
@@ -2128,8 +2124,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
@@ -2191,19 +2187,26 @@ msgstr "Entrez le code de récupération :"
 msgid "Insecure Skip Verify"
 msgstr ""
 
-#: src/routes/modules/auth.ts:8 src/views/install/Install.vue:183
+#: src/routes/modules/auth.ts:8
+#: src/views/install/components/InstallForm.vue:124
+#: src/views/install/components/InstallHeader.vue:9
 msgid "Install"
 msgstr "Installer"
 
-#: src/views/install/Install.vue:91
+#: src/views/install/components/InstallForm.vue:60
 msgid "Install successfully"
 msgstr "Installé avec succès"
 
+#: src/views/install/components/InstallView.vue:62
+#, fuzzy
+msgid "Installation"
+msgstr "Installer"
+
 #: src/constants/errors/system.ts:3
 msgid "Installation is not allowed after 10 minutes of system startup"
 msgstr ""
 
-#: src/views/install/Install.vue:125
+#: src/views/install/components/TimeoutAlert.vue:11
 msgid ""
 "Installation is not allowed after 10 minutes of system startup, please "
 "restart the Nginx UI."
@@ -2475,12 +2478,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
@@ -2505,8 +2508,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
@@ -2711,7 +2714,7 @@ msgstr "Réception totale du réseau"
 msgid "Network Total Send"
 msgstr "Envoi total réseau"
 
-#: src/views/install/Install.vue:131
+#: src/views/install/components/InstallView.vue:106
 #, fuzzy
 msgid "New Installation"
 msgstr "Installer"
@@ -2731,6 +2734,7 @@ msgid "New version released"
 msgstr "Nouvelle version publiée"
 
 #: src/views/certificate/components/WildcardCertificate.vue:89
+#: src/views/install/components/InstallView.vue:93
 #: src/views/site/site_add/SiteAdd.vue:123
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:214
 msgid "Next"
@@ -2745,16 +2749,16 @@ msgstr "Journal Nginx"
 msgid "Nginx Access Log Path"
 msgstr "Chemin du journal d'accès Nginx"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:25
+#: src/components/SelfCheck/tasks/backend/index.ts:25
 #, fuzzy
 msgid "Nginx Conf Include Conf.d"
 msgstr "Commande de démarrage du terminal"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:15
+#: src/components/SelfCheck/tasks/backend/index.ts:15
 msgid "Nginx Conf Include Sites Enabled"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:20
+#: src/components/SelfCheck/tasks/backend/index.ts:20
 msgid "Nginx Conf Include Streams Enabled"
 msgstr ""
 
@@ -2916,8 +2920,8 @@ 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/components/ChatGPT/ChatGPT.vue:374
@@ -3201,7 +3205,7 @@ msgstr ""
 msgid "Password"
 msgstr "Mot de passe"
 
-#: src/views/install/Install.vue:156
+#: src/views/install/components/InstallForm.vue:98
 msgid "Password (*)"
 msgstr "Mot de passe (*)"
 
@@ -3210,7 +3214,7 @@ msgstr "Mot de passe (*)"
 msgid "Password incorrect"
 msgstr "Le pseudo ou mot de passe est incorect"
 
-#: src/views/install/Install.vue:72
+#: src/views/install/components/InstallForm.vue:42
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 
@@ -3307,8 +3311,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
@@ -3336,26 +3340,29 @@ msgstr ""
 "Veuillez entrer le nom, il sera utilisé comme nom de fichier de la nouvelle "
 "configuration."
 
-#: src/views/install/Install.vue:56
+#: src/views/install/components/InstallForm.vue:26
 msgid "Please input your E-mail!"
 msgstr "Veuillez saisir votre e-mail !"
 
-#: src/views/install/Install.vue:68 src/views/other/Login.vue:47
+#: src/views/install/components/InstallForm.vue:38 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgstr "Veuillez saisir votre mot de passe !"
 
-#: src/views/install/Install.vue:62 src/views/other/Login.vue:41
+#: src/views/install/components/InstallForm.vue:32 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgstr "Veuillez saisir votre nom d'utilisateur !"
 
-#: src/views/install/Install.vue:108
+#: src/views/install/components/InstallView.vue:47
 #: src/views/system/Backup/SystemRestore.vue: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."
+msgid "Please note that the unit of time configurations below are all in seconds."
+msgstr ""
+
+#: src/views/install/components/InstallView.vue:99
+msgid "Please resolve all issues before proceeding with installation"
 msgstr ""
 
 #: src/views/system/Backup/BackupCreator.vue:107
@@ -3462,7 +3469,7 @@ msgstr "Lectures"
 msgid "Receive"
 msgstr "Recevoir"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:43
+#: src/components/SelfCheck/SelfCheck.vue:55
 msgid "Recheck"
 msgstr ""
 
@@ -3800,7 +3807,7 @@ msgstr "Redémarrage"
 msgid "Restore completed successfully"
 msgstr "Désactivé avec succès"
 
-#: src/views/install/Install.vue:188
+#: src/views/install/components/InstallView.vue:109
 #, fuzzy
 msgid "Restore from Backup"
 msgstr "Système"
@@ -3973,7 +3980,7 @@ msgstr ""
 msgid "Selector"
 msgstr "Sélecteur"
 
-#: src/routes/modules/system.ts:19 src/views/system/SelfCheck/SelfCheck.vue:38
+#: src/components/SelfCheck/SelfCheck.vue:50 src/routes/modules/system.ts:19
 msgid "Self Check"
 msgstr ""
 
@@ -4039,14 +4046,18 @@ 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:63
+msgid "Setup your Nginx UI"
 msgstr ""
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
@@ -4089,7 +4100,7 @@ msgstr "Journaux du site"
 msgid "Site not found"
 msgstr "Fichier introuvable"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:5
+#: src/components/SelfCheck/tasks/backend/index.ts:5
 #, fuzzy
 msgid "Sites Directory"
 msgstr "Directive"
@@ -4215,7 +4226,7 @@ msgstr "Auto Cert"
 msgid "Stream not found"
 msgstr "Fichier introuvable"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:10
+#: src/components/SelfCheck/tasks/backend/index.ts:10
 #, fuzzy
 msgid "Streams Directory"
 msgstr "Directive"
@@ -4238,12 +4249,12 @@ msgstr ""
 msgid "Success"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/websocket.ts:6
+#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
 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
@@ -4346,6 +4357,11 @@ msgstr "Système"
 msgid "System Backup"
 msgstr "Système"
 
+#: src/views/install/components/InstallView.vue:58
+#, fuzzy
+msgid "System Check"
+msgstr "Système"
+
 #: src/views/certificate/components/ACMEUserSelector.vue:88
 msgid "System Initial User"
 msgstr ""
@@ -4355,7 +4371,7 @@ msgstr ""
 msgid "System Restore"
 msgstr "Système"
 
-#: src/views/install/Install.vue:104
+#: src/views/install/components/InstallView.vue:43
 #: src/views/system/Backup/SystemRestore.vue:6
 #, fuzzy
 msgid "System restored successfully."
@@ -4389,7 +4405,7 @@ msgstr ""
 "Le certificat du domaine sera vérifié toutes les heures et sera renouvelé "
 "s'il s'est écoulé plus d'une semaine depuis sa dernière émission."
 
-#: src/views/install/Install.vue:78
+#: src/views/install/components/InstallForm.vue:48
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "Le nom de fichier ne peut pas contenir les caractères suivants : %{c}"
 
@@ -4411,7 +4427,8 @@ 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
@@ -4422,8 +4439,7 @@ 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
@@ -4530,8 +4546,7 @@ 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
@@ -4572,8 +4587,7 @@ 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
@@ -4617,12 +4631,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?"
 
@@ -4704,7 +4718,7 @@ msgstr "Type"
 msgid "Unknown"
 msgstr ""
 
-#: src/views/system/SelfCheck/SelfCheck.vue:63
+#: src/components/SelfCheck/SelfCheck.vue:75
 msgid "Unknown issue"
 msgstr ""
 
@@ -4792,7 +4806,7 @@ msgstr ""
 msgid "Username"
 msgstr "Nom d'utilisateur"
 
-#: src/views/install/Install.vue:146
+#: src/views/install/components/InstallForm.vue:88
 msgid "Username (*)"
 msgstr "Nom d'utilisateur (*)"
 
@@ -4811,6 +4825,10 @@ msgstr ""
 msgid "Verify Backup File Integrity"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:59
+msgid "Verify system requirements"
+msgstr "Vérifiez les exigences du système"
+
 #: src/views/environments/list/envColumns.tsx:31
 #, fuzzy
 msgid "Version"
@@ -4829,7 +4847,7 @@ msgstr "Certification"
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 msgid "View Details"
-msgstr ""
+msgstr "Afficher les détails"
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:262
 #, fuzzy
@@ -4838,7 +4856,7 @@ msgstr "Mode simple"
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134
 msgid "View Recovery Codes"
-msgstr ""
+msgstr "Afficher les codes de récupération"
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70
 #, fuzzy
@@ -4848,7 +4866,7 @@ msgstr "Voir"
 #: src/composables/usePerformanceMetrics.ts:114
 #: src/views/dashboard/components/PerformanceTablesCard.vue:73
 msgid "Waiting processes"
-msgstr ""
+msgstr "Processus d'attente"
 
 #: src/constants/index.ts:23 src/views/config/InspectConfig.vue:33
 #: src/views/notification/notificationColumns.tsx:22
@@ -4873,8 +4891,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?"
@@ -4960,8 +4978,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
@@ -4987,8 +5005,7 @@ 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
@@ -5083,14 +5100,11 @@ 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
@@ -5104,8 +5118,7 @@ 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
@@ -5194,8 +5207,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."

+ 95 - 38
app/src/language/ja/app.po

@@ -5,10 +5,10 @@ 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\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"
@@ -455,7 +455,9 @@ msgid "Custom"
 msgstr "カスタム"
 
 #: src/views/preference/BasicSettings.vue:121
-msgid "Customize the name of local server to be displayed in the environment indicator."
+msgid ""
+"Customize the name of local server to be displayed in the environment "
+"indicator."
 msgstr ""
 
 #: src/routes/index.ts:39
@@ -943,15 +945,21 @@ msgid "If left blank, the default CA Dir will be used."
 msgstr ""
 
 #: src/views/preference/AuthSettings.vue:62
-msgid "If the number of login failed attempts from a ip reach the max attempts in ban threshold minutes, the ip will be banned for a period of time."
+msgid ""
+"If the number of login failed attempts from a ip reach the max attempts in "
+"ban threshold minutes, the ip will be banned for a period of time."
 msgstr ""
 
 #: src/views/preference/components/TOTP.vue:108
-msgid "If you lose your mobile phone, you can use the recovery code to reset your 2FA."
+msgid ""
+"If you lose your mobile phone, you can use the recovery code to reset your "
+"2FA."
 msgstr ""
 
 #: src/views/domain/cert/components/AutoCertStepOne.vue:109
-msgid "If your domain has CNAME records and you cannot obtain certificates, you need to enable this option."
+msgid ""
+"If your domain has CNAME records and you cannot obtain certificates, you "
+"need to enable this option."
 msgstr ""
 
 #: src/views/certificate/CertificateList/Certificate.vue:20
@@ -1134,11 +1142,19 @@ msgid "Logrotate"
 msgstr ""
 
 #: src/views/preference/LogrotateSettings.vue:12
-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."
+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 ""
 
 #: src/views/domain/cert/components/AutoCertStepOne.vue:54
-msgid "Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort before obtaining the certificate."
+msgid ""
+"Make sure you have configured a reverse proxy for .well-known directory to "
+"HTTPChallengePort before obtaining the certificate."
 msgstr ""
 
 #: src/routes/index.ts:102
@@ -1357,7 +1373,9 @@ msgid "OCSP Must Staple"
 msgstr ""
 
 #: src/views/domain/cert/components/AutoCertStepOne.vue:100
-msgid "OCSP Must Staple may cause errors for some users on first access using Firefox."
+msgid ""
+"OCSP Must Staple may cause errors for some users on first access using "
+"Firefox."
 msgstr ""
 
 #: src/components/NodeSelector/NodeSelector.vue:91
@@ -1466,7 +1484,9 @@ msgid "Please enter the 2FA code:"
 msgstr ""
 
 #: src/views/certificate/DNSCredential.vue:53
-msgid "Please fill in the API authentication credentials provided by your DNS provider."
+msgid ""
+"Please fill in the API authentication credentials provided by your DNS "
+"provider."
 msgstr ""
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:132
@@ -1474,7 +1494,9 @@ msgid "Please fill in the required fields"
 msgstr ""
 
 #: src/views/domain/cert/components/AutoCertStepOne.vue:58
-msgid "Please first add credentials in Certification > DNS Credentials, and then select one of the credentialsbelow to request the API of the DNS provider."
+msgid ""
+"Please first add credentials in Certification > DNS Credentials, and then "
+"select one of the credentialsbelow to request the API of the DNS provider."
 msgstr ""
 
 #: src/views/config/components/Rename.vue:64
@@ -1488,7 +1510,9 @@ msgstr ""
 
 #: src/views/domain/components/SiteDuplicate.vue:38
 #: src/views/stream/components/StreamDuplicate.vue:38
-msgid "Please input name, this will be used as the filename of the new configuration!"
+msgid ""
+"Please input name, this will be used as the filename of the new "
+"configuration!"
 msgstr ""
 
 #: src/views/other/Install.vue:32
@@ -1645,7 +1669,9 @@ msgid "Rename"
 msgstr ""
 
 #: src/components/Notification/config.ts:31
-msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed, please upgrade the remote Nginx UI to the latest version"
+msgid ""
+"Rename %{orig_path} to %{new_path} on %{env_name} failed, please upgrade "
+"the remote Nginx UI to the latest version"
 msgstr ""
 
 #: src/components/Notification/config.ts:35
@@ -1807,7 +1833,9 @@ msgid "server_name parameter is required"
 msgstr ""
 
 #: src/views/preference/BasicSettings.vue:64
-msgid "Set the recursive nameservers to override the systems nameservers for the step of DNS challenge."
+msgid ""
+"Set the recursive nameservers to override the systems nameservers for the "
+"step of DNS challenge."
 msgstr ""
 
 #: src/language/constants.ts:11
@@ -1909,7 +1937,9 @@ msgid "Sync Certificate"
 msgstr ""
 
 #: src/components/Notification/cert.ts:12
-msgid "Sync Certificate %{cert_name} to %{env_name} failed, please upgrade the remote Nginx UI to the latest version"
+msgid ""
+"Sync Certificate %{cert_name} to %{env_name} failed, please upgrade the "
+"remote Nginx UI to the latest version"
 msgstr ""
 
 #: src/components/Notification/cert.ts:16
@@ -1929,7 +1959,9 @@ msgid "Sync Certificate Success"
 msgstr ""
 
 #: src/components/Notification/config.ts:12
-msgid "Sync config %{cert_name} to %{env_name} failed, please upgrade the remote Nginx UI to the latest version"
+msgid ""
+"Sync config %{cert_name} to %{env_name} failed, please upgrade the remote "
+"Nginx UI to the latest version"
 msgstr ""
 
 #: src/components/Notification/config.ts:16
@@ -1975,7 +2007,10 @@ msgid "Terminal Start Command"
 msgstr ""
 
 #: src/views/domain/cert/components/AutoCertStepOne.vue:50
-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."
+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 ""
 
 #: src/views/other/Install.vue:50
@@ -1991,7 +2026,9 @@ msgid "The input is not a SSL Certificate Key"
 msgstr ""
 
 #: src/views/preference/OpenAISettings.vue:35
-msgid "The model name should only contain letters, unicode, numbers, hyphens, dashes, and dots."
+msgid ""
+"The model name should only contain letters, unicode, numbers, hyphens, "
+"dashes, and dots."
 msgstr ""
 
 #: src/views/certificate/CertificateEditor.vue:171
@@ -2007,15 +2044,22 @@ msgid "The recovery code is only displayed once, please save it in a safe place.
 msgstr ""
 
 #: src/views/dashboard/Environments.vue:148
-msgid "The remote Nginx UI version is not compatible with the local Nginx UI version. To avoid potential errors, please upgrade the remote Nginx UI to match the local version."
+msgid ""
+"The remote Nginx UI version is not compatible with the local Nginx UI "
+"version. To avoid potential errors, please upgrade the remote Nginx UI to "
+"match the local version."
 msgstr ""
 
 #: src/views/preference/BasicSettings.vue:120
-msgid "The server name should only contain letters, unicode, numbers, hyphens, dashes, and dots."
+msgid ""
+"The server name should only contain letters, unicode, numbers, hyphens, "
+"dashes, and dots."
 msgstr ""
 
 #: src/views/domain/cert/components/AutoCertStepOne.vue:45
-msgid "The server_name in the current configuration must be the domain name you need to get the certificate, supportmultiple domains."
+msgid ""
+"The server_name in the current configuration must be the domain name you "
+"need to get the certificate, supportmultiple domains."
 msgstr ""
 
 #: src/views/preference/BasicSettings.vue:38
@@ -2064,11 +2108,17 @@ msgid "Title"
 msgstr ""
 
 #: src/views/preference/components/TOTP.vue:90
-msgid "To enable it, you need to install the Google or Microsoft Authenticator app on your mobile phone."
+msgid ""
+"To enable it, you need to install the Google or Microsoft Authenticator app "
+"on your mobile phone."
 msgstr ""
 
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:44
-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 continue?"
+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 "
+"continue?"
 msgstr ""
 
 #: src/views/preference/OpenAISettings.vue:71
@@ -2080,7 +2130,9 @@ msgid "Too many login failed attempts, please try again later"
 msgstr ""
 
 #: src/views/preference/components/TOTP.vue:89
-msgid "TOTP is a two-factor authentication method that uses a time-based one-time password algorithm."
+msgid ""
+"TOTP is a two-factor authentication method that uses a time-based one-time "
+"password algorithm."
 msgstr ""
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:209
@@ -2177,26 +2229,27 @@ msgstr ""
 msgid "Valid"
 msgstr ""
 
-#: src/views/environment/envColumns.tsx:31
+#: src/views/environments/list/envColumns.tsx:31
 msgid "Version"
-msgstr ""
+msgstr "バージョン"
 
-#: src/components/StdDesign/StdDataDisplay/StdTable.vue:517
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:103
+#: src/components/StdDesign/StdDataDisplay/StdTable.vue:488
+#: src/views/nginx_log/NginxLogList.vue:97
+#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:83
 msgid "View"
-msgstr ""
+msgstr "ビュー"
 
-#: src/components/Notification/Notification.vue:143
+#: src/components/Notification/Notification.vue:203
 msgid "View all notifications"
-msgstr ""
+msgstr "すべての通知を表示します"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 msgid "View Details"
-msgstr ""
+msgstr "詳細を表示します"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:262
 msgid "View Mode"
-msgstr ""
+msgstr "ビューモード"
 
 #: src/constants/index.ts:17
 #: src/views/config/InspectConfig.vue:33
@@ -2206,11 +2259,15 @@ msgid "Warning"
 msgstr ""
 
 #: src/views/certificate/DNSCredential.vue:56
-msgid "We will add one or more TXT records to the DNS records of your domain for ownership verification."
+msgid ""
+"We will add one or more TXT records to the DNS records of your domain for "
+"ownership verification."
 msgstr ""
 
 #: src/views/domain/cert/components/ObtainCert.vue:134
-msgid "We will remove the HTTPChallenge configuration from this file and reload the Nginx. Are you sure you want to continue?"
+msgid ""
+"We will remove the HTTPChallenge configuration from this file and reload "
+"the Nginx. Are you sure you want to continue?"
 msgstr ""
 
 #: src/views/dashboard/ServerAnalytic.vue:27

+ 117 - 112
app/src/language/ko_KR/app.po

@@ -5,11 +5,11 @@ 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"
@@ -241,7 +241,7 @@ msgstr "ChatGPT에게 도움 요청"
 msgid "Assistant"
 msgstr "어시스턴트"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:50
+#: src/components/SelfCheck/SelfCheck.vue:62
 msgid "Attempt to fix"
 msgstr "수정 시도"
 
@@ -601,41 +601,41 @@ msgstr ""
 msgid "Check again"
 msgstr "다시 확인"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:31
+#: 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`."
+"Docker Image, please make sure the docker socket is mounted like this: `-v "
+"/var/run/docker.sock:/var/run/docker.sock`."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:11
+#: 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."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:26
+#: src/components/SelfCheck/tasks/backend/index.ts:26
 msgid "Check if the nginx.conf includes the conf.d directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:16
+#: src/components/SelfCheck/tasks/backend/index.ts:16
 msgid "Check if the nginx.conf includes the sites-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:21
+#: src/components/SelfCheck/tasks/backend/index.ts:21
 msgid "Check if the nginx.conf includes the streams-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:6
+#: src/components/SelfCheck/tasks/backend/index.ts:6
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
 "nginx configuration directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:11
+#: src/components/SelfCheck/tasks/backend/index.ts:11
 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 ""
 
 #: src/constants/errors/crypto.ts:3
@@ -931,7 +931,7 @@ msgstr ""
 msgid "Dashboard"
 msgstr "대시보드"
 
-#: src/views/install/Install.vue:167
+#: src/views/install/components/InstallForm.vue:109
 msgid "Database (Optional, default: database)"
 msgstr "데이터베이스 (선택사항, 기본값: database)"
 
@@ -1230,7 +1230,7 @@ msgstr "이 업스트림을 제거하시겠습니까?"
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:30
+#: src/components/SelfCheck/tasks/backend/index.ts:30
 msgid "Docker Socket"
 msgstr ""
 
@@ -1248,8 +1248,7 @@ msgstr "도메인"
 
 #: src/views/certificate/components/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"
@@ -1310,7 +1309,7 @@ msgstr "스트림 편집"
 msgid "Email"
 msgstr "이메일 (*)"
 
-#: src/views/install/Install.vue:136
+#: src/views/install/components/InstallForm.vue:78
 msgid "Email (*)"
 msgstr "이메일 (*)"
 
@@ -2009,7 +2008,7 @@ msgstr "HTTP 검증 포트"
 msgid "HTTP01"
 msgstr "HTTP01"
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2023,8 +2022,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
@@ -2108,20 +2107,27 @@ msgstr ""
 msgid "Insecure Skip Verify"
 msgstr ""
 
-#: src/routes/modules/auth.ts:8 src/views/install/Install.vue:183
+#: src/routes/modules/auth.ts:8
+#: src/views/install/components/InstallForm.vue:124
+#: src/views/install/components/InstallHeader.vue:9
 msgid "Install"
 msgstr "설치"
 
-#: src/views/install/Install.vue:91
+#: src/views/install/components/InstallForm.vue:60
 #, fuzzy
 msgid "Install successfully"
 msgstr "성공적으로 활성화됨"
 
+#: src/views/install/components/InstallView.vue:62
+#, fuzzy
+msgid "Installation"
+msgstr "설치"
+
 #: src/constants/errors/system.ts:3
 msgid "Installation is not allowed after 10 minutes of system startup"
 msgstr ""
 
-#: src/views/install/Install.vue:125
+#: src/views/install/components/TimeoutAlert.vue:11
 msgid ""
 "Installation is not allowed after 10 minutes of system startup, please "
 "restart the Nginx UI."
@@ -2387,18 +2393,16 @@ 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
@@ -2422,8 +2426,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
@@ -2630,7 +2634,7 @@ msgstr "네트워크 총 수신"
 msgid "Network Total Send"
 msgstr "네트워크 총 송신"
 
-#: src/views/install/Install.vue:131
+#: src/views/install/components/InstallView.vue:106
 #, fuzzy
 msgid "New Installation"
 msgstr "설치"
@@ -2650,6 +2654,7 @@ msgid "New version released"
 msgstr "새 버전 출시"
 
 #: src/views/certificate/components/WildcardCertificate.vue:89
+#: src/views/install/components/InstallView.vue:93
 #: src/views/site/site_add/SiteAdd.vue:123
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:214
 msgid "Next"
@@ -2663,16 +2668,16 @@ msgstr "Nginx"
 msgid "Nginx Access Log Path"
 msgstr "Nginx 접근 로그 경로"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:25
+#: src/components/SelfCheck/tasks/backend/index.ts:25
 #, fuzzy
 msgid "Nginx Conf Include Conf.d"
 msgstr "터미널 시작 명령"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:15
+#: src/components/SelfCheck/tasks/backend/index.ts:15
 msgid "Nginx Conf Include Sites Enabled"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:20
+#: src/components/SelfCheck/tasks/backend/index.ts:20
 msgid "Nginx Conf Include Streams Enabled"
 msgstr ""
 
@@ -2835,8 +2840,8 @@ 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/components/ChatGPT/ChatGPT.vue:374
@@ -3122,7 +3127,7 @@ msgstr ""
 msgid "Password"
 msgstr "비밀번호"
 
-#: src/views/install/Install.vue:156
+#: src/views/install/components/InstallForm.vue:98
 msgid "Password (*)"
 msgstr "비밀번호 (*)"
 
@@ -3131,7 +3136,7 @@ msgstr "비밀번호 (*)"
 msgid "Password incorrect"
 msgstr "사용자 이름 또는 비밀번호가 올바르지 않습니다"
 
-#: src/views/install/Install.vue:72
+#: src/views/install/components/InstallForm.vue:42
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 
@@ -3218,15 +3223,13 @@ 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
@@ -3253,28 +3256,31 @@ msgid ""
 "configuration."
 msgstr "이름을 입력해주세요, 이것은 새 구성의 파일 이름으로 사용될 것입니다!"
 
-#: src/views/install/Install.vue:56
+#: src/views/install/components/InstallForm.vue:26
 msgid "Please input your E-mail!"
 msgstr "이메일을 입력해주세요!"
 
-#: src/views/install/Install.vue:68 src/views/other/Login.vue:47
+#: src/views/install/components/InstallForm.vue:38 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgstr "비밀번호를 입력해주세요!"
 
-#: src/views/install/Install.vue:62 src/views/other/Login.vue:41
+#: src/views/install/components/InstallForm.vue:32 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgstr "사용자 이름을 입력해주세요!"
 
-#: src/views/install/Install.vue:108
+#: src/views/install/components/InstallView.vue:47
 #: src/views/system/Backup/SystemRestore.vue: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."
+msgid "Please note that the unit of time configurations below are all in seconds."
 msgstr "아래의 시간 설정 단위는 모두 초 단위임을 유의해주세요."
 
+#: src/views/install/components/InstallView.vue:99
+msgid "Please resolve all issues before proceeding with installation"
+msgstr ""
+
 #: src/views/system/Backup/BackupCreator.vue:107
 msgid "Please save this security token, you will need it for restoration:"
 msgstr ""
@@ -3380,7 +3386,7 @@ msgstr "읽기"
 msgid "Receive"
 msgstr "수신"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:43
+#: src/components/SelfCheck/SelfCheck.vue:55
 msgid "Recheck"
 msgstr ""
 
@@ -3719,7 +3725,7 @@ msgstr "재시작 중"
 msgid "Restore completed successfully"
 msgstr "성공적으로 삭제됨"
 
-#: src/views/install/Install.vue:188
+#: src/views/install/components/InstallView.vue:109
 #, fuzzy
 msgid "Restore from Backup"
 msgstr "시스템"
@@ -3893,7 +3899,7 @@ msgstr ""
 msgid "Selector"
 msgstr "선택"
 
-#: src/routes/modules/system.ts:19 src/views/system/SelfCheck/SelfCheck.vue:38
+#: src/components/SelfCheck/SelfCheck.vue:50 src/routes/modules/system.ts:19
 msgid "Self Check"
 msgstr ""
 
@@ -3957,14 +3963,18 @@ 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:63
+msgid "Setup your Nginx UI"
 msgstr ""
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
@@ -4008,7 +4018,7 @@ msgstr "사이트 로그"
 msgid "Site not found"
 msgstr "파일을 찾을 수 없음"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:5
+#: src/components/SelfCheck/tasks/backend/index.ts:5
 #, fuzzy
 msgid "Sites Directory"
 msgstr "디렉토리"
@@ -4133,7 +4143,7 @@ msgstr "비활성화됨"
 msgid "Stream not found"
 msgstr "파일을 찾을 수 없음"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:10
+#: src/components/SelfCheck/tasks/backend/index.ts:10
 #, fuzzy
 msgid "Streams Directory"
 msgstr "디렉토리"
@@ -4155,12 +4165,12 @@ msgstr ""
 msgid "Success"
 msgstr "성공"
 
-#: src/views/system/SelfCheck/tasks/frontend/websocket.ts:6
+#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
 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
@@ -4261,6 +4271,11 @@ msgstr "시스템"
 msgid "System Backup"
 msgstr "시스템"
 
+#: src/views/install/components/InstallView.vue:58
+#, fuzzy
+msgid "System Check"
+msgstr "시스템"
+
 #: src/views/certificate/components/ACMEUserSelector.vue:88
 msgid "System Initial User"
 msgstr ""
@@ -4270,7 +4285,7 @@ msgstr ""
 msgid "System Restore"
 msgstr "시스템"
 
-#: src/views/install/Install.vue:104
+#: src/views/install/components/InstallView.vue:43
 #: src/views/system/Backup/SystemRestore.vue:6
 #, fuzzy
 msgid "System restored successfully."
@@ -4300,11 +4315,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/Install.vue:78
+#: src/views/install/components/InstallForm.vue:48
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "파일 이름은 다음 문자를 포함할 수 없습니다: %{c}"
 
@@ -4325,7 +4338,8 @@ 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
@@ -4336,8 +4350,7 @@ 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
@@ -4443,8 +4456,7 @@ 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
@@ -4484,8 +4496,7 @@ 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
@@ -4529,13 +4540,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 ""
-"인증서 자동 갱신이 정상적으로 작동하도록 하려면,권한에서 백엔드로 요청을 프록"
-"시할 수 있는 위치를 추가해야 하며,이 파일을 저장하고 Nginx를 다시로드해야 합"
-"니다.계속하시겠습니까?"
+"인증서 자동 갱신이 정상적으로 작동하도록 하려면,권한에서 백엔드로 요청을 프록시할 수 있는 위치를 추가해야 하며,이 파일을 저장하고 "
+"Nginx를 다시로드해야 합니다.계속하시겠습니까?"
 
 #: src/views/preference/tabs/OpenAISettings.vue:36
 msgid ""
@@ -4615,7 +4625,7 @@ msgstr "유형"
 msgid "Unknown"
 msgstr ""
 
-#: src/views/system/SelfCheck/SelfCheck.vue:63
+#: src/components/SelfCheck/SelfCheck.vue:75
 msgid "Unknown issue"
 msgstr ""
 
@@ -4705,7 +4715,7 @@ msgstr ""
 msgid "Username"
 msgstr "사용자 이름"
 
-#: src/views/install/Install.vue:146
+#: src/views/install/components/InstallForm.vue:88
 msgid "Username (*)"
 msgstr "사용자 이름 (*)"
 
@@ -4724,6 +4734,10 @@ msgstr ""
 msgid "Verify Backup File Integrity"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:59
+msgid "Verify system requirements"
+msgstr "시스템 요구 사항을 확인하십시오"
+
 #: src/views/environments/list/envColumns.tsx:31
 #, fuzzy
 msgid "Version"
@@ -4752,7 +4766,7 @@ msgstr "기본 모드"
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134
 msgid "View Recovery Codes"
-msgstr ""
+msgstr "복구 코드를 봅니다"
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70
 #, fuzzy
@@ -4762,7 +4776,7 @@ msgstr "보기"
 #: src/composables/usePerformanceMetrics.ts:114
 #: src/views/dashboard/components/PerformanceTablesCard.vue:73
 msgid "Waiting processes"
-msgstr ""
+msgstr "대기 과정"
 
 #: src/constants/index.ts:23 src/views/config/InspectConfig.vue:33
 #: src/views/notification/notificationColumns.tsx:22
@@ -4783,17 +4797,13 @@ 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"
@@ -4876,8 +4886,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
@@ -4903,8 +4913,7 @@ 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
@@ -4989,14 +4998,11 @@ 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
@@ -5010,8 +5016,7 @@ 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

+ 57 - 35
app/src/language/messages.pot

@@ -230,7 +230,7 @@ msgstr ""
 msgid "Assistant"
 msgstr ""
 
-#: src/views/system/SelfCheck/SelfCheck.vue:50
+#: src/components/SelfCheck/SelfCheck.vue:62
 msgid "Attempt to fix"
 msgstr ""
 
@@ -571,31 +571,31 @@ msgstr ""
 msgid "Check again"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:31
+#: 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 ""
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:11
+#: 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."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:26
+#: src/components/SelfCheck/tasks/backend/index.ts:26
 msgid "Check if the nginx.conf includes the conf.d directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:16
+#: src/components/SelfCheck/tasks/backend/index.ts:16
 msgid "Check if the nginx.conf includes the sites-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:21
+#: src/components/SelfCheck/tasks/backend/index.ts:21
 msgid "Check if the nginx.conf includes the streams-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:6
+#: src/components/SelfCheck/tasks/backend/index.ts:6
 msgid "Check if the sites-available and sites-enabled directories are under the nginx configuration directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:11
+#: src/components/SelfCheck/tasks/backend/index.ts:11
 msgid "Check if the streams-available and streams-enabled directories are under the nginx configuration directory."
 msgstr ""
 
@@ -880,7 +880,7 @@ msgstr ""
 msgid "Dashboard"
 msgstr ""
 
-#: src/views/install/Install.vue:167
+#: src/views/install/components/InstallForm.vue:109
 msgid "Database (Optional, default: database)"
 msgstr ""
 
@@ -1160,7 +1160,7 @@ msgstr ""
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:30
+#: src/components/SelfCheck/tasks/backend/index.ts:30
 msgid "Docker Socket"
 msgstr ""
 
@@ -1235,7 +1235,7 @@ msgstr ""
 msgid "Email"
 msgstr ""
 
-#: src/views/install/Install.vue:136
+#: src/views/install/components/InstallForm.vue:78
 msgid "Email (*)"
 msgstr ""
 
@@ -1861,7 +1861,7 @@ msgstr ""
 msgid "HTTP01"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -1953,19 +1953,24 @@ msgid "Insecure Skip Verify"
 msgstr ""
 
 #: src/routes/modules/auth.ts:8
-#: src/views/install/Install.vue:183
+#: src/views/install/components/InstallForm.vue:124
+#: src/views/install/components/InstallHeader.vue:9
 msgid "Install"
 msgstr ""
 
-#: src/views/install/Install.vue:91
+#: src/views/install/components/InstallForm.vue:60
 msgid "Install successfully"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:62
+msgid "Installation"
+msgstr ""
+
 #: src/constants/errors/system.ts:3
 msgid "Installation is not allowed after 10 minutes of system startup"
 msgstr ""
 
-#: src/views/install/Install.vue:125
+#: src/views/install/components/TimeoutAlert.vue:11
 msgid "Installation is not allowed after 10 minutes of system startup, please restart the Nginx UI."
 msgstr ""
 
@@ -2428,7 +2433,7 @@ msgstr ""
 msgid "Network Total Send"
 msgstr ""
 
-#: src/views/install/Install.vue:131
+#: src/views/install/components/InstallView.vue:106
 msgid "New Installation"
 msgstr ""
 
@@ -2445,6 +2450,7 @@ msgid "New version released"
 msgstr ""
 
 #: src/views/certificate/components/WildcardCertificate.vue:89
+#: src/views/install/components/InstallView.vue:93
 #: src/views/site/site_add/SiteAdd.vue:123
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:214
 msgid "Next"
@@ -2459,15 +2465,15 @@ msgstr ""
 msgid "Nginx Access Log Path"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:25
+#: src/components/SelfCheck/tasks/backend/index.ts:25
 msgid "Nginx Conf Include Conf.d"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:15
+#: src/components/SelfCheck/tasks/backend/index.ts:15
 msgid "Nginx Conf Include Sites Enabled"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:20
+#: src/components/SelfCheck/tasks/backend/index.ts:20
 msgid "Nginx Conf Include Streams Enabled"
 msgstr ""
 
@@ -2884,7 +2890,7 @@ msgstr ""
 msgid "Password"
 msgstr ""
 
-#: src/views/install/Install.vue:156
+#: src/views/install/components/InstallForm.vue:98
 msgid "Password (*)"
 msgstr ""
 
@@ -2892,7 +2898,7 @@ msgstr ""
 msgid "Password incorrect"
 msgstr ""
 
-#: src/views/install/Install.vue:72
+#: src/views/install/components/InstallForm.vue:42
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 
@@ -2995,21 +3001,21 @@ msgstr ""
 msgid "Please input name, this will be used as the filename of the new configuration."
 msgstr ""
 
-#: src/views/install/Install.vue:56
+#: src/views/install/components/InstallForm.vue:26
 msgid "Please input your E-mail!"
 msgstr ""
 
-#: src/views/install/Install.vue:68
+#: src/views/install/components/InstallForm.vue:38
 #: src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgstr ""
 
-#: src/views/install/Install.vue:62
+#: src/views/install/components/InstallForm.vue:32
 #: src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgstr ""
 
-#: src/views/install/Install.vue:108
+#: src/views/install/components/InstallView.vue:47
 #: src/views/system/Backup/SystemRestore.vue:10
 msgid "Please log in."
 msgstr ""
@@ -3018,6 +3024,10 @@ msgstr ""
 msgid "Please note that the unit of time configurations below are all in seconds."
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:99
+msgid "Please resolve all issues before proceeding with installation"
+msgstr ""
+
 #: src/views/system/Backup/BackupCreator.vue:107
 msgid "Please save this security token, you will need it for restoration:"
 msgstr ""
@@ -3116,7 +3126,7 @@ msgstr ""
 msgid "Receive"
 msgstr ""
 
-#: src/views/system/SelfCheck/SelfCheck.vue:43
+#: src/components/SelfCheck/SelfCheck.vue:55
 msgid "Recheck"
 msgstr ""
 
@@ -3407,7 +3417,7 @@ msgstr ""
 msgid "Restore completed successfully"
 msgstr ""
 
-#: src/views/install/Install.vue:188
+#: src/views/install/components/InstallView.vue:109
 msgid "Restore from Backup"
 msgstr ""
 
@@ -3565,8 +3575,8 @@ msgstr ""
 msgid "Selector"
 msgstr ""
 
+#: src/components/SelfCheck/SelfCheck.vue:50
 #: src/routes/modules/system.ts:19
-#: src/views/system/SelfCheck/SelfCheck.vue:38
 msgid "Self Check"
 msgstr ""
 
@@ -3632,6 +3642,10 @@ msgstr ""
 msgid "Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui.com/guide/config-nginx.html for more information"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:63
+msgid "Setup your Nginx UI"
+msgstr ""
+
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
 msgid "Shared Memory Zone"
 msgstr ""
@@ -3668,7 +3682,7 @@ msgstr ""
 msgid "Site not found"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:5
+#: src/components/SelfCheck/tasks/backend/index.ts:5
 msgid "Sites Directory"
 msgstr ""
 
@@ -3783,7 +3797,7 @@ msgstr ""
 msgid "Stream not found"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:10
+#: src/components/SelfCheck/tasks/backend/index.ts:10
 msgid "Streams Directory"
 msgstr ""
 
@@ -3804,7 +3818,7 @@ msgstr ""
 msgid "Success"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/websocket.ts:6
+#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
 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 ""
 
@@ -3899,6 +3913,10 @@ msgstr ""
 msgid "System Backup"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:58
+msgid "System Check"
+msgstr ""
+
 #: src/views/certificate/components/ACMEUserSelector.vue:88
 msgid "System Initial User"
 msgstr ""
@@ -3907,7 +3925,7 @@ msgstr ""
 msgid "System Restore"
 msgstr ""
 
-#: src/views/install/Install.vue:104
+#: src/views/install/components/InstallView.vue:43
 #: src/views/system/Backup/SystemRestore.vue:6
 msgid "System restored successfully."
 msgstr ""
@@ -3934,7 +3952,7 @@ msgstr ""
 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 ""
 
-#: src/views/install/Install.vue:78
+#: src/views/install/components/InstallForm.vue:48
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr ""
 
@@ -4185,7 +4203,7 @@ msgstr ""
 msgid "Unknown"
 msgstr ""
 
-#: src/views/system/SelfCheck/SelfCheck.vue:63
+#: src/components/SelfCheck/SelfCheck.vue:75
 msgid "Unknown issue"
 msgstr ""
 
@@ -4273,7 +4291,7 @@ msgstr ""
 msgid "Username"
 msgstr ""
 
-#: src/views/install/Install.vue:146
+#: src/views/install/components/InstallForm.vue:88
 msgid "Username (*)"
 msgstr ""
 
@@ -4292,6 +4310,10 @@ msgstr ""
 msgid "Verify Backup File Integrity"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:59
+msgid "Verify system requirements"
+msgstr ""
+
 #: src/views/environments/list/envColumns.tsx:31
 msgid "Version"
 msgstr ""

+ 128 - 115
app/src/language/ru_RU/app.po

@@ -7,11 +7,11 @@ 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"
@@ -245,7 +245,7 @@ msgstr "Обратитесь за помощью к ChatGPT"
 msgid "Assistant"
 msgstr "Ассистент"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:50
+#: src/components/SelfCheck/SelfCheck.vue:62
 msgid "Attempt to fix"
 msgstr "Попытка исправить"
 
@@ -599,41 +599,41 @@ msgstr ""
 msgid "Check again"
 msgstr "Проверить повторно"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:31
+#: 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`."
+"Docker Image, please make sure the docker socket is mounted like this: `-v "
+"/var/run/docker.sock:/var/run/docker.sock`."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:11
+#: 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."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:26
+#: src/components/SelfCheck/tasks/backend/index.ts:26
 msgid "Check if the nginx.conf includes the conf.d directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:16
+#: src/components/SelfCheck/tasks/backend/index.ts:16
 msgid "Check if the nginx.conf includes the sites-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:21
+#: src/components/SelfCheck/tasks/backend/index.ts:21
 msgid "Check if the nginx.conf includes the streams-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:6
+#: src/components/SelfCheck/tasks/backend/index.ts:6
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
 "nginx configuration directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:11
+#: src/components/SelfCheck/tasks/backend/index.ts:11
 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 ""
 
 #: src/constants/errors/crypto.ts:3
@@ -929,7 +929,7 @@ msgstr "Настройте имя локального сервера для о
 msgid "Dashboard"
 msgstr "Доска"
 
-#: src/views/install/Install.vue:167
+#: src/views/install/components/InstallForm.vue:109
 msgid "Database (Optional, default: database)"
 msgstr "База данных (Опционально, по умолчанию: database)"
 
@@ -1226,7 +1226,7 @@ msgstr "Хотите удалить этот сервер?"
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:30
+#: src/components/SelfCheck/tasks/backend/index.ts:30
 msgid "Docker Socket"
 msgstr ""
 
@@ -1244,8 +1244,7 @@ msgstr "Домен"
 
 #: src/views/certificate/components/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"
@@ -1308,7 +1307,7 @@ msgstr "Редактировать поток"
 msgid "Email"
 msgstr "Электронная почта"
 
-#: src/views/install/Install.vue:136
+#: src/views/install/components/InstallForm.vue:78
 msgid "Email (*)"
 msgstr "Email (*)"
 
@@ -1877,8 +1876,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
@@ -2001,7 +2000,7 @@ msgstr "Порт HTTP Challenge"
 msgid "HTTP01"
 msgstr "HTTP01"
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2015,8 +2014,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
@@ -2039,8 +2038,7 @@ 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 ""
@@ -2108,19 +2106,26 @@ msgstr "Введите код восстановления:"
 msgid "Insecure Skip Verify"
 msgstr ""
 
-#: src/routes/modules/auth.ts:8 src/views/install/Install.vue:183
+#: src/routes/modules/auth.ts:8
+#: src/views/install/components/InstallForm.vue:124
+#: src/views/install/components/InstallHeader.vue:9
 msgid "Install"
 msgstr "Установить"
 
-#: src/views/install/Install.vue:91
+#: src/views/install/components/InstallForm.vue:60
 msgid "Install successfully"
 msgstr "Установка прошла успешно"
 
+#: src/views/install/components/InstallView.vue:62
+#, fuzzy
+msgid "Installation"
+msgstr "Установить"
+
 #: src/constants/errors/system.ts:3
 msgid "Installation is not allowed after 10 minutes of system startup"
 msgstr ""
 
-#: src/views/install/Install.vue:125
+#: src/views/install/components/TimeoutAlert.vue:11
 msgid ""
 "Installation is not allowed after 10 minutes of system startup, please "
 "restart the Nginx UI."
@@ -2375,18 +2380,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
@@ -2611,7 +2616,7 @@ msgstr "Всего получено"
 msgid "Network Total Send"
 msgstr "Всего отправлено"
 
-#: src/views/install/Install.vue:131
+#: src/views/install/components/InstallView.vue:106
 #, fuzzy
 msgid "New Installation"
 msgstr "Установить"
@@ -2629,6 +2634,7 @@ msgid "New version released"
 msgstr "Вышла новая версия"
 
 #: src/views/certificate/components/WildcardCertificate.vue:89
+#: src/views/install/components/InstallView.vue:93
 #: src/views/site/site_add/SiteAdd.vue:123
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:214
 msgid "Next"
@@ -2642,16 +2648,16 @@ msgstr "Nginx"
 msgid "Nginx Access Log Path"
 msgstr "Путь для Nginx Access Log"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:25
+#: src/components/SelfCheck/tasks/backend/index.ts:25
 #, fuzzy
 msgid "Nginx Conf Include Conf.d"
 msgstr "Терминальная команда запуска"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:15
+#: src/components/SelfCheck/tasks/backend/index.ts:15
 msgid "Nginx Conf Include Sites Enabled"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:20
+#: src/components/SelfCheck/tasks/backend/index.ts:20
 msgid "Nginx Conf Include Streams Enabled"
 msgstr ""
 
@@ -2813,8 +2819,8 @@ 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/components/ChatGPT/ChatGPT.vue:374
@@ -3099,7 +3105,7 @@ msgstr ""
 msgid "Password"
 msgstr "Пароль"
 
-#: src/views/install/Install.vue:156
+#: src/views/install/components/InstallForm.vue:98
 msgid "Password (*)"
 msgstr "Пароль (*)"
 
@@ -3108,7 +3114,7 @@ msgstr "Пароль (*)"
 msgid "Password incorrect"
 msgstr "Имя пользователя или пароль неверны"
 
-#: src/views/install/Install.vue:72
+#: src/views/install/components/InstallForm.vue:42
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 
@@ -3189,8 +3195,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"
@@ -3208,8 +3214,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
@@ -3237,30 +3243,33 @@ msgstr ""
 "Введите имя, оно будет использоваться в качестве имени файла новой "
 "конфигурации."
 
-#: src/views/install/Install.vue:56
+#: src/views/install/components/InstallForm.vue:26
 msgid "Please input your E-mail!"
 msgstr "Введите ваш E-mail!"
 
-#: src/views/install/Install.vue:68 src/views/other/Login.vue:47
+#: src/views/install/components/InstallForm.vue:38 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgstr "Введите ваш пароль!"
 
-#: src/views/install/Install.vue:62 src/views/other/Login.vue:41
+#: src/views/install/components/InstallForm.vue:32 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgstr "Введите ваше имя пользователя!"
 
-#: src/views/install/Install.vue:108
+#: src/views/install/components/InstallView.vue:47
 #: src/views/system/Backup/SystemRestore.vue: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."
+msgid "Please note that the unit of time configurations below are all in seconds."
 msgstr ""
 "Обратите внимание, что единица измерения времени в конфигурациях ниже "
 "указана в секундах."
 
+#: src/views/install/components/InstallView.vue:99
+msgid "Please resolve all issues before proceeding with installation"
+msgstr ""
+
 #: src/views/system/Backup/BackupCreator.vue:107
 msgid "Please save this security token, you will need it for restoration:"
 msgstr ""
@@ -3363,7 +3372,7 @@ msgstr "Чтение"
 msgid "Receive"
 msgstr "Принято"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:43
+#: src/components/SelfCheck/SelfCheck.vue:55
 msgid "Recheck"
 msgstr ""
 
@@ -3390,8 +3399,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"
@@ -3685,7 +3694,7 @@ msgstr "Перезапускается"
 msgid "Restore completed successfully"
 msgstr "Удалено успешно"
 
-#: src/views/install/Install.vue:188
+#: src/views/install/components/InstallView.vue:109
 #, fuzzy
 msgid "Restore from Backup"
 msgstr "Система"
@@ -3858,7 +3867,7 @@ msgstr ""
 msgid "Selector"
 msgstr "Выбор"
 
-#: src/routes/modules/system.ts:19 src/views/system/SelfCheck/SelfCheck.vue:38
+#: src/components/SelfCheck/SelfCheck.vue:50 src/routes/modules/system.ts:19
 msgid "Self Check"
 msgstr ""
 
@@ -3923,14 +3932,18 @@ 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:63
+msgid "Setup your Nginx UI"
 msgstr ""
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
@@ -3973,7 +3986,7 @@ msgstr "Журналы сайта"
 msgid "Site not found"
 msgstr "Файл не найден"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:5
+#: src/components/SelfCheck/tasks/backend/index.ts:5
 #, fuzzy
 msgid "Sites Directory"
 msgstr "Каталог"
@@ -4093,7 +4106,7 @@ msgstr "Авто Сертификат"
 msgid "Stream not found"
 msgstr "Файл не найден"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:10
+#: src/components/SelfCheck/tasks/backend/index.ts:10
 #, fuzzy
 msgid "Streams Directory"
 msgstr "Каталог"
@@ -4115,12 +4128,12 @@ msgstr ""
 msgid "Success"
 msgstr "Успех"
 
-#: src/views/system/SelfCheck/tasks/frontend/websocket.ts:6
+#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
 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
@@ -4216,6 +4229,11 @@ msgstr "Система"
 msgid "System Backup"
 msgstr "Система"
 
+#: src/views/install/components/InstallView.vue:58
+#, fuzzy
+msgid "System Check"
+msgstr "Система"
+
 #: src/views/certificate/components/ACMEUserSelector.vue:88
 msgid "System Initial User"
 msgstr "Первоначальный пользователь системы"
@@ -4225,7 +4243,7 @@ msgstr "Первоначальный пользователь системы"
 msgid "System Restore"
 msgstr "Система"
 
-#: src/views/install/Install.vue:104
+#: src/views/install/components/InstallView.vue:43
 #: src/views/system/Backup/SystemRestore.vue:6
 #, fuzzy
 msgid "System restored successfully."
@@ -4259,7 +4277,7 @@ msgstr ""
 "более 1 недели или периода, установленного в настройках, с момента его "
 "последней выдачи."
 
-#: src/views/install/Install.vue:78
+#: src/views/install/components/InstallForm.vue:48
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "Имя файла не может содержать такой символ: %{c}"
 
@@ -4282,7 +4300,8 @@ 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
@@ -4296,8 +4315,7 @@ 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
@@ -4346,8 +4364,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
@@ -4409,8 +4427,7 @@ 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 ""
 "Имя модели должно содержать только буквы, юникод, цифры, дефисы, тире и "
 "точки."
@@ -4452,8 +4469,7 @@ 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}."
@@ -4501,8 +4517,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 ""
 "Чтобы убедиться, что автоматическое обновление сертификата может работать "
@@ -4590,7 +4606,7 @@ msgstr "Тип"
 msgid "Unknown"
 msgstr ""
 
-#: src/views/system/SelfCheck/SelfCheck.vue:63
+#: src/components/SelfCheck/SelfCheck.vue:75
 msgid "Unknown issue"
 msgstr ""
 
@@ -4676,7 +4692,7 @@ msgstr ""
 msgid "Username"
 msgstr "Имя пользователя"
 
-#: src/views/install/Install.vue:146
+#: src/views/install/components/InstallForm.vue:88
 msgid "Username (*)"
 msgstr "Имя пользователя (*)"
 
@@ -4695,6 +4711,10 @@ msgstr ""
 msgid "Verify Backup File Integrity"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:59
+msgid "Verify system requirements"
+msgstr "Проверьте системные требования"
+
 #: src/views/environments/list/envColumns.tsx:31
 msgid "Version"
 msgstr "Версия"
@@ -4731,7 +4751,7 @@ msgstr "Просмотр"
 #: src/composables/usePerformanceMetrics.ts:114
 #: src/views/dashboard/components/PerformanceTablesCard.vue:73
 msgid "Waiting processes"
-msgstr ""
+msgstr "Процессы ожидания"
 
 #: src/constants/index.ts:23 src/views/config/InspectConfig.vue:33
 #: src/views/notification/notificationColumns.tsx:22
@@ -4758,11 +4778,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"
@@ -4845,8 +4865,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
@@ -4872,8 +4892,7 @@ 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
@@ -4899,8 +4918,7 @@ msgstr ""
 #~ msgstr "Ошибка формата %{msg}"
 
 #~ msgid "Failed to save, syntax error(s) was detected in the configuration."
-#~ msgstr ""
-#~ "Не удалось сохранить, обнаружены синтаксические ошибки в конфигурации."
+#~ msgstr "Не удалось сохранить, обнаружены синтаксические ошибки в конфигурации."
 
 #, fuzzy
 #~ msgid "Access Token"
@@ -4963,16 +4981,13 @@ msgstr ""
 #~ "Синхронизация конфигурации %{cert_name} с %{env_name} не удалась, "
 #~ "пожалуйста, обновите удаленный Nginx UI до последней версии"
 
-#~ 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}"
+#~ "Переименование %{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
@@ -4988,16 +5003,15 @@ 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 "Цель"
@@ -5006,8 +5020,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."
@@ -5021,11 +5035,10 @@ 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 "Слишком много неудачных попыток входа, попробуйте позже"

+ 162 - 165
app/src/language/tr_TR/app.po

@@ -5,11 +5,11 @@ msgstr ""
 "POT-Creation-Date: \n"
 "PO-Revision-Date: 2025-04-08 18:26+0000\n"
 "Last-Translator: Ulaş <ozturkmuratulas@hotmail.com>\n"
-"Language-Team: Turkish <https://weblate.nginxui.com/projects/nginx-ui/"
-"frontend/tr/>\n"
+"Language-Team: Turkish "
+"<https://weblate.nginxui.com/projects/nginx-ui/frontend/tr/>\n"
 "Language: tr_TR\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"
@@ -116,8 +116,7 @@ msgstr "Gelişmiş Mod"
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:99
 msgid "Afterwards, refresh this page and click add passkey again."
-msgstr ""
-"Daha sonra, bu sayfayı yenileyin ve tekrar geçiş anahtarı ekle'ye tıklayın."
+msgstr "Daha sonra, bu sayfayı yenileyin ve tekrar geçiş anahtarı ekle'ye tıklayın."
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:118
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:419
@@ -241,7 +240,7 @@ msgstr "ChatGPT'den Yardım İsteyin"
 msgid "Assistant"
 msgstr "Asistan"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:50
+#: src/components/SelfCheck/SelfCheck.vue:62
 #, fuzzy
 msgid "Attempt to fix"
 msgstr "Girişimler"
@@ -600,41 +599,41 @@ msgstr ""
 msgid "Check again"
 msgstr "Tekrar kontrol et"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:31
+#: 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`."
+"Docker Image, please make sure the docker socket is mounted like this: `-v "
+"/var/run/docker.sock:/var/run/docker.sock`."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:11
+#: 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."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:26
+#: src/components/SelfCheck/tasks/backend/index.ts:26
 msgid "Check if the nginx.conf includes the conf.d directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:16
+#: src/components/SelfCheck/tasks/backend/index.ts:16
 msgid "Check if the nginx.conf includes the sites-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:21
+#: src/components/SelfCheck/tasks/backend/index.ts:21
 msgid "Check if the nginx.conf includes the streams-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:6
+#: src/components/SelfCheck/tasks/backend/index.ts:6
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
 "nginx configuration directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:11
+#: src/components/SelfCheck/tasks/backend/index.ts:11
 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 ""
 
 #: src/constants/errors/crypto.ts:3
@@ -931,7 +930,7 @@ msgstr "Ortam göstergesinde görüntülenecek yerel sunucu adını özelleştir
 msgid "Dashboard"
 msgstr "Kontrol Paneli"
 
-#: src/views/install/Install.vue:167
+#: src/views/install/components/InstallForm.vue:109
 msgid "Database (Optional, default: database)"
 msgstr "Veritabanı (İsteğe bağlı, varsayılan: database)"
 
@@ -991,8 +990,7 @@ msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 #: src/components/Notification/notifications.ts:70
 #, fuzzy
 msgid "Delete site %{name} from %{node} failed"
-msgstr ""
-"%{conf_name} yapılandırmasını %{node_name} düğümüne dağıtma başarısız oldu"
+msgstr "%{conf_name} yapılandırmasını %{node_name} düğümüne dağıtma başarısız oldu"
 
 #: src/components/Notification/notifications.ts:74
 #, fuzzy
@@ -1006,8 +1004,7 @@ msgstr "Siteyi sil: %{site_name}"
 #: src/components/Notification/notifications.ts:126
 #, fuzzy
 msgid "Delete stream %{name} from %{node} failed"
-msgstr ""
-"%{conf_name} yapılandırmasını %{node_name} düğümüne dağıtma başarısız oldu"
+msgstr "%{conf_name} yapılandırmasını %{node_name} düğümüne dağıtma başarısız oldu"
 
 #: src/components/Notification/notifications.ts:130
 #, fuzzy
@@ -1159,8 +1156,8 @@ msgstr ""
 #, fuzzy
 msgid "Disable stream %{name} from %{node} failed"
 msgstr ""
-"%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarısız "
-"oldu"
+"%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme "
+"başarısız oldu"
 
 #: src/components/Notification/notifications.ts:138
 #, fuzzy
@@ -1244,7 +1241,7 @@ msgstr "Bu upstream'i kaldırmak istiyor musunuz?"
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:30
+#: src/components/SelfCheck/tasks/backend/index.ts:30
 msgid "Docker Socket"
 msgstr ""
 
@@ -1327,7 +1324,7 @@ msgstr "Akışı Düzenle"
 msgid "Email"
 msgstr "E-posta"
 
-#: src/views/install/Install.vue:136
+#: src/views/install/components/InstallForm.vue:78
 msgid "Email (*)"
 msgstr "E-posta(*)"
 
@@ -1403,8 +1400,8 @@ msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr ""
-"%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarısız "
-"oldu"
+"%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme "
+"başarısız oldu"
 
 #: src/components/Notification/notifications.ts:98
 #, fuzzy
@@ -1417,8 +1414,8 @@ msgstr ""
 #, fuzzy
 msgid "Enable site %{name} on %{node} failed"
 msgstr ""
-"%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarısız "
-"oldu"
+"%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme "
+"başarısız oldu"
 
 #: src/components/Notification/notifications.ts:90
 #, fuzzy
@@ -1431,8 +1428,8 @@ msgstr ""
 #, fuzzy
 msgid "Enable stream %{name} on %{node} failed"
 msgstr ""
-"%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarısız "
-"oldu"
+"%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme "
+"başarısız oldu"
 
 #: src/components/Notification/notifications.ts:146
 #, fuzzy
@@ -2034,7 +2031,7 @@ msgstr "HTTP Doğrulama Bağlantı Noktası"
 msgid "HTTP01"
 msgstr "HTTP01"
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2048,8 +2045,8 @@ msgstr "Boş bırakılırsa, varsayılan CA Dir kullanılır."
 
 #: 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
@@ -2142,19 +2139,26 @@ msgstr "Kurtarma kodunu girin:"
 msgid "Insecure Skip Verify"
 msgstr ""
 
-#: src/routes/modules/auth.ts:8 src/views/install/Install.vue:183
+#: src/routes/modules/auth.ts:8
+#: src/views/install/components/InstallForm.vue:124
+#: src/views/install/components/InstallHeader.vue:9
 msgid "Install"
 msgstr "Yükle"
 
-#: src/views/install/Install.vue:91
+#: src/views/install/components/InstallForm.vue:60
 msgid "Install successfully"
 msgstr "Başarıyla yüklendi"
 
+#: src/views/install/components/InstallView.vue:62
+#, fuzzy
+msgid "Installation"
+msgstr "Yükle"
+
 #: src/constants/errors/system.ts:3
 msgid "Installation is not allowed after 10 minutes of system startup"
 msgstr ""
 
-#: src/views/install/Install.vue:125
+#: src/views/install/components/TimeoutAlert.vue:11
 msgid ""
 "Installation is not allowed after 10 minutes of system startup, please "
 "restart the Nginx UI."
@@ -2410,19 +2414,19 @@ 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."
-msgstr ""
-"Logrotate, varsayılan olarak, Nginx UI'yi ana makineye yükleyen kullanıcılar "
-"için çoğu ana akım Linux dağıtımında etkinleştirilmiştir, bu yüzden bu "
-"sayfadaki parametreleri değiştirmenize gerek yoktur. Nginx UI'yi Docker "
-"konteynerlerini kullanarak yükleyen kullanıcılar, bu seçeneği manuel olarak "
-"etkinleştirebilir. Nginx UI'nin crontab görev zamanlayıcısı, belirlediğiniz "
-"dakika aralığında logrotate komutunu çalıştıracaktır."
+"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, varsayılan olarak, Nginx UI'yi ana makineye yükleyen "
+"kullanıcılar için çoğu ana akım Linux dağıtımında etkinleştirilmiştir, bu "
+"yüzden bu sayfadaki parametreleri değiştirmenize gerek yoktur. Nginx UI'yi "
+"Docker konteynerlerini kullanarak yükleyen kullanıcılar, bu seçeneği manuel "
+"olarak etkinleştirebilir. Nginx UI'nin crontab görev zamanlayıcısı, "
+"belirlediğiniz dakika aralığında logrotate komutunu çalıştıracaktır."
 
 #: src/views/site/components/SiteStatusSegmented.vue:138
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
@@ -2667,7 +2671,7 @@ msgstr "Ağ Toplam Alım"
 msgid "Network Total Send"
 msgstr "Ağ Toplam Gönderme"
 
-#: src/views/install/Install.vue:131
+#: src/views/install/components/InstallView.vue:106
 #, fuzzy
 msgid "New Installation"
 msgstr "Yükle"
@@ -2688,6 +2692,7 @@ msgid "New version released"
 msgstr "Yeni sürüm yayınlandı"
 
 #: src/views/certificate/components/WildcardCertificate.vue:89
+#: src/views/install/components/InstallView.vue:93
 #: src/views/site/site_add/SiteAdd.vue:123
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:214
 #, fuzzy
@@ -2704,16 +2709,16 @@ msgstr "Nginx"
 msgid "Nginx Access Log Path"
 msgstr "Nginx Erişim Günlüğü Yolu"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:25
+#: src/components/SelfCheck/tasks/backend/index.ts:25
 #, fuzzy
 msgid "Nginx Conf Include Conf.d"
 msgstr "Terminal Başlatma Komutu"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:15
+#: src/components/SelfCheck/tasks/backend/index.ts:15
 msgid "Nginx Conf Include Sites Enabled"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:20
+#: src/components/SelfCheck/tasks/backend/index.ts:20
 msgid "Nginx Conf Include Streams Enabled"
 msgstr ""
 
@@ -2882,8 +2887,8 @@ msgstr "Nginx Yapılandırma Ayrıştırma Hatası"
 #: 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 Yapılandırma Ayrıştırma Hatası"
 
 #: src/components/ChatGPT/ChatGPT.vue:374
@@ -3199,7 +3204,7 @@ msgstr ""
 msgid "Password"
 msgstr "Şifre"
 
-#: src/views/install/Install.vue:156
+#: src/views/install/components/InstallForm.vue:98
 #, fuzzy
 msgid "Password (*)"
 msgstr "Şifre (*)"
@@ -3209,7 +3214,7 @@ msgstr "Şifre (*)"
 msgid "Password incorrect"
 msgstr "Kullanıcı adı veya şifre yanlış"
 
-#: src/views/install/Install.vue:72
+#: src/views/install/components/InstallForm.vue:42
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 
@@ -3298,8 +3303,8 @@ msgid ""
 "Please fill in the API authentication credentials provided by your DNS "
 "provider."
 msgstr ""
-"Lütfen DNS sağlayıcınız tarafından sağlanan API kimlik doğrulama bilgilerini "
-"doldurun."
+"Lütfen DNS sağlayıcınız tarafından sağlanan API kimlik doğrulama "
+"bilgilerini doldurun."
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:106
 #, fuzzy
@@ -3312,15 +3317,15 @@ 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 ""
-"Lütfen önce Sertifikasyon > DNS Kimlik Bilgileri bölümüne kimlik bilgilerini "
-"ekleyin ve ardından DNS sağlayıcısının API'sini istemek için aşağıdaki "
-"kimlik bilgilerinden birini seçin."
+"Lütfen önce Sertifikasyon > DNS Kimlik Bilgileri bölümüne kimlik "
+"bilgilerini ekleyin ve ardından DNS sağlayıcısının API'sini istemek için "
+"aşağıdaki kimlik bilgilerinden birini seçin."
 
 #: 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
@@ -3339,45 +3344,46 @@ msgstr "Lütfen bir klasör adı girin"
 msgid ""
 "Please input name, this will be used as the filename of the new "
 "configuration!"
-msgstr ""
-"Lütfen isim girin, bu yeni yapılandırmanın dosya adı olarak kullanılacaktır!"
+msgstr "Lütfen isim girin, bu yeni yapılandırmanın dosya adı olarak kullanılacaktır!"
 
 #: 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 ""
-"Lütfen isim girin, bu yeni yapılandırmanın dosya adı olarak kullanılacaktır!"
+msgstr "Lütfen isim girin, bu yeni yapılandırmanın dosya adı olarak kullanılacaktır!"
 
-#: src/views/install/Install.vue:56
+#: src/views/install/components/InstallForm.vue:26
 #, fuzzy
 msgid "Please input your E-mail!"
 msgstr "Lütfen e-postanızı girin!"
 
-#: src/views/install/Install.vue:68 src/views/other/Login.vue:47
+#: src/views/install/components/InstallForm.vue:38 src/views/other/Login.vue:47
 #, fuzzy
 msgid "Please input your password!"
 msgstr "Lütfen şifrenizi girin!"
 
-#: src/views/install/Install.vue:62 src/views/other/Login.vue:41
+#: src/views/install/components/InstallForm.vue:32 src/views/other/Login.vue:41
 #, fuzzy
 msgid "Please input your username!"
 msgstr "Lütfen kullanıcı adınızı girin!"
 
-#: src/views/install/Install.vue:108
+#: src/views/install/components/InstallView.vue:47
 #: src/views/system/Backup/SystemRestore.vue:10
 msgid "Please log in."
 msgstr ""
 
 #: src/views/certificate/DNSCredential.vue:62
 #, fuzzy
-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ütfen aşağıdaki zaman birimi konfigürasyonlarının tümünün saniye cinsinden "
 "olduğunu unutmayın."
 
+#: src/views/install/components/InstallView.vue:99
+msgid "Please resolve all issues before proceeding with installation"
+msgstr ""
+
 #: src/views/system/Backup/BackupCreator.vue:107
 msgid "Please save this security token, you will need it for restoration:"
 msgstr ""
@@ -3491,7 +3497,7 @@ msgstr "Okumalar"
 msgid "Receive"
 msgstr "Teslim almak"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:43
+#: src/components/SelfCheck/SelfCheck.vue:55
 msgid "Recheck"
 msgstr ""
 
@@ -3669,14 +3675,12 @@ msgstr "Yeniden Adlandır"
 #: src/components/Notification/notifications.ts:62
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
-msgstr ""
-"2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
+msgstr "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
 
 #: src/components/Notification/notifications.ts:66
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
-msgstr ""
-"2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
+msgstr "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
 
 #: src/components/Notification/notifications.ts:61 src/language/constants.ts:42
 #, fuzzy
@@ -3713,26 +3717,22 @@ msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 #: src/components/Notification/notifications.ts:110
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
-msgstr ""
-"2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
+msgstr "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
 
 #: src/components/Notification/notifications.ts:114
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
-msgstr ""
-"2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
+msgstr "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
 
 #: src/components/Notification/notifications.ts:150
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
-msgstr ""
-"2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
+msgstr "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
 
 #: src/components/Notification/notifications.ts:154
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
-msgstr ""
-"2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
+msgstr "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
 
 #: src/views/config/components/Rename.vue:43
 #, fuzzy
@@ -3856,7 +3856,7 @@ msgstr "Yeniden Başlatma"
 msgid "Restore completed successfully"
 msgstr "Başarıyla silindi"
 
-#: src/views/install/Install.vue:188
+#: src/views/install/components/InstallView.vue:109
 #, fuzzy
 msgid "Restore from Backup"
 msgstr "Sistem"
@@ -3984,8 +3984,7 @@ msgstr "%{conf_name} başarıyla %{node_name} düğümüne kopyalandı"
 #: src/components/Notification/notifications.ts:158
 #, fuzzy
 msgid "Save stream %{name} to %{node} failed"
-msgstr ""
-"%{conf_name} yapılandırmasını %{node_name} düğümüne dağıtma başarısız oldu"
+msgstr "%{conf_name} yapılandırmasını %{node_name} düğümüne dağıtma başarısız oldu"
 
 #: src/components/Notification/notifications.ts:162
 #, fuzzy
@@ -4041,7 +4040,7 @@ msgstr ""
 msgid "Selector"
 msgstr "Selektör"
 
-#: src/routes/modules/system.ts:19 src/views/system/SelfCheck/SelfCheck.vue:38
+#: src/components/SelfCheck/SelfCheck.vue:50 src/routes/modules/system.ts:19
 msgid "Self Check"
 msgstr ""
 
@@ -4114,14 +4113,18 @@ msgstr "HTTP01 meydan okuma sağlayıcısını ayarlama"
 
 #: 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:63
+msgid "Setup your Nginx UI"
 msgstr ""
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
@@ -4168,7 +4171,7 @@ msgstr "Site Günlükleri"
 msgid "Site not found"
 msgstr "Dosya bulunamadı"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:5
+#: src/components/SelfCheck/tasks/backend/index.ts:5
 #, fuzzy
 msgid "Sites Directory"
 msgstr "Dizin"
@@ -4298,7 +4301,7 @@ msgstr "Devre dışı"
 msgid "Stream not found"
 msgstr "Dosya bulunamadı"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:10
+#: src/components/SelfCheck/tasks/backend/index.ts:10
 #, fuzzy
 msgid "Streams Directory"
 msgstr "Dizin"
@@ -4321,12 +4324,12 @@ msgstr ""
 msgid "Success"
 msgstr "Başarılı"
 
-#: src/views/system/SelfCheck/tasks/frontend/websocket.ts:6
+#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
 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
@@ -4434,6 +4437,11 @@ msgstr "Sistem"
 msgid "System Backup"
 msgstr "Sistem"
 
+#: src/views/install/components/InstallView.vue:58
+#, fuzzy
+msgid "System Check"
+msgstr "Sistem"
+
 #: src/views/certificate/components/ACMEUserSelector.vue:88
 #, fuzzy
 msgid "System Initial User"
@@ -4444,7 +4452,7 @@ msgstr "Sistem İlk Kullanıcısı"
 msgid "System Restore"
 msgstr "Sistem"
 
-#: src/views/install/Install.vue:104
+#: src/views/install/components/InstallView.vue:43
 #: src/views/system/Backup/SystemRestore.vue:6
 #, fuzzy
 msgid "System restored successfully."
@@ -4478,10 +4486,10 @@ msgid ""
 "since it was last issued."
 msgstr ""
 "Etki alanı için sertifika 30 dakikada bir kontrol edilecek ve en son "
-"verilmesinden bu yana 1 haftadan veya ayarlarda belirlediğiniz süreden fazla "
-"zaman geçtiyse yenilenecektir."
+"verilmesinden bu yana 1 haftadan veya ayarlarda belirlediğiniz süreden "
+"fazla zaman geçtiyse yenilenecektir."
 
-#: src/views/install/Install.vue:78
+#: src/views/install/components/InstallForm.vue:48
 #, fuzzy
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "Dosya adı aşağıdaki karakterleri içeremez: %{c}"
@@ -4491,8 +4499,7 @@ msgstr "Dosya adı aşağıdaki karakterleri içeremez: %{c}"
 msgid ""
 "The ICP Number should only contain letters, unicode, numbers, hyphens, "
 "dashes, colons, and dots."
-msgstr ""
-"Model adı yalnızca harf, unicode, sayı, tire, çizgi ve nokta içermelidir."
+msgstr "Model adı yalnızca harf, unicode, sayı, tire, çizgi ve nokta içermelidir."
 
 #: src/views/certificate/components/CertificateEditor.vue:216
 #, fuzzy
@@ -4506,7 +4513,8 @@ msgstr "Girdi bir SSL Sertifika Anahtarı değil"
 
 #: 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
@@ -4515,12 +4523,10 @@ msgstr ""
 msgid ""
 "The model name should only contain letters, unicode, numbers, hyphens, "
 "dashes, colons, and dots."
-msgstr ""
-"Model adı yalnızca harf, unicode, sayı, tire, çizgi ve nokta içermelidir."
+msgstr "Model adı yalnızca harf, unicode, sayı, tire, çizgi ve nokta içermelidir."
 
 #: 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
@@ -4528,8 +4534,7 @@ msgstr ""
 msgid ""
 "The node name should only contain letters, unicode, numbers, hyphens, "
 "dashes, colons, and dots."
-msgstr ""
-"Model adı yalnızca harf, unicode, sayı, tire, çizgi ve nokta içermelidir."
+msgstr "Model adı yalnızca harf, unicode, sayı, tire, çizgi ve nokta içermelidir."
 
 #: src/views/site/site_add/SiteAdd.vue:95
 #, fuzzy
@@ -4642,10 +4647,8 @@ msgstr "Bu alan boş bırakılmamalıdır"
 
 #: src/constants/form_errors.ts:6
 #, fuzzy
-msgid ""
-"This field should only contain letters, unicode characters, numbers, and -_."
-msgstr ""
-"Model adı yalnızca harf, unicode, sayı, tire, çizgi ve nokta içermelidir."
+msgid "This field should only contain letters, unicode characters, numbers, and -_."
+msgstr "Model adı yalnızca harf, unicode, sayı, tire, çizgi ve nokta içermelidir."
 
 #: src/views/dashboard/NginxDashBoard.vue:153
 msgid ""
@@ -4685,8 +4688,7 @@ 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 ""
 "Bu, %{nodeNames} üzerindeki Nginx kullanıcı arayüzünü %{version}'e "
 "yükseltecek veya yeniden yükleyecektir."
@@ -4733,21 +4735,21 @@ msgid ""
 "Please manually configure the following in the app.ini configuration file "
 "and restart Nginx UI."
 msgstr ""
-"Güvenliği sağlamak için, Webauthn yapılandırması kullanıcı arayüzü üzerinden "
-"eklenemez. Lütfen app.ini yapılandırma dosyasında aşağıdakileri manuel "
-"olarak yapılandırın ve Nginx UI'yi yeniden başlatın."
+"Güvenliği sağlamak için, Webauthn yapılandırması kullanıcı arayüzü "
+"üzerinden eklenemez. Lütfen app.ini yapılandırma dosyasında aşağıdakileri "
+"manuel olarak yapılandırın ve Nginx UI'yi yeniden başlatın."
 
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:33
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:15
 #, fuzzy
 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 ""
-"Otomatik sertifika yenilemenin normal şekilde çalıştığından emin olmak için, "
-"otoriteden arka uca isteği proxyleyebilecek bir konum eklememiz ve bu "
+"Otomatik sertifika yenilemenin normal şekilde çalıştığından emin olmak "
+"için, otoriteden arka uca isteği proxyleyebilecek bir konum eklememiz ve bu "
 "dosyayı kaydedip Nginx'i yeniden yüklememiz gerekir. Devam etmek "
 "istediğinizden emin misiniz?"
 
@@ -4758,9 +4760,9 @@ msgid ""
 "provide an OpenAI-compatible API endpoint, so just set the baseUrl to your "
 "local API."
 msgstr ""
-"Yerel bir büyük model kullanmak için, vllm veya lmdeploy ile dağıtın. OpenAI "
-"uyumlu bir API uç noktası sağlarlar, bu nedenle baseUrl'yi yerel API'nize "
-"ayarlamanız yeterlidir."
+"Yerel bir büyük model kullanmak için, vllm veya lmdeploy ile dağıtın. "
+"OpenAI uyumlu bir API uç noktası sağlarlar, bu nedenle baseUrl'yi yerel "
+"API'nize ayarlamanız yeterlidir."
 
 #: src/views/dashboard/NginxDashBoard.vue:57
 #, fuzzy
@@ -4841,7 +4843,7 @@ msgstr "Tip"
 msgid "Unknown"
 msgstr ""
 
-#: src/views/system/SelfCheck/SelfCheck.vue:63
+#: src/components/SelfCheck/SelfCheck.vue:75
 msgid "Unknown issue"
 msgstr ""
 
@@ -4940,7 +4942,7 @@ msgstr ""
 msgid "Username"
 msgstr "Kullanıcı Adı"
 
-#: src/views/install/Install.vue:146
+#: src/views/install/components/InstallForm.vue:88
 #, fuzzy
 msgid "Username (*)"
 msgstr "Kullanıcı adı (*)"
@@ -4961,6 +4963,10 @@ msgstr ""
 msgid "Verify Backup File Integrity"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:59
+msgid "Verify system requirements"
+msgstr "Sistem Gereksinimlerini Doğrulun"
+
 #: src/views/environments/list/envColumns.tsx:31
 #, fuzzy
 msgid "Version"
@@ -5001,7 +5007,7 @@ msgstr "Görünüm"
 #: src/composables/usePerformanceMetrics.ts:114
 #: src/views/dashboard/components/PerformanceTablesCard.vue:73
 msgid "Waiting processes"
-msgstr ""
+msgstr "Bekleme süreçleri"
 
 #: src/constants/index.ts:23 src/views/config/InspectConfig.vue:33
 #: src/views/notification/notificationColumns.tsx:22
@@ -5031,8 +5037,8 @@ msgstr ""
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:140
 #, fuzzy
 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 yapılandırmasını bu dosyadan kaldıracağız ve Nginx'i yeniden "
 "yükleyeceğiz. Devam etmek istediğinizden emin misiniz?"
@@ -5126,8 +5132,8 @@ msgstr "Evet"
 
 #: 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
@@ -5158,8 +5164,7 @@ msgstr ""
 "ekleyemezsiniz."
 
 #: 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
@@ -5212,8 +5217,7 @@ msgstr "Geçiş anahtarlarınız"
 #~ msgstr "Yeniden Başlatma"
 
 #~ msgid "Deploy %{conf_name} to %{node_name} successfully"
-#~ msgstr ""
-#~ "%{conf_name} yapılandırması başarıyla %{node_name} düğümüne dağıtıldı"
+#~ msgstr "%{conf_name} yapılandırması başarıyla %{node_name} düğümüne dağıtıldı"
 
 #~ msgid "Deploy successfully"
 #~ msgstr "Başarıyla Dağıtıldı"
@@ -5221,8 +5225,8 @@ msgstr "Geçiş anahtarlarınız"
 #, fuzzy
 #~ msgid "Disable site %{site} on %{node} error, response: %{resp}"
 #~ msgstr ""
-#~ "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme "
-#~ "başarılı oldu"
+#~ "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
+#~ "oldu"
 
 #~ msgid "Do you want to deploy this file to remote server?"
 #~ msgid_plural "Do you want to deploy this file to remote servers?"
@@ -5237,8 +5241,8 @@ msgstr "Geçiş anahtarlarınız"
 
 #~ msgid "Enable %{conf_name} in %{node_name} successfully"
 #~ msgstr ""
-#~ "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme "
-#~ "başarılı oldu"
+#~ "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
+#~ "oldu"
 
 #~ msgid "Enable successfully"
 #~ msgstr "Başarıyla etkinleştirildi"
@@ -5250,18 +5254,14 @@ msgstr "Geçiş anahtarlarınız"
 #~ "Nginx kullanıcı arayüzünü en son sürüme yükseltin"
 
 #, 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 ""
-#~ "2] üzerinde %{orig_path}'ı %{new_path} olarak yeniden adlandırma "
-#~ "başarısız oldu, yanıt: %{resp}"
+#~ "2] üzerinde %{orig_path}'ı %{new_path} olarak yeniden adlandırma başarısız "
+#~ "oldu, yanıt: %{resp}"
 
 #, fuzzy
-#~ msgid ""
-#~ "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
-#~ msgstr ""
-#~ "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
+#~ msgid "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
+#~ msgstr "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
 
 #, fuzzy
 #~ msgid "Save site %{site} to %{node} error, response: %{resp}"
@@ -5278,8 +5278,7 @@ msgstr "Geçiş anahtarlarınız"
 #~ "lütfen uzak Nginx kullanıcı arayüzünü en son sürüme yükseltin"
 
 #, fuzzy
-#~ msgid ""
-#~ "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
+#~ msgid "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
 #~ msgstr ""
 #~ "Sertifika %{cert_name} ile %{env_name} arasında senkronizasyon başarısız "
 #~ "oldu, yanıt: %{resp}"
@@ -5301,8 +5300,8 @@ msgstr "Geçiş anahtarlarınız"
 #~ msgstr "Dosya"
 
 #~ 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 ""
 #~ "Cep telefonunuzu kaybederseniz, 2FA'nızı sıfırlamak için kurtarma kodunu "
 #~ "kullanabilirsiniz."
@@ -5319,8 +5318,7 @@ msgstr "Geçiş anahtarlarınız"
 #~ msgstr "Server hatası"
 
 #, fuzzy
-#~ 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 ""
 #~ "Kurtarma kodu yalnızca bir kez görüntülenir, lütfen güvenli bir yere "
 #~ "kaydedin."
@@ -5336,9 +5334,8 @@ msgstr "Geçiş anahtarlarınız"
 #~ "Rename %{orig_path} to %{new_path} on %{env_name} failed, please upgrade "
 #~ "the remote Nginx UI to the latest version"
 #~ msgstr ""
-#~ "2] üzerinde %{orig_path}'ı %{new_path} olarak yeniden adlandırmak "
-#~ "başarısız oldu, lütfen uzak Nginx kullanıcı arayüzünü en son sürüme "
-#~ "yükseltin"
+#~ "2] üzerinde %{orig_path}'ı %{new_path} olarak yeniden adlandırmak başarısız "
+#~ "oldu, lütfen uzak Nginx kullanıcı arayüzünü en son sürüme yükseltin"
 
 #, fuzzy
 #~ msgid "Server Name"

+ 106 - 88
app/src/language/uk_UA/app.po

@@ -4,11 +4,11 @@ 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"
@@ -116,8 +116,7 @@ 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
@@ -241,7 +240,7 @@ msgstr "Запитати допомоги у ChatGPT"
 msgid "Assistant"
 msgstr "Помічник"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:50
+#: src/components/SelfCheck/SelfCheck.vue:62
 msgid "Attempt to fix"
 msgstr "Спробувати виправити"
 
@@ -584,41 +583,41 @@ msgstr ""
 msgid "Check again"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:31
+#: 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`."
+"Docker Image, please make sure the docker socket is mounted like this: `-v "
+"/var/run/docker.sock:/var/run/docker.sock`."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:11
+#: 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."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:26
+#: src/components/SelfCheck/tasks/backend/index.ts:26
 msgid "Check if the nginx.conf includes the conf.d directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:16
+#: src/components/SelfCheck/tasks/backend/index.ts:16
 msgid "Check if the nginx.conf includes the sites-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:21
+#: src/components/SelfCheck/tasks/backend/index.ts:21
 msgid "Check if the nginx.conf includes the streams-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:6
+#: src/components/SelfCheck/tasks/backend/index.ts:6
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
 "nginx configuration directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:11
+#: src/components/SelfCheck/tasks/backend/index.ts:11
 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 ""
 
 #: src/constants/errors/crypto.ts:3
@@ -903,7 +902,7 @@ msgstr ""
 msgid "Dashboard"
 msgstr ""
 
-#: src/views/install/Install.vue:167
+#: src/views/install/components/InstallForm.vue:109
 msgid "Database (Optional, default: database)"
 msgstr ""
 
@@ -1177,7 +1176,7 @@ msgstr ""
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:30
+#: src/components/SelfCheck/tasks/backend/index.ts:30
 msgid "Docker Socket"
 msgstr ""
 
@@ -1254,7 +1253,7 @@ msgstr ""
 msgid "Email"
 msgstr ""
 
-#: src/views/install/Install.vue:136
+#: src/views/install/components/InstallForm.vue:78
 msgid "Email (*)"
 msgstr ""
 
@@ -1877,7 +1876,7 @@ msgstr ""
 msgid "HTTP01"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -1891,8 +1890,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
@@ -1975,19 +1974,25 @@ msgstr ""
 msgid "Insecure Skip Verify"
 msgstr ""
 
-#: src/routes/modules/auth.ts:8 src/views/install/Install.vue:183
+#: src/routes/modules/auth.ts:8
+#: src/views/install/components/InstallForm.vue:124
+#: src/views/install/components/InstallHeader.vue:9
 msgid "Install"
 msgstr ""
 
-#: src/views/install/Install.vue:91
+#: src/views/install/components/InstallForm.vue:60
 msgid "Install successfully"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:62
+msgid "Installation"
+msgstr ""
+
 #: src/constants/errors/system.ts:3
 msgid "Installation is not allowed after 10 minutes of system startup"
 msgstr ""
 
-#: src/views/install/Install.vue:125
+#: src/views/install/components/TimeoutAlert.vue:11
 msgid ""
 "Installation is not allowed after 10 minutes of system startup, please "
 "restart the Nginx UI."
@@ -2231,12 +2236,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
@@ -2452,7 +2457,7 @@ msgstr ""
 msgid "Network Total Send"
 msgstr ""
 
-#: src/views/install/Install.vue:131
+#: src/views/install/components/InstallView.vue:106
 msgid "New Installation"
 msgstr ""
 
@@ -2469,6 +2474,7 @@ msgid "New version released"
 msgstr ""
 
 #: src/views/certificate/components/WildcardCertificate.vue:89
+#: src/views/install/components/InstallView.vue:93
 #: src/views/site/site_add/SiteAdd.vue:123
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:214
 msgid "Next"
@@ -2482,15 +2488,15 @@ msgstr ""
 msgid "Nginx Access Log Path"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:25
+#: src/components/SelfCheck/tasks/backend/index.ts:25
 msgid "Nginx Conf Include Conf.d"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:15
+#: src/components/SelfCheck/tasks/backend/index.ts:15
 msgid "Nginx Conf Include Sites Enabled"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:20
+#: src/components/SelfCheck/tasks/backend/index.ts:20
 msgid "Nginx Conf Include Streams Enabled"
 msgstr ""
 
@@ -2637,8 +2643,8 @@ 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/components/ChatGPT/ChatGPT.vue:374
@@ -2911,7 +2917,7 @@ msgstr ""
 msgid "Password"
 msgstr ""
 
-#: src/views/install/Install.vue:156
+#: src/views/install/components/InstallForm.vue:98
 msgid "Password (*)"
 msgstr ""
 
@@ -2919,7 +2925,7 @@ msgstr ""
 msgid "Password incorrect"
 msgstr ""
 
-#: src/views/install/Install.vue:72
+#: src/views/install/components/InstallForm.vue:42
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 
@@ -3010,8 +3016,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
@@ -3035,26 +3041,29 @@ msgid ""
 "configuration."
 msgstr ""
 
-#: src/views/install/Install.vue:56
+#: src/views/install/components/InstallForm.vue:26
 msgid "Please input your E-mail!"
 msgstr ""
 
-#: src/views/install/Install.vue:68 src/views/other/Login.vue:47
+#: src/views/install/components/InstallForm.vue:38 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgstr ""
 
-#: src/views/install/Install.vue:62 src/views/other/Login.vue:41
+#: src/views/install/components/InstallForm.vue:32 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgstr ""
 
-#: src/views/install/Install.vue:108
+#: src/views/install/components/InstallView.vue:47
 #: src/views/system/Backup/SystemRestore.vue: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."
+msgid "Please note that the unit of time configurations below are all in seconds."
+msgstr ""
+
+#: src/views/install/components/InstallView.vue:99
+msgid "Please resolve all issues before proceeding with installation"
 msgstr ""
 
 #: src/views/system/Backup/BackupCreator.vue:107
@@ -3153,7 +3162,7 @@ msgstr ""
 msgid "Receive"
 msgstr ""
 
-#: src/views/system/SelfCheck/SelfCheck.vue:43
+#: src/components/SelfCheck/SelfCheck.vue:55
 msgid "Recheck"
 msgstr ""
 
@@ -3449,7 +3458,7 @@ msgstr ""
 msgid "Restore completed successfully"
 msgstr ""
 
-#: src/views/install/Install.vue:188
+#: src/views/install/components/InstallView.vue:109
 msgid "Restore from Backup"
 msgstr ""
 
@@ -3608,7 +3617,7 @@ msgstr ""
 msgid "Selector"
 msgstr ""
 
-#: src/routes/modules/system.ts:19 src/views/system/SelfCheck/SelfCheck.vue:38
+#: src/components/SelfCheck/SelfCheck.vue:50 src/routes/modules/system.ts:19
 msgid "Self Check"
 msgstr ""
 
@@ -3669,14 +3678,18 @@ 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:63
+msgid "Setup your Nginx UI"
 msgstr ""
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
@@ -3715,7 +3728,7 @@ msgstr ""
 msgid "Site not found"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:5
+#: src/components/SelfCheck/tasks/backend/index.ts:5
 msgid "Sites Directory"
 msgstr ""
 
@@ -3828,7 +3841,7 @@ msgstr ""
 msgid "Stream not found"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:10
+#: src/components/SelfCheck/tasks/backend/index.ts:10
 msgid "Streams Directory"
 msgstr ""
 
@@ -3848,12 +3861,12 @@ msgstr ""
 msgid "Success"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/websocket.ts:6
+#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
 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
@@ -3943,6 +3956,10 @@ msgstr ""
 msgid "System Backup"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:58
+msgid "System Check"
+msgstr ""
+
 #: src/views/certificate/components/ACMEUserSelector.vue:88
 msgid "System Initial User"
 msgstr ""
@@ -3951,7 +3968,7 @@ msgstr ""
 msgid "System Restore"
 msgstr ""
 
-#: src/views/install/Install.vue:104
+#: src/views/install/components/InstallView.vue:43
 #: src/views/system/Backup/SystemRestore.vue:6
 msgid "System restored successfully."
 msgstr ""
@@ -3980,7 +3997,7 @@ msgid ""
 "since it was last issued."
 msgstr ""
 
-#: src/views/install/Install.vue:78
+#: src/views/install/components/InstallForm.vue:48
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr ""
 
@@ -4000,7 +4017,8 @@ 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
@@ -4011,8 +4029,7 @@ 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
@@ -4109,8 +4126,7 @@ 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
@@ -4150,8 +4166,7 @@ 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
@@ -4195,8 +4210,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 ""
 
@@ -4278,7 +4293,7 @@ msgstr ""
 msgid "Unknown"
 msgstr ""
 
-#: src/views/system/SelfCheck/SelfCheck.vue:63
+#: src/components/SelfCheck/SelfCheck.vue:75
 msgid "Unknown issue"
 msgstr ""
 
@@ -4362,7 +4377,7 @@ msgstr ""
 msgid "Username"
 msgstr ""
 
-#: src/views/install/Install.vue:146
+#: src/views/install/components/InstallForm.vue:88
 msgid "Username (*)"
 msgstr ""
 
@@ -4381,40 +4396,44 @@ msgstr ""
 msgid "Verify Backup File Integrity"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:59
+msgid "Verify system requirements"
+msgstr "Перевірте системні вимоги"
+
 #: src/views/environments/list/envColumns.tsx:31
 msgid "Version"
-msgstr ""
+msgstr "Версія"
 
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:488
 #: src/views/nginx_log/NginxLogList.vue:97
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:83
 msgid "View"
-msgstr ""
+msgstr "Переглянути"
 
 #: src/components/Notification/Notification.vue:203
 msgid "View all notifications"
-msgstr ""
+msgstr "Переглянути всі сповіщення"
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 msgid "View Details"
-msgstr ""
+msgstr "Переглянути деталі"
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:262
 msgid "View Mode"
-msgstr ""
+msgstr "Режим перегляду"
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134
 msgid "View Recovery Codes"
-msgstr ""
+msgstr "Переглянути коди відновлення"
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70
 msgid "Viewed"
-msgstr ""
+msgstr "Переглянутий"
 
 #: src/composables/usePerformanceMetrics.ts:114
 #: src/views/dashboard/components/PerformanceTablesCard.vue:73
 msgid "Waiting processes"
-msgstr ""
+msgstr "Процеси очікування"
 
 #: src/constants/index.ts:23 src/views/config/InspectConfig.vue:33
 #: src/views/notification/notificationColumns.tsx:22
@@ -4439,8 +4458,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
@@ -4523,8 +4542,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
@@ -4550,8 +4569,7 @@ 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

+ 114 - 100
app/src/language/vi_VN/app.po

@@ -5,7 +5,7 @@ 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"
 
@@ -256,7 +256,7 @@ msgstr "Hỏi ChatGPT"
 msgid "Assistant"
 msgstr "Trợ lý"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:50
+#: src/components/SelfCheck/SelfCheck.vue:62
 msgid "Attempt to fix"
 msgstr ""
 
@@ -625,41 +625,41 @@ msgstr ""
 msgid "Check again"
 msgstr "Kiểm tra lại"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:31
+#: 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`."
+"Docker Image, please make sure the docker socket is mounted like this: `-v "
+"/var/run/docker.sock:/var/run/docker.sock`."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:11
+#: 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."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:26
+#: src/components/SelfCheck/tasks/backend/index.ts:26
 msgid "Check if the nginx.conf includes the conf.d directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:16
+#: src/components/SelfCheck/tasks/backend/index.ts:16
 msgid "Check if the nginx.conf includes the sites-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:21
+#: src/components/SelfCheck/tasks/backend/index.ts:21
 msgid "Check if the nginx.conf includes the streams-enabled directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:6
+#: src/components/SelfCheck/tasks/backend/index.ts:6
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
 "nginx configuration directory."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:11
+#: src/components/SelfCheck/tasks/backend/index.ts:11
 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 ""
 
 #: src/constants/errors/crypto.ts:3
@@ -958,7 +958,7 @@ msgstr ""
 msgid "Dashboard"
 msgstr "Bảng điều khiển"
 
-#: src/views/install/Install.vue:167
+#: src/views/install/components/InstallForm.vue:109
 msgid "Database (Optional, default: database)"
 msgstr "Tên cơ sở dữ liệu (Tuỳ chọn, Mặc định là: database)"
 
@@ -1265,7 +1265,7 @@ msgstr "Bạn muốn xóa máy chủ này ?"
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:30
+#: src/components/SelfCheck/tasks/backend/index.ts:30
 msgid "Docker Socket"
 msgstr ""
 
@@ -1348,7 +1348,7 @@ msgstr "Sửa trang web"
 msgid "Email"
 msgstr "Email (*)"
 
-#: src/views/install/Install.vue:136
+#: src/views/install/components/InstallForm.vue:78
 msgid "Email (*)"
 msgstr "Email (*)"
 
@@ -2048,7 +2048,7 @@ msgstr ""
 msgid "HTTP01"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
 msgid "HTTPS Protocol"
 msgstr ""
 
@@ -2062,8 +2062,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
@@ -2148,20 +2148,27 @@ msgstr ""
 msgid "Insecure Skip Verify"
 msgstr ""
 
-#: src/routes/modules/auth.ts:8 src/views/install/Install.vue:183
+#: src/routes/modules/auth.ts:8
+#: src/views/install/components/InstallForm.vue:124
+#: src/views/install/components/InstallHeader.vue:9
 msgid "Install"
 msgstr "Cài đặt"
 
-#: src/views/install/Install.vue:91
+#: src/views/install/components/InstallForm.vue:60
 #, fuzzy
 msgid "Install successfully"
 msgstr "Cài đặt thành công"
 
+#: src/views/install/components/InstallView.vue:62
+#, fuzzy
+msgid "Installation"
+msgstr "Cài đặt"
+
 #: src/constants/errors/system.ts:3
 msgid "Installation is not allowed after 10 minutes of system startup"
 msgstr ""
 
-#: src/views/install/Install.vue:125
+#: src/views/install/components/TimeoutAlert.vue:11
 msgid ""
 "Installation is not allowed after 10 minutes of system startup, please "
 "restart the Nginx UI."
@@ -2427,12 +2434,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
@@ -2457,8 +2464,9 @@ 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
@@ -2664,7 +2672,7 @@ msgstr "Tổng lưu lượng mạng đã nhận"
 msgid "Network Total Send"
 msgstr "Tổng lưu lượng mạng đã gửi"
 
-#: src/views/install/Install.vue:131
+#: src/views/install/components/InstallView.vue:106
 #, fuzzy
 msgid "New Installation"
 msgstr "Cài đặt"
@@ -2684,6 +2692,7 @@ msgid "New version released"
 msgstr "Đã có phiên bản mới"
 
 #: src/views/certificate/components/WildcardCertificate.vue:89
+#: src/views/install/components/InstallView.vue:93
 #: src/views/site/site_add/SiteAdd.vue:123
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:214
 msgid "Next"
@@ -2697,15 +2706,15 @@ msgstr ""
 msgid "Nginx Access Log Path"
 msgstr "Vị trí lưu log truy cập (Access log) của Nginx"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:25
+#: src/components/SelfCheck/tasks/backend/index.ts:25
 msgid "Nginx Conf Include Conf.d"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:15
+#: src/components/SelfCheck/tasks/backend/index.ts:15
 msgid "Nginx Conf Include Sites Enabled"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:20
+#: src/components/SelfCheck/tasks/backend/index.ts:20
 msgid "Nginx Conf Include Streams Enabled"
 msgstr ""
 
@@ -2865,8 +2874,8 @@ 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/components/ChatGPT/ChatGPT.vue:374
@@ -3152,7 +3161,7 @@ msgstr ""
 msgid "Password"
 msgstr "Mật khẩu"
 
-#: src/views/install/Install.vue:156
+#: src/views/install/components/InstallForm.vue:98
 msgid "Password (*)"
 msgstr "Mật khẩu (*)"
 
@@ -3161,7 +3170,7 @@ msgstr "Mật khẩu (*)"
 msgid "Password incorrect"
 msgstr "Tên người dùng hoặc mật khẩu không chính xác"
 
-#: src/views/install/Install.vue:72
+#: src/views/install/components/InstallForm.vue:42
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 
@@ -3238,8 +3247,7 @@ 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"
@@ -3250,14 +3258,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
@@ -3275,39 +3283,40 @@ 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/Install.vue:56
+#: src/views/install/components/InstallForm.vue:26
 msgid "Please input your E-mail!"
 msgstr "Vui lòng nhập E-mail của bạn!"
 
-#: src/views/install/Install.vue:68 src/views/other/Login.vue:47
+#: src/views/install/components/InstallForm.vue:38 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgstr "Vui lòng nhập mật khẩu!"
 
-#: src/views/install/Install.vue:62 src/views/other/Login.vue:41
+#: src/views/install/components/InstallForm.vue:32 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgstr "Vui lòng nhập username!"
 
-#: src/views/install/Install.vue:108
+#: src/views/install/components/InstallView.vue:47
 #: src/views/system/Backup/SystemRestore.vue: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."
+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:99
+msgid "Please resolve all issues before proceeding with installation"
+msgstr ""
+
 #: src/views/system/Backup/BackupCreator.vue:107
 msgid "Please save this security token, you will need it for restoration:"
 msgstr ""
@@ -3408,7 +3417,7 @@ msgstr "Đọc"
 msgid "Receive"
 msgstr "Nhận"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:43
+#: src/components/SelfCheck/SelfCheck.vue:55
 msgid "Recheck"
 msgstr ""
 
@@ -3747,7 +3756,7 @@ msgstr "Đang khởi động lại"
 msgid "Restore completed successfully"
 msgstr "Đã xoá thành công"
 
-#: src/views/install/Install.vue:188
+#: src/views/install/components/InstallView.vue:109
 #, fuzzy
 msgid "Restore from Backup"
 msgstr "Thông tin"
@@ -3921,7 +3930,7 @@ msgstr ""
 msgid "Selector"
 msgstr "Bộ chọn"
 
-#: src/routes/modules/system.ts:19 src/views/system/SelfCheck/SelfCheck.vue:38
+#: src/components/SelfCheck/SelfCheck.vue:50 src/routes/modules/system.ts:19
 msgid "Self Check"
 msgstr ""
 
@@ -3986,14 +3995,18 @@ 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:63
+msgid "Setup your Nginx UI"
 msgstr ""
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
@@ -4037,7 +4050,7 @@ msgstr "Logs"
 msgid "Site not found"
 msgstr "Không tìm thấy tệp tin"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:5
+#: src/components/SelfCheck/tasks/backend/index.ts:5
 #, fuzzy
 msgid "Sites Directory"
 msgstr "Thư mục"
@@ -4158,7 +4171,7 @@ msgstr "Đã tắt"
 msgid "Stream not found"
 msgstr "Không tìm thấy tệp tin"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:10
+#: src/components/SelfCheck/tasks/backend/index.ts:10
 #, fuzzy
 msgid "Streams Directory"
 msgstr "Thư mục"
@@ -4180,12 +4193,12 @@ msgstr ""
 msgid "Success"
 msgstr "Thành công"
 
-#: src/views/system/SelfCheck/tasks/frontend/websocket.ts:6
+#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
 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
@@ -4286,6 +4299,11 @@ msgstr "Thông tin"
 msgid "System Backup"
 msgstr "Thông tin"
 
+#: src/views/install/components/InstallView.vue:58
+#, fuzzy
+msgid "System Check"
+msgstr "Thông tin"
+
 #: src/views/certificate/components/ACMEUserSelector.vue:88
 msgid "System Initial User"
 msgstr ""
@@ -4295,7 +4313,7 @@ msgstr ""
 msgid "System Restore"
 msgstr "Thông tin"
 
-#: src/views/install/Install.vue:104
+#: src/views/install/components/InstallView.vue:43
 #: src/views/system/Backup/SystemRestore.vue:6
 #, fuzzy
 msgid "System restored successfully."
@@ -4329,7 +4347,7 @@ msgstr ""
 "Chứng chỉ cho miền sẽ được kiểm tra 5 phút / lần và sẽ được gia hạn nếu đã "
 "hơn 1 tuần kể từ lần cuối nó được cấp."
 
-#: src/views/install/Install.vue:78
+#: src/views/install/components/InstallForm.vue:48
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "Tên tệp không thể chứa các ký tự sau: %{c}"
 
@@ -4349,7 +4367,8 @@ 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
@@ -4360,8 +4379,7 @@ 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
@@ -4401,8 +4419,7 @@ 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
@@ -4463,8 +4480,7 @@ 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
@@ -4504,8 +4520,7 @@ 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
@@ -4549,13 +4564,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
@@ -4636,7 +4651,7 @@ msgstr "Loại"
 msgid "Unknown"
 msgstr ""
 
-#: src/views/system/SelfCheck/SelfCheck.vue:63
+#: src/components/SelfCheck/SelfCheck.vue:75
 msgid "Unknown issue"
 msgstr ""
 
@@ -4726,7 +4741,7 @@ msgstr ""
 msgid "Username"
 msgstr "Username"
 
-#: src/views/install/Install.vue:146
+#: src/views/install/components/InstallForm.vue:88
 msgid "Username (*)"
 msgstr "Username (*)"
 
@@ -4745,6 +4760,10 @@ msgstr ""
 msgid "Verify Backup File Integrity"
 msgstr ""
 
+#: src/views/install/components/InstallView.vue:59
+msgid "Verify system requirements"
+msgstr "Xác minh các yêu cầu hệ thống"
+
 #: src/views/environments/list/envColumns.tsx:31
 #, fuzzy
 msgid "Version"
@@ -4773,7 +4792,7 @@ msgstr "Cơ bản"
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134
 msgid "View Recovery Codes"
-msgstr ""
+msgstr "Xem mã phục hồi"
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70
 #, fuzzy
@@ -4783,7 +4802,7 @@ msgstr "Xem"
 #: src/composables/usePerformanceMetrics.ts:114
 #: src/views/dashboard/components/PerformanceTablesCard.vue:73
 msgid "Waiting processes"
-msgstr ""
+msgstr "Quá trình chờ đợi"
 
 #: src/constants/index.ts:23 src/views/config/InspectConfig.vue:33
 #: src/views/notification/notificationColumns.tsx:22
@@ -4810,8 +4829,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?"
@@ -4897,8 +4916,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
@@ -4924,8 +4943,7 @@ 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
@@ -5011,14 +5029,11 @@ 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
@@ -5032,8 +5047,7 @@ 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

+ 162 - 202
app/src/language/zh_CN/app.po

@@ -5,11 +5,11 @@ msgstr ""
 "POT-Creation-Date: \n"
 "PO-Revision-Date: 2025-04-22 22:15+0800\n"
 "Last-Translator: 0xJacky <me@jackyu.cn>\n"
-"Language-Team: Chinese (Simplified Han script) <https://weblate.nginxui.com/"
-"projects/nginx-ui/frontend/zh_Hans/>\n"
+"Language-Team: Chinese (Simplified Han script) "
+"<https://weblate.nginxui.com/projects/nginx-ui/frontend/zh_Hans/>\n"
 "Language: zh_CN\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=1; plural=0;\n"
 "X-Generator: Poedit 3.6\n"
@@ -239,7 +239,7 @@ msgstr "与ChatGPT聊天"
 msgid "Assistant"
 msgstr "助手"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:50
+#: src/components/SelfCheck/SelfCheck.vue:62
 msgid "Attempt to fix"
 msgstr "尝试修复"
 
@@ -436,9 +436,7 @@ msgstr "CADir"
 msgid ""
 "Calculated based on worker_processes * worker_connections. Actual "
 "performance depends on hardware, configuration, and workload"
-msgstr ""
-"根据 worker_processes * worker_connections 计算。实际性能取决于硬件、配置和工"
-"作量"
+msgstr "根据 worker_processes * worker_connections 计算。实际性能取决于硬件、配置和工作量"
 
 #: src/components/ChatGPT/ChatGPT.vue:356
 #: src/components/NgxConfigEditor/NgxServer.vue:54
@@ -580,48 +578,44 @@ msgstr "聊天"
 msgid "Check again"
 msgstr "重新检查"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:31
+#: 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`."
+"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 "
-"Image,请确保 Docker Socket 像这样挂载:`-v /var/run/docker.sock:/var/run/"
-"docker.sock`."
+"检查 /var/run/docker.sock 是否存在。如果你使用的是 Nginx UI 官方 Docker Image,请确保 Docker "
+"Socket 像这样挂载:`-v /var/run/docker.sock:/var/run/docker.sock`."
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:11
+#: 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."
-msgstr ""
-"检查是否启用了 HTTPS。在本地主机之外使用 HTTP 是不安全的,这也会导致无法使用 "
-"Passkey 和剪贴板功能。"
+msgstr "检查是否启用了 HTTPS。在本地主机之外使用 HTTP 是不安全的,这也会导致无法使用 Passkey 和剪贴板功能。"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:26
+#: src/components/SelfCheck/tasks/backend/index.ts:26
 msgid "Check if the nginx.conf includes the conf.d directory."
 msgstr "检查 nginx.conf 是否包含 conf.d 目录。"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:16
+#: src/components/SelfCheck/tasks/backend/index.ts:16
 msgid "Check if the nginx.conf includes the sites-enabled directory."
 msgstr "检查 nginx.conf 是否包含 sites-enabled 的目录。"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:21
+#: src/components/SelfCheck/tasks/backend/index.ts:21
 msgid "Check if the nginx.conf includes the streams-enabled directory."
 msgstr "检查 nginx.conf 是否包含 streams-enabled 的目录。"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:6
+#: src/components/SelfCheck/tasks/backend/index.ts:6
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
 "nginx configuration directory."
 msgstr "检查 sites-available 和 sites-enabled 目录是否位于 nginx 配置目录下。"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:11
+#: src/components/SelfCheck/tasks/backend/index.ts:11
 msgid ""
-"Check if the streams-available and streams-enabled directories are under the "
-"nginx configuration directory."
-msgstr ""
-"检查 nginx 配置目录下是否有 streams-available 和 streams-enabled 目录。"
+"Check if the streams-available and streams-enabled directories are under "
+"the nginx configuration directory."
+msgstr "检查 nginx 配置目录下是否有 streams-available 和 streams-enabled 目录。"
 
 #: src/constants/errors/crypto.ts:3
 msgid "Cipher text is too short"
@@ -839,8 +833,7 @@ 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
@@ -906,7 +899,7 @@ msgstr "自定义显示在环境指示器中的本地服务器名称。"
 msgid "Dashboard"
 msgstr "仪表盘"
 
-#: src/views/install/Install.vue:167
+#: src/views/install/components/InstallForm.vue:109
 msgid "Database (Optional, default: database)"
 msgstr "数据库 (可选,默认: database)"
 
@@ -1180,7 +1173,7 @@ msgstr "你想删除这个 Upstream 吗?"
 msgid "Docker client not initialized"
 msgstr "Docker 客户端未初始化"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:30
+#: src/components/SelfCheck/tasks/backend/index.ts:30
 msgid "Docker Socket"
 msgstr "Docker Socket"
 
@@ -1215,9 +1208,7 @@ msgstr "试运行模式已启动"
 msgid ""
 "Due to the security policies of some browsers, you cannot use passkeys on "
 "non-HTTPS websites, except when running on localhost."
-msgstr ""
-"由于某些浏览器的安全策略,除非在 localhost 上使用,否则不能在非 HTTPS 网站上"
-"使用 Passkey。"
+msgstr "由于某些浏览器的安全策略,除非在 localhost 上使用,否则不能在非 HTTPS 网站上使用 Passkey。"
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteList.vue:117
@@ -1257,7 +1248,7 @@ msgstr "编辑 Stream"
 msgid "Email"
 msgstr "邮箱"
 
-#: src/views/install/Install.vue:136
+#: src/views/install/components/InstallForm.vue:78
 msgid "Email (*)"
 msgstr "邮箱 (*)"
 
@@ -1880,7 +1871,7 @@ msgstr "HTTP Challenge 监听端口"
 msgid "HTTP01"
 msgstr "HTTP01"
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
 msgid "HTTPS Protocol"
 msgstr "HTTPS 协议"
 
@@ -1894,18 +1885,15 @@ msgstr "如果留空,则使用默认 CA Dir。"
 
 #: 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."
-msgstr ""
-"如果日志未被索引,请检查日志文件是否位于 Nginx.LogDirWhiteList 中的目录下。"
+"If logs are not indexed, please check if the log file is under the "
+"directory in Nginx.LogDirWhiteList."
+msgstr "如果日志未被索引,请检查日志文件是否位于 Nginx.LogDirWhiteList 中的目录下。"
 
 #: src/views/preference/tabs/AuthSettings.vue:145
 msgid ""
 "If the number of login failed attempts from a ip reach the max attempts in "
 "ban threshold minutes, the ip will be banned for a period of time."
-msgstr ""
-"如果某个 IP 的登录失败次数达到禁用阈值分钟内的最大尝试次数,该 IP 将被禁止登"
-"录一段时间。"
+msgstr "如果某个 IP 的登录失败次数达到禁用阈值分钟内的最大尝试次数,该 IP 将被禁止登录一段时间。"
 
 #: src/components/AutoCertForm/AutoCertForm.vue:116
 msgid ""
@@ -1981,19 +1969,26 @@ msgstr "输入恢复代码:"
 msgid "Insecure Skip Verify"
 msgstr "跳过证书认证"
 
-#: src/routes/modules/auth.ts:8 src/views/install/Install.vue:183
+#: src/routes/modules/auth.ts:8
+#: src/views/install/components/InstallForm.vue:124
+#: src/views/install/components/InstallHeader.vue:9
 msgid "Install"
 msgstr "安装"
 
-#: src/views/install/Install.vue:91
+#: src/views/install/components/InstallForm.vue:60
 msgid "Install successfully"
 msgstr "安装成功"
 
+#: src/views/install/components/InstallView.vue:62
+#, fuzzy
+msgid "Installation"
+msgstr "新安装"
+
 #: src/constants/errors/system.ts:3
 msgid "Installation is not allowed after 10 minutes of system startup"
 msgstr "系统启动 10 分钟后不允许安装"
 
-#: src/views/install/Install.vue:125
+#: src/views/install/components/TimeoutAlert.vue:11
 msgid ""
 "Installation is not allowed after 10 minutes of system startup, please "
 "restart the Nginx UI."
@@ -2088,8 +2083,7 @@ msgstr "Jwt 密钥"
 msgid ""
 "Keep your recovery codes as safe as your password. We recommend saving them "
 "with a password manager."
-msgstr ""
-"请像保护密码一样安全地保管您的恢复代码。我们建议使用密码管理器保存它们。"
+msgstr "请像保护密码一样安全地保管您的恢复代码。我们建议使用密码管理器保存它们。"
 
 #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:60
 msgid "Keepalive Timeout"
@@ -2238,17 +2232,16 @@ 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 ""
-"对于在宿主机上安装 Nginx UI 的用户,大多数主流 Linux 发行版都默认启用 "
-"logrotate 定时任务,因此您无需修改本页面的参数。对于使用 Docker 容器安装 "
-"Nginx 用户界面的用户,您可以手动启用该选项。Nginx UI 的定时任务任务调度器将按"
-"照您设置的时间间隔(以分钟为单位)执行 logrotate 命令。"
+"对于在宿主机上安装 Nginx UI 的用户,大多数主流 Linux 发行版都默认启用 logrotate "
+"定时任务,因此您无需修改本页面的参数。对于使用 Docker 容器安装 Nginx 用户界面的用户,您可以手动启用该选项。Nginx UI "
+"的定时任务任务调度器将按照您设置的时间间隔(以分钟为单位)执行 logrotate 命令。"
 
 #: src/views/site/components/SiteStatusSegmented.vue:138
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
@@ -2268,9 +2261,7 @@ msgstr "成功启用维护模式"
 msgid ""
 "Make sure you have configured a reverse proxy for .well-known directory to "
 "HTTPChallengePort before obtaining the certificate."
-msgstr ""
-"在获取签发证书前,请确保配置文件中已将 .well-known 目录反向代理到 "
-"HTTPChallengePort。"
+msgstr "在获取签发证书前,请确保配置文件中已将 .well-known 目录反向代理到 HTTPChallengePort。"
 
 #: src/routes/modules/config.ts:10 src/views/config/ConfigEditor.vue:115
 #: src/views/config/ConfigEditor.vue:166 src/views/config/ConfigList.vue:72
@@ -2465,7 +2456,7 @@ msgstr "下载流量"
 msgid "Network Total Send"
 msgstr "上传流量"
 
-#: src/views/install/Install.vue:131
+#: src/views/install/components/InstallView.vue:106
 msgid "New Installation"
 msgstr "新安装"
 
@@ -2482,6 +2473,7 @@ msgid "New version released"
 msgstr "新版本发布"
 
 #: src/views/certificate/components/WildcardCertificate.vue:89
+#: src/views/install/components/InstallView.vue:93
 #: src/views/site/site_add/SiteAdd.vue:123
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:214
 msgid "Next"
@@ -2495,15 +2487,15 @@ msgstr "Nginx"
 msgid "Nginx Access Log Path"
 msgstr "Nginx 访问日志路径"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:25
+#: src/components/SelfCheck/tasks/backend/index.ts:25
 msgid "Nginx Conf Include Conf.d"
 msgstr "Nginx Conf 包括 Conf.d"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:15
+#: src/components/SelfCheck/tasks/backend/index.ts:15
 msgid "Nginx Conf Include Sites Enabled"
 msgstr "Nginx Conf 中引用启用站点目录"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:20
+#: src/components/SelfCheck/tasks/backend/index.ts:20
 msgid "Nginx Conf Include Streams Enabled"
 msgstr "Nginx Conf 中引用启用 Streams 目录"
 
@@ -2650,8 +2642,8 @@ msgstr "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 "Nginx UI 配置已恢复,几秒钟后将自动重启。"
 
 #: src/components/ChatGPT/ChatGPT.vue:374
@@ -2918,15 +2910,13 @@ msgid ""
 "Passkeys are webauthn credentials that validate your identity using touch, "
 "facial recognition, a device password, or a PIN. They can be used as a "
 "password replacement or as a 2FA method."
-msgstr ""
-"Passkey 是一种网络认证凭据,可通过指纹、面部识别、设备密码或 PIN 码验证身份。"
-"它们可用作密码替代品或二步验证方法。"
+msgstr "Passkey 是一种网络认证凭据,可通过指纹、面部识别、设备密码或 PIN 码验证身份。它们可用作密码替代品或二步验证方法。"
 
 #: src/views/other/Login.vue:183 src/views/user/userColumns.tsx:18
 msgid "Password"
 msgstr "密码"
 
-#: src/views/install/Install.vue:156
+#: src/views/install/components/InstallForm.vue:98
 msgid "Password (*)"
 msgstr "密码 (*)"
 
@@ -2934,7 +2924,7 @@ msgstr "密码 (*)"
 msgid "Password incorrect"
 msgstr "用户名和密码错误"
 
-#: src/views/install/Install.vue:72
+#: src/views/install/components/InstallForm.vue:42
 msgid "Password length cannot exceed 20 characters"
 msgstr "密码长度不能超过 20 个字符"
 
@@ -3020,15 +3010,13 @@ 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
@@ -3052,28 +3040,31 @@ msgid ""
 "configuration."
 msgstr "请输入名称,这将作为新配置的文件名。"
 
-#: src/views/install/Install.vue:56
+#: src/views/install/components/InstallForm.vue:26
 msgid "Please input your E-mail!"
 msgstr "请输入您的邮箱!"
 
-#: src/views/install/Install.vue:68 src/views/other/Login.vue:47
+#: src/views/install/components/InstallForm.vue:38 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgstr "请输入您的密码!"
 
-#: src/views/install/Install.vue:62 src/views/other/Login.vue:41
+#: src/views/install/components/InstallForm.vue:32 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgstr "请输入您的用户名!"
 
-#: src/views/install/Install.vue:108
+#: src/views/install/components/InstallView.vue:47
 #: src/views/system/Backup/SystemRestore.vue: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."
+msgid "Please note that the unit of time configurations below are all in seconds."
 msgstr "请注意,下面的时间单位配置均以秒为单位。"
 
+#: src/views/install/components/InstallView.vue:99
+msgid "Please resolve all issues before proceeding with installation"
+msgstr ""
+
 #: src/views/system/Backup/BackupCreator.vue:107
 msgid "Please save this security token, you will need it for restoration:"
 msgstr "请保存此安全令牌,恢复时会用到它:"
@@ -3170,7 +3161,7 @@ msgstr "读"
 msgid "Receive"
 msgstr "下载"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:43
+#: src/components/SelfCheck/SelfCheck.vue:55
 msgid "Recheck"
 msgstr "重新检查"
 
@@ -3195,9 +3186,7 @@ msgstr "恢复代码"
 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 ""
-"恢复代码用于在您无法访问双重身份验证设备时登录您的账户。每个代码只能使用一"
-"次。"
+msgstr "恢复代码用于在您无法访问双重身份验证设备时登录您的账户。每个代码只能使用一次。"
 
 #: src/views/preference/tabs/CertSettings.vue:40
 msgid "Recursive Nameservers"
@@ -3423,9 +3412,7 @@ msgid ""
 "Resident Set Size: Actual memory resident in physical memory, including all "
 "shared library memory, which will be repeated calculated for multiple "
 "processes"
-msgstr ""
-"驻留集大小:实际驻留在物理内存中的内存,包括所有共享库内存,将为多个进程重复"
-"计算"
+msgstr "驻留集大小:实际驻留在物理内存中的内存,包括所有共享库内存,将为多个进程重复计算"
 
 #: src/composables/usePerformanceMetrics.ts:109
 #: src/views/dashboard/components/PerformanceTablesCard.vue:68
@@ -3470,7 +3457,7 @@ msgstr "重启中"
 msgid "Restore completed successfully"
 msgstr "恢复成功"
 
-#: src/views/install/Install.vue:188
+#: src/views/install/components/InstallView.vue:109
 msgid "Restore from Backup"
 msgstr "从备份还原"
 
@@ -3629,7 +3616,7 @@ msgstr "选择同步后的操作"
 msgid "Selector"
 msgstr "选择器"
 
-#: src/routes/modules/system.ts:19 src/views/system/SelfCheck/SelfCheck.vue:38
+#: src/components/SelfCheck/SelfCheck.vue:50 src/routes/modules/system.ts:19
 msgid "Self Check"
 msgstr "自我检查"
 
@@ -3690,19 +3677,23 @@ msgstr "使用 HTTP01 challenge provider"
 
 #: 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 ""
-"Settings.NginxLogSettings.AccessLogPath 为空,更多信息请参阅 https://"
-"nginxui.com/guide/config-nginx.html"
+"Settings.NginxLogSettings.AccessLogPath 为空,更多信息请参阅 "
+"https://nginxui.com/guide/config-nginx.html"
 
 #: 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 ""
+"Settings.NginxLogSettings.ErrorLogPath为空,更多信息请参阅 "
+"https://nginxui.com/guide/config-nginx.html"
+
+#: src/views/install/components/InstallView.vue:63
+msgid "Setup your Nginx UI"
 msgstr ""
-"Settings.NginxLogSettings.ErrorLogPath为空,更多信息请参阅 https://"
-"nginxui.com/guide/config-nginx.html"
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
 msgid "Shared Memory Zone"
@@ -3740,7 +3731,7 @@ msgstr "站点列表"
 msgid "Site not found"
 msgstr "网站未找到"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:5
+#: src/components/SelfCheck/tasks/backend/index.ts:5
 msgid "Sites Directory"
 msgstr "网站目录"
 
@@ -3853,7 +3844,7 @@ msgstr "Stream 已启用"
 msgid "Stream not found"
 msgstr "Stream 未找到"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:10
+#: src/components/SelfCheck/tasks/backend/index.ts:10
 msgid "Streams Directory"
 msgstr "Streams 目录"
 
@@ -3873,12 +3864,12 @@ msgstr "Stub 状态端口"
 msgid "Success"
 msgstr "成功"
 
-#: src/views/system/SelfCheck/tasks/frontend/websocket.ts:6
+#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
 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 ""
 "支持通过 WebSocket 协议与后端通信,如果您正在使用 Nginx 反向代理了 Nginx UI "
 "请参考:https://nginxui.com/guide/nginx-proxy-example.html 编写配置文件"
@@ -3970,6 +3961,11 @@ msgstr "系统"
 msgid "System Backup"
 msgstr "系统备份"
 
+#: src/views/install/components/InstallView.vue:58
+#, fuzzy
+msgid "System Check"
+msgstr "自我检查"
+
 #: src/views/certificate/components/ACMEUserSelector.vue:88
 msgid "System Initial User"
 msgstr "系统初始用户"
@@ -3978,7 +3974,7 @@ msgstr "系统初始用户"
 msgid "System Restore"
 msgstr "系统还原"
 
-#: src/views/install/Install.vue:104
+#: src/views/install/components/InstallView.vue:43
 #: src/views/system/Backup/SystemRestore.vue:6
 msgid "System restored successfully."
 msgstr "系统恢复成功。"
@@ -4005,11 +4001,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 ""
-"域名证书将在 30 分钟内接受检查,如果距离上次签发证书的时间超过 1 周或您在设置"
-"中设定的时间,证书将被更新。"
+msgstr "域名证书将在 30 分钟内接受检查,如果距离上次签发证书的时间超过 1 周或您在设置中设定的时间,证书将被更新。"
 
-#: src/views/install/Install.vue:78
+#: src/views/install/components/InstallForm.vue:48
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "文件名不能包含以下字符: %{c}"
 
@@ -4029,7 +4023,8 @@ 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 "日志路径不在 settings.NginxSettings.LogDirWhiteList 中的路径之下"
 
 #: src/views/preference/tabs/OpenAISettings.vue:23
@@ -4040,8 +4035,7 @@ 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
@@ -4073,9 +4067,7 @@ msgid ""
 "The remote Nginx UI version is not compatible with the local Nginx UI "
 "version. To avoid potential errors, please upgrade the remote Nginx UI to "
 "match the local version."
-msgstr ""
-"远程 Nginx UI 版本与本地 Nginx UI版本不兼容。为避免意料之外的错误,请升级远"
-"程 Nginx UI,使其与本地版本一致。"
+msgstr "远程 Nginx UI 版本与本地 Nginx UI版本不兼容。为避免意料之外的错误,请升级远程 Nginx UI,使其与本地版本一致。"
 
 #: src/components/AutoCertForm/AutoCertForm.vue:43
 msgid ""
@@ -4110,9 +4102,7 @@ msgid ""
 "These codes are the last resort for accessing your account in case you lose "
 "your password and second factors. If you cannot find these codes, you will "
 "lose access to your account."
-msgstr ""
-"这些代码是在您丢失密码和双重身份验证方式时,访问账户的最后手段。如果找不到这"
-"些代码,您将无法再访问您的账户。"
+msgstr "这些代码是在您丢失密码和双重身份验证方式时,访问账户的最后手段。如果找不到这些代码,您将无法再访问您的账户。"
 
 #: src/views/certificate/components/CertificateEditor.vue:102
 msgid "This Auto Cert item is invalid, please remove it."
@@ -4142,8 +4132,7 @@ 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 "该字段只能包含字母、unicode 字符、数字和 -_。"
 
 #: src/views/dashboard/NginxDashBoard.vue:153
@@ -4183,8 +4172,7 @@ msgid ""
 msgstr "这将恢复配置文件和数据库。恢复完成后,Nginx UI 将重新启动。"
 
 #: 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 "将 %{nodeNames} 上的 Nginx UI 升级或重新安装到 %{version} 版本。"
 
 #: src/views/preference/tabs/AuthSettings.vue:124
@@ -4201,8 +4189,7 @@ msgstr "提示"
 msgid ""
 "Tips: You can increase the concurrency processing capacity by increasing "
 "worker_processes or worker_connections"
-msgstr ""
-"提示您可以通过增加 worker_processes 或 worker_connections 来提高并发处理能力"
+msgstr "提示您可以通过增加 worker_processes 或 worker_connections 来提高并发处理能力"
 
 #: src/views/notification/notificationColumns.tsx:45
 msgid "Title"
@@ -4216,28 +4203,25 @@ msgstr "要确认撤销,请在下面的字段中输入 \"撤销\":"
 msgid ""
 "To enable it, you need to install the Google or Microsoft Authenticator app "
 "on your mobile phone."
-msgstr ""
-"要启用该功能,您需要在手机上安装 Google 或 Microsoft Authenticator 应用程序。"
+msgstr "要启用该功能,您需要在手机上安装 Google 或 Microsoft Authenticator 应用程序。"
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:89
 msgid ""
 "To ensure security, Webauthn configuration cannot be added through the UI. "
 "Please manually configure the following in the app.ini configuration file "
 "and restart Nginx UI."
-msgstr ""
-"为确保安全,Webauthn 配置不能通过用户界面添加。请在 app.ini 配置文件中手动配"
-"置以下内容,并重启 Nginx UI 服务。"
+msgstr "为确保安全,Webauthn 配置不能通过用户界面添加。请在 app.ini 配置文件中手动配置以下内容,并重启 Nginx UI 服务。"
 
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:33
 #: 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 ""
-"为了确保认证自动更新能够正常工作,我们需要添加一个能够代理从权威机构到后端的"
-"请求的 Location,并且我们需要保存这个文件并重新加载Nginx。你确定要继续吗?"
+"为了确保认证自动更新能够正常工作,我们需要添加一个能够代理从权威机构到后端的请求的 "
+"Location,并且我们需要保存这个文件并重新加载Nginx。你确定要继续吗?"
 
 #: src/views/preference/tabs/OpenAISettings.vue:36
 msgid ""
@@ -4245,8 +4229,8 @@ msgid ""
 "provide an OpenAI-compatible API endpoint, so just set the baseUrl to your "
 "local API."
 msgstr ""
-"要使用本地大型模型,可使用 ollama、vllm 或 lmdeploy 进行部署。它们提供了与 "
-"OpenAI 兼容的 API 端点,因此只需将 baseUrl 设置为本地 API 即可。"
+"要使用本地大型模型,可使用 ollama、vllm 或 lmdeploy 进行部署。它们提供了与 OpenAI 兼容的 API 端点,因此只需将 "
+"baseUrl 设置为本地 API 即可。"
 
 #: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
@@ -4317,7 +4301,7 @@ msgstr "类型"
 msgid "Unknown"
 msgstr "未知"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:63
+#: src/components/SelfCheck/SelfCheck.vue:75
 msgid "Unknown issue"
 msgstr "未知问题"
 
@@ -4401,7 +4385,7 @@ msgstr "用户未启用 OTP 作为 2FA"
 msgid "Username"
 msgstr "用户名"
 
-#: src/views/install/Install.vue:146
+#: src/views/install/components/InstallForm.vue:88
 msgid "Username (*)"
 msgstr "用户名 (*)"
 
@@ -4420,6 +4404,10 @@ msgstr "值"
 msgid "Verify Backup File Integrity"
 msgstr "验证备份文件的完整性"
 
+#: src/views/install/components/InstallView.vue:59
+msgid "Verify system requirements"
+msgstr "验证系统要求"
+
 #: src/views/environments/list/envColumns.tsx:31
 msgid "Version"
 msgstr "版本"
@@ -4468,9 +4456,7 @@ msgid ""
 "Warning: Restore operation will overwrite current configurations. Make sure "
 "you have a valid backup file and security token, and carefully select what "
 "to restore."
-msgstr ""
-"警告:还原操作将覆盖当前配置。请确保您有有效的备份文件和安全令牌,并仔细选择"
-"要还原的内容。"
+msgstr "警告:还原操作将覆盖当前配置。请确保您有有效的备份文件和安全令牌,并仔细选择要还原的内容。"
 
 #: src/views/certificate/DNSCredential.vue:56
 msgid ""
@@ -4480,10 +4466,9 @@ 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"
@@ -4502,18 +4487,14 @@ msgid ""
 "When Enabled, Nginx UI will automatically re-register users upon startup. "
 "Generally, do not enable this unless you are in a dev environment and using "
 "Pebble as CA."
-msgstr ""
-"启用后,Nginx UI 将在启动时自动重新注册用户。一般情况下,除非在开发环境中使"
-"用 Pebble 作为 CA,否则不要启用此功能。"
+msgstr "启用后,Nginx UI 将在启动时自动重新注册用户。一般情况下,除非在开发环境中使用 Pebble 作为 CA,否则不要启用此功能。"
 
 #: src/views/site/site_edit/components/RightPanel/Basic.vue:61
 #: src/views/stream/components/RightPanel/Basic.vue:95
 msgid ""
 "When you enable/disable, delete, or save this site, the nodes set in the "
 "Node Group and the nodes selected below will be synchronized."
-msgstr ""
-"启用/禁用、删除或保存此站点时,环境组中设置的节点和下面选择的节点将同步执行操"
-"作。"
+msgstr "启用/禁用、删除或保存此站点时,环境组中设置的节点和下面选择的节点将同步执行操作。"
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140
 msgid ""
@@ -4569,10 +4550,9 @@ 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."
-msgstr ""
-"您正在通过非本地主机域上的不安全 HTTP 连接访问此终端。这可能会暴露敏感信息。"
+"You are accessing this terminal over an insecure HTTP connection on a "
+"non-localhost domain. This may expose sensitive information."
+msgstr "您正在通过非本地主机域上的不安全 HTTP 连接访问此终端。这可能会暴露敏感信息。"
 
 #: src/views/system/Upgrade.vue:202
 msgid "You are using the latest version"
@@ -4597,8 +4577,7 @@ msgid ""
 msgstr "您尚未配置 Webauthn 的设置,因此无法添加 Passkey。"
 
 #: 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
@@ -4627,11 +4606,9 @@ msgstr "你的 Passkeys"
 #~ msgstr "保存失败,在配置中检测到语法错误。"
 
 #~ 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."
-#~ msgstr ""
-#~ "启用/禁用、删除或保存此站点时,环境组中设置的节点和下面选择的节点将同步执"
-#~ "行操作。"
+#~ "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 "启用/禁用、删除或保存此站点时,环境组中设置的节点和下面选择的节点将同步执行操作。"
 
 #~ msgid "KB"
 #~ msgstr "KB"
@@ -4718,16 +4695,11 @@ msgstr "你的 Passkeys"
 #~ msgid "Please upgrade the remote Nginx UI to the latest version"
 #~ msgstr "请将远程 Nginx UI 升级到最新版本"
 
-#~ msgid ""
-#~ "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: %"
-#~ "{resp}"
-#~ msgstr ""
-#~ "将 %{env_name} 上的 %{orig_path} 重命名为 %{new_path} 失败,响应:%{resp}"
+#~ msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: %{resp}"
+#~ msgstr "将 %{env_name} 上的 %{orig_path} 重命名为 %{new_path} 失败,响应:%{resp}"
 
-#~ msgid ""
-#~ "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
-#~ msgstr ""
-#~ "在 %{node} 上将站点 %{site} 重命名为 %{new_site} 失败,响应:%{resp}"
+#~ msgid "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
+#~ msgstr "在 %{node} 上将站点 %{site} 重命名为 %{new_site} 失败,响应:%{resp}"
 
 #~ msgid "Save site %{site} to %{node} error, response: %{resp}"
 #~ msgstr "保存站点 %{site} 到 %{node} 错误,响应: %{resp}"
@@ -4735,12 +4707,9 @@ msgstr "你的 Passkeys"
 #~ msgid ""
 #~ "Sync Certificate %{cert_name} to %{env_name} failed, please upgrade the "
 #~ "remote Nginx UI to the latest version"
-#~ msgstr ""
-#~ "同步证书 %{cert_name} 到 %{env_name} 失败,请先将远程的 Nginx UI 升级到最"
-#~ "新版本"
+#~ msgstr "同步证书 %{cert_name} 到 %{env_name} 失败,请先将远程的 Nginx UI 升级到最新版本"
 
-#~ 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}"
@@ -4750,15 +4719,14 @@ msgstr "你的 Passkeys"
 #~ 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 "如果丢失了手机,可以使用恢复代码重置二步验证。"
 
 #~ 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"
@@ -4779,9 +4747,7 @@ msgstr "你的 Passkeys"
 #~ msgid ""
 #~ "Rename %{orig_path} to %{new_path} on %{env_name} failed, please upgrade "
 #~ "the remote Nginx UI to the latest version"
-#~ msgstr ""
-#~ "将 %{env_name} 上的 %{orig_path} 重命名为 %{new_path} 失败,请将远程 "
-#~ "Nginx UI 升级到最新版本"
+#~ msgstr "将 %{env_name} 上的 %{orig_path} 重命名为 %{new_path} 失败,请将远程 Nginx UI 升级到最新版本"
 
 #~ msgid "Server Name"
 #~ msgstr "服务器名称"
@@ -4858,9 +4824,8 @@ msgstr "你的 Passkeys"
 #~ "Once the verification is complete, the records will be removed.\n"
 #~ "Please note that the unit of time configurations below are all in seconds."
 #~ msgstr ""
-#~ "请填写您的DNS提供商提供的API认证凭证。我们将在你的域名的DNS记录中添加一个"
-#~ "或多个TXT记录,以进行所有权验证。一旦验证完成,这些记录将被删除。请注意,"
-#~ "下面的时间配置都是以秒为单位。"
+#~ "请填写您的DNS提供商提供的API认证凭证。我们将在你的域名的DNS记录中添加一个或多个TXT记录,以进行所有权验证。一旦验证完成,这些记录将被删除。请"
+#~ "注意,下面的时间配置都是以秒为单位。"
 
 #~ msgid "Delete ID: %{id}"
 #~ msgstr "删除 ID: %{id}"
@@ -4881,11 +4846,11 @@ msgstr "你的 Passkeys"
 #~ msgstr "操作同步"
 
 #~ msgid ""
-#~ "Such as Reload and Configs, regex can configure as `/api/nginx/reload|/"
-#~ "api/nginx/test|/api/config/.+`, please see system api"
+#~ "Such as Reload and Configs, regex can configure as "
+#~ "`/api/nginx/reload|/api/nginx/test|/api/config/.+`, please see system api"
 #~ msgstr ""
-#~ "`重载`和`配置管理`的操作同步正则可以配置为`/api/nginx/reload|/api/nginx/"
-#~ "test|/api/config/.+`,详细请查看系统API"
+#~ "`重载`和`配置管理`的操作同步正则可以配置为`/api/nginx/reload|/api/nginx/test|/api/config/.+`"
+#~ ",详细请查看系统API"
 
 #~ msgid "SyncApiRegex"
 #~ msgstr "Api正则表达式"
@@ -4903,11 +4868,9 @@ msgstr "你的 Passkeys"
 #~ msgstr "你想启用自动更新证书吗?"
 
 #~ msgid ""
-#~ "We need to add the HTTPChallenge configuration to this file and reload "
-#~ "the Nginx. Are you sure you want to continue?"
-#~ msgstr ""
-#~ "我们需要将 HTTPChallenge 的配置添加到这个文件中,并重新加载Nginx。你确定要"
-#~ "继续吗?"
+#~ "We need to add the HTTPChallenge configuration to this file and reload the "
+#~ "Nginx. Are you sure you want to continue?"
+#~ msgstr "我们需要将 HTTPChallenge 的配置添加到这个文件中,并重新加载Nginx。你确定要继续吗?"
 
 #~ msgid "Chat with ChatGPT"
 #~ msgstr "与ChatGPT聊天"
@@ -4960,8 +4923,8 @@ msgstr "你的 Passkeys"
 #~ "you do not have a certificate before, please click \"Getting Certificate "
 #~ "from Let's Encrypt\" first."
 #~ msgstr ""
-#~ "系统将会每小时检测一次该域名证书,若距离上次签发已超过1个月,则将自动续"
-#~ "签。<br/>如果您之前没有证书,请先点击 \"从 Let's Encrypt 获取证书\"。"
+#~ "系统将会每小时检测一次该域名证书,若距离上次签发已超过1个月,则将自动续签。<br/>如果您之前没有证书,请先点击 \"从 Let's Encrypt "
+#~ "获取证书\"。"
 
 #~ msgid "Do you want to change the template to support the TLS?"
 #~ msgstr "你想要改变模板以支持 TLS 吗?"
@@ -4979,15 +4942,12 @@ msgstr "你的 Passkeys"
 #~ "The following values will only take effect if you have the corresponding "
 #~ "fields in your configuration file. The configuration filename cannot be "
 #~ "changed after it has been created."
-#~ msgstr ""
-#~ "只有在您的配置文件中有相应字段时,下列的配置才能生效。配置文件名称创建后不"
-#~ "可修改。"
+#~ msgstr "只有在您的配置文件中有相应字段时,下列的配置才能生效。配置文件名称创建后不可修改。"
 
 #~ msgid "This operation will lose the custom configuration."
 #~ msgstr "该操作将会丢失自定义配置。"
 
-#~ msgid ""
-#~ "Add site here first, then you can configure TLS on the domain edit page."
+#~ msgid "Add site here first, then you can configure TLS on the domain edit page."
 #~ msgstr "在这里添加站点,完成后可进入编辑页面配置 TLS。"
 
 #~ msgid "Server Status"

+ 160 - 199
app/src/language/zh_TW/app.po

@@ -9,11 +9,11 @@ msgstr ""
 "POT-Creation-Date: \n"
 "PO-Revision-Date: 2025-04-10 02:51+0000\n"
 "Last-Translator: 0xJacky <me@jackyu.cn>\n"
-"Language-Team: Chinese (Traditional Han script) <https://weblate.nginxui.com/"
-"projects/nginx-ui/frontend/zh_Hant/>\n"
+"Language-Team: Chinese (Traditional Han script) "
+"<https://weblate.nginxui.com/projects/nginx-ui/frontend/zh_Hant/>\n"
 "Language: zh_TW\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=1; plural=0;\n"
 "X-Generator: Weblate 5.10.4\n"
@@ -243,7 +243,7 @@ msgstr "向 ChatGPT 尋求幫助"
 msgid "Assistant"
 msgstr "助理"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:50
+#: src/components/SelfCheck/SelfCheck.vue:62
 msgid "Attempt to fix"
 msgstr "嘗試修復"
 
@@ -440,9 +440,7 @@ msgstr "CA 目錄"
 msgid ""
 "Calculated based on worker_processes * worker_connections. Actual "
 "performance depends on hardware, configuration, and workload"
-msgstr ""
-"依據 worker_processes × worker_connections 計算。實際效能取決於硬體、設定與工"
-"作負載"
+msgstr "依據 worker_processes × worker_connections 計算。實際效能取決於硬體、設定與工作負載"
 
 #: src/components/ChatGPT/ChatGPT.vue:356
 #: src/components/NgxConfigEditor/NgxServer.vue:54
@@ -584,48 +582,43 @@ msgstr ""
 msgid "Check again"
 msgstr "再次檢查"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:31
+#: 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`."
+"Docker Image, please make sure the docker socket is mounted like this: `-v "
+"/var/run/docker.sock:/var/run/docker.sock`."
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:11
+#: 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."
-msgstr ""
-"檢查是否啟用了 HTTPS。在本機主機之外使用 HTTP 是不安全的,並且會阻止使用通行"
-"證和剪貼簿功能。"
+msgstr "檢查是否啟用了 HTTPS。在本機主機之外使用 HTTP 是不安全的,並且會阻止使用通行證和剪貼簿功能。"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:26
+#: src/components/SelfCheck/tasks/backend/index.ts:26
 #, fuzzy
 msgid "Check if the nginx.conf includes the conf.d directory."
 msgstr "請確認 nginx.conf 是否有包含 conf.d 資料夾。"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:16
+#: src/components/SelfCheck/tasks/backend/index.ts:16
 msgid "Check if the nginx.conf includes the sites-enabled directory."
 msgstr "請確認 nginx.conf 是否有包含 sites-enabled 資料夾。"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:21
+#: src/components/SelfCheck/tasks/backend/index.ts:21
 msgid "Check if the nginx.conf includes the streams-enabled directory."
 msgstr "請確認 nginx.conf 是否有包含 streams-enabled 資料夾。"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:6
+#: src/components/SelfCheck/tasks/backend/index.ts:6
 msgid ""
 "Check if the sites-available and sites-enabled directories are under the "
 "nginx configuration directory."
-msgstr ""
-"請確認 sites-available 和 sites-enabled 資料夾是否位於 Nginx 設定資料夾內。"
+msgstr "請確認 sites-available 和 sites-enabled 資料夾是否位於 Nginx 設定資料夾內。"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:11
+#: src/components/SelfCheck/tasks/backend/index.ts:11
 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"
@@ -845,8 +838,7 @@ 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
@@ -912,7 +904,7 @@ msgstr "自訂顯示在環境指示器中的本機節點名稱。"
 msgid "Dashboard"
 msgstr "儀錶板"
 
-#: src/views/install/Install.vue:167
+#: src/views/install/components/InstallForm.vue:109
 msgid "Database (Optional, default: database)"
 msgstr "資料庫 (可選,預設:database)"
 
@@ -1187,7 +1179,7 @@ msgstr "您要移除這個 Upstream 嗎?"
 msgid "Docker client not initialized"
 msgstr ""
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:30
+#: src/components/SelfCheck/tasks/backend/index.ts:30
 msgid "Docker Socket"
 msgstr ""
 
@@ -1222,9 +1214,7 @@ msgstr "試運轉模式已啟用"
 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 上使用"
-"通行金鑰。"
+msgstr "基於部分瀏覽器的安全政策,您無法在未啟用 HTTPS 網站,特別是 localhost 上使用通行金鑰。"
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteList.vue:117
@@ -1264,7 +1254,7 @@ msgstr "編輯 Stream"
 msgid "Email"
 msgstr "電子郵件"
 
-#: src/views/install/Install.vue:136
+#: src/views/install/components/InstallForm.vue:78
 msgid "Email (*)"
 msgstr "電子郵件 (*)"
 
@@ -1897,7 +1887,7 @@ msgstr "HTTP 挑戰埠"
 msgid "HTTP01"
 msgstr "HTTP01"
 
-#: src/views/system/SelfCheck/tasks/frontend/https-check.ts:10
+#: src/components/SelfCheck/tasks/frontend/https-check.ts:10
 msgid "HTTPS Protocol"
 msgstr "HTTPS 協議"
 
@@ -1911,18 +1901,15 @@ msgstr "如果留空,將使用預設的 CA Dir。"
 
 #: 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."
-msgstr ""
-"如果日誌未被索引,請檢查日誌檔案是否位於 Nginx 的 LogDirWhiteList 目錄下。"
+"If logs are not indexed, please check if the log file is under the "
+"directory in Nginx.LogDirWhiteList."
+msgstr "如果日誌未被索引,請檢查日誌檔案是否位於 Nginx 的 LogDirWhiteList 目錄下。"
 
 #: src/views/preference/tabs/AuthSettings.vue:145
 msgid ""
 "If the number of login failed attempts from a ip reach the max attempts in "
 "ban threshold minutes, the ip will be banned for a period of time."
-msgstr ""
-"如果來自某個 IP 的登入失敗次數在禁止閾值分鐘內達到最大嘗試次數,該 IP 將被禁"
-"止一段時間。"
+msgstr "如果來自某個 IP 的登入失敗次數在禁止閾值分鐘內達到最大嘗試次數,該 IP 將被禁止一段時間。"
 
 #: src/components/AutoCertForm/AutoCertForm.vue:116
 msgid ""
@@ -1998,19 +1985,26 @@ msgstr "輸入恢復碼:"
 msgid "Insecure Skip Verify"
 msgstr "不安全跳過驗證"
 
-#: src/routes/modules/auth.ts:8 src/views/install/Install.vue:183
+#: src/routes/modules/auth.ts:8
+#: src/views/install/components/InstallForm.vue:124
+#: src/views/install/components/InstallHeader.vue:9
 msgid "Install"
 msgstr "安裝"
 
-#: src/views/install/Install.vue:91
+#: src/views/install/components/InstallForm.vue:60
 msgid "Install successfully"
 msgstr "安裝成功"
 
+#: src/views/install/components/InstallView.vue:62
+#, fuzzy
+msgid "Installation"
+msgstr "新安裝"
+
 #: src/constants/errors/system.ts:3
 msgid "Installation is not allowed after 10 minutes of system startup"
 msgstr "系統啟動後 10 分鐘後不允許安裝"
 
-#: src/views/install/Install.vue:125
+#: src/views/install/components/TimeoutAlert.vue:11
 msgid ""
 "Installation is not allowed after 10 minutes of system startup, please "
 "restart the Nginx UI."
@@ -2105,8 +2099,7 @@ msgstr "Jwt 金鑰"
 msgid ""
 "Keep your recovery codes as safe as your password. We recommend saving them "
 "with a password manager."
-msgstr ""
-"請將您的復原代碼與密碼一樣妥善保管。我們建議使用密碼管理工具來儲存這些代碼。"
+msgstr "請將您的復原代碼與密碼一樣妥善保管。我們建議使用密碼管理工具來儲存這些代碼。"
 
 #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:60
 msgid "Keepalive Timeout"
@@ -2257,17 +2250,16 @@ 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 ""
-"預設情況下,對於在主機上安裝 Nginx UI 的使用者,大多數主流 Linux 發行版都啟用"
-"了 logrotate,因此您無需修改此頁面的參數。對於使用 Docker 容器安裝 Nginx UI "
-"的使用者,您可以手動啟用此選項。Nginx UI 的 crontab 任務排程器將按照您設定的"
-"分鐘間隔執行 logrotate 命令。"
+"預設情況下,對於在主機上安裝 Nginx UI 的使用者,大多數主流 Linux 發行版都啟用了 "
+"logrotate,因此您無需修改此頁面的參數。對於使用 Docker 容器安裝 Nginx UI 的使用者,您可以手動啟用此選項。Nginx UI "
+"的 crontab 任務排程器將按照您設定的分鐘間隔執行 logrotate 命令。"
 
 #: src/views/site/components/SiteStatusSegmented.vue:138
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
@@ -2287,8 +2279,7 @@ msgstr "維護模式已成功啟用"
 msgid ""
 "Make sure you have configured a reverse proxy for .well-known directory to "
 "HTTPChallengePort before obtaining the certificate."
-msgstr ""
-"在取得憑證前,請確保您已將 .well-known 目錄反向代理到 HTTPChallengePort。"
+msgstr "在取得憑證前,請確保您已將 .well-known 目錄反向代理到 HTTPChallengePort。"
 
 #: src/routes/modules/config.ts:10 src/views/config/ConfigEditor.vue:115
 #: src/views/config/ConfigEditor.vue:166 src/views/config/ConfigList.vue:72
@@ -2483,7 +2474,7 @@ msgstr "下載流量"
 msgid "Network Total Send"
 msgstr "上傳流量"
 
-#: src/views/install/Install.vue:131
+#: src/views/install/components/InstallView.vue:106
 msgid "New Installation"
 msgstr "新安裝"
 
@@ -2500,6 +2491,7 @@ msgid "New version released"
 msgstr "新版本發布"
 
 #: src/views/certificate/components/WildcardCertificate.vue:89
+#: src/views/install/components/InstallView.vue:93
 #: src/views/site/site_add/SiteAdd.vue:123
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:214
 msgid "Next"
@@ -2513,16 +2505,16 @@ msgstr "Nginx"
 msgid "Nginx Access Log Path"
 msgstr "Nginx 存取日誌路徑"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:25
+#: src/components/SelfCheck/tasks/backend/index.ts:25
 #, fuzzy
 msgid "Nginx Conf Include Conf.d"
 msgstr "Nginx 設定檔包含 Conf.d"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:15
+#: src/components/SelfCheck/tasks/backend/index.ts:15
 msgid "Nginx Conf Include Sites Enabled"
 msgstr "Nginx 設定檔包含 sites-enabled"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:20
+#: src/components/SelfCheck/tasks/backend/index.ts:20
 msgid "Nginx Conf Include Streams Enabled"
 msgstr "Nginx 設定檔包含 streams-enabled"
 
@@ -2674,8 +2666,8 @@ msgstr "Nginx UI 設定已恢復"
 
 #: 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 "Nginx UI 設定已恢復,將在幾秒後自動重新啟動。"
 
 #: src/components/ChatGPT/ChatGPT.vue:374
@@ -2943,14 +2935,14 @@ msgid ""
 "facial recognition, a device password, or a PIN. They can be used as a "
 "password replacement or as a 2FA method."
 msgstr ""
-"通行金鑰是 WebAuthn 認證,透過觸控、面部辨識、裝置密碼或 PIN 碼來驗證您的身"
-"份。它們可以用作密碼替代品或作為雙重身份驗證 (2FA) 方法。"
+"通行金鑰是 WebAuthn 認證,透過觸控、面部辨識、裝置密碼或 PIN 碼來驗證您的身份。它們可以用作密碼替代品或作為雙重身份驗證 (2FA) "
+"方法。"
 
 #: src/views/other/Login.vue:183 src/views/user/userColumns.tsx:18
 msgid "Password"
 msgstr "密碼"
 
-#: src/views/install/Install.vue:156
+#: src/views/install/components/InstallForm.vue:98
 msgid "Password (*)"
 msgstr "密碼 (*)"
 
@@ -2958,7 +2950,7 @@ msgstr "密碼 (*)"
 msgid "Password incorrect"
 msgstr "密碼錯誤"
 
-#: src/views/install/Install.vue:72
+#: src/views/install/components/InstallForm.vue:42
 msgid "Password length cannot exceed 20 characters"
 msgstr "密碼長度不能超過 20 個字元"
 
@@ -3044,15 +3036,13 @@ 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
@@ -3076,28 +3066,31 @@ msgid ""
 "configuration."
 msgstr "請輸入名稱,此名稱將用作新設定的檔案名稱。"
 
-#: src/views/install/Install.vue:56
+#: src/views/install/components/InstallForm.vue:26
 msgid "Please input your E-mail!"
 msgstr "請輸入您的電子郵件!"
 
-#: src/views/install/Install.vue:68 src/views/other/Login.vue:47
+#: src/views/install/components/InstallForm.vue:38 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgstr "請輸入您的密碼!"
 
-#: src/views/install/Install.vue:62 src/views/other/Login.vue:41
+#: src/views/install/components/InstallForm.vue:32 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgstr "請輸入您的使用者名稱!"
 
-#: src/views/install/Install.vue:108
+#: src/views/install/components/InstallView.vue:47
 #: src/views/system/Backup/SystemRestore.vue: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."
+msgid "Please note that the unit of time configurations below are all in seconds."
 msgstr "請注意,以下時間設定單位均為秒。"
 
+#: src/views/install/components/InstallView.vue:99
+msgid "Please resolve all issues before proceeding with installation"
+msgstr ""
+
 #: src/views/system/Backup/BackupCreator.vue:107
 msgid "Please save this security token, you will need it for restoration:"
 msgstr "請儲存此安全令牌,您將需要它進行恢復:"
@@ -3194,7 +3187,7 @@ msgstr "讀取"
 msgid "Receive"
 msgstr "接收"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:43
+#: src/components/SelfCheck/SelfCheck.vue:55
 msgid "Recheck"
 msgstr "重新檢查"
 
@@ -3219,8 +3212,7 @@ msgstr "復原代碼"
 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 裝置時,用於存取您的帳戶。每個代碼僅能使用一次。"
+msgstr "復原代碼在您無法使用 2FA 裝置時,用於存取您的帳戶。每個代碼僅能使用一次。"
 
 #: src/views/preference/tabs/CertSettings.vue:40
 msgid "Recursive Nameservers"
@@ -3447,9 +3439,7 @@ msgid ""
 "Resident Set Size: Actual memory resident in physical memory, including all "
 "shared library memory, which will be repeated calculated for multiple "
 "processes"
-msgstr ""
-"常駐集大小:實際存在於實體記憶體中的記憶體,包含所有共用函式庫記憶體,這些記"
-"憶體會在多個行程間重複計算"
+msgstr "常駐集大小:實際存在於實體記憶體中的記憶體,包含所有共用函式庫記憶體,這些記憶體會在多個行程間重複計算"
 
 #: src/composables/usePerformanceMetrics.ts:109
 #: src/views/dashboard/components/PerformanceTablesCard.vue:68
@@ -3494,7 +3484,7 @@ msgstr "正在重新啟動"
 msgid "Restore completed successfully"
 msgstr "恢復已完成"
 
-#: src/views/install/Install.vue:188
+#: src/views/install/components/InstallView.vue:109
 msgid "Restore from Backup"
 msgstr "從備份中恢復"
 
@@ -3653,7 +3643,7 @@ msgstr "同步後選擇操作"
 msgid "Selector"
 msgstr "選擇器"
 
-#: src/routes/modules/system.ts:19 src/views/system/SelfCheck/SelfCheck.vue:38
+#: src/components/SelfCheck/SelfCheck.vue:50 src/routes/modules/system.ts:19
 msgid "Self Check"
 msgstr "自我檢查"
 
@@ -3714,19 +3704,23 @@ 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 ""
-"Settings.NginxLogSettings.AccessLogPath 為空,請參考 https://nginxui.com/"
-"guide/config-nginx.html 了解更多資訊"
+"Settings.NginxLogSettings.AccessLogPath 為空,請參考 "
+"https://nginxui.com/guide/config-nginx.html 了解更多資訊"
 
 #: 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 ""
+"Settings.NginxLogSettings.ErrorLogPath 為空,請參考 "
+"https://nginxui.com/guide/config-nginx.html 了解更多資訊"
+
+#: src/views/install/components/InstallView.vue:63
+msgid "Setup your Nginx UI"
 msgstr ""
-"Settings.NginxLogSettings.ErrorLogPath 為空,請參考 https://nginxui.com/"
-"guide/config-nginx.html 了解更多資訊"
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
 msgid "Shared Memory Zone"
@@ -3764,7 +3758,7 @@ msgstr "網站日誌"
 msgid "Site not found"
 msgstr "站點未找到"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:5
+#: src/components/SelfCheck/tasks/backend/index.ts:5
 msgid "Sites Directory"
 msgstr "Sites 資料夾"
 
@@ -3877,7 +3871,7 @@ msgstr "串流已啟用"
 msgid "Stream not found"
 msgstr "串流未找到"
 
-#: src/views/system/SelfCheck/tasks/backend/index.ts:10
+#: src/components/SelfCheck/tasks/backend/index.ts:10
 msgid "Streams Directory"
 msgstr "Streams 資料夾"
 
@@ -3897,16 +3891,15 @@ msgstr ""
 msgid "Success"
 msgstr "成功"
 
-#: src/views/system/SelfCheck/tasks/frontend/websocket.ts:6
+#: src/components/SelfCheck/tasks/frontend/websocket.ts:6
 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 ""
-"支援透過 WebSocket 協議與後端進行通訊。如果您的 Nginx UI 是透過 Nginx 反向代"
-"理使用,請參考此連結編寫對應的設定文件:https://nginxui.com/guide/nginx-"
-"proxy-example.html"
+"支援透過 WebSocket 協議與後端進行通訊。如果您的 Nginx UI 是透過 Nginx "
+"反向代理使用,請參考此連結編寫對應的設定文件:https://nginxui.com/guide/nginx-proxy-example.html"
 
 #: src/components/SystemRestore/SystemRestoreContent.vue:197
 #: src/components/SystemRestore/SystemRestoreContent.vue:274
@@ -3995,6 +3988,11 @@ msgstr "系統"
 msgid "System Backup"
 msgstr "系統備份"
 
+#: src/views/install/components/InstallView.vue:58
+#, fuzzy
+msgid "System Check"
+msgstr "自我檢查"
+
 #: src/views/certificate/components/ACMEUserSelector.vue:88
 msgid "System Initial User"
 msgstr "系統初始使用者"
@@ -4003,7 +4001,7 @@ msgstr "系統初始使用者"
 msgid "System Restore"
 msgstr "系統恢復"
 
-#: src/views/install/Install.vue:104
+#: src/views/install/components/InstallView.vue:43
 #: src/views/system/Backup/SystemRestore.vue:6
 msgid "System restored successfully."
 msgstr "系統已成功恢復。"
@@ -4030,11 +4028,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 ""
-"網域憑證將在 30 分鐘內接受檢查,如果自上次簽發以來已超過 1 週或您在設定中設定"
-"的時間,憑證將會自動更新。"
+msgstr "網域憑證將在 30 分鐘內接受檢查,如果自上次簽發以來已超過 1 週或您在設定中設定的時間,憑證將會自動更新。"
 
-#: src/views/install/Install.vue:78
+#: src/views/install/components/InstallForm.vue:48
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "檔名不能包含以下字元:%{c}"
 
@@ -4054,7 +4050,8 @@ 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 "日誌路徑不在 settings.NginxSettings.LogDirWhiteList 設定中的路徑範圍內"
 
 #: src/views/preference/tabs/OpenAISettings.vue:23
@@ -4065,8 +4062,7 @@ msgid ""
 msgstr "模型名稱僅能包含字母、Unicode 字元、數字、連字號、破折號、冒號和句點。"
 
 #: 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
@@ -4098,9 +4094,7 @@ msgid ""
 "The remote Nginx UI version is not compatible with the local Nginx UI "
 "version. To avoid potential errors, please upgrade the remote Nginx UI to "
 "match the local version."
-msgstr ""
-"遠端 Nginx UI 版本與本機 Nginx UI 版本不相容。為避免潛在錯誤,請升級遠端 "
-"Nginx UI 以匹配本機版本。"
+msgstr "遠端 Nginx UI 版本與本機 Nginx UI 版本不相容。為避免潛在錯誤,請升級遠端 Nginx UI 以匹配本機版本。"
 
 #: src/components/AutoCertForm/AutoCertForm.vue:43
 msgid ""
@@ -4135,9 +4129,7 @@ msgid ""
 "These codes are the last resort for accessing your account in case you lose "
 "your password and second factors. If you cannot find these codes, you will "
 "lose access to your account."
-msgstr ""
-"這些代碼是您在遺失密碼和第二重驗證因素時,存取帳戶的最後手段。如果您找不到這"
-"些代碼,您將無法再存取您的帳戶。"
+msgstr "這些代碼是您在遺失密碼和第二重驗證因素時,存取帳戶的最後手段。如果您找不到這些代碼,您將無法再存取您的帳戶。"
 
 #: src/views/certificate/components/CertificateEditor.vue:102
 msgid "This Auto Cert item is invalid, please remove it."
@@ -4167,8 +4159,7 @@ 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 "此欄位僅能包含字母、Unicode 字元、數字、連字號、破折號和底線。"
 
 #: src/views/dashboard/NginxDashBoard.vue:153
@@ -4208,8 +4199,7 @@ msgid ""
 msgstr "這將恢復設定檔案和資料庫。恢復完成後,Nginx UI 將重新啟動。"
 
 #: 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 "這將在 %{nodeNames} 上升級或重新安裝 Nginx UI 到 %{version}。"
 
 #: src/views/preference/tabs/AuthSettings.vue:124
@@ -4240,28 +4230,25 @@ msgstr ""
 msgid ""
 "To enable it, you need to install the Google or Microsoft Authenticator app "
 "on your mobile phone."
-msgstr ""
-"要啟用它,您需要在手機上安裝 Google 或 Microsoft Authenticator 應用程式。"
+msgstr "要啟用它,您需要在手機上安裝 Google 或 Microsoft Authenticator 應用程式。"
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:89
 msgid ""
 "To ensure security, Webauthn configuration cannot be added through the UI. "
 "Please manually configure the following in the app.ini configuration file "
 "and restart Nginx UI."
-msgstr ""
-"為確保安全性,Webauthn 設定無法透過 UI 新增。請在 app.ini 設定檔中手動設定以"
-"下內容,並重新啟動 Nginx UI。"
+msgstr "為確保安全性,Webauthn 設定無法透過 UI 新增。請在 app.ini 設定檔中手動設定以下內容,並重新啟動 Nginx UI。"
 
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:33
 #: 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 ""
-"為了確保憑證自動續期能夠正常運作,我們需要新增一個 Location 來代理從授權後端"
-"的請求,我們需要儲存這個檔案並重新載入 Nginx。你確定你要繼續嗎?"
+"為了確保憑證自動續期能夠正常運作,我們需要新增一個 Location 來代理從授權後端的請求,我們需要儲存這個檔案並重新載入 "
+"Nginx。你確定你要繼續嗎?"
 
 #: src/views/preference/tabs/OpenAISettings.vue:36
 msgid ""
@@ -4269,8 +4256,8 @@ msgid ""
 "provide an OpenAI-compatible API endpoint, so just set the baseUrl to your "
 "local API."
 msgstr ""
-"要使用本機大型語言模型,請使用 ollama、vllm 或 lmdeploy 部署。它們提供與 "
-"OpenAI 相容的 API 端點,因此只需將 baseUrl 設定為您的本機 API。"
+"要使用本機大型語言模型,請使用 ollama、vllm 或 lmdeploy 部署。它們提供與 OpenAI 相容的 API 端點,因此只需將 "
+"baseUrl 設定為您的本機 API。"
 
 #: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
@@ -4341,7 +4328,7 @@ msgstr "類型"
 msgid "Unknown"
 msgstr "未知"
 
-#: src/views/system/SelfCheck/SelfCheck.vue:63
+#: src/components/SelfCheck/SelfCheck.vue:75
 msgid "Unknown issue"
 msgstr "未知問題"
 
@@ -4425,7 +4412,7 @@ msgstr "使用者未啟用 OTP 作為雙重身份驗證 (2FA)"
 msgid "Username"
 msgstr "使用者名稱"
 
-#: src/views/install/Install.vue:146
+#: src/views/install/components/InstallForm.vue:88
 msgid "Username (*)"
 msgstr "使用者名稱 (*)"
 
@@ -4444,6 +4431,10 @@ msgstr ""
 msgid "Verify Backup File Integrity"
 msgstr "驗證備份檔案完整性"
 
+#: src/views/install/components/InstallView.vue:59
+msgid "Verify system requirements"
+msgstr "驗證系統要求"
+
 #: src/views/environments/list/envColumns.tsx:31
 msgid "Version"
 msgstr "版本"
@@ -4477,7 +4468,7 @@ msgstr "已檢視"
 #: src/composables/usePerformanceMetrics.ts:114
 #: src/views/dashboard/components/PerformanceTablesCard.vue:73
 msgid "Waiting processes"
-msgstr ""
+msgstr "等待過程"
 
 #: src/constants/index.ts:23 src/views/config/InspectConfig.vue:33
 #: src/views/notification/notificationColumns.tsx:22
@@ -4492,9 +4483,7 @@ msgid ""
 "Warning: Restore operation will overwrite current configurations. Make sure "
 "you have a valid backup file and security token, and carefully select what "
 "to restore."
-msgstr ""
-"警告:恢復操作將覆蓋目前設定。請確保您擁有有效的備份檔案和安全令牌,並謹慎選"
-"擇要恢復的內容。"
+msgstr "警告:恢復操作將覆蓋目前設定。請確保您擁有有效的備份檔案和安全令牌,並謹慎選擇要恢復的內容。"
 
 #: src/views/certificate/DNSCredential.vue:56
 msgid ""
@@ -4504,11 +4493,9 @@ 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"
@@ -4527,18 +4514,14 @@ msgid ""
 "When Enabled, Nginx UI will automatically re-register users upon startup. "
 "Generally, do not enable this unless you are in a dev environment and using "
 "Pebble as CA."
-msgstr ""
-"啟用後,Nginx UI 將在啟動時自動重新註冊使用者。通常,除非您處於開發環境並使"
-"用 Pebble 作為 CA,否則不建議啟用此功能。"
+msgstr "啟用後,Nginx UI 將在啟動時自動重新註冊使用者。通常,除非您處於開發環境並使用 Pebble 作為 CA,否則不建議啟用此功能。"
 
 #: src/views/site/site_edit/components/RightPanel/Basic.vue:61
 #: src/views/stream/components/RightPanel/Basic.vue:95
 msgid ""
 "When you enable/disable, delete, or save this site, the nodes set in the "
 "Node Group and the nodes selected below will be synchronized."
-msgstr ""
-"當您啟用/停用、刪除或儲存此網站時,在節點群組中設定的節點以及下方選擇的節點將"
-"會同步更新。"
+msgstr "當您啟用/停用、刪除或儲存此網站時,在節點群組中設定的節點以及下方選擇的節點將會同步更新。"
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140
 msgid ""
@@ -4596,10 +4579,9 @@ 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."
-msgstr ""
-"您正在透過非本機網域的不安全 HTTP 連接存取此終端,這可能會洩露敏感資訊。"
+"You are accessing this terminal over an insecure HTTP connection on a "
+"non-localhost domain. This may expose sensitive information."
+msgstr "您正在透過非本機網域的不安全 HTTP 連接存取此終端,這可能會洩露敏感資訊。"
 
 #: src/views/system/Upgrade.vue:202
 msgid "You are using the latest version"
@@ -4624,8 +4606,7 @@ 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 "您尚未啟用雙重身份驗證 (2FA)。請啟用 2FA 以生成復原代碼。"
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94
@@ -4654,11 +4635,9 @@ msgstr "您的通行金鑰"
 #~ msgstr "儲存失敗,在設定中偵測到語法錯誤。"
 
 #~ 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."
-#~ msgstr ""
-#~ "當您啟用/停用、刪除或儲存此串流時,在節點群組中設定的節點以及下方選擇的節"
-#~ "點將會同步更新。"
+#~ "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 "當您啟用/停用、刪除或儲存此串流時,在節點群組中設定的節點以及下方選擇的節點將會同步更新。"
 
 #, fuzzy
 #~ msgid "Access Token"
@@ -4717,17 +4696,11 @@ msgstr "您的通行金鑰"
 #~ msgid "Please upgrade the remote Nginx UI to the latest version"
 #~ msgstr "請將遠端 Nginx UI 升級至最新版本"
 
-#~ msgid ""
-#~ "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: "
-#~ "%{resp}"
-#~ msgstr ""
-#~ "在 %{env_name} 上將 %{orig_path} 重新命名為 %{new_path} 失敗,回應:"
-#~ "%{resp}"
+#~ msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: %{resp}"
+#~ msgstr "在 %{env_name} 上將 %{orig_path} 重新命名為 %{new_path} 失敗,回應:%{resp}"
 
-#~ msgid ""
-#~ "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
-#~ msgstr ""
-#~ "將站點 %{site} 重新命名為 %{new_site} 於 %{node} 時發生錯誤,回應:%{resp}"
+#~ msgid "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
+#~ msgstr "將站點 %{site} 重新命名為 %{new_site} 於 %{node} 時發生錯誤,回應:%{resp}"
 
 #~ msgid "Save site %{site} to %{node} error, response: %{resp}"
 #~ msgstr "儲存站點 %{site} 至 %{node} 時發生錯誤,回應:%{resp}"
@@ -4735,12 +4708,9 @@ msgstr "您的通行金鑰"
 #~ msgid ""
 #~ "Sync Certificate %{cert_name} to %{env_name} failed, please upgrade the "
 #~ "remote Nginx UI to the latest version"
-#~ msgstr ""
-#~ "同步憑證 %{cert_name} 到 %{env_name} 失敗,請將遠端 Nginx UI 升級到最新版"
-#~ "本"
+#~ msgstr "同步憑證 %{cert_name} 到 %{env_name} 失敗,請將遠端 Nginx UI 升級到最新版本"
 
-#~ 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}"
@@ -4750,15 +4720,14 @@ 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 "如果您遺失了手機,可以使用恢復碼重設您的多重因素驗證驗證。"
 
 #~ 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 "File"
@@ -4776,9 +4745,7 @@ msgstr "您的通行金鑰"
 #~ msgid ""
 #~ "Rename %{orig_path} to %{new_path} on %{env_name} failed, please upgrade "
 #~ "the remote Nginx UI to the latest version"
-#~ msgstr ""
-#~ "將 %{orig_path} 重新命名為 %{new_path} 在 %{env_name} 失敗,請將遠端 "
-#~ "Nginx UI 升級到最新版本"
+#~ msgstr "將 %{orig_path} 重新命名為 %{new_path} 在 %{env_name} 失敗,請將遠端 Nginx UI 升級到最新版本"
 
 #~ msgid "Server Name"
 #~ msgstr "伺服器名稱"
@@ -4844,9 +4811,8 @@ msgstr "您的通行金鑰"
 #~ "Once the verification is complete, the records will be removed.\n"
 #~ "Please note that the unit of time configurations below are all in seconds."
 #~ msgstr ""
-#~ "請填寫您的 DNS 供應商提供的 API 身份驗證認證。我們會將一個或多個 TXT 記錄"
-#~ "新增到您網域的 DNS 記錄中以進行所有權驗證。驗證完成後,記錄將被刪除。請注"
-#~ "意,以下時間設定均以秒為單位。"
+#~ "請填寫您的 DNS 供應商提供的 API 身份驗證認證。我們會將一個或多個 TXT 記錄新增到您網域的 DNS "
+#~ "記錄中以進行所有權驗證。驗證完成後,記錄將被刪除。請注意,以下時間設定均以秒為單位。"
 
 #~ msgid "Delete ID: %{id}"
 #~ msgstr "刪除 ID: %{id}"
@@ -4870,11 +4836,9 @@ msgstr "您的通行金鑰"
 #~ msgstr "您要啟用自動憑證更新嗎?"
 
 #~ msgid ""
-#~ "We need to add the HTTPChallenge configuration to this file and reload "
-#~ "the Nginx. Are you sure you want to continue?"
-#~ msgstr ""
-#~ "我們需要將 HTTPChallenge 設定新增到此檔案並重新載入 Nginx。你確定你要繼續"
-#~ "嗎?"
+#~ "We need to add the HTTPChallenge configuration to this file and reload the "
+#~ "Nginx. Are you sure you want to continue?"
+#~ msgstr "我們需要將 HTTPChallenge 設定新增到此檔案並重新載入 Nginx。你確定你要繼續嗎?"
 
 #~ msgid "Chat with ChatGPT"
 #~ msgstr "使用 ChatGPT 聊天"
@@ -4921,8 +4885,8 @@ msgstr "您的通行金鑰"
 #~ "you do not have a certificate before, please click \"Getting Certificate "
 #~ "from Let's Encrypt\" first."
 #~ msgstr ""
-#~ "系統將會每小時偵測一次該域名憑證,若距離上次簽發已超過 1 個月,則將自動續"
-#~ "簽。<br/>如果您之前沒有憑證,請先點選「從 Let's Encrypt 取得憑證」。"
+#~ "系統將會每小時偵測一次該域名憑證,若距離上次簽發已超過 1 個月,則將自動續簽。<br/>如果您之前沒有憑證,請先點選「從 Let's Encrypt "
+#~ "取得憑證」。"
 
 #~ msgid "Do you want to change the template to support the TLS?"
 #~ msgstr "你想要改變範本以支援 TLS 嗎?"
@@ -4940,15 +4904,12 @@ msgstr "您的通行金鑰"
 #~ "The following values will only take effect if you have the corresponding "
 #~ "fields in your configuration file. The configuration filename cannot be "
 #~ "changed after it has been created."
-#~ msgstr ""
-#~ "只有在您的設定檔案中有相應欄位時,下列的設定才能生效。設定檔名稱建立後不可"
-#~ "修改。"
+#~ msgstr "只有在您的設定檔案中有相應欄位時,下列的設定才能生效。設定檔名稱建立後不可修改。"
 
 #~ msgid "This operation will lose the custom configuration."
 #~ msgstr "該操作將會遺失自定義設定。"
 
-#~ msgid ""
-#~ "Add site here first, then you can configure TLS on the domain edit page."
+#~ msgid "Add site here first, then you can configure TLS on the domain edit page."
 #~ msgstr "在這裡新增網站,完成後可進入編輯頁面設定 TLS。"
 
 #~ msgid "Server Status"

+ 1 - 1
app/src/routes/modules/system.ts

@@ -14,7 +14,7 @@ export const systemRoutes: RouteRecordRaw[] = [
     children: [{
       path: 'self_check',
       name: 'Self Check',
-      component: () => import('@/views/system/SelfCheck/SelfCheck.vue'),
+      component: () => import('@/views/system/SelfCheck.vue'),
       meta: {
         name: () => $gettext('Self Check'),
       },

+ 3 - 244
app/src/views/install/Install.vue

@@ -1,250 +1,9 @@
 <script setup lang="ts">
-import type { InstallLockResponse } from '@/api/install'
-import install from '@/api/install'
-import SetLanguage from '@/components/SetLanguage'
-import SwitchAppearance from '@/components/SwitchAppearance'
-import SystemRestoreContent from '@/components/SystemRestore'
-import { DatabaseOutlined, LockOutlined, MailOutlined, UserOutlined } from '@ant-design/icons-vue'
+import InstallView from './components/InstallView.vue'
 
-import { Form, message } from 'ant-design-vue'
-
-const thisYear = new Date().getFullYear()
-const loading = ref(false)
-const installTimeout = ref(false)
-const activeTab = ref('1')
-
-const router = useRouter()
-
-function init() {
-  install.get_lock().then(async (r: InstallLockResponse) => {
-    if (r.lock)
-      await router.push('/login')
-
-    if (r.timeout) {
-      installTimeout.value = true
-    }
-  })
-}
-
-onMounted(() => {
-  if (import.meta.env.DEV) {
-    const route = useRoute()
-    if (route.query.install !== 'false') {
-      init()
-    }
-    else {
-      installTimeout.value = route.query.timeout === 'true'
-    }
-  }
-  else {
-    init()
-  }
-})
-
-const modelRef = reactive({
-  email: '',
-  username: '',
-  password: '',
-  database: '',
-})
-
-const rulesRef = reactive({
-  email: [
-    {
-      required: true,
-      type: 'email',
-      message: () => $gettext('Please input your E-mail!'),
-    },
-  ],
-  username: [
-    {
-      required: true,
-      message: () => $gettext('Please input your username!'),
-    },
-  ],
-  password: [
-    {
-      required: true,
-      message: () => $gettext('Please input your password!'),
-    },
-    {
-      max: 20,
-      message: () => $gettext('Password length cannot exceed 20 characters'),
-    },
-  ],
-  database: [
-    {
-      message: () =>
-        $gettext('The filename cannot contain the following characters: %{c}', { c: '& &quot; ? < > # {} % ~ / \\' }),
-    },
-  ],
-})
-
-const { validate, validateInfos } = Form.useForm(modelRef, rulesRef)
-
-function onSubmit() {
-  validate().then(() => {
-    // modelRef
-    loading.value = true
-
-    install.install_nginx_ui(modelRef).then(async () => {
-      message.success($gettext('Install successfully'))
-      await router.push('/login')
-    }).catch(error => {
-      if (error && error.code === 40308) {
-        installTimeout.value = true
-      }
-    }).finally(() => {
-      loading.value = false
-    })
-  })
-}
-
-function handleRestoreSuccess(options: { restoreNginx: boolean, restoreNginxUI: boolean }): void {
-  message.success($gettext('System restored successfully.'))
-
-  // Only redirect to login page if Nginx UI was restored
-  if (options.restoreNginxUI) {
-    message.info($gettext('Please log in.'))
-    window.location.reload()
-  }
-}
+const route = useRoute()
 </script>
 
 <template>
-  <ALayout>
-    <ALayoutContent>
-      <div class="login-container">
-        <div class="login-form">
-          <div class="project-title">
-            <h1>Nginx UI</h1>
-          </div>
-          <AAlert
-            v-if="installTimeout"
-            type="warning"
-            :message="$gettext('Installation is not allowed after 10 minutes of system startup, please restart the Nginx UI.')"
-            show-icon
-            style="margin-bottom: 20px;"
-          />
-          <div v-else>
-            <ATabs v-model:active-key="activeTab">
-              <ATabPane key="1" :tab="$gettext('New Installation')">
-                <AForm id="components-form-install">
-                  <AFormItem v-bind="validateInfos.email">
-                    <AInput
-                      v-model:value="modelRef.email"
-                      :placeholder="$gettext('Email (*)')"
-                    >
-                      <template #prefix>
-                        <MailOutlined />
-                      </template>
-                    </AInput>
-                  </AFormItem>
-                  <AFormItem v-bind="validateInfos.username">
-                    <AInput
-                      v-model:value="modelRef.username"
-                      :placeholder="$gettext('Username (*)')"
-                    >
-                      <template #prefix>
-                        <UserOutlined />
-                      </template>
-                    </AInput>
-                  </AFormItem>
-                  <AFormItem v-bind="validateInfos.password">
-                    <AInputPassword
-                      v-model:value="modelRef.password"
-                      :placeholder="$gettext('Password (*)')"
-                    >
-                      <template #prefix>
-                        <LockOutlined />
-                      </template>
-                    </AInputPassword>
-                  </AFormItem>
-                  <AFormItem>
-                    <AInput
-                      v-bind="validateInfos.database"
-                      v-model:value="modelRef.database"
-                      :placeholder="$gettext('Database (Optional, default: database)')"
-                    >
-                      <template #prefix>
-                        <DatabaseOutlined />
-                      </template>
-                    </AInput>
-                  </AFormItem>
-                  <AFormItem>
-                    <AButton
-                      type="primary"
-                      block
-                      html-type="submit"
-                      :loading="loading"
-                      :disabled="installTimeout"
-                      @click="onSubmit"
-                    >
-                      {{ $gettext('Install') }}
-                    </AButton>
-                  </AFormItem>
-                </AForm>
-              </ATabPane>
-              <ATabPane key="2" :tab="$gettext('Restore from Backup')">
-                <SystemRestoreContent
-                  :show-title="false"
-                  @restore-success="handleRestoreSuccess"
-                />
-              </ATabPane>
-            </ATabs>
-          </div>
-          <div class="footer">
-            <p>Copyright © 2021 - {{ thisYear }} Nginx UI</p>
-            Language
-            <SetLanguage class="inline" />
-            <div class="flex justify-center mt-4">
-              <SwitchAppearance />
-            </div>
-          </div>
-        </div>
-      </div>
-    </ALayoutContent>
-  </ALayout>
+  <InstallView :key="route.fullPath" />
 </template>
-
-<style lang="less" scoped>
-.ant-layout-content {
-  background: #fff;
-}
-
-.dark .ant-layout-content {
-  background: transparent;
-}
-
-.login-container {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 100vh;
-
-  .login-form {
-    max-width: 400px;
-    width: 80%;
-
-    .project-title {
-      margin: 50px;
-
-      h1 {
-        font-size: 50px;
-        font-weight: 100;
-        text-align: center;
-      }
-    }
-
-    .anticon {
-      color: #a8a5a5 !important;
-    }
-
-    .footer {
-      padding: 30px;
-      text-align: center;
-      font-size: 14px;
-    }
-  }
-}
-</style>

+ 25 - 0
app/src/views/install/components/InstallFooter.vue

@@ -0,0 +1,25 @@
+<script setup lang="ts">
+import SetLanguage from '@/components/SetLanguage'
+import SwitchAppearance from '@/components/SwitchAppearance'
+
+const thisYear = new Date().getFullYear()
+</script>
+
+<template>
+  <div class="footer">
+    <p>Copyright © 2021 - {{ thisYear }} Nginx UI</p>
+    Language
+    <SetLanguage class="inline" />
+    <div class="flex justify-center mt-4">
+      <SwitchAppearance />
+    </div>
+  </div>
+</template>
+
+<style lang="less" scoped>
+.footer {
+  padding: 30px;
+  text-align: center;
+  font-size: 14px;
+}
+</style>

+ 128 - 0
app/src/views/install/components/InstallForm.vue

@@ -0,0 +1,128 @@
+<script setup lang="ts">
+import install from '@/api/install'
+import { DatabaseOutlined, LockOutlined, MailOutlined, UserOutlined } from '@ant-design/icons-vue'
+import { Form, message } from 'ant-design-vue'
+import { useRouter } from 'vue-router'
+
+const emit = defineEmits<{
+  (e: 'installSuccess'): void
+}>()
+
+const router = useRouter()
+const loading = ref(false)
+
+const modelRef = reactive({
+  email: '',
+  username: '',
+  password: '',
+  database: '',
+})
+
+const rulesRef = reactive({
+  email: [
+    {
+      required: true,
+      type: 'email',
+      message: () => $gettext('Please input your E-mail!'),
+    },
+  ],
+  username: [
+    {
+      required: true,
+      message: () => $gettext('Please input your username!'),
+    },
+  ],
+  password: [
+    {
+      required: true,
+      message: () => $gettext('Please input your password!'),
+    },
+    {
+      max: 20,
+      message: () => $gettext('Password length cannot exceed 20 characters'),
+    },
+  ],
+  database: [
+    {
+      message: () =>
+        $gettext('The filename cannot contain the following characters: %{c}', { c: '& &quot; ? < > # {} % ~ / \\' }),
+    },
+  ],
+})
+
+const { validate, validateInfos } = Form.useForm(modelRef, rulesRef)
+
+function onSubmit() {
+  validate().then(() => {
+    loading.value = true
+
+    install.install_nginx_ui(modelRef).then(async () => {
+      message.success($gettext('Install successfully'))
+      emit('installSuccess')
+      await router.push('/login')
+    }).catch(error => {
+      if (error && error.code === 40308)
+        throw error
+    }).finally(() => {
+      loading.value = false
+    })
+  })
+}
+</script>
+
+<template>
+  <AForm id="components-form-install">
+    <AFormItem v-bind="validateInfos.email">
+      <AInput
+        v-model:value="modelRef.email"
+        :placeholder="$gettext('Email (*)')"
+      >
+        <template #prefix>
+          <MailOutlined />
+        </template>
+      </AInput>
+    </AFormItem>
+    <AFormItem v-bind="validateInfos.username">
+      <AInput
+        v-model:value="modelRef.username"
+        :placeholder="$gettext('Username (*)')"
+      >
+        <template #prefix>
+          <UserOutlined />
+        </template>
+      </AInput>
+    </AFormItem>
+    <AFormItem v-bind="validateInfos.password">
+      <AInputPassword
+        v-model:value="modelRef.password"
+        :placeholder="$gettext('Password (*)')"
+      >
+        <template #prefix>
+          <LockOutlined />
+        </template>
+      </AInputPassword>
+    </AFormItem>
+    <AFormItem>
+      <AInput
+        v-bind="validateInfos.database"
+        v-model:value="modelRef.database"
+        :placeholder="$gettext('Database (Optional, default: database)')"
+      >
+        <template #prefix>
+          <DatabaseOutlined />
+        </template>
+      </AInput>
+    </AFormItem>
+    <AFormItem>
+      <AButton
+        type="primary"
+        block
+        html-type="submit"
+        :loading="loading"
+        @click="onSubmit"
+      >
+        {{ $gettext('Install') }}
+      </AButton>
+    </AFormItem>
+  </AForm>
+</template>

+ 29 - 0
app/src/views/install/components/InstallHeader.vue

@@ -0,0 +1,29 @@
+<script setup lang="ts">
+
+</script>
+
+<template>
+  <div class="project-title">
+    <h1>Nginx UI</h1>
+    <h3>
+      {{ $gettext('Install') }}
+    </h3>
+  </div>
+</template>
+
+<style lang="less" scoped>
+.project-title {
+  margin: 50px;
+  margin-bottom: 20px;
+  h1 {
+    font-size: 50px;
+    font-weight: 100;
+    text-align: center;
+  }
+  h3 {
+    font-size: 20px;
+    text-align: center;
+    font-weight: 400;
+  }
+}
+</style>

+ 159 - 0
app/src/views/install/components/InstallView.vue

@@ -0,0 +1,159 @@
+<script setup lang="ts">
+import install from '@/api/install'
+import SelfCheck from '@/components/SelfCheck'
+import SystemRestoreContent from '@/components/SystemRestore'
+import { message } from 'ant-design-vue'
+import InstallFooter from './InstallFooter.vue'
+import InstallForm from './InstallForm.vue'
+import InstallHeader from './InstallHeader.vue'
+import TimeoutAlert from './TimeoutAlert.vue'
+
+const installTimeout = ref(false)
+const activeTab = ref('1')
+const step = ref(1)
+const selfCheckRef = useTemplateRef('selfCheckRef')
+
+const router = useRouter()
+
+function init() {
+  install.get_lock().then(async r => {
+    if (r.lock)
+      await router.push('/login')
+
+    if (r.timeout) {
+      installTimeout.value = true
+    }
+  })
+}
+
+if (import.meta.env.DEV) {
+  const route = useRoute()
+  if (route.query.install !== 'false') {
+    init()
+  }
+  else {
+    installTimeout.value = route.query.timeout === 'true'
+  }
+}
+else {
+  init()
+}
+
+function handleRestoreSuccess(options: { restoreNginx: boolean, restoreNginxUI: boolean }): void {
+  message.success($gettext('System restored successfully.'))
+
+  // Only redirect to login page if Nginx UI was restored
+  if (options.restoreNginxUI) {
+    message.info($gettext('Please log in.'))
+    window.location.reload()
+  }
+}
+
+const canProceed = computed(() => {
+  return !installTimeout.value && !selfCheckRef.value?.hasError
+})
+
+const steps = [
+  {
+    title: $gettext('System Check'),
+    description: $gettext('Verify system requirements'),
+  },
+  {
+    title: $gettext('Installation'),
+    description: $gettext('Setup your Nginx UI'),
+  },
+]
+</script>
+
+<template>
+  <ALayout>
+    <ALayoutContent>
+      <div class="login-container">
+        <InstallHeader />
+
+        <TimeoutAlert class="timeout-alert" :show="installTimeout" />
+
+        <div v-if="!installTimeout" class="install-form">
+          <ASteps
+            :current="step - 1"
+            class="mb-6"
+          >
+            <AStep
+              v-for="(item, index) in steps"
+              :key="index"
+              :title="item.title"
+              :description="item.description"
+            />
+          </ASteps>
+
+          <div v-if="step === 1">
+            <SelfCheck ref="selfCheckRef" class="mb-4" />
+            <div class="flex justify-center">
+              <AButton v-if="canProceed" type="primary" @click="step = 2">
+                {{ $gettext('Next') }}
+              </AButton>
+              <AAlert
+                v-else
+                type="error"
+                class="mt-4"
+                :message="$gettext('Please resolve all issues before proceeding with installation')"
+                show-icon
+              />
+            </div>
+          </div>
+
+          <ATabs v-if="step === 2" v-model:active-key="activeTab" class="max-w-400px mx-auto">
+            <ATabPane key="1" :tab="$gettext('New Installation')">
+              <InstallForm />
+            </ATabPane>
+            <ATabPane key="2" :tab="$gettext('Restore from Backup')">
+              <SystemRestoreContent
+                :show-title="false"
+                @restore-success="handleRestoreSuccess"
+              />
+            </ATabPane>
+          </ATabs>
+        </div>
+
+        <InstallFooter />
+      </div>
+    </ALayoutContent>
+  </ALayout>
+</template>
+
+<style lang="less" scoped>
+.ant-layout-content {
+  background: #fff;
+}
+
+:deep(.ant-tabs-nav-wrap) {
+  justify-content: center;
+}
+
+.dark .ant-layout-content {
+  background: transparent;
+}
+
+.login-container {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  min-height: 100vh;
+
+  .install-form {
+    width: 100%;
+    max-width: 800px;
+    margin: 0 auto;
+
+    .anticon {
+      color: #a8a5a5 !important;
+    }
+  }
+}
+
+.timeout-alert {
+  max-width: 400px;
+  margin: 0 auto;
+}
+</style>

+ 15 - 0
app/src/views/install/components/TimeoutAlert.vue

@@ -0,0 +1,15 @@
+<script setup lang="ts">
+defineProps<{
+  show: boolean
+}>()
+</script>
+
+<template>
+  <AAlert
+    v-if="show"
+    type="warning"
+    :message="$gettext('Installation is not allowed after 10 minutes of system startup, please restart the Nginx UI.')"
+    show-icon
+    style="margin-bottom: 20px;"
+  />
+</template>

+ 7 - 0
app/src/views/system/SelfCheck.vue

@@ -0,0 +1,7 @@
+<script setup lang="ts">
+import SelfCheck from '@/components/SelfCheck'
+</script>
+
+<template>
+  <SelfCheck />
+</template>

+ 1 - 0
router/routers.go

@@ -51,6 +51,7 @@ func InitRouter() {
 		crypto.InitPublicRouter(root)
 		system.InitPublicRouter(root)
 		system.InitBackupRestoreRouter(root)
+		system.InitSelfCheckRouter(root)
 		user.InitAuthRouter(root)
 
 		// Authorization required and not websocket request