Browse Source

feat: add installation lock response and error handling for installation timeout

Jacky 4 months ago
parent
commit
ed320f32cc

+ 6 - 1
app/src/api/install.ts

@@ -7,9 +7,14 @@ export interface InstallRequest {
   database: string
   database: string
 }
 }
 
 
+export interface InstallLockResponse {
+  lock: boolean
+  timeout: boolean
+}
+
 const install = {
 const install = {
   get_lock() {
   get_lock() {
-    return http.get('/install')
+    return http.get<InstallLockResponse>('/install')
   },
   },
   install_nginx_ui(data: InstallRequest) {
   install_nginx_ui(data: InstallRequest) {
     return http.post('/install', data, { crypto: true })
     return http.post('/install', data, { crypto: true })

+ 5 - 0
app/src/constants/errors/backup.ts

@@ -10,6 +10,7 @@ export default {
   4011: () => $gettext('Failed to generate AES key: {0}'),
   4011: () => $gettext('Failed to generate AES key: {0}'),
   4012: () => $gettext('Failed to generate initialization vector: {0}'),
   4012: () => $gettext('Failed to generate initialization vector: {0}'),
   4013: () => $gettext('Failed to create backup file: {0}'),
   4013: () => $gettext('Failed to create backup file: {0}'),
+  4014: () => $gettext('Failed to cleanup temporary directory: {0}'),
   4101: () => $gettext('Config path is empty'),
   4101: () => $gettext('Config path is empty'),
   4102: () => $gettext('Failed to copy config file: {0}'),
   4102: () => $gettext('Failed to copy config file: {0}'),
   4103: () => $gettext('Failed to copy database directory: {0}'),
   4103: () => $gettext('Failed to copy database directory: {0}'),
@@ -17,6 +18,7 @@ export default {
   4105: () => $gettext('Failed to calculate hash: {0}'),
   4105: () => $gettext('Failed to calculate hash: {0}'),
   4106: () => $gettext('Nginx config directory is not set'),
   4106: () => $gettext('Nginx config directory is not set'),
   4107: () => $gettext('Failed to copy Nginx config directory: {0}'),
   4107: () => $gettext('Failed to copy Nginx config directory: {0}'),
+  4108: () => $gettext('Failed to read symlink: {0}'),
   4201: () => $gettext('Failed to read file: {0}'),
   4201: () => $gettext('Failed to read file: {0}'),
   4202: () => $gettext('Failed to encrypt file: {0}'),
   4202: () => $gettext('Failed to encrypt file: {0}'),
   4203: () => $gettext('Failed to write encrypted file: {0}'),
   4203: () => $gettext('Failed to write encrypted file: {0}'),
@@ -45,6 +47,9 @@ export default {
   4603: () => $gettext('Failed to create parent directory: {0}'),
   4603: () => $gettext('Failed to create parent directory: {0}'),
   4604: () => $gettext('Failed to create file: {0}'),
   4604: () => $gettext('Failed to create file: {0}'),
   4605: () => $gettext('Failed to open zip entry: {0}'),
   4605: () => $gettext('Failed to open zip entry: {0}'),
+  4606: () => $gettext('Failed to create symbolic link: {0}'),
+  4607: () => $gettext('Invalid file path: {0}'),
+  4608: () => $gettext('Failed to evaluate symbolic links: {0}'),
   4701: () => $gettext('Failed to read encrypted file: {0}'),
   4701: () => $gettext('Failed to read encrypted file: {0}'),
   4702: () => $gettext('Failed to decrypt file: {0}'),
   4702: () => $gettext('Failed to decrypt file: {0}'),
   4703: () => $gettext('Failed to write decrypted file: {0}'),
   4703: () => $gettext('Failed to write decrypted file: {0}'),

+ 4 - 0
app/src/constants/errors/system.ts

@@ -0,0 +1,4 @@
+export default {
+  40301: () => $gettext('Nginx UI already installed'),
+  40302: () => $gettext('Installation is not allowed after 10 minutes of system startup'),
+}

+ 93 - 53
app/src/language/ar/app.po

@@ -281,7 +281,7 @@ msgstr "رجوع"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:39
+#: src/constants/errors/backup.ts:41
 #, fuzzy
 #, fuzzy
 msgid "Backup file not found: {0}"
 msgid "Backup file not found: {0}"
 msgstr "لم يتم العثور على الملف"
 msgstr "لم يتم العثور على الملف"
@@ -518,7 +518,7 @@ msgstr "أمر"
 msgid "Comments"
 msgid "Comments"
 msgstr "تعليقات"
 msgstr "تعليقات"
 
 
-#: src/constants/errors/backup.ts:13
+#: src/constants/errors/backup.ts:14
 #, fuzzy
 #, fuzzy
 msgid "Config path is empty"
 msgid "Config path is empty"
 msgstr "نماذج التكوين"
 msgstr "نماذج التكوين"
@@ -667,7 +667,7 @@ msgstr "قم بتخصيص اسم العقدة المحلية ليتم عرضها
 msgid "Dashboard"
 msgid "Dashboard"
 msgstr "لوحة المعلومات"
 msgstr "لوحة المعلومات"
 
 
-#: src/views/other/Install.vue:119
+#: src/views/other/Install.vue:152
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "قاعدة البيانات (اختياري، الافتراضي: قاعدة البيانات)"
 msgstr "قاعدة البيانات (اختياري، الافتراضي: قاعدة البيانات)"
 
 
@@ -980,7 +980,7 @@ msgstr "تعديل البث"
 msgid "Email"
 msgid "Email"
 msgstr "بريد إلكتروني"
 msgstr "بريد إلكتروني"
 
 
-#: src/views/other/Install.vue:88
+#: src/views/other/Install.vue:121
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "البريد الإلكتروني (*)"
 msgstr "البريد الإلكتروني (*)"
 
 
@@ -1121,37 +1121,42 @@ msgstr "فشل في التفعيل %{msg}"
 msgid "Failed to backup Nginx UI files: {0}"
 msgid "Failed to backup Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:17
+#: src/constants/errors/backup.ts:18
 #, fuzzy
 #, fuzzy
 msgid "Failed to calculate hash: {0}"
 msgid "Failed to calculate hash: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:53
+#: src/constants/errors/backup.ts:58
 msgid "Failed to calculate Nginx hash: {0}"
 msgid "Failed to calculate Nginx hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:52
+#: src/constants/errors/backup.ts:57
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:14
+#: src/constants/errors/backup.ts:13
+#, fuzzy
+msgid "Failed to cleanup temporary directory: {0}"
+msgstr "فشل في التفعيل %{msg}"
+
+#: src/constants/errors/backup.ts:15
 msgid "Failed to copy config file: {0}"
 msgid "Failed to copy config file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:15
+#: src/constants/errors/backup.ts:16
 msgid "Failed to copy database directory: {0}"
 msgid "Failed to copy database directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:16
+#: src/constants/errors/backup.ts:17
 #, fuzzy
 #, fuzzy
 msgid "Failed to copy database file: {0}"
 msgid "Failed to copy database file: {0}"
 msgstr "فشل في تعطيل %{msg}"
 msgstr "فشل في تعطيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:30
+#: src/constants/errors/backup.ts:32
 msgid "Failed to copy file content: {0}"
 msgid "Failed to copy file content: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:19
+#: src/constants/errors/backup.ts:20
 msgid "Failed to copy Nginx config directory: {0}"
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1165,12 +1170,12 @@ msgstr "فشل في التفعيل %{msg}"
 msgid "Failed to create backup file: {0}"
 msgid "Failed to create backup file: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:44
+#: src/constants/errors/backup.ts:46
 #, fuzzy
 #, fuzzy
 msgid "Failed to create directory: {0}"
 msgid "Failed to create directory: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:46
+#: src/constants/errors/backup.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Failed to create file: {0}"
 msgid "Failed to create file: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
@@ -1180,15 +1185,20 @@ msgstr "فشل في التفعيل %{msg}"
 msgid "Failed to create hash info file: {0}"
 msgid "Failed to create hash info file: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:45
+#: src/constants/errors/backup.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Failed to create parent directory: {0}"
 msgid "Failed to create parent directory: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:32
+#: src/constants/errors/backup.ts:34
 msgid "Failed to create restore directory: {0}"
 msgid "Failed to create restore directory: {0}"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/backup.ts:50
+#, fuzzy
+msgid "Failed to create symbolic link: {0}"
+msgstr "فشل في التفعيل %{msg}"
+
 #: src/constants/errors/backup.ts:2
 #: src/constants/errors/backup.ts:2
 #, fuzzy
 #, fuzzy
 msgid "Failed to create temporary directory"
 msgid "Failed to create temporary directory"
@@ -1204,36 +1214,36 @@ msgstr "فشل في التفعيل %{msg}"
 msgid "Failed to create zip archive: {0}"
 msgid "Failed to create zip archive: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:27
+#: src/constants/errors/backup.ts:29
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip entry: {0}"
 msgid "Failed to create zip entry: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:26
+#: src/constants/errors/backup.ts:28
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip file: {0}"
 msgid "Failed to create zip file: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:29
+#: src/constants/errors/backup.ts:31
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip header: {0}"
 msgid "Failed to create zip header: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:24
+#: src/constants/errors/backup.ts:26
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt data: {0}"
 msgid "Failed to decrypt data: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:49
+#: src/constants/errors/backup.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt file: {0}"
 msgid "Failed to decrypt file: {0}"
 msgstr "فشل في تعطيل %{msg}"
 msgstr "فشل في تعطيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:35
+#: src/constants/errors/backup.ts:37
 msgid "Failed to decrypt Nginx directory: {0}"
 msgid "Failed to decrypt Nginx directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:34
+#: src/constants/errors/backup.ts:36
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1251,12 +1261,12 @@ msgstr "فشل في تعطيل %{msg}"
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:23
+#: src/constants/errors/backup.ts:25
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt data: {0}"
 msgid "Failed to encrypt data: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:21
+#: src/constants/errors/backup.ts:23
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt file: {0}"
 msgid "Failed to encrypt file: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
@@ -1269,7 +1279,12 @@ msgstr ""
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:33
+#: src/constants/errors/backup.ts:52
+#, fuzzy
+msgid "Failed to evaluate symbolic links: {0}"
+msgstr "فشل في التفعيل %{msg}"
+
+#: src/constants/errors/backup.ts:35
 #, fuzzy
 #, fuzzy
 msgid "Failed to extract archive: {0}"
 msgid "Failed to extract archive: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
@@ -1288,17 +1303,17 @@ msgstr "فشل في الحصول على معلومات الشهادة"
 msgid "Failed to get certificate information"
 msgid "Failed to get certificate information"
 msgstr "فشل في الحصول على معلومات الشهادة"
 msgstr "فشل في الحصول على معلومات الشهادة"
 
 
-#: src/constants/errors/backup.ts:28
+#: src/constants/errors/backup.ts:30
 #, fuzzy
 #, fuzzy
 msgid "Failed to open source file: {0}"
 msgid "Failed to open source file: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:47
+#: src/constants/errors/backup.ts:49
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip entry: {0}"
 msgid "Failed to open zip entry: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:43
+#: src/constants/errors/backup.ts:45
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip file: {0}"
 msgid "Failed to open zip file: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
@@ -1307,17 +1322,17 @@ msgstr "فشل في التفعيل %{msg}"
 msgid "Failed to parse nginx.conf"
 msgid "Failed to parse nginx.conf"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:48
+#: src/constants/errors/backup.ts:53
 #, fuzzy
 #, fuzzy
 msgid "Failed to read encrypted file: {0}"
 msgid "Failed to read encrypted file: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:20
+#: src/constants/errors/backup.ts:22
 #, fuzzy
 #, fuzzy
 msgid "Failed to read file: {0}"
 msgid "Failed to read file: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:51
+#: src/constants/errors/backup.ts:56
 #, fuzzy
 #, fuzzy
 msgid "Failed to read hash info file: {0}"
 msgid "Failed to read hash info file: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
@@ -1327,12 +1342,17 @@ msgstr "فشل في التفعيل %{msg}"
 msgid "Failed to read nginx.conf"
 msgid "Failed to read nginx.conf"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:37
+#: src/constants/errors/backup.ts:21
+#, fuzzy
+msgid "Failed to read symlink: {0}"
+msgstr "فشل في التفعيل %{msg}"
+
+#: src/constants/errors/backup.ts:39
 #, fuzzy
 #, fuzzy
 msgid "Failed to restore Nginx configs: {0}"
 msgid "Failed to restore Nginx configs: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:38
+#: src/constants/errors/backup.ts:40
 msgid "Failed to restore Nginx UI files: {0}"
 msgid "Failed to restore Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1341,20 +1361,20 @@ msgstr ""
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr "فشل في الحفظ، تم اكتشاف خطأ(أخطاء) في بناء الجملة في التكوين."
 msgstr "فشل في الحفظ، تم اكتشاف خطأ(أخطاء) في بناء الجملة في التكوين."
 
 
-#: src/constants/errors/backup.ts:36
+#: src/constants/errors/backup.ts:38
 #, fuzzy
 #, fuzzy
 msgid "Failed to verify hashes: {0}"
 msgid "Failed to verify hashes: {0}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/constants/errors/backup.ts:50
+#: src/constants/errors/backup.ts:55
 msgid "Failed to write decrypted file: {0}"
 msgid "Failed to write decrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:22
+#: src/constants/errors/backup.ts:24
 msgid "Failed to write encrypted file: {0}"
 msgid "Failed to write encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:31
+#: src/constants/errors/backup.ts:33
 msgid "Failed to write to zip buffer: {0}"
 msgid "Failed to write to zip buffer: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1449,7 +1469,7 @@ msgstr "جارٍ الحصول على الشهادة، يرجى الانتظار.
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr "وكيل Github"
 msgstr "وكيل Github"
 
 
-#: src/constants/errors/backup.ts:54
+#: src/constants/errors/backup.ts:59
 msgid "Hash verification failed: file integrity compromised"
 msgid "Hash verification failed: file integrity compromised"
 msgstr ""
 msgstr ""
 
 
@@ -1535,14 +1555,24 @@ msgstr "أدخل الرمز من التطبيق:"
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr "أدخل رمز الاسترداد:"
 msgstr "أدخل رمز الاسترداد:"
 
 
-#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:134
+#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:168
 msgid "Install"
 msgid "Install"
 msgstr "تثبيت"
 msgstr "تثبيت"
 
 
-#: src/views/other/Install.vue:67
+#: src/views/other/Install.vue:89
 msgid "Install successfully"
 msgid "Install successfully"
 msgstr "تم التثبيت بنجاح"
 msgstr "تم التثبيت بنجاح"
 
 
+#: src/constants/errors/system.ts:3
+msgid "Installation is not allowed after 10 minutes of system startup"
+msgstr ""
+
+#: src/views/other/Install.vue:113
+msgid ""
+"Installation is not allowed after 10 minutes of system startup, please "
+"restart the Nginx UI."
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:25
 #: src/views/preference/LogrotateSettings.vue:25
 msgid "Interval"
 msgid "Interval"
 msgstr "فترة"
 msgstr "فترة"
@@ -1551,12 +1581,12 @@ msgstr "فترة"
 msgid "Invalid"
 msgid "Invalid"
 msgstr "غير صالح"
 msgstr "غير صالح"
 
 
-#: src/constants/errors/backup.ts:42
+#: src/constants/errors/backup.ts:44
 #, fuzzy
 #, fuzzy
 msgid "Invalid AES IV format: {0}"
 msgid "Invalid AES IV format: {0}"
 msgstr "رمز 2FA أو الاسترداد غير صالح"
 msgstr "رمز 2FA أو الاسترداد غير صالح"
 
 
-#: src/constants/errors/backup.ts:41
+#: src/constants/errors/backup.ts:43
 #, fuzzy
 #, fuzzy
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "رمز 2FA أو الاسترداد غير صالح"
 msgstr "رمز 2FA أو الاسترداد غير صالح"
@@ -1566,6 +1596,11 @@ msgstr "رمز 2FA أو الاسترداد غير صالح"
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "اسم ملف غير صالح"
 msgstr "اسم ملف غير صالح"
 
 
+#: src/constants/errors/backup.ts:51
+#, fuzzy
+msgid "Invalid file path: {0}"
+msgstr "رمز 2FA أو الاسترداد غير صالح"
+
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/ConfigEditor.vue:250
 #: src/views/config/ConfigEditor.vue:250
 msgid "Invalid filename"
 msgid "Invalid filename"
@@ -1580,7 +1615,7 @@ msgstr "اسم المجلد غير صالح"
 msgid "Invalid otp code"
 msgid "Invalid otp code"
 msgstr "رمز 2FA أو الاسترداد غير صالح"
 msgstr "رمز 2FA أو الاسترداد غير صالح"
 
 
-#: src/constants/errors/backup.ts:25
+#: src/constants/errors/backup.ts:27
 msgid "Invalid padding in decrypted data"
 msgid "Invalid padding in decrypted data"
 msgstr ""
 msgstr ""
 
 
@@ -1598,7 +1633,7 @@ msgstr "رمز 2FA أو الاسترداد غير صالح"
 msgid "Invalid request format"
 msgid "Invalid request format"
 msgstr "رمز 2FA أو الاسترداد غير صالح"
 msgstr "رمز 2FA أو الاسترداد غير صالح"
 
 
-#: src/constants/errors/backup.ts:40
+#: src/constants/errors/backup.ts:42
 #, fuzzy
 #, fuzzy
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "رمز 2FA أو الاسترداد غير صالح"
 msgstr "رمز 2FA أو الاسترداد غير صالح"
@@ -1908,7 +1943,7 @@ msgstr ""
 msgid "Nginx conf not include stream-enabled"
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:18
+#: src/constants/errors/backup.ts:19
 #, fuzzy
 #, fuzzy
 msgid "Nginx config directory is not set"
 msgid "Nginx config directory is not set"
 msgstr "قائمة السماح لمجلد سجلات Nginx"
 msgstr "قائمة السماح لمجلد سجلات Nginx"
@@ -1967,6 +2002,11 @@ msgstr "أمر إعادة تشغيل Nginx"
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "تم إعادة تشغيل Nginx بنجاح"
 msgstr "تم إعادة تشغيل Nginx بنجاح"
 
 
+#: src/constants/errors/system.ts:2
+#, fuzzy
+msgid "Nginx UI already installed"
+msgstr "هذه القيمة مستخدمة مسبقا"
+
 #: src/views/system/Backup/SystemRestore.vue:88
 #: src/views/system/Backup/SystemRestore.vue:88
 #, fuzzy
 #, fuzzy
 msgid "Nginx UI configuration has been restored"
 msgid "Nginx UI configuration has been restored"
@@ -2163,7 +2203,7 @@ msgstr ""
 msgid "Password"
 msgid "Password"
 msgstr "كلمة المرور"
 msgstr "كلمة المرور"
 
 
-#: src/views/other/Install.vue:108
+#: src/views/other/Install.vue:141
 msgid "Password (*)"
 msgid "Password (*)"
 msgstr "كلمة المرور (*)"
 msgstr "كلمة المرور (*)"
 
 
@@ -2172,7 +2212,7 @@ msgstr "كلمة المرور (*)"
 msgid "Password incorrect"
 msgid "Password incorrect"
 msgstr "اسم المستخدم أو كلمة المرور غير صحيحة"
 msgstr "اسم المستخدم أو كلمة المرور غير صحيحة"
 
 
-#: src/views/other/Install.vue:48
+#: src/views/other/Install.vue:70
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 msgstr ""
 
 
@@ -2272,15 +2312,15 @@ msgid ""
 "configuration."
 "configuration."
 msgstr "يرجى إدخال الاسم، سيتم استخدامه كاسم الملف للتكوين الجديد."
 msgstr "يرجى إدخال الاسم، سيتم استخدامه كاسم الملف للتكوين الجديد."
 
 
-#: src/views/other/Install.vue:32
+#: src/views/other/Install.vue:54
 msgid "Please input your E-mail!"
 msgid "Please input your E-mail!"
 msgstr "يرجى إدخال بريدك الإلكتروني!"
 msgstr "يرجى إدخال بريدك الإلكتروني!"
 
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
+#: src/views/other/Install.vue:66 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgid "Please input your password!"
 msgstr "يرجى إدخال كلمة المرور الخاصة بك!"
 msgstr "يرجى إدخال كلمة المرور الخاصة بك!"
 
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
+#: src/views/other/Install.vue:60 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgid "Please input your username!"
 msgstr "يرجى إدخال اسم المستخدم الخاص بك!"
 msgstr "يرجى إدخال اسم المستخدم الخاص بك!"
 
 
@@ -3023,7 +3063,7 @@ msgstr ""
 "سيتم فحص شهادة النطاق لمدة 30 دقيقة، وسيتم تجديدها إذا مر أكثر من أسبوع أو "
 "سيتم فحص شهادة النطاق لمدة 30 دقيقة، وسيتم تجديدها إذا مر أكثر من أسبوع أو "
 "الفترة التي حددتها في الإعدادات منذ إصدارها الأخير."
 "الفترة التي حددتها في الإعدادات منذ إصدارها الأخير."
 
 
-#: src/views/other/Install.vue:54
+#: src/views/other/Install.vue:76
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "لا يمكن أن يحتوي اسم الملف على الأحرف التالية: %{c}"
 msgstr "لا يمكن أن يحتوي اسم الملف على الأحرف التالية: %{c}"
 
 
@@ -3350,7 +3390,7 @@ msgstr ""
 msgid "Username"
 msgid "Username"
 msgstr "اسم المستخدم"
 msgstr "اسم المستخدم"
 
 
-#: src/views/other/Install.vue:98
+#: src/views/other/Install.vue:131
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "اسم المستخدم (*)"
 msgstr "اسم المستخدم (*)"
 
 

+ 93 - 53
app/src/language/de_DE/app.po

@@ -295,7 +295,7 @@ msgstr "Zurück"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:39
+#: src/constants/errors/backup.ts:41
 #, fuzzy
 #, fuzzy
 msgid "Backup file not found: {0}"
 msgid "Backup file not found: {0}"
 msgstr "File Not Found"
 msgstr "File Not Found"
@@ -536,7 +536,7 @@ msgstr "Kommando"
 msgid "Comments"
 msgid "Comments"
 msgstr "Kom"
 msgstr "Kom"
 
 
-#: src/constants/errors/backup.ts:13
+#: src/constants/errors/backup.ts:14
 #, fuzzy
 #, fuzzy
 msgid "Config path is empty"
 msgid "Config path is empty"
 msgstr "Konfigurationen"
 msgstr "Konfigurationen"
@@ -691,7 +691,7 @@ msgstr ""
 msgid "Dashboard"
 msgid "Dashboard"
 msgstr "Übersicht"
 msgstr "Übersicht"
 
 
-#: src/views/other/Install.vue:119
+#: src/views/other/Install.vue:152
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "Datenbank (Optional, Standard: database)"
 msgstr "Datenbank (Optional, Standard: database)"
 
 
@@ -1021,7 +1021,7 @@ msgstr "Seite bearbeiten"
 msgid "Email"
 msgid "Email"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
-#: src/views/other/Install.vue:88
+#: src/views/other/Install.vue:121
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
@@ -1169,37 +1169,42 @@ msgstr ""
 msgid "Failed to backup Nginx UI files: {0}"
 msgid "Failed to backup Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:17
+#: src/constants/errors/backup.ts:18
 #, fuzzy
 #, fuzzy
 msgid "Failed to calculate hash: {0}"
 msgid "Failed to calculate hash: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:53
+#: src/constants/errors/backup.ts:58
 msgid "Failed to calculate Nginx hash: {0}"
 msgid "Failed to calculate Nginx hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:52
+#: src/constants/errors/backup.ts:57
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:14
+#: src/constants/errors/backup.ts:13
+#, fuzzy
+msgid "Failed to cleanup temporary directory: {0}"
+msgstr "Aktiviern von %{msg} fehlgeschlagen"
+
+#: src/constants/errors/backup.ts:15
 msgid "Failed to copy config file: {0}"
 msgid "Failed to copy config file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:15
+#: src/constants/errors/backup.ts:16
 msgid "Failed to copy database directory: {0}"
 msgid "Failed to copy database directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:16
+#: src/constants/errors/backup.ts:17
 #, fuzzy
 #, fuzzy
 msgid "Failed to copy database file: {0}"
 msgid "Failed to copy database file: {0}"
 msgstr "Deaktivierung von %{msg} fehlgeschlagen"
 msgstr "Deaktivierung von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:30
+#: src/constants/errors/backup.ts:32
 msgid "Failed to copy file content: {0}"
 msgid "Failed to copy file content: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:19
+#: src/constants/errors/backup.ts:20
 msgid "Failed to copy Nginx config directory: {0}"
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1213,12 +1218,12 @@ msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgid "Failed to create backup file: {0}"
 msgid "Failed to create backup file: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:44
+#: src/constants/errors/backup.ts:46
 #, fuzzy
 #, fuzzy
 msgid "Failed to create directory: {0}"
 msgid "Failed to create directory: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:46
+#: src/constants/errors/backup.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Failed to create file: {0}"
 msgid "Failed to create file: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
@@ -1228,15 +1233,20 @@ msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgid "Failed to create hash info file: {0}"
 msgid "Failed to create hash info file: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:45
+#: src/constants/errors/backup.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Failed to create parent directory: {0}"
 msgid "Failed to create parent directory: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:32
+#: src/constants/errors/backup.ts:34
 msgid "Failed to create restore directory: {0}"
 msgid "Failed to create restore directory: {0}"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/backup.ts:50
+#, fuzzy
+msgid "Failed to create symbolic link: {0}"
+msgstr "Aktiviern von %{msg} fehlgeschlagen"
+
 #: src/constants/errors/backup.ts:2
 #: src/constants/errors/backup.ts:2
 #, fuzzy
 #, fuzzy
 msgid "Failed to create temporary directory"
 msgid "Failed to create temporary directory"
@@ -1252,36 +1262,36 @@ msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgid "Failed to create zip archive: {0}"
 msgid "Failed to create zip archive: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:27
+#: src/constants/errors/backup.ts:29
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip entry: {0}"
 msgid "Failed to create zip entry: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:26
+#: src/constants/errors/backup.ts:28
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip file: {0}"
 msgid "Failed to create zip file: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:29
+#: src/constants/errors/backup.ts:31
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip header: {0}"
 msgid "Failed to create zip header: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:24
+#: src/constants/errors/backup.ts:26
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt data: {0}"
 msgid "Failed to decrypt data: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:49
+#: src/constants/errors/backup.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt file: {0}"
 msgid "Failed to decrypt file: {0}"
 msgstr "Deaktivierung von %{msg} fehlgeschlagen"
 msgstr "Deaktivierung von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:35
+#: src/constants/errors/backup.ts:37
 msgid "Failed to decrypt Nginx directory: {0}"
 msgid "Failed to decrypt Nginx directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:34
+#: src/constants/errors/backup.ts:36
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1299,12 +1309,12 @@ msgstr "Deaktivierung von %{msg} fehlgeschlagen"
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:23
+#: src/constants/errors/backup.ts:25
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt data: {0}"
 msgid "Failed to encrypt data: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:21
+#: src/constants/errors/backup.ts:23
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt file: {0}"
 msgid "Failed to encrypt file: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
@@ -1317,7 +1327,12 @@ msgstr ""
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:33
+#: src/constants/errors/backup.ts:52
+#, fuzzy
+msgid "Failed to evaluate symbolic links: {0}"
+msgstr "Aktiviern von %{msg} fehlgeschlagen"
+
+#: src/constants/errors/backup.ts:35
 #, fuzzy
 #, fuzzy
 msgid "Failed to extract archive: {0}"
 msgid "Failed to extract archive: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
@@ -1336,17 +1351,17 @@ msgstr "Fehler beim Abrufen von Zertifikatsinformationen"
 msgid "Failed to get certificate information"
 msgid "Failed to get certificate information"
 msgstr "Fehler beim Abrufen von Zertifikatsinformationen"
 msgstr "Fehler beim Abrufen von Zertifikatsinformationen"
 
 
-#: src/constants/errors/backup.ts:28
+#: src/constants/errors/backup.ts:30
 #, fuzzy
 #, fuzzy
 msgid "Failed to open source file: {0}"
 msgid "Failed to open source file: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:47
+#: src/constants/errors/backup.ts:49
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip entry: {0}"
 msgid "Failed to open zip entry: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:43
+#: src/constants/errors/backup.ts:45
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip file: {0}"
 msgid "Failed to open zip file: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
@@ -1355,16 +1370,16 @@ msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgid "Failed to parse nginx.conf"
 msgid "Failed to parse nginx.conf"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:48
+#: src/constants/errors/backup.ts:53
 msgid "Failed to read encrypted file: {0}"
 msgid "Failed to read encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:20
+#: src/constants/errors/backup.ts:22
 #, fuzzy
 #, fuzzy
 msgid "Failed to read file: {0}"
 msgid "Failed to read file: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:51
+#: src/constants/errors/backup.ts:56
 msgid "Failed to read hash info file: {0}"
 msgid "Failed to read hash info file: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1372,11 +1387,16 @@ msgstr ""
 msgid "Failed to read nginx.conf"
 msgid "Failed to read nginx.conf"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:37
+#: src/constants/errors/backup.ts:21
+#, fuzzy
+msgid "Failed to read symlink: {0}"
+msgstr "Aktiviern von %{msg} fehlgeschlagen"
+
+#: src/constants/errors/backup.ts:39
 msgid "Failed to restore Nginx configs: {0}"
 msgid "Failed to restore Nginx configs: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:38
+#: src/constants/errors/backup.ts:40
 msgid "Failed to restore Nginx UI files: {0}"
 msgid "Failed to restore Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1386,20 +1406,20 @@ msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr ""
 msgstr ""
 "Fehler beim Speichern, Syntaxfehler wurden in der Konfiguration erkannt."
 "Fehler beim Speichern, Syntaxfehler wurden in der Konfiguration erkannt."
 
 
-#: src/constants/errors/backup.ts:36
+#: src/constants/errors/backup.ts:38
 #, fuzzy
 #, fuzzy
 msgid "Failed to verify hashes: {0}"
 msgid "Failed to verify hashes: {0}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 
 
-#: src/constants/errors/backup.ts:50
+#: src/constants/errors/backup.ts:55
 msgid "Failed to write decrypted file: {0}"
 msgid "Failed to write decrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:22
+#: src/constants/errors/backup.ts:24
 msgid "Failed to write encrypted file: {0}"
 msgid "Failed to write encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:31
+#: src/constants/errors/backup.ts:33
 msgid "Failed to write to zip buffer: {0}"
 msgid "Failed to write to zip buffer: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1500,7 +1520,7 @@ msgstr "Hole das Zertifikat, bitte warten..."
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:54
+#: src/constants/errors/backup.ts:59
 msgid "Hash verification failed: file integrity compromised"
 msgid "Hash verification failed: file integrity compromised"
 msgstr ""
 msgstr ""
 
 
@@ -1590,15 +1610,25 @@ msgstr "Füge den Code aus der App ein:"
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr "Füge den Wiederherstellungscode ein:"
 msgstr "Füge den Wiederherstellungscode ein:"
 
 
-#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:134
+#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:168
 msgid "Install"
 msgid "Install"
 msgstr "Installieren"
 msgstr "Installieren"
 
 
-#: src/views/other/Install.vue:67
+#: src/views/other/Install.vue:89
 #, fuzzy
 #, fuzzy
 msgid "Install successfully"
 msgid "Install successfully"
 msgstr "Aktualisierung erfolgreich"
 msgstr "Aktualisierung erfolgreich"
 
 
+#: src/constants/errors/system.ts:3
+msgid "Installation is not allowed after 10 minutes of system startup"
+msgstr ""
+
+#: src/views/other/Install.vue:113
+msgid ""
+"Installation is not allowed after 10 minutes of system startup, please "
+"restart the Nginx UI."
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:25
 #: src/views/preference/LogrotateSettings.vue:25
 msgid "Interval"
 msgid "Interval"
 msgstr "Intervall"
 msgstr "Intervall"
@@ -1608,11 +1638,11 @@ msgstr "Intervall"
 msgid "Invalid"
 msgid "Invalid"
 msgstr "Ungültige E-Mail!"
 msgstr "Ungültige E-Mail!"
 
 
-#: src/constants/errors/backup.ts:42
+#: src/constants/errors/backup.ts:44
 msgid "Invalid AES IV format: {0}"
 msgid "Invalid AES IV format: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:41
+#: src/constants/errors/backup.ts:43
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1621,6 +1651,11 @@ msgstr ""
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "Ungültige E-Mail!"
 msgstr "Ungültige E-Mail!"
 
 
+#: src/constants/errors/backup.ts:51
+#, fuzzy
+msgid "Invalid file path: {0}"
+msgstr "Ungültige E-Mail!"
+
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/ConfigEditor.vue:250
 #: src/views/config/ConfigEditor.vue:250
 #, fuzzy
 #, fuzzy
@@ -1636,7 +1671,7 @@ msgstr "Ungültiger Ordnername"
 msgid "Invalid otp code"
 msgid "Invalid otp code"
 msgstr "Ungültiger 2FA- oder Wiederherstellungscode"
 msgstr "Ungültiger 2FA- oder Wiederherstellungscode"
 
 
-#: src/constants/errors/backup.ts:25
+#: src/constants/errors/backup.ts:27
 msgid "Invalid padding in decrypted data"
 msgid "Invalid padding in decrypted data"
 msgstr ""
 msgstr ""
 
 
@@ -1653,7 +1688,7 @@ msgstr "Ungültiger 2FA- oder Wiederherstellungscode"
 msgid "Invalid request format"
 msgid "Invalid request format"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:40
+#: src/constants/errors/backup.ts:42
 #, fuzzy
 #, fuzzy
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "Ungültiger 2FA- oder Wiederherstellungscode"
 msgstr "Ungültiger 2FA- oder Wiederherstellungscode"
@@ -1986,7 +2021,7 @@ msgstr ""
 msgid "Nginx conf not include stream-enabled"
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:18
+#: src/constants/errors/backup.ts:19
 #, fuzzy
 #, fuzzy
 msgid "Nginx config directory is not set"
 msgid "Nginx config directory is not set"
 msgstr "Nginx-Log-Verzeichnis-Whitelist"
 msgstr "Nginx-Log-Verzeichnis-Whitelist"
@@ -2049,6 +2084,11 @@ msgstr "Beffehl zum Neustarten von Nginx"
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
 
 
+#: src/constants/errors/system.ts:2
+#, fuzzy
+msgid "Nginx UI already installed"
+msgstr "Dieser Wert ist bereits vergeben"
+
 #: src/views/system/Backup/SystemRestore.vue:88
 #: src/views/system/Backup/SystemRestore.vue:88
 #, fuzzy
 #, fuzzy
 msgid "Nginx UI configuration has been restored"
 msgid "Nginx UI configuration has been restored"
@@ -2252,7 +2292,7 @@ msgstr ""
 msgid "Password"
 msgid "Password"
 msgstr "Passwort"
 msgstr "Passwort"
 
 
-#: src/views/other/Install.vue:108
+#: src/views/other/Install.vue:141
 msgid "Password (*)"
 msgid "Password (*)"
 msgstr "Passwort (*)"
 msgstr "Passwort (*)"
 
 
@@ -2261,7 +2301,7 @@ msgstr "Passwort (*)"
 msgid "Password incorrect"
 msgid "Password incorrect"
 msgstr "Benuztername oder Passwort ist falsch"
 msgstr "Benuztername oder Passwort ist falsch"
 
 
-#: src/views/other/Install.vue:48
+#: src/views/other/Install.vue:70
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr "Passwort darf nicht länger als 20 Zeichen sein"
 msgstr "Passwort darf nicht länger als 20 Zeichen sein"
 
 
@@ -2371,15 +2411,15 @@ msgstr ""
 "Bitte gib einen Namen ein, der als Dateiname der neuen Konfiguration "
 "Bitte gib einen Namen ein, der als Dateiname der neuen Konfiguration "
 "verwendet wird."
 "verwendet wird."
 
 
-#: src/views/other/Install.vue:32
+#: src/views/other/Install.vue:54
 msgid "Please input your E-mail!"
 msgid "Please input your E-mail!"
 msgstr "Bitte gib deine E-Mail-Adresse ein!"
 msgstr "Bitte gib deine E-Mail-Adresse ein!"
 
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
+#: src/views/other/Install.vue:66 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgid "Please input your password!"
 msgstr "Bitte gib dein Passwort ein!"
 msgstr "Bitte gib dein Passwort ein!"
 
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
+#: src/views/other/Install.vue:60 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgid "Please input your username!"
 msgstr "Bitte gib deinen Benutzernamen ein!"
 msgstr "Bitte gib deinen Benutzernamen ein!"
 
 
@@ -3162,7 +3202,7 @@ msgstr ""
 "Das Zertifikat für die Domain wird alle Stunde überprüft und erneuert, wenn "
 "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."
 "es seit der letzten Ausstellung vor mehr als 1 Monat ausgestellt wurde."
 
 
-#: src/views/other/Install.vue:54
+#: src/views/other/Install.vue:76
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "Der Dateiname darf die folgenden Zeichen nicht enthalten: %{c}"
 msgstr "Der Dateiname darf die folgenden Zeichen nicht enthalten: %{c}"
 
 
@@ -3495,7 +3535,7 @@ msgstr ""
 msgid "Username"
 msgid "Username"
 msgstr "Benutzername"
 msgstr "Benutzername"
 
 
-#: src/views/other/Install.vue:98
+#: src/views/other/Install.vue:131
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Benutzername (*)"
 msgstr "Benutzername (*)"
 
 

+ 92 - 53
app/src/language/en/app.po

@@ -293,7 +293,7 @@ msgstr "Back"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:39
+#: src/constants/errors/backup.ts:41
 #, fuzzy
 #, fuzzy
 msgid "Backup file not found: {0}"
 msgid "Backup file not found: {0}"
 msgstr "File Not Found"
 msgstr "File Not Found"
@@ -531,7 +531,7 @@ msgstr "Comments"
 msgid "Comments"
 msgid "Comments"
 msgstr "Comments"
 msgstr "Comments"
 
 
-#: src/constants/errors/backup.ts:13
+#: src/constants/errors/backup.ts:14
 #, fuzzy
 #, fuzzy
 msgid "Config path is empty"
 msgid "Config path is empty"
 msgstr "Configurations"
 msgstr "Configurations"
@@ -683,7 +683,7 @@ msgstr ""
 msgid "Dashboard"
 msgid "Dashboard"
 msgstr "Dashboard"
 msgstr "Dashboard"
 
 
-#: src/views/other/Install.vue:119
+#: src/views/other/Install.vue:152
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "Database (Optional, default: database)"
 msgstr "Database (Optional, default: database)"
 
 
@@ -1008,7 +1008,7 @@ msgstr "Edit Site"
 msgid "Email"
 msgid "Email"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
-#: src/views/other/Install.vue:88
+#: src/views/other/Install.vue:121
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
@@ -1157,37 +1157,42 @@ msgstr "Failed to enable %{msg}"
 msgid "Failed to backup Nginx UI files: {0}"
 msgid "Failed to backup Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:17
+#: src/constants/errors/backup.ts:18
 #, fuzzy
 #, fuzzy
 msgid "Failed to calculate hash: {0}"
 msgid "Failed to calculate hash: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:53
+#: src/constants/errors/backup.ts:58
 msgid "Failed to calculate Nginx hash: {0}"
 msgid "Failed to calculate Nginx hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:52
+#: src/constants/errors/backup.ts:57
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:14
+#: src/constants/errors/backup.ts:13
+#, fuzzy
+msgid "Failed to cleanup temporary directory: {0}"
+msgstr "Failed to enable %{msg}"
+
+#: src/constants/errors/backup.ts:15
 msgid "Failed to copy config file: {0}"
 msgid "Failed to copy config file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:15
+#: src/constants/errors/backup.ts:16
 msgid "Failed to copy database directory: {0}"
 msgid "Failed to copy database directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:16
+#: src/constants/errors/backup.ts:17
 #, fuzzy
 #, fuzzy
 msgid "Failed to copy database file: {0}"
 msgid "Failed to copy database file: {0}"
 msgstr "Failed to disable %{msg}"
 msgstr "Failed to disable %{msg}"
 
 
-#: src/constants/errors/backup.ts:30
+#: src/constants/errors/backup.ts:32
 msgid "Failed to copy file content: {0}"
 msgid "Failed to copy file content: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:19
+#: src/constants/errors/backup.ts:20
 msgid "Failed to copy Nginx config directory: {0}"
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1201,12 +1206,12 @@ msgstr "Failed to enable %{msg}"
 msgid "Failed to create backup file: {0}"
 msgid "Failed to create backup file: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:44
+#: src/constants/errors/backup.ts:46
 #, fuzzy
 #, fuzzy
 msgid "Failed to create directory: {0}"
 msgid "Failed to create directory: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:46
+#: src/constants/errors/backup.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Failed to create file: {0}"
 msgid "Failed to create file: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
@@ -1216,15 +1221,20 @@ msgstr "Failed to enable %{msg}"
 msgid "Failed to create hash info file: {0}"
 msgid "Failed to create hash info file: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:45
+#: src/constants/errors/backup.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Failed to create parent directory: {0}"
 msgid "Failed to create parent directory: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:32
+#: src/constants/errors/backup.ts:34
 msgid "Failed to create restore directory: {0}"
 msgid "Failed to create restore directory: {0}"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/backup.ts:50
+#, fuzzy
+msgid "Failed to create symbolic link: {0}"
+msgstr "Failed to enable %{msg}"
+
 #: src/constants/errors/backup.ts:2
 #: src/constants/errors/backup.ts:2
 #, fuzzy
 #, fuzzy
 msgid "Failed to create temporary directory"
 msgid "Failed to create temporary directory"
@@ -1240,36 +1250,36 @@ msgstr "Failed to enable %{msg}"
 msgid "Failed to create zip archive: {0}"
 msgid "Failed to create zip archive: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:27
+#: src/constants/errors/backup.ts:29
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip entry: {0}"
 msgid "Failed to create zip entry: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:26
+#: src/constants/errors/backup.ts:28
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip file: {0}"
 msgid "Failed to create zip file: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:29
+#: src/constants/errors/backup.ts:31
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip header: {0}"
 msgid "Failed to create zip header: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:24
+#: src/constants/errors/backup.ts:26
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt data: {0}"
 msgid "Failed to decrypt data: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:49
+#: src/constants/errors/backup.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt file: {0}"
 msgid "Failed to decrypt file: {0}"
 msgstr "Failed to disable %{msg}"
 msgstr "Failed to disable %{msg}"
 
 
-#: src/constants/errors/backup.ts:35
+#: src/constants/errors/backup.ts:37
 msgid "Failed to decrypt Nginx directory: {0}"
 msgid "Failed to decrypt Nginx directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:34
+#: src/constants/errors/backup.ts:36
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1287,12 +1297,12 @@ msgstr "Failed to disable %{msg}"
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:23
+#: src/constants/errors/backup.ts:25
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt data: {0}"
 msgid "Failed to encrypt data: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:21
+#: src/constants/errors/backup.ts:23
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt file: {0}"
 msgid "Failed to encrypt file: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
@@ -1305,7 +1315,12 @@ msgstr ""
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:33
+#: src/constants/errors/backup.ts:52
+#, fuzzy
+msgid "Failed to evaluate symbolic links: {0}"
+msgstr "Failed to enable %{msg}"
+
+#: src/constants/errors/backup.ts:35
 #, fuzzy
 #, fuzzy
 msgid "Failed to extract archive: {0}"
 msgid "Failed to extract archive: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
@@ -1325,17 +1340,17 @@ msgstr "Certificate is valid"
 msgid "Failed to get certificate information"
 msgid "Failed to get certificate information"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/constants/errors/backup.ts:28
+#: src/constants/errors/backup.ts:30
 #, fuzzy
 #, fuzzy
 msgid "Failed to open source file: {0}"
 msgid "Failed to open source file: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:47
+#: src/constants/errors/backup.ts:49
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip entry: {0}"
 msgid "Failed to open zip entry: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:43
+#: src/constants/errors/backup.ts:45
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip file: {0}"
 msgid "Failed to open zip file: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
@@ -1344,17 +1359,17 @@ msgstr "Failed to enable %{msg}"
 msgid "Failed to parse nginx.conf"
 msgid "Failed to parse nginx.conf"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:48
+#: src/constants/errors/backup.ts:53
 #, fuzzy
 #, fuzzy
 msgid "Failed to read encrypted file: {0}"
 msgid "Failed to read encrypted file: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:20
+#: src/constants/errors/backup.ts:22
 #, fuzzy
 #, fuzzy
 msgid "Failed to read file: {0}"
 msgid "Failed to read file: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:51
+#: src/constants/errors/backup.ts:56
 #, fuzzy
 #, fuzzy
 msgid "Failed to read hash info file: {0}"
 msgid "Failed to read hash info file: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
@@ -1364,12 +1379,17 @@ msgstr "Failed to enable %{msg}"
 msgid "Failed to read nginx.conf"
 msgid "Failed to read nginx.conf"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:37
+#: src/constants/errors/backup.ts:21
+#, fuzzy
+msgid "Failed to read symlink: {0}"
+msgstr "Failed to enable %{msg}"
+
+#: src/constants/errors/backup.ts:39
 #, fuzzy
 #, fuzzy
 msgid "Failed to restore Nginx configs: {0}"
 msgid "Failed to restore Nginx configs: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:38
+#: src/constants/errors/backup.ts:40
 msgid "Failed to restore Nginx UI files: {0}"
 msgid "Failed to restore Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1378,20 +1398,20 @@ msgstr ""
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:36
+#: src/constants/errors/backup.ts:38
 #, fuzzy
 #, fuzzy
 msgid "Failed to verify hashes: {0}"
 msgid "Failed to verify hashes: {0}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
-#: src/constants/errors/backup.ts:50
+#: src/constants/errors/backup.ts:55
 msgid "Failed to write decrypted file: {0}"
 msgid "Failed to write decrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:22
+#: src/constants/errors/backup.ts:24
 msgid "Failed to write encrypted file: {0}"
 msgid "Failed to write encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:31
+#: src/constants/errors/backup.ts:33
 msgid "Failed to write to zip buffer: {0}"
 msgid "Failed to write to zip buffer: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1489,7 +1509,7 @@ msgstr "Getting the certificate, please wait..."
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:54
+#: src/constants/errors/backup.ts:59
 msgid "Hash verification failed: file integrity compromised"
 msgid "Hash verification failed: file integrity compromised"
 msgstr ""
 msgstr ""
 
 
@@ -1572,15 +1592,25 @@ msgstr ""
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:134
+#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:168
 msgid "Install"
 msgid "Install"
 msgstr "Install"
 msgstr "Install"
 
 
-#: src/views/other/Install.vue:67
+#: src/views/other/Install.vue:89
 #, fuzzy
 #, fuzzy
 msgid "Install successfully"
 msgid "Install successfully"
 msgstr "Enabled successfully"
 msgstr "Enabled successfully"
 
 
+#: src/constants/errors/system.ts:3
+msgid "Installation is not allowed after 10 minutes of system startup"
+msgstr ""
+
+#: src/views/other/Install.vue:113
+msgid ""
+"Installation is not allowed after 10 minutes of system startup, please "
+"restart the Nginx UI."
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:25
 #: src/views/preference/LogrotateSettings.vue:25
 msgid "Interval"
 msgid "Interval"
 msgstr ""
 msgstr ""
@@ -1590,12 +1620,12 @@ msgstr ""
 msgid "Invalid"
 msgid "Invalid"
 msgstr "Invalid E-mail!"
 msgstr "Invalid E-mail!"
 
 
-#: src/constants/errors/backup.ts:42
+#: src/constants/errors/backup.ts:44
 #, fuzzy
 #, fuzzy
 msgid "Invalid AES IV format: {0}"
 msgid "Invalid AES IV format: {0}"
 msgstr "Invalid E-mail!"
 msgstr "Invalid E-mail!"
 
 
-#: src/constants/errors/backup.ts:41
+#: src/constants/errors/backup.ts:43
 #, fuzzy
 #, fuzzy
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "Invalid E-mail!"
 msgstr "Invalid E-mail!"
@@ -1605,6 +1635,11 @@ msgstr "Invalid E-mail!"
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "Invalid E-mail!"
 msgstr "Invalid E-mail!"
 
 
+#: src/constants/errors/backup.ts:51
+#, fuzzy
+msgid "Invalid file path: {0}"
+msgstr "Invalid E-mail!"
+
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/ConfigEditor.vue:250
 #: src/views/config/ConfigEditor.vue:250
 #, fuzzy
 #, fuzzy
@@ -1621,7 +1656,7 @@ msgstr "Invalid E-mail!"
 msgid "Invalid otp code"
 msgid "Invalid otp code"
 msgstr "Invalid E-mail!"
 msgstr "Invalid E-mail!"
 
 
-#: src/constants/errors/backup.ts:25
+#: src/constants/errors/backup.ts:27
 msgid "Invalid padding in decrypted data"
 msgid "Invalid padding in decrypted data"
 msgstr ""
 msgstr ""
 
 
@@ -1639,7 +1674,7 @@ msgstr "Invalid E-mail!"
 msgid "Invalid request format"
 msgid "Invalid request format"
 msgstr "Invalid E-mail!"
 msgstr "Invalid E-mail!"
 
 
-#: src/constants/errors/backup.ts:40
+#: src/constants/errors/backup.ts:42
 #, fuzzy
 #, fuzzy
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "Invalid E-mail!"
 msgstr "Invalid E-mail!"
@@ -1966,7 +2001,7 @@ msgstr ""
 msgid "Nginx conf not include stream-enabled"
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:18
+#: src/constants/errors/backup.ts:19
 #, fuzzy
 #, fuzzy
 msgid "Nginx config directory is not set"
 msgid "Nginx config directory is not set"
 msgstr "Configuration Name"
 msgstr "Configuration Name"
@@ -2030,6 +2065,10 @@ msgstr ""
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
+#: src/constants/errors/system.ts:2
+msgid "Nginx UI already installed"
+msgstr ""
+
 #: src/views/system/Backup/SystemRestore.vue:88
 #: src/views/system/Backup/SystemRestore.vue:88
 #, fuzzy
 #, fuzzy
 msgid "Nginx UI configuration has been restored"
 msgid "Nginx UI configuration has been restored"
@@ -2225,7 +2264,7 @@ msgstr ""
 msgid "Password"
 msgid "Password"
 msgstr "Password"
 msgstr "Password"
 
 
-#: src/views/other/Install.vue:108
+#: src/views/other/Install.vue:141
 msgid "Password (*)"
 msgid "Password (*)"
 msgstr "Password (*)"
 msgstr "Password (*)"
 
 
@@ -2234,7 +2273,7 @@ msgstr "Password (*)"
 msgid "Password incorrect"
 msgid "Password incorrect"
 msgstr "Password"
 msgstr "Password"
 
 
-#: src/views/other/Install.vue:48
+#: src/views/other/Install.vue:70
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 msgstr ""
 
 
@@ -2333,15 +2372,15 @@ msgid ""
 "configuration."
 "configuration."
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Install.vue:32
+#: src/views/other/Install.vue:54
 msgid "Please input your E-mail!"
 msgid "Please input your E-mail!"
 msgstr "Please input your E-mail!"
 msgstr "Please input your E-mail!"
 
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
+#: src/views/other/Install.vue:66 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgid "Please input your password!"
 msgstr "Please input your password!"
 msgstr "Please input your password!"
 
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
+#: src/views/other/Install.vue:60 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgid "Please input your username!"
 msgstr "Please input your username!"
 msgstr "Please input your username!"
 
 
@@ -3123,7 +3162,7 @@ msgstr ""
 "The certificate for the domain will be checked every hour, and will be "
 "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."
 "renewed if it has been more than 1 month since it was last issued."
 
 
-#: src/views/other/Install.vue:54
+#: src/views/other/Install.vue:76
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "The filename cannot contain the following characters: %{c}"
 msgstr "The filename cannot contain the following characters: %{c}"
 
 
@@ -3433,7 +3472,7 @@ msgstr ""
 msgid "Username"
 msgid "Username"
 msgstr "Username"
 msgstr "Username"
 
 
-#: src/views/other/Install.vue:98
+#: src/views/other/Install.vue:131
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Username (*)"
 msgstr "Username (*)"
 
 

+ 93 - 53
app/src/language/es/app.po

@@ -286,7 +286,7 @@ msgstr "Volver"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:39
+#: src/constants/errors/backup.ts:41
 #, fuzzy
 #, fuzzy
 msgid "Backup file not found: {0}"
 msgid "Backup file not found: {0}"
 msgstr "Archivo no Encontrado"
 msgstr "Archivo no Encontrado"
@@ -517,7 +517,7 @@ msgstr "Comando"
 msgid "Comments"
 msgid "Comments"
 msgstr "Comentarios"
 msgstr "Comentarios"
 
 
-#: src/constants/errors/backup.ts:13
+#: src/constants/errors/backup.ts:14
 #, fuzzy
 #, fuzzy
 msgid "Config path is empty"
 msgid "Config path is empty"
 msgstr "Plantillas de configuración"
 msgstr "Plantillas de configuración"
@@ -668,7 +668,7 @@ msgstr ""
 msgid "Dashboard"
 msgid "Dashboard"
 msgstr "Panel"
 msgstr "Panel"
 
 
-#: src/views/other/Install.vue:119
+#: src/views/other/Install.vue:152
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "Base de datos (Opcional, default: database)"
 msgstr "Base de datos (Opcional, default: database)"
 
 
@@ -980,7 +980,7 @@ msgstr "Editar Transmisión"
 msgid "Email"
 msgid "Email"
 msgstr "Correo"
 msgstr "Correo"
 
 
-#: src/views/other/Install.vue:88
+#: src/views/other/Install.vue:121
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Correo (*)"
 msgstr "Correo (*)"
 
 
@@ -1123,37 +1123,42 @@ msgstr ""
 msgid "Failed to backup Nginx UI files: {0}"
 msgid "Failed to backup Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:17
+#: src/constants/errors/backup.ts:18
 #, fuzzy
 #, fuzzy
 msgid "Failed to calculate hash: {0}"
 msgid "Failed to calculate hash: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:53
+#: src/constants/errors/backup.ts:58
 msgid "Failed to calculate Nginx hash: {0}"
 msgid "Failed to calculate Nginx hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:52
+#: src/constants/errors/backup.ts:57
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:14
+#: src/constants/errors/backup.ts:13
+#, fuzzy
+msgid "Failed to cleanup temporary directory: {0}"
+msgstr "Error al habilitar %{msg}"
+
+#: src/constants/errors/backup.ts:15
 msgid "Failed to copy config file: {0}"
 msgid "Failed to copy config file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:15
+#: src/constants/errors/backup.ts:16
 msgid "Failed to copy database directory: {0}"
 msgid "Failed to copy database directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:16
+#: src/constants/errors/backup.ts:17
 #, fuzzy
 #, fuzzy
 msgid "Failed to copy database file: {0}"
 msgid "Failed to copy database file: {0}"
 msgstr "Error al deshabilitar %{msg}"
 msgstr "Error al deshabilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:30
+#: src/constants/errors/backup.ts:32
 msgid "Failed to copy file content: {0}"
 msgid "Failed to copy file content: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:19
+#: src/constants/errors/backup.ts:20
 msgid "Failed to copy Nginx config directory: {0}"
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1167,12 +1172,12 @@ msgstr "Error al habilitar %{msg}"
 msgid "Failed to create backup file: {0}"
 msgid "Failed to create backup file: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:44
+#: src/constants/errors/backup.ts:46
 #, fuzzy
 #, fuzzy
 msgid "Failed to create directory: {0}"
 msgid "Failed to create directory: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:46
+#: src/constants/errors/backup.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Failed to create file: {0}"
 msgid "Failed to create file: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
@@ -1182,15 +1187,20 @@ msgstr "Error al habilitar %{msg}"
 msgid "Failed to create hash info file: {0}"
 msgid "Failed to create hash info file: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:45
+#: src/constants/errors/backup.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Failed to create parent directory: {0}"
 msgid "Failed to create parent directory: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:32
+#: src/constants/errors/backup.ts:34
 msgid "Failed to create restore directory: {0}"
 msgid "Failed to create restore directory: {0}"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/backup.ts:50
+#, fuzzy
+msgid "Failed to create symbolic link: {0}"
+msgstr "Error al habilitar %{msg}"
+
 #: src/constants/errors/backup.ts:2
 #: src/constants/errors/backup.ts:2
 #, fuzzy
 #, fuzzy
 msgid "Failed to create temporary directory"
 msgid "Failed to create temporary directory"
@@ -1206,36 +1216,36 @@ msgstr "Error al habilitar %{msg}"
 msgid "Failed to create zip archive: {0}"
 msgid "Failed to create zip archive: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:27
+#: src/constants/errors/backup.ts:29
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip entry: {0}"
 msgid "Failed to create zip entry: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:26
+#: src/constants/errors/backup.ts:28
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip file: {0}"
 msgid "Failed to create zip file: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:29
+#: src/constants/errors/backup.ts:31
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip header: {0}"
 msgid "Failed to create zip header: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:24
+#: src/constants/errors/backup.ts:26
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt data: {0}"
 msgid "Failed to decrypt data: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:49
+#: src/constants/errors/backup.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt file: {0}"
 msgid "Failed to decrypt file: {0}"
 msgstr "Error al deshabilitar %{msg}"
 msgstr "Error al deshabilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:35
+#: src/constants/errors/backup.ts:37
 msgid "Failed to decrypt Nginx directory: {0}"
 msgid "Failed to decrypt Nginx directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:34
+#: src/constants/errors/backup.ts:36
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1253,12 +1263,12 @@ msgstr "Error al deshabilitar %{msg}"
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:23
+#: src/constants/errors/backup.ts:25
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt data: {0}"
 msgid "Failed to encrypt data: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:21
+#: src/constants/errors/backup.ts:23
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt file: {0}"
 msgid "Failed to encrypt file: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
@@ -1271,7 +1281,12 @@ msgstr ""
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:33
+#: src/constants/errors/backup.ts:52
+#, fuzzy
+msgid "Failed to evaluate symbolic links: {0}"
+msgstr "Error al habilitar %{msg}"
+
+#: src/constants/errors/backup.ts:35
 #, fuzzy
 #, fuzzy
 msgid "Failed to extract archive: {0}"
 msgid "Failed to extract archive: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
@@ -1290,17 +1305,17 @@ msgstr "No se pudo obtener la información del certificado"
 msgid "Failed to get certificate information"
 msgid "Failed to get certificate information"
 msgstr "No se pudo obtener la información del certificado"
 msgstr "No se pudo obtener la información del certificado"
 
 
-#: src/constants/errors/backup.ts:28
+#: src/constants/errors/backup.ts:30
 #, fuzzy
 #, fuzzy
 msgid "Failed to open source file: {0}"
 msgid "Failed to open source file: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:47
+#: src/constants/errors/backup.ts:49
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip entry: {0}"
 msgid "Failed to open zip entry: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:43
+#: src/constants/errors/backup.ts:45
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip file: {0}"
 msgid "Failed to open zip file: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
@@ -1309,16 +1324,16 @@ msgstr "Error al habilitar %{msg}"
 msgid "Failed to parse nginx.conf"
 msgid "Failed to parse nginx.conf"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:48
+#: src/constants/errors/backup.ts:53
 msgid "Failed to read encrypted file: {0}"
 msgid "Failed to read encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:20
+#: src/constants/errors/backup.ts:22
 #, fuzzy
 #, fuzzy
 msgid "Failed to read file: {0}"
 msgid "Failed to read file: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:51
+#: src/constants/errors/backup.ts:56
 msgid "Failed to read hash info file: {0}"
 msgid "Failed to read hash info file: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1326,11 +1341,16 @@ msgstr ""
 msgid "Failed to read nginx.conf"
 msgid "Failed to read nginx.conf"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:37
+#: src/constants/errors/backup.ts:21
+#, fuzzy
+msgid "Failed to read symlink: {0}"
+msgstr "Error al habilitar %{msg}"
+
+#: src/constants/errors/backup.ts:39
 msgid "Failed to restore Nginx configs: {0}"
 msgid "Failed to restore Nginx configs: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:38
+#: src/constants/errors/backup.ts:40
 msgid "Failed to restore Nginx UI files: {0}"
 msgid "Failed to restore Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1340,20 +1360,20 @@ msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr ""
 msgstr ""
 "No se pudo guardar, se detectó un error(es) de sintaxis en la configuración."
 "No se pudo guardar, se detectó un error(es) de sintaxis en la configuración."
 
 
-#: src/constants/errors/backup.ts:36
+#: src/constants/errors/backup.ts:38
 #, fuzzy
 #, fuzzy
 msgid "Failed to verify hashes: {0}"
 msgid "Failed to verify hashes: {0}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
-#: src/constants/errors/backup.ts:50
+#: src/constants/errors/backup.ts:55
 msgid "Failed to write decrypted file: {0}"
 msgid "Failed to write decrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:22
+#: src/constants/errors/backup.ts:24
 msgid "Failed to write encrypted file: {0}"
 msgid "Failed to write encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:31
+#: src/constants/errors/backup.ts:33
 msgid "Failed to write to zip buffer: {0}"
 msgid "Failed to write to zip buffer: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1450,7 +1470,7 @@ msgstr "Obteniendo el certificado, por favor espere..."
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr "Proxy Github"
 msgstr "Proxy Github"
 
 
-#: src/constants/errors/backup.ts:54
+#: src/constants/errors/backup.ts:59
 msgid "Hash verification failed: file integrity compromised"
 msgid "Hash verification failed: file integrity compromised"
 msgstr ""
 msgstr ""
 
 
@@ -1538,14 +1558,24 @@ msgstr "Ingrese el código de la aplicación:"
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr "Ingrese el código de recuperación:"
 msgstr "Ingrese el código de recuperación:"
 
 
-#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:134
+#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:168
 msgid "Install"
 msgid "Install"
 msgstr "Instalar"
 msgstr "Instalar"
 
 
-#: src/views/other/Install.vue:67
+#: src/views/other/Install.vue:89
 msgid "Install successfully"
 msgid "Install successfully"
 msgstr "Instalación exitosa"
 msgstr "Instalación exitosa"
 
 
+#: src/constants/errors/system.ts:3
+msgid "Installation is not allowed after 10 minutes of system startup"
+msgstr ""
+
+#: src/views/other/Install.vue:113
+msgid ""
+"Installation is not allowed after 10 minutes of system startup, please "
+"restart the Nginx UI."
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:25
 #: src/views/preference/LogrotateSettings.vue:25
 msgid "Interval"
 msgid "Interval"
 msgstr "Intervalo"
 msgstr "Intervalo"
@@ -1554,11 +1584,11 @@ msgstr "Intervalo"
 msgid "Invalid"
 msgid "Invalid"
 msgstr "Inválido"
 msgstr "Inválido"
 
 
-#: src/constants/errors/backup.ts:42
+#: src/constants/errors/backup.ts:44
 msgid "Invalid AES IV format: {0}"
 msgid "Invalid AES IV format: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:41
+#: src/constants/errors/backup.ts:43
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1567,6 +1597,11 @@ msgstr ""
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "Nombre de archivo inválido"
 msgstr "Nombre de archivo inválido"
 
 
+#: src/constants/errors/backup.ts:51
+#, fuzzy
+msgid "Invalid file path: {0}"
+msgstr "Nombre de archivo inválido"
+
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/ConfigEditor.vue:250
 #: src/views/config/ConfigEditor.vue:250
 msgid "Invalid filename"
 msgid "Invalid filename"
@@ -1581,7 +1616,7 @@ msgstr "Nombre de carpeta inválido"
 msgid "Invalid otp code"
 msgid "Invalid otp code"
 msgstr "Código 2FA o de recuperación inválido"
 msgstr "Código 2FA o de recuperación inválido"
 
 
-#: src/constants/errors/backup.ts:25
+#: src/constants/errors/backup.ts:27
 msgid "Invalid padding in decrypted data"
 msgid "Invalid padding in decrypted data"
 msgstr ""
 msgstr ""
 
 
@@ -1598,7 +1633,7 @@ msgstr "Código 2FA o de recuperación inválido"
 msgid "Invalid request format"
 msgid "Invalid request format"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:40
+#: src/constants/errors/backup.ts:42
 #, fuzzy
 #, fuzzy
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "Código 2FA o de recuperación inválido"
 msgstr "Código 2FA o de recuperación inválido"
@@ -1911,7 +1946,7 @@ msgstr ""
 msgid "Nginx conf not include stream-enabled"
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:18
+#: src/constants/errors/backup.ts:19
 #, fuzzy
 #, fuzzy
 msgid "Nginx config directory is not set"
 msgid "Nginx config directory is not set"
 msgstr "Lista blanca de directorios de registro de Nginx"
 msgstr "Lista blanca de directorios de registro de Nginx"
@@ -1973,6 +2008,11 @@ msgstr "Comando de inicio de terminal"
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Nginx reiniciado con éxito"
 msgstr "Nginx reiniciado con éxito"
 
 
+#: src/constants/errors/system.ts:2
+#, fuzzy
+msgid "Nginx UI already installed"
+msgstr "Este valor ya está elegido"
+
 #: src/views/system/Backup/SystemRestore.vue:88
 #: src/views/system/Backup/SystemRestore.vue:88
 #, fuzzy
 #, fuzzy
 msgid "Nginx UI configuration has been restored"
 msgid "Nginx UI configuration has been restored"
@@ -2172,7 +2212,7 @@ msgstr ""
 msgid "Password"
 msgid "Password"
 msgstr "Contraseña"
 msgstr "Contraseña"
 
 
-#: src/views/other/Install.vue:108
+#: src/views/other/Install.vue:141
 msgid "Password (*)"
 msgid "Password (*)"
 msgstr "Contraseña (*)"
 msgstr "Contraseña (*)"
 
 
@@ -2181,7 +2221,7 @@ msgstr "Contraseña (*)"
 msgid "Password incorrect"
 msgid "Password incorrect"
 msgstr "El nombre de usuario o contraseña son incorrectos"
 msgstr "El nombre de usuario o contraseña son incorrectos"
 
 
-#: src/views/other/Install.vue:48
+#: src/views/other/Install.vue:70
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 msgstr ""
 
 
@@ -2290,15 +2330,15 @@ msgstr ""
 "Ingrese el nombre por favor, este se usará como el nombre de archivo de la "
 "Ingrese el nombre por favor, este se usará como el nombre de archivo de la "
 "nueva configuración."
 "nueva configuración."
 
 
-#: src/views/other/Install.vue:32
+#: src/views/other/Install.vue:54
 msgid "Please input your E-mail!"
 msgid "Please input your E-mail!"
 msgstr "¡Por favor ingrese su correo electrónico!"
 msgstr "¡Por favor ingrese su correo electrónico!"
 
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
+#: src/views/other/Install.vue:66 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgid "Please input your password!"
 msgstr "¡Por favor ingrese su contraseña!"
 msgstr "¡Por favor ingrese su contraseña!"
 
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
+#: src/views/other/Install.vue:60 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgid "Please input your username!"
 msgstr "¡Por favor ingrese su nombre de usuario!"
 msgstr "¡Por favor ingrese su nombre de usuario!"
 
 
@@ -3055,7 +3095,7 @@ msgstr ""
 "renovado si ha pasado más de 1 semana o el período que configuró en ajustes "
 "renovado si ha pasado más de 1 semana o el período que configuró en ajustes "
 "desde que fue emitido por última vez."
 "desde que fue emitido por última vez."
 
 
-#: src/views/other/Install.vue:54
+#: src/views/other/Install.vue:76
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr ""
 msgstr ""
 "El nombre del archivo no puede contener los siguientes caracteres: %{c}"
 "El nombre del archivo no puede contener los siguientes caracteres: %{c}"
@@ -3392,7 +3432,7 @@ msgstr ""
 msgid "Username"
 msgid "Username"
 msgstr "Nombre de usuario"
 msgstr "Nombre de usuario"
 
 
-#: src/views/other/Install.vue:98
+#: src/views/other/Install.vue:131
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Nombre de usuario (*)"
 msgstr "Nombre de usuario (*)"
 
 

+ 92 - 53
app/src/language/fr_FR/app.po

@@ -298,7 +298,7 @@ msgstr "Retour"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:39
+#: src/constants/errors/backup.ts:41
 #, fuzzy
 #, fuzzy
 msgid "Backup file not found: {0}"
 msgid "Backup file not found: {0}"
 msgstr "Fichier introuvable"
 msgstr "Fichier introuvable"
@@ -542,7 +542,7 @@ msgstr "Commentaires"
 msgid "Comments"
 msgid "Comments"
 msgstr "Commentaires"
 msgstr "Commentaires"
 
 
-#: src/constants/errors/backup.ts:13
+#: src/constants/errors/backup.ts:14
 #, fuzzy
 #, fuzzy
 msgid "Config path is empty"
 msgid "Config path is empty"
 msgstr "Modèles de configuration"
 msgstr "Modèles de configuration"
@@ -696,7 +696,7 @@ msgstr ""
 msgid "Dashboard"
 msgid "Dashboard"
 msgstr "Dashboard"
 msgstr "Dashboard"
 
 
-#: src/views/other/Install.vue:119
+#: src/views/other/Install.vue:152
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "Base de données (Facultatif, par défaut : database)"
 msgstr "Base de données (Facultatif, par défaut : database)"
 
 
@@ -1025,7 +1025,7 @@ msgstr "Modifier le site"
 msgid "Email"
 msgid "Email"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
-#: src/views/other/Install.vue:88
+#: src/views/other/Install.vue:121
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
@@ -1175,37 +1175,42 @@ msgstr "Impossible d'activer %{msg}"
 msgid "Failed to backup Nginx UI files: {0}"
 msgid "Failed to backup Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:17
+#: src/constants/errors/backup.ts:18
 #, fuzzy
 #, fuzzy
 msgid "Failed to calculate hash: {0}"
 msgid "Failed to calculate hash: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:53
+#: src/constants/errors/backup.ts:58
 msgid "Failed to calculate Nginx hash: {0}"
 msgid "Failed to calculate Nginx hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:52
+#: src/constants/errors/backup.ts:57
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:14
+#: src/constants/errors/backup.ts:13
+#, fuzzy
+msgid "Failed to cleanup temporary directory: {0}"
+msgstr "Impossible d'activer %{msg}"
+
+#: src/constants/errors/backup.ts:15
 msgid "Failed to copy config file: {0}"
 msgid "Failed to copy config file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:15
+#: src/constants/errors/backup.ts:16
 msgid "Failed to copy database directory: {0}"
 msgid "Failed to copy database directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:16
+#: src/constants/errors/backup.ts:17
 #, fuzzy
 #, fuzzy
 msgid "Failed to copy database file: {0}"
 msgid "Failed to copy database file: {0}"
 msgstr "Impossible de désactiver %{msg}"
 msgstr "Impossible de désactiver %{msg}"
 
 
-#: src/constants/errors/backup.ts:30
+#: src/constants/errors/backup.ts:32
 msgid "Failed to copy file content: {0}"
 msgid "Failed to copy file content: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:19
+#: src/constants/errors/backup.ts:20
 msgid "Failed to copy Nginx config directory: {0}"
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1219,12 +1224,12 @@ msgstr "Impossible d'activer %{msg}"
 msgid "Failed to create backup file: {0}"
 msgid "Failed to create backup file: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:44
+#: src/constants/errors/backup.ts:46
 #, fuzzy
 #, fuzzy
 msgid "Failed to create directory: {0}"
 msgid "Failed to create directory: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:46
+#: src/constants/errors/backup.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Failed to create file: {0}"
 msgid "Failed to create file: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
@@ -1234,15 +1239,20 @@ msgstr "Impossible d'activer %{msg}"
 msgid "Failed to create hash info file: {0}"
 msgid "Failed to create hash info file: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:45
+#: src/constants/errors/backup.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Failed to create parent directory: {0}"
 msgid "Failed to create parent directory: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:32
+#: src/constants/errors/backup.ts:34
 msgid "Failed to create restore directory: {0}"
 msgid "Failed to create restore directory: {0}"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/backup.ts:50
+#, fuzzy
+msgid "Failed to create symbolic link: {0}"
+msgstr "Impossible d'activer %{msg}"
+
 #: src/constants/errors/backup.ts:2
 #: src/constants/errors/backup.ts:2
 #, fuzzy
 #, fuzzy
 msgid "Failed to create temporary directory"
 msgid "Failed to create temporary directory"
@@ -1258,36 +1268,36 @@ msgstr "Impossible d'activer %{msg}"
 msgid "Failed to create zip archive: {0}"
 msgid "Failed to create zip archive: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:27
+#: src/constants/errors/backup.ts:29
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip entry: {0}"
 msgid "Failed to create zip entry: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:26
+#: src/constants/errors/backup.ts:28
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip file: {0}"
 msgid "Failed to create zip file: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:29
+#: src/constants/errors/backup.ts:31
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip header: {0}"
 msgid "Failed to create zip header: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:24
+#: src/constants/errors/backup.ts:26
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt data: {0}"
 msgid "Failed to decrypt data: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:49
+#: src/constants/errors/backup.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt file: {0}"
 msgid "Failed to decrypt file: {0}"
 msgstr "Impossible de désactiver %{msg}"
 msgstr "Impossible de désactiver %{msg}"
 
 
-#: src/constants/errors/backup.ts:35
+#: src/constants/errors/backup.ts:37
 msgid "Failed to decrypt Nginx directory: {0}"
 msgid "Failed to decrypt Nginx directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:34
+#: src/constants/errors/backup.ts:36
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1305,12 +1315,12 @@ msgstr "Impossible de désactiver %{msg}"
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:23
+#: src/constants/errors/backup.ts:25
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt data: {0}"
 msgid "Failed to encrypt data: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:21
+#: src/constants/errors/backup.ts:23
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt file: {0}"
 msgid "Failed to encrypt file: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
@@ -1323,7 +1333,12 @@ msgstr ""
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:33
+#: src/constants/errors/backup.ts:52
+#, fuzzy
+msgid "Failed to evaluate symbolic links: {0}"
+msgstr "Impossible d'activer %{msg}"
+
+#: src/constants/errors/backup.ts:35
 #, fuzzy
 #, fuzzy
 msgid "Failed to extract archive: {0}"
 msgid "Failed to extract archive: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
@@ -1342,17 +1357,17 @@ msgstr "Échec de l'obtention des informations sur le certificat"
 msgid "Failed to get certificate information"
 msgid "Failed to get certificate information"
 msgstr "Échec de l'obtention des informations sur le certificat"
 msgstr "Échec de l'obtention des informations sur le certificat"
 
 
-#: src/constants/errors/backup.ts:28
+#: src/constants/errors/backup.ts:30
 #, fuzzy
 #, fuzzy
 msgid "Failed to open source file: {0}"
 msgid "Failed to open source file: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:47
+#: src/constants/errors/backup.ts:49
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip entry: {0}"
 msgid "Failed to open zip entry: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:43
+#: src/constants/errors/backup.ts:45
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip file: {0}"
 msgid "Failed to open zip file: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
@@ -1362,17 +1377,17 @@ msgstr "Impossible d'activer %{msg}"
 msgid "Failed to parse nginx.conf"
 msgid "Failed to parse nginx.conf"
 msgstr "Erreur lecture nginx.conf"
 msgstr "Erreur lecture nginx.conf"
 
 
-#: src/constants/errors/backup.ts:48
+#: src/constants/errors/backup.ts:53
 #, fuzzy
 #, fuzzy
 msgid "Failed to read encrypted file: {0}"
 msgid "Failed to read encrypted file: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:20
+#: src/constants/errors/backup.ts:22
 #, fuzzy
 #, fuzzy
 msgid "Failed to read file: {0}"
 msgid "Failed to read file: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:51
+#: src/constants/errors/backup.ts:56
 #, fuzzy
 #, fuzzy
 msgid "Failed to read hash info file: {0}"
 msgid "Failed to read hash info file: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
@@ -1382,12 +1397,17 @@ msgstr "Impossible d'activer %{msg}"
 msgid "Failed to read nginx.conf"
 msgid "Failed to read nginx.conf"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:37
+#: src/constants/errors/backup.ts:21
+#, fuzzy
+msgid "Failed to read symlink: {0}"
+msgstr "Impossible d'activer %{msg}"
+
+#: src/constants/errors/backup.ts:39
 #, fuzzy
 #, fuzzy
 msgid "Failed to restore Nginx configs: {0}"
 msgid "Failed to restore Nginx configs: {0}"
 msgstr "Erreur lecture nginx.conf"
 msgstr "Erreur lecture nginx.conf"
 
 
-#: src/constants/errors/backup.ts:38
+#: src/constants/errors/backup.ts:40
 #, fuzzy
 #, fuzzy
 msgid "Failed to restore Nginx UI files: {0}"
 msgid "Failed to restore Nginx UI files: {0}"
 msgstr "Erreur lecture nginx.conf"
 msgstr "Erreur lecture nginx.conf"
@@ -1399,20 +1419,20 @@ msgstr ""
 "Échec de l'enregistrement, une ou plusieurs erreurs de syntaxe ont été "
 "Échec de l'enregistrement, une ou plusieurs erreurs de syntaxe ont été "
 "détectées dans la configuration."
 "détectées dans la configuration."
 
 
-#: src/constants/errors/backup.ts:36
+#: src/constants/errors/backup.ts:38
 #, fuzzy
 #, fuzzy
 msgid "Failed to verify hashes: {0}"
 msgid "Failed to verify hashes: {0}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/constants/errors/backup.ts:50
+#: src/constants/errors/backup.ts:55
 msgid "Failed to write decrypted file: {0}"
 msgid "Failed to write decrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:22
+#: src/constants/errors/backup.ts:24
 msgid "Failed to write encrypted file: {0}"
 msgid "Failed to write encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:31
+#: src/constants/errors/backup.ts:33
 msgid "Failed to write to zip buffer: {0}"
 msgid "Failed to write to zip buffer: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1510,7 +1530,7 @@ msgstr "Obtention du certificat, veuillez patienter..."
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr "Proxy Github"
 msgstr "Proxy Github"
 
 
-#: src/constants/errors/backup.ts:54
+#: src/constants/errors/backup.ts:59
 msgid "Hash verification failed: file integrity compromised"
 msgid "Hash verification failed: file integrity compromised"
 msgstr ""
 msgstr ""
 
 
@@ -1603,14 +1623,24 @@ msgstr "Entrez le code de l'application :"
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr "Entrez le code de récupération :"
 msgstr "Entrez le code de récupération :"
 
 
-#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:134
+#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:168
 msgid "Install"
 msgid "Install"
 msgstr "Installer"
 msgstr "Installer"
 
 
-#: src/views/other/Install.vue:67
+#: src/views/other/Install.vue:89
 msgid "Install successfully"
 msgid "Install successfully"
 msgstr "Installé avec succès"
 msgstr "Installé avec succès"
 
 
+#: src/constants/errors/system.ts:3
+msgid "Installation is not allowed after 10 minutes of system startup"
+msgstr ""
+
+#: src/views/other/Install.vue:113
+msgid ""
+"Installation is not allowed after 10 minutes of system startup, please "
+"restart the Nginx UI."
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:25
 #: src/views/preference/LogrotateSettings.vue:25
 msgid "Interval"
 msgid "Interval"
 msgstr ""
 msgstr ""
@@ -1619,12 +1649,12 @@ msgstr ""
 msgid "Invalid"
 msgid "Invalid"
 msgstr "Invalide"
 msgstr "Invalide"
 
 
-#: src/constants/errors/backup.ts:42
+#: src/constants/errors/backup.ts:44
 #, fuzzy
 #, fuzzy
 msgid "Invalid AES IV format: {0}"
 msgid "Invalid AES IV format: {0}"
 msgstr "Format de la requête invalide"
 msgstr "Format de la requête invalide"
 
 
-#: src/constants/errors/backup.ts:41
+#: src/constants/errors/backup.ts:43
 #, fuzzy
 #, fuzzy
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "Format de la requête invalide"
 msgstr "Format de la requête invalide"
@@ -1634,6 +1664,11 @@ msgstr "Format de la requête invalide"
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "Nom de fichier invalide"
 msgstr "Nom de fichier invalide"
 
 
+#: src/constants/errors/backup.ts:51
+#, fuzzy
+msgid "Invalid file path: {0}"
+msgstr "Format de la requête invalide"
+
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/ConfigEditor.vue:250
 #: src/views/config/ConfigEditor.vue:250
 msgid "Invalid filename"
 msgid "Invalid filename"
@@ -1647,7 +1682,7 @@ msgstr "Nom du répertoire invalide"
 msgid "Invalid otp code"
 msgid "Invalid otp code"
 msgstr "Code otp invalide"
 msgstr "Code otp invalide"
 
 
-#: src/constants/errors/backup.ts:25
+#: src/constants/errors/backup.ts:27
 msgid "Invalid padding in decrypted data"
 msgid "Invalid padding in decrypted data"
 msgstr ""
 msgstr ""
 
 
@@ -1664,7 +1699,7 @@ msgstr "Code de récupération invalide"
 msgid "Invalid request format"
 msgid "Invalid request format"
 msgstr "Format de la requête invalide"
 msgstr "Format de la requête invalide"
 
 
-#: src/constants/errors/backup.ts:40
+#: src/constants/errors/backup.ts:42
 #, fuzzy
 #, fuzzy
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "Format de la requête invalide"
 msgstr "Format de la requête invalide"
@@ -1993,7 +2028,7 @@ msgstr ""
 msgid "Nginx conf not include stream-enabled"
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:18
+#: src/constants/errors/backup.ts:19
 #, fuzzy
 #, fuzzy
 msgid "Nginx config directory is not set"
 msgid "Nginx config directory is not set"
 msgstr "Erreur d'analyse de configuration Nginx"
 msgstr "Erreur d'analyse de configuration Nginx"
@@ -2057,6 +2092,10 @@ msgstr "Commande de démarrage du terminal"
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Nginx a redémarré avec succès"
 msgstr "Nginx a redémarré avec succès"
 
 
+#: src/constants/errors/system.ts:2
+msgid "Nginx UI already installed"
+msgstr ""
+
 #: src/views/system/Backup/SystemRestore.vue:88
 #: src/views/system/Backup/SystemRestore.vue:88
 #, fuzzy
 #, fuzzy
 msgid "Nginx UI configuration has been restored"
 msgid "Nginx UI configuration has been restored"
@@ -2249,7 +2288,7 @@ msgstr ""
 msgid "Password"
 msgid "Password"
 msgstr "Mot de passe"
 msgstr "Mot de passe"
 
 
-#: src/views/other/Install.vue:108
+#: src/views/other/Install.vue:141
 msgid "Password (*)"
 msgid "Password (*)"
 msgstr "Mot de passe (*)"
 msgstr "Mot de passe (*)"
 
 
@@ -2258,7 +2297,7 @@ msgstr "Mot de passe (*)"
 msgid "Password incorrect"
 msgid "Password incorrect"
 msgstr "Le pseudo ou mot de passe est incorect"
 msgstr "Le pseudo ou mot de passe est incorect"
 
 
-#: src/views/other/Install.vue:48
+#: src/views/other/Install.vue:70
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 msgstr ""
 
 
@@ -2363,15 +2402,15 @@ msgstr ""
 "Veuillez entrer le nom, il sera utilisé comme nom de fichier de la nouvelle "
 "Veuillez entrer le nom, il sera utilisé comme nom de fichier de la nouvelle "
 "configuration."
 "configuration."
 
 
-#: src/views/other/Install.vue:32
+#: src/views/other/Install.vue:54
 msgid "Please input your E-mail!"
 msgid "Please input your E-mail!"
 msgstr "Veuillez saisir votre e-mail !"
 msgstr "Veuillez saisir votre e-mail !"
 
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
+#: src/views/other/Install.vue:66 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgid "Please input your password!"
 msgstr "Veuillez saisir votre mot de passe !"
 msgstr "Veuillez saisir votre mot de passe !"
 
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
+#: src/views/other/Install.vue:60 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgid "Please input your username!"
 msgstr "Veuillez saisir votre nom d'utilisateur !"
 msgstr "Veuillez saisir votre nom d'utilisateur !"
 
 
@@ -3155,7 +3194,7 @@ msgstr ""
 "Le certificat du domaine sera vérifié toutes les heures et sera renouvelé "
 "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."
 "s'il s'est écoulé plus d'une semaine depuis sa dernière émission."
 
 
-#: src/views/other/Install.vue:54
+#: src/views/other/Install.vue:76
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "Le nom de fichier ne peut pas contenir les caractères suivants : %{c}"
 msgstr "Le nom de fichier ne peut pas contenir les caractères suivants : %{c}"
 
 
@@ -3470,7 +3509,7 @@ msgstr ""
 msgid "Username"
 msgid "Username"
 msgstr "Nom d'utilisateur"
 msgstr "Nom d'utilisateur"
 
 
-#: src/views/other/Install.vue:98
+#: src/views/other/Install.vue:131
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Nom d'utilisateur (*)"
 msgstr "Nom d'utilisateur (*)"
 
 

+ 92 - 53
app/src/language/ko_KR/app.po

@@ -283,7 +283,7 @@ msgstr "뒤로"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:39
+#: src/constants/errors/backup.ts:41
 #, fuzzy
 #, fuzzy
 msgid "Backup file not found: {0}"
 msgid "Backup file not found: {0}"
 msgstr "파일을 찾을 수 없음"
 msgstr "파일을 찾을 수 없음"
@@ -514,7 +514,7 @@ msgstr "명령어"
 msgid "Comments"
 msgid "Comments"
 msgstr "댓글"
 msgstr "댓글"
 
 
-#: src/constants/errors/backup.ts:13
+#: src/constants/errors/backup.ts:14
 #, fuzzy
 #, fuzzy
 msgid "Config path is empty"
 msgid "Config path is empty"
 msgstr "구성 템플릿"
 msgstr "구성 템플릿"
@@ -664,7 +664,7 @@ msgstr ""
 msgid "Dashboard"
 msgid "Dashboard"
 msgstr "대시보드"
 msgstr "대시보드"
 
 
-#: src/views/other/Install.vue:119
+#: src/views/other/Install.vue:152
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "데이터베이스 (선택사항, 기본값: database)"
 msgstr "데이터베이스 (선택사항, 기본값: database)"
 
 
@@ -977,7 +977,7 @@ msgstr "스트림 편집"
 msgid "Email"
 msgid "Email"
 msgstr "이메일 (*)"
 msgstr "이메일 (*)"
 
 
-#: src/views/other/Install.vue:88
+#: src/views/other/Install.vue:121
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "이메일 (*)"
 msgstr "이메일 (*)"
 
 
@@ -1124,37 +1124,42 @@ msgstr ""
 msgid "Failed to backup Nginx UI files: {0}"
 msgid "Failed to backup Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:17
+#: src/constants/errors/backup.ts:18
 #, fuzzy
 #, fuzzy
 msgid "Failed to calculate hash: {0}"
 msgid "Failed to calculate hash: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
-#: src/constants/errors/backup.ts:53
+#: src/constants/errors/backup.ts:58
 msgid "Failed to calculate Nginx hash: {0}"
 msgid "Failed to calculate Nginx hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:52
+#: src/constants/errors/backup.ts:57
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:14
+#: src/constants/errors/backup.ts:13
+#, fuzzy
+msgid "Failed to cleanup temporary directory: {0}"
+msgstr "%{msg} 활성화 실패"
+
+#: src/constants/errors/backup.ts:15
 msgid "Failed to copy config file: {0}"
 msgid "Failed to copy config file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:15
+#: src/constants/errors/backup.ts:16
 msgid "Failed to copy database directory: {0}"
 msgid "Failed to copy database directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:16
+#: src/constants/errors/backup.ts:17
 #, fuzzy
 #, fuzzy
 msgid "Failed to copy database file: {0}"
 msgid "Failed to copy database file: {0}"
 msgstr "%{msg} 비활성화 실패"
 msgstr "%{msg} 비활성화 실패"
 
 
-#: src/constants/errors/backup.ts:30
+#: src/constants/errors/backup.ts:32
 msgid "Failed to copy file content: {0}"
 msgid "Failed to copy file content: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:19
+#: src/constants/errors/backup.ts:20
 msgid "Failed to copy Nginx config directory: {0}"
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1168,12 +1173,12 @@ msgstr "%{msg} 활성화 실패"
 msgid "Failed to create backup file: {0}"
 msgid "Failed to create backup file: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
-#: src/constants/errors/backup.ts:44
+#: src/constants/errors/backup.ts:46
 #, fuzzy
 #, fuzzy
 msgid "Failed to create directory: {0}"
 msgid "Failed to create directory: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
-#: src/constants/errors/backup.ts:46
+#: src/constants/errors/backup.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Failed to create file: {0}"
 msgid "Failed to create file: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
@@ -1183,15 +1188,20 @@ msgstr "%{msg} 활성화 실패"
 msgid "Failed to create hash info file: {0}"
 msgid "Failed to create hash info file: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
-#: src/constants/errors/backup.ts:45
+#: src/constants/errors/backup.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Failed to create parent directory: {0}"
 msgid "Failed to create parent directory: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
-#: src/constants/errors/backup.ts:32
+#: src/constants/errors/backup.ts:34
 msgid "Failed to create restore directory: {0}"
 msgid "Failed to create restore directory: {0}"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/backup.ts:50
+#, fuzzy
+msgid "Failed to create symbolic link: {0}"
+msgstr "%{msg} 활성화 실패"
+
 #: src/constants/errors/backup.ts:2
 #: src/constants/errors/backup.ts:2
 #, fuzzy
 #, fuzzy
 msgid "Failed to create temporary directory"
 msgid "Failed to create temporary directory"
@@ -1207,36 +1217,36 @@ msgstr "%{msg} 활성화 실패"
 msgid "Failed to create zip archive: {0}"
 msgid "Failed to create zip archive: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
-#: src/constants/errors/backup.ts:27
+#: src/constants/errors/backup.ts:29
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip entry: {0}"
 msgid "Failed to create zip entry: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
-#: src/constants/errors/backup.ts:26
+#: src/constants/errors/backup.ts:28
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip file: {0}"
 msgid "Failed to create zip file: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
-#: src/constants/errors/backup.ts:29
+#: src/constants/errors/backup.ts:31
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip header: {0}"
 msgid "Failed to create zip header: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
-#: src/constants/errors/backup.ts:24
+#: src/constants/errors/backup.ts:26
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt data: {0}"
 msgid "Failed to decrypt data: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
-#: src/constants/errors/backup.ts:49
+#: src/constants/errors/backup.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt file: {0}"
 msgid "Failed to decrypt file: {0}"
 msgstr "%{msg} 비활성화 실패"
 msgstr "%{msg} 비활성화 실패"
 
 
-#: src/constants/errors/backup.ts:35
+#: src/constants/errors/backup.ts:37
 msgid "Failed to decrypt Nginx directory: {0}"
 msgid "Failed to decrypt Nginx directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:34
+#: src/constants/errors/backup.ts:36
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1254,12 +1264,12 @@ msgstr "%{msg} 비활성화 실패"
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
-#: src/constants/errors/backup.ts:23
+#: src/constants/errors/backup.ts:25
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt data: {0}"
 msgid "Failed to encrypt data: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
-#: src/constants/errors/backup.ts:21
+#: src/constants/errors/backup.ts:23
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt file: {0}"
 msgid "Failed to encrypt file: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
@@ -1272,7 +1282,12 @@ msgstr ""
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:33
+#: src/constants/errors/backup.ts:52
+#, fuzzy
+msgid "Failed to evaluate symbolic links: {0}"
+msgstr "%{msg} 활성화 실패"
+
+#: src/constants/errors/backup.ts:35
 #, fuzzy
 #, fuzzy
 msgid "Failed to extract archive: {0}"
 msgid "Failed to extract archive: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
@@ -1291,17 +1306,17 @@ msgstr "인증서 정보 가져오기 실패"
 msgid "Failed to get certificate information"
 msgid "Failed to get certificate information"
 msgstr "인증서 정보 가져오기 실패"
 msgstr "인증서 정보 가져오기 실패"
 
 
-#: src/constants/errors/backup.ts:28
+#: src/constants/errors/backup.ts:30
 #, fuzzy
 #, fuzzy
 msgid "Failed to open source file: {0}"
 msgid "Failed to open source file: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
-#: src/constants/errors/backup.ts:47
+#: src/constants/errors/backup.ts:49
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip entry: {0}"
 msgid "Failed to open zip entry: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
-#: src/constants/errors/backup.ts:43
+#: src/constants/errors/backup.ts:45
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip file: {0}"
 msgid "Failed to open zip file: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
@@ -1310,16 +1325,16 @@ msgstr "%{msg} 활성화 실패"
 msgid "Failed to parse nginx.conf"
 msgid "Failed to parse nginx.conf"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:48
+#: src/constants/errors/backup.ts:53
 msgid "Failed to read encrypted file: {0}"
 msgid "Failed to read encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:20
+#: src/constants/errors/backup.ts:22
 #, fuzzy
 #, fuzzy
 msgid "Failed to read file: {0}"
 msgid "Failed to read file: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
-#: src/constants/errors/backup.ts:51
+#: src/constants/errors/backup.ts:56
 msgid "Failed to read hash info file: {0}"
 msgid "Failed to read hash info file: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1327,11 +1342,16 @@ msgstr ""
 msgid "Failed to read nginx.conf"
 msgid "Failed to read nginx.conf"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:37
+#: src/constants/errors/backup.ts:21
+#, fuzzy
+msgid "Failed to read symlink: {0}"
+msgstr "%{msg} 활성화 실패"
+
+#: src/constants/errors/backup.ts:39
 msgid "Failed to restore Nginx configs: {0}"
 msgid "Failed to restore Nginx configs: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:38
+#: src/constants/errors/backup.ts:40
 msgid "Failed to restore Nginx UI files: {0}"
 msgid "Failed to restore Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1340,20 +1360,20 @@ msgstr ""
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr "저장 실패, 구성에서 구문 오류가 감지되었습니다."
 msgstr "저장 실패, 구성에서 구문 오류가 감지되었습니다."
 
 
-#: src/constants/errors/backup.ts:36
+#: src/constants/errors/backup.ts:38
 #, fuzzy
 #, fuzzy
 msgid "Failed to verify hashes: {0}"
 msgid "Failed to verify hashes: {0}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
-#: src/constants/errors/backup.ts:50
+#: src/constants/errors/backup.ts:55
 msgid "Failed to write decrypted file: {0}"
 msgid "Failed to write decrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:22
+#: src/constants/errors/backup.ts:24
 msgid "Failed to write encrypted file: {0}"
 msgid "Failed to write encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:31
+#: src/constants/errors/backup.ts:33
 msgid "Failed to write to zip buffer: {0}"
 msgid "Failed to write to zip buffer: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1450,7 +1470,7 @@ msgstr "인증서를 가져오는 중입니다. 잠시 기다려 주세요..."
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr "Github 프록시"
 msgstr "Github 프록시"
 
 
-#: src/constants/errors/backup.ts:54
+#: src/constants/errors/backup.ts:59
 msgid "Hash verification failed: file integrity compromised"
 msgid "Hash verification failed: file integrity compromised"
 msgstr ""
 msgstr ""
 
 
@@ -1533,15 +1553,25 @@ msgstr ""
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:134
+#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:168
 msgid "Install"
 msgid "Install"
 msgstr "설치"
 msgstr "설치"
 
 
-#: src/views/other/Install.vue:67
+#: src/views/other/Install.vue:89
 #, fuzzy
 #, fuzzy
 msgid "Install successfully"
 msgid "Install successfully"
 msgstr "성공적으로 활성화됨"
 msgstr "성공적으로 활성화됨"
 
 
+#: src/constants/errors/system.ts:3
+msgid "Installation is not allowed after 10 minutes of system startup"
+msgstr ""
+
+#: src/views/other/Install.vue:113
+msgid ""
+"Installation is not allowed after 10 minutes of system startup, please "
+"restart the Nginx UI."
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:25
 #: src/views/preference/LogrotateSettings.vue:25
 msgid "Interval"
 msgid "Interval"
 msgstr "간격"
 msgstr "간격"
@@ -1551,11 +1581,11 @@ msgstr "간격"
 msgid "Invalid"
 msgid "Invalid"
 msgstr "유효함"
 msgstr "유효함"
 
 
-#: src/constants/errors/backup.ts:42
+#: src/constants/errors/backup.ts:44
 msgid "Invalid AES IV format: {0}"
 msgid "Invalid AES IV format: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:41
+#: src/constants/errors/backup.ts:43
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1564,6 +1594,11 @@ msgstr ""
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "Invalid E-mail!"
 msgstr "Invalid E-mail!"
 
 
+#: src/constants/errors/backup.ts:51
+#, fuzzy
+msgid "Invalid file path: {0}"
+msgstr "Invalid E-mail!"
+
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/ConfigEditor.vue:250
 #: src/views/config/ConfigEditor.vue:250
 #, fuzzy
 #, fuzzy
@@ -1579,7 +1614,7 @@ msgstr ""
 msgid "Invalid otp code"
 msgid "Invalid otp code"
 msgstr "유효함"
 msgstr "유효함"
 
 
-#: src/constants/errors/backup.ts:25
+#: src/constants/errors/backup.ts:27
 msgid "Invalid padding in decrypted data"
 msgid "Invalid padding in decrypted data"
 msgstr ""
 msgstr ""
 
 
@@ -1595,7 +1630,7 @@ msgstr ""
 msgid "Invalid request format"
 msgid "Invalid request format"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:40
+#: src/constants/errors/backup.ts:42
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr ""
 msgstr ""
 
 
@@ -1925,7 +1960,7 @@ msgstr ""
 msgid "Nginx conf not include stream-enabled"
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:18
+#: src/constants/errors/backup.ts:19
 #, fuzzy
 #, fuzzy
 msgid "Nginx config directory is not set"
 msgid "Nginx config directory is not set"
 msgstr "Nginx 구성 오류름"
 msgstr "Nginx 구성 오류름"
@@ -1990,6 +2025,10 @@ msgstr "터미널 시작 명령"
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Nginx가 성공적으로 재시작됨"
 msgstr "Nginx가 성공적으로 재시작됨"
 
 
+#: src/constants/errors/system.ts:2
+msgid "Nginx UI already installed"
+msgstr ""
+
 #: src/views/system/Backup/SystemRestore.vue:88
 #: src/views/system/Backup/SystemRestore.vue:88
 #, fuzzy
 #, fuzzy
 msgid "Nginx UI configuration has been restored"
 msgid "Nginx UI configuration has been restored"
@@ -2183,7 +2222,7 @@ msgstr ""
 msgid "Password"
 msgid "Password"
 msgstr "비밀번호"
 msgstr "비밀번호"
 
 
-#: src/views/other/Install.vue:108
+#: src/views/other/Install.vue:141
 msgid "Password (*)"
 msgid "Password (*)"
 msgstr "비밀번호 (*)"
 msgstr "비밀번호 (*)"
 
 
@@ -2192,7 +2231,7 @@ msgstr "비밀번호 (*)"
 msgid "Password incorrect"
 msgid "Password incorrect"
 msgstr "사용자 이름 또는 비밀번호가 올바르지 않습니다"
 msgstr "사용자 이름 또는 비밀번호가 올바르지 않습니다"
 
 
-#: src/views/other/Install.vue:48
+#: src/views/other/Install.vue:70
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 msgstr ""
 
 
@@ -2293,15 +2332,15 @@ msgid ""
 "configuration."
 "configuration."
 msgstr "이름을 입력해주세요, 이것은 새 구성의 파일 이름으로 사용될 것입니다!"
 msgstr "이름을 입력해주세요, 이것은 새 구성의 파일 이름으로 사용될 것입니다!"
 
 
-#: src/views/other/Install.vue:32
+#: src/views/other/Install.vue:54
 msgid "Please input your E-mail!"
 msgid "Please input your E-mail!"
 msgstr "이메일을 입력해주세요!"
 msgstr "이메일을 입력해주세요!"
 
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
+#: src/views/other/Install.vue:66 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgid "Please input your password!"
 msgstr "비밀번호를 입력해주세요!"
 msgstr "비밀번호를 입력해주세요!"
 
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
+#: src/views/other/Install.vue:60 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgid "Please input your username!"
 msgstr "사용자 이름을 입력해주세요!"
 msgstr "사용자 이름을 입력해주세요!"
 
 
@@ -3081,7 +3120,7 @@ msgstr ""
 "도메인의 인증서는 매 시간 확인되며,마지막으로 발급된 지 1개월이 경과한 경우 "
 "도메인의 인증서는 매 시간 확인되며,마지막으로 발급된 지 1개월이 경과한 경우 "
 "갱신됩니다."
 "갱신됩니다."
 
 
-#: src/views/other/Install.vue:54
+#: src/views/other/Install.vue:76
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "파일 이름은 다음 문자를 포함할 수 없습니다: %{c}"
 msgstr "파일 이름은 다음 문자를 포함할 수 없습니다: %{c}"
 
 
@@ -3394,7 +3433,7 @@ msgstr ""
 msgid "Username"
 msgid "Username"
 msgstr "사용자 이름"
 msgstr "사용자 이름"
 
 
-#: src/views/other/Install.vue:98
+#: src/views/other/Install.vue:131
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "사용자 이름 (*)"
 msgstr "사용자 이름 (*)"
 
 

+ 85 - 53
app/src/language/messages.pot

@@ -270,7 +270,7 @@ msgstr ""
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:39
+#: src/constants/errors/backup.ts:41
 msgid "Backup file not found: {0}"
 msgid "Backup file not found: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -488,7 +488,7 @@ msgstr ""
 msgid "Comments"
 msgid "Comments"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:13
+#: src/constants/errors/backup.ts:14
 msgid "Config path is empty"
 msgid "Config path is empty"
 msgstr ""
 msgstr ""
 
 
@@ -633,7 +633,7 @@ msgstr ""
 msgid "Dashboard"
 msgid "Dashboard"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Install.vue:119
+#: src/views/other/Install.vue:152
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr ""
 msgstr ""
 
 
@@ -932,7 +932,7 @@ msgstr ""
 msgid "Email"
 msgid "Email"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Install.vue:88
+#: src/views/other/Install.vue:121
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr ""
 msgstr ""
 
 
@@ -1071,35 +1071,39 @@ msgstr ""
 msgid "Failed to backup Nginx UI files: {0}"
 msgid "Failed to backup Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:17
+#: src/constants/errors/backup.ts:18
 msgid "Failed to calculate hash: {0}"
 msgid "Failed to calculate hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:53
+#: src/constants/errors/backup.ts:58
 msgid "Failed to calculate Nginx hash: {0}"
 msgid "Failed to calculate Nginx hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:52
+#: src/constants/errors/backup.ts:57
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:14
-msgid "Failed to copy config file: {0}"
+#: src/constants/errors/backup.ts:13
+msgid "Failed to cleanup temporary directory: {0}"
 msgstr ""
 msgstr ""
 
 
 #: src/constants/errors/backup.ts:15
 #: src/constants/errors/backup.ts:15
-msgid "Failed to copy database directory: {0}"
+msgid "Failed to copy config file: {0}"
 msgstr ""
 msgstr ""
 
 
 #: src/constants/errors/backup.ts:16
 #: src/constants/errors/backup.ts:16
+msgid "Failed to copy database directory: {0}"
+msgstr ""
+
+#: src/constants/errors/backup.ts:17
 msgid "Failed to copy database file: {0}"
 msgid "Failed to copy database file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:30
+#: src/constants/errors/backup.ts:32
 msgid "Failed to copy file content: {0}"
 msgid "Failed to copy file content: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:19
+#: src/constants/errors/backup.ts:20
 msgid "Failed to copy Nginx config directory: {0}"
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1111,11 +1115,11 @@ msgstr ""
 msgid "Failed to create backup file: {0}"
 msgid "Failed to create backup file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:44
+#: src/constants/errors/backup.ts:46
 msgid "Failed to create directory: {0}"
 msgid "Failed to create directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:46
+#: src/constants/errors/backup.ts:48
 msgid "Failed to create file: {0}"
 msgid "Failed to create file: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1123,14 +1127,18 @@ msgstr ""
 msgid "Failed to create hash info file: {0}"
 msgid "Failed to create hash info file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:45
+#: src/constants/errors/backup.ts:47
 msgid "Failed to create parent directory: {0}"
 msgid "Failed to create parent directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:32
+#: src/constants/errors/backup.ts:34
 msgid "Failed to create restore directory: {0}"
 msgid "Failed to create restore directory: {0}"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/backup.ts:50
+msgid "Failed to create symbolic link: {0}"
+msgstr ""
+
 #: src/constants/errors/backup.ts:2
 #: src/constants/errors/backup.ts:2
 msgid "Failed to create temporary directory"
 msgid "Failed to create temporary directory"
 msgstr ""
 msgstr ""
@@ -1143,31 +1151,31 @@ msgstr ""
 msgid "Failed to create zip archive: {0}"
 msgid "Failed to create zip archive: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:27
+#: src/constants/errors/backup.ts:29
 msgid "Failed to create zip entry: {0}"
 msgid "Failed to create zip entry: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:26
+#: src/constants/errors/backup.ts:28
 msgid "Failed to create zip file: {0}"
 msgid "Failed to create zip file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:29
+#: src/constants/errors/backup.ts:31
 msgid "Failed to create zip header: {0}"
 msgid "Failed to create zip header: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:24
+#: src/constants/errors/backup.ts:26
 msgid "Failed to decrypt data: {0}"
 msgid "Failed to decrypt data: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:49
+#: src/constants/errors/backup.ts:54
 msgid "Failed to decrypt file: {0}"
 msgid "Failed to decrypt file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:35
+#: src/constants/errors/backup.ts:37
 msgid "Failed to decrypt Nginx directory: {0}"
 msgid "Failed to decrypt Nginx directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:34
+#: src/constants/errors/backup.ts:36
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1185,11 +1193,11 @@ msgstr ""
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:23
+#: src/constants/errors/backup.ts:25
 msgid "Failed to encrypt data: {0}"
 msgid "Failed to encrypt data: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:21
+#: src/constants/errors/backup.ts:23
 msgid "Failed to encrypt file: {0}"
 msgid "Failed to encrypt file: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1201,7 +1209,11 @@ msgstr ""
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:33
+#: src/constants/errors/backup.ts:52
+msgid "Failed to evaluate symbolic links: {0}"
+msgstr ""
+
+#: src/constants/errors/backup.ts:35
 msgid "Failed to extract archive: {0}"
 msgid "Failed to extract archive: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1217,15 +1229,15 @@ msgstr ""
 msgid "Failed to get certificate information"
 msgid "Failed to get certificate information"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:28
+#: src/constants/errors/backup.ts:30
 msgid "Failed to open source file: {0}"
 msgid "Failed to open source file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:47
+#: src/constants/errors/backup.ts:49
 msgid "Failed to open zip entry: {0}"
 msgid "Failed to open zip entry: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:43
+#: src/constants/errors/backup.ts:45
 msgid "Failed to open zip file: {0}"
 msgid "Failed to open zip file: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1233,15 +1245,15 @@ msgstr ""
 msgid "Failed to parse nginx.conf"
 msgid "Failed to parse nginx.conf"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:48
+#: src/constants/errors/backup.ts:53
 msgid "Failed to read encrypted file: {0}"
 msgid "Failed to read encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:20
+#: src/constants/errors/backup.ts:22
 msgid "Failed to read file: {0}"
 msgid "Failed to read file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:51
+#: src/constants/errors/backup.ts:56
 msgid "Failed to read hash info file: {0}"
 msgid "Failed to read hash info file: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1249,11 +1261,15 @@ msgstr ""
 msgid "Failed to read nginx.conf"
 msgid "Failed to read nginx.conf"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:37
+#: src/constants/errors/backup.ts:21
+msgid "Failed to read symlink: {0}"
+msgstr ""
+
+#: src/constants/errors/backup.ts:39
 msgid "Failed to restore Nginx configs: {0}"
 msgid "Failed to restore Nginx configs: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:38
+#: src/constants/errors/backup.ts:40
 msgid "Failed to restore Nginx UI files: {0}"
 msgid "Failed to restore Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1262,19 +1278,19 @@ msgstr ""
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:36
+#: src/constants/errors/backup.ts:38
 msgid "Failed to verify hashes: {0}"
 msgid "Failed to verify hashes: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:50
+#: src/constants/errors/backup.ts:55
 msgid "Failed to write decrypted file: {0}"
 msgid "Failed to write decrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:22
+#: src/constants/errors/backup.ts:24
 msgid "Failed to write encrypted file: {0}"
 msgid "Failed to write encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:31
+#: src/constants/errors/backup.ts:33
 msgid "Failed to write to zip buffer: {0}"
 msgid "Failed to write to zip buffer: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1366,7 +1382,7 @@ msgstr ""
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:54
+#: src/constants/errors/backup.ts:59
 msgid "Hash verification failed: file integrity compromised"
 msgid "Hash verification failed: file integrity compromised"
 msgstr ""
 msgstr ""
 
 
@@ -1446,14 +1462,22 @@ msgid "Input the recovery code:"
 msgstr ""
 msgstr ""
 
 
 #: src/routes/modules/auth.ts:8
 #: src/routes/modules/auth.ts:8
-#: src/views/other/Install.vue:134
+#: src/views/other/Install.vue:168
 msgid "Install"
 msgid "Install"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Install.vue:67
+#: src/views/other/Install.vue:89
 msgid "Install successfully"
 msgid "Install successfully"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/system.ts:3
+msgid "Installation is not allowed after 10 minutes of system startup"
+msgstr ""
+
+#: src/views/other/Install.vue:113
+msgid "Installation is not allowed after 10 minutes of system startup, please restart the Nginx UI."
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:25
 #: src/views/preference/LogrotateSettings.vue:25
 msgid "Interval"
 msgid "Interval"
 msgstr ""
 msgstr ""
@@ -1462,11 +1486,11 @@ msgstr ""
 msgid "Invalid"
 msgid "Invalid"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:42
+#: src/constants/errors/backup.ts:44
 msgid "Invalid AES IV format: {0}"
 msgid "Invalid AES IV format: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:41
+#: src/constants/errors/backup.ts:43
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1474,6 +1498,10 @@ msgstr ""
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/backup.ts:51
+msgid "Invalid file path: {0}"
+msgstr ""
+
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/ConfigEditor.vue:250
 #: src/views/config/ConfigEditor.vue:250
 msgid "Invalid filename"
 msgid "Invalid filename"
@@ -1487,7 +1515,7 @@ msgstr ""
 msgid "Invalid otp code"
 msgid "Invalid otp code"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:25
+#: src/constants/errors/backup.ts:27
 msgid "Invalid padding in decrypted data"
 msgid "Invalid padding in decrypted data"
 msgstr ""
 msgstr ""
 
 
@@ -1503,7 +1531,7 @@ msgstr ""
 msgid "Invalid request format"
 msgid "Invalid request format"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:40
+#: src/constants/errors/backup.ts:42
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr ""
 msgstr ""
 
 
@@ -1803,7 +1831,7 @@ msgstr ""
 msgid "Nginx conf not include stream-enabled"
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:18
+#: src/constants/errors/backup.ts:19
 msgid "Nginx config directory is not set"
 msgid "Nginx config directory is not set"
 msgstr ""
 msgstr ""
 
 
@@ -1861,6 +1889,10 @@ msgstr ""
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/system.ts:2
+msgid "Nginx UI already installed"
+msgstr ""
+
 #: src/views/system/Backup/SystemRestore.vue:88
 #: src/views/system/Backup/SystemRestore.vue:88
 msgid "Nginx UI configuration has been restored"
 msgid "Nginx UI configuration has been restored"
 msgstr ""
 msgstr ""
@@ -2040,7 +2072,7 @@ msgstr ""
 msgid "Password"
 msgid "Password"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Install.vue:108
+#: src/views/other/Install.vue:141
 msgid "Password (*)"
 msgid "Password (*)"
 msgstr ""
 msgstr ""
 
 
@@ -2048,7 +2080,7 @@ msgstr ""
 msgid "Password incorrect"
 msgid "Password incorrect"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Install.vue:48
+#: src/views/other/Install.vue:70
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 msgstr ""
 
 
@@ -2133,16 +2165,16 @@ msgstr ""
 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 ""
 msgstr ""
 
 
-#: src/views/other/Install.vue:32
+#: src/views/other/Install.vue:54
 msgid "Please input your E-mail!"
 msgid "Please input your E-mail!"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Install.vue:44
+#: src/views/other/Install.vue:66
 #: src/views/other/Login.vue:47
 #: src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgid "Please input your password!"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Install.vue:38
+#: src/views/other/Install.vue:60
 #: src/views/other/Login.vue:41
 #: src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgid "Please input your username!"
 msgstr ""
 msgstr ""
@@ -2844,7 +2876,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."
 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 ""
 msgstr ""
 
 
-#: src/views/other/Install.vue:54
+#: src/views/other/Install.vue:76
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr ""
 msgstr ""
 
 
@@ -3105,7 +3137,7 @@ msgstr ""
 msgid "Username"
 msgid "Username"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Install.vue:98
+#: src/views/other/Install.vue:131
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr ""
 msgstr ""
 
 

+ 92 - 53
app/src/language/ru_RU/app.po

@@ -279,7 +279,7 @@ msgstr "Назад"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:39
+#: src/constants/errors/backup.ts:41
 #, fuzzy
 #, fuzzy
 msgid "Backup file not found: {0}"
 msgid "Backup file not found: {0}"
 msgstr "Файл не найден"
 msgstr "Файл не найден"
@@ -504,7 +504,7 @@ msgstr "Команда"
 msgid "Comments"
 msgid "Comments"
 msgstr "Комментарии"
 msgstr "Комментарии"
 
 
-#: src/constants/errors/backup.ts:13
+#: src/constants/errors/backup.ts:14
 #, fuzzy
 #, fuzzy
 msgid "Config path is empty"
 msgid "Config path is empty"
 msgstr "Шаблоны конфигурации"
 msgstr "Шаблоны конфигурации"
@@ -653,7 +653,7 @@ msgstr "Настройте имя локального сервера для о
 msgid "Dashboard"
 msgid "Dashboard"
 msgstr "Доска"
 msgstr "Доска"
 
 
-#: src/views/other/Install.vue:119
+#: src/views/other/Install.vue:152
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "База данных (Опционально, по умолчанию: database)"
 msgstr "База данных (Опционально, по умолчанию: database)"
 
 
@@ -966,7 +966,7 @@ msgstr "Редактировать поток"
 msgid "Email"
 msgid "Email"
 msgstr "Электронная почта"
 msgstr "Электронная почта"
 
 
-#: src/views/other/Install.vue:88
+#: src/views/other/Install.vue:121
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
@@ -1106,37 +1106,42 @@ msgstr ""
 msgid "Failed to backup Nginx UI files: {0}"
 msgid "Failed to backup Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:17
+#: src/constants/errors/backup.ts:18
 #, fuzzy
 #, fuzzy
 msgid "Failed to calculate hash: {0}"
 msgid "Failed to calculate hash: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
-#: src/constants/errors/backup.ts:53
+#: src/constants/errors/backup.ts:58
 msgid "Failed to calculate Nginx hash: {0}"
 msgid "Failed to calculate Nginx hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:52
+#: src/constants/errors/backup.ts:57
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:14
+#: src/constants/errors/backup.ts:13
+#, fuzzy
+msgid "Failed to cleanup temporary directory: {0}"
+msgstr "Не удалось включить %{msg}"
+
+#: src/constants/errors/backup.ts:15
 msgid "Failed to copy config file: {0}"
 msgid "Failed to copy config file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:15
+#: src/constants/errors/backup.ts:16
 msgid "Failed to copy database directory: {0}"
 msgid "Failed to copy database directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:16
+#: src/constants/errors/backup.ts:17
 #, fuzzy
 #, fuzzy
 msgid "Failed to copy database file: {0}"
 msgid "Failed to copy database file: {0}"
 msgstr "Не удалось отключить %{msg}"
 msgstr "Не удалось отключить %{msg}"
 
 
-#: src/constants/errors/backup.ts:30
+#: src/constants/errors/backup.ts:32
 msgid "Failed to copy file content: {0}"
 msgid "Failed to copy file content: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:19
+#: src/constants/errors/backup.ts:20
 msgid "Failed to copy Nginx config directory: {0}"
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1150,12 +1155,12 @@ msgstr "Не удалось включить %{msg}"
 msgid "Failed to create backup file: {0}"
 msgid "Failed to create backup file: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
-#: src/constants/errors/backup.ts:44
+#: src/constants/errors/backup.ts:46
 #, fuzzy
 #, fuzzy
 msgid "Failed to create directory: {0}"
 msgid "Failed to create directory: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
-#: src/constants/errors/backup.ts:46
+#: src/constants/errors/backup.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Failed to create file: {0}"
 msgid "Failed to create file: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
@@ -1165,15 +1170,20 @@ msgstr "Не удалось включить %{msg}"
 msgid "Failed to create hash info file: {0}"
 msgid "Failed to create hash info file: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
-#: src/constants/errors/backup.ts:45
+#: src/constants/errors/backup.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Failed to create parent directory: {0}"
 msgid "Failed to create parent directory: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
-#: src/constants/errors/backup.ts:32
+#: src/constants/errors/backup.ts:34
 msgid "Failed to create restore directory: {0}"
 msgid "Failed to create restore directory: {0}"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/backup.ts:50
+#, fuzzy
+msgid "Failed to create symbolic link: {0}"
+msgstr "Не удалось включить %{msg}"
+
 #: src/constants/errors/backup.ts:2
 #: src/constants/errors/backup.ts:2
 #, fuzzy
 #, fuzzy
 msgid "Failed to create temporary directory"
 msgid "Failed to create temporary directory"
@@ -1189,36 +1199,36 @@ msgstr "Не удалось включить %{msg}"
 msgid "Failed to create zip archive: {0}"
 msgid "Failed to create zip archive: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
-#: src/constants/errors/backup.ts:27
+#: src/constants/errors/backup.ts:29
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip entry: {0}"
 msgid "Failed to create zip entry: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
-#: src/constants/errors/backup.ts:26
+#: src/constants/errors/backup.ts:28
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip file: {0}"
 msgid "Failed to create zip file: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
-#: src/constants/errors/backup.ts:29
+#: src/constants/errors/backup.ts:31
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip header: {0}"
 msgid "Failed to create zip header: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
-#: src/constants/errors/backup.ts:24
+#: src/constants/errors/backup.ts:26
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt data: {0}"
 msgid "Failed to decrypt data: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
-#: src/constants/errors/backup.ts:49
+#: src/constants/errors/backup.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt file: {0}"
 msgid "Failed to decrypt file: {0}"
 msgstr "Не удалось отключить %{msg}"
 msgstr "Не удалось отключить %{msg}"
 
 
-#: src/constants/errors/backup.ts:35
+#: src/constants/errors/backup.ts:37
 msgid "Failed to decrypt Nginx directory: {0}"
 msgid "Failed to decrypt Nginx directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:34
+#: src/constants/errors/backup.ts:36
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1236,12 +1246,12 @@ msgstr "Не удалось отключить %{msg}"
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
-#: src/constants/errors/backup.ts:23
+#: src/constants/errors/backup.ts:25
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt data: {0}"
 msgid "Failed to encrypt data: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
-#: src/constants/errors/backup.ts:21
+#: src/constants/errors/backup.ts:23
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt file: {0}"
 msgid "Failed to encrypt file: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
@@ -1254,7 +1264,12 @@ msgstr ""
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:33
+#: src/constants/errors/backup.ts:52
+#, fuzzy
+msgid "Failed to evaluate symbolic links: {0}"
+msgstr "Не удалось включить %{msg}"
+
+#: src/constants/errors/backup.ts:35
 #, fuzzy
 #, fuzzy
 msgid "Failed to extract archive: {0}"
 msgid "Failed to extract archive: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
@@ -1273,17 +1288,17 @@ msgstr "Не удалось получить информацию о серти
 msgid "Failed to get certificate information"
 msgid "Failed to get certificate information"
 msgstr "Не удалось получить информацию о сертификате"
 msgstr "Не удалось получить информацию о сертификате"
 
 
-#: src/constants/errors/backup.ts:28
+#: src/constants/errors/backup.ts:30
 #, fuzzy
 #, fuzzy
 msgid "Failed to open source file: {0}"
 msgid "Failed to open source file: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
-#: src/constants/errors/backup.ts:47
+#: src/constants/errors/backup.ts:49
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip entry: {0}"
 msgid "Failed to open zip entry: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
-#: src/constants/errors/backup.ts:43
+#: src/constants/errors/backup.ts:45
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip file: {0}"
 msgid "Failed to open zip file: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
@@ -1292,16 +1307,16 @@ msgstr "Не удалось включить %{msg}"
 msgid "Failed to parse nginx.conf"
 msgid "Failed to parse nginx.conf"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:48
+#: src/constants/errors/backup.ts:53
 msgid "Failed to read encrypted file: {0}"
 msgid "Failed to read encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:20
+#: src/constants/errors/backup.ts:22
 #, fuzzy
 #, fuzzy
 msgid "Failed to read file: {0}"
 msgid "Failed to read file: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
-#: src/constants/errors/backup.ts:51
+#: src/constants/errors/backup.ts:56
 msgid "Failed to read hash info file: {0}"
 msgid "Failed to read hash info file: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1309,11 +1324,16 @@ msgstr ""
 msgid "Failed to read nginx.conf"
 msgid "Failed to read nginx.conf"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:37
+#: src/constants/errors/backup.ts:21
+#, fuzzy
+msgid "Failed to read symlink: {0}"
+msgstr "Не удалось включить %{msg}"
+
+#: src/constants/errors/backup.ts:39
 msgid "Failed to restore Nginx configs: {0}"
 msgid "Failed to restore Nginx configs: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:38
+#: src/constants/errors/backup.ts:40
 msgid "Failed to restore Nginx UI files: {0}"
 msgid "Failed to restore Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1322,20 +1342,20 @@ msgstr ""
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr "Не удалось сохранить, обнаружены синтаксические ошибки в конфигурации."
 msgstr "Не удалось сохранить, обнаружены синтаксические ошибки в конфигурации."
 
 
-#: src/constants/errors/backup.ts:36
+#: src/constants/errors/backup.ts:38
 #, fuzzy
 #, fuzzy
 msgid "Failed to verify hashes: {0}"
 msgid "Failed to verify hashes: {0}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
-#: src/constants/errors/backup.ts:50
+#: src/constants/errors/backup.ts:55
 msgid "Failed to write decrypted file: {0}"
 msgid "Failed to write decrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:22
+#: src/constants/errors/backup.ts:24
 msgid "Failed to write encrypted file: {0}"
 msgid "Failed to write encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:31
+#: src/constants/errors/backup.ts:33
 msgid "Failed to write to zip buffer: {0}"
 msgid "Failed to write to zip buffer: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1432,7 +1452,7 @@ msgstr "Получение сертификата, пожалуйста, под
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr "Прокси Github"
 msgstr "Прокси Github"
 
 
-#: src/constants/errors/backup.ts:54
+#: src/constants/errors/backup.ts:59
 msgid "Hash verification failed: file integrity compromised"
 msgid "Hash verification failed: file integrity compromised"
 msgstr ""
 msgstr ""
 
 
@@ -1520,14 +1540,24 @@ msgstr "Введите код из приложения:"
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr "Введите код восстановления:"
 msgstr "Введите код восстановления:"
 
 
-#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:134
+#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:168
 msgid "Install"
 msgid "Install"
 msgstr "Установить"
 msgstr "Установить"
 
 
-#: src/views/other/Install.vue:67
+#: src/views/other/Install.vue:89
 msgid "Install successfully"
 msgid "Install successfully"
 msgstr "Установка прошла успешно"
 msgstr "Установка прошла успешно"
 
 
+#: src/constants/errors/system.ts:3
+msgid "Installation is not allowed after 10 minutes of system startup"
+msgstr ""
+
+#: src/views/other/Install.vue:113
+msgid ""
+"Installation is not allowed after 10 minutes of system startup, please "
+"restart the Nginx UI."
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:25
 #: src/views/preference/LogrotateSettings.vue:25
 msgid "Interval"
 msgid "Interval"
 msgstr "Интервал"
 msgstr "Интервал"
@@ -1536,11 +1566,11 @@ msgstr "Интервал"
 msgid "Invalid"
 msgid "Invalid"
 msgstr "Недействительно"
 msgstr "Недействительно"
 
 
-#: src/constants/errors/backup.ts:42
+#: src/constants/errors/backup.ts:44
 msgid "Invalid AES IV format: {0}"
 msgid "Invalid AES IV format: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:41
+#: src/constants/errors/backup.ts:43
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1549,6 +1579,11 @@ msgstr ""
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "Неверное имя файла"
 msgstr "Неверное имя файла"
 
 
+#: src/constants/errors/backup.ts:51
+#, fuzzy
+msgid "Invalid file path: {0}"
+msgstr "Неверное имя файла"
+
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/ConfigEditor.vue:250
 #: src/views/config/ConfigEditor.vue:250
 msgid "Invalid filename"
 msgid "Invalid filename"
@@ -1562,7 +1597,7 @@ msgstr "Недопустимое имя папки"
 msgid "Invalid otp code"
 msgid "Invalid otp code"
 msgstr "Неверный код OTP"
 msgstr "Неверный код OTP"
 
 
-#: src/constants/errors/backup.ts:25
+#: src/constants/errors/backup.ts:27
 msgid "Invalid padding in decrypted data"
 msgid "Invalid padding in decrypted data"
 msgstr ""
 msgstr ""
 
 
@@ -1578,7 +1613,7 @@ msgstr "Неверный код восстановления"
 msgid "Invalid request format"
 msgid "Invalid request format"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:40
+#: src/constants/errors/backup.ts:42
 #, fuzzy
 #, fuzzy
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "Неверный код восстановления"
 msgstr "Неверный код восстановления"
@@ -1890,7 +1925,7 @@ msgstr ""
 msgid "Nginx conf not include stream-enabled"
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:18
+#: src/constants/errors/backup.ts:19
 #, fuzzy
 #, fuzzy
 msgid "Nginx config directory is not set"
 msgid "Nginx config directory is not set"
 msgstr "Белый список директорий для логов Nginx"
 msgstr "Белый список директорий для логов Nginx"
@@ -1952,6 +1987,10 @@ msgstr "Терминальная команда запуска"
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Nginx успешно перезапущен"
 msgstr "Nginx успешно перезапущен"
 
 
+#: src/constants/errors/system.ts:2
+msgid "Nginx UI already installed"
+msgstr ""
+
 #: src/views/system/Backup/SystemRestore.vue:88
 #: src/views/system/Backup/SystemRestore.vue:88
 #, fuzzy
 #, fuzzy
 msgid "Nginx UI configuration has been restored"
 msgid "Nginx UI configuration has been restored"
@@ -2144,7 +2183,7 @@ msgstr ""
 msgid "Password"
 msgid "Password"
 msgstr "Пароль"
 msgstr "Пароль"
 
 
-#: src/views/other/Install.vue:108
+#: src/views/other/Install.vue:141
 msgid "Password (*)"
 msgid "Password (*)"
 msgstr "Пароль (*)"
 msgstr "Пароль (*)"
 
 
@@ -2153,7 +2192,7 @@ msgstr "Пароль (*)"
 msgid "Password incorrect"
 msgid "Password incorrect"
 msgstr "Имя пользователя или пароль неверны"
 msgstr "Имя пользователя или пароль неверны"
 
 
-#: src/views/other/Install.vue:48
+#: src/views/other/Install.vue:70
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 msgstr ""
 
 
@@ -2260,15 +2299,15 @@ msgstr ""
 "Введите имя, оно будет использоваться в качестве имени файла новой "
 "Введите имя, оно будет использоваться в качестве имени файла новой "
 "конфигурации."
 "конфигурации."
 
 
-#: src/views/other/Install.vue:32
+#: src/views/other/Install.vue:54
 msgid "Please input your E-mail!"
 msgid "Please input your E-mail!"
 msgstr "Введите ваш E-mail!"
 msgstr "Введите ваш E-mail!"
 
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
+#: src/views/other/Install.vue:66 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgid "Please input your password!"
 msgstr "Введите ваш пароль!"
 msgstr "Введите ваш пароль!"
 
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
+#: src/views/other/Install.vue:60 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgid "Please input your username!"
 msgstr "Введите ваше имя пользователя!"
 msgstr "Введите ваше имя пользователя!"
 
 
@@ -3019,7 +3058,7 @@ msgstr ""
 "более 1 недели или периода, установленного в настройках, с момента его "
 "более 1 недели или периода, установленного в настройках, с момента его "
 "последней выдачи."
 "последней выдачи."
 
 
-#: src/views/other/Install.vue:54
+#: src/views/other/Install.vue:76
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "Имя файла не может содержать такой символ: %{c}"
 msgstr "Имя файла не может содержать такой символ: %{c}"
 
 
@@ -3348,7 +3387,7 @@ msgstr ""
 msgid "Username"
 msgid "Username"
 msgstr "Имя пользователя"
 msgstr "Имя пользователя"
 
 
-#: src/views/other/Install.vue:98
+#: src/views/other/Install.vue:131
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Имя пользователя (*)"
 msgstr "Имя пользователя (*)"
 
 

+ 92 - 53
app/src/language/tr_TR/app.po

@@ -281,7 +281,7 @@ msgstr "Geri"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:39
+#: src/constants/errors/backup.ts:41
 #, fuzzy
 #, fuzzy
 msgid "Backup file not found: {0}"
 msgid "Backup file not found: {0}"
 msgstr "Dosya bulunamadı"
 msgstr "Dosya bulunamadı"
@@ -510,7 +510,7 @@ msgstr "Komut"
 msgid "Comments"
 msgid "Comments"
 msgstr "Yorumlar"
 msgstr "Yorumlar"
 
 
-#: src/constants/errors/backup.ts:13
+#: src/constants/errors/backup.ts:14
 #, fuzzy
 #, fuzzy
 msgid "Config path is empty"
 msgid "Config path is empty"
 msgstr "Yapılandırma Şablonları"
 msgstr "Yapılandırma Şablonları"
@@ -660,7 +660,7 @@ msgstr "Ortam göstergesinde görüntülenecek yerel sunucu adını özelleştir
 msgid "Dashboard"
 msgid "Dashboard"
 msgstr "Kontrol Paneli"
 msgstr "Kontrol Paneli"
 
 
-#: src/views/other/Install.vue:119
+#: src/views/other/Install.vue:152
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "Veritabanı (İsteğe bağlı, varsayılan: database)"
 msgstr "Veritabanı (İsteğe bağlı, varsayılan: database)"
 
 
@@ -986,7 +986,7 @@ msgstr "Akışı Düzenle"
 msgid "Email"
 msgid "Email"
 msgstr "E-posta"
 msgstr "E-posta"
 
 
-#: src/views/other/Install.vue:88
+#: src/views/other/Install.vue:121
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "E-posta(*)"
 msgstr "E-posta(*)"
 
 
@@ -1136,37 +1136,42 @@ msgstr ""
 msgid "Failed to backup Nginx UI files: {0}"
 msgid "Failed to backup Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:17
+#: src/constants/errors/backup.ts:18
 #, fuzzy
 #, fuzzy
 msgid "Failed to calculate hash: {0}"
 msgid "Failed to calculate hash: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
-#: src/constants/errors/backup.ts:53
+#: src/constants/errors/backup.ts:58
 msgid "Failed to calculate Nginx hash: {0}"
 msgid "Failed to calculate Nginx hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:52
+#: src/constants/errors/backup.ts:57
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:14
+#: src/constants/errors/backup.ts:13
+#, fuzzy
+msgid "Failed to cleanup temporary directory: {0}"
+msgstr "Etkinleştirilemedi %{msg}"
+
+#: src/constants/errors/backup.ts:15
 msgid "Failed to copy config file: {0}"
 msgid "Failed to copy config file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:15
+#: src/constants/errors/backup.ts:16
 msgid "Failed to copy database directory: {0}"
 msgid "Failed to copy database directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:16
+#: src/constants/errors/backup.ts:17
 #, fuzzy
 #, fuzzy
 msgid "Failed to copy database file: {0}"
 msgid "Failed to copy database file: {0}"
 msgstr "Devre dışı bırakılamadı %{msg}"
 msgstr "Devre dışı bırakılamadı %{msg}"
 
 
-#: src/constants/errors/backup.ts:30
+#: src/constants/errors/backup.ts:32
 msgid "Failed to copy file content: {0}"
 msgid "Failed to copy file content: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:19
+#: src/constants/errors/backup.ts:20
 msgid "Failed to copy Nginx config directory: {0}"
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1180,12 +1185,12 @@ msgstr "Etkinleştirilemedi %{msg}"
 msgid "Failed to create backup file: {0}"
 msgid "Failed to create backup file: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
-#: src/constants/errors/backup.ts:44
+#: src/constants/errors/backup.ts:46
 #, fuzzy
 #, fuzzy
 msgid "Failed to create directory: {0}"
 msgid "Failed to create directory: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
-#: src/constants/errors/backup.ts:46
+#: src/constants/errors/backup.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Failed to create file: {0}"
 msgid "Failed to create file: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
@@ -1195,15 +1200,20 @@ msgstr "Etkinleştirilemedi %{msg}"
 msgid "Failed to create hash info file: {0}"
 msgid "Failed to create hash info file: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
-#: src/constants/errors/backup.ts:45
+#: src/constants/errors/backup.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Failed to create parent directory: {0}"
 msgid "Failed to create parent directory: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
-#: src/constants/errors/backup.ts:32
+#: src/constants/errors/backup.ts:34
 msgid "Failed to create restore directory: {0}"
 msgid "Failed to create restore directory: {0}"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/backup.ts:50
+#, fuzzy
+msgid "Failed to create symbolic link: {0}"
+msgstr "Etkinleştirilemedi %{msg}"
+
 #: src/constants/errors/backup.ts:2
 #: src/constants/errors/backup.ts:2
 #, fuzzy
 #, fuzzy
 msgid "Failed to create temporary directory"
 msgid "Failed to create temporary directory"
@@ -1219,36 +1229,36 @@ msgstr "Etkinleştirilemedi %{msg}"
 msgid "Failed to create zip archive: {0}"
 msgid "Failed to create zip archive: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
-#: src/constants/errors/backup.ts:27
+#: src/constants/errors/backup.ts:29
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip entry: {0}"
 msgid "Failed to create zip entry: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
-#: src/constants/errors/backup.ts:26
+#: src/constants/errors/backup.ts:28
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip file: {0}"
 msgid "Failed to create zip file: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
-#: src/constants/errors/backup.ts:29
+#: src/constants/errors/backup.ts:31
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip header: {0}"
 msgid "Failed to create zip header: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
-#: src/constants/errors/backup.ts:24
+#: src/constants/errors/backup.ts:26
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt data: {0}"
 msgid "Failed to decrypt data: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
-#: src/constants/errors/backup.ts:49
+#: src/constants/errors/backup.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt file: {0}"
 msgid "Failed to decrypt file: {0}"
 msgstr "Devre dışı bırakılamadı %{msg}"
 msgstr "Devre dışı bırakılamadı %{msg}"
 
 
-#: src/constants/errors/backup.ts:35
+#: src/constants/errors/backup.ts:37
 msgid "Failed to decrypt Nginx directory: {0}"
 msgid "Failed to decrypt Nginx directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:34
+#: src/constants/errors/backup.ts:36
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1266,12 +1276,12 @@ msgstr "Devre dışı bırakılamadı %{msg}"
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
-#: src/constants/errors/backup.ts:23
+#: src/constants/errors/backup.ts:25
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt data: {0}"
 msgid "Failed to encrypt data: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
-#: src/constants/errors/backup.ts:21
+#: src/constants/errors/backup.ts:23
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt file: {0}"
 msgid "Failed to encrypt file: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
@@ -1284,7 +1294,12 @@ msgstr ""
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:33
+#: src/constants/errors/backup.ts:52
+#, fuzzy
+msgid "Failed to evaluate symbolic links: {0}"
+msgstr "Etkinleştirilemedi %{msg}"
+
+#: src/constants/errors/backup.ts:35
 #, fuzzy
 #, fuzzy
 msgid "Failed to extract archive: {0}"
 msgid "Failed to extract archive: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
@@ -1303,17 +1318,17 @@ msgstr "Sertifika bilgileri alınamadı"
 msgid "Failed to get certificate information"
 msgid "Failed to get certificate information"
 msgstr "Sertifika bilgileri alınamadı"
 msgstr "Sertifika bilgileri alınamadı"
 
 
-#: src/constants/errors/backup.ts:28
+#: src/constants/errors/backup.ts:30
 #, fuzzy
 #, fuzzy
 msgid "Failed to open source file: {0}"
 msgid "Failed to open source file: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
-#: src/constants/errors/backup.ts:47
+#: src/constants/errors/backup.ts:49
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip entry: {0}"
 msgid "Failed to open zip entry: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
-#: src/constants/errors/backup.ts:43
+#: src/constants/errors/backup.ts:45
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip file: {0}"
 msgid "Failed to open zip file: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
@@ -1322,16 +1337,16 @@ msgstr "Etkinleştirilemedi %{msg}"
 msgid "Failed to parse nginx.conf"
 msgid "Failed to parse nginx.conf"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:48
+#: src/constants/errors/backup.ts:53
 msgid "Failed to read encrypted file: {0}"
 msgid "Failed to read encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:20
+#: src/constants/errors/backup.ts:22
 #, fuzzy
 #, fuzzy
 msgid "Failed to read file: {0}"
 msgid "Failed to read file: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
-#: src/constants/errors/backup.ts:51
+#: src/constants/errors/backup.ts:56
 msgid "Failed to read hash info file: {0}"
 msgid "Failed to read hash info file: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1339,11 +1354,16 @@ msgstr ""
 msgid "Failed to read nginx.conf"
 msgid "Failed to read nginx.conf"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:37
+#: src/constants/errors/backup.ts:21
+#, fuzzy
+msgid "Failed to read symlink: {0}"
+msgstr "Etkinleştirilemedi %{msg}"
+
+#: src/constants/errors/backup.ts:39
 msgid "Failed to restore Nginx configs: {0}"
 msgid "Failed to restore Nginx configs: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:38
+#: src/constants/errors/backup.ts:40
 msgid "Failed to restore Nginx UI files: {0}"
 msgid "Failed to restore Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1352,20 +1372,20 @@ msgstr ""
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr "Kaydedilemedi, yapılandırmada sözdizimi hatası(ları) tespit edildi."
 msgstr "Kaydedilemedi, yapılandırmada sözdizimi hatası(ları) tespit edildi."
 
 
-#: src/constants/errors/backup.ts:36
+#: src/constants/errors/backup.ts:38
 #, fuzzy
 #, fuzzy
 msgid "Failed to verify hashes: {0}"
 msgid "Failed to verify hashes: {0}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
-#: src/constants/errors/backup.ts:50
+#: src/constants/errors/backup.ts:55
 msgid "Failed to write decrypted file: {0}"
 msgid "Failed to write decrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:22
+#: src/constants/errors/backup.ts:24
 msgid "Failed to write encrypted file: {0}"
 msgid "Failed to write encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:31
+#: src/constants/errors/backup.ts:33
 msgid "Failed to write to zip buffer: {0}"
 msgid "Failed to write to zip buffer: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1462,7 +1482,7 @@ msgstr "Sertifika alınıyor, lütfen bekleyin..."
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr "Github Proxy"
 msgstr "Github Proxy"
 
 
-#: src/constants/errors/backup.ts:54
+#: src/constants/errors/backup.ts:59
 msgid "Hash verification failed: file integrity compromised"
 msgid "Hash verification failed: file integrity compromised"
 msgstr ""
 msgstr ""
 
 
@@ -1551,14 +1571,24 @@ msgstr "Uygulamadan kodu girin:"
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr "Kurtarma kodunu girin:"
 msgstr "Kurtarma kodunu girin:"
 
 
-#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:134
+#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:168
 msgid "Install"
 msgid "Install"
 msgstr "Yükle"
 msgstr "Yükle"
 
 
-#: src/views/other/Install.vue:67
+#: src/views/other/Install.vue:89
 msgid "Install successfully"
 msgid "Install successfully"
 msgstr "Başarıyla yüklendi"
 msgstr "Başarıyla yüklendi"
 
 
+#: src/constants/errors/system.ts:3
+msgid "Installation is not allowed after 10 minutes of system startup"
+msgstr ""
+
+#: src/views/other/Install.vue:113
+msgid ""
+"Installation is not allowed after 10 minutes of system startup, please "
+"restart the Nginx UI."
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:25
 #: src/views/preference/LogrotateSettings.vue:25
 msgid "Interval"
 msgid "Interval"
 msgstr "Aralık"
 msgstr "Aralık"
@@ -1567,11 +1597,11 @@ msgstr "Aralık"
 msgid "Invalid"
 msgid "Invalid"
 msgstr "Geçersiz"
 msgstr "Geçersiz"
 
 
-#: src/constants/errors/backup.ts:42
+#: src/constants/errors/backup.ts:44
 msgid "Invalid AES IV format: {0}"
 msgid "Invalid AES IV format: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:41
+#: src/constants/errors/backup.ts:43
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1580,6 +1610,11 @@ msgstr ""
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "Geçersiz dosya adı"
 msgstr "Geçersiz dosya adı"
 
 
+#: src/constants/errors/backup.ts:51
+#, fuzzy
+msgid "Invalid file path: {0}"
+msgstr "Geçersiz dosya adı"
+
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/ConfigEditor.vue:250
 #: src/views/config/ConfigEditor.vue:250
 msgid "Invalid filename"
 msgid "Invalid filename"
@@ -1594,7 +1629,7 @@ msgstr "Geçersiz klasör adı"
 msgid "Invalid otp code"
 msgid "Invalid otp code"
 msgstr "Geçersiz 2FA veya kurtarma kodu"
 msgstr "Geçersiz 2FA veya kurtarma kodu"
 
 
-#: src/constants/errors/backup.ts:25
+#: src/constants/errors/backup.ts:27
 msgid "Invalid padding in decrypted data"
 msgid "Invalid padding in decrypted data"
 msgstr ""
 msgstr ""
 
 
@@ -1611,7 +1646,7 @@ msgstr "Geçersiz 2FA veya kurtarma kodu"
 msgid "Invalid request format"
 msgid "Invalid request format"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:40
+#: src/constants/errors/backup.ts:42
 #, fuzzy
 #, fuzzy
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "Geçersiz 2FA veya kurtarma kodu"
 msgstr "Geçersiz 2FA veya kurtarma kodu"
@@ -1949,7 +1984,7 @@ msgstr ""
 msgid "Nginx conf not include stream-enabled"
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:18
+#: src/constants/errors/backup.ts:19
 #, fuzzy
 #, fuzzy
 msgid "Nginx config directory is not set"
 msgid "Nginx config directory is not set"
 msgstr "Nginx Yapılandırma Ayrıştırma Hatası"
 msgstr "Nginx Yapılandırma Ayrıştırma Hatası"
@@ -2018,6 +2053,10 @@ msgstr "Terminal Başlatma Komutu"
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Nginx başarıyla yeniden başlatıldı"
 msgstr "Nginx başarıyla yeniden başlatıldı"
 
 
+#: src/constants/errors/system.ts:2
+msgid "Nginx UI already installed"
+msgstr ""
+
 #: src/views/system/Backup/SystemRestore.vue:88
 #: src/views/system/Backup/SystemRestore.vue:88
 #, fuzzy
 #, fuzzy
 msgid "Nginx UI configuration has been restored"
 msgid "Nginx UI configuration has been restored"
@@ -2241,7 +2280,7 @@ msgstr ""
 msgid "Password"
 msgid "Password"
 msgstr "Şifre"
 msgstr "Şifre"
 
 
-#: src/views/other/Install.vue:108
+#: src/views/other/Install.vue:141
 #, fuzzy
 #, fuzzy
 msgid "Password (*)"
 msgid "Password (*)"
 msgstr "Şifre (*)"
 msgstr "Şifre (*)"
@@ -2251,7 +2290,7 @@ msgstr "Şifre (*)"
 msgid "Password incorrect"
 msgid "Password incorrect"
 msgstr "Kullanıcı adı veya şifre yanlış"
 msgstr "Kullanıcı adı veya şifre yanlış"
 
 
-#: src/views/other/Install.vue:48
+#: src/views/other/Install.vue:70
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 msgstr ""
 
 
@@ -2370,17 +2409,17 @@ msgid ""
 msgstr ""
 msgstr ""
 "Lütfen isim girin, bu yeni yapılandırmanın dosya adı olarak kullanılacaktır!"
 "Lütfen isim girin, bu yeni yapılandırmanın dosya adı olarak kullanılacaktır!"
 
 
-#: src/views/other/Install.vue:32
+#: src/views/other/Install.vue:54
 #, fuzzy
 #, fuzzy
 msgid "Please input your E-mail!"
 msgid "Please input your E-mail!"
 msgstr "Lütfen e-postanızı girin!"
 msgstr "Lütfen e-postanızı girin!"
 
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
+#: src/views/other/Install.vue:66 src/views/other/Login.vue:47
 #, fuzzy
 #, fuzzy
 msgid "Please input your password!"
 msgid "Please input your password!"
 msgstr "Lütfen şifrenizi girin!"
 msgstr "Lütfen şifrenizi girin!"
 
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
+#: src/views/other/Install.vue:60 src/views/other/Login.vue:41
 #, fuzzy
 #, fuzzy
 msgid "Please input your username!"
 msgid "Please input your username!"
 msgstr "Lütfen kullanıcı adınızı girin!"
 msgstr "Lütfen kullanıcı adınızı girin!"
@@ -3236,7 +3275,7 @@ msgstr ""
 "verilmesinden bu yana 1 haftadan veya ayarlarda belirlediğiniz süreden fazla "
 "verilmesinden bu yana 1 haftadan veya ayarlarda belirlediğiniz süreden fazla "
 "zaman geçtiyse yenilenecektir."
 "zaman geçtiyse yenilenecektir."
 
 
-#: src/views/other/Install.vue:54
+#: src/views/other/Install.vue:76
 #, fuzzy
 #, fuzzy
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "Dosya adı aşağıdaki karakterleri içeremez: %{c}"
 msgstr "Dosya adı aşağıdaki karakterleri içeremez: %{c}"
@@ -3607,7 +3646,7 @@ msgstr ""
 msgid "Username"
 msgid "Username"
 msgstr "Kullanıcı Adı"
 msgstr "Kullanıcı Adı"
 
 
-#: src/views/other/Install.vue:98
+#: src/views/other/Install.vue:131
 #, fuzzy
 #, fuzzy
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Kullanıcı adı (*)"
 msgstr "Kullanıcı adı (*)"

+ 92 - 53
app/src/language/vi_VN/app.po

@@ -293,7 +293,7 @@ msgstr "Quay lại"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:39
+#: src/constants/errors/backup.ts:41
 #, fuzzy
 #, fuzzy
 msgid "Backup file not found: {0}"
 msgid "Backup file not found: {0}"
 msgstr "Không tìm thấy tệp tin"
 msgstr "Không tìm thấy tệp tin"
@@ -534,7 +534,7 @@ msgstr "Bình luận"
 msgid "Comments"
 msgid "Comments"
 msgstr "Bình luận"
 msgstr "Bình luận"
 
 
-#: src/constants/errors/backup.ts:13
+#: src/constants/errors/backup.ts:14
 #, fuzzy
 #, fuzzy
 msgid "Config path is empty"
 msgid "Config path is empty"
 msgstr "Mẫu Cấu hình"
 msgstr "Mẫu Cấu hình"
@@ -686,7 +686,7 @@ msgstr ""
 msgid "Dashboard"
 msgid "Dashboard"
 msgstr "Bảng điều khiển"
 msgstr "Bảng điều khiển"
 
 
-#: src/views/other/Install.vue:119
+#: src/views/other/Install.vue:152
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "Tên cơ sở dữ liệu (Tuỳ chọn, Mặc định là: database)"
 msgstr "Tên cơ sở dữ liệu (Tuỳ chọn, Mặc định là: database)"
 
 
@@ -1012,7 +1012,7 @@ msgstr "Sửa trang web"
 msgid "Email"
 msgid "Email"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
-#: src/views/other/Install.vue:88
+#: src/views/other/Install.vue:121
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
@@ -1161,37 +1161,42 @@ msgstr ""
 msgid "Failed to backup Nginx UI files: {0}"
 msgid "Failed to backup Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:17
+#: src/constants/errors/backup.ts:18
 #, fuzzy
 #, fuzzy
 msgid "Failed to calculate hash: {0}"
 msgid "Failed to calculate hash: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
 
 
-#: src/constants/errors/backup.ts:53
+#: src/constants/errors/backup.ts:58
 msgid "Failed to calculate Nginx hash: {0}"
 msgid "Failed to calculate Nginx hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:52
+#: src/constants/errors/backup.ts:57
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:14
+#: src/constants/errors/backup.ts:13
+#, fuzzy
+msgid "Failed to cleanup temporary directory: {0}"
+msgstr "Không thể bật %{msg}"
+
+#: src/constants/errors/backup.ts:15
 msgid "Failed to copy config file: {0}"
 msgid "Failed to copy config file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:15
+#: src/constants/errors/backup.ts:16
 msgid "Failed to copy database directory: {0}"
 msgid "Failed to copy database directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:16
+#: src/constants/errors/backup.ts:17
 #, fuzzy
 #, fuzzy
 msgid "Failed to copy database file: {0}"
 msgid "Failed to copy database file: {0}"
 msgstr "Không thể tắt %{msg}"
 msgstr "Không thể tắt %{msg}"
 
 
-#: src/constants/errors/backup.ts:30
+#: src/constants/errors/backup.ts:32
 msgid "Failed to copy file content: {0}"
 msgid "Failed to copy file content: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:19
+#: src/constants/errors/backup.ts:20
 msgid "Failed to copy Nginx config directory: {0}"
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1205,12 +1210,12 @@ msgstr "Không thể bật %{msg}"
 msgid "Failed to create backup file: {0}"
 msgid "Failed to create backup file: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
 
 
-#: src/constants/errors/backup.ts:44
+#: src/constants/errors/backup.ts:46
 #, fuzzy
 #, fuzzy
 msgid "Failed to create directory: {0}"
 msgid "Failed to create directory: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
 
 
-#: src/constants/errors/backup.ts:46
+#: src/constants/errors/backup.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Failed to create file: {0}"
 msgid "Failed to create file: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
@@ -1220,15 +1225,20 @@ msgstr "Không thể bật %{msg}"
 msgid "Failed to create hash info file: {0}"
 msgid "Failed to create hash info file: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
 
 
-#: src/constants/errors/backup.ts:45
+#: src/constants/errors/backup.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Failed to create parent directory: {0}"
 msgid "Failed to create parent directory: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
 
 
-#: src/constants/errors/backup.ts:32
+#: src/constants/errors/backup.ts:34
 msgid "Failed to create restore directory: {0}"
 msgid "Failed to create restore directory: {0}"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/backup.ts:50
+#, fuzzy
+msgid "Failed to create symbolic link: {0}"
+msgstr "Không thể bật %{msg}"
+
 #: src/constants/errors/backup.ts:2
 #: src/constants/errors/backup.ts:2
 #, fuzzy
 #, fuzzy
 msgid "Failed to create temporary directory"
 msgid "Failed to create temporary directory"
@@ -1244,36 +1254,36 @@ msgstr "Không thể bật %{msg}"
 msgid "Failed to create zip archive: {0}"
 msgid "Failed to create zip archive: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
 
 
-#: src/constants/errors/backup.ts:27
+#: src/constants/errors/backup.ts:29
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip entry: {0}"
 msgid "Failed to create zip entry: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
 
 
-#: src/constants/errors/backup.ts:26
+#: src/constants/errors/backup.ts:28
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip file: {0}"
 msgid "Failed to create zip file: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
 
 
-#: src/constants/errors/backup.ts:29
+#: src/constants/errors/backup.ts:31
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip header: {0}"
 msgid "Failed to create zip header: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
 
 
-#: src/constants/errors/backup.ts:24
+#: src/constants/errors/backup.ts:26
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt data: {0}"
 msgid "Failed to decrypt data: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
 
 
-#: src/constants/errors/backup.ts:49
+#: src/constants/errors/backup.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt file: {0}"
 msgid "Failed to decrypt file: {0}"
 msgstr "Không thể tắt %{msg}"
 msgstr "Không thể tắt %{msg}"
 
 
-#: src/constants/errors/backup.ts:35
+#: src/constants/errors/backup.ts:37
 msgid "Failed to decrypt Nginx directory: {0}"
 msgid "Failed to decrypt Nginx directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:34
+#: src/constants/errors/backup.ts:36
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1291,12 +1301,12 @@ msgstr "Không thể tắt %{msg}"
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
 
 
-#: src/constants/errors/backup.ts:23
+#: src/constants/errors/backup.ts:25
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt data: {0}"
 msgid "Failed to encrypt data: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
 
 
-#: src/constants/errors/backup.ts:21
+#: src/constants/errors/backup.ts:23
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt file: {0}"
 msgid "Failed to encrypt file: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
@@ -1309,7 +1319,12 @@ msgstr ""
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:33
+#: src/constants/errors/backup.ts:52
+#, fuzzy
+msgid "Failed to evaluate symbolic links: {0}"
+msgstr "Không thể bật %{msg}"
+
+#: src/constants/errors/backup.ts:35
 #, fuzzy
 #, fuzzy
 msgid "Failed to extract archive: {0}"
 msgid "Failed to extract archive: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
@@ -1328,17 +1343,17 @@ msgstr "Không thể truy xuất thông tin chứng chỉ"
 msgid "Failed to get certificate information"
 msgid "Failed to get certificate information"
 msgstr "Không thể truy xuất thông tin chứng chỉ"
 msgstr "Không thể truy xuất thông tin chứng chỉ"
 
 
-#: src/constants/errors/backup.ts:28
+#: src/constants/errors/backup.ts:30
 #, fuzzy
 #, fuzzy
 msgid "Failed to open source file: {0}"
 msgid "Failed to open source file: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
 
 
-#: src/constants/errors/backup.ts:47
+#: src/constants/errors/backup.ts:49
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip entry: {0}"
 msgid "Failed to open zip entry: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
 
 
-#: src/constants/errors/backup.ts:43
+#: src/constants/errors/backup.ts:45
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip file: {0}"
 msgid "Failed to open zip file: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
@@ -1347,16 +1362,16 @@ msgstr "Không thể bật %{msg}"
 msgid "Failed to parse nginx.conf"
 msgid "Failed to parse nginx.conf"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:48
+#: src/constants/errors/backup.ts:53
 msgid "Failed to read encrypted file: {0}"
 msgid "Failed to read encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:20
+#: src/constants/errors/backup.ts:22
 #, fuzzy
 #, fuzzy
 msgid "Failed to read file: {0}"
 msgid "Failed to read file: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
 
 
-#: src/constants/errors/backup.ts:51
+#: src/constants/errors/backup.ts:56
 msgid "Failed to read hash info file: {0}"
 msgid "Failed to read hash info file: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1364,11 +1379,16 @@ msgstr ""
 msgid "Failed to read nginx.conf"
 msgid "Failed to read nginx.conf"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:37
+#: src/constants/errors/backup.ts:21
+#, fuzzy
+msgid "Failed to read symlink: {0}"
+msgstr "Không thể bật %{msg}"
+
+#: src/constants/errors/backup.ts:39
 msgid "Failed to restore Nginx configs: {0}"
 msgid "Failed to restore Nginx configs: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:38
+#: src/constants/errors/backup.ts:40
 msgid "Failed to restore Nginx UI files: {0}"
 msgid "Failed to restore Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1377,20 +1397,20 @@ msgstr ""
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr "Không lưu được, đã phát hiện thấy (các) lỗi cú pháp trong cấu hình."
 msgstr "Không lưu được, đã phát hiện thấy (các) lỗi cú pháp trong cấu hình."
 
 
-#: src/constants/errors/backup.ts:36
+#: src/constants/errors/backup.ts:38
 #, fuzzy
 #, fuzzy
 msgid "Failed to verify hashes: {0}"
 msgid "Failed to verify hashes: {0}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
 
 
-#: src/constants/errors/backup.ts:50
+#: src/constants/errors/backup.ts:55
 msgid "Failed to write decrypted file: {0}"
 msgid "Failed to write decrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:22
+#: src/constants/errors/backup.ts:24
 msgid "Failed to write encrypted file: {0}"
 msgid "Failed to write encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:31
+#: src/constants/errors/backup.ts:33
 msgid "Failed to write to zip buffer: {0}"
 msgid "Failed to write to zip buffer: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1488,7 +1508,7 @@ msgstr "Đang lấy chứng chỉ, vui lòng đợi..."
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:54
+#: src/constants/errors/backup.ts:59
 msgid "Hash verification failed: file integrity compromised"
 msgid "Hash verification failed: file integrity compromised"
 msgstr ""
 msgstr ""
 
 
@@ -1572,15 +1592,25 @@ msgstr ""
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:134
+#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:168
 msgid "Install"
 msgid "Install"
 msgstr "Cài đặt"
 msgstr "Cài đặt"
 
 
-#: src/views/other/Install.vue:67
+#: src/views/other/Install.vue:89
 #, fuzzy
 #, fuzzy
 msgid "Install successfully"
 msgid "Install successfully"
 msgstr "Cài đặt thành công"
 msgstr "Cài đặt thành công"
 
 
+#: src/constants/errors/system.ts:3
+msgid "Installation is not allowed after 10 minutes of system startup"
+msgstr ""
+
+#: src/views/other/Install.vue:113
+msgid ""
+"Installation is not allowed after 10 minutes of system startup, please "
+"restart the Nginx UI."
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:25
 #: src/views/preference/LogrotateSettings.vue:25
 msgid "Interval"
 msgid "Interval"
 msgstr ""
 msgstr ""
@@ -1590,11 +1620,11 @@ msgstr ""
 msgid "Invalid"
 msgid "Invalid"
 msgstr "Hợp lệ"
 msgstr "Hợp lệ"
 
 
-#: src/constants/errors/backup.ts:42
+#: src/constants/errors/backup.ts:44
 msgid "Invalid AES IV format: {0}"
 msgid "Invalid AES IV format: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:41
+#: src/constants/errors/backup.ts:43
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1603,6 +1633,11 @@ msgstr ""
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "E-mail không chính xác!"
 msgstr "E-mail không chính xác!"
 
 
+#: src/constants/errors/backup.ts:51
+#, fuzzy
+msgid "Invalid file path: {0}"
+msgstr "E-mail không chính xác!"
+
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/ConfigEditor.vue:250
 #: src/views/config/ConfigEditor.vue:250
 #, fuzzy
 #, fuzzy
@@ -1618,7 +1653,7 @@ msgstr ""
 msgid "Invalid otp code"
 msgid "Invalid otp code"
 msgstr "Hợp lệ"
 msgstr "Hợp lệ"
 
 
-#: src/constants/errors/backup.ts:25
+#: src/constants/errors/backup.ts:27
 msgid "Invalid padding in decrypted data"
 msgid "Invalid padding in decrypted data"
 msgstr ""
 msgstr ""
 
 
@@ -1634,7 +1669,7 @@ msgstr ""
 msgid "Invalid request format"
 msgid "Invalid request format"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:40
+#: src/constants/errors/backup.ts:42
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr ""
 msgstr ""
 
 
@@ -1959,7 +1994,7 @@ msgstr ""
 msgid "Nginx conf not include stream-enabled"
 msgid "Nginx conf not include stream-enabled"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:18
+#: src/constants/errors/backup.ts:19
 #, fuzzy
 #, fuzzy
 msgid "Nginx config directory is not set"
 msgid "Nginx config directory is not set"
 msgstr "Lỗi phân tích cú pháp cấu hình Nginx"
 msgstr "Lỗi phân tích cú pháp cấu hình Nginx"
@@ -2023,6 +2058,10 @@ msgstr ""
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Restart Nginx thành công"
 msgstr "Restart Nginx thành công"
 
 
+#: src/constants/errors/system.ts:2
+msgid "Nginx UI already installed"
+msgstr ""
+
 #: src/views/system/Backup/SystemRestore.vue:88
 #: src/views/system/Backup/SystemRestore.vue:88
 #, fuzzy
 #, fuzzy
 msgid "Nginx UI configuration has been restored"
 msgid "Nginx UI configuration has been restored"
@@ -2216,7 +2255,7 @@ msgstr ""
 msgid "Password"
 msgid "Password"
 msgstr "Mật khẩu"
 msgstr "Mật khẩu"
 
 
-#: src/views/other/Install.vue:108
+#: src/views/other/Install.vue:141
 msgid "Password (*)"
 msgid "Password (*)"
 msgstr "Mật khẩu (*)"
 msgstr "Mật khẩu (*)"
 
 
@@ -2225,7 +2264,7 @@ msgstr "Mật khẩu (*)"
 msgid "Password incorrect"
 msgid "Password incorrect"
 msgstr "Tên người dùng hoặc mật khẩu không chính xác"
 msgstr "Tên người dùng hoặc mật khẩu không chính xác"
 
 
-#: src/views/other/Install.vue:48
+#: src/views/other/Install.vue:70
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 msgstr ""
 
 
@@ -2329,15 +2368,15 @@ msgid ""
 msgstr ""
 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!"
 "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/other/Install.vue:32
+#: src/views/other/Install.vue:54
 msgid "Please input your E-mail!"
 msgid "Please input your E-mail!"
 msgstr "Vui lòng nhập E-mail của bạn!"
 msgstr "Vui lòng nhập E-mail của bạn!"
 
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
+#: src/views/other/Install.vue:66 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgid "Please input your password!"
 msgstr "Vui lòng nhập mật khẩu!"
 msgstr "Vui lòng nhập mật khẩu!"
 
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
+#: src/views/other/Install.vue:60 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgid "Please input your username!"
 msgstr "Vui lòng nhập username!"
 msgstr "Vui lòng nhập username!"
 
 
@@ -3112,7 +3151,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 đã "
 "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."
 "hơn 1 tuần kể từ lần cuối nó được cấp."
 
 
-#: src/views/other/Install.vue:54
+#: src/views/other/Install.vue:76
 msgid "The filename cannot contain the following characters: %{c}"
 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}"
 msgstr "Tên tệp không thể chứa các ký tự sau: %{c}"
 
 
@@ -3421,7 +3460,7 @@ msgstr ""
 msgid "Username"
 msgid "Username"
 msgstr "Username"
 msgstr "Username"
 
 
-#: src/views/other/Install.vue:98
+#: src/views/other/Install.vue:131
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Username (*)"
 msgstr "Username (*)"
 
 

+ 88 - 54
app/src/language/zh_CN/app.po

@@ -3,7 +3,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: \n"
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2025-03-29 18:45+0800\n"
+"PO-Revision-Date: 2025-03-29 20:55+0800\n"
 "Last-Translator: 0xJacky <me@jackyu.cn>\n"
 "Last-Translator: 0xJacky <me@jackyu.cn>\n"
 "Language-Team: Chinese (Simplified Han script) <https://weblate.nginxui.com/"
 "Language-Team: Chinese (Simplified Han script) <https://weblate.nginxui.com/"
 "projects/nginx-ui/frontend/zh_Hans/>\n"
 "projects/nginx-ui/frontend/zh_Hans/>\n"
@@ -276,7 +276,7 @@ msgstr "备份"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgstr "备份文件完整性检查失败,可能已被篡改"
 msgstr "备份文件完整性检查失败,可能已被篡改"
 
 
-#: src/constants/errors/backup.ts:39
+#: src/constants/errors/backup.ts:41
 msgid "Backup file not found: {0}"
 msgid "Backup file not found: {0}"
 msgstr "未找到备份文件:{0}"
 msgstr "未找到备份文件:{0}"
 
 
@@ -496,7 +496,7 @@ msgstr "命令"
 msgid "Comments"
 msgid "Comments"
 msgstr "注释"
 msgstr "注释"
 
 
-#: src/constants/errors/backup.ts:13
+#: src/constants/errors/backup.ts:14
 msgid "Config path is empty"
 msgid "Config path is empty"
 msgstr "配置路径为空"
 msgstr "配置路径为空"
 
 
@@ -642,7 +642,7 @@ msgstr "自定义显示在环境指示器中的本地服务器名称。"
 msgid "Dashboard"
 msgid "Dashboard"
 msgstr "仪表盘"
 msgstr "仪表盘"
 
 
-#: src/views/other/Install.vue:119
+#: src/views/other/Install.vue:152
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "数据库 (可选,默认: database)"
 msgstr "数据库 (可选,默认: database)"
 
 
@@ -935,7 +935,7 @@ msgstr "编辑 Stream"
 msgid "Email"
 msgid "Email"
 msgstr "邮箱"
 msgstr "邮箱"
 
 
-#: src/views/other/Install.vue:88
+#: src/views/other/Install.vue:121
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "邮箱 (*)"
 msgstr "邮箱 (*)"
 
 
@@ -1069,35 +1069,39 @@ msgstr "备份 Nginx 配置文件失败:{0}"
 msgid "Failed to backup Nginx UI files: {0}"
 msgid "Failed to backup Nginx UI files: {0}"
 msgstr "备份 Nginx UI 文件失败:{0}"
 msgstr "备份 Nginx UI 文件失败:{0}"
 
 
-#: src/constants/errors/backup.ts:17
+#: src/constants/errors/backup.ts:18
 msgid "Failed to calculate hash: {0}"
 msgid "Failed to calculate hash: {0}"
 msgstr "计算哈希值失败:{0}"
 msgstr "计算哈希值失败:{0}"
 
 
-#: src/constants/errors/backup.ts:53
+#: src/constants/errors/backup.ts:58
 msgid "Failed to calculate Nginx hash: {0}"
 msgid "Failed to calculate Nginx hash: {0}"
 msgstr "计算 Nginx 哈希值失败:{0}"
 msgstr "计算 Nginx 哈希值失败:{0}"
 
 
-#: src/constants/errors/backup.ts:52
+#: src/constants/errors/backup.ts:57
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgstr "计算 Nginx UI 哈希值失败:{0}"
 msgstr "计算 Nginx UI 哈希值失败:{0}"
 
 
-#: src/constants/errors/backup.ts:14
+#: src/constants/errors/backup.ts:13
+msgid "Failed to cleanup temporary directory: {0}"
+msgstr "清理临时目录失败:{0}"
+
+#: src/constants/errors/backup.ts:15
 msgid "Failed to copy config file: {0}"
 msgid "Failed to copy config file: {0}"
 msgstr "复制配置文件失败:{0}"
 msgstr "复制配置文件失败:{0}"
 
 
-#: src/constants/errors/backup.ts:15
+#: src/constants/errors/backup.ts:16
 msgid "Failed to copy database directory: {0}"
 msgid "Failed to copy database directory: {0}"
 msgstr "复制数据库目录失败:{0}"
 msgstr "复制数据库目录失败:{0}"
 
 
-#: src/constants/errors/backup.ts:16
+#: src/constants/errors/backup.ts:17
 msgid "Failed to copy database file: {0}"
 msgid "Failed to copy database file: {0}"
 msgstr "复制数据库文件失败:{0}"
 msgstr "复制数据库文件失败:{0}"
 
 
-#: src/constants/errors/backup.ts:30
+#: src/constants/errors/backup.ts:32
 msgid "Failed to copy file content: {0}"
 msgid "Failed to copy file content: {0}"
 msgstr "复制文件内容失败:{0}"
 msgstr "复制文件内容失败:{0}"
 
 
-#: src/constants/errors/backup.ts:19
+#: src/constants/errors/backup.ts:20
 msgid "Failed to copy Nginx config directory: {0}"
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr "复制 Nginx 配置目录失败:{0}"
 msgstr "复制 Nginx 配置目录失败:{0}"
 
 
@@ -1109,11 +1113,11 @@ msgstr "创建备份失败"
 msgid "Failed to create backup file: {0}"
 msgid "Failed to create backup file: {0}"
 msgstr "创建备份文件失败:{0}"
 msgstr "创建备份文件失败:{0}"
 
 
-#: src/constants/errors/backup.ts:44
+#: src/constants/errors/backup.ts:46
 msgid "Failed to create directory: {0}"
 msgid "Failed to create directory: {0}"
 msgstr "创建目录失败:{0}"
 msgstr "创建目录失败:{0}"
 
 
-#: src/constants/errors/backup.ts:46
+#: src/constants/errors/backup.ts:48
 msgid "Failed to create file: {0}"
 msgid "Failed to create file: {0}"
 msgstr "创建文件失败:{0}"
 msgstr "创建文件失败:{0}"
 
 
@@ -1121,14 +1125,18 @@ msgstr "创建文件失败:{0}"
 msgid "Failed to create hash info file: {0}"
 msgid "Failed to create hash info file: {0}"
 msgstr "创建哈希信息文件失败:{0}"
 msgstr "创建哈希信息文件失败:{0}"
 
 
-#: src/constants/errors/backup.ts:45
+#: src/constants/errors/backup.ts:47
 msgid "Failed to create parent directory: {0}"
 msgid "Failed to create parent directory: {0}"
 msgstr "创建父目录失败:{0}"
 msgstr "创建父目录失败:{0}"
 
 
-#: src/constants/errors/backup.ts:32
+#: src/constants/errors/backup.ts:34
 msgid "Failed to create restore directory: {0}"
 msgid "Failed to create restore directory: {0}"
 msgstr "创建还原目录失败:{0}"
 msgstr "创建还原目录失败:{0}"
 
 
+#: src/constants/errors/backup.ts:50
+msgid "Failed to create symbolic link: {0}"
+msgstr "创建符号链接失败:{0}"
+
 #: src/constants/errors/backup.ts:2
 #: src/constants/errors/backup.ts:2
 msgid "Failed to create temporary directory"
 msgid "Failed to create temporary directory"
 msgstr "创建临时目录失败"
 msgstr "创建临时目录失败"
@@ -1141,31 +1149,31 @@ msgstr "创建临时子目录失败"
 msgid "Failed to create zip archive: {0}"
 msgid "Failed to create zip archive: {0}"
 msgstr "创建 zip 压缩包失败:{0}"
 msgstr "创建 zip 压缩包失败:{0}"
 
 
-#: src/constants/errors/backup.ts:27
+#: src/constants/errors/backup.ts:29
 msgid "Failed to create zip entry: {0}"
 msgid "Failed to create zip entry: {0}"
 msgstr "创建 zip 条目失败:{0}"
 msgstr "创建 zip 条目失败:{0}"
 
 
-#: src/constants/errors/backup.ts:26
+#: src/constants/errors/backup.ts:28
 msgid "Failed to create zip file: {0}"
 msgid "Failed to create zip file: {0}"
 msgstr "创建压缩文件失败:{0}"
 msgstr "创建压缩文件失败:{0}"
 
 
-#: src/constants/errors/backup.ts:29
+#: src/constants/errors/backup.ts:31
 msgid "Failed to create zip header: {0}"
 msgid "Failed to create zip header: {0}"
 msgstr "创建 zip 头失败:{0}"
 msgstr "创建 zip 头失败:{0}"
 
 
-#: src/constants/errors/backup.ts:24
+#: src/constants/errors/backup.ts:26
 msgid "Failed to decrypt data: {0}"
 msgid "Failed to decrypt data: {0}"
 msgstr "解密数据失败:{0}"
 msgstr "解密数据失败:{0}"
 
 
-#: src/constants/errors/backup.ts:49
+#: src/constants/errors/backup.ts:54
 msgid "Failed to decrypt file: {0}"
 msgid "Failed to decrypt file: {0}"
 msgstr "解密文件失败:{0}"
 msgstr "解密文件失败:{0}"
 
 
-#: src/constants/errors/backup.ts:35
+#: src/constants/errors/backup.ts:37
 msgid "Failed to decrypt Nginx directory: {0}"
 msgid "Failed to decrypt Nginx directory: {0}"
 msgstr "解密 Nginx 目录失败:{0}"
 msgstr "解密 Nginx 目录失败:{0}"
 
 
-#: src/constants/errors/backup.ts:34
+#: src/constants/errors/backup.ts:36
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgstr "解密 Nginx UI 目录失败:{0}"
 msgstr "解密 Nginx UI 目录失败:{0}"
 
 
@@ -1183,11 +1191,11 @@ msgstr "禁用失败 %{msg}"
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "启用失败 %{msg}"
 msgstr "启用失败 %{msg}"
 
 
-#: src/constants/errors/backup.ts:23
+#: src/constants/errors/backup.ts:25
 msgid "Failed to encrypt data: {0}"
 msgid "Failed to encrypt data: {0}"
 msgstr "加密数据失败:{0}"
 msgstr "加密数据失败:{0}"
 
 
-#: src/constants/errors/backup.ts:21
+#: src/constants/errors/backup.ts:23
 msgid "Failed to encrypt file: {0}"
 msgid "Failed to encrypt file: {0}"
 msgstr "加密文件失败:{0}"
 msgstr "加密文件失败:{0}"
 
 
@@ -1199,7 +1207,11 @@ msgstr "加密 Nginx 目录失败:{0}"
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgstr "加密 Nginx UI 目录失败:{0}"
 msgstr "加密 Nginx UI 目录失败:{0}"
 
 
-#: src/constants/errors/backup.ts:33
+#: src/constants/errors/backup.ts:52
+msgid "Failed to evaluate symbolic links: {0}"
+msgstr "符号链接解析失败:{0}"
+
+#: src/constants/errors/backup.ts:35
 msgid "Failed to extract archive: {0}"
 msgid "Failed to extract archive: {0}"
 msgstr "解压缩失败:{0}"
 msgstr "解压缩失败:{0}"
 
 
@@ -1215,15 +1227,15 @@ msgstr "生成初始化向量失败:{0}"
 msgid "Failed to get certificate information"
 msgid "Failed to get certificate information"
 msgstr "获取证书信息失败"
 msgstr "获取证书信息失败"
 
 
-#: src/constants/errors/backup.ts:28
+#: src/constants/errors/backup.ts:30
 msgid "Failed to open source file: {0}"
 msgid "Failed to open source file: {0}"
 msgstr "打开源文件失败:{0}"
 msgstr "打开源文件失败:{0}"
 
 
-#: src/constants/errors/backup.ts:47
+#: src/constants/errors/backup.ts:49
 msgid "Failed to open zip entry: {0}"
 msgid "Failed to open zip entry: {0}"
 msgstr "打开 zip 条目失败:{0}"
 msgstr "打开 zip 条目失败:{0}"
 
 
-#: src/constants/errors/backup.ts:43
+#: src/constants/errors/backup.ts:45
 msgid "Failed to open zip file: {0}"
 msgid "Failed to open zip file: {0}"
 msgstr "打开压缩文件失败:{0}"
 msgstr "打开压缩文件失败:{0}"
 
 
@@ -1231,15 +1243,15 @@ msgstr "打开压缩文件失败:{0}"
 msgid "Failed to parse nginx.conf"
 msgid "Failed to parse nginx.conf"
 msgstr "解析 nginx.conf 失败"
 msgstr "解析 nginx.conf 失败"
 
 
-#: src/constants/errors/backup.ts:48
+#: src/constants/errors/backup.ts:53
 msgid "Failed to read encrypted file: {0}"
 msgid "Failed to read encrypted file: {0}"
 msgstr "读取加密文件失败:{0}"
 msgstr "读取加密文件失败:{0}"
 
 
-#: src/constants/errors/backup.ts:20
+#: src/constants/errors/backup.ts:22
 msgid "Failed to read file: {0}"
 msgid "Failed to read file: {0}"
 msgstr "读取文件失败:{0}"
 msgstr "读取文件失败:{0}"
 
 
-#: src/constants/errors/backup.ts:51
+#: src/constants/errors/backup.ts:56
 msgid "Failed to read hash info file: {0}"
 msgid "Failed to read hash info file: {0}"
 msgstr "读取哈希信息文件失败:{0}"
 msgstr "读取哈希信息文件失败:{0}"
 
 
@@ -1247,11 +1259,15 @@ msgstr "读取哈希信息文件失败:{0}"
 msgid "Failed to read nginx.conf"
 msgid "Failed to read nginx.conf"
 msgstr "读取 nginx.conf 失败"
 msgstr "读取 nginx.conf 失败"
 
 
-#: src/constants/errors/backup.ts:37
+#: src/constants/errors/backup.ts:21
+msgid "Failed to read symlink: {0}"
+msgstr "读取符号链接失败:{0}"
+
+#: src/constants/errors/backup.ts:39
 msgid "Failed to restore Nginx configs: {0}"
 msgid "Failed to restore Nginx configs: {0}"
 msgstr "恢复 Nginx 配置失败:{0}"
 msgstr "恢复 Nginx 配置失败:{0}"
 
 
-#: src/constants/errors/backup.ts:38
+#: src/constants/errors/backup.ts:40
 msgid "Failed to restore Nginx UI files: {0}"
 msgid "Failed to restore Nginx UI files: {0}"
 msgstr "恢复 Nginx UI 文件失败:{0}"
 msgstr "恢复 Nginx UI 文件失败:{0}"
 
 
@@ -1260,19 +1276,19 @@ msgstr "恢复 Nginx UI 文件失败:{0}"
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr "保存失败,在配置中检测到语法错误。"
 msgstr "保存失败,在配置中检测到语法错误。"
 
 
-#: src/constants/errors/backup.ts:36
+#: src/constants/errors/backup.ts:38
 msgid "Failed to verify hashes: {0}"
 msgid "Failed to verify hashes: {0}"
 msgstr "验证哈希值失败:{0}"
 msgstr "验证哈希值失败:{0}"
 
 
-#: src/constants/errors/backup.ts:50
+#: src/constants/errors/backup.ts:55
 msgid "Failed to write decrypted file: {0}"
 msgid "Failed to write decrypted file: {0}"
 msgstr "写入解密文件失败:{0}"
 msgstr "写入解密文件失败:{0}"
 
 
-#: src/constants/errors/backup.ts:22
+#: src/constants/errors/backup.ts:24
 msgid "Failed to write encrypted file: {0}"
 msgid "Failed to write encrypted file: {0}"
 msgstr "写入加密文件失败:{0}"
 msgstr "写入加密文件失败:{0}"
 
 
-#: src/constants/errors/backup.ts:31
+#: src/constants/errors/backup.ts:33
 msgid "Failed to write to zip buffer: {0}"
 msgid "Failed to write to zip buffer: {0}"
 msgstr "写入 zip 缓冲区失败:{0}"
 msgstr "写入 zip 缓冲区失败:{0}"
 
 
@@ -1364,7 +1380,7 @@ msgstr "正在获取证书,请稍等..."
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr "Github代理"
 msgstr "Github代理"
 
 
-#: src/constants/errors/backup.ts:54
+#: src/constants/errors/backup.ts:59
 msgid "Hash verification failed: file integrity compromised"
 msgid "Hash verification failed: file integrity compromised"
 msgstr "哈希验证失败:文件完整性受损"
 msgstr "哈希验证失败:文件完整性受损"
 
 
@@ -1448,14 +1464,24 @@ msgstr "输入应用程序中的代码:"
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr "输入恢复代码:"
 msgstr "输入恢复代码:"
 
 
-#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:134
+#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:168
 msgid "Install"
 msgid "Install"
 msgstr "安装"
 msgstr "安装"
 
 
-#: src/views/other/Install.vue:67
+#: src/views/other/Install.vue:89
 msgid "Install successfully"
 msgid "Install successfully"
 msgstr "安装成功"
 msgstr "安装成功"
 
 
+#: src/constants/errors/system.ts:3
+msgid "Installation is not allowed after 10 minutes of system startup"
+msgstr "系统启动 10 分钟后不允许安装"
+
+#: src/views/other/Install.vue:113
+msgid ""
+"Installation is not allowed after 10 minutes of system startup, please "
+"restart the Nginx UI."
+msgstr "系统启动 10 分钟后不允许安装,请重启 Nginx UI。"
+
 #: src/views/preference/LogrotateSettings.vue:25
 #: src/views/preference/LogrotateSettings.vue:25
 msgid "Interval"
 msgid "Interval"
 msgstr "间隔"
 msgstr "间隔"
@@ -1464,11 +1490,11 @@ msgstr "间隔"
 msgid "Invalid"
 msgid "Invalid"
 msgstr "无效的"
 msgstr "无效的"
 
 
-#: src/constants/errors/backup.ts:42
+#: src/constants/errors/backup.ts:44
 msgid "Invalid AES IV format: {0}"
 msgid "Invalid AES IV format: {0}"
 msgstr "AES IV 格式无效:{0}"
 msgstr "AES IV 格式无效:{0}"
 
 
-#: src/constants/errors/backup.ts:41
+#: src/constants/errors/backup.ts:43
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "AES 密钥格式无效:{0}"
 msgstr "AES 密钥格式无效:{0}"
 
 
@@ -1476,6 +1502,10 @@ msgstr "AES 密钥格式无效:{0}"
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "无效文件对象"
 msgstr "无效文件对象"
 
 
+#: src/constants/errors/backup.ts:51
+msgid "Invalid file path: {0}"
+msgstr "文件路径无效:{0}"
+
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/ConfigEditor.vue:250
 #: src/views/config/ConfigEditor.vue:250
 msgid "Invalid filename"
 msgid "Invalid filename"
@@ -1489,7 +1519,7 @@ msgstr "无效文件夹名"
 msgid "Invalid otp code"
 msgid "Invalid otp code"
 msgstr "无效的 OTP 代码"
 msgstr "无效的 OTP 代码"
 
 
-#: src/constants/errors/backup.ts:25
+#: src/constants/errors/backup.ts:27
 msgid "Invalid padding in decrypted data"
 msgid "Invalid padding in decrypted data"
 msgstr "解密数据中的无效填充"
 msgstr "解密数据中的无效填充"
 
 
@@ -1505,7 +1535,7 @@ msgstr "无效的恢复代码"
 msgid "Invalid request format"
 msgid "Invalid request format"
 msgstr "无效的请求格式"
 msgstr "无效的请求格式"
 
 
-#: src/constants/errors/backup.ts:40
+#: src/constants/errors/backup.ts:42
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "安全令牌格式无效"
 msgstr "安全令牌格式无效"
 
 
@@ -1813,7 +1843,7 @@ msgstr "Nginx Conf 中未引用 sites-enabled"
 msgid "Nginx conf not include stream-enabled"
 msgid "Nginx conf not include stream-enabled"
 msgstr "Nginx Conf 中未引用 stream-enabled"
 msgstr "Nginx Conf 中未引用 stream-enabled"
 
 
-#: src/constants/errors/backup.ts:18
+#: src/constants/errors/backup.ts:19
 msgid "Nginx config directory is not set"
 msgid "Nginx config directory is not set"
 msgstr "未设置 Nginx 配置目录"
 msgstr "未设置 Nginx 配置目录"
 
 
@@ -1870,6 +1900,10 @@ msgstr "Nginx 重启命令"
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Nginx 重启成功"
 msgstr "Nginx 重启成功"
 
 
+#: src/constants/errors/system.ts:2
+msgid "Nginx UI already installed"
+msgstr "Nginx UI 已安装"
+
 #: src/views/system/Backup/SystemRestore.vue:88
 #: src/views/system/Backup/SystemRestore.vue:88
 msgid "Nginx UI configuration has been restored"
 msgid "Nginx UI configuration has been restored"
 msgstr "Nginx 用户界面配置已恢复"
 msgstr "Nginx 用户界面配置已恢复"
@@ -2058,7 +2092,7 @@ msgstr ""
 msgid "Password"
 msgid "Password"
 msgstr "密码"
 msgstr "密码"
 
 
-#: src/views/other/Install.vue:108
+#: src/views/other/Install.vue:141
 msgid "Password (*)"
 msgid "Password (*)"
 msgstr "密码 (*)"
 msgstr "密码 (*)"
 
 
@@ -2066,7 +2100,7 @@ msgstr "密码 (*)"
 msgid "Password incorrect"
 msgid "Password incorrect"
 msgstr "用户名和密码错误"
 msgstr "用户名和密码错误"
 
 
-#: src/views/other/Install.vue:48
+#: src/views/other/Install.vue:70
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr "密码长度不能超过 20 个字符"
 msgstr "密码长度不能超过 20 个字符"
 
 
@@ -2164,15 +2198,15 @@ msgid ""
 "configuration."
 "configuration."
 msgstr "请输入名称,这将作为新配置的文件名。"
 msgstr "请输入名称,这将作为新配置的文件名。"
 
 
-#: src/views/other/Install.vue:32
+#: src/views/other/Install.vue:54
 msgid "Please input your E-mail!"
 msgid "Please input your E-mail!"
 msgstr "请输入您的邮箱!"
 msgstr "请输入您的邮箱!"
 
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
+#: src/views/other/Install.vue:66 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgid "Please input your password!"
 msgstr "请输入您的密码!"
 msgstr "请输入您的密码!"
 
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
+#: src/views/other/Install.vue:60 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgid "Please input your username!"
 msgstr "请输入您的用户名!"
 msgstr "请输入您的用户名!"
 
 
@@ -2884,7 +2918,7 @@ msgstr ""
 "域名证书将在 30 分钟内接受检查,如果距离上次签发证书的时间超过 1 周或您在设置"
 "域名证书将在 30 分钟内接受检查,如果距离上次签发证书的时间超过 1 周或您在设置"
 "中设定的时间,证书将被更新。"
 "中设定的时间,证书将被更新。"
 
 
-#: src/views/other/Install.vue:54
+#: src/views/other/Install.vue:76
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "文件名不能包含以下字符: %{c}"
 msgstr "文件名不能包含以下字符: %{c}"
 
 
@@ -3188,7 +3222,7 @@ msgstr "用户未启用 OTP 作为 2FA"
 msgid "Username"
 msgid "Username"
 msgstr "用户名"
 msgstr "用户名"
 
 
-#: src/views/other/Install.vue:98
+#: src/views/other/Install.vue:131
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "用户名 (*)"
 msgstr "用户名 (*)"
 
 

+ 93 - 53
app/src/language/zh_TW/app.po

@@ -281,7 +281,7 @@ msgstr "返回"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgid "Backup file integrity check failed, it may have been tampered with"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:39
+#: src/constants/errors/backup.ts:41
 #, fuzzy
 #, fuzzy
 msgid "Backup file not found: {0}"
 msgid "Backup file not found: {0}"
 msgstr "站點未找到"
 msgstr "站點未找到"
@@ -505,7 +505,7 @@ msgstr "命令"
 msgid "Comments"
 msgid "Comments"
 msgstr "備註"
 msgstr "備註"
 
 
-#: src/constants/errors/backup.ts:13
+#: src/constants/errors/backup.ts:14
 #, fuzzy
 #, fuzzy
 msgid "Config path is empty"
 msgid "Config path is empty"
 msgstr "明文為空"
 msgstr "明文為空"
@@ -653,7 +653,7 @@ msgstr "自訂顯示在環境指示器中的本地節點名稱。"
 msgid "Dashboard"
 msgid "Dashboard"
 msgstr "儀表板"
 msgstr "儀表板"
 
 
-#: src/views/other/Install.vue:119
+#: src/views/other/Install.vue:152
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "資料庫 (可選,預設: database)"
 msgstr "資料庫 (可選,預設: database)"
 
 
@@ -950,7 +950,7 @@ msgstr "編輯 Stream"
 msgid "Email"
 msgid "Email"
 msgstr "電子郵件"
 msgstr "電子郵件"
 
 
-#: src/views/other/Install.vue:88
+#: src/views/other/Install.vue:121
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "電子郵件 (*)"
 msgstr "電子郵件 (*)"
 
 
@@ -1091,37 +1091,42 @@ msgstr "讀取 nginx.conf 失敗"
 msgid "Failed to backup Nginx UI files: {0}"
 msgid "Failed to backup Nginx UI files: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:17
+#: src/constants/errors/backup.ts:18
 #, fuzzy
 #, fuzzy
 msgid "Failed to calculate hash: {0}"
 msgid "Failed to calculate hash: {0}"
 msgstr "創建備份失敗"
 msgstr "創建備份失敗"
 
 
-#: src/constants/errors/backup.ts:53
+#: src/constants/errors/backup.ts:58
 msgid "Failed to calculate Nginx hash: {0}"
 msgid "Failed to calculate Nginx hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:52
+#: src/constants/errors/backup.ts:57
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgid "Failed to calculate Nginx UI hash: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:14
+#: src/constants/errors/backup.ts:13
+#, fuzzy
+msgid "Failed to cleanup temporary directory: {0}"
+msgstr "創建備份失敗"
+
+#: src/constants/errors/backup.ts:15
 msgid "Failed to copy config file: {0}"
 msgid "Failed to copy config file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:15
+#: src/constants/errors/backup.ts:16
 msgid "Failed to copy database directory: {0}"
 msgid "Failed to copy database directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:16
+#: src/constants/errors/backup.ts:17
 #, fuzzy
 #, fuzzy
 msgid "Failed to copy database file: {0}"
 msgid "Failed to copy database file: {0}"
 msgstr "停用 %{msg} 失敗"
 msgstr "停用 %{msg} 失敗"
 
 
-#: src/constants/errors/backup.ts:30
+#: src/constants/errors/backup.ts:32
 msgid "Failed to copy file content: {0}"
 msgid "Failed to copy file content: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:19
+#: src/constants/errors/backup.ts:20
 msgid "Failed to copy Nginx config directory: {0}"
 msgid "Failed to copy Nginx config directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1134,12 +1139,12 @@ msgstr "創建備份失敗"
 msgid "Failed to create backup file: {0}"
 msgid "Failed to create backup file: {0}"
 msgstr "創建備份失敗"
 msgstr "創建備份失敗"
 
 
-#: src/constants/errors/backup.ts:44
+#: src/constants/errors/backup.ts:46
 #, fuzzy
 #, fuzzy
 msgid "Failed to create directory: {0}"
 msgid "Failed to create directory: {0}"
 msgstr "創建備份失敗"
 msgstr "創建備份失敗"
 
 
-#: src/constants/errors/backup.ts:46
+#: src/constants/errors/backup.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Failed to create file: {0}"
 msgid "Failed to create file: {0}"
 msgstr "創建備份失敗"
 msgstr "創建備份失敗"
@@ -1149,15 +1154,20 @@ msgstr "創建備份失敗"
 msgid "Failed to create hash info file: {0}"
 msgid "Failed to create hash info file: {0}"
 msgstr "創建備份失敗"
 msgstr "創建備份失敗"
 
 
-#: src/constants/errors/backup.ts:45
+#: src/constants/errors/backup.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Failed to create parent directory: {0}"
 msgid "Failed to create parent directory: {0}"
 msgstr "創建備份失敗"
 msgstr "創建備份失敗"
 
 
-#: src/constants/errors/backup.ts:32
+#: src/constants/errors/backup.ts:34
 msgid "Failed to create restore directory: {0}"
 msgid "Failed to create restore directory: {0}"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/backup.ts:50
+#, fuzzy
+msgid "Failed to create symbolic link: {0}"
+msgstr "創建備份失敗"
+
 #: src/constants/errors/backup.ts:2
 #: src/constants/errors/backup.ts:2
 #, fuzzy
 #, fuzzy
 msgid "Failed to create temporary directory"
 msgid "Failed to create temporary directory"
@@ -1173,36 +1183,36 @@ msgstr "創建備份失敗"
 msgid "Failed to create zip archive: {0}"
 msgid "Failed to create zip archive: {0}"
 msgstr "創建備份失敗"
 msgstr "創建備份失敗"
 
 
-#: src/constants/errors/backup.ts:27
+#: src/constants/errors/backup.ts:29
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip entry: {0}"
 msgid "Failed to create zip entry: {0}"
 msgstr "創建備份失敗"
 msgstr "創建備份失敗"
 
 
-#: src/constants/errors/backup.ts:26
+#: src/constants/errors/backup.ts:28
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip file: {0}"
 msgid "Failed to create zip file: {0}"
 msgstr "創建備份失敗"
 msgstr "創建備份失敗"
 
 
-#: src/constants/errors/backup.ts:29
+#: src/constants/errors/backup.ts:31
 #, fuzzy
 #, fuzzy
 msgid "Failed to create zip header: {0}"
 msgid "Failed to create zip header: {0}"
 msgstr "創建備份失敗"
 msgstr "創建備份失敗"
 
 
-#: src/constants/errors/backup.ts:24
+#: src/constants/errors/backup.ts:26
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt data: {0}"
 msgid "Failed to decrypt data: {0}"
 msgstr "創建備份失敗"
 msgstr "創建備份失敗"
 
 
-#: src/constants/errors/backup.ts:49
+#: src/constants/errors/backup.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Failed to decrypt file: {0}"
 msgid "Failed to decrypt file: {0}"
 msgstr "停用 %{msg} 失敗"
 msgstr "停用 %{msg} 失敗"
 
 
-#: src/constants/errors/backup.ts:35
+#: src/constants/errors/backup.ts:37
 msgid "Failed to decrypt Nginx directory: {0}"
 msgid "Failed to decrypt Nginx directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:34
+#: src/constants/errors/backup.ts:36
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgid "Failed to decrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1220,12 +1230,12 @@ msgstr "停用 %{msg} 失敗"
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "啟用 %{msg} 失敗"
 msgstr "啟用 %{msg} 失敗"
 
 
-#: src/constants/errors/backup.ts:23
+#: src/constants/errors/backup.ts:25
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt data: {0}"
 msgid "Failed to encrypt data: {0}"
 msgstr "啟用 %{msg} 失敗"
 msgstr "啟用 %{msg} 失敗"
 
 
-#: src/constants/errors/backup.ts:21
+#: src/constants/errors/backup.ts:23
 #, fuzzy
 #, fuzzy
 msgid "Failed to encrypt file: {0}"
 msgid "Failed to encrypt file: {0}"
 msgstr "啟用 %{msg} 失敗"
 msgstr "啟用 %{msg} 失敗"
@@ -1238,7 +1248,12 @@ msgstr ""
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgid "Failed to encrypt Nginx UI directory: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:33
+#: src/constants/errors/backup.ts:52
+#, fuzzy
+msgid "Failed to evaluate symbolic links: {0}"
+msgstr "創建備份失敗"
+
+#: src/constants/errors/backup.ts:35
 #, fuzzy
 #, fuzzy
 msgid "Failed to extract archive: {0}"
 msgid "Failed to extract archive: {0}"
 msgstr "啟用 %{msg} 失敗"
 msgstr "啟用 %{msg} 失敗"
@@ -1257,17 +1272,17 @@ msgstr "取得憑證資訊失敗"
 msgid "Failed to get certificate information"
 msgid "Failed to get certificate information"
 msgstr "取得憑證資訊失敗"
 msgstr "取得憑證資訊失敗"
 
 
-#: src/constants/errors/backup.ts:28
+#: src/constants/errors/backup.ts:30
 #, fuzzy
 #, fuzzy
 msgid "Failed to open source file: {0}"
 msgid "Failed to open source file: {0}"
 msgstr "啟用 %{msg} 失敗"
 msgstr "啟用 %{msg} 失敗"
 
 
-#: src/constants/errors/backup.ts:47
+#: src/constants/errors/backup.ts:49
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip entry: {0}"
 msgid "Failed to open zip entry: {0}"
 msgstr "啟用 %{msg} 失敗"
 msgstr "啟用 %{msg} 失敗"
 
 
-#: src/constants/errors/backup.ts:43
+#: src/constants/errors/backup.ts:45
 #, fuzzy
 #, fuzzy
 msgid "Failed to open zip file: {0}"
 msgid "Failed to open zip file: {0}"
 msgstr "啟用 %{msg} 失敗"
 msgstr "啟用 %{msg} 失敗"
@@ -1276,17 +1291,17 @@ msgstr "啟用 %{msg} 失敗"
 msgid "Failed to parse nginx.conf"
 msgid "Failed to parse nginx.conf"
 msgstr "解析 nginx.conf 失敗"
 msgstr "解析 nginx.conf 失敗"
 
 
-#: src/constants/errors/backup.ts:48
+#: src/constants/errors/backup.ts:53
 #, fuzzy
 #, fuzzy
 msgid "Failed to read encrypted file: {0}"
 msgid "Failed to read encrypted file: {0}"
 msgstr "讀取 nginx.conf 失敗"
 msgstr "讀取 nginx.conf 失敗"
 
 
-#: src/constants/errors/backup.ts:20
+#: src/constants/errors/backup.ts:22
 #, fuzzy
 #, fuzzy
 msgid "Failed to read file: {0}"
 msgid "Failed to read file: {0}"
 msgstr "啟用 %{msg} 失敗"
 msgstr "啟用 %{msg} 失敗"
 
 
-#: src/constants/errors/backup.ts:51
+#: src/constants/errors/backup.ts:56
 #, fuzzy
 #, fuzzy
 msgid "Failed to read hash info file: {0}"
 msgid "Failed to read hash info file: {0}"
 msgstr "讀取 nginx.conf 失敗"
 msgstr "讀取 nginx.conf 失敗"
@@ -1295,12 +1310,17 @@ msgstr "讀取 nginx.conf 失敗"
 msgid "Failed to read nginx.conf"
 msgid "Failed to read nginx.conf"
 msgstr "讀取 nginx.conf 失敗"
 msgstr "讀取 nginx.conf 失敗"
 
 
-#: src/constants/errors/backup.ts:37
+#: src/constants/errors/backup.ts:21
+#, fuzzy
+msgid "Failed to read symlink: {0}"
+msgstr "啟用 %{msg} 失敗"
+
+#: src/constants/errors/backup.ts:39
 #, fuzzy
 #, fuzzy
 msgid "Failed to restore Nginx configs: {0}"
 msgid "Failed to restore Nginx configs: {0}"
 msgstr "解析 nginx.conf 失敗"
 msgstr "解析 nginx.conf 失敗"
 
 
-#: src/constants/errors/backup.ts:38
+#: src/constants/errors/backup.ts:40
 #, fuzzy
 #, fuzzy
 msgid "Failed to restore Nginx UI files: {0}"
 msgid "Failed to restore Nginx UI files: {0}"
 msgstr "解析 nginx.conf 失敗"
 msgstr "解析 nginx.conf 失敗"
@@ -1310,20 +1330,20 @@ msgstr "解析 nginx.conf 失敗"
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr "儲存失敗,在設定中檢測到語法錯誤。"
 msgstr "儲存失敗,在設定中檢測到語法錯誤。"
 
 
-#: src/constants/errors/backup.ts:36
+#: src/constants/errors/backup.ts:38
 #, fuzzy
 #, fuzzy
 msgid "Failed to verify hashes: {0}"
 msgid "Failed to verify hashes: {0}"
 msgstr "啟用 %{msg} 失敗"
 msgstr "啟用 %{msg} 失敗"
 
 
-#: src/constants/errors/backup.ts:50
+#: src/constants/errors/backup.ts:55
 msgid "Failed to write decrypted file: {0}"
 msgid "Failed to write decrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:22
+#: src/constants/errors/backup.ts:24
 msgid "Failed to write encrypted file: {0}"
 msgid "Failed to write encrypted file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/backup.ts:31
+#: src/constants/errors/backup.ts:33
 msgid "Failed to write to zip buffer: {0}"
 msgid "Failed to write to zip buffer: {0}"
 msgstr ""
 msgstr ""
 
 
@@ -1415,7 +1435,7 @@ msgstr "正在取得憑證,請稍候..."
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr "Github 代理"
 msgstr "Github 代理"
 
 
-#: src/constants/errors/backup.ts:54
+#: src/constants/errors/backup.ts:59
 msgid "Hash verification failed: file integrity compromised"
 msgid "Hash verification failed: file integrity compromised"
 msgstr ""
 msgstr ""
 
 
@@ -1499,14 +1519,24 @@ msgstr "請輸入應用程式中的代碼:"
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr "輸入恢復碼:"
 msgstr "輸入恢復碼:"
 
 
-#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:134
+#: src/routes/modules/auth.ts:8 src/views/other/Install.vue:168
 msgid "Install"
 msgid "Install"
 msgstr "安裝"
 msgstr "安裝"
 
 
-#: src/views/other/Install.vue:67
+#: src/views/other/Install.vue:89
 msgid "Install successfully"
 msgid "Install successfully"
 msgstr "安裝成功"
 msgstr "安裝成功"
 
 
+#: src/constants/errors/system.ts:3
+msgid "Installation is not allowed after 10 minutes of system startup"
+msgstr ""
+
+#: src/views/other/Install.vue:113
+msgid ""
+"Installation is not allowed after 10 minutes of system startup, please "
+"restart the Nginx UI."
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:25
 #: src/views/preference/LogrotateSettings.vue:25
 msgid "Interval"
 msgid "Interval"
 msgstr "間隔"
 msgstr "間隔"
@@ -1515,12 +1545,12 @@ msgstr "間隔"
 msgid "Invalid"
 msgid "Invalid"
 msgstr "無效"
 msgstr "無效"
 
 
-#: src/constants/errors/backup.ts:42
+#: src/constants/errors/backup.ts:44
 #, fuzzy
 #, fuzzy
 msgid "Invalid AES IV format: {0}"
 msgid "Invalid AES IV format: {0}"
 msgstr "無效的請求格式"
 msgstr "無效的請求格式"
 
 
-#: src/constants/errors/backup.ts:41
+#: src/constants/errors/backup.ts:43
 #, fuzzy
 #, fuzzy
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "無效的請求格式"
 msgstr "無效的請求格式"
@@ -1530,6 +1560,11 @@ msgstr "無效的請求格式"
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "無效的檔案名"
 msgstr "無效的檔案名"
 
 
+#: src/constants/errors/backup.ts:51
+#, fuzzy
+msgid "Invalid file path: {0}"
+msgstr "無效的請求格式"
+
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/components/Rename.vue:64
 #: src/views/config/ConfigEditor.vue:250
 #: src/views/config/ConfigEditor.vue:250
 msgid "Invalid filename"
 msgid "Invalid filename"
@@ -1543,7 +1578,7 @@ msgstr "無效的資料夾名稱"
 msgid "Invalid otp code"
 msgid "Invalid otp code"
 msgstr "無效的 OTP 代碼"
 msgstr "無效的 OTP 代碼"
 
 
-#: src/constants/errors/backup.ts:25
+#: src/constants/errors/backup.ts:27
 msgid "Invalid padding in decrypted data"
 msgid "Invalid padding in decrypted data"
 msgstr ""
 msgstr ""
 
 
@@ -1559,7 +1594,7 @@ msgstr "無效的恢復碼"
 msgid "Invalid request format"
 msgid "Invalid request format"
 msgstr "無效的請求格式"
 msgstr "無效的請求格式"
 
 
-#: src/constants/errors/backup.ts:40
+#: src/constants/errors/backup.ts:42
 #, fuzzy
 #, fuzzy
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "無效的請求格式"
 msgstr "無效的請求格式"
@@ -1867,7 +1902,7 @@ msgstr "Nginx 配置檔未包含 sites-enabled"
 msgid "Nginx conf not include stream-enabled"
 msgid "Nginx conf not include stream-enabled"
 msgstr "Nginx 配置檔未包含 stream-enabled"
 msgstr "Nginx 配置檔未包含 stream-enabled"
 
 
-#: src/constants/errors/backup.ts:18
+#: src/constants/errors/backup.ts:19
 #, fuzzy
 #, fuzzy
 msgid "Nginx config directory is not set"
 msgid "Nginx config directory is not set"
 msgstr "Nginx 日誌目錄白名單"
 msgstr "Nginx 日誌目錄白名單"
@@ -1926,6 +1961,11 @@ msgstr "Nginx 重啟指令"
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Nginx 重啟成功"
 msgstr "Nginx 重啟成功"
 
 
+#: src/constants/errors/system.ts:2
+#, fuzzy
+msgid "Nginx UI already installed"
+msgstr "此值已被使用"
+
 #: src/views/system/Backup/SystemRestore.vue:88
 #: src/views/system/Backup/SystemRestore.vue:88
 #, fuzzy
 #, fuzzy
 msgid "Nginx UI configuration has been restored"
 msgid "Nginx UI configuration has been restored"
@@ -2116,7 +2156,7 @@ msgstr ""
 msgid "Password"
 msgid "Password"
 msgstr "密碼"
 msgstr "密碼"
 
 
-#: src/views/other/Install.vue:108
+#: src/views/other/Install.vue:141
 msgid "Password (*)"
 msgid "Password (*)"
 msgstr "密碼 (*)"
 msgstr "密碼 (*)"
 
 
@@ -2124,7 +2164,7 @@ msgstr "密碼 (*)"
 msgid "Password incorrect"
 msgid "Password incorrect"
 msgstr "密碼錯誤"
 msgstr "密碼錯誤"
 
 
-#: src/views/other/Install.vue:48
+#: src/views/other/Install.vue:70
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr "密碼長度不能超過 20 個字元"
 msgstr "密碼長度不能超過 20 個字元"
 
 
@@ -2223,15 +2263,15 @@ msgid ""
 "configuration."
 "configuration."
 msgstr "請輸入名稱,此名稱將用作新配置的檔案名稱。"
 msgstr "請輸入名稱,此名稱將用作新配置的檔案名稱。"
 
 
-#: src/views/other/Install.vue:32
+#: src/views/other/Install.vue:54
 msgid "Please input your E-mail!"
 msgid "Please input your E-mail!"
 msgstr "請輸入您的電子郵件!"
 msgstr "請輸入您的電子郵件!"
 
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
+#: src/views/other/Install.vue:66 src/views/other/Login.vue:47
 msgid "Please input your password!"
 msgid "Please input your password!"
 msgstr "請輸入您的密碼!"
 msgstr "請輸入您的密碼!"
 
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
+#: src/views/other/Install.vue:60 src/views/other/Login.vue:41
 msgid "Please input your username!"
 msgid "Please input your username!"
 msgstr "請輸入您的使用者名稱!"
 msgstr "請輸入您的使用者名稱!"
 
 
@@ -2969,7 +3009,7 @@ msgstr ""
 "網域憑證將在 30 分鐘內接受檢查,如果自上次簽發以來已超過 1 週或您在設置中設定"
 "網域憑證將在 30 分鐘內接受檢查,如果自上次簽發以來已超過 1 週或您在設置中設定"
 "的時間,憑證將會自動更新。"
 "的時間,憑證將會自動更新。"
 
 
-#: src/views/other/Install.vue:54
+#: src/views/other/Install.vue:76
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "檔名不能包含以下字元: %{c}"
 msgstr "檔名不能包含以下字元: %{c}"
 
 
@@ -3274,7 +3314,7 @@ msgstr "使用者未啟用 OTP 作為雙重身份驗證 (2FA)"
 msgid "Username"
 msgid "Username"
 msgstr "使用者名稱"
 msgstr "使用者名稱"
 
 
-#: src/views/other/Install.vue:98
+#: src/views/other/Install.vue:131
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "使用者名稱 (*)"
 msgstr "使用者名稱 (*)"
 
 

+ 13 - 10
app/src/lib/http/index.ts

@@ -50,27 +50,30 @@ const instance = axios.create({
 })
 })
 
 
 const http = {
 const http = {
-  get(url: string, config: HttpConfig = {}) {
+  // eslint-disable-next-line ts/no-explicit-any
+  get<T = any>(url: string, config: HttpConfig = {}) {
     // eslint-disable-next-line ts/no-explicit-any
     // eslint-disable-next-line ts/no-explicit-any
-    return instance.get<any, any>(url, config)
+    return instance.get<any, T>(url, config)
   },
   },
   // eslint-disable-next-line ts/no-explicit-any
   // eslint-disable-next-line ts/no-explicit-any
-  post(url: string, data: any = undefined, config: HttpConfig = {}) {
+  post<T = any>(url: string, data: any = undefined, config: HttpConfig = {}) {
     // eslint-disable-next-line ts/no-explicit-any
     // eslint-disable-next-line ts/no-explicit-any
-    return instance.post<any, any>(url, data, config)
+    return instance.post<any, T>(url, data, config)
   },
   },
   // eslint-disable-next-line ts/no-explicit-any
   // eslint-disable-next-line ts/no-explicit-any
-  put(url: string, data: any = undefined, config: HttpConfig = {}) {
+  put<T = any>(url: string, data: any = undefined, config: HttpConfig = {}) {
     // eslint-disable-next-line ts/no-explicit-any
     // eslint-disable-next-line ts/no-explicit-any
-    return instance.put<any, any>(url, data, config)
+    return instance.put<any, T>(url, data, config)
   },
   },
-  delete(url: string, config: HttpConfig = {}) {
+  // eslint-disable-next-line ts/no-explicit-any
+  delete<T = any>(url: string, config: HttpConfig = {}) {
     // eslint-disable-next-line ts/no-explicit-any
     // eslint-disable-next-line ts/no-explicit-any
-    return instance.delete<any, any>(url, config)
+    return instance.delete<any, T>(url, config)
   },
   },
-  patch(url: string, config: HttpConfig = {}) {
+  // eslint-disable-next-line ts/no-explicit-any
+  patch<T = any>(url: string, config: HttpConfig = {}) {
     // eslint-disable-next-line ts/no-explicit-any
     // eslint-disable-next-line ts/no-explicit-any
-    return instance.patch<any, any>(url, config)
+    return instance.patch<any, T>(url, config)
   },
   },
 }
 }
 
 

+ 39 - 5
app/src/views/other/Install.vue

@@ -1,20 +1,42 @@
 <script setup lang="ts">
 <script setup lang="ts">
+import type { InstallLockResponse } from '@/api/install'
 import install from '@/api/install'
 import install from '@/api/install'
 import SetLanguage from '@/components/SetLanguage/SetLanguage.vue'
 import SetLanguage from '@/components/SetLanguage/SetLanguage.vue'
 import SwitchAppearance from '@/components/SwitchAppearance/SwitchAppearance.vue'
 import SwitchAppearance from '@/components/SwitchAppearance/SwitchAppearance.vue'
 import { DatabaseOutlined, LockOutlined, MailOutlined, UserOutlined } from '@ant-design/icons-vue'
 import { DatabaseOutlined, LockOutlined, MailOutlined, UserOutlined } from '@ant-design/icons-vue'
 
 
 import { Form, message } from 'ant-design-vue'
 import { Form, message } from 'ant-design-vue'
-import { useRouter } from 'vue-router'
 
 
 const thisYear = new Date().getFullYear()
 const thisYear = new Date().getFullYear()
 const loading = ref(false)
 const loading = ref(false)
+const installTimeout = ref(false)
 
 
 const router = useRouter()
 const router = useRouter()
 
 
-install.get_lock().then(async (r: { lock: boolean }) => {
-  if (r.lock)
-    await router.push('/login')
+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({
 const modelRef = reactive({
@@ -66,6 +88,10 @@ function onSubmit() {
     install.install_nginx_ui(modelRef).then(async () => {
     install.install_nginx_ui(modelRef).then(async () => {
       message.success($gettext('Install successfully'))
       message.success($gettext('Install successfully'))
       await router.push('/login')
       await router.push('/login')
+    }).catch(error => {
+      if (error && error.code === 40308) {
+        installTimeout.value = true
+      }
     }).finally(() => {
     }).finally(() => {
       loading.value = false
       loading.value = false
     })
     })
@@ -81,7 +107,14 @@ function onSubmit() {
           <div class="project-title">
           <div class="project-title">
             <h1>Nginx UI</h1>
             <h1>Nginx UI</h1>
           </div>
           </div>
-          <AForm id="components-form-install">
+          <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;"
+          />
+          <AForm v-else id="components-form-install">
             <AFormItem v-bind="validateInfos.email">
             <AFormItem v-bind="validateInfos.email">
               <AInput
               <AInput
                 v-model:value="modelRef.email"
                 v-model:value="modelRef.email"
@@ -129,6 +162,7 @@ function onSubmit() {
                 block
                 block
                 html-type="submit"
                 html-type="submit"
                 :loading="loading"
                 :loading="loading"
+                :disabled="installTimeout"
                 @click="onSubmit"
                 @click="onSubmit"
               >
               >
                 {{ $gettext('Install') }}
                 {{ $gettext('Install') }}

+ 2 - 1
internal/system/errors.go

@@ -5,5 +5,6 @@ import "github.com/uozi-tech/cosy"
 // System error definitions
 // System error definitions
 var (
 var (
 	e                 = cosy.NewErrorScope("system")
 	e                 = cosy.NewErrorScope("system")
-	ErrInstallTimeout = e.New(40308, "installation is not allowed after 10 minutes of system startup")
+	ErrInstalled      = e.New(40301, "Nginx UI already installed")
+	ErrInstallTimeout = e.New(40302, "installation is not allowed after 10 minutes of system startup")
 )
 )