浏览代码

feat: implement user profile management

Jacky 2 月之前
父节点
当前提交
0808eb09c3

+ 74 - 0
api/user/current_user.go

@@ -0,0 +1,74 @@
+package user
+
+import (
+	"net/http"
+
+	"github.com/0xJacky/Nginx-UI/api"
+	"github.com/0xJacky/Nginx-UI/model"
+	"github.com/gin-gonic/gin"
+	"github.com/uozi-tech/cosy"
+	"golang.org/x/crypto/bcrypt"
+)
+
+func GetCurrentUser(c *gin.Context) {
+	user := api.CurrentUser(c)
+	c.JSON(http.StatusOK, user)
+}
+
+func UpdateCurrentUser(c *gin.Context) {
+	cosy.Core[model.User](c).
+		SetValidRules(gin.H{
+			"name": "required",
+		}).
+		Custom(func(c *cosy.Ctx[model.User]) {
+			user := api.CurrentUser(c.Context)
+			user.Name = c.Model.Name
+
+			db := cosy.UseDB()
+			err := db.Where("id = ?", user.ID).Updates(user).Error
+			if err != nil {
+				cosy.ErrHandler(c.Context, err)
+				return
+			}
+
+			c.JSON(http.StatusOK, user)
+		})
+}
+
+func UpdateCurrentUserPassword(c *gin.Context) {
+	var json struct {
+		OldPassword string `json:"old_password" binding:"required"`
+		NewPassword string `json:"new_password" binding:"required"`
+	}
+
+	if !cosy.BindAndValid(c, &json) {
+		return
+	}
+
+	user := api.CurrentUser(c)
+	if err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(json.OldPassword)); err != nil {
+		cosy.ErrHandler(c, err)
+		return
+	}
+
+	user.Password = json.NewPassword
+
+	pwdBytes, err := bcrypt.GenerateFromPassword([]byte(user.Password), bcrypt.DefaultCost)
+	if err != nil {
+		cosy.ErrHandler(c, err)
+		return
+	}
+
+	db := cosy.UseDB()
+	err = db.Where("id = ?", user.ID).Updates(&model.User{
+		Password: string(pwdBytes),
+	}).Error
+	if err != nil {
+		cosy.ErrHandler(c, err)
+		return
+	}
+
+	c.JSON(http.StatusOK, gin.H{
+		"message": "ok",
+	})
+}

+ 4 - 0
api/user/router.go

@@ -42,4 +42,8 @@ func InitUserRouter(r *gin.RouterGroup) {
 		o.GET("/recovery_codes", ViewRecoveryCodes)
 		o.GET("/recovery_codes", ViewRecoveryCodes)
 		o.GET("/recovery_codes_generate", GenerateRecoveryCodes)
 		o.GET("/recovery_codes_generate", GenerateRecoveryCodes)
 	}
 	}
+
+	r.GET("/user", GetCurrentUser)
+	r.POST("/user", middleware.RequireSecureSession(), UpdateCurrentUser)
+	r.POST("/user/password", middleware.RequireSecureSession(), UpdateCurrentUserPassword)
 }
 }

+ 12 - 2
app/src/api/user.ts

@@ -1,5 +1,5 @@
 import type { ModelBase } from '@/api/curd'
 import type { ModelBase } from '@/api/curd'
-import { useCurdApi } from '@uozi-admin/request'
+import { extendCurdApi, http, useCurdApi } from '@uozi-admin/request'
 
 
 export interface User extends ModelBase {
 export interface User extends ModelBase {
   name: string
   name: string
@@ -8,6 +8,16 @@ export interface User extends ModelBase {
   status: boolean
   status: boolean
 }
 }
 
 
-const user = useCurdApi<User>('/users')
+const user = extendCurdApi(useCurdApi<User>('/users'), {
+  getCurrentUser: () => {
+    return http.get('/user')
+  },
+  updateCurrentUser: (data: User) => {
+    return http.post('/user', data)
+  },
+  updateCurrentUserPassword: (data: { old_password: string, new_password: string }) => {
+    return http.post('/user/password', data)
+  },
+})
 
 
 export default user
 export default user

+ 127 - 85
app/src/language/ar/app.po

@@ -103,7 +103,7 @@ msgstr "[Nginx UI] كتابة الشهادة على القرص"
 msgid "2FA"
 msgid "2FA"
 msgstr "المصادقة الثنائية"
 msgstr "المصادقة الثنائية"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:69
+#: src/views/user/UserProfile.vue:151
 msgid "2FA Settings"
 msgid "2FA Settings"
 msgstr "إعدادات المصادقة الثنائية"
 msgstr "إعدادات المصادقة الثنائية"
 
 
@@ -129,8 +129,7 @@ msgstr "سجلات الدخول"
 msgid "ACME User"
 msgid "ACME User"
 msgstr "مستخدم ACME"
 msgstr "مستخدم ACME"
 
 
-#: src/views/notification/notificationColumns.tsx:66
-#: src/views/preference/tabs/AuthSettings.vue:29
+#: src/views/preference/tabs/AuthSettings.vue:26
 msgid "Action"
 msgid "Action"
 msgstr "إجراء"
 msgstr "إجراء"
 
 
@@ -141,9 +140,9 @@ msgstr "إجراء"
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/nginx_log/NginxLogList.vue:52
 #: src/views/nginx_log/NginxLogList.vue:52
+#: src/views/notification/notificationColumns.tsx:72
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
-#: src/views/site/site_list/columns.tsx:129
-#: src/views/stream/columns.tsx:64
+#: src/views/site/site_list/columns.tsx:129 src/views/stream/columns.tsx:64
 #: src/views/user/userColumns.tsx:58
 #: src/views/user/userColumns.tsx:58
 msgid "Actions"
 msgid "Actions"
 msgstr "الإجراءات"
 msgstr "الإجراءات"
@@ -158,10 +157,10 @@ msgid "Actual worker to configured ratio"
 msgstr "النسبة الفعلية للعامل إلى المُهيأ"
 msgstr "النسبة الفعلية للعامل إلى المُهيأ"
 
 
 #: src/components/NgxConfigEditor/NgxServer.vue:112
 #: src/components/NgxConfigEditor/NgxServer.vue:112
-#: src/components/NgxConfigEditor/NgxUpstream.vue:155 src/language/curd.ts:19
+#: src/components/NgxConfigEditor/NgxUpstream.vue:159 src/language/curd.ts:19
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
-#: src/views/stream/StreamList.vue:120
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "إضافة"
 msgstr "إضافة"
 
 
@@ -188,7 +187,7 @@ msgstr "أضف مكان"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "أضف موقع"
 msgstr "أضف موقع"
 
 
-#: src/views/stream/StreamList.vue:173
+#: src/views/stream/StreamList.vue:174
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "أضف Stream"
 msgstr "أضف Stream"
 
 
@@ -246,7 +245,7 @@ msgstr "التطبيق"
 msgid "Arch"
 msgid "Arch"
 msgstr "\"أرك\""
 msgstr "\"أرك\""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:161
+#: src/views/preference/tabs/AuthSettings.vue:130
 msgid "Are you sure to delete this banned IP immediately?"
 msgid "Are you sure to delete this banned IP immediately?"
 msgstr "هل أنت متأكد من حذف عنوان IP المحظور هذا على الفور؟"
 msgstr "هل أنت متأكد من حذف عنوان IP المحظور هذا على الفور؟"
 
 
@@ -275,8 +274,8 @@ msgstr "هل أنت متأكد أنك تريد مسح سجل المحادثة؟"
 msgid "Are you sure you want to delete permanently?"
 msgid "Are you sure you want to delete permanently?"
 msgstr "هل أنت متأكد أنك تريد الحذف نهائيًا؟"
 msgstr "هل أنت متأكد أنك تريد الحذف نهائيًا؟"
 
 
-#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:99
-#: src/views/stream/StreamList.vue:156
+#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:100
+#: src/views/stream/StreamList.vue:157
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "هل أنت متأكد أنك تريد الحذف؟"
 msgstr "هل أنت متأكد أنك تريد الحذف؟"
 
 
@@ -316,7 +315,7 @@ msgstr "المساعد"
 msgid "Attempt to fix"
 msgid "Attempt to fix"
 msgstr "محاولة الإصلاح"
 msgstr "محاولة الإصلاح"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:20
+#: src/views/preference/tabs/AuthSettings.vue:17
 msgid "Attempts"
 msgid "Attempts"
 msgstr "محاولات"
 msgstr "محاولات"
 
 
@@ -328,7 +327,7 @@ msgstr "مصادقة"
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr "المصادقة باستخدام مفتاح المرور"
 msgstr "المصادقة باستخدام مفتاح المرور"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:87
+#: src/views/preference/tabs/AuthSettings.vue:56
 msgid "Authentication Settings"
 msgid "Authentication Settings"
 msgstr "إعدادات المصادقة"
 msgstr "إعدادات المصادقة"
 
 
@@ -403,15 +402,15 @@ msgstr "لم يتم العثور على ملف النسخ الاحتياطي: {0
 msgid "Backup has been downloaded successfully"
 msgid "Backup has been downloaded successfully"
 msgstr "تم تنزيل النسخة الاحتياطية بنجاح"
 msgstr "تم تنزيل النسخة الاحتياطية بنجاح"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:128
+#: src/views/preference/tabs/AuthSettings.vue:97
 msgid "Ban Threshold Minutes"
 msgid "Ban Threshold Minutes"
 msgstr "دقائق حد الحظر"
 msgstr "دقائق حد الحظر"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:149
+#: src/views/preference/tabs/AuthSettings.vue:118
 msgid "Banned IPs"
 msgid "Banned IPs"
 msgstr "عناوين IP المحظورة"
 msgstr "عناوين IP المحظورة"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:23
+#: src/views/preference/tabs/AuthSettings.vue:20
 msgid "Banned Until"
 msgid "Banned Until"
 msgstr "محظور حتى"
 msgstr "محظور حتى"
 
 
@@ -521,7 +520,7 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
-#: src/views/site/components/SiteStatusSegmented.vue:97
+#: src/views/site/components/SiteStatusSelect.vue:124
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
@@ -644,6 +643,10 @@ msgstr "طريقة التحدي"
 msgid "Change Certificate"
 msgid "Change Certificate"
 msgstr "تغيير الشهادة"
 msgstr "تغيير الشهادة"
 
 
+#: src/views/user/UserProfile.vue:181
+msgid "Change Password"
+msgstr "تغيير كلمة المرور"
+
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 msgid "Changed Certificate"
 msgid "Changed Certificate"
 msgid_plural "Changed Certificates"
 msgid_plural "Changed Certificates"
@@ -812,13 +815,11 @@ msgstr "تم المسح بنجاح"
 msgid "Click or drag backup file to this area to upload"
 msgid "Click or drag backup file to this area to upload"
 msgstr "انقر فوق أو اسحب ملف النسخ الاحتياطي إلى هذه المنطقة للتحميل"
 msgstr "انقر فوق أو اسحب ملف النسخ الاحتياطي إلى هذه المنطقة للتحميل"
 
 
-#: src/language/curd.ts:49
-#: src/language/curd.ts:53
+#: src/language/curd.ts:49 src/language/curd.ts:53
 msgid "Click or drag files to this area to upload"
 msgid "Click or drag files to this area to upload"
 msgstr "انقر أو اسحب الملفات إلى هذه المنطقة للتحميل"
 msgstr "انقر أو اسحب الملفات إلى هذه المنطقة للتحميل"
 
 
-#: src/language/curd.ts:50
-#: src/language/curd.ts:54
+#: src/language/curd.ts:50 src/language/curd.ts:54
 msgid "Click or drag folders to this area to upload"
 msgid "Click or drag folders to this area to upload"
 msgstr "انقر أو اسحب المجلدات إلى هذه المنطقة للتحميل"
 msgstr "انقر أو اسحب المجلدات إلى هذه المنطقة للتحميل"
 
 
@@ -938,6 +939,10 @@ msgstr "التكوينات"
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr "تكوين SSL"
 msgstr "تكوين SSL"
 
 
+#: src/views/user/UserProfile.vue:204
+msgid "Confirm New Password"
+msgstr "تأكيد كلمة المرور الجديدة"
+
 #: src/views/dashboard/Environments.vue:141
 #: src/views/dashboard/Environments.vue:141
 msgid "Connected"
 msgid "Connected"
 msgstr "متصل"
 msgstr "متصل"
@@ -946,7 +951,7 @@ msgstr "متصل"
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "خطأ في الاتصال، جاري محاولة إعادة الاتصال..."
 msgstr "خطأ في الاتصال، جاري محاولة إعادة الاتصال..."
 
 
-#: src/views/terminal/Terminal.vue:142
+#: src/views/terminal/Terminal.vue:139
 msgid "Connection lost, please refresh the page."
 msgid "Connection lost, please refresh the page."
 msgstr "تم فقدان الاتصال، يرجى تحديث الصفحة."
 msgstr "تم فقدان الاتصال، يرجى تحديث الصفحة."
 
 
@@ -1002,7 +1007,7 @@ msgstr "استخدام وحدة المعالجة المركزية مرتفع ن
 msgid "CPU:"
 msgid "CPU:"
 msgstr "CPU:"
 msgstr "CPU:"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:166
+#: src/components/NgxConfigEditor/NgxUpstream.vue:170
 msgid "Create"
 msgid "Create"
 msgstr "إنشاء"
 msgstr "إنشاء"
 
 
@@ -1031,7 +1036,7 @@ msgstr ""
 "سيتم تنزيل ملفات النسخ الاحتياطي تلقائيًا إلى جهاز الكمبيوتر الخاص بك."
 "سيتم تنزيل ملفات النسخ الاحتياطي تلقائيًا إلى جهاز الكمبيوتر الخاص بك."
 
 
 #: src/views/environments/group/columns.ts:29
 #: src/views/environments/group/columns.ts:29
-#: src/views/notification/notificationColumns.tsx:45
+#: src/views/notification/notificationColumns.tsx:51
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/user/userColumns.tsx:46
 #: src/views/user/userColumns.tsx:46
@@ -1070,6 +1075,10 @@ msgstr "الاتصالات النشطة الحالية"
 msgid "Current Content"
 msgid "Current Content"
 msgstr "المحتوى الحالي"
 msgstr "المحتوى الحالي"
 
 
+#: src/views/user/UserProfile.vue:186
+msgid "Current Password"
+msgstr "كلمة المرور الحالية"
+
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 msgid "Current usage"
 msgid "Current usage"
 msgstr "الاستخدام الحالي"
 msgstr "الاستخدام الحالي"
@@ -1109,8 +1118,8 @@ msgstr "حدد اسم منطقة الذاكرة المشتركة والحجم،
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/views/certificate/components/RemoveCert.vue:88
 #: src/views/certificate/components/RemoveCert.vue:88
-#: src/views/site/site_list/SiteList.vue:108
-#: src/views/stream/StreamList.vue:165
+#: src/views/site/site_list/SiteList.vue:109
+#: src/views/stream/StreamList.vue:166
 msgid "Delete"
 msgid "Delete"
 msgstr "حذف"
 msgstr "حذف"
 
 
@@ -1187,7 +1196,7 @@ msgstr "الملف الوجهة موجود بالفعل"
 msgid "Destination file: {0} already exists"
 msgid "Destination file: {0} already exists"
 msgstr "الملف الوجهة: {0} موجود بالفعل"
 msgstr "الملف الوجهة: {0} موجود بالفعل"
 
 
-#: src/views/notification/notificationColumns.tsx:60
+#: src/views/notification/notificationColumns.tsx:66
 msgid "Details"
 msgid "Details"
 msgstr "تفاصيل"
 msgstr "تفاصيل"
 
 
@@ -1231,11 +1240,11 @@ msgstr "مستويات الدليل"
 msgid "Directory path to store cache files"
 msgid "Directory path to store cache files"
 msgstr "مسار الدليل لتخزين ملفات الذاكرة المؤقتة"
 msgstr "مسار الدليل لتخزين ملفات الذاكرة المؤقتة"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:88
+#: src/views/site/components/SiteStatusSelect.vue:115
 msgid "disable"
 msgid "disable"
 msgstr "تعطيل"
 msgstr "تعطيل"
 
 
-#: src/views/stream/StreamList.vue:136
+#: src/views/stream/StreamList.vue:137
 msgid "Disable"
 msgid "Disable"
 msgstr "تعطيل"
 msgstr "تعطيل"
 
 
@@ -1296,7 +1305,7 @@ msgstr "تم تعطيل الدفق %{name} من %{node} بنجاح"
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:134
+#: src/views/site/components/SiteStatusSelect.vue:162
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/stream/components/StreamEditor.vue:30
 #: src/views/stream/components/StreamEditor.vue:30
@@ -1304,7 +1313,7 @@ msgstr "تم تعطيل الدفق %{name} من %{node} بنجاح"
 msgid "Disabled"
 msgid "Disabled"
 msgstr "معطل"
 msgstr "معطل"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:40
+#: src/views/site/components/SiteStatusSelect.vue:67
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/StreamList.vue:56
 #: src/views/stream/StreamList.vue:56
 msgid "Disabled successfully"
 msgid "Disabled successfully"
@@ -1332,7 +1341,7 @@ msgstr "DNS01"
 msgid "Do not enable this option unless you are sure that you need it."
 msgid "Do not enable this option unless you are sure that you need it."
 msgstr "لا تقم بتمكين هذا الخيار إلا إذا كنت متأكدًا من أنك بحاجة إليه."
 msgstr "لا تقم بتمكين هذا الخيار إلا إذا كنت متأكدًا من أنك بحاجة إليه."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:93
+#: src/views/site/components/SiteStatusSelect.vue:120
 msgid "Do you want to %{action} this site?"
 msgid "Do you want to %{action} this site?"
 msgstr "هل تريد %{action} هذا الموقع؟"
 msgstr "هل تريد %{action} هذا الموقع؟"
 
 
@@ -1409,9 +1418,9 @@ msgstr ""
 "مواقع الويب غير HTTPS، إلا عند التشغيل على localhost."
 "مواقع الويب غير HTTPS، إلا عند التشغيل على localhost."
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:94
+#: src/views/site/site_list/SiteList.vue:95
 #: src/views/stream/components/StreamDuplicate.vue:64
 #: src/views/stream/components/StreamDuplicate.vue:64
-#: src/views/stream/StreamList.vue:151
+#: src/views/stream/StreamList.vue:152
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "مكرر"
 msgstr "مكرر"
 
 
@@ -1455,11 +1464,11 @@ msgstr "بريد إلكتروني"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "البريد الإلكتروني (*)"
 msgstr "البريد الإلكتروني (*)"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:87
+#: src/views/site/components/SiteStatusSelect.vue:114
 msgid "enable"
 msgid "enable"
 msgstr "تمكين"
 msgstr "تمكين"
 
 
-#: src/views/stream/StreamList.vue:144
+#: src/views/stream/StreamList.vue:145
 msgid "Enable"
 msgid "Enable"
 msgstr "تفعيل"
 msgstr "تفعيل"
 
 
@@ -1557,7 +1566,7 @@ msgstr "تفعيل TOTP"
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:130
+#: src/views/site/components/SiteStatusSelect.vue:159
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/stream/components/RightPanel/Basic.vue:62
 #: src/views/stream/components/RightPanel/Basic.vue:62
@@ -1566,7 +1575,7 @@ msgstr "تفعيل TOTP"
 msgid "Enabled"
 msgid "Enabled"
 msgstr "مفعل"
 msgstr "مفعل"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:27
+#: src/views/site/components/SiteStatusSelect.vue:54
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/StreamList.vue:46
 #: src/views/stream/StreamList.vue:46
@@ -1775,23 +1784,23 @@ msgstr "فشل في حذف الشهادة"
 msgid "Failed to delete certificate from database: %{error}"
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "فشل حذف الشهادة من قاعدة البيانات: %{error}"
 msgstr "فشل حذف الشهادة من قاعدة البيانات: %{error}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:46
+#: src/views/site/components/SiteStatusSelect.vue:73
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/StreamList.vue:60
 #: src/views/stream/StreamList.vue:60
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "فشل في تعطيل %{msg}"
 msgstr "فشل في تعطيل %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:72
+#: src/views/site/components/SiteStatusSelect.vue:99
 msgid "Failed to disable maintenance mode %{msg}"
 msgid "Failed to disable maintenance mode %{msg}"
 msgstr "فشل تعطيل وضع الصيانة %{msg}"
 msgstr "فشل تعطيل وضع الصيانة %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:33
+#: src/views/site/components/SiteStatusSelect.vue:60
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/StreamList.vue:50
 #: src/views/stream/StreamList.vue:50
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:59
+#: src/views/site/components/SiteStatusSelect.vue:86
 msgid "Failed to enable maintenance mode %{msg}"
 msgid "Failed to enable maintenance mode %{msg}"
 msgstr "فشل تمكين وضع الصيانة %{msg}"
 msgstr "فشل تمكين وضع الصيانة %{msg}"
 
 
@@ -2102,7 +2111,7 @@ msgstr "رقم ICP"
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr "إذا تُرك فارغًا، سيتم استخدام دليل CA الافتراضي."
 msgstr "إذا تُرك فارغًا، سيتم استخدام دليل CA الافتراضي."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:144
+#: src/views/preference/tabs/AuthSettings.vue:113
 msgid ""
 msgid ""
 "If the number of login failed attempts from a ip reach the max attempts in "
 "If the number of login failed attempts from a ip reach the max attempts in "
 "ban threshold minutes, the ip will be banned for a period of time."
 "ban threshold minutes, the ip will be banned for a period of time."
@@ -2269,7 +2278,7 @@ msgstr "تنسيق الطلب غير صالح"
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "تنسيق رمز الأمان غير صالح"
 msgstr "تنسيق رمز الأمان غير صالح"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:17
+#: src/views/preference/tabs/AuthSettings.vue:14
 msgid "IP"
 msgid "IP"
 msgstr "IP"
 msgstr "IP"
 
 
@@ -2384,7 +2393,7 @@ msgstr "قائمة"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "متوسط التحميل:"
 msgstr "متوسط التحميل:"
 
 
-#: src/views/environments/list/Environment.vue:80
+#: src/views/environments/list/Environment.vue:81
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "تحميل من الإعدادات"
 msgstr "تحميل من الإعدادات"
 
 
@@ -2481,17 +2490,17 @@ msgstr ""
 "يدويًا. سيقوم مجدول المهام crontab الخاص بواجهة Nginx UI بتنفيذ أمر تدوير "
 "يدويًا. سيقوم مجدول المهام crontab الخاص بواجهة Nginx UI بتنفيذ أمر تدوير "
 "السجلات في الفاصل الزمني الذي تحدده بالدقائق."
 "السجلات في الفاصل الزمني الذي تحدده بالدقائق."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:138
+#: src/views/site/components/SiteStatusSelect.vue:165
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_list/columns.tsx:118
 #: src/views/site/site_list/columns.tsx:118
 msgid "Maintenance"
 msgid "Maintenance"
 msgstr "صيانة"
 msgstr "صيانة"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:66
+#: src/views/site/components/SiteStatusSelect.vue:93
 msgid "Maintenance mode disabled successfully"
 msgid "Maintenance mode disabled successfully"
 msgstr "تم تعطيل وضع الصيانة بنجاح"
 msgstr "تم تعطيل وضع الصيانة بنجاح"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:53
+#: src/views/site/components/SiteStatusSelect.vue:80
 msgid "Maintenance mode enabled successfully"
 msgid "Maintenance mode enabled successfully"
 msgstr "تم تمكين وضع الصيانة بنجاح"
 msgstr "تم تمكين وضع الصيانة بنجاح"
 
 
@@ -2558,7 +2567,7 @@ msgstr "العملية الرئيسية"
 msgid "Master Process"
 msgid "Master Process"
 msgstr "العملية الرئيسية"
 msgstr "العملية الرئيسية"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:134
+#: src/views/preference/tabs/AuthSettings.vue:103
 msgid "Max Attempts"
 msgid "Max Attempts"
 msgstr "الحد الأقصى للمحاولات"
 msgstr "الحد الأقصى للمحاولات"
 
 
@@ -2657,7 +2666,7 @@ msgstr "الوحدات"
 msgid "Multi-line Directive"
 msgid "Multi-line Directive"
 msgstr "توجيه متعدد الأسطر"
 msgstr "توجيه متعدد الأسطر"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:178
+#: src/components/NgxConfigEditor/NgxUpstream.vue:182
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateList/certColumns.tsx:9
 #: src/views/certificate/CertificateList/certColumns.tsx:9
@@ -2674,7 +2683,7 @@ msgstr "توجيه متعدد الأسطر"
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/StreamDuplicate.vue:71
 #: src/views/stream/components/StreamDuplicate.vue:71
-#: src/views/stream/StreamList.vue:178
+#: src/views/stream/StreamList.vue:179
 msgid "Name"
 msgid "Name"
 msgstr "اسم"
 msgstr "اسم"
 
 
@@ -2706,6 +2715,10 @@ msgstr "تثبيت جديد"
 msgid "New name"
 msgid "New name"
 msgstr "اسم جديد"
 msgstr "اسم جديد"
 
 
+#: src/views/user/UserProfile.vue:195
+msgid "New Password"
+msgstr "كلمة مرور جديدة"
+
 #: src/views/config/ConfigEditor.vue:328
 #: src/views/config/ConfigEditor.vue:328
 msgid "New Path"
 msgid "New Path"
 msgstr "مسار جديد"
 msgstr "مسار جديد"
@@ -2919,9 +2932,9 @@ msgstr "يتضمن Nginx.conf دليل streams-enabled"
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
-#: src/views/preference/tabs/AuthSettings.vue:163
+#: src/views/preference/tabs/AuthSettings.vue:132
 #: src/views/preference/tabs/CertSettings.vue:73
 #: src/views/preference/tabs/CertSettings.vue:73
-#: src/views/site/site_list/SiteList.vue:97 src/views/stream/StreamList.vue:154
+#: src/views/site/site_list/SiteList.vue:98 src/views/stream/StreamList.vue:155
 msgid "No"
 msgid "No"
 msgstr "لا"
 msgstr "لا"
 
 
@@ -3054,6 +3067,7 @@ msgid "Off"
 msgstr "إيقاف"
 msgstr "إيقاف"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/components/NgxConfigEditor/NgxUpstream.vue:145
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3065,13 +3079,13 @@ msgstr "غير متصل"
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/views/notification/Notification.vue:39
 #: src/views/notification/Notification.vue:39
-#: src/views/site/components/SiteStatusSegmented.vue:96
+#: src/views/site/components/SiteStatusSelect.vue:123
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
-#: src/views/site/site_list/SiteList.vue:98
+#: src/views/site/site_list/SiteList.vue:99
 #: src/views/stream/components/RightPanel/Basic.vue:46
 #: src/views/stream/components/RightPanel/Basic.vue:46
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:156
 #: src/views/system/Backup/BackupCreator.vue:149
 #: src/views/system/Backup/BackupCreator.vue:149
 msgid "OK"
 msgid "OK"
 msgstr "حسنًا"
 msgstr "حسنًا"
@@ -3190,6 +3204,14 @@ msgstr "كلمة المرور غير صحيحة"
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr "يجب ألا يتجاوز طول كلمة المرور 20 حرفًا"
 msgstr "يجب ألا يتجاوز طول كلمة المرور 20 حرفًا"
 
 
+#: src/views/user/UserProfile.vue:96
+msgid "Password updated successfully"
+msgstr "تم تحديث كلمة المرور بنجاح"
+
+#: src/views/user/UserProfile.vue:75
+msgid "Passwords do not match"
+msgstr "كلمات المرور غير متطابقة"
+
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
@@ -3229,6 +3251,10 @@ msgstr "تم حفظ إعدادات الأداء بنجاح"
 msgid "Performing core upgrade"
 msgid "Performing core upgrade"
 msgstr "تنفيذ ترقية النواة"
 msgstr "تنفيذ ترقية النواة"
 
 
+#: src/views/user/UserProfile.vue:121
+msgid "Personal Information"
+msgstr "المعلومات الشخصية"
+
 #: src/constants/errors/self_check.ts:19
 #: src/constants/errors/self_check.ts:19
 msgid "PID path not exist"
 msgid "PID path not exist"
 msgstr "مسار PID غير موجود"
 msgstr "مسار PID غير موجود"
@@ -3347,17 +3373,17 @@ msgstr "الرجاء تحديد ملف النسخ الاحتياطي"
 msgid "Please select at least one item"
 msgid "Please select at least one item"
 msgstr "الرجاء تحديد عنصر واحد على الأقل"
 msgstr "الرجاء تحديد عنصر واحد على الأقل"
 
 
-#: src/views/environments/list/Environment.vue:112
+#: src/views/environments/list/Environment.vue:113
 #: src/views/environments/list/Environment.vue:35
 #: src/views/environments/list/Environment.vue:35
 msgid "Please select at least one node to reload Nginx"
 msgid "Please select at least one node to reload Nginx"
 msgstr "الرجاء تحديد عقدة واحدة على الأقل لإعادة تحميل Nginx"
 msgstr "الرجاء تحديد عقدة واحدة على الأقل لإعادة تحميل Nginx"
 
 
-#: src/views/environments/list/Environment.vue:133
+#: src/views/environments/list/Environment.vue:134
 #: src/views/environments/list/Environment.vue:49
 #: src/views/environments/list/Environment.vue:49
 msgid "Please select at least one node to restart Nginx"
 msgid "Please select at least one node to restart Nginx"
 msgstr "الرجاء تحديد عقدة واحدة على الأقل لإعادة تشغيل Nginx"
 msgstr "الرجاء تحديد عقدة واحدة على الأقل لإعادة تشغيل Nginx"
 
 
-#: src/views/environments/list/Environment.vue:91
+#: src/views/environments/list/Environment.vue:92
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "يرجى اختيار عقدة واحدة على الأقل للترقية"
 msgstr "يرجى اختيار عقدة واحدة على الأقل للترقية"
 
 
@@ -3521,8 +3547,8 @@ msgstr "إعادة تحميل"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/EnvGroup.vue:50
 #: src/views/environments/group/EnvGroup.vue:50
-#: src/views/environments/list/Environment.vue:120
-#: src/views/environments/list/Environment.vue:128
+#: src/views/environments/list/Environment.vue:121
+#: src/views/environments/list/Environment.vue:129
 msgid "Reload Nginx"
 msgid "Reload Nginx"
 msgstr "إعادة تحميل Nginx"
 msgstr "إعادة تحميل Nginx"
 
 
@@ -3558,12 +3584,12 @@ msgstr "إعادة التحميل"
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr "إعادة تحميل nginx"
 msgstr "إعادة تحميل nginx"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:168
+#: src/views/preference/tabs/AuthSettings.vue:137
 msgid "Remove"
 msgid "Remove"
 msgstr "إزالة"
 msgstr "إزالة"
 
 
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
-#: src/views/preference/tabs/AuthSettings.vue:50
+#: src/views/preference/tabs/AuthSettings.vue:47
 msgid "Remove successfully"
 msgid "Remove successfully"
 msgstr "إزالة بنجاح"
 msgstr "إزالة بنجاح"
 
 
@@ -3701,8 +3727,8 @@ msgid "Restart"
 msgstr "إعادة تشغيل"
 msgstr "إعادة تشغيل"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
-#: src/views/environments/list/Environment.vue:141
-#: src/views/environments/list/Environment.vue:149
+#: src/views/environments/list/Environment.vue:142
+#: src/views/environments/list/Environment.vue:150
 msgid "Restart Nginx"
 msgid "Restart Nginx"
 msgstr "إعادة تشغيل Nginx"
 msgstr "إعادة تشغيل Nginx"
 
 
@@ -3782,15 +3808,15 @@ msgstr ""
 "إلغاء الشهادة سيؤثر على أي خدمات تستخدمها حالياً. لا يمكن التراجع عن هذا "
 "إلغاء الشهادة سيؤثر على أي خدمات تستخدمها حالياً. لا يمكن التراجع عن هذا "
 "الإجراء."
 "الإجراء."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:106
+#: src/views/preference/tabs/AuthSettings.vue:75
 msgid "RP Display Name"
 msgid "RP Display Name"
 msgstr "اسم العرض RP"
 msgstr "اسم العرض RP"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:112
+#: src/views/preference/tabs/AuthSettings.vue:81
 msgid "RP Origins"
 msgid "RP Origins"
 msgstr "أصول RP"
 msgstr "أصول RP"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:100
+#: src/views/preference/tabs/AuthSettings.vue:69
 msgid "RPID"
 msgid "RPID"
 msgstr "معرّف الجهاز عن بُعد"
 msgstr "معرّف الجهاز عن بُعد"
 
 
@@ -3895,6 +3921,10 @@ msgstr "اسم وحدة البحث"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "تم نسخ السر"
 msgstr "تم نسخ السر"
 
 
+#: src/views/user/UserProfile.vue:175
+msgid "Security Settings"
+msgstr "إعدادات الأمان"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 msgid "Security Token"
 msgid "Security Token"
@@ -3970,7 +4000,7 @@ msgstr ""
 "قم بتعيين خوادم الأسماء التكرارية لتجاوز خوادم الأسماء الخاصة بالنظام لخطوة "
 "قم بتعيين خوادم الأسماء التكرارية لتجاوز خوادم الأسماء الخاصة بالنظام لخطوة "
 "تحدي DNS."
 "تحدي DNS."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:89
+#: src/views/site/components/SiteStatusSelect.vue:116
 msgid "set to maintenance mode"
 msgid "set to maintenance mode"
 msgstr "تم تعيينه في وضع الصيانة"
 msgstr "تم تعيينه في وضع الصيانة"
 
 
@@ -4207,13 +4237,11 @@ msgstr ""
 "Nginx عبر وكيل عكسي لـ Nginx، يرجى الرجوع إلى هذا الرابط لكتابة ملف التكوين "
 "Nginx عبر وكيل عكسي لـ Nginx، يرجى الرجوع إلى هذا الرابط لكتابة ملف التكوين "
 "المقابل: https://nginxui.com/guide/nginx-proxy-example.html"
 "المقابل: https://nginxui.com/guide/nginx-proxy-example.html"
 
 
-#: src/language/curd.ts:51
-#: src/language/curd.ts:55
+#: src/language/curd.ts:51 src/language/curd.ts:55
 msgid "Support single or batch upload of files"
 msgid "Support single or batch upload of files"
 msgstr "يدعم تحميل ملف واحد أو مجموعة من الملفات"
 msgstr "يدعم تحميل ملف واحد أو مجموعة من الملفات"
 
 
-#: src/language/curd.ts:52
-#: src/language/curd.ts:56
+#: src/language/curd.ts:52 src/language/curd.ts:56
 msgid "Support uploading entire folders"
 msgid "Support uploading entire folders"
 msgstr "دعم تحميل المجلدات بأكملها"
 msgstr "دعم تحميل المجلدات بأكملها"
 
 
@@ -4552,12 +4580,12 @@ msgstr ""
 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr "سيتم ترقية أو إعادة تثبيت Nginx UI على %{nodeNames} إلى %{version}."
 msgstr "سيتم ترقية أو إعادة تثبيت Nginx UI على %{nodeNames} إلى %{version}."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:123
+#: src/views/preference/tabs/AuthSettings.vue:92
 msgid "Throttle"
 msgid "Throttle"
 msgstr "كبح"
 msgstr "كبح"
 
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
-#: src/views/preference/tabs/AuthSettings.vue:143
+#: src/views/preference/tabs/AuthSettings.vue:112
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 msgid "Tips"
 msgid "Tips"
 msgstr "نصائح"
 msgstr "نصائح"
@@ -4570,7 +4598,7 @@ msgstr ""
 "نصيحة: يمكنك زيادة سعة معالجة التزامن عن طريق زيادة worker_processes أو "
 "نصيحة: يمكنك زيادة سعة معالجة التزامن عن طريق زيادة worker_processes أو "
 "worker_connections"
 "worker_connections"
 
 
-#: src/views/notification/notificationColumns.tsx:52
+#: src/views/notification/notificationColumns.tsx:58
 msgid "Title"
 msgid "Title"
 msgstr "عنوان"
 msgstr "عنوان"
 
 
@@ -4688,6 +4716,14 @@ msgstr "نوع"
 msgid "Unknown"
 msgid "Unknown"
 msgstr "غير معروف"
 msgstr "غير معروف"
 
 
+#: src/views/user/UserProfile.vue:218
+msgid "Update Password"
+msgstr "تحديث كلمة المرور"
+
+#: src/views/user/UserProfile.vue:142
+msgid "Update Profile"
+msgstr "تحديث الملف الشخصي"
+
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "تم التحديث بنجاح"
 msgstr "تم التحديث بنجاح"
@@ -4705,8 +4741,8 @@ msgid "Updated at"
 msgstr "محدث في"
 msgstr "محدث في"
 
 
 #: src/routes/modules/system.ts:33
 #: src/routes/modules/system.ts:33
-#: src/views/environments/list/Environment.vue:107
-#: src/views/environments/list/Environment.vue:99
+#: src/views/environments/list/Environment.vue:100
+#: src/views/environments/list/Environment.vue:108
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "ترقية"
 msgstr "ترقية"
@@ -4732,7 +4768,7 @@ msgstr "تحميل الملفات"
 msgid "Upload Folders"
 msgid "Upload Folders"
 msgstr "تحميل المجلدات"
 msgstr "تحميل المجلدات"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:173
+#: src/components/NgxConfigEditor/NgxUpstream.vue:177
 msgid "Upstream Name"
 msgid "Upstream Name"
 msgstr "اسم المنبع"
 msgstr "اسم المنبع"
 
 
@@ -4764,11 +4800,20 @@ msgstr "مستخدم"
 msgid "User banned"
 msgid "User banned"
 msgstr "تم حظر المستخدم"
 msgstr "تم حظر المستخدم"
 
 
+#: src/views/user/UserProfile.vue:62
+msgid "User info updated successfully"
+msgstr "تم تحديث معلومات المستخدم بنجاح"
+
 #: src/constants/errors/user.ts:8
 #: src/constants/errors/user.ts:8
 msgid "User not enabled otp as 2fa"
 msgid "User not enabled otp as 2fa"
 msgstr "المستخدم لم يتم تفعيل OTP كعامل ثنائي"
 msgstr "المستخدم لم يتم تفعيل OTP كعامل ثنائي"
 
 
+#: src/routes/modules/user.ts:19
+msgid "User Profile"
+msgstr "ملف المستخدم"
+
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
+#: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "اسم المستخدم"
 msgstr "اسم المستخدم"
 
 
@@ -4856,7 +4901,7 @@ msgstr ""
 "سنقوم بإزالة تكوين HTTPChallenge من هذا الملف وإعادة تحميل Nginx. هل أنت "
 "سنقوم بإزالة تكوين HTTPChallenge من هذا الملف وإعادة تحميل Nginx. هل أنت "
 "متأكد أنك تريد المتابعة؟"
 "متأكد أنك تريد المتابعة؟"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:96
+#: src/views/preference/tabs/AuthSettings.vue:65
 msgid "Webauthn"
 msgid "Webauthn"
 msgstr "ويب أوثن"
 msgstr "ويب أوثن"
 
 
@@ -4934,12 +4979,12 @@ msgstr "كتابة الشهادة إلى القرص"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
-#: src/views/preference/tabs/AuthSettings.vue:162
+#: src/views/preference/tabs/AuthSettings.vue:131
 #: src/views/preference/tabs/CertSettings.vue:72
 #: src/views/preference/tabs/CertSettings.vue:72
 msgid "Yes"
 msgid "Yes"
 msgstr "نعم"
 msgstr "نعم"
 
 
-#: src/views/terminal/Terminal.vue:135
+#: src/views/terminal/Terminal.vue:132
 msgid ""
 msgid ""
 "You are accessing this terminal over an insecure HTTP connection on a "
 "You are accessing this terminal over an insecure HTTP connection on a "
 "non-localhost domain. This may expose sensitive information."
 "non-localhost domain. This may expose sensitive information."
@@ -5042,9 +5087,6 @@ msgstr "مفاتيح المرور الخاصة بك"
 #~ msgid_plural "Total %{total} items"
 #~ msgid_plural "Total %{total} items"
 #~ msgstr[0] "إجمالي %{total} عنصر"
 #~ msgstr[0] "إجمالي %{total} عنصر"
 
 
-#~ msgid "Updated successfully"
-#~ msgstr "تم التحديث بنجاح"
-
 #~ msgid "View Details"
 #~ msgid "View Details"
 #~ msgstr "عرض التفاصيل"
 #~ msgstr "عرض التفاصيل"
 
 

+ 127 - 85
app/src/language/de_DE/app.po

@@ -103,7 +103,7 @@ msgstr "[Nginx UI] Zertifikat wird auf die Festplatte geschrieben"
 msgid "2FA"
 msgid "2FA"
 msgstr "2FA"
 msgstr "2FA"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:69
+#: src/views/user/UserProfile.vue:151
 msgid "2FA Settings"
 msgid "2FA Settings"
 msgstr "2FA-Einstellungen"
 msgstr "2FA-Einstellungen"
 
 
@@ -129,8 +129,7 @@ msgstr "Zugriffslog"
 msgid "ACME User"
 msgid "ACME User"
 msgstr "ACME-Benutzer"
 msgstr "ACME-Benutzer"
 
 
-#: src/views/notification/notificationColumns.tsx:66
-#: src/views/preference/tabs/AuthSettings.vue:29
+#: src/views/preference/tabs/AuthSettings.vue:26
 msgid "Action"
 msgid "Action"
 msgstr "Aktion"
 msgstr "Aktion"
 
 
@@ -141,9 +140,9 @@ msgstr "Aktion"
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/nginx_log/NginxLogList.vue:52
 #: src/views/nginx_log/NginxLogList.vue:52
+#: src/views/notification/notificationColumns.tsx:72
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
-#: src/views/site/site_list/columns.tsx:129
-#: src/views/stream/columns.tsx:64
+#: src/views/site/site_list/columns.tsx:129 src/views/stream/columns.tsx:64
 #: src/views/user/userColumns.tsx:58
 #: src/views/user/userColumns.tsx:58
 msgid "Actions"
 msgid "Actions"
 msgstr "Aktionen"
 msgstr "Aktionen"
@@ -158,10 +157,10 @@ msgid "Actual worker to configured ratio"
 msgstr "Tatsächliches Verhältnis von Arbeitern zu konfigurierten"
 msgstr "Tatsächliches Verhältnis von Arbeitern zu konfigurierten"
 
 
 #: src/components/NgxConfigEditor/NgxServer.vue:112
 #: src/components/NgxConfigEditor/NgxServer.vue:112
-#: src/components/NgxConfigEditor/NgxUpstream.vue:155 src/language/curd.ts:19
+#: src/components/NgxConfigEditor/NgxUpstream.vue:159 src/language/curd.ts:19
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
-#: src/views/stream/StreamList.vue:120
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "Hinzufügen"
 msgstr "Hinzufügen"
 
 
@@ -188,7 +187,7 @@ msgstr "Ort hinzufügen"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "Seite hinzufügen"
 msgstr "Seite hinzufügen"
 
 
-#: src/views/stream/StreamList.vue:173
+#: src/views/stream/StreamList.vue:174
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "Stream hinzufügen"
 msgstr "Stream hinzufügen"
 
 
@@ -248,7 +247,7 @@ msgstr "App"
 msgid "Arch"
 msgid "Arch"
 msgstr "\"Arch\""
 msgstr "\"Arch\""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:161
+#: src/views/preference/tabs/AuthSettings.vue:130
 msgid "Are you sure to delete this banned IP immediately?"
 msgid "Are you sure to delete this banned IP immediately?"
 msgstr "Sind Sie sicher, dass Sie diese gesperrte IP sofort löschen möchten?"
 msgstr "Sind Sie sicher, dass Sie diese gesperrte IP sofort löschen möchten?"
 
 
@@ -277,8 +276,8 @@ msgstr "Sind Sie sicher, dass Sie den Chatverlauf löschen möchten?"
 msgid "Are you sure you want to delete permanently?"
 msgid "Are you sure you want to delete permanently?"
 msgstr "Sind Sie sicher, dass Sie dauerhaft löschen möchten?"
 msgstr "Sind Sie sicher, dass Sie dauerhaft löschen möchten?"
 
 
-#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:99
-#: src/views/stream/StreamList.vue:156
+#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:100
+#: src/views/stream/StreamList.vue:157
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "Sind Sie sicher, dass Sie löschen möchten?"
 msgstr "Sind Sie sicher, dass Sie löschen möchten?"
 
 
@@ -322,7 +321,7 @@ msgstr "Assistent"
 msgid "Attempt to fix"
 msgid "Attempt to fix"
 msgstr "Versuchen zu beheben"
 msgstr "Versuchen zu beheben"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:20
+#: src/views/preference/tabs/AuthSettings.vue:17
 msgid "Attempts"
 msgid "Attempts"
 msgstr "Versuche"
 msgstr "Versuche"
 
 
@@ -334,7 +333,7 @@ msgstr "Authentifizierung"
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr "Mit Passkey authentifizieren"
 msgstr "Mit Passkey authentifizieren"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:87
+#: src/views/preference/tabs/AuthSettings.vue:56
 msgid "Authentication Settings"
 msgid "Authentication Settings"
 msgstr "Authentifizierungseinstellungen"
 msgstr "Authentifizierungseinstellungen"
 
 
@@ -411,15 +410,15 @@ msgstr "Sicherungsdatei nicht gefunden: {0}"
 msgid "Backup has been downloaded successfully"
 msgid "Backup has been downloaded successfully"
 msgstr "Die Sicherung wurde erfolgreich heruntergeladen"
 msgstr "Die Sicherung wurde erfolgreich heruntergeladen"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:128
+#: src/views/preference/tabs/AuthSettings.vue:97
 msgid "Ban Threshold Minutes"
 msgid "Ban Threshold Minutes"
 msgstr "Schwellenwert für Minuten sperren"
 msgstr "Schwellenwert für Minuten sperren"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:149
+#: src/views/preference/tabs/AuthSettings.vue:118
 msgid "Banned IPs"
 msgid "Banned IPs"
 msgstr "Gesperrte IPs"
 msgstr "Gesperrte IPs"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:23
+#: src/views/preference/tabs/AuthSettings.vue:20
 msgid "Banned Until"
 msgid "Banned Until"
 msgstr "Gesperrt bis"
 msgstr "Gesperrt bis"
 
 
@@ -531,7 +530,7 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
-#: src/views/site/components/SiteStatusSegmented.vue:97
+#: src/views/site/components/SiteStatusSelect.vue:124
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
@@ -649,6 +648,10 @@ msgstr "Challenge-Methode"
 msgid "Change Certificate"
 msgid "Change Certificate"
 msgstr "Zertifikat ändern"
 msgstr "Zertifikat ändern"
 
 
+#: src/views/user/UserProfile.vue:181
+msgid "Change Password"
+msgstr "Passwort ändern"
+
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 msgid "Changed Certificate"
 msgid "Changed Certificate"
 msgid_plural "Changed Certificates"
 msgid_plural "Changed Certificates"
@@ -820,13 +823,11 @@ msgstr ""
 "Klicken Sie auf oder ziehen Sie die Sicherungsdatei in diesen Bereich, um "
 "Klicken Sie auf oder ziehen Sie die Sicherungsdatei in diesen Bereich, um "
 "hochzuladen"
 "hochzuladen"
 
 
-#: src/language/curd.ts:49
-#: src/language/curd.ts:53
+#: src/language/curd.ts:49 src/language/curd.ts:53
 msgid "Click or drag files to this area to upload"
 msgid "Click or drag files to this area to upload"
 msgstr "Klicken oder ziehen Sie Dateien in diesen Bereich zum Hochladen"
 msgstr "Klicken oder ziehen Sie Dateien in diesen Bereich zum Hochladen"
 
 
-#: src/language/curd.ts:50
-#: src/language/curd.ts:54
+#: src/language/curd.ts:50 src/language/curd.ts:54
 msgid "Click or drag folders to this area to upload"
 msgid "Click or drag folders to this area to upload"
 msgstr "Klicken Sie oder ziehen Sie Ordner in diesen Bereich zum Hochladen"
 msgstr "Klicken Sie oder ziehen Sie Ordner in diesen Bereich zum Hochladen"
 
 
@@ -946,6 +947,10 @@ msgstr "Konfigurationen"
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr "SSL konfigurieren"
 msgstr "SSL konfigurieren"
 
 
+#: src/views/user/UserProfile.vue:204
+msgid "Confirm New Password"
+msgstr "Neues Passwort bestätigen"
+
 #: src/views/dashboard/Environments.vue:141
 #: src/views/dashboard/Environments.vue:141
 msgid "Connected"
 msgid "Connected"
 msgstr "Verbunden"
 msgstr "Verbunden"
@@ -954,7 +959,7 @@ msgstr "Verbunden"
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Verbindungsfehler, versuche erneut zu verbinden..."
 msgstr "Verbindungsfehler, versuche erneut zu verbinden..."
 
 
-#: src/views/terminal/Terminal.vue:142
+#: src/views/terminal/Terminal.vue:139
 msgid "Connection lost, please refresh the page."
 msgid "Connection lost, please refresh the page."
 msgstr "Ver"
 msgstr "Ver"
 
 
@@ -1012,7 +1017,7 @@ msgstr ""
 msgid "CPU:"
 msgid "CPU:"
 msgstr "CPU:"
 msgstr "CPU:"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:166
+#: src/components/NgxConfigEditor/NgxUpstream.vue:170
 msgid "Create"
 msgid "Create"
 msgstr "Erstellen"
 msgstr "Erstellen"
 
 
@@ -1042,7 +1047,7 @@ msgstr ""
 "Computer heruntergeladen."
 "Computer heruntergeladen."
 
 
 #: src/views/environments/group/columns.ts:29
 #: src/views/environments/group/columns.ts:29
-#: src/views/notification/notificationColumns.tsx:45
+#: src/views/notification/notificationColumns.tsx:51
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/user/userColumns.tsx:46
 #: src/views/user/userColumns.tsx:46
@@ -1081,6 +1086,10 @@ msgstr "Aktive Verbindungen"
 msgid "Current Content"
 msgid "Current Content"
 msgstr "Aktueller Inhalt"
 msgstr "Aktueller Inhalt"
 
 
+#: src/views/user/UserProfile.vue:186
+msgid "Current Password"
+msgstr "Aktuelles Passwort"
+
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 msgid "Current usage"
 msgid "Current usage"
 msgstr "Aktuelle Nutzung"
 msgstr "Aktuelle Nutzung"
@@ -1122,8 +1131,8 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/views/certificate/components/RemoveCert.vue:88
 #: src/views/certificate/components/RemoveCert.vue:88
-#: src/views/site/site_list/SiteList.vue:108
-#: src/views/stream/StreamList.vue:165
+#: src/views/site/site_list/SiteList.vue:109
+#: src/views/stream/StreamList.vue:166
 msgid "Delete"
 msgid "Delete"
 msgstr "Löschen"
 msgstr "Löschen"
 
 
@@ -1200,7 +1209,7 @@ msgstr "Die Zieldatei existiert bereits"
 msgid "Destination file: {0} already exists"
 msgid "Destination file: {0} already exists"
 msgstr "Zieldatei: {0} existiert bereits"
 msgstr "Zieldatei: {0} existiert bereits"
 
 
-#: src/views/notification/notificationColumns.tsx:60
+#: src/views/notification/notificationColumns.tsx:66
 msgid "Details"
 msgid "Details"
 msgstr "Details"
 msgstr "Details"
 
 
@@ -1244,11 +1253,11 @@ msgstr "Verzeichnisebenen"
 msgid "Directory path to store cache files"
 msgid "Directory path to store cache files"
 msgstr "Verzeichnispfad zum Speichern der Cache-Dateien"
 msgstr "Verzeichnispfad zum Speichern der Cache-Dateien"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:88
+#: src/views/site/components/SiteStatusSelect.vue:115
 msgid "disable"
 msgid "disable"
 msgstr "Deaktivieren"
 msgstr "Deaktivieren"
 
 
-#: src/views/stream/StreamList.vue:136
+#: src/views/stream/StreamList.vue:137
 msgid "Disable"
 msgid "Disable"
 msgstr "Deaktivieren"
 msgstr "Deaktivieren"
 
 
@@ -1309,7 +1318,7 @@ msgstr "Stream %{name} von %{node} erfolgreich deaktiviert"
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:134
+#: src/views/site/components/SiteStatusSelect.vue:162
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/stream/components/StreamEditor.vue:30
 #: src/views/stream/components/StreamEditor.vue:30
@@ -1317,7 +1326,7 @@ msgstr "Stream %{name} von %{node} erfolgreich deaktiviert"
 msgid "Disabled"
 msgid "Disabled"
 msgstr "Deaktiviert"
 msgstr "Deaktiviert"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:40
+#: src/views/site/components/SiteStatusSelect.vue:67
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/StreamList.vue:56
 #: src/views/stream/StreamList.vue:56
 msgid "Disabled successfully"
 msgid "Disabled successfully"
@@ -1347,7 +1356,7 @@ msgstr ""
 "Aktiviere diese Option nicht, es sei denn, du bist sicher, dass du sie "
 "Aktiviere diese Option nicht, es sei denn, du bist sicher, dass du sie "
 "benötigst."
 "benötigst."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:93
+#: src/views/site/components/SiteStatusSelect.vue:120
 msgid "Do you want to %{action} this site?"
 msgid "Do you want to %{action} this site?"
 msgstr "Möchten Sie diese Website %{action}?"
 msgstr "Möchten Sie diese Website %{action}?"
 
 
@@ -1427,9 +1436,9 @@ msgstr ""
 "ausgeführt werden."
 "ausgeführt werden."
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:94
+#: src/views/site/site_list/SiteList.vue:95
 #: src/views/stream/components/StreamDuplicate.vue:64
 #: src/views/stream/components/StreamDuplicate.vue:64
-#: src/views/stream/StreamList.vue:151
+#: src/views/stream/StreamList.vue:152
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "Duplizieren"
 msgstr "Duplizieren"
 
 
@@ -1473,11 +1482,11 @@ msgstr "E-Mail"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:87
+#: src/views/site/components/SiteStatusSelect.vue:114
 msgid "enable"
 msgid "enable"
 msgstr "aktivieren"
 msgstr "aktivieren"
 
 
-#: src/views/stream/StreamList.vue:144
+#: src/views/stream/StreamList.vue:145
 msgid "Enable"
 msgid "Enable"
 msgstr "Aktivieren"
 msgstr "Aktivieren"
 
 
@@ -1575,7 +1584,7 @@ msgstr "TOTP aktivieren"
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:130
+#: src/views/site/components/SiteStatusSelect.vue:159
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/stream/components/RightPanel/Basic.vue:62
 #: src/views/stream/components/RightPanel/Basic.vue:62
@@ -1584,7 +1593,7 @@ msgstr "TOTP aktivieren"
 msgid "Enabled"
 msgid "Enabled"
 msgstr "Aktiviert"
 msgstr "Aktiviert"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:27
+#: src/views/site/components/SiteStatusSelect.vue:54
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/StreamList.vue:46
 #: src/views/stream/StreamList.vue:46
@@ -1793,23 +1802,23 @@ msgstr "Zertifikat konnte nicht gelöscht werden"
 msgid "Failed to delete certificate from database: %{error}"
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "Löschen des Zertifikats aus der Datenbank fehlgeschlagen: %{error}"
 msgstr "Löschen des Zertifikats aus der Datenbank fehlgeschlagen: %{error}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:46
+#: src/views/site/components/SiteStatusSelect.vue:73
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/StreamList.vue:60
 #: src/views/stream/StreamList.vue:60
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "Deaktivierung von %{msg} fehlgeschlagen"
 msgstr "Deaktivierung von %{msg} fehlgeschlagen"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:72
+#: src/views/site/components/SiteStatusSelect.vue:99
 msgid "Failed to disable maintenance mode %{msg}"
 msgid "Failed to disable maintenance mode %{msg}"
 msgstr "Deaktivierung des Wartungsmodus fehlgeschlagen: %{msg}"
 msgstr "Deaktivierung des Wartungsmodus fehlgeschlagen: %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:33
+#: src/views/site/components/SiteStatusSelect.vue:60
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/StreamList.vue:50
 #: src/views/stream/StreamList.vue:50
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 msgstr "Aktiviern von %{msg} fehlgeschlagen"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:59
+#: src/views/site/components/SiteStatusSelect.vue:86
 msgid "Failed to enable maintenance mode %{msg}"
 msgid "Failed to enable maintenance mode %{msg}"
 msgstr "Wartungsmodus konnte nicht aktiviert werden: %{msg}"
 msgstr "Wartungsmodus konnte nicht aktiviert werden: %{msg}"
 
 
@@ -2122,7 +2131,7 @@ msgstr "ICP-Nummer"
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr "Wenn leer, wird das Standard-CA-Verzeichnis verwendet."
 msgstr "Wenn leer, wird das Standard-CA-Verzeichnis verwendet."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:144
+#: src/views/preference/tabs/AuthSettings.vue:113
 msgid ""
 msgid ""
 "If the number of login failed attempts from a ip reach the max attempts in "
 "If the number of login failed attempts from a ip reach the max attempts in "
 "ban threshold minutes, the ip will be banned for a period of time."
 "ban threshold minutes, the ip will be banned for a period of time."
@@ -2294,7 +2303,7 @@ msgstr "Ungültiges Anforderungsformat"
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "Ungültiges Sicherheitstoken-Format"
 msgstr "Ungültiges Sicherheitstoken-Format"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:17
+#: src/views/preference/tabs/AuthSettings.vue:14
 msgid "IP"
 msgid "IP"
 msgstr "IP"
 msgstr "IP"
 
 
@@ -2409,7 +2418,7 @@ msgstr "Liste"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "Durchschnittliche Last:"
 msgstr "Durchschnittliche Last:"
 
 
-#: src/views/environments/list/Environment.vue:80
+#: src/views/environments/list/Environment.vue:81
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "Aus Einstellungen laden"
 msgstr "Aus Einstellungen laden"
 
 
@@ -2506,17 +2515,17 @@ msgstr ""
 "aktivieren. Der Crontab-Aufgabenplaner von Nginx UI führt den "
 "aktivieren. Der Crontab-Aufgabenplaner von Nginx UI führt den "
 "Logrotate-Befehl in dem von dir in Minuten festgelegten Intervall aus."
 "Logrotate-Befehl in dem von dir in Minuten festgelegten Intervall aus."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:138
+#: src/views/site/components/SiteStatusSelect.vue:165
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_list/columns.tsx:118
 #: src/views/site/site_list/columns.tsx:118
 msgid "Maintenance"
 msgid "Maintenance"
 msgstr "Wartung"
 msgstr "Wartung"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:66
+#: src/views/site/components/SiteStatusSelect.vue:93
 msgid "Maintenance mode disabled successfully"
 msgid "Maintenance mode disabled successfully"
 msgstr "Wartungsmodus erfolgreich deaktiviert"
 msgstr "Wartungsmodus erfolgreich deaktiviert"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:53
+#: src/views/site/components/SiteStatusSelect.vue:80
 msgid "Maintenance mode enabled successfully"
 msgid "Maintenance mode enabled successfully"
 msgstr "Wartungsmodus erfolgreich aktiviert"
 msgstr "Wartungsmodus erfolgreich aktiviert"
 
 
@@ -2584,7 +2593,7 @@ msgstr "Master-Prozess"
 msgid "Master Process"
 msgid "Master Process"
 msgstr "Master-Prozess"
 msgstr "Master-Prozess"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:134
+#: src/views/preference/tabs/AuthSettings.vue:103
 msgid "Max Attempts"
 msgid "Max Attempts"
 msgstr "Maximale Versuche"
 msgstr "Maximale Versuche"
 
 
@@ -2683,7 +2692,7 @@ msgstr "Module"
 msgid "Multi-line Directive"
 msgid "Multi-line Directive"
 msgstr "Mehrzeilige Direktive"
 msgstr "Mehrzeilige Direktive"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:178
+#: src/components/NgxConfigEditor/NgxUpstream.vue:182
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateList/certColumns.tsx:9
 #: src/views/certificate/CertificateList/certColumns.tsx:9
@@ -2700,7 +2709,7 @@ msgstr "Mehrzeilige Direktive"
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/StreamDuplicate.vue:71
 #: src/views/stream/components/StreamDuplicate.vue:71
-#: src/views/stream/StreamList.vue:178
+#: src/views/stream/StreamList.vue:179
 msgid "Name"
 msgid "Name"
 msgstr "Name"
 msgstr "Name"
 
 
@@ -2732,6 +2741,10 @@ msgstr "Neue Installation"
 msgid "New name"
 msgid "New name"
 msgstr "Neuer Name"
 msgstr "Neuer Name"
 
 
+#: src/views/user/UserProfile.vue:195
+msgid "New Password"
+msgstr "Neues Passwort"
+
 #: src/views/config/ConfigEditor.vue:328
 #: src/views/config/ConfigEditor.vue:328
 msgid "New Path"
 msgid "New Path"
 msgstr "Neuer Pfad"
 msgstr "Neuer Pfad"
@@ -2947,9 +2960,9 @@ msgstr "Nginx.conf enthält das streams-enabled-Verzeichnis"
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
-#: src/views/preference/tabs/AuthSettings.vue:163
+#: src/views/preference/tabs/AuthSettings.vue:132
 #: src/views/preference/tabs/CertSettings.vue:73
 #: src/views/preference/tabs/CertSettings.vue:73
-#: src/views/site/site_list/SiteList.vue:97 src/views/stream/StreamList.vue:154
+#: src/views/site/site_list/SiteList.vue:98 src/views/stream/StreamList.vue:155
 msgid "No"
 msgid "No"
 msgstr "Nein"
 msgstr "Nein"
 
 
@@ -3085,6 +3098,7 @@ msgid "Off"
 msgstr "Aus"
 msgstr "Aus"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/components/NgxConfigEditor/NgxUpstream.vue:145
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3096,13 +3110,13 @@ msgstr "Offline"
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/views/notification/Notification.vue:39
 #: src/views/notification/Notification.vue:39
-#: src/views/site/components/SiteStatusSegmented.vue:96
+#: src/views/site/components/SiteStatusSelect.vue:123
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
-#: src/views/site/site_list/SiteList.vue:98
+#: src/views/site/site_list/SiteList.vue:99
 #: src/views/stream/components/RightPanel/Basic.vue:46
 #: src/views/stream/components/RightPanel/Basic.vue:46
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:156
 #: src/views/system/Backup/BackupCreator.vue:149
 #: src/views/system/Backup/BackupCreator.vue:149
 msgid "OK"
 msgid "OK"
 msgstr "OK"
 msgstr "OK"
@@ -3221,6 +3235,14 @@ msgstr "Falsches Passwort"
 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"
 
 
+#: src/views/user/UserProfile.vue:96
+msgid "Password updated successfully"
+msgstr "Passwort erfolgreich aktualisiert"
+
+#: src/views/user/UserProfile.vue:75
+msgid "Passwords do not match"
+msgstr "Passwörter stimmen nicht überein"
+
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
@@ -3260,6 +3282,10 @@ msgstr "Leistungseinstellungen erfolgreich gespeichert"
 msgid "Performing core upgrade"
 msgid "Performing core upgrade"
 msgstr "Führe Core-Upgrade aus"
 msgstr "Führe Core-Upgrade aus"
 
 
+#: src/views/user/UserProfile.vue:121
+msgid "Personal Information"
+msgstr "Persönliche Informationen"
+
 #: src/constants/errors/self_check.ts:19
 #: src/constants/errors/self_check.ts:19
 msgid "PID path not exist"
 msgid "PID path not exist"
 msgstr "PID-Pfad existiert nicht"
 msgstr "PID-Pfad existiert nicht"
@@ -3393,17 +3419,17 @@ msgstr "Bitte wählen Sie eine Sicherungsdatei aus"
 msgid "Please select at least one item"
 msgid "Please select at least one item"
 msgstr "Bitte wählen Sie mindestens einen Artikel aus"
 msgstr "Bitte wählen Sie mindestens einen Artikel aus"
 
 
-#: src/views/environments/list/Environment.vue:112
+#: src/views/environments/list/Environment.vue:113
 #: src/views/environments/list/Environment.vue:35
 #: src/views/environments/list/Environment.vue:35
 msgid "Please select at least one node to reload Nginx"
 msgid "Please select at least one node to reload Nginx"
 msgstr "Bitte wählen Sie mindestens einen Knoten aus, um Nginx neu zu laden"
 msgstr "Bitte wählen Sie mindestens einen Knoten aus, um Nginx neu zu laden"
 
 
-#: src/views/environments/list/Environment.vue:133
+#: src/views/environments/list/Environment.vue:134
 #: src/views/environments/list/Environment.vue:49
 #: src/views/environments/list/Environment.vue:49
 msgid "Please select at least one node to restart Nginx"
 msgid "Please select at least one node to restart Nginx"
 msgstr "Bitte wählen Sie mindestens einen Knoten aus, um Nginx neu zu starten"
 msgstr "Bitte wählen Sie mindestens einen Knoten aus, um Nginx neu zu starten"
 
 
-#: src/views/environments/list/Environment.vue:91
+#: src/views/environments/list/Environment.vue:92
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "Bitte wähle mindestens einen Knoten zum Upgrade aus"
 msgstr "Bitte wähle mindestens einen Knoten zum Upgrade aus"
 
 
@@ -3570,8 +3596,8 @@ msgstr "Neu laden"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/EnvGroup.vue:50
 #: src/views/environments/group/EnvGroup.vue:50
-#: src/views/environments/list/Environment.vue:120
-#: src/views/environments/list/Environment.vue:128
+#: src/views/environments/list/Environment.vue:121
+#: src/views/environments/list/Environment.vue:129
 msgid "Reload Nginx"
 msgid "Reload Nginx"
 msgstr "Nginx neu laden"
 msgstr "Nginx neu laden"
 
 
@@ -3609,12 +3635,12 @@ msgstr "Lade neu"
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr "Lade Nginx neu"
 msgstr "Lade Nginx neu"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:168
+#: src/views/preference/tabs/AuthSettings.vue:137
 msgid "Remove"
 msgid "Remove"
 msgstr "Löschen"
 msgstr "Löschen"
 
 
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
-#: src/views/preference/tabs/AuthSettings.vue:50
+#: src/views/preference/tabs/AuthSettings.vue:47
 msgid "Remove successfully"
 msgid "Remove successfully"
 msgstr "Erfolgreich entfernt"
 msgstr "Erfolgreich entfernt"
 
 
@@ -3753,8 +3779,8 @@ msgid "Restart"
 msgstr "Neustart"
 msgstr "Neustart"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
-#: src/views/environments/list/Environment.vue:141
-#: src/views/environments/list/Environment.vue:149
+#: src/views/environments/list/Environment.vue:142
+#: src/views/environments/list/Environment.vue:150
 msgid "Restart Nginx"
 msgid "Restart Nginx"
 msgstr "Nginx neu starten"
 msgstr "Nginx neu starten"
 
 
@@ -3836,15 +3862,15 @@ msgstr ""
 "Das Widerrufen eines Zertifikats wirkt sich auf alle Dienste aus, die es "
 "Das Widerrufen eines Zertifikats wirkt sich auf alle Dienste aus, die es "
 "derzeit verwenden. Diese Aktion kann nicht rückgängig gemacht werden."
 "derzeit verwenden. Diese Aktion kann nicht rückgängig gemacht werden."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:106
+#: src/views/preference/tabs/AuthSettings.vue:75
 msgid "RP Display Name"
 msgid "RP Display Name"
 msgstr "RP-Anzeigename"
 msgstr "RP-Anzeigename"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:112
+#: src/views/preference/tabs/AuthSettings.vue:81
 msgid "RP Origins"
 msgid "RP Origins"
 msgstr "RP-Ursprünge"
 msgstr "RP-Ursprünge"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:100
+#: src/views/preference/tabs/AuthSettings.vue:69
 msgid "RPID"
 msgid "RPID"
 msgstr "RPID"
 msgstr "RPID"
 
 
@@ -3949,6 +3975,10 @@ msgstr "Modulname suchen"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "Schlüssel wurde kopiert"
 msgstr "Schlüssel wurde kopiert"
 
 
+#: src/views/user/UserProfile.vue:175
+msgid "Security Settings"
+msgstr "Sicherheitseinstellungen"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 msgid "Security Token"
 msgid "Security Token"
@@ -4026,7 +4056,7 @@ msgstr ""
 "Setze die rekursiven Nameserver, um die System-Nameserver für den Schritt "
 "Setze die rekursiven Nameserver, um die System-Nameserver für den Schritt "
 "der DNS-Herausforderung zu überschreiben."
 "der DNS-Herausforderung zu überschreiben."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:89
+#: src/views/site/components/SiteStatusSelect.vue:116
 msgid "set to maintenance mode"
 msgid "set to maintenance mode"
 msgstr "In den Wartungsmodus versetzen"
 msgstr "In den Wartungsmodus versetzen"
 
 
@@ -4270,13 +4300,11 @@ msgstr ""
 "bitte diesen Link, um die entsprechende Konfigurationsdatei zu schreiben: "
 "bitte diesen Link, um die entsprechende Konfigurationsdatei zu schreiben: "
 "https://nginxui.com/guide/nginx-proxy-example.html"
 "https://nginxui.com/guide/nginx-proxy-example.html"
 
 
-#: src/language/curd.ts:51
-#: src/language/curd.ts:55
+#: src/language/curd.ts:51 src/language/curd.ts:55
 msgid "Support single or batch upload of files"
 msgid "Support single or batch upload of files"
 msgstr "Einzel- oder Stapel-Upload von Dateien unterstützen"
 msgstr "Einzel- oder Stapel-Upload von Dateien unterstützen"
 
 
-#: src/language/curd.ts:52
-#: src/language/curd.ts:56
+#: src/language/curd.ts:52 src/language/curd.ts:56
 msgid "Support uploading entire folders"
 msgid "Support uploading entire folders"
 msgstr "Unterstützt das Hochladen ganzer Ordner"
 msgstr "Unterstützt das Hochladen ganzer Ordner"
 
 
@@ -4622,12 +4650,12 @@ msgstr ""
 "Dies wird das Nginx UI auf %{nodeNames} auf %{version} aktualisieren oder "
 "Dies wird das Nginx UI auf %{nodeNames} auf %{version} aktualisieren oder "
 "neu installieren."
 "neu installieren."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:123
+#: src/views/preference/tabs/AuthSettings.vue:92
 msgid "Throttle"
 msgid "Throttle"
 msgstr "Begrenzung"
 msgstr "Begrenzung"
 
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
-#: src/views/preference/tabs/AuthSettings.vue:143
+#: src/views/preference/tabs/AuthSettings.vue:112
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 msgid "Tips"
 msgid "Tips"
 msgstr "Tipps"
 msgstr "Tipps"
@@ -4640,7 +4668,7 @@ msgstr ""
 "Tipp: Sie können die Nebenläufigkeitsverarbeitungskapazität erhöhen, indem "
 "Tipp: Sie können die Nebenläufigkeitsverarbeitungskapazität erhöhen, indem "
 "Sie worker_processes oder worker_connections erhöhen."
 "Sie worker_processes oder worker_connections erhöhen."
 
 
-#: src/views/notification/notificationColumns.tsx:52
+#: src/views/notification/notificationColumns.tsx:58
 msgid "Title"
 msgid "Title"
 msgstr "Titel"
 msgstr "Titel"
 
 
@@ -4761,6 +4789,14 @@ msgstr "Typ"
 msgid "Unknown"
 msgid "Unknown"
 msgstr "Unbekannt"
 msgstr "Unbekannt"
 
 
+#: src/views/user/UserProfile.vue:218
+msgid "Update Password"
+msgstr "Passwort aktualisieren"
+
+#: src/views/user/UserProfile.vue:142
+msgid "Update Profile"
+msgstr "Profil aktualisieren"
+
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "Erfolgreich aktualisiert"
 msgstr "Erfolgreich aktualisiert"
@@ -4778,8 +4814,8 @@ msgid "Updated at"
 msgstr "Aktualisiert am"
 msgstr "Aktualisiert am"
 
 
 #: src/routes/modules/system.ts:33
 #: src/routes/modules/system.ts:33
-#: src/views/environments/list/Environment.vue:107
-#: src/views/environments/list/Environment.vue:99
+#: src/views/environments/list/Environment.vue:100
+#: src/views/environments/list/Environment.vue:108
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "Upgrade"
 msgstr "Upgrade"
@@ -4805,7 +4841,7 @@ msgstr "Dateien hochladen"
 msgid "Upload Folders"
 msgid "Upload Folders"
 msgstr "Ordner hochladen"
 msgstr "Ordner hochladen"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:173
+#: src/components/NgxConfigEditor/NgxUpstream.vue:177
 msgid "Upstream Name"
 msgid "Upstream Name"
 msgstr "Upstream-Name"
 msgstr "Upstream-Name"
 
 
@@ -4837,11 +4873,20 @@ msgstr "Benutzer"
 msgid "User banned"
 msgid "User banned"
 msgstr "Benutzer gesperrt"
 msgstr "Benutzer gesperrt"
 
 
+#: src/views/user/UserProfile.vue:62
+msgid "User info updated successfully"
+msgstr "Benutzerinformationen erfolgreich aktualisiert"
+
 #: src/constants/errors/user.ts:8
 #: src/constants/errors/user.ts:8
 msgid "User not enabled otp as 2fa"
 msgid "User not enabled otp as 2fa"
 msgstr "Benutzer hat OTP nicht als 2FA aktiviert"
 msgstr "Benutzer hat OTP nicht als 2FA aktiviert"
 
 
+#: src/routes/modules/user.ts:19
+msgid "User Profile"
+msgstr "Benutzerprofil"
+
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
+#: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Benutzername"
 msgstr "Benutzername"
 
 
@@ -4933,7 +4978,7 @@ msgstr ""
 "Wir werden die HTTPChallenge-Konfiguration aus dieser Datei entfernen und "
 "Wir werden die HTTPChallenge-Konfiguration aus dieser Datei entfernen und "
 "das Nginx neu laden. Möchtest du fortfahren?"
 "das Nginx neu laden. Möchtest du fortfahren?"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:96
+#: src/views/preference/tabs/AuthSettings.vue:65
 msgid "Webauthn"
 msgid "Webauthn"
 msgstr "Webauthn"
 msgstr "Webauthn"
 
 
@@ -5017,12 +5062,12 @@ msgstr "Schreibe Zertifikat auf die Festplatte"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
-#: src/views/preference/tabs/AuthSettings.vue:162
+#: src/views/preference/tabs/AuthSettings.vue:131
 #: src/views/preference/tabs/CertSettings.vue:72
 #: src/views/preference/tabs/CertSettings.vue:72
 msgid "Yes"
 msgid "Yes"
 msgstr "Ja"
 msgstr "Ja"
 
 
-#: src/views/terminal/Terminal.vue:135
+#: src/views/terminal/Terminal.vue:132
 msgid ""
 msgid ""
 "You are accessing this terminal over an insecure HTTP connection on a "
 "You are accessing this terminal over an insecure HTTP connection on a "
 "non-localhost domain. This may expose sensitive information."
 "non-localhost domain. This may expose sensitive information."
@@ -5130,9 +5175,6 @@ msgstr "Deine Passkeys"
 #~ msgstr[0] "Gesamt %{total} Element"
 #~ msgstr[0] "Gesamt %{total} Element"
 #~ msgstr[1] "Gesamt %{total} Elemente"
 #~ msgstr[1] "Gesamt %{total} Elemente"
 
 
-#~ msgid "Updated successfully"
-#~ msgstr "Erfolgreich aktualisiert"
-
 #~ msgid "View Details"
 #~ msgid "View Details"
 #~ msgstr "Details anzeigen"
 #~ msgstr "Details anzeigen"
 
 

+ 122 - 72
app/src/language/en/app.po

@@ -87,7 +87,7 @@ msgstr ""
 msgid "2FA"
 msgid "2FA"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:69
+#: src/views/user/UserProfile.vue:151
 msgid "2FA Settings"
 msgid "2FA Settings"
 msgstr ""
 msgstr ""
 
 
@@ -113,8 +113,7 @@ msgstr ""
 msgid "ACME User"
 msgid "ACME User"
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/notificationColumns.tsx:66
-#: src/views/preference/tabs/AuthSettings.vue:29
+#: src/views/preference/tabs/AuthSettings.vue:26
 msgid "Action"
 msgid "Action"
 msgstr ""
 msgstr ""
 
 
@@ -125,6 +124,7 @@ msgstr ""
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/nginx_log/NginxLogList.vue:52
 #: src/views/nginx_log/NginxLogList.vue:52
+#: src/views/notification/notificationColumns.tsx:72
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
 #: src/views/site/site_list/columns.tsx:129 src/views/stream/columns.tsx:64
 #: src/views/site/site_list/columns.tsx:129 src/views/stream/columns.tsx:64
 #: src/views/user/userColumns.tsx:58
 #: src/views/user/userColumns.tsx:58
@@ -141,10 +141,10 @@ msgid "Actual worker to configured ratio"
 msgstr ""
 msgstr ""
 
 
 #: src/components/NgxConfigEditor/NgxServer.vue:112
 #: src/components/NgxConfigEditor/NgxServer.vue:112
-#: src/components/NgxConfigEditor/NgxUpstream.vue:155 src/language/curd.ts:19
+#: src/components/NgxConfigEditor/NgxUpstream.vue:159 src/language/curd.ts:19
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
-#: src/views/stream/StreamList.vue:120
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr ""
 msgstr ""
 
 
@@ -171,7 +171,7 @@ msgstr ""
 msgid "Add Site"
 msgid "Add Site"
 msgstr ""
 msgstr ""
 
 
-#: src/views/stream/StreamList.vue:173
+#: src/views/stream/StreamList.vue:174
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr ""
 msgstr ""
 
 
@@ -229,7 +229,7 @@ msgstr ""
 msgid "Arch"
 msgid "Arch"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:161
+#: src/views/preference/tabs/AuthSettings.vue:130
 msgid "Are you sure to delete this banned IP immediately?"
 msgid "Are you sure to delete this banned IP immediately?"
 msgstr ""
 msgstr ""
 
 
@@ -258,8 +258,8 @@ msgstr ""
 msgid "Are you sure you want to delete permanently?"
 msgid "Are you sure you want to delete permanently?"
 msgstr ""
 msgstr ""
 
 
-#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:99
-#: src/views/stream/StreamList.vue:156
+#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:100
+#: src/views/stream/StreamList.vue:157
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr ""
 msgstr ""
 
 
@@ -299,7 +299,7 @@ msgstr ""
 msgid "Attempt to fix"
 msgid "Attempt to fix"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:20
+#: src/views/preference/tabs/AuthSettings.vue:17
 msgid "Attempts"
 msgid "Attempts"
 msgstr ""
 msgstr ""
 
 
@@ -311,7 +311,7 @@ msgstr ""
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:87
+#: src/views/preference/tabs/AuthSettings.vue:56
 msgid "Authentication Settings"
 msgid "Authentication Settings"
 msgstr ""
 msgstr ""
 
 
@@ -386,15 +386,15 @@ msgstr ""
 msgid "Backup has been downloaded successfully"
 msgid "Backup has been downloaded successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:128
+#: src/views/preference/tabs/AuthSettings.vue:97
 msgid "Ban Threshold Minutes"
 msgid "Ban Threshold Minutes"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:149
+#: src/views/preference/tabs/AuthSettings.vue:118
 msgid "Banned IPs"
 msgid "Banned IPs"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:23
+#: src/views/preference/tabs/AuthSettings.vue:20
 msgid "Banned Until"
 msgid "Banned Until"
 msgstr ""
 msgstr ""
 
 
@@ -502,7 +502,7 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
-#: src/views/site/components/SiteStatusSegmented.vue:97
+#: src/views/site/components/SiteStatusSelect.vue:124
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
@@ -621,6 +621,10 @@ msgstr ""
 msgid "Change Certificate"
 msgid "Change Certificate"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:181
+msgid "Change Password"
+msgstr ""
+
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 msgid "Changed Certificate"
 msgid "Changed Certificate"
 msgid_plural "Changed Certificates"
 msgid_plural "Changed Certificates"
@@ -878,6 +882,10 @@ msgstr ""
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:204
+msgid "Confirm New Password"
+msgstr ""
+
 #: src/views/dashboard/Environments.vue:141
 #: src/views/dashboard/Environments.vue:141
 msgid "Connected"
 msgid "Connected"
 msgstr ""
 msgstr ""
@@ -886,7 +894,7 @@ msgstr ""
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr ""
 msgstr ""
 
 
-#: src/views/terminal/Terminal.vue:142
+#: src/views/terminal/Terminal.vue:139
 msgid "Connection lost, please refresh the page."
 msgid "Connection lost, please refresh the page."
 msgstr ""
 msgstr ""
 
 
@@ -942,7 +950,7 @@ msgstr ""
 msgid "CPU:"
 msgid "CPU:"
 msgstr ""
 msgstr ""
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:166
+#: src/components/NgxConfigEditor/NgxUpstream.vue:170
 msgid "Create"
 msgid "Create"
 msgstr ""
 msgstr ""
 
 
@@ -969,7 +977,7 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #: src/views/environments/group/columns.ts:29
 #: src/views/environments/group/columns.ts:29
-#: src/views/notification/notificationColumns.tsx:45
+#: src/views/notification/notificationColumns.tsx:51
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/user/userColumns.tsx:46
 #: src/views/user/userColumns.tsx:46
@@ -1008,6 +1016,10 @@ msgstr ""
 msgid "Current Content"
 msgid "Current Content"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:186
+msgid "Current Password"
+msgstr ""
+
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 msgid "Current usage"
 msgid "Current usage"
 msgstr ""
 msgstr ""
@@ -1047,8 +1059,8 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/views/certificate/components/RemoveCert.vue:88
 #: src/views/certificate/components/RemoveCert.vue:88
-#: src/views/site/site_list/SiteList.vue:108
-#: src/views/stream/StreamList.vue:165
+#: src/views/site/site_list/SiteList.vue:109
+#: src/views/stream/StreamList.vue:166
 msgid "Delete"
 msgid "Delete"
 msgstr ""
 msgstr ""
 
 
@@ -1125,7 +1137,7 @@ msgstr ""
 msgid "Destination file: {0} already exists"
 msgid "Destination file: {0} already exists"
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/notificationColumns.tsx:60
+#: src/views/notification/notificationColumns.tsx:66
 msgid "Details"
 msgid "Details"
 msgstr ""
 msgstr ""
 
 
@@ -1169,11 +1181,11 @@ msgstr ""
 msgid "Directory path to store cache files"
 msgid "Directory path to store cache files"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:88
+#: src/views/site/components/SiteStatusSelect.vue:115
 msgid "disable"
 msgid "disable"
 msgstr ""
 msgstr ""
 
 
-#: src/views/stream/StreamList.vue:136
+#: src/views/stream/StreamList.vue:137
 msgid "Disable"
 msgid "Disable"
 msgstr ""
 msgstr ""
 
 
@@ -1234,7 +1246,7 @@ msgstr ""
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:134
+#: src/views/site/components/SiteStatusSelect.vue:162
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/stream/components/StreamEditor.vue:30
 #: src/views/stream/components/StreamEditor.vue:30
@@ -1242,7 +1254,7 @@ msgstr ""
 msgid "Disabled"
 msgid "Disabled"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:40
+#: src/views/site/components/SiteStatusSelect.vue:67
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/StreamList.vue:56
 #: src/views/stream/StreamList.vue:56
 msgid "Disabled successfully"
 msgid "Disabled successfully"
@@ -1270,7 +1282,7 @@ msgstr ""
 msgid "Do not enable this option unless you are sure that you need it."
 msgid "Do not enable this option unless you are sure that you need it."
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:93
+#: src/views/site/components/SiteStatusSelect.vue:120
 msgid "Do you want to %{action} this site?"
 msgid "Do you want to %{action} this site?"
 msgstr ""
 msgstr ""
 
 
@@ -1346,9 +1358,9 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:94
+#: src/views/site/site_list/SiteList.vue:95
 #: src/views/stream/components/StreamDuplicate.vue:64
 #: src/views/stream/components/StreamDuplicate.vue:64
-#: src/views/stream/StreamList.vue:151
+#: src/views/stream/StreamList.vue:152
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr ""
 msgstr ""
 
 
@@ -1392,11 +1404,11 @@ msgstr ""
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:87
+#: src/views/site/components/SiteStatusSelect.vue:114
 msgid "enable"
 msgid "enable"
 msgstr ""
 msgstr ""
 
 
-#: src/views/stream/StreamList.vue:144
+#: src/views/stream/StreamList.vue:145
 msgid "Enable"
 msgid "Enable"
 msgstr ""
 msgstr ""
 
 
@@ -1494,7 +1506,7 @@ msgstr ""
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:130
+#: src/views/site/components/SiteStatusSelect.vue:159
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/stream/components/RightPanel/Basic.vue:62
 #: src/views/stream/components/RightPanel/Basic.vue:62
@@ -1503,7 +1515,7 @@ msgstr ""
 msgid "Enabled"
 msgid "Enabled"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:27
+#: src/views/site/components/SiteStatusSelect.vue:54
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/StreamList.vue:46
 #: src/views/stream/StreamList.vue:46
@@ -1712,23 +1724,23 @@ msgstr ""
 msgid "Failed to delete certificate from database: %{error}"
 msgid "Failed to delete certificate from database: %{error}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:46
+#: src/views/site/components/SiteStatusSelect.vue:73
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/StreamList.vue:60
 #: src/views/stream/StreamList.vue:60
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:72
+#: src/views/site/components/SiteStatusSelect.vue:99
 msgid "Failed to disable maintenance mode %{msg}"
 msgid "Failed to disable maintenance mode %{msg}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:33
+#: src/views/site/components/SiteStatusSelect.vue:60
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/StreamList.vue:50
 #: src/views/stream/StreamList.vue:50
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:59
+#: src/views/site/components/SiteStatusSelect.vue:86
 msgid "Failed to enable maintenance mode %{msg}"
 msgid "Failed to enable maintenance mode %{msg}"
 msgstr ""
 msgstr ""
 
 
@@ -2039,7 +2051,7 @@ msgstr ""
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:144
+#: src/views/preference/tabs/AuthSettings.vue:113
 msgid ""
 msgid ""
 "If the number of login failed attempts from a ip reach the max attempts in "
 "If the number of login failed attempts from a ip reach the max attempts in "
 "ban threshold minutes, the ip will be banned for a period of time."
 "ban threshold minutes, the ip will be banned for a period of time."
@@ -2198,7 +2210,7 @@ msgstr ""
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:17
+#: src/views/preference/tabs/AuthSettings.vue:14
 msgid "IP"
 msgid "IP"
 msgstr ""
 msgstr ""
 
 
@@ -2311,7 +2323,7 @@ msgstr ""
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environments/list/Environment.vue:80
+#: src/views/environments/list/Environment.vue:81
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr ""
 msgstr ""
 
 
@@ -2399,17 +2411,17 @@ msgid ""
 "minutes."
 "minutes."
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:138
+#: src/views/site/components/SiteStatusSelect.vue:165
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_list/columns.tsx:118
 #: src/views/site/site_list/columns.tsx:118
 msgid "Maintenance"
 msgid "Maintenance"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:66
+#: src/views/site/components/SiteStatusSelect.vue:93
 msgid "Maintenance mode disabled successfully"
 msgid "Maintenance mode disabled successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:53
+#: src/views/site/components/SiteStatusSelect.vue:80
 msgid "Maintenance mode enabled successfully"
 msgid "Maintenance mode enabled successfully"
 msgstr ""
 msgstr ""
 
 
@@ -2474,7 +2486,7 @@ msgstr ""
 msgid "Master Process"
 msgid "Master Process"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:134
+#: src/views/preference/tabs/AuthSettings.vue:103
 msgid "Max Attempts"
 msgid "Max Attempts"
 msgstr ""
 msgstr ""
 
 
@@ -2573,7 +2585,7 @@ msgstr ""
 msgid "Multi-line Directive"
 msgid "Multi-line Directive"
 msgstr ""
 msgstr ""
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:178
+#: src/components/NgxConfigEditor/NgxUpstream.vue:182
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateList/certColumns.tsx:9
 #: src/views/certificate/CertificateList/certColumns.tsx:9
@@ -2590,7 +2602,7 @@ msgstr ""
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/StreamDuplicate.vue:71
 #: src/views/stream/components/StreamDuplicate.vue:71
-#: src/views/stream/StreamList.vue:178
+#: src/views/stream/StreamList.vue:179
 msgid "Name"
 msgid "Name"
 msgstr ""
 msgstr ""
 
 
@@ -2622,6 +2634,10 @@ msgstr ""
 msgid "New name"
 msgid "New name"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:195
+msgid "New Password"
+msgstr ""
+
 #: src/views/config/ConfigEditor.vue:328
 #: src/views/config/ConfigEditor.vue:328
 msgid "New Path"
 msgid "New Path"
 msgstr ""
 msgstr ""
@@ -2835,9 +2851,9 @@ msgstr ""
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
-#: src/views/preference/tabs/AuthSettings.vue:163
+#: src/views/preference/tabs/AuthSettings.vue:132
 #: src/views/preference/tabs/CertSettings.vue:73
 #: src/views/preference/tabs/CertSettings.vue:73
-#: src/views/site/site_list/SiteList.vue:97 src/views/stream/StreamList.vue:154
+#: src/views/site/site_list/SiteList.vue:98 src/views/stream/StreamList.vue:155
 msgid "No"
 msgid "No"
 msgstr ""
 msgstr ""
 
 
@@ -2966,6 +2982,7 @@ msgid "Off"
 msgstr ""
 msgstr ""
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/components/NgxConfigEditor/NgxUpstream.vue:145
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -2977,13 +2994,13 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/views/notification/Notification.vue:39
 #: src/views/notification/Notification.vue:39
-#: src/views/site/components/SiteStatusSegmented.vue:96
+#: src/views/site/components/SiteStatusSelect.vue:123
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
-#: src/views/site/site_list/SiteList.vue:98
+#: src/views/site/site_list/SiteList.vue:99
 #: src/views/stream/components/RightPanel/Basic.vue:46
 #: src/views/stream/components/RightPanel/Basic.vue:46
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:156
 #: src/views/system/Backup/BackupCreator.vue:149
 #: src/views/system/Backup/BackupCreator.vue:149
 msgid "OK"
 msgid "OK"
 msgstr ""
 msgstr ""
@@ -3099,6 +3116,14 @@ msgstr ""
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:96
+msgid "Password updated successfully"
+msgstr ""
+
+#: src/views/user/UserProfile.vue:75
+msgid "Passwords do not match"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
@@ -3138,6 +3163,10 @@ msgstr ""
 msgid "Performing core upgrade"
 msgid "Performing core upgrade"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:121
+msgid "Personal Information"
+msgstr ""
+
 #: src/constants/errors/self_check.ts:19
 #: src/constants/errors/self_check.ts:19
 msgid "PID path not exist"
 msgid "PID path not exist"
 msgstr ""
 msgstr ""
@@ -3253,17 +3282,17 @@ msgstr ""
 msgid "Please select at least one item"
 msgid "Please select at least one item"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environments/list/Environment.vue:112
+#: src/views/environments/list/Environment.vue:113
 #: src/views/environments/list/Environment.vue:35
 #: src/views/environments/list/Environment.vue:35
 msgid "Please select at least one node to reload Nginx"
 msgid "Please select at least one node to reload Nginx"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environments/list/Environment.vue:133
+#: src/views/environments/list/Environment.vue:134
 #: src/views/environments/list/Environment.vue:49
 #: src/views/environments/list/Environment.vue:49
 msgid "Please select at least one node to restart Nginx"
 msgid "Please select at least one node to restart Nginx"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environments/list/Environment.vue:91
+#: src/views/environments/list/Environment.vue:92
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr ""
 msgstr ""
 
 
@@ -3425,8 +3454,8 @@ msgstr ""
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/EnvGroup.vue:50
 #: src/views/environments/group/EnvGroup.vue:50
-#: src/views/environments/list/Environment.vue:120
-#: src/views/environments/list/Environment.vue:128
+#: src/views/environments/list/Environment.vue:121
+#: src/views/environments/list/Environment.vue:129
 msgid "Reload Nginx"
 msgid "Reload Nginx"
 msgstr ""
 msgstr ""
 
 
@@ -3462,12 +3491,12 @@ msgstr ""
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:168
+#: src/views/preference/tabs/AuthSettings.vue:137
 msgid "Remove"
 msgid "Remove"
 msgstr ""
 msgstr ""
 
 
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
-#: src/views/preference/tabs/AuthSettings.vue:50
+#: src/views/preference/tabs/AuthSettings.vue:47
 msgid "Remove successfully"
 msgid "Remove successfully"
 msgstr ""
 msgstr ""
 
 
@@ -3603,8 +3632,8 @@ msgid "Restart"
 msgstr ""
 msgstr ""
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
-#: src/views/environments/list/Environment.vue:141
-#: src/views/environments/list/Environment.vue:149
+#: src/views/environments/list/Environment.vue:142
+#: src/views/environments/list/Environment.vue:150
 msgid "Restart Nginx"
 msgid "Restart Nginx"
 msgstr ""
 msgstr ""
 
 
@@ -3682,15 +3711,15 @@ msgid ""
 "action cannot be undone."
 "action cannot be undone."
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:106
+#: src/views/preference/tabs/AuthSettings.vue:75
 msgid "RP Display Name"
 msgid "RP Display Name"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:112
+#: src/views/preference/tabs/AuthSettings.vue:81
 msgid "RP Origins"
 msgid "RP Origins"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:100
+#: src/views/preference/tabs/AuthSettings.vue:69
 msgid "RPID"
 msgid "RPID"
 msgstr ""
 msgstr ""
 
 
@@ -3795,6 +3824,10 @@ msgstr ""
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:175
+msgid "Security Settings"
+msgstr ""
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 msgid "Security Token"
 msgid "Security Token"
@@ -3868,7 +3901,7 @@ msgid ""
 "step of DNS challenge."
 "step of DNS challenge."
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:89
+#: src/views/site/components/SiteStatusSelect.vue:116
 msgid "set to maintenance mode"
 msgid "set to maintenance mode"
 msgstr ""
 msgstr ""
 
 
@@ -4409,12 +4442,12 @@ msgid ""
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:123
+#: src/views/preference/tabs/AuthSettings.vue:92
 msgid "Throttle"
 msgid "Throttle"
 msgstr ""
 msgstr ""
 
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
-#: src/views/preference/tabs/AuthSettings.vue:143
+#: src/views/preference/tabs/AuthSettings.vue:112
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 msgid "Tips"
 msgid "Tips"
 msgstr ""
 msgstr ""
@@ -4425,7 +4458,7 @@ msgid ""
 "worker_processes or worker_connections"
 "worker_processes or worker_connections"
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/notificationColumns.tsx:52
+#: src/views/notification/notificationColumns.tsx:58
 msgid "Title"
 msgid "Title"
 msgstr ""
 msgstr ""
 
 
@@ -4531,6 +4564,14 @@ msgstr ""
 msgid "Unknown"
 msgid "Unknown"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:218
+msgid "Update Password"
+msgstr ""
+
+#: src/views/user/UserProfile.vue:142
+msgid "Update Profile"
+msgstr ""
+
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr ""
 msgstr ""
@@ -4548,8 +4589,8 @@ msgid "Updated at"
 msgstr ""
 msgstr ""
 
 
 #: src/routes/modules/system.ts:33
 #: src/routes/modules/system.ts:33
-#: src/views/environments/list/Environment.vue:107
-#: src/views/environments/list/Environment.vue:99
+#: src/views/environments/list/Environment.vue:100
+#: src/views/environments/list/Environment.vue:108
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr ""
 msgstr ""
@@ -4575,7 +4616,7 @@ msgstr ""
 msgid "Upload Folders"
 msgid "Upload Folders"
 msgstr ""
 msgstr ""
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:173
+#: src/components/NgxConfigEditor/NgxUpstream.vue:177
 msgid "Upstream Name"
 msgid "Upstream Name"
 msgstr ""
 msgstr ""
 
 
@@ -4607,11 +4648,20 @@ msgstr ""
 msgid "User banned"
 msgid "User banned"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:62
+msgid "User info updated successfully"
+msgstr ""
+
 #: src/constants/errors/user.ts:8
 #: src/constants/errors/user.ts:8
 msgid "User not enabled otp as 2fa"
 msgid "User not enabled otp as 2fa"
 msgstr ""
 msgstr ""
 
 
+#: src/routes/modules/user.ts:19
+msgid "User Profile"
+msgstr ""
+
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
+#: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr ""
 msgstr ""
 
 
@@ -4695,7 +4745,7 @@ msgid ""
 "Nginx. Are you sure you want to continue?"
 "Nginx. Are you sure you want to continue?"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:96
+#: src/views/preference/tabs/AuthSettings.vue:65
 msgid "Webauthn"
 msgid "Webauthn"
 msgstr ""
 msgstr ""
 
 
@@ -4768,12 +4818,12 @@ msgstr ""
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
-#: src/views/preference/tabs/AuthSettings.vue:162
+#: src/views/preference/tabs/AuthSettings.vue:131
 #: src/views/preference/tabs/CertSettings.vue:72
 #: src/views/preference/tabs/CertSettings.vue:72
 msgid "Yes"
 msgid "Yes"
 msgstr ""
 msgstr ""
 
 
-#: src/views/terminal/Terminal.vue:135
+#: src/views/terminal/Terminal.vue:132
 msgid ""
 msgid ""
 "You are accessing this terminal over an insecure HTTP connection on a non-"
 "You are accessing this terminal over an insecure HTTP connection on a non-"
 "localhost domain. This may expose sensitive information."
 "localhost domain. This may expose sensitive information."

+ 127 - 85
app/src/language/es/app.po

@@ -110,7 +110,7 @@ msgstr "[Nginx UI] Escribiendo certificado en el disco"
 msgid "2FA"
 msgid "2FA"
 msgstr "2FA"
 msgstr "2FA"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:69
+#: src/views/user/UserProfile.vue:151
 msgid "2FA Settings"
 msgid "2FA Settings"
 msgstr "Configuración de 2FA"
 msgstr "Configuración de 2FA"
 
 
@@ -136,8 +136,7 @@ msgstr "Logs de acceso"
 msgid "ACME User"
 msgid "ACME User"
 msgstr "Usuario ACME"
 msgstr "Usuario ACME"
 
 
-#: src/views/notification/notificationColumns.tsx:66
-#: src/views/preference/tabs/AuthSettings.vue:29
+#: src/views/preference/tabs/AuthSettings.vue:26
 msgid "Action"
 msgid "Action"
 msgstr "Acción"
 msgstr "Acción"
 
 
@@ -148,9 +147,9 @@ msgstr "Acción"
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/nginx_log/NginxLogList.vue:52
 #: src/views/nginx_log/NginxLogList.vue:52
+#: src/views/notification/notificationColumns.tsx:72
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
-#: src/views/site/site_list/columns.tsx:129
-#: src/views/stream/columns.tsx:64
+#: src/views/site/site_list/columns.tsx:129 src/views/stream/columns.tsx:64
 #: src/views/user/userColumns.tsx:58
 #: src/views/user/userColumns.tsx:58
 msgid "Actions"
 msgid "Actions"
 msgstr "Acciones"
 msgstr "Acciones"
@@ -165,10 +164,10 @@ msgid "Actual worker to configured ratio"
 msgstr "Proporción real de trabajadores a configurados"
 msgstr "Proporción real de trabajadores a configurados"
 
 
 #: src/components/NgxConfigEditor/NgxServer.vue:112
 #: src/components/NgxConfigEditor/NgxServer.vue:112
-#: src/components/NgxConfigEditor/NgxUpstream.vue:155 src/language/curd.ts:19
+#: src/components/NgxConfigEditor/NgxUpstream.vue:159 src/language/curd.ts:19
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
-#: src/views/stream/StreamList.vue:120
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "Agregar"
 msgstr "Agregar"
 
 
@@ -195,7 +194,7 @@ msgstr "Agregar Ubicación"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "Agregar Sitio"
 msgstr "Agregar Sitio"
 
 
-#: src/views/stream/StreamList.vue:173
+#: src/views/stream/StreamList.vue:174
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "Agregar Stream"
 msgstr "Agregar Stream"
 
 
@@ -255,7 +254,7 @@ msgstr "Aplicación"
 msgid "Arch"
 msgid "Arch"
 msgstr "\"Arquitectura\""
 msgstr "\"Arquitectura\""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:161
+#: src/views/preference/tabs/AuthSettings.vue:130
 msgid "Are you sure to delete this banned IP immediately?"
 msgid "Are you sure to delete this banned IP immediately?"
 msgstr "¿Está seguro de eliminar esta IP bloqueada inmediatamente?"
 msgstr "¿Está seguro de eliminar esta IP bloqueada inmediatamente?"
 
 
@@ -284,8 +283,8 @@ msgstr "¿Está seguro de que desea borrar el registro del chat?"
 msgid "Are you sure you want to delete permanently?"
 msgid "Are you sure you want to delete permanently?"
 msgstr "¿Estás seguro de que quieres eliminar permanentemente?"
 msgstr "¿Estás seguro de que quieres eliminar permanentemente?"
 
 
-#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:99
-#: src/views/stream/StreamList.vue:156
+#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:100
+#: src/views/stream/StreamList.vue:157
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "¿Está seguro de que quiere borrar?"
 msgstr "¿Está seguro de que quiere borrar?"
 
 
@@ -329,7 +328,7 @@ msgstr "Asistente"
 msgid "Attempt to fix"
 msgid "Attempt to fix"
 msgstr "Intentar solucionar"
 msgstr "Intentar solucionar"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:20
+#: src/views/preference/tabs/AuthSettings.vue:17
 msgid "Attempts"
 msgid "Attempts"
 msgstr "Intentos"
 msgstr "Intentos"
 
 
@@ -341,7 +340,7 @@ msgstr "Autenticación"
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr "Autenticarse con una llave de acceso"
 msgstr "Autenticarse con una llave de acceso"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:87
+#: src/views/preference/tabs/AuthSettings.vue:56
 msgid "Authentication Settings"
 msgid "Authentication Settings"
 msgstr "Configuración de autenticación"
 msgstr "Configuración de autenticación"
 
 
@@ -418,15 +417,15 @@ msgstr "Archivo de respaldo no encontrado: {0}"
 msgid "Backup has been downloaded successfully"
 msgid "Backup has been downloaded successfully"
 msgstr "La copia de seguridad se ha descargado correctamente"
 msgstr "La copia de seguridad se ha descargado correctamente"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:128
+#: src/views/preference/tabs/AuthSettings.vue:97
 msgid "Ban Threshold Minutes"
 msgid "Ban Threshold Minutes"
 msgstr "Umbral de Prohibición en Minutos"
 msgstr "Umbral de Prohibición en Minutos"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:149
+#: src/views/preference/tabs/AuthSettings.vue:118
 msgid "Banned IPs"
 msgid "Banned IPs"
 msgstr "IPs prohibidas"
 msgstr "IPs prohibidas"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:23
+#: src/views/preference/tabs/AuthSettings.vue:20
 msgid "Banned Until"
 msgid "Banned Until"
 msgstr "Bloqueado hasta"
 msgstr "Bloqueado hasta"
 
 
@@ -540,7 +539,7 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
-#: src/views/site/components/SiteStatusSegmented.vue:97
+#: src/views/site/components/SiteStatusSelect.vue:124
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
@@ -661,6 +660,10 @@ msgstr "Método de desafío"
 msgid "Change Certificate"
 msgid "Change Certificate"
 msgstr "Cambiar Certificado"
 msgstr "Cambiar Certificado"
 
 
+#: src/views/user/UserProfile.vue:181
+msgid "Change Password"
+msgstr "Cambiar contraseña"
+
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 msgid "Changed Certificate"
 msgid "Changed Certificate"
 msgid_plural "Changed Certificates"
 msgid_plural "Changed Certificates"
@@ -829,13 +832,11 @@ msgstr ""
 "Haga clic o arrastre el archivo de copia de seguridad a esta área para "
 "Haga clic o arrastre el archivo de copia de seguridad a esta área para "
 "cargar"
 "cargar"
 
 
-#: src/language/curd.ts:49
-#: src/language/curd.ts:53
+#: src/language/curd.ts:49 src/language/curd.ts:53
 msgid "Click or drag files to this area to upload"
 msgid "Click or drag files to this area to upload"
 msgstr "Haz clic o arrastra archivos a esta área para subirlos"
 msgstr "Haz clic o arrastra archivos a esta área para subirlos"
 
 
-#: src/language/curd.ts:50
-#: src/language/curd.ts:54
+#: src/language/curd.ts:50 src/language/curd.ts:54
 msgid "Click or drag folders to this area to upload"
 msgid "Click or drag folders to this area to upload"
 msgstr "Haz clic o arrastra carpetas a esta área para subir"
 msgstr "Haz clic o arrastra carpetas a esta área para subir"
 
 
@@ -955,6 +956,10 @@ msgstr "Configuraciones"
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr "Configurar SSL"
 msgstr "Configurar SSL"
 
 
+#: src/views/user/UserProfile.vue:204
+msgid "Confirm New Password"
+msgstr "Confirmar nueva contraseña"
+
 #: src/views/dashboard/Environments.vue:141
 #: src/views/dashboard/Environments.vue:141
 msgid "Connected"
 msgid "Connected"
 msgstr "Conectado"
 msgstr "Conectado"
@@ -963,7 +968,7 @@ msgstr "Conectado"
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Error de conexión, intentando reconectar..."
 msgstr "Error de conexión, intentando reconectar..."
 
 
-#: src/views/terminal/Terminal.vue:142
+#: src/views/terminal/Terminal.vue:139
 msgid "Connection lost, please refresh the page."
 msgid "Connection lost, please refresh the page."
 msgstr "Conexión perdida, por favor actualice la página."
 msgstr "Conexión perdida, por favor actualice la página."
 
 
@@ -1021,7 +1026,7 @@ msgstr ""
 msgid "CPU:"
 msgid "CPU:"
 msgstr "CPU:"
 msgstr "CPU:"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:166
+#: src/components/NgxConfigEditor/NgxUpstream.vue:170
 msgid "Create"
 msgid "Create"
 msgstr "Crear"
 msgstr "Crear"
 
 
@@ -1051,7 +1056,7 @@ msgstr ""
 "automáticamente en tu computadora."
 "automáticamente en tu computadora."
 
 
 #: src/views/environments/group/columns.ts:29
 #: src/views/environments/group/columns.ts:29
-#: src/views/notification/notificationColumns.tsx:45
+#: src/views/notification/notificationColumns.tsx:51
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/user/userColumns.tsx:46
 #: src/views/user/userColumns.tsx:46
@@ -1090,6 +1095,10 @@ msgstr "Conexiones activas actuales"
 msgid "Current Content"
 msgid "Current Content"
 msgstr "Contenido actual"
 msgstr "Contenido actual"
 
 
+#: src/views/user/UserProfile.vue:186
+msgid "Current Password"
+msgstr "Contraseña actual"
+
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 msgid "Current usage"
 msgid "Current usage"
 msgstr "Uso actual"
 msgstr "Uso actual"
@@ -1133,8 +1142,8 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/views/certificate/components/RemoveCert.vue:88
 #: src/views/certificate/components/RemoveCert.vue:88
-#: src/views/site/site_list/SiteList.vue:108
-#: src/views/stream/StreamList.vue:165
+#: src/views/site/site_list/SiteList.vue:109
+#: src/views/stream/StreamList.vue:166
 msgid "Delete"
 msgid "Delete"
 msgstr "Eliminar"
 msgstr "Eliminar"
 
 
@@ -1211,7 +1220,7 @@ msgstr "El archivo de destino ya existe"
 msgid "Destination file: {0} already exists"
 msgid "Destination file: {0} already exists"
 msgstr "Archivo de destino: {0} ya existe"
 msgstr "Archivo de destino: {0} ya existe"
 
 
-#: src/views/notification/notificationColumns.tsx:60
+#: src/views/notification/notificationColumns.tsx:66
 msgid "Details"
 msgid "Details"
 msgstr "Detalles"
 msgstr "Detalles"
 
 
@@ -1255,11 +1264,11 @@ msgstr "Niveles de directorio"
 msgid "Directory path to store cache files"
 msgid "Directory path to store cache files"
 msgstr "Ruta del directorio para almacenar archivos de caché"
 msgstr "Ruta del directorio para almacenar archivos de caché"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:88
+#: src/views/site/components/SiteStatusSelect.vue:115
 msgid "disable"
 msgid "disable"
 msgstr "Desactivar"
 msgstr "Desactivar"
 
 
-#: src/views/stream/StreamList.vue:136
+#: src/views/stream/StreamList.vue:137
 msgid "Disable"
 msgid "Disable"
 msgstr "Desactivar"
 msgstr "Desactivar"
 
 
@@ -1320,7 +1329,7 @@ msgstr "Deshabilitar el flujo %{name} desde %{node} con éxito"
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:134
+#: src/views/site/components/SiteStatusSelect.vue:162
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/stream/components/StreamEditor.vue:30
 #: src/views/stream/components/StreamEditor.vue:30
@@ -1328,7 +1337,7 @@ msgstr "Deshabilitar el flujo %{name} desde %{node} con éxito"
 msgid "Disabled"
 msgid "Disabled"
 msgstr "Desactivado"
 msgstr "Desactivado"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:40
+#: src/views/site/components/SiteStatusSelect.vue:67
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/StreamList.vue:56
 #: src/views/stream/StreamList.vue:56
 msgid "Disabled successfully"
 msgid "Disabled successfully"
@@ -1356,7 +1365,7 @@ msgstr "DNS01"
 msgid "Do not enable this option unless you are sure that you need it."
 msgid "Do not enable this option unless you are sure that you need it."
 msgstr "No habilite esta opción a menos que esté seguro de que la necesita."
 msgstr "No habilite esta opción a menos que esté seguro de que la necesita."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:93
+#: src/views/site/components/SiteStatusSelect.vue:120
 msgid "Do you want to %{action} this site?"
 msgid "Do you want to %{action} this site?"
 msgstr "¿Desea %{action} este sitio?"
 msgstr "¿Desea %{action} este sitio?"
 
 
@@ -1436,9 +1445,9 @@ msgstr ""
 "se ejecutan en el host local."
 "se ejecutan en el host local."
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:94
+#: src/views/site/site_list/SiteList.vue:95
 #: src/views/stream/components/StreamDuplicate.vue:64
 #: src/views/stream/components/StreamDuplicate.vue:64
-#: src/views/stream/StreamList.vue:151
+#: src/views/stream/StreamList.vue:152
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "Duplicar"
 msgstr "Duplicar"
 
 
@@ -1482,11 +1491,11 @@ msgstr "Correo"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Correo (*)"
 msgstr "Correo (*)"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:87
+#: src/views/site/components/SiteStatusSelect.vue:114
 msgid "enable"
 msgid "enable"
 msgstr "habilitar"
 msgstr "habilitar"
 
 
-#: src/views/stream/StreamList.vue:144
+#: src/views/stream/StreamList.vue:145
 msgid "Enable"
 msgid "Enable"
 msgstr "Habilitar"
 msgstr "Habilitar"
 
 
@@ -1584,7 +1593,7 @@ msgstr "Habilitar TOTP"
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:130
+#: src/views/site/components/SiteStatusSelect.vue:159
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/stream/components/RightPanel/Basic.vue:62
 #: src/views/stream/components/RightPanel/Basic.vue:62
@@ -1593,7 +1602,7 @@ msgstr "Habilitar TOTP"
 msgid "Enabled"
 msgid "Enabled"
 msgstr "Habilitado"
 msgstr "Habilitado"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:27
+#: src/views/site/components/SiteStatusSelect.vue:54
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/StreamList.vue:46
 #: src/views/stream/StreamList.vue:46
@@ -1804,23 +1813,23 @@ msgstr "No se pudo eliminar el certificado"
 msgid "Failed to delete certificate from database: %{error}"
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "Error al eliminar el certificado de la base de datos: %{error}"
 msgstr "Error al eliminar el certificado de la base de datos: %{error}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:46
+#: src/views/site/components/SiteStatusSelect.vue:73
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/StreamList.vue:60
 #: src/views/stream/StreamList.vue:60
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "Error al deshabilitar %{msg}"
 msgstr "Error al deshabilitar %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:72
+#: src/views/site/components/SiteStatusSelect.vue:99
 msgid "Failed to disable maintenance mode %{msg}"
 msgid "Failed to disable maintenance mode %{msg}"
 msgstr "Error al desactivar el modo de mantenimiento: %{msg}"
 msgstr "Error al desactivar el modo de mantenimiento: %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:33
+#: src/views/site/components/SiteStatusSelect.vue:60
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/StreamList.vue:50
 #: src/views/stream/StreamList.vue:50
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:59
+#: src/views/site/components/SiteStatusSelect.vue:86
 msgid "Failed to enable maintenance mode %{msg}"
 msgid "Failed to enable maintenance mode %{msg}"
 msgstr "No se pudo activar el modo de mantenimiento: %{msg}"
 msgstr "No se pudo activar el modo de mantenimiento: %{msg}"
 
 
@@ -2133,7 +2142,7 @@ msgstr "Número ICP"
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr "Si se deja en blanco, se utilizará el directorio CA predeterminado."
 msgstr "Si se deja en blanco, se utilizará el directorio CA predeterminado."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:144
+#: src/views/preference/tabs/AuthSettings.vue:113
 msgid ""
 msgid ""
 "If the number of login failed attempts from a ip reach the max attempts in "
 "If the number of login failed attempts from a ip reach the max attempts in "
 "ban threshold minutes, the ip will be banned for a period of time."
 "ban threshold minutes, the ip will be banned for a period of time."
@@ -2301,7 +2310,7 @@ msgstr "Formato de solicitud no válido"
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "Formato de token de seguridad no válido"
 msgstr "Formato de token de seguridad no válido"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:17
+#: src/views/preference/tabs/AuthSettings.vue:14
 msgid "IP"
 msgid "IP"
 msgstr "IP"
 msgstr "IP"
 
 
@@ -2416,7 +2425,7 @@ msgstr "Lista"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "Promedios de carga:"
 msgstr "Promedios de carga:"
 
 
-#: src/views/environments/list/Environment.vue:80
+#: src/views/environments/list/Environment.vue:81
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "Cargar desde configuraciones"
 msgstr "Cargar desde configuraciones"
 
 
@@ -2515,17 +2524,17 @@ msgstr ""
 "de Nginx UI ejecutará el comando logrotate en el intervalo que establezca "
 "de Nginx UI ejecutará el comando logrotate en el intervalo que establezca "
 "en minutos."
 "en minutos."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:138
+#: src/views/site/components/SiteStatusSelect.vue:165
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_list/columns.tsx:118
 #: src/views/site/site_list/columns.tsx:118
 msgid "Maintenance"
 msgid "Maintenance"
 msgstr "Mantenimiento"
 msgstr "Mantenimiento"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:66
+#: src/views/site/components/SiteStatusSelect.vue:93
 msgid "Maintenance mode disabled successfully"
 msgid "Maintenance mode disabled successfully"
 msgstr "Modo de mantenimiento desactivado correctamente"
 msgstr "Modo de mantenimiento desactivado correctamente"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:53
+#: src/views/site/components/SiteStatusSelect.vue:80
 msgid "Maintenance mode enabled successfully"
 msgid "Maintenance mode enabled successfully"
 msgstr "Modo de mantenimiento activado correctamente"
 msgstr "Modo de mantenimiento activado correctamente"
 
 
@@ -2592,7 +2601,7 @@ msgstr "Proceso maestro"
 msgid "Master Process"
 msgid "Master Process"
 msgstr "Proceso maestro"
 msgstr "Proceso maestro"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:134
+#: src/views/preference/tabs/AuthSettings.vue:103
 msgid "Max Attempts"
 msgid "Max Attempts"
 msgstr "Intentos máximos"
 msgstr "Intentos máximos"
 
 
@@ -2691,7 +2700,7 @@ msgstr "Módulos"
 msgid "Multi-line Directive"
 msgid "Multi-line Directive"
 msgstr "Directiva multilínea"
 msgstr "Directiva multilínea"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:178
+#: src/components/NgxConfigEditor/NgxUpstream.vue:182
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateList/certColumns.tsx:9
 #: src/views/certificate/CertificateList/certColumns.tsx:9
@@ -2708,7 +2717,7 @@ msgstr "Directiva multilínea"
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/StreamDuplicate.vue:71
 #: src/views/stream/components/StreamDuplicate.vue:71
-#: src/views/stream/StreamList.vue:178
+#: src/views/stream/StreamList.vue:179
 msgid "Name"
 msgid "Name"
 msgstr "Nombre"
 msgstr "Nombre"
 
 
@@ -2740,6 +2749,10 @@ msgstr "Nueva instalación"
 msgid "New name"
 msgid "New name"
 msgstr "Nuevo nombre"
 msgstr "Nuevo nombre"
 
 
+#: src/views/user/UserProfile.vue:195
+msgid "New Password"
+msgstr "Nueva contraseña"
+
 #: src/views/config/ConfigEditor.vue:328
 #: src/views/config/ConfigEditor.vue:328
 msgid "New Path"
 msgid "New Path"
 msgstr "Nueva ruta"
 msgstr "Nueva ruta"
@@ -2955,9 +2968,9 @@ msgstr "Nginx.conf incluye el directorio streams-enabled"
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
-#: src/views/preference/tabs/AuthSettings.vue:163
+#: src/views/preference/tabs/AuthSettings.vue:132
 #: src/views/preference/tabs/CertSettings.vue:73
 #: src/views/preference/tabs/CertSettings.vue:73
-#: src/views/site/site_list/SiteList.vue:97 src/views/stream/StreamList.vue:154
+#: src/views/site/site_list/SiteList.vue:98 src/views/stream/StreamList.vue:155
 msgid "No"
 msgid "No"
 msgstr "No"
 msgstr "No"
 
 
@@ -3093,6 +3106,7 @@ msgid "Off"
 msgstr "Apagado"
 msgstr "Apagado"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/components/NgxConfigEditor/NgxUpstream.vue:145
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3104,13 +3118,13 @@ msgstr "Desconectado"
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/views/notification/Notification.vue:39
 #: src/views/notification/Notification.vue:39
-#: src/views/site/components/SiteStatusSegmented.vue:96
+#: src/views/site/components/SiteStatusSelect.vue:123
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
-#: src/views/site/site_list/SiteList.vue:98
+#: src/views/site/site_list/SiteList.vue:99
 #: src/views/stream/components/RightPanel/Basic.vue:46
 #: src/views/stream/components/RightPanel/Basic.vue:46
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:156
 #: src/views/system/Backup/BackupCreator.vue:149
 #: src/views/system/Backup/BackupCreator.vue:149
 msgid "OK"
 msgid "OK"
 msgstr "OK"
 msgstr "OK"
@@ -3230,6 +3244,14 @@ msgstr "Contraseña incorrecta"
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr "La longitud de la contraseña no puede exceder los 20 caracteres"
 msgstr "La longitud de la contraseña no puede exceder los 20 caracteres"
 
 
+#: src/views/user/UserProfile.vue:96
+msgid "Password updated successfully"
+msgstr "Contraseña actualizada correctamente"
+
+#: src/views/user/UserProfile.vue:75
+msgid "Passwords do not match"
+msgstr "Las contraseñas no coinciden"
+
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
@@ -3269,6 +3291,10 @@ msgstr "Configuración de rendimiento guardada correctamente"
 msgid "Performing core upgrade"
 msgid "Performing core upgrade"
 msgstr "Realizando la actualizaciónd el kernel"
 msgstr "Realizando la actualizaciónd el kernel"
 
 
+#: src/views/user/UserProfile.vue:121
+msgid "Personal Information"
+msgstr "Información personal"
+
 #: src/constants/errors/self_check.ts:19
 #: src/constants/errors/self_check.ts:19
 msgid "PID path not exist"
 msgid "PID path not exist"
 msgstr "La ruta del PID no existe"
 msgstr "La ruta del PID no existe"
@@ -3404,17 +3430,17 @@ msgstr "Por favor, seleccione un archivo de respaldo"
 msgid "Please select at least one item"
 msgid "Please select at least one item"
 msgstr "Por favor seleccione al menos un elemento"
 msgstr "Por favor seleccione al menos un elemento"
 
 
-#: src/views/environments/list/Environment.vue:112
+#: src/views/environments/list/Environment.vue:113
 #: src/views/environments/list/Environment.vue:35
 #: src/views/environments/list/Environment.vue:35
 msgid "Please select at least one node to reload Nginx"
 msgid "Please select at least one node to reload Nginx"
 msgstr "Por favor, seleccione al menos un nodo para recargar Nginx"
 msgstr "Por favor, seleccione al menos un nodo para recargar Nginx"
 
 
-#: src/views/environments/list/Environment.vue:133
+#: src/views/environments/list/Environment.vue:134
 #: src/views/environments/list/Environment.vue:49
 #: src/views/environments/list/Environment.vue:49
 msgid "Please select at least one node to restart Nginx"
 msgid "Please select at least one node to restart Nginx"
 msgstr "Por favor, seleccione al menos un nodo para reiniciar Nginx"
 msgstr "Por favor, seleccione al menos un nodo para reiniciar Nginx"
 
 
-#: src/views/environments/list/Environment.vue:91
+#: src/views/environments/list/Environment.vue:92
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "Seleccione al menos un nodo para actualizar"
 msgstr "Seleccione al menos un nodo para actualizar"
 
 
@@ -3581,8 +3607,8 @@ msgstr "Recargar"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/EnvGroup.vue:50
 #: src/views/environments/group/EnvGroup.vue:50
-#: src/views/environments/list/Environment.vue:120
-#: src/views/environments/list/Environment.vue:128
+#: src/views/environments/list/Environment.vue:121
+#: src/views/environments/list/Environment.vue:129
 msgid "Reload Nginx"
 msgid "Reload Nginx"
 msgstr "Recargar Nginx"
 msgstr "Recargar Nginx"
 
 
@@ -3618,12 +3644,12 @@ msgstr "Recargando"
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr "Recargando Nginx"
 msgstr "Recargando Nginx"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:168
+#: src/views/preference/tabs/AuthSettings.vue:137
 msgid "Remove"
 msgid "Remove"
 msgstr "Eliminar"
 msgstr "Eliminar"
 
 
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
-#: src/views/preference/tabs/AuthSettings.vue:50
+#: src/views/preference/tabs/AuthSettings.vue:47
 msgid "Remove successfully"
 msgid "Remove successfully"
 msgstr "Eliminado con éxito"
 msgstr "Eliminado con éxito"
 
 
@@ -3762,8 +3788,8 @@ msgid "Restart"
 msgstr "Reiniciar"
 msgstr "Reiniciar"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
-#: src/views/environments/list/Environment.vue:141
-#: src/views/environments/list/Environment.vue:149
+#: src/views/environments/list/Environment.vue:142
+#: src/views/environments/list/Environment.vue:150
 msgid "Restart Nginx"
 msgid "Restart Nginx"
 msgstr "Reiniciar Nginx"
 msgstr "Reiniciar Nginx"
 
 
@@ -3843,15 +3869,15 @@ msgstr ""
 "La revocación de un certificado afectará a cualquier servicio que lo esté "
 "La revocación de un certificado afectará a cualquier servicio que lo esté "
 "utilizando actualmente. Esta acción no se puede deshacer."
 "utilizando actualmente. Esta acción no se puede deshacer."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:106
+#: src/views/preference/tabs/AuthSettings.vue:75
 msgid "RP Display Name"
 msgid "RP Display Name"
 msgstr "Nombre RP"
 msgstr "Nombre RP"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:112
+#: src/views/preference/tabs/AuthSettings.vue:81
 msgid "RP Origins"
 msgid "RP Origins"
 msgstr "Orígenes RP"
 msgstr "Orígenes RP"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:100
+#: src/views/preference/tabs/AuthSettings.vue:69
 msgid "RPID"
 msgid "RPID"
 msgstr "RPID"
 msgstr "RPID"
 
 
@@ -3958,6 +3984,10 @@ msgstr "Nombre del módulo de búsqueda"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "El secreto ha sido copiado"
 msgstr "El secreto ha sido copiado"
 
 
+#: src/views/user/UserProfile.vue:175
+msgid "Security Settings"
+msgstr "Configuración de seguridad"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 msgid "Security Token"
 msgid "Security Token"
@@ -4035,7 +4065,7 @@ msgstr ""
 "Establezca los servidores de nombres recursivos para anular los servidores "
 "Establezca los servidores de nombres recursivos para anular los servidores "
 "de nombres del sistema en el paso del desafío DNS."
 "de nombres del sistema en el paso del desafío DNS."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:89
+#: src/views/site/components/SiteStatusSelect.vue:116
 msgid "set to maintenance mode"
 msgid "set to maintenance mode"
 msgstr "establecer en modo de mantenimiento"
 msgstr "establecer en modo de mantenimiento"
 
 
@@ -4279,13 +4309,11 @@ msgstr ""
 "consulte este enlace para escribir el archivo de configuración "
 "consulte este enlace para escribir el archivo de configuración "
 "correspondiente: https://nginxui.com/guide/nginx-proxy-example.html"
 "correspondiente: https://nginxui.com/guide/nginx-proxy-example.html"
 
 
-#: src/language/curd.ts:51
-#: src/language/curd.ts:55
+#: src/language/curd.ts:51 src/language/curd.ts:55
 msgid "Support single or batch upload of files"
 msgid "Support single or batch upload of files"
 msgstr "Soporta carga única o múltiple de archivos"
 msgstr "Soporta carga única o múltiple de archivos"
 
 
-#: src/language/curd.ts:52
-#: src/language/curd.ts:56
+#: src/language/curd.ts:52 src/language/curd.ts:56
 msgid "Support uploading entire folders"
 msgid "Support uploading entire folders"
 msgstr "Soporta la carga de carpetas completas"
 msgstr "Soporta la carga de carpetas completas"
 
 
@@ -4629,12 +4657,12 @@ msgstr ""
 "Esto actualizará o reinstalará la interfaz de usuario de Nginx en "
 "Esto actualizará o reinstalará la interfaz de usuario de Nginx en "
 "%{nodeNames} a %{version}."
 "%{nodeNames} a %{version}."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:123
+#: src/views/preference/tabs/AuthSettings.vue:92
 msgid "Throttle"
 msgid "Throttle"
 msgstr "Acelerador"
 msgstr "Acelerador"
 
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
-#: src/views/preference/tabs/AuthSettings.vue:143
+#: src/views/preference/tabs/AuthSettings.vue:112
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 msgid "Tips"
 msgid "Tips"
 msgstr "Consejos"
 msgstr "Consejos"
@@ -4647,7 +4675,7 @@ msgstr ""
 "Consejo: Puede aumentar la capacidad de procesamiento concurrente "
 "Consejo: Puede aumentar la capacidad de procesamiento concurrente "
 "incrementando worker_processes o worker_connections."
 "incrementando worker_processes o worker_connections."
 
 
-#: src/views/notification/notificationColumns.tsx:52
+#: src/views/notification/notificationColumns.tsx:58
 msgid "Title"
 msgid "Title"
 msgstr "Título"
 msgstr "Título"
 
 
@@ -4769,6 +4797,14 @@ msgstr "Tipo"
 msgid "Unknown"
 msgid "Unknown"
 msgstr "Desconocido"
 msgstr "Desconocido"
 
 
+#: src/views/user/UserProfile.vue:218
+msgid "Update Password"
+msgstr "Actualizar contraseña"
+
+#: src/views/user/UserProfile.vue:142
+msgid "Update Profile"
+msgstr "Actualizar perfil"
+
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "Actualización exitosa"
 msgstr "Actualización exitosa"
@@ -4786,8 +4822,8 @@ msgid "Updated at"
 msgstr "Actualizado a"
 msgstr "Actualizado a"
 
 
 #: src/routes/modules/system.ts:33
 #: src/routes/modules/system.ts:33
-#: src/views/environments/list/Environment.vue:107
-#: src/views/environments/list/Environment.vue:99
+#: src/views/environments/list/Environment.vue:100
+#: src/views/environments/list/Environment.vue:108
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "Actualizar"
 msgstr "Actualizar"
@@ -4813,7 +4849,7 @@ msgstr "Subir archivos"
 msgid "Upload Folders"
 msgid "Upload Folders"
 msgstr "Subir carpetas"
 msgstr "Subir carpetas"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:173
+#: src/components/NgxConfigEditor/NgxUpstream.vue:177
 msgid "Upstream Name"
 msgid "Upstream Name"
 msgstr "Nombre de la Transmisión"
 msgstr "Nombre de la Transmisión"
 
 
@@ -4845,11 +4881,20 @@ msgstr "Usuario"
 msgid "User banned"
 msgid "User banned"
 msgstr "Usuario bloqueado"
 msgstr "Usuario bloqueado"
 
 
+#: src/views/user/UserProfile.vue:62
+msgid "User info updated successfully"
+msgstr "Información del usuario actualizada correctamente"
+
 #: src/constants/errors/user.ts:8
 #: src/constants/errors/user.ts:8
 msgid "User not enabled otp as 2fa"
 msgid "User not enabled otp as 2fa"
 msgstr "Usuario no ha habilitado OTP como 2FA"
 msgstr "Usuario no ha habilitado OTP como 2FA"
 
 
+#: src/routes/modules/user.ts:19
+msgid "User Profile"
+msgstr "Perfil de usuario"
+
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
+#: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Nombre de usuario"
 msgstr "Nombre de usuario"
 
 
@@ -4940,7 +4985,7 @@ msgstr ""
 "Eliminaremos la configuración de HTTPChallenge de este archivo y "
 "Eliminaremos la configuración de HTTPChallenge de este archivo y "
 "recargaremos Nginx. ¿Estás seguro de que quieres continuar?"
 "recargaremos Nginx. ¿Estás seguro de que quieres continuar?"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:96
+#: src/views/preference/tabs/AuthSettings.vue:65
 msgid "Webauthn"
 msgid "Webauthn"
 msgstr "Webauthn"
 msgstr "Webauthn"
 
 
@@ -5021,12 +5066,12 @@ msgstr "Escribir certificado a disco"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
-#: src/views/preference/tabs/AuthSettings.vue:162
+#: src/views/preference/tabs/AuthSettings.vue:131
 #: src/views/preference/tabs/CertSettings.vue:72
 #: src/views/preference/tabs/CertSettings.vue:72
 msgid "Yes"
 msgid "Yes"
 msgstr "Si"
 msgstr "Si"
 
 
-#: src/views/terminal/Terminal.vue:135
+#: src/views/terminal/Terminal.vue:132
 msgid ""
 msgid ""
 "You are accessing this terminal over an insecure HTTP connection on a "
 "You are accessing this terminal over an insecure HTTP connection on a "
 "non-localhost domain. This may expose sensitive information."
 "non-localhost domain. This may expose sensitive information."
@@ -5123,9 +5168,6 @@ msgstr "Sus llaves de acceso"
 #~ msgid_plural "Total %{total} items"
 #~ msgid_plural "Total %{total} items"
 #~ msgstr[0] "Total %{total} elemento"
 #~ msgstr[0] "Total %{total} elemento"
 
 
-#~ msgid "Updated successfully"
-#~ msgstr "Actualización exitosa"
-
 #~ msgid "View Details"
 #~ msgid "View Details"
 #~ msgstr "Ver detalles"
 #~ msgstr "Ver detalles"
 
 

+ 127 - 85
app/src/language/fr_FR/app.po

@@ -108,7 +108,7 @@ msgstr "[Nginx UI] Écriture du certificat sur le disque"
 msgid "2FA"
 msgid "2FA"
 msgstr "2fa"
 msgstr "2fa"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:69
+#: src/views/user/UserProfile.vue:151
 msgid "2FA Settings"
 msgid "2FA Settings"
 msgstr "Options 2FA"
 msgstr "Options 2FA"
 
 
@@ -134,8 +134,7 @@ msgstr "Journaux d'accès"
 msgid "ACME User"
 msgid "ACME User"
 msgstr "Utilisateur ACME"
 msgstr "Utilisateur ACME"
 
 
-#: src/views/notification/notificationColumns.tsx:66
-#: src/views/preference/tabs/AuthSettings.vue:29
+#: src/views/preference/tabs/AuthSettings.vue:26
 msgid "Action"
 msgid "Action"
 msgstr "Action"
 msgstr "Action"
 
 
@@ -146,9 +145,9 @@ msgstr "Action"
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/nginx_log/NginxLogList.vue:52
 #: src/views/nginx_log/NginxLogList.vue:52
+#: src/views/notification/notificationColumns.tsx:72
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
-#: src/views/site/site_list/columns.tsx:129
-#: src/views/stream/columns.tsx:64
+#: src/views/site/site_list/columns.tsx:129 src/views/stream/columns.tsx:64
 #: src/views/user/userColumns.tsx:58
 #: src/views/user/userColumns.tsx:58
 msgid "Actions"
 msgid "Actions"
 msgstr "Actions"
 msgstr "Actions"
@@ -163,10 +162,10 @@ msgid "Actual worker to configured ratio"
 msgstr "Ratio réel des travailleurs par rapport à la configuration"
 msgstr "Ratio réel des travailleurs par rapport à la configuration"
 
 
 #: src/components/NgxConfigEditor/NgxServer.vue:112
 #: src/components/NgxConfigEditor/NgxServer.vue:112
-#: src/components/NgxConfigEditor/NgxUpstream.vue:155 src/language/curd.ts:19
+#: src/components/NgxConfigEditor/NgxUpstream.vue:159 src/language/curd.ts:19
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
-#: src/views/stream/StreamList.vue:120
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "Ajouter"
 msgstr "Ajouter"
 
 
@@ -193,7 +192,7 @@ msgstr "Ajouter une localisation"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "Ajouter un site"
 msgstr "Ajouter un site"
 
 
-#: src/views/stream/StreamList.vue:173
+#: src/views/stream/StreamList.vue:174
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "Ajouter un flux"
 msgstr "Ajouter un flux"
 
 
@@ -253,7 +252,7 @@ msgstr "Application"
 msgid "Arch"
 msgid "Arch"
 msgstr "\"Arch\""
 msgstr "\"Arch\""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:161
+#: src/views/preference/tabs/AuthSettings.vue:130
 msgid "Are you sure to delete this banned IP immediately?"
 msgid "Are you sure to delete this banned IP immediately?"
 msgstr "Êtes-vous sûr de vouloir supprimer immédiatement cette IP bannie ?"
 msgstr "Êtes-vous sûr de vouloir supprimer immédiatement cette IP bannie ?"
 
 
@@ -282,8 +281,8 @@ msgstr "Voulez-vous vraiment effacer l'historique du chat ?"
 msgid "Are you sure you want to delete permanently?"
 msgid "Are you sure you want to delete permanently?"
 msgstr "Êtes-vous sûr de vouloir supprimer définitivement ?"
 msgstr "Êtes-vous sûr de vouloir supprimer définitivement ?"
 
 
-#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:99
-#: src/views/stream/StreamList.vue:156
+#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:100
+#: src/views/stream/StreamList.vue:157
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "Etes-vous sûr que vous voulez supprimer ?"
 msgstr "Etes-vous sûr que vous voulez supprimer ?"
 
 
@@ -327,7 +326,7 @@ msgstr "Assistant"
 msgid "Attempt to fix"
 msgid "Attempt to fix"
 msgstr "Tenter de corriger"
 msgstr "Tenter de corriger"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:20
+#: src/views/preference/tabs/AuthSettings.vue:17
 msgid "Attempts"
 msgid "Attempts"
 msgstr "Tentatives"
 msgstr "Tentatives"
 
 
@@ -339,7 +338,7 @@ msgstr "Authentification"
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr "S'authentifier avec une clé d'accès"
 msgstr "S'authentifier avec une clé d'accès"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:87
+#: src/views/preference/tabs/AuthSettings.vue:56
 msgid "Authentication Settings"
 msgid "Authentication Settings"
 msgstr "Paramètres d'authentification"
 msgstr "Paramètres d'authentification"
 
 
@@ -416,15 +415,15 @@ msgstr "Fichier de sauvegarde introuvable : {0}"
 msgid "Backup has been downloaded successfully"
 msgid "Backup has been downloaded successfully"
 msgstr "La sauvegarde a été téléchargée avec succès"
 msgstr "La sauvegarde a été téléchargée avec succès"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:128
+#: src/views/preference/tabs/AuthSettings.vue:97
 msgid "Ban Threshold Minutes"
 msgid "Ban Threshold Minutes"
 msgstr "Minutes seuil de bannissement"
 msgstr "Minutes seuil de bannissement"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:149
+#: src/views/preference/tabs/AuthSettings.vue:118
 msgid "Banned IPs"
 msgid "Banned IPs"
 msgstr "IPs bannies"
 msgstr "IPs bannies"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:23
+#: src/views/preference/tabs/AuthSettings.vue:20
 msgid "Banned Until"
 msgid "Banned Until"
 msgstr "Banni durant"
 msgstr "Banni durant"
 
 
@@ -535,7 +534,7 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
-#: src/views/site/components/SiteStatusSegmented.vue:97
+#: src/views/site/components/SiteStatusSelect.vue:124
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
@@ -653,6 +652,10 @@ msgstr "Méthode de challenge"
 msgid "Change Certificate"
 msgid "Change Certificate"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
+#: src/views/user/UserProfile.vue:181
+msgid "Change Password"
+msgstr "Changer le mot de passe"
+
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 msgid "Changed Certificate"
 msgid "Changed Certificate"
 msgid_plural "Changed Certificates"
 msgid_plural "Changed Certificates"
@@ -823,13 +826,11 @@ msgstr ""
 "Cliquez sur ou faites glisser le fichier de sauvegarde vers cette zone pour "
 "Cliquez sur ou faites glisser le fichier de sauvegarde vers cette zone pour "
 "télécharger"
 "télécharger"
 
 
-#: src/language/curd.ts:49
-#: src/language/curd.ts:53
+#: src/language/curd.ts:49 src/language/curd.ts:53
 msgid "Click or drag files to this area to upload"
 msgid "Click or drag files to this area to upload"
 msgstr "Cliquez ou faites glisser des fichiers dans cette zone pour les télécharger"
 msgstr "Cliquez ou faites glisser des fichiers dans cette zone pour les télécharger"
 
 
-#: src/language/curd.ts:50
-#: src/language/curd.ts:54
+#: src/language/curd.ts:50 src/language/curd.ts:54
 msgid "Click or drag folders to this area to upload"
 msgid "Click or drag folders to this area to upload"
 msgstr "Cliquez ou faites glisser des dossiers dans cette zone pour télécharger"
 msgstr "Cliquez ou faites glisser des dossiers dans cette zone pour télécharger"
 
 
@@ -951,6 +952,10 @@ msgstr "Configurations"
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr "Configurer SSL"
 msgstr "Configurer SSL"
 
 
+#: src/views/user/UserProfile.vue:204
+msgid "Confirm New Password"
+msgstr "Confirmer le nouveau mot de passe"
+
 #: src/views/dashboard/Environments.vue:141
 #: src/views/dashboard/Environments.vue:141
 msgid "Connected"
 msgid "Connected"
 msgstr "Connecté"
 msgstr "Connecté"
@@ -959,7 +964,7 @@ msgstr "Connecté"
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Erreur de connexion, tentative de reconnexion..."
 msgstr "Erreur de connexion, tentative de reconnexion..."
 
 
-#: src/views/terminal/Terminal.vue:142
+#: src/views/terminal/Terminal.vue:139
 msgid "Connection lost, please refresh the page."
 msgid "Connection lost, please refresh the page."
 msgstr "Connexion perdue, merci de recharger la page."
 msgstr "Connexion perdue, merci de recharger la page."
 
 
@@ -1017,7 +1022,7 @@ msgstr ""
 msgid "CPU:"
 msgid "CPU:"
 msgstr "CPU :"
 msgstr "CPU :"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:166
+#: src/components/NgxConfigEditor/NgxUpstream.vue:170
 msgid "Create"
 msgid "Create"
 msgstr "Créer"
 msgstr "Créer"
 
 
@@ -1047,7 +1052,7 @@ msgstr ""
 "téléchargés sur votre ordinateur."
 "téléchargés sur votre ordinateur."
 
 
 #: src/views/environments/group/columns.ts:29
 #: src/views/environments/group/columns.ts:29
-#: src/views/notification/notificationColumns.tsx:45
+#: src/views/notification/notificationColumns.tsx:51
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/user/userColumns.tsx:46
 #: src/views/user/userColumns.tsx:46
@@ -1086,6 +1091,10 @@ msgstr "Connexions actives actuelles"
 msgid "Current Content"
 msgid "Current Content"
 msgstr "Contenu actuel"
 msgstr "Contenu actuel"
 
 
+#: src/views/user/UserProfile.vue:186
+msgid "Current Password"
+msgstr "Mot de passe actuel"
+
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 msgid "Current usage"
 msgid "Current usage"
 msgstr "Utilisation actuelle"
 msgstr "Utilisation actuelle"
@@ -1129,8 +1138,8 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/views/certificate/components/RemoveCert.vue:88
 #: src/views/certificate/components/RemoveCert.vue:88
-#: src/views/site/site_list/SiteList.vue:108
-#: src/views/stream/StreamList.vue:165
+#: src/views/site/site_list/SiteList.vue:109
+#: src/views/stream/StreamList.vue:166
 msgid "Delete"
 msgid "Delete"
 msgstr "Supprimer"
 msgstr "Supprimer"
 
 
@@ -1207,7 +1216,7 @@ msgstr "Le fichier de destination existe déjà"
 msgid "Destination file: {0} already exists"
 msgid "Destination file: {0} already exists"
 msgstr "Fichier de destination : {0} existe déjà"
 msgstr "Fichier de destination : {0} existe déjà"
 
 
-#: src/views/notification/notificationColumns.tsx:60
+#: src/views/notification/notificationColumns.tsx:66
 msgid "Details"
 msgid "Details"
 msgstr "Détails"
 msgstr "Détails"
 
 
@@ -1251,11 +1260,11 @@ msgstr "Niveaux de répertoire"
 msgid "Directory path to store cache files"
 msgid "Directory path to store cache files"
 msgstr "Chemin du répertoire pour stocker les fichiers de cache"
 msgstr "Chemin du répertoire pour stocker les fichiers de cache"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:88
+#: src/views/site/components/SiteStatusSelect.vue:115
 msgid "disable"
 msgid "disable"
 msgstr "Désactiver"
 msgstr "Désactiver"
 
 
-#: src/views/stream/StreamList.vue:136
+#: src/views/stream/StreamList.vue:137
 msgid "Disable"
 msgid "Disable"
 msgstr "Désactiver"
 msgstr "Désactiver"
 
 
@@ -1316,7 +1325,7 @@ msgstr "Désactivation du flux %{name} depuis %{node} réussie"
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:134
+#: src/views/site/components/SiteStatusSelect.vue:162
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/stream/components/StreamEditor.vue:30
 #: src/views/stream/components/StreamEditor.vue:30
@@ -1324,7 +1333,7 @@ msgstr "Désactivation du flux %{name} depuis %{node} réussie"
 msgid "Disabled"
 msgid "Disabled"
 msgstr "Désactivé"
 msgstr "Désactivé"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:40
+#: src/views/site/components/SiteStatusSelect.vue:67
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/StreamList.vue:56
 #: src/views/stream/StreamList.vue:56
 msgid "Disabled successfully"
 msgid "Disabled successfully"
@@ -1352,7 +1361,7 @@ msgstr "DNS01"
 msgid "Do not enable this option unless you are sure that you need it."
 msgid "Do not enable this option unless you are sure that you need it."
 msgstr "N'activez pas cette option sauf si vous êtes sûr d'en avoir avez besoin."
 msgstr "N'activez pas cette option sauf si vous êtes sûr d'en avoir avez besoin."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:93
+#: src/views/site/components/SiteStatusSelect.vue:120
 msgid "Do you want to %{action} this site?"
 msgid "Do you want to %{action} this site?"
 msgstr "Voulez-vous %{action} ce site ?"
 msgstr "Voulez-vous %{action} ce site ?"
 
 
@@ -1430,9 +1439,9 @@ msgstr ""
 "exécuté sur localhost."
 "exécuté sur localhost."
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:94
+#: src/views/site/site_list/SiteList.vue:95
 #: src/views/stream/components/StreamDuplicate.vue:64
 #: src/views/stream/components/StreamDuplicate.vue:64
-#: src/views/stream/StreamList.vue:151
+#: src/views/stream/StreamList.vue:152
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "Dupliquer"
 msgstr "Dupliquer"
 
 
@@ -1476,11 +1485,11 @@ msgstr "E-mail"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:87
+#: src/views/site/components/SiteStatusSelect.vue:114
 msgid "enable"
 msgid "enable"
 msgstr "activer"
 msgstr "activer"
 
 
-#: src/views/stream/StreamList.vue:144
+#: src/views/stream/StreamList.vue:145
 msgid "Enable"
 msgid "Enable"
 msgstr "Activer"
 msgstr "Activer"
 
 
@@ -1578,7 +1587,7 @@ msgstr "Activer TOTP"
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:130
+#: src/views/site/components/SiteStatusSelect.vue:159
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/stream/components/RightPanel/Basic.vue:62
 #: src/views/stream/components/RightPanel/Basic.vue:62
@@ -1587,7 +1596,7 @@ msgstr "Activer TOTP"
 msgid "Enabled"
 msgid "Enabled"
 msgstr "Activé"
 msgstr "Activé"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:27
+#: src/views/site/components/SiteStatusSelect.vue:54
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/StreamList.vue:46
 #: src/views/stream/StreamList.vue:46
@@ -1796,23 +1805,23 @@ msgstr "Échec de la suppression du certificat"
 msgid "Failed to delete certificate from database: %{error}"
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "Échec de la suppression du certificat de la base de données : %{error}"
 msgstr "Échec de la suppression du certificat de la base de données : %{error}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:46
+#: src/views/site/components/SiteStatusSelect.vue:73
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/StreamList.vue:60
 #: src/views/stream/StreamList.vue:60
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "Impossible de désactiver %{msg}"
 msgstr "Impossible de désactiver %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:72
+#: src/views/site/components/SiteStatusSelect.vue:99
 msgid "Failed to disable maintenance mode %{msg}"
 msgid "Failed to disable maintenance mode %{msg}"
 msgstr "Échec de la désactivation du mode maintenance : %{msg}"
 msgstr "Échec de la désactivation du mode maintenance : %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:33
+#: src/views/site/components/SiteStatusSelect.vue:60
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/StreamList.vue:50
 #: src/views/stream/StreamList.vue:50
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:59
+#: src/views/site/components/SiteStatusSelect.vue:86
 msgid "Failed to enable maintenance mode %{msg}"
 msgid "Failed to enable maintenance mode %{msg}"
 msgstr "Échec de l'activation du mode maintenance : %{msg}"
 msgstr "Échec de l'activation du mode maintenance : %{msg}"
 
 
@@ -2127,7 +2136,7 @@ msgstr "Numéro ICP"
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr "Si vide, le répertoire CA sera utilisé."
 msgstr "Si vide, le répertoire CA sera utilisé."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:144
+#: src/views/preference/tabs/AuthSettings.vue:113
 msgid ""
 msgid ""
 "If the number of login failed attempts from a ip reach the max attempts in "
 "If the number of login failed attempts from a ip reach the max attempts in "
 "ban threshold minutes, the ip will be banned for a period of time."
 "ban threshold minutes, the ip will be banned for a period of time."
@@ -2299,7 +2308,7 @@ msgstr "Format de la requête invalide"
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "Format de jeton de sécurité invalide"
 msgstr "Format de jeton de sécurité invalide"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:17
+#: src/views/preference/tabs/AuthSettings.vue:14
 msgid "IP"
 msgid "IP"
 msgstr "IP"
 msgstr "IP"
 
 
@@ -2414,7 +2423,7 @@ msgstr "Liste"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "Charge moyenne :"
 msgstr "Charge moyenne :"
 
 
-#: src/views/environments/list/Environment.vue:80
+#: src/views/environments/list/Environment.vue:81
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "Charger à partir des options"
 msgstr "Charger à partir des options"
 
 
@@ -2513,17 +2522,17 @@ msgstr ""
 "planificateur de tâches crontab de Nginx UI exécutera la commande logrotate "
 "planificateur de tâches crontab de Nginx UI exécutera la commande logrotate "
 "à l'intervalle que vous avez défini en minutes."
 "à l'intervalle que vous avez défini en minutes."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:138
+#: src/views/site/components/SiteStatusSelect.vue:165
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_list/columns.tsx:118
 #: src/views/site/site_list/columns.tsx:118
 msgid "Maintenance"
 msgid "Maintenance"
 msgstr "Maintenance"
 msgstr "Maintenance"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:66
+#: src/views/site/components/SiteStatusSelect.vue:93
 msgid "Maintenance mode disabled successfully"
 msgid "Maintenance mode disabled successfully"
 msgstr "Mode maintenance désactivé avec succès"
 msgstr "Mode maintenance désactivé avec succès"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:53
+#: src/views/site/components/SiteStatusSelect.vue:80
 msgid "Maintenance mode enabled successfully"
 msgid "Maintenance mode enabled successfully"
 msgstr "Mode maintenance activé avec succès"
 msgstr "Mode maintenance activé avec succès"
 
 
@@ -2590,7 +2599,7 @@ msgstr "Processus maître"
 msgid "Master Process"
 msgid "Master Process"
 msgstr "Processus maître"
 msgstr "Processus maître"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:134
+#: src/views/preference/tabs/AuthSettings.vue:103
 msgid "Max Attempts"
 msgid "Max Attempts"
 msgstr "Tentatives maximum"
 msgstr "Tentatives maximum"
 
 
@@ -2689,7 +2698,7 @@ msgstr "Modules"
 msgid "Multi-line Directive"
 msgid "Multi-line Directive"
 msgstr "Directive multiligne"
 msgstr "Directive multiligne"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:178
+#: src/components/NgxConfigEditor/NgxUpstream.vue:182
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateList/certColumns.tsx:9
 #: src/views/certificate/CertificateList/certColumns.tsx:9
@@ -2706,7 +2715,7 @@ msgstr "Directive multiligne"
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/StreamDuplicate.vue:71
 #: src/views/stream/components/StreamDuplicate.vue:71
-#: src/views/stream/StreamList.vue:178
+#: src/views/stream/StreamList.vue:179
 msgid "Name"
 msgid "Name"
 msgstr "Nom"
 msgstr "Nom"
 
 
@@ -2738,6 +2747,10 @@ msgstr "Nouvelle installation"
 msgid "New name"
 msgid "New name"
 msgstr "Nouveau nom"
 msgstr "Nouveau nom"
 
 
+#: src/views/user/UserProfile.vue:195
+msgid "New Password"
+msgstr "Nouveau mot de passe"
+
 #: src/views/config/ConfigEditor.vue:328
 #: src/views/config/ConfigEditor.vue:328
 msgid "New Path"
 msgid "New Path"
 msgstr "Nouveau chemin"
 msgstr "Nouveau chemin"
@@ -2953,9 +2966,9 @@ msgstr "Nginx.conf inclut le répertoire streams-enabled"
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
-#: src/views/preference/tabs/AuthSettings.vue:163
+#: src/views/preference/tabs/AuthSettings.vue:132
 #: src/views/preference/tabs/CertSettings.vue:73
 #: src/views/preference/tabs/CertSettings.vue:73
-#: src/views/site/site_list/SiteList.vue:97 src/views/stream/StreamList.vue:154
+#: src/views/site/site_list/SiteList.vue:98 src/views/stream/StreamList.vue:155
 msgid "No"
 msgid "No"
 msgstr "Non"
 msgstr "Non"
 
 
@@ -3090,6 +3103,7 @@ msgid "Off"
 msgstr "Désactivé"
 msgstr "Désactivé"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/components/NgxConfigEditor/NgxUpstream.vue:145
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3101,13 +3115,13 @@ msgstr "Hors ligne"
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/views/notification/Notification.vue:39
 #: src/views/notification/Notification.vue:39
-#: src/views/site/components/SiteStatusSegmented.vue:96
+#: src/views/site/components/SiteStatusSelect.vue:123
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
-#: src/views/site/site_list/SiteList.vue:98
+#: src/views/site/site_list/SiteList.vue:99
 #: src/views/stream/components/RightPanel/Basic.vue:46
 #: src/views/stream/components/RightPanel/Basic.vue:46
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:156
 #: src/views/system/Backup/BackupCreator.vue:149
 #: src/views/system/Backup/BackupCreator.vue:149
 msgid "OK"
 msgid "OK"
 msgstr "OK"
 msgstr "OK"
@@ -3227,6 +3241,14 @@ msgstr "Mot de passe incorrect"
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr "La longueur du mot de passe ne peut pas dépasser 20 caractères"
 msgstr "La longueur du mot de passe ne peut pas dépasser 20 caractères"
 
 
+#: src/views/user/UserProfile.vue:96
+msgid "Password updated successfully"
+msgstr "Mot de passe mis à jour avec succès"
+
+#: src/views/user/UserProfile.vue:75
+msgid "Passwords do not match"
+msgstr "Les mots de passe ne correspondent pas"
+
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
@@ -3268,6 +3290,10 @@ msgstr "Paramètres de performance enregistrés avec succès"
 msgid "Performing core upgrade"
 msgid "Performing core upgrade"
 msgstr "Exécution de la mise à niveau du core"
 msgstr "Exécution de la mise à niveau du core"
 
 
+#: src/views/user/UserProfile.vue:121
+msgid "Personal Information"
+msgstr "Informations personnelles"
+
 #: src/constants/errors/self_check.ts:19
 #: src/constants/errors/self_check.ts:19
 msgid "PID path not exist"
 msgid "PID path not exist"
 msgstr "Le chemin du PID n'existe pas"
 msgstr "Le chemin du PID n'existe pas"
@@ -3401,17 +3427,17 @@ msgstr "Veuillez sélectionner un fichier de sauvegarde"
 msgid "Please select at least one item"
 msgid "Please select at least one item"
 msgstr "Veuillez sélectionner au moins un élément"
 msgstr "Veuillez sélectionner au moins un élément"
 
 
-#: src/views/environments/list/Environment.vue:112
+#: src/views/environments/list/Environment.vue:113
 #: src/views/environments/list/Environment.vue:35
 #: src/views/environments/list/Environment.vue:35
 msgid "Please select at least one node to reload Nginx"
 msgid "Please select at least one node to reload Nginx"
 msgstr "Veuillez sélectionner au moins un nœud pour recharger Nginx"
 msgstr "Veuillez sélectionner au moins un nœud pour recharger Nginx"
 
 
-#: src/views/environments/list/Environment.vue:133
+#: src/views/environments/list/Environment.vue:134
 #: src/views/environments/list/Environment.vue:49
 #: src/views/environments/list/Environment.vue:49
 msgid "Please select at least one node to restart Nginx"
 msgid "Please select at least one node to restart Nginx"
 msgstr "Veuillez sélectionner au moins un nœud pour redémarrer Nginx"
 msgstr "Veuillez sélectionner au moins un nœud pour redémarrer Nginx"
 
 
-#: src/views/environments/list/Environment.vue:91
+#: src/views/environments/list/Environment.vue:92
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "Veuillez sélectionner au moins un nœud à mettre à niveau"
 msgstr "Veuillez sélectionner au moins un nœud à mettre à niveau"
 
 
@@ -3578,8 +3604,8 @@ msgstr "Recharger"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/EnvGroup.vue:50
 #: src/views/environments/group/EnvGroup.vue:50
-#: src/views/environments/list/Environment.vue:120
-#: src/views/environments/list/Environment.vue:128
+#: src/views/environments/list/Environment.vue:121
+#: src/views/environments/list/Environment.vue:129
 msgid "Reload Nginx"
 msgid "Reload Nginx"
 msgstr "Recharger nginx"
 msgstr "Recharger nginx"
 
 
@@ -3617,12 +3643,12 @@ msgstr "Rechargement"
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr "Rechargement de nginx"
 msgstr "Rechargement de nginx"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:168
+#: src/views/preference/tabs/AuthSettings.vue:137
 msgid "Remove"
 msgid "Remove"
 msgstr "Supprimer"
 msgstr "Supprimer"
 
 
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
-#: src/views/preference/tabs/AuthSettings.vue:50
+#: src/views/preference/tabs/AuthSettings.vue:47
 msgid "Remove successfully"
 msgid "Remove successfully"
 msgstr "Suppression réussie"
 msgstr "Suppression réussie"
 
 
@@ -3761,8 +3787,8 @@ msgid "Restart"
 msgstr "Redémarrer"
 msgstr "Redémarrer"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
-#: src/views/environments/list/Environment.vue:141
-#: src/views/environments/list/Environment.vue:149
+#: src/views/environments/list/Environment.vue:142
+#: src/views/environments/list/Environment.vue:150
 msgid "Restart Nginx"
 msgid "Restart Nginx"
 msgstr "Redémarrer Nginx"
 msgstr "Redémarrer Nginx"
 
 
@@ -3842,15 +3868,15 @@ msgstr ""
 "La révocation d'un certificat affectera tous les services qui l'utilisent "
 "La révocation d'un certificat affectera tous les services qui l'utilisent "
 "actuellement. Cette action ne peut pas être annulée."
 "actuellement. Cette action ne peut pas être annulée."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:106
+#: src/views/preference/tabs/AuthSettings.vue:75
 msgid "RP Display Name"
 msgid "RP Display Name"
 msgstr "Nom d'affichage RP"
 msgstr "Nom d'affichage RP"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:112
+#: src/views/preference/tabs/AuthSettings.vue:81
 msgid "RP Origins"
 msgid "RP Origins"
 msgstr "Origines RP"
 msgstr "Origines RP"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:100
+#: src/views/preference/tabs/AuthSettings.vue:69
 msgid "RPID"
 msgid "RPID"
 msgstr "RPID"
 msgstr "RPID"
 
 
@@ -3957,6 +3983,10 @@ msgstr "Nom du module de recherche"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "Le secret a été copié"
 msgstr "Le secret a été copié"
 
 
+#: src/views/user/UserProfile.vue:175
+msgid "Security Settings"
+msgstr "Paramètres de sécurité"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 msgid "Security Token"
 msgid "Security Token"
@@ -4034,7 +4064,7 @@ msgstr ""
 "Définissez les serveurs de noms récursifs pour remplacer les serveurs de "
 "Définissez les serveurs de noms récursifs pour remplacer les serveurs de "
 "noms du système lors de l'étape du défi DNS."
 "noms du système lors de l'étape du défi DNS."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:89
+#: src/views/site/components/SiteStatusSelect.vue:116
 msgid "set to maintenance mode"
 msgid "set to maintenance mode"
 msgstr "passer en mode maintenance"
 msgstr "passer en mode maintenance"
 
 
@@ -4278,13 +4308,11 @@ msgstr ""
 "Nginx, veuillez consulter ce lien pour écrire le fichier de configuration "
 "Nginx, veuillez consulter ce lien pour écrire le fichier de configuration "
 "correspondant : https://nginxui.com/guide/nginx-proxy-example.html"
 "correspondant : https://nginxui.com/guide/nginx-proxy-example.html"
 
 
-#: src/language/curd.ts:51
-#: src/language/curd.ts:55
+#: src/language/curd.ts:51 src/language/curd.ts:55
 msgid "Support single or batch upload of files"
 msgid "Support single or batch upload of files"
 msgstr "Prise en charge du téléchargement unique ou en lot de fichiers"
 msgstr "Prise en charge du téléchargement unique ou en lot de fichiers"
 
 
-#: src/language/curd.ts:52
-#: src/language/curd.ts:56
+#: src/language/curd.ts:52 src/language/curd.ts:56
 msgid "Support uploading entire folders"
 msgid "Support uploading entire folders"
 msgstr "Prend en charge le téléchargement de dossiers entiers"
 msgstr "Prend en charge le téléchargement de dossiers entiers"
 
 
@@ -4636,12 +4664,12 @@ msgstr ""
 "Cela mettra à jour ou réinstallera l'interface Nginx sur %{nodeNames} vers "
 "Cela mettra à jour ou réinstallera l'interface Nginx sur %{nodeNames} vers "
 "la version %{version}."
 "la version %{version}."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:123
+#: src/views/preference/tabs/AuthSettings.vue:92
 msgid "Throttle"
 msgid "Throttle"
 msgstr "Limitation"
 msgstr "Limitation"
 
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
-#: src/views/preference/tabs/AuthSettings.vue:143
+#: src/views/preference/tabs/AuthSettings.vue:112
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 msgid "Tips"
 msgid "Tips"
 msgstr "Conseils"
 msgstr "Conseils"
@@ -4654,7 +4682,7 @@ msgstr ""
 "Astuce : Vous pouvez augmenter la capacité de traitement concurrent en "
 "Astuce : Vous pouvez augmenter la capacité de traitement concurrent en "
 "augmentant worker_processes ou worker_connections."
 "augmentant worker_processes ou worker_connections."
 
 
-#: src/views/notification/notificationColumns.tsx:52
+#: src/views/notification/notificationColumns.tsx:58
 msgid "Title"
 msgid "Title"
 msgstr "Titre"
 msgstr "Titre"
 
 
@@ -4777,6 +4805,14 @@ msgstr "Type"
 msgid "Unknown"
 msgid "Unknown"
 msgstr "Inconnu"
 msgstr "Inconnu"
 
 
+#: src/views/user/UserProfile.vue:218
+msgid "Update Password"
+msgstr "Mettre à jour le mot de passe"
+
+#: src/views/user/UserProfile.vue:142
+msgid "Update Profile"
+msgstr "Mettre à jour le profil"
+
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "Mise à jour réussie"
 msgstr "Mise à jour réussie"
@@ -4794,8 +4830,8 @@ msgid "Updated at"
 msgstr "Mis à jour le"
 msgstr "Mis à jour le"
 
 
 #: src/routes/modules/system.ts:33
 #: src/routes/modules/system.ts:33
-#: src/views/environments/list/Environment.vue:107
-#: src/views/environments/list/Environment.vue:99
+#: src/views/environments/list/Environment.vue:100
+#: src/views/environments/list/Environment.vue:108
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "Mettre à niveau"
 msgstr "Mettre à niveau"
@@ -4821,7 +4857,7 @@ msgstr "Téléverser des fichiers"
 msgid "Upload Folders"
 msgid "Upload Folders"
 msgstr "Télécharger des dossiers"
 msgstr "Télécharger des dossiers"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:173
+#: src/components/NgxConfigEditor/NgxUpstream.vue:177
 msgid "Upstream Name"
 msgid "Upstream Name"
 msgstr "Nom de l'amont"
 msgstr "Nom de l'amont"
 
 
@@ -4853,11 +4889,20 @@ msgstr "Utilisateur"
 msgid "User banned"
 msgid "User banned"
 msgstr "Utilisateur banni"
 msgstr "Utilisateur banni"
 
 
+#: src/views/user/UserProfile.vue:62
+msgid "User info updated successfully"
+msgstr "Informations utilisateur mises à jour avec succès"
+
 #: src/constants/errors/user.ts:8
 #: src/constants/errors/user.ts:8
 msgid "User not enabled otp as 2fa"
 msgid "User not enabled otp as 2fa"
 msgstr "L'utilisateur n'a pas activé l'OTP comme 2FA"
 msgstr "L'utilisateur n'a pas activé l'OTP comme 2FA"
 
 
+#: src/routes/modules/user.ts:19
+msgid "User Profile"
+msgstr "Profil utilisateur"
+
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
+#: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Nom d'utilisateur"
 msgstr "Nom d'utilisateur"
 
 
@@ -4948,7 +4993,7 @@ msgstr ""
 "Nous allons supprimer la configuration HTTPChallenge de ce fichier et "
 "Nous allons supprimer la configuration HTTPChallenge de ce fichier et "
 "recharger le Nginx. Êtes-vous sûr de vouloir continuer?"
 "recharger le Nginx. Êtes-vous sûr de vouloir continuer?"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:96
+#: src/views/preference/tabs/AuthSettings.vue:65
 msgid "Webauthn"
 msgid "Webauthn"
 msgstr "Webauthn"
 msgstr "Webauthn"
 
 
@@ -5032,12 +5077,12 @@ msgstr "Écriture du certificat sur le disque"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
-#: src/views/preference/tabs/AuthSettings.vue:162
+#: src/views/preference/tabs/AuthSettings.vue:131
 #: src/views/preference/tabs/CertSettings.vue:72
 #: src/views/preference/tabs/CertSettings.vue:72
 msgid "Yes"
 msgid "Yes"
 msgstr "Oui"
 msgstr "Oui"
 
 
-#: src/views/terminal/Terminal.vue:135
+#: src/views/terminal/Terminal.vue:132
 msgid ""
 msgid ""
 "You are accessing this terminal over an insecure HTTP connection on a "
 "You are accessing this terminal over an insecure HTTP connection on a "
 "non-localhost domain. This may expose sensitive information."
 "non-localhost domain. This may expose sensitive information."
@@ -5134,9 +5179,6 @@ msgstr "Vos clés d'accès"
 #~ msgid_plural "Total %{total} items"
 #~ msgid_plural "Total %{total} items"
 #~ msgstr[0] "Total %{total} élément"
 #~ msgstr[0] "Total %{total} élément"
 
 
-#~ msgid "Updated successfully"
-#~ msgstr "Mis à jour avec succés"
-
 #~ msgid "View Details"
 #~ msgid "View Details"
 #~ msgstr "Afficher les détails"
 #~ msgstr "Afficher les détails"
 
 

+ 127 - 85
app/src/language/ja_JP/app.po

@@ -104,7 +104,7 @@ msgstr "[Nginx UI] 証明書をディスクに書き込み中"
 msgid "2FA"
 msgid "2FA"
 msgstr "二要素認証"
 msgstr "二要素認証"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:69
+#: src/views/user/UserProfile.vue:151
 msgid "2FA Settings"
 msgid "2FA Settings"
 msgstr "ニ要素認証設定"
 msgstr "ニ要素認証設定"
 
 
@@ -130,8 +130,7 @@ msgstr "アクセスログ"
 msgid "ACME User"
 msgid "ACME User"
 msgstr "ACMEユーザー"
 msgstr "ACMEユーザー"
 
 
-#: src/views/notification/notificationColumns.tsx:66
-#: src/views/preference/tabs/AuthSettings.vue:29
+#: src/views/preference/tabs/AuthSettings.vue:26
 msgid "Action"
 msgid "Action"
 msgstr "操作"
 msgstr "操作"
 
 
@@ -142,9 +141,9 @@ msgstr "操作"
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/nginx_log/NginxLogList.vue:52
 #: src/views/nginx_log/NginxLogList.vue:52
+#: src/views/notification/notificationColumns.tsx:72
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
-#: src/views/site/site_list/columns.tsx:129
-#: src/views/stream/columns.tsx:64
+#: src/views/site/site_list/columns.tsx:129 src/views/stream/columns.tsx:64
 #: src/views/user/userColumns.tsx:58
 #: src/views/user/userColumns.tsx:58
 msgid "Actions"
 msgid "Actions"
 msgstr "操作"
 msgstr "操作"
@@ -159,10 +158,10 @@ msgid "Actual worker to configured ratio"
 msgstr "実際のワーカー数と設定値の比率"
 msgstr "実際のワーカー数と設定値の比率"
 
 
 #: src/components/NgxConfigEditor/NgxServer.vue:112
 #: src/components/NgxConfigEditor/NgxServer.vue:112
-#: src/components/NgxConfigEditor/NgxUpstream.vue:155 src/language/curd.ts:19
+#: src/components/NgxConfigEditor/NgxUpstream.vue:159 src/language/curd.ts:19
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
-#: src/views/stream/StreamList.vue:120
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "追加"
 msgstr "追加"
 
 
@@ -189,7 +188,7 @@ msgstr "Locationを追加"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "サイトを追加"
 msgstr "サイトを追加"
 
 
-#: src/views/stream/StreamList.vue:173
+#: src/views/stream/StreamList.vue:174
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "Streamを追加"
 msgstr "Streamを追加"
 
 
@@ -247,7 +246,7 @@ msgstr "アプリ"
 msgid "Arch"
 msgid "Arch"
 msgstr "\"アーキテクチャ\""
 msgstr "\"アーキテクチャ\""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:161
+#: src/views/preference/tabs/AuthSettings.vue:130
 msgid "Are you sure to delete this banned IP immediately?"
 msgid "Are you sure to delete this banned IP immediately?"
 msgstr "このIPアドレス制限を削除してもよろしいですか?"
 msgstr "このIPアドレス制限を削除してもよろしいですか?"
 
 
@@ -276,8 +275,8 @@ msgstr "チャットの記録をクリアしてもよろしいですか?"
 msgid "Are you sure you want to delete permanently?"
 msgid "Are you sure you want to delete permanently?"
 msgstr "完全に削除してもよろしいですか?"
 msgstr "完全に削除してもよろしいですか?"
 
 
-#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:99
-#: src/views/stream/StreamList.vue:156
+#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:100
+#: src/views/stream/StreamList.vue:157
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "削除してもよろしいですか?"
 msgstr "削除してもよろしいですか?"
 
 
@@ -317,7 +316,7 @@ msgstr "アシスタント"
 msgid "Attempt to fix"
 msgid "Attempt to fix"
 msgstr "修正を試みる"
 msgstr "修正を試みる"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:20
+#: src/views/preference/tabs/AuthSettings.vue:17
 msgid "Attempts"
 msgid "Attempts"
 msgstr "試行回数"
 msgstr "試行回数"
 
 
@@ -329,7 +328,7 @@ msgstr "認証"
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr "「パスキーで認証する」"
 msgstr "「パスキーで認証する」"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:87
+#: src/views/preference/tabs/AuthSettings.vue:56
 msgid "Authentication Settings"
 msgid "Authentication Settings"
 msgstr "認証設定"
 msgstr "認証設定"
 
 
@@ -404,15 +403,15 @@ msgstr "バックアップファイルが見つかりません:{0}"
 msgid "Backup has been downloaded successfully"
 msgid "Backup has been downloaded successfully"
 msgstr "バックアップは正常にダウンロードされました"
 msgstr "バックアップは正常にダウンロードされました"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:128
+#: src/views/preference/tabs/AuthSettings.vue:97
 msgid "Ban Threshold Minutes"
 msgid "Ban Threshold Minutes"
 msgstr "制限閾値(分)"
 msgstr "制限閾値(分)"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:149
+#: src/views/preference/tabs/AuthSettings.vue:118
 msgid "Banned IPs"
 msgid "Banned IPs"
 msgstr "IPアドレス制限"
 msgstr "IPアドレス制限"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:23
+#: src/views/preference/tabs/AuthSettings.vue:20
 msgid "Banned Until"
 msgid "Banned Until"
 msgstr "ブロック期限"
 msgstr "ブロック期限"
 
 
@@ -522,7 +521,7 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
-#: src/views/site/components/SiteStatusSegmented.vue:97
+#: src/views/site/components/SiteStatusSelect.vue:124
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
@@ -640,6 +639,10 @@ msgstr "チャレンジタイプ"
 msgid "Change Certificate"
 msgid "Change Certificate"
 msgstr "証明書を変更する"
 msgstr "証明書を変更する"
 
 
+#: src/views/user/UserProfile.vue:181
+msgid "Change Password"
+msgstr "パスワードを変更する"
+
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 msgid "Changed Certificate"
 msgid "Changed Certificate"
 msgid_plural "Changed Certificates"
 msgid_plural "Changed Certificates"
@@ -794,13 +797,11 @@ msgstr "正常に削除しました"
 msgid "Click or drag backup file to this area to upload"
 msgid "Click or drag backup file to this area to upload"
 msgstr "この領域にバックアップファイルをクリックまたはドラッグしてアップロードします"
 msgstr "この領域にバックアップファイルをクリックまたはドラッグしてアップロードします"
 
 
-#: src/language/curd.ts:49
-#: src/language/curd.ts:53
+#: src/language/curd.ts:49 src/language/curd.ts:53
 msgid "Click or drag files to this area to upload"
 msgid "Click or drag files to this area to upload"
 msgstr "クリックまたはドラッグしてファイルをこのエリアにアップロード"
 msgstr "クリックまたはドラッグしてファイルをこのエリアにアップロード"
 
 
-#: src/language/curd.ts:50
-#: src/language/curd.ts:54
+#: src/language/curd.ts:50 src/language/curd.ts:54
 msgid "Click or drag folders to this area to upload"
 msgid "Click or drag folders to this area to upload"
 msgstr "フォルダをクリックまたはドラッグしてこのエリアにアップロード"
 msgstr "フォルダをクリックまたはドラッグしてこのエリアにアップロード"
 
 
@@ -920,6 +921,10 @@ msgstr "設定"
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr "SSLを設定する"
 msgstr "SSLを設定する"
 
 
+#: src/views/user/UserProfile.vue:204
+msgid "Confirm New Password"
+msgstr "新しいパスワードを確認"
+
 #: src/views/dashboard/Environments.vue:141
 #: src/views/dashboard/Environments.vue:141
 msgid "Connected"
 msgid "Connected"
 msgstr "接続済み"
 msgstr "接続済み"
@@ -928,7 +933,7 @@ msgstr "接続済み"
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "接続エラー、再接続を試みています..."
 msgstr "接続エラー、再接続を試みています..."
 
 
-#: src/views/terminal/Terminal.vue:142
+#: src/views/terminal/Terminal.vue:139
 msgid "Connection lost, please refresh the page."
 msgid "Connection lost, please refresh the page."
 msgstr "接続が失われました。ページを再読み込みしてください。"
 msgstr "接続が失われました。ページを再読み込みしてください。"
 
 
@@ -984,7 +989,7 @@ msgstr "CPU使用率が比較的高いため、Nginxの設定を最適化する
 msgid "CPU:"
 msgid "CPU:"
 msgstr "CPU:"
 msgstr "CPU:"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:166
+#: src/components/NgxConfigEditor/NgxUpstream.vue:170
 msgid "Create"
 msgid "Create"
 msgstr "作成"
 msgstr "作成"
 
 
@@ -1011,7 +1016,7 @@ msgid ""
 msgstr "Nginx 設定と Nginx UI 設定を含むシステムバックアップを作成します。バックアップファイルは自動的にコンピュータにダウンロードされます。"
 msgstr "Nginx 設定と Nginx UI 設定を含むシステムバックアップを作成します。バックアップファイルは自動的にコンピュータにダウンロードされます。"
 
 
 #: src/views/environments/group/columns.ts:29
 #: src/views/environments/group/columns.ts:29
-#: src/views/notification/notificationColumns.tsx:45
+#: src/views/notification/notificationColumns.tsx:51
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/user/userColumns.tsx:46
 #: src/views/user/userColumns.tsx:46
@@ -1050,6 +1055,10 @@ msgstr "現在のアクティブな接続"
 msgid "Current Content"
 msgid "Current Content"
 msgstr "現在の内容"
 msgstr "現在の内容"
 
 
+#: src/views/user/UserProfile.vue:186
+msgid "Current Password"
+msgstr "現在のパスワード"
+
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 msgid "Current usage"
 msgid "Current usage"
 msgstr "現在の使用率"
 msgstr "現在の使用率"
@@ -1089,8 +1098,8 @@ msgstr "共有メモリゾーンの名前とサイズを定義します(例: p
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/views/certificate/components/RemoveCert.vue:88
 #: src/views/certificate/components/RemoveCert.vue:88
-#: src/views/site/site_list/SiteList.vue:108
-#: src/views/stream/StreamList.vue:165
+#: src/views/site/site_list/SiteList.vue:109
+#: src/views/stream/StreamList.vue:166
 msgid "Delete"
 msgid "Delete"
 msgstr "削除"
 msgstr "削除"
 
 
@@ -1167,7 +1176,7 @@ msgstr "宛先ファイルは既に存在します"
 msgid "Destination file: {0} already exists"
 msgid "Destination file: {0} already exists"
 msgstr "宛先ファイル: {0} は既に存在します"
 msgstr "宛先ファイル: {0} は既に存在します"
 
 
-#: src/views/notification/notificationColumns.tsx:60
+#: src/views/notification/notificationColumns.tsx:66
 msgid "Details"
 msgid "Details"
 msgstr "詳細"
 msgstr "詳細"
 
 
@@ -1211,11 +1220,11 @@ msgstr "ディレクトリレベル"
 msgid "Directory path to store cache files"
 msgid "Directory path to store cache files"
 msgstr "キャッシュファイルを保存するディレクトリパス"
 msgstr "キャッシュファイルを保存するディレクトリパス"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:88
+#: src/views/site/components/SiteStatusSelect.vue:115
 msgid "disable"
 msgid "disable"
 msgstr "無効化"
 msgstr "無効化"
 
 
-#: src/views/stream/StreamList.vue:136
+#: src/views/stream/StreamList.vue:137
 msgid "Disable"
 msgid "Disable"
 msgstr "無効化"
 msgstr "無効化"
 
 
@@ -1276,7 +1285,7 @@ msgstr "ストリーム %{name} を %{node} から無効化しました"
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:134
+#: src/views/site/components/SiteStatusSelect.vue:162
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/stream/components/StreamEditor.vue:30
 #: src/views/stream/components/StreamEditor.vue:30
@@ -1284,7 +1293,7 @@ msgstr "ストリーム %{name} を %{node} から無効化しました"
 msgid "Disabled"
 msgid "Disabled"
 msgstr "無効"
 msgstr "無効"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:40
+#: src/views/site/components/SiteStatusSelect.vue:67
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/StreamList.vue:56
 #: src/views/stream/StreamList.vue:56
 msgid "Disabled successfully"
 msgid "Disabled successfully"
@@ -1312,7 +1321,7 @@ msgstr "DNS01"
 msgid "Do not enable this option unless you are sure that you need it."
 msgid "Do not enable this option unless you are sure that you need it."
 msgstr "このオプションは必要な場合以外は有効にしないでください。"
 msgstr "このオプションは必要な場合以外は有効にしないでください。"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:93
+#: src/views/site/components/SiteStatusSelect.vue:120
 msgid "Do you want to %{action} this site?"
 msgid "Do you want to %{action} this site?"
 msgstr "このサイトを%{action}しますか?"
 msgstr "このサイトを%{action}しますか?"
 
 
@@ -1387,9 +1396,9 @@ msgid ""
 msgstr "一部のブラウザのセキュリティポリシーのため、localhostで実行している場合を除き、非HTTPSウェブサイトではパスキーを使用できません。"
 msgstr "一部のブラウザのセキュリティポリシーのため、localhostで実行している場合を除き、非HTTPSウェブサイトではパスキーを使用できません。"
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:94
+#: src/views/site/site_list/SiteList.vue:95
 #: src/views/stream/components/StreamDuplicate.vue:64
 #: src/views/stream/components/StreamDuplicate.vue:64
-#: src/views/stream/StreamList.vue:151
+#: src/views/stream/StreamList.vue:152
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "複製"
 msgstr "複製"
 
 
@@ -1433,11 +1442,11 @@ msgstr "メール"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "メールアドレス (*)"
 msgstr "メールアドレス (*)"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:87
+#: src/views/site/components/SiteStatusSelect.vue:114
 msgid "enable"
 msgid "enable"
 msgstr "有効にする"
 msgstr "有効にする"
 
 
-#: src/views/stream/StreamList.vue:144
+#: src/views/stream/StreamList.vue:145
 msgid "Enable"
 msgid "Enable"
 msgstr "有効にする"
 msgstr "有効にする"
 
 
@@ -1535,7 +1544,7 @@ msgstr "TOTP を有効にする"
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:130
+#: src/views/site/components/SiteStatusSelect.vue:159
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/stream/components/RightPanel/Basic.vue:62
 #: src/views/stream/components/RightPanel/Basic.vue:62
@@ -1544,7 +1553,7 @@ msgstr "TOTP を有効にする"
 msgid "Enabled"
 msgid "Enabled"
 msgstr "有効"
 msgstr "有効"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:27
+#: src/views/site/components/SiteStatusSelect.vue:54
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/StreamList.vue:46
 #: src/views/stream/StreamList.vue:46
@@ -1753,23 +1762,23 @@ msgstr "証明書の削除に失敗しました"
 msgid "Failed to delete certificate from database: %{error}"
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "データベースから証明書の削除に失敗しました: %{error}"
 msgstr "データベースから証明書の削除に失敗しました: %{error}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:46
+#: src/views/site/components/SiteStatusSelect.vue:73
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/StreamList.vue:60
 #: src/views/stream/StreamList.vue:60
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "%{msg}の無効化に失敗しました"
 msgstr "%{msg}の無効化に失敗しました"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:72
+#: src/views/site/components/SiteStatusSelect.vue:99
 msgid "Failed to disable maintenance mode %{msg}"
 msgid "Failed to disable maintenance mode %{msg}"
 msgstr "メンテナンスモードの無効化に失敗しました: %{msg}"
 msgstr "メンテナンスモードの無効化に失敗しました: %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:33
+#: src/views/site/components/SiteStatusSelect.vue:60
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/StreamList.vue:50
 #: src/views/stream/StreamList.vue:50
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "有効化に失敗しました %{msg}"
 msgstr "有効化に失敗しました %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:59
+#: src/views/site/components/SiteStatusSelect.vue:86
 msgid "Failed to enable maintenance mode %{msg}"
 msgid "Failed to enable maintenance mode %{msg}"
 msgstr "メンテナンスモードの有効化に失敗しました: %{msg}"
 msgstr "メンテナンスモードの有効化に失敗しました: %{msg}"
 
 
@@ -2080,7 +2089,7 @@ msgstr "ICP番号"
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr "空白の場合、デフォルトの CA ディレクトリが使用されます。"
 msgstr "空白の場合、デフォルトの CA ディレクトリが使用されます。"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:144
+#: src/views/preference/tabs/AuthSettings.vue:113
 msgid ""
 msgid ""
 "If the number of login failed attempts from a ip reach the max attempts in "
 "If the number of login failed attempts from a ip reach the max attempts in "
 "ban threshold minutes, the ip will be banned for a period of time."
 "ban threshold minutes, the ip will be banned for a period of time."
@@ -2239,7 +2248,7 @@ msgstr "無効なリクエスト形式"
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "無効なセキュリティトークンフォーマット"
 msgstr "無効なセキュリティトークンフォーマット"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:17
+#: src/views/preference/tabs/AuthSettings.vue:14
 msgid "IP"
 msgid "IP"
 msgstr "IP"
 msgstr "IP"
 
 
@@ -2352,7 +2361,7 @@ msgstr "リスト"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "平均負荷:"
 msgstr "平均負荷:"
 
 
-#: src/views/environments/list/Environment.vue:80
+#: src/views/environments/list/Environment.vue:81
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "設定から読み込む"
 msgstr "設定から読み込む"
 
 
@@ -2446,17 +2455,17 @@ msgstr ""
 "Nginx UI をインストールするユーザーは、このオプションを手動で有効にすることができます。Nginx UI の crontab "
 "Nginx UI をインストールするユーザーは、このオプションを手動で有効にすることができます。Nginx UI の crontab "
 "タスクスケジューラは、設定した間隔(分単位)で logrotate コマンドを実行します。"
 "タスクスケジューラは、設定した間隔(分単位)で logrotate コマンドを実行します。"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:138
+#: src/views/site/components/SiteStatusSelect.vue:165
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_list/columns.tsx:118
 #: src/views/site/site_list/columns.tsx:118
 msgid "Maintenance"
 msgid "Maintenance"
 msgstr "メンテナンス"
 msgstr "メンテナンス"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:66
+#: src/views/site/components/SiteStatusSelect.vue:93
 msgid "Maintenance mode disabled successfully"
 msgid "Maintenance mode disabled successfully"
 msgstr "メンテナンスモードを無効にしました"
 msgstr "メンテナンスモードを無効にしました"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:53
+#: src/views/site/components/SiteStatusSelect.vue:80
 msgid "Maintenance mode enabled successfully"
 msgid "Maintenance mode enabled successfully"
 msgstr "メンテナンスモードが有効になりました"
 msgstr "メンテナンスモードが有効になりました"
 
 
@@ -2523,7 +2532,7 @@ msgstr "マスタープロセス"
 msgid "Master Process"
 msgid "Master Process"
 msgstr "マスタープロセス"
 msgstr "マスタープロセス"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:134
+#: src/views/preference/tabs/AuthSettings.vue:103
 msgid "Max Attempts"
 msgid "Max Attempts"
 msgstr "最大試行回数"
 msgstr "最大試行回数"
 
 
@@ -2622,7 +2631,7 @@ msgstr "モジュール"
 msgid "Multi-line Directive"
 msgid "Multi-line Directive"
 msgstr "複数行ディレクティブ"
 msgstr "複数行ディレクティブ"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:178
+#: src/components/NgxConfigEditor/NgxUpstream.vue:182
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateList/certColumns.tsx:9
 #: src/views/certificate/CertificateList/certColumns.tsx:9
@@ -2639,7 +2648,7 @@ msgstr "複数行ディレクティブ"
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/StreamDuplicate.vue:71
 #: src/views/stream/components/StreamDuplicate.vue:71
-#: src/views/stream/StreamList.vue:178
+#: src/views/stream/StreamList.vue:179
 msgid "Name"
 msgid "Name"
 msgstr "名前"
 msgstr "名前"
 
 
@@ -2671,6 +2680,10 @@ msgstr "新規インストール"
 msgid "New name"
 msgid "New name"
 msgstr "新しい名前"
 msgstr "新しい名前"
 
 
+#: src/views/user/UserProfile.vue:195
+msgid "New Password"
+msgstr "新しいパスワード"
+
 #: src/views/config/ConfigEditor.vue:328
 #: src/views/config/ConfigEditor.vue:328
 msgid "New Path"
 msgid "New Path"
 msgstr "新しいパス"
 msgstr "新しいパス"
@@ -2884,9 +2897,9 @@ msgstr "Nginx.conf には streams-enabled ディレクトリが含まれてい
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
-#: src/views/preference/tabs/AuthSettings.vue:163
+#: src/views/preference/tabs/AuthSettings.vue:132
 #: src/views/preference/tabs/CertSettings.vue:73
 #: src/views/preference/tabs/CertSettings.vue:73
-#: src/views/site/site_list/SiteList.vue:97 src/views/stream/StreamList.vue:154
+#: src/views/site/site_list/SiteList.vue:98 src/views/stream/StreamList.vue:155
 msgid "No"
 msgid "No"
 msgstr "いいえ"
 msgstr "いいえ"
 
 
@@ -3015,6 +3028,7 @@ msgid "Off"
 msgstr "オフ"
 msgstr "オフ"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/components/NgxConfigEditor/NgxUpstream.vue:145
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3026,13 +3040,13 @@ msgstr "オフライン"
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/views/notification/Notification.vue:39
 #: src/views/notification/Notification.vue:39
-#: src/views/site/components/SiteStatusSegmented.vue:96
+#: src/views/site/components/SiteStatusSelect.vue:123
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
-#: src/views/site/site_list/SiteList.vue:98
+#: src/views/site/site_list/SiteList.vue:99
 #: src/views/stream/components/RightPanel/Basic.vue:46
 #: src/views/stream/components/RightPanel/Basic.vue:46
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:156
 #: src/views/system/Backup/BackupCreator.vue:149
 #: src/views/system/Backup/BackupCreator.vue:149
 msgid "OK"
 msgid "OK"
 msgstr "OK"
 msgstr "OK"
@@ -3150,6 +3164,14 @@ msgstr "パスワードが間違っています"
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr "パスワードの長さは20文字を超えることはできません"
 msgstr "パスワードの長さは20文字を超えることはできません"
 
 
+#: src/views/user/UserProfile.vue:96
+msgid "Password updated successfully"
+msgstr "パスワードが正常に更新されました"
+
+#: src/views/user/UserProfile.vue:75
+msgid "Passwords do not match"
+msgstr "パスワードが一致しません"
+
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
@@ -3189,6 +3211,10 @@ msgstr "パフォーマンス設定が正常に保存されました"
 msgid "Performing core upgrade"
 msgid "Performing core upgrade"
 msgstr "コアアップグレードを実行中"
 msgstr "コアアップグレードを実行中"
 
 
+#: src/views/user/UserProfile.vue:121
+msgid "Personal Information"
+msgstr "個人情報"
+
 #: src/constants/errors/self_check.ts:19
 #: src/constants/errors/self_check.ts:19
 msgid "PID path not exist"
 msgid "PID path not exist"
 msgstr "PID パスが存在しません"
 msgstr "PID パスが存在しません"
@@ -3305,17 +3331,17 @@ msgstr "バックアップファイルを選択してください"
 msgid "Please select at least one item"
 msgid "Please select at least one item"
 msgstr "少なくとも1つの項目を選択してください"
 msgstr "少なくとも1つの項目を選択してください"
 
 
-#: src/views/environments/list/Environment.vue:112
+#: src/views/environments/list/Environment.vue:113
 #: src/views/environments/list/Environment.vue:35
 #: src/views/environments/list/Environment.vue:35
 msgid "Please select at least one node to reload Nginx"
 msgid "Please select at least one node to reload Nginx"
 msgstr "Nginxをリロードするには、少なくとも1つのノードを選択してください"
 msgstr "Nginxをリロードするには、少なくとも1つのノードを選択してください"
 
 
-#: src/views/environments/list/Environment.vue:133
+#: src/views/environments/list/Environment.vue:134
 #: src/views/environments/list/Environment.vue:49
 #: src/views/environments/list/Environment.vue:49
 msgid "Please select at least one node to restart Nginx"
 msgid "Please select at least one node to restart Nginx"
 msgstr "Nginx を再起動するには、少なくとも 1 つのノードを選択してください"
 msgstr "Nginx を再起動するには、少なくとも 1 つのノードを選択してください"
 
 
-#: src/views/environments/list/Environment.vue:91
+#: src/views/environments/list/Environment.vue:92
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "少なくとも1つのノードを選択してアップグレードしてください"
 msgstr "少なくとも1つのノードを選択してアップグレードしてください"
 
 
@@ -3477,8 +3503,8 @@ msgstr "再読み込み"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/EnvGroup.vue:50
 #: src/views/environments/group/EnvGroup.vue:50
-#: src/views/environments/list/Environment.vue:120
-#: src/views/environments/list/Environment.vue:128
+#: src/views/environments/list/Environment.vue:121
+#: src/views/environments/list/Environment.vue:129
 msgid "Reload Nginx"
 msgid "Reload Nginx"
 msgstr "Nginx をリロード"
 msgstr "Nginx をリロード"
 
 
@@ -3514,12 +3540,12 @@ msgstr "再読み込み中"
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr "nginx をリロード中"
 msgstr "nginx をリロード中"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:168
+#: src/views/preference/tabs/AuthSettings.vue:137
 msgid "Remove"
 msgid "Remove"
 msgstr "削除"
 msgstr "削除"
 
 
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
-#: src/views/preference/tabs/AuthSettings.vue:50
+#: src/views/preference/tabs/AuthSettings.vue:47
 msgid "Remove successfully"
 msgid "Remove successfully"
 msgstr "削除に成功しました"
 msgstr "削除に成功しました"
 
 
@@ -3655,8 +3681,8 @@ msgid "Restart"
 msgstr "再起動"
 msgstr "再起動"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
-#: src/views/environments/list/Environment.vue:141
-#: src/views/environments/list/Environment.vue:149
+#: src/views/environments/list/Environment.vue:142
+#: src/views/environments/list/Environment.vue:150
 msgid "Restart Nginx"
 msgid "Restart Nginx"
 msgstr "Nginx を再起動"
 msgstr "Nginx を再起動"
 
 
@@ -3734,15 +3760,15 @@ msgid ""
 "action cannot be undone."
 "action cannot be undone."
 msgstr "証明書を失効させると、現在それを使用しているすべてのサービスに影響します。この操作は元に戻せません。"
 msgstr "証明書を失効させると、現在それを使用しているすべてのサービスに影響します。この操作は元に戻せません。"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:106
+#: src/views/preference/tabs/AuthSettings.vue:75
 msgid "RP Display Name"
 msgid "RP Display Name"
 msgstr "RP 表示名"
 msgstr "RP 表示名"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:112
+#: src/views/preference/tabs/AuthSettings.vue:81
 msgid "RP Origins"
 msgid "RP Origins"
 msgstr "RP オリジン"
 msgstr "RP オリジン"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:100
+#: src/views/preference/tabs/AuthSettings.vue:69
 msgid "RPID"
 msgid "RPID"
 msgstr "RPID"
 msgstr "RPID"
 
 
@@ -3847,6 +3873,10 @@ msgstr "検索モジュール名"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "シークレットがコピーされました"
 msgstr "シークレットがコピーされました"
 
 
+#: src/views/user/UserProfile.vue:175
+msgid "Security Settings"
+msgstr "セキュリティ設定"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 msgid "Security Token"
 msgid "Security Token"
@@ -3920,7 +3950,7 @@ msgid ""
 "step of DNS challenge."
 "step of DNS challenge."
 msgstr "DNSチャレンジのステップでシステムのネームサーバーを上書きするために、再帰的なネームサーバーを設定してください。"
 msgstr "DNSチャレンジのステップでシステムのネームサーバーを上書きするために、再帰的なネームサーバーを設定してください。"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:89
+#: src/views/site/components/SiteStatusSelect.vue:116
 msgid "set to maintenance mode"
 msgid "set to maintenance mode"
 msgstr "メンテナンスモードに設定"
 msgstr "メンテナンスモードに設定"
 
 
@@ -4157,13 +4187,11 @@ msgstr ""
 "リバースプロキシ経由で使用されている場合は、このリンクを参照して対応する設定ファイルを作成してください: "
 "リバースプロキシ経由で使用されている場合は、このリンクを参照して対応する設定ファイルを作成してください: "
 "https://nginxui.com/guide/nginx-proxy-example.html"
 "https://nginxui.com/guide/nginx-proxy-example.html"
 
 
-#: src/language/curd.ts:51
-#: src/language/curd.ts:55
+#: src/language/curd.ts:51 src/language/curd.ts:55
 msgid "Support single or batch upload of files"
 msgid "Support single or batch upload of files"
 msgstr "単一または一括ファイルアップロードをサポート"
 msgstr "単一または一括ファイルアップロードをサポート"
 
 
-#: src/language/curd.ts:52
-#: src/language/curd.ts:56
+#: src/language/curd.ts:52 src/language/curd.ts:56
 msgid "Support uploading entire folders"
 msgid "Support uploading entire folders"
 msgstr "フォルダ全体のアップロードをサポート"
 msgstr "フォルダ全体のアップロードをサポート"
 
 
@@ -4475,12 +4503,12 @@ msgstr "これにより設定ファイルとデータベースが復元されま
 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr "これにより、%{nodeNames} 上の Nginx UI が %{version} にアップグレードまたは再インストールされます。"
 msgstr "これにより、%{nodeNames} 上の Nginx UI が %{version} にアップグレードまたは再インストールされます。"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:123
+#: src/views/preference/tabs/AuthSettings.vue:92
 msgid "Throttle"
 msgid "Throttle"
 msgstr "スロットル"
 msgstr "スロットル"
 
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
-#: src/views/preference/tabs/AuthSettings.vue:143
+#: src/views/preference/tabs/AuthSettings.vue:112
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 msgid "Tips"
 msgid "Tips"
 msgstr "ヒント"
 msgstr "ヒント"
@@ -4491,7 +4519,7 @@ msgid ""
 "worker_processes or worker_connections"
 "worker_processes or worker_connections"
 msgstr "ヒント: worker_processes または worker_connections を増やすことで、並列処理能力を向上させることができます"
 msgstr "ヒント: worker_processes または worker_connections を増やすことで、並列処理能力を向上させることができます"
 
 
-#: src/views/notification/notificationColumns.tsx:52
+#: src/views/notification/notificationColumns.tsx:58
 msgid "Title"
 msgid "Title"
 msgstr "タイトル"
 msgstr "タイトル"
 
 
@@ -4605,6 +4633,14 @@ msgstr "タイプ"
 msgid "Unknown"
 msgid "Unknown"
 msgstr "不明"
 msgstr "不明"
 
 
+#: src/views/user/UserProfile.vue:218
+msgid "Update Password"
+msgstr "パスワードを更新"
+
+#: src/views/user/UserProfile.vue:142
+msgid "Update Profile"
+msgstr "プロフィールを更新"
+
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "更新に成功しました"
 msgstr "更新に成功しました"
@@ -4622,8 +4658,8 @@ msgid "Updated at"
 msgstr "更新日時"
 msgstr "更新日時"
 
 
 #: src/routes/modules/system.ts:33
 #: src/routes/modules/system.ts:33
-#: src/views/environments/list/Environment.vue:107
-#: src/views/environments/list/Environment.vue:99
+#: src/views/environments/list/Environment.vue:100
+#: src/views/environments/list/Environment.vue:108
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "アップグレード"
 msgstr "アップグレード"
@@ -4649,7 +4685,7 @@ msgstr "ファイルをアップロード"
 msgid "Upload Folders"
 msgid "Upload Folders"
 msgstr "フォルダをアップロード"
 msgstr "フォルダをアップロード"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:173
+#: src/components/NgxConfigEditor/NgxUpstream.vue:177
 msgid "Upstream Name"
 msgid "Upstream Name"
 msgstr "アップストリーム名"
 msgstr "アップストリーム名"
 
 
@@ -4681,11 +4717,20 @@ msgstr "ユーザー"
 msgid "User banned"
 msgid "User banned"
 msgstr "ユーザーが禁止されました"
 msgstr "ユーザーが禁止されました"
 
 
+#: src/views/user/UserProfile.vue:62
+msgid "User info updated successfully"
+msgstr "ユーザー情報が正常に更新されました"
+
 #: src/constants/errors/user.ts:8
 #: src/constants/errors/user.ts:8
 msgid "User not enabled otp as 2fa"
 msgid "User not enabled otp as 2fa"
 msgstr "ユーザーはOTPを2FAとして有効にしていません"
 msgstr "ユーザーはOTPを2FAとして有効にしていません"
 
 
+#: src/routes/modules/user.ts:19
+msgid "User Profile"
+msgstr "ユーザープロフィール"
+
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
+#: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "ユーザー名"
 msgstr "ユーザー名"
 
 
@@ -4769,7 +4814,7 @@ msgid ""
 "the Nginx. Are you sure you want to continue?"
 "the Nginx. Are you sure you want to continue?"
 msgstr "このファイルからHTTPChallengeの設定を削除し、Nginxを再読み込みします。続行してもよろしいですか?"
 msgstr "このファイルからHTTPChallengeの設定を削除し、Nginxを再読み込みします。続行してもよろしいですか?"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:96
+#: src/views/preference/tabs/AuthSettings.vue:65
 msgid "Webauthn"
 msgid "Webauthn"
 msgstr "WebAuthn"
 msgstr "WebAuthn"
 
 
@@ -4844,12 +4889,12 @@ msgstr "証明書をディスクに書き込み中"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
-#: src/views/preference/tabs/AuthSettings.vue:162
+#: src/views/preference/tabs/AuthSettings.vue:131
 #: src/views/preference/tabs/CertSettings.vue:72
 #: src/views/preference/tabs/CertSettings.vue:72
 msgid "Yes"
 msgid "Yes"
 msgstr "はい"
 msgstr "はい"
 
 
-#: src/views/terminal/Terminal.vue:135
+#: src/views/terminal/Terminal.vue:132
 msgid ""
 msgid ""
 "You are accessing this terminal over an insecure HTTP connection on a "
 "You are accessing this terminal over an insecure HTTP connection on a "
 "non-localhost domain. This may expose sensitive information."
 "non-localhost domain. This may expose sensitive information."
@@ -4937,9 +4982,6 @@ msgstr "あなたのパスキー"
 #~ msgid_plural "Total %{total} items"
 #~ msgid_plural "Total %{total} items"
 #~ msgstr[0] "合計 %{total} アイテム"
 #~ msgstr[0] "合計 %{total} アイテム"
 
 
-#~ msgid "Updated successfully"
-#~ msgstr "更新が成功しました"
-
 #~ msgid "View Details"
 #~ msgid "View Details"
 #~ msgstr "詳細を表示します"
 #~ msgstr "詳細を表示します"
 
 

+ 127 - 85
app/src/language/ko_KR/app.po

@@ -102,7 +102,7 @@ msgstr "[Nginx UI] 인증서를 디스크에 작성 중"
 msgid "2FA"
 msgid "2FA"
 msgstr "2FA"
 msgstr "2FA"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:69
+#: src/views/user/UserProfile.vue:151
 msgid "2FA Settings"
 msgid "2FA Settings"
 msgstr "2FA 설정"
 msgstr "2FA 설정"
 
 
@@ -128,8 +128,7 @@ msgstr "접근 로그"
 msgid "ACME User"
 msgid "ACME User"
 msgstr "ACME 사용자"
 msgstr "ACME 사용자"
 
 
-#: src/views/notification/notificationColumns.tsx:66
-#: src/views/preference/tabs/AuthSettings.vue:29
+#: src/views/preference/tabs/AuthSettings.vue:26
 msgid "Action"
 msgid "Action"
 msgstr "작업"
 msgstr "작업"
 
 
@@ -140,9 +139,9 @@ msgstr "작업"
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/nginx_log/NginxLogList.vue:52
 #: src/views/nginx_log/NginxLogList.vue:52
+#: src/views/notification/notificationColumns.tsx:72
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
-#: src/views/site/site_list/columns.tsx:129
-#: src/views/stream/columns.tsx:64
+#: src/views/site/site_list/columns.tsx:129 src/views/stream/columns.tsx:64
 #: src/views/user/userColumns.tsx:58
 #: src/views/user/userColumns.tsx:58
 msgid "Actions"
 msgid "Actions"
 msgstr "작업"
 msgstr "작업"
@@ -157,10 +156,10 @@ msgid "Actual worker to configured ratio"
 msgstr "실제 작업자 대 구성 비율"
 msgstr "실제 작업자 대 구성 비율"
 
 
 #: src/components/NgxConfigEditor/NgxServer.vue:112
 #: src/components/NgxConfigEditor/NgxServer.vue:112
-#: src/components/NgxConfigEditor/NgxUpstream.vue:155 src/language/curd.ts:19
+#: src/components/NgxConfigEditor/NgxUpstream.vue:159 src/language/curd.ts:19
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
-#: src/views/stream/StreamList.vue:120
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "추가"
 msgstr "추가"
 
 
@@ -187,7 +186,7 @@ msgstr "위치 추가"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "사이트 추가"
 msgstr "사이트 추가"
 
 
-#: src/views/stream/StreamList.vue:173
+#: src/views/stream/StreamList.vue:174
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "스트림 추가"
 msgstr "스트림 추가"
 
 
@@ -245,7 +244,7 @@ msgstr "앱"
 msgid "Arch"
 msgid "Arch"
 msgstr "\"아키텍처\""
 msgstr "\"아키텍처\""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:161
+#: src/views/preference/tabs/AuthSettings.vue:130
 msgid "Are you sure to delete this banned IP immediately?"
 msgid "Are you sure to delete this banned IP immediately?"
 msgstr "차단된 IP를 즉시 삭제하시겠습니까?"
 msgstr "차단된 IP를 즉시 삭제하시겠습니까?"
 
 
@@ -274,8 +273,8 @@ msgstr "채팅 기록을 지우시겠습니까?"
 msgid "Are you sure you want to delete permanently?"
 msgid "Are you sure you want to delete permanently?"
 msgstr "정말 영구적으로 삭제하시겠습니까?"
 msgstr "정말 영구적으로 삭제하시겠습니까?"
 
 
-#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:99
-#: src/views/stream/StreamList.vue:156
+#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:100
+#: src/views/stream/StreamList.vue:157
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "정말 삭제하시겠습니까?"
 msgstr "정말 삭제하시겠습니까?"
 
 
@@ -315,7 +314,7 @@ msgstr "어시스턴트"
 msgid "Attempt to fix"
 msgid "Attempt to fix"
 msgstr "수정 시도"
 msgstr "수정 시도"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:20
+#: src/views/preference/tabs/AuthSettings.vue:17
 msgid "Attempts"
 msgid "Attempts"
 msgstr "시도 횟수"
 msgstr "시도 횟수"
 
 
@@ -327,7 +326,7 @@ msgstr "인증"
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr "패스키로 인증"
 msgstr "패스키로 인증"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:87
+#: src/views/preference/tabs/AuthSettings.vue:56
 msgid "Authentication Settings"
 msgid "Authentication Settings"
 msgstr "인증 설정"
 msgstr "인증 설정"
 
 
@@ -402,15 +401,15 @@ msgstr "백업 파일을 찾을 수 없음: {0}"
 msgid "Backup has been downloaded successfully"
 msgid "Backup has been downloaded successfully"
 msgstr "백업이 성공적으로 다운로드되었습니다"
 msgstr "백업이 성공적으로 다운로드되었습니다"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:128
+#: src/views/preference/tabs/AuthSettings.vue:97
 msgid "Ban Threshold Minutes"
 msgid "Ban Threshold Minutes"
 msgstr "차단 시간(분)"
 msgstr "차단 시간(분)"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:149
+#: src/views/preference/tabs/AuthSettings.vue:118
 msgid "Banned IPs"
 msgid "Banned IPs"
 msgstr "차단된 IP"
 msgstr "차단된 IP"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:23
+#: src/views/preference/tabs/AuthSettings.vue:20
 msgid "Banned Until"
 msgid "Banned Until"
 msgstr "차단될 시간"
 msgstr "차단될 시간"
 
 
@@ -520,7 +519,7 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
-#: src/views/site/components/SiteStatusSegmented.vue:97
+#: src/views/site/components/SiteStatusSelect.vue:124
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
@@ -639,6 +638,10 @@ msgstr "인증 방법"
 msgid "Change Certificate"
 msgid "Change Certificate"
 msgstr "인증서 변경"
 msgstr "인증서 변경"
 
 
+#: src/views/user/UserProfile.vue:181
+msgid "Change Password"
+msgstr "비밀번호 변경"
+
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 msgid "Changed Certificate"
 msgid "Changed Certificate"
 msgid_plural "Changed Certificates"
 msgid_plural "Changed Certificates"
@@ -790,13 +793,11 @@ msgstr "성공적으로 제거됨"
 msgid "Click or drag backup file to this area to upload"
 msgid "Click or drag backup file to this area to upload"
 msgstr "이 영역으로 백업 파일을 클릭하거나 드래그하여 업로드하십시오."
 msgstr "이 영역으로 백업 파일을 클릭하거나 드래그하여 업로드하십시오."
 
 
-#: src/language/curd.ts:49
-#: src/language/curd.ts:53
+#: src/language/curd.ts:49 src/language/curd.ts:53
 msgid "Click or drag files to this area to upload"
 msgid "Click or drag files to this area to upload"
 msgstr "파일을 클릭하거나 이 영역으로 드래그하여 업로드하세요"
 msgstr "파일을 클릭하거나 이 영역으로 드래그하여 업로드하세요"
 
 
-#: src/language/curd.ts:50
-#: src/language/curd.ts:54
+#: src/language/curd.ts:50 src/language/curd.ts:54
 msgid "Click or drag folders to this area to upload"
 msgid "Click or drag folders to this area to upload"
 msgstr "폴더를 클릭하거나 이 영역으로 드래그하여 업로드"
 msgstr "폴더를 클릭하거나 이 영역으로 드래그하여 업로드"
 
 
@@ -916,6 +917,10 @@ msgstr "구성들"
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr "SSL 구성하기"
 msgstr "SSL 구성하기"
 
 
+#: src/views/user/UserProfile.vue:204
+msgid "Confirm New Password"
+msgstr "새 비밀번호 확인"
+
 #: src/views/dashboard/Environments.vue:141
 #: src/views/dashboard/Environments.vue:141
 msgid "Connected"
 msgid "Connected"
 msgstr "연결됨"
 msgstr "연결됨"
@@ -924,7 +929,7 @@ msgstr "연결됨"
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "연결 오류, 다시 연결 시도 중..."
 msgstr "연결 오류, 다시 연결 시도 중..."
 
 
-#: src/views/terminal/Terminal.vue:142
+#: src/views/terminal/Terminal.vue:139
 msgid "Connection lost, please refresh the page."
 msgid "Connection lost, please refresh the page."
 msgstr "연결이 끊어졌습니다. 페이지를 새로 고침하세요."
 msgstr "연결이 끊어졌습니다. 페이지를 새로 고침하세요."
 
 
@@ -980,7 +985,7 @@ msgstr "CPU 사용률이 비교적 높으므로 Nginx 설정 최적화를 고려
 msgid "CPU:"
 msgid "CPU:"
 msgstr "CPU:"
 msgstr "CPU:"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:166
+#: src/components/NgxConfigEditor/NgxUpstream.vue:170
 msgid "Create"
 msgid "Create"
 msgstr "생성"
 msgstr "생성"
 
 
@@ -1007,7 +1012,7 @@ msgid ""
 msgstr "Nginx 구성 및 Nginx UI 설정을 포함한 시스템 백업을 생성합니다. 백업 파일은 자동으로 컴퓨터에 다운로드됩니다."
 msgstr "Nginx 구성 및 Nginx UI 설정을 포함한 시스템 백업을 생성합니다. 백업 파일은 자동으로 컴퓨터에 다운로드됩니다."
 
 
 #: src/views/environments/group/columns.ts:29
 #: src/views/environments/group/columns.ts:29
-#: src/views/notification/notificationColumns.tsx:45
+#: src/views/notification/notificationColumns.tsx:51
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/user/userColumns.tsx:46
 #: src/views/user/userColumns.tsx:46
@@ -1046,6 +1051,10 @@ msgstr "현재 활성 연결"
 msgid "Current Content"
 msgid "Current Content"
 msgstr "현재 내용"
 msgstr "현재 내용"
 
 
+#: src/views/user/UserProfile.vue:186
+msgid "Current Password"
+msgstr "현재 비밀번호"
+
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 msgid "Current usage"
 msgid "Current usage"
 msgstr "현재 사용량"
 msgstr "현재 사용량"
@@ -1085,8 +1094,8 @@ msgstr "공유 메모리 영역 이름과 크기를 정의합니다(예: proxy_c
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/views/certificate/components/RemoveCert.vue:88
 #: src/views/certificate/components/RemoveCert.vue:88
-#: src/views/site/site_list/SiteList.vue:108
-#: src/views/stream/StreamList.vue:165
+#: src/views/site/site_list/SiteList.vue:109
+#: src/views/stream/StreamList.vue:166
 msgid "Delete"
 msgid "Delete"
 msgstr "삭제"
 msgstr "삭제"
 
 
@@ -1163,7 +1172,7 @@ msgstr "대상 파일이 이미 존재합니다"
 msgid "Destination file: {0} already exists"
 msgid "Destination file: {0} already exists"
 msgstr "대상 파일: {0} 이미 존재합니다"
 msgstr "대상 파일: {0} 이미 존재합니다"
 
 
-#: src/views/notification/notificationColumns.tsx:60
+#: src/views/notification/notificationColumns.tsx:66
 msgid "Details"
 msgid "Details"
 msgstr "세부 사항"
 msgstr "세부 사항"
 
 
@@ -1207,11 +1216,11 @@ msgstr "디렉토리 레벨"
 msgid "Directory path to store cache files"
 msgid "Directory path to store cache files"
 msgstr "캐시 파일을 저장할 디렉터리 경로"
 msgstr "캐시 파일을 저장할 디렉터리 경로"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:88
+#: src/views/site/components/SiteStatusSelect.vue:115
 msgid "disable"
 msgid "disable"
 msgstr "비활성화"
 msgstr "비활성화"
 
 
-#: src/views/stream/StreamList.vue:136
+#: src/views/stream/StreamList.vue:137
 msgid "Disable"
 msgid "Disable"
 msgstr "비활성화"
 msgstr "비활성화"
 
 
@@ -1272,7 +1281,7 @@ msgstr "스트림 %{name}을(를) %{node}에서 비활성화했습니다"
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:134
+#: src/views/site/components/SiteStatusSelect.vue:162
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/stream/components/StreamEditor.vue:30
 #: src/views/stream/components/StreamEditor.vue:30
@@ -1280,7 +1289,7 @@ msgstr "스트림 %{name}을(를) %{node}에서 비활성화했습니다"
 msgid "Disabled"
 msgid "Disabled"
 msgstr "비활성화됨"
 msgstr "비활성화됨"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:40
+#: src/views/site/components/SiteStatusSelect.vue:67
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/StreamList.vue:56
 #: src/views/stream/StreamList.vue:56
 msgid "Disabled successfully"
 msgid "Disabled successfully"
@@ -1308,7 +1317,7 @@ msgstr "DNS01"
 msgid "Do not enable this option unless you are sure that you need it."
 msgid "Do not enable this option unless you are sure that you need it."
 msgstr "이 옵션은 필요한 경우가 아니라면 활성화하지 마세요."
 msgstr "이 옵션은 필요한 경우가 아니라면 활성화하지 마세요."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:93
+#: src/views/site/components/SiteStatusSelect.vue:120
 msgid "Do you want to %{action} this site?"
 msgid "Do you want to %{action} this site?"
 msgstr "이 사이트를 %{action}하시겠습니까?"
 msgstr "이 사이트를 %{action}하시겠습니까?"
 
 
@@ -1385,9 +1394,9 @@ msgstr ""
 "없습니다."
 "없습니다."
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:94
+#: src/views/site/site_list/SiteList.vue:95
 #: src/views/stream/components/StreamDuplicate.vue:64
 #: src/views/stream/components/StreamDuplicate.vue:64
-#: src/views/stream/StreamList.vue:151
+#: src/views/stream/StreamList.vue:152
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "복제"
 msgstr "복제"
 
 
@@ -1431,11 +1440,11 @@ msgstr "이메일"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "이메일 (*)"
 msgstr "이메일 (*)"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:87
+#: src/views/site/components/SiteStatusSelect.vue:114
 msgid "enable"
 msgid "enable"
 msgstr "활성화"
 msgstr "활성화"
 
 
-#: src/views/stream/StreamList.vue:144
+#: src/views/stream/StreamList.vue:145
 msgid "Enable"
 msgid "Enable"
 msgstr "활성화"
 msgstr "활성화"
 
 
@@ -1533,7 +1542,7 @@ msgstr "TOTP 활성화"
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:130
+#: src/views/site/components/SiteStatusSelect.vue:159
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/stream/components/RightPanel/Basic.vue:62
 #: src/views/stream/components/RightPanel/Basic.vue:62
@@ -1542,7 +1551,7 @@ msgstr "TOTP 활성화"
 msgid "Enabled"
 msgid "Enabled"
 msgstr "활성화됨"
 msgstr "활성화됨"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:27
+#: src/views/site/components/SiteStatusSelect.vue:54
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/StreamList.vue:46
 #: src/views/stream/StreamList.vue:46
@@ -1751,23 +1760,23 @@ msgstr "인증서 삭제 실패"
 msgid "Failed to delete certificate from database: %{error}"
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "데이터베이스에서 인증서 삭제 실패: %{error}"
 msgstr "데이터베이스에서 인증서 삭제 실패: %{error}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:46
+#: src/views/site/components/SiteStatusSelect.vue:73
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/StreamList.vue:60
 #: src/views/stream/StreamList.vue:60
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "%{msg} 비활성화 실패"
 msgstr "%{msg} 비활성화 실패"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:72
+#: src/views/site/components/SiteStatusSelect.vue:99
 msgid "Failed to disable maintenance mode %{msg}"
 msgid "Failed to disable maintenance mode %{msg}"
 msgstr "점검 모드 비활성화 실패: %{msg}"
 msgstr "점검 모드 비활성화 실패: %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:33
+#: src/views/site/components/SiteStatusSelect.vue:60
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/StreamList.vue:50
 #: src/views/stream/StreamList.vue:50
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:59
+#: src/views/site/components/SiteStatusSelect.vue:86
 msgid "Failed to enable maintenance mode %{msg}"
 msgid "Failed to enable maintenance mode %{msg}"
 msgstr "유지 보수 모드 활성화 실패: %{msg}"
 msgstr "유지 보수 모드 활성화 실패: %{msg}"
 
 
@@ -2078,7 +2087,7 @@ msgstr "ICP 번호"
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr "비워 둘 경우 기본 CA 디렉터리가 사용됩니다."
 msgstr "비워 둘 경우 기본 CA 디렉터리가 사용됩니다."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:144
+#: src/views/preference/tabs/AuthSettings.vue:113
 msgid ""
 msgid ""
 "If the number of login failed attempts from a ip reach the max attempts in "
 "If the number of login failed attempts from a ip reach the max attempts in "
 "ban threshold minutes, the ip will be banned for a period of time."
 "ban threshold minutes, the ip will be banned for a period of time."
@@ -2237,7 +2246,7 @@ msgstr "잘못된 요청 형식"
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "잘못된 보안 토큰 형식"
 msgstr "잘못된 보안 토큰 형식"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:17
+#: src/views/preference/tabs/AuthSettings.vue:14
 msgid "IP"
 msgid "IP"
 msgstr "IP"
 msgstr "IP"
 
 
@@ -2350,7 +2359,7 @@ msgstr "목록"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "평균 부하:"
 msgstr "평균 부하:"
 
 
-#: src/views/environments/list/Environment.vue:80
+#: src/views/environments/list/Environment.vue:81
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "설정에서 불러오기"
 msgstr "설정에서 불러오기"
 
 
@@ -2443,17 +2452,17 @@ msgstr ""
 "페이지의 매개 변수를 수정할 필요가 없습니다. 도커 컨테이너를 사용하여 Nginx UI를 설치하는사용자는이 옵션을 수동으로 활성화할 수 "
 "페이지의 매개 변수를 수정할 필요가 없습니다. 도커 컨테이너를 사용하여 Nginx UI를 설치하는사용자는이 옵션을 수동으로 활성화할 수 "
 "있습니다. Nginx UI의 크론탭 작업 스케줄러는설정한 간격 (분 단위)에서 logrotate 명령을 실행합니다."
 "있습니다. Nginx UI의 크론탭 작업 스케줄러는설정한 간격 (분 단위)에서 logrotate 명령을 실행합니다."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:138
+#: src/views/site/components/SiteStatusSelect.vue:165
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_list/columns.tsx:118
 #: src/views/site/site_list/columns.tsx:118
 msgid "Maintenance"
 msgid "Maintenance"
 msgstr "유지보수"
 msgstr "유지보수"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:66
+#: src/views/site/components/SiteStatusSelect.vue:93
 msgid "Maintenance mode disabled successfully"
 msgid "Maintenance mode disabled successfully"
 msgstr "유지 관리 모드가 비활성화되었습니다"
 msgstr "유지 관리 모드가 비활성화되었습니다"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:53
+#: src/views/site/components/SiteStatusSelect.vue:80
 msgid "Maintenance mode enabled successfully"
 msgid "Maintenance mode enabled successfully"
 msgstr "유지 보수 모드가 성공적으로 활성화되었습니다"
 msgstr "유지 보수 모드가 성공적으로 활성화되었습니다"
 
 
@@ -2518,7 +2527,7 @@ msgstr "마스터 프로세스"
 msgid "Master Process"
 msgid "Master Process"
 msgstr "마스터 프로세스"
 msgstr "마스터 프로세스"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:134
+#: src/views/preference/tabs/AuthSettings.vue:103
 msgid "Max Attempts"
 msgid "Max Attempts"
 msgstr "최대 시도 횟수"
 msgstr "최대 시도 횟수"
 
 
@@ -2617,7 +2626,7 @@ msgstr "모듈"
 msgid "Multi-line Directive"
 msgid "Multi-line Directive"
 msgstr "여러 줄 지시문"
 msgstr "여러 줄 지시문"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:178
+#: src/components/NgxConfigEditor/NgxUpstream.vue:182
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateList/certColumns.tsx:9
 #: src/views/certificate/CertificateList/certColumns.tsx:9
@@ -2634,7 +2643,7 @@ msgstr "여러 줄 지시문"
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/StreamDuplicate.vue:71
 #: src/views/stream/components/StreamDuplicate.vue:71
-#: src/views/stream/StreamList.vue:178
+#: src/views/stream/StreamList.vue:179
 msgid "Name"
 msgid "Name"
 msgstr "이름"
 msgstr "이름"
 
 
@@ -2666,6 +2675,10 @@ msgstr "새 설치"
 msgid "New name"
 msgid "New name"
 msgstr "새 이름"
 msgstr "새 이름"
 
 
+#: src/views/user/UserProfile.vue:195
+msgid "New Password"
+msgstr "새 비밀번호"
+
 #: src/views/config/ConfigEditor.vue:328
 #: src/views/config/ConfigEditor.vue:328
 msgid "New Path"
 msgid "New Path"
 msgstr "새 경로"
 msgstr "새 경로"
@@ -2879,9 +2892,9 @@ msgstr "Nginx.conf에는 streams-enabled 디렉토리가 포함됩니다"
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
-#: src/views/preference/tabs/AuthSettings.vue:163
+#: src/views/preference/tabs/AuthSettings.vue:132
 #: src/views/preference/tabs/CertSettings.vue:73
 #: src/views/preference/tabs/CertSettings.vue:73
-#: src/views/site/site_list/SiteList.vue:97 src/views/stream/StreamList.vue:154
+#: src/views/site/site_list/SiteList.vue:98 src/views/stream/StreamList.vue:155
 msgid "No"
 msgid "No"
 msgstr "아니요"
 msgstr "아니요"
 
 
@@ -3010,6 +3023,7 @@ msgid "Off"
 msgstr "끔"
 msgstr "끔"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/components/NgxConfigEditor/NgxUpstream.vue:145
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3021,13 +3035,13 @@ msgstr "오프라인"
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/views/notification/Notification.vue:39
 #: src/views/notification/Notification.vue:39
-#: src/views/site/components/SiteStatusSegmented.vue:96
+#: src/views/site/components/SiteStatusSelect.vue:123
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
-#: src/views/site/site_list/SiteList.vue:98
+#: src/views/site/site_list/SiteList.vue:99
 #: src/views/stream/components/RightPanel/Basic.vue:46
 #: src/views/stream/components/RightPanel/Basic.vue:46
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:156
 #: src/views/system/Backup/BackupCreator.vue:149
 #: src/views/system/Backup/BackupCreator.vue:149
 msgid "OK"
 msgid "OK"
 msgstr "확인"
 msgstr "확인"
@@ -3145,6 +3159,14 @@ msgstr "잘못된 비밀번호"
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr "비밀번호 길이는 20자를 초과할 수 없습니다"
 msgstr "비밀번호 길이는 20자를 초과할 수 없습니다"
 
 
+#: src/views/user/UserProfile.vue:96
+msgid "Password updated successfully"
+msgstr "비밀번호가 성공적으로 업데이트되었습니다"
+
+#: src/views/user/UserProfile.vue:75
+msgid "Passwords do not match"
+msgstr "비밀번호가 일치하지 않습니다"
+
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
@@ -3184,6 +3206,10 @@ msgstr "성능 설정이 성공적으로 저장되었습니다"
 msgid "Performing core upgrade"
 msgid "Performing core upgrade"
 msgstr "핵심 업그레이드 수행 중"
 msgstr "핵심 업그레이드 수행 중"
 
 
+#: src/views/user/UserProfile.vue:121
+msgid "Personal Information"
+msgstr "개인 정보"
+
 #: src/constants/errors/self_check.ts:19
 #: src/constants/errors/self_check.ts:19
 msgid "PID path not exist"
 msgid "PID path not exist"
 msgstr "PID 경로가 존재하지 않습니다"
 msgstr "PID 경로가 존재하지 않습니다"
@@ -3298,17 +3324,17 @@ msgstr "백업 파일을 선택해 주세요"
 msgid "Please select at least one item"
 msgid "Please select at least one item"
 msgstr "최소한 하나의 항목을 선택해 주세요"
 msgstr "최소한 하나의 항목을 선택해 주세요"
 
 
-#: src/views/environments/list/Environment.vue:112
+#: src/views/environments/list/Environment.vue:113
 #: src/views/environments/list/Environment.vue:35
 #: src/views/environments/list/Environment.vue:35
 msgid "Please select at least one node to reload Nginx"
 msgid "Please select at least one node to reload Nginx"
 msgstr "Nginx를 다시 로드하려면 최소한 하나의 노드를 선택하십시오"
 msgstr "Nginx를 다시 로드하려면 최소한 하나의 노드를 선택하십시오"
 
 
-#: src/views/environments/list/Environment.vue:133
+#: src/views/environments/list/Environment.vue:134
 #: src/views/environments/list/Environment.vue:49
 #: src/views/environments/list/Environment.vue:49
 msgid "Please select at least one node to restart Nginx"
 msgid "Please select at least one node to restart Nginx"
 msgstr "Nginx를 다시 시작하려면 최소한 하나의 노드를 선택하세요"
 msgstr "Nginx를 다시 시작하려면 최소한 하나의 노드를 선택하세요"
 
 
-#: src/views/environments/list/Environment.vue:91
+#: src/views/environments/list/Environment.vue:92
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "업그레이드할 노드를 최소한 하나 이상 선택해 주세요"
 msgstr "업그레이드할 노드를 최소한 하나 이상 선택해 주세요"
 
 
@@ -3470,8 +3496,8 @@ msgstr "리로드"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/EnvGroup.vue:50
 #: src/views/environments/group/EnvGroup.vue:50
-#: src/views/environments/list/Environment.vue:120
-#: src/views/environments/list/Environment.vue:128
+#: src/views/environments/list/Environment.vue:121
+#: src/views/environments/list/Environment.vue:129
 msgid "Reload Nginx"
 msgid "Reload Nginx"
 msgstr "Nginx 다시 로드"
 msgstr "Nginx 다시 로드"
 
 
@@ -3507,12 +3533,12 @@ msgstr "리로딩 중"
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr "Nginx 리로딩 중"
 msgstr "Nginx 리로딩 중"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:168
+#: src/views/preference/tabs/AuthSettings.vue:137
 msgid "Remove"
 msgid "Remove"
 msgstr "제거"
 msgstr "제거"
 
 
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
-#: src/views/preference/tabs/AuthSettings.vue:50
+#: src/views/preference/tabs/AuthSettings.vue:47
 msgid "Remove successfully"
 msgid "Remove successfully"
 msgstr "성공적으로 제거되었습니다"
 msgstr "성공적으로 제거되었습니다"
 
 
@@ -3650,8 +3676,8 @@ msgid "Restart"
 msgstr "재시작"
 msgstr "재시작"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
-#: src/views/environments/list/Environment.vue:141
-#: src/views/environments/list/Environment.vue:149
+#: src/views/environments/list/Environment.vue:142
+#: src/views/environments/list/Environment.vue:150
 msgid "Restart Nginx"
 msgid "Restart Nginx"
 msgstr "Nginx 다시 시작"
 msgstr "Nginx 다시 시작"
 
 
@@ -3729,15 +3755,15 @@ msgid ""
 "action cannot be undone."
 "action cannot be undone."
 msgstr "인증서를 취소하면 현재 이를 사용 중인 모든 서비스에 영향을 미칩니다. 이 작업은 취소할 수 없습니다."
 msgstr "인증서를 취소하면 현재 이를 사용 중인 모든 서비스에 영향을 미칩니다. 이 작업은 취소할 수 없습니다."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:106
+#: src/views/preference/tabs/AuthSettings.vue:75
 msgid "RP Display Name"
 msgid "RP Display Name"
 msgstr "RP 표시 이름"
 msgstr "RP 표시 이름"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:112
+#: src/views/preference/tabs/AuthSettings.vue:81
 msgid "RP Origins"
 msgid "RP Origins"
 msgstr "RP 오리진"
 msgstr "RP 오리진"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:100
+#: src/views/preference/tabs/AuthSettings.vue:69
 msgid "RPID"
 msgid "RPID"
 msgstr "RPID"
 msgstr "RPID"
 
 
@@ -3842,6 +3868,10 @@ msgstr "모듈 이름 검색"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "비밀번호가 복사되었습니다"
 msgstr "비밀번호가 복사되었습니다"
 
 
+#: src/views/user/UserProfile.vue:175
+msgid "Security Settings"
+msgstr "보안 설정"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 msgid "Security Token"
 msgid "Security Token"
@@ -3915,7 +3945,7 @@ msgid ""
 "step of DNS challenge."
 "step of DNS challenge."
 msgstr "DNS 챌린지 단계에서 시스템 네임서버를 재정의하기 위해 재귀 네임서버를 설정하세요."
 msgstr "DNS 챌린지 단계에서 시스템 네임서버를 재정의하기 위해 재귀 네임서버를 설정하세요."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:89
+#: src/views/site/components/SiteStatusSelect.vue:116
 msgid "set to maintenance mode"
 msgid "set to maintenance mode"
 msgstr "유지 보수 모드로 설정"
 msgstr "유지 보수 모드로 설정"
 
 
@@ -4152,13 +4182,11 @@ msgstr ""
 "링크를 참조하여 해당 구성 파일을 작성하십시오: "
 "링크를 참조하여 해당 구성 파일을 작성하십시오: "
 "https://nginxui.com/guide/nginx-proxy-example.html"
 "https://nginxui.com/guide/nginx-proxy-example.html"
 
 
-#: src/language/curd.ts:51
-#: src/language/curd.ts:55
+#: src/language/curd.ts:51 src/language/curd.ts:55
 msgid "Support single or batch upload of files"
 msgid "Support single or batch upload of files"
 msgstr "단일 또는 일괄 파일 업로드 지원"
 msgstr "단일 또는 일괄 파일 업로드 지원"
 
 
-#: src/language/curd.ts:52
-#: src/language/curd.ts:56
+#: src/language/curd.ts:52 src/language/curd.ts:56
 msgid "Support uploading entire folders"
 msgid "Support uploading entire folders"
 msgstr "전체 폴더 업로드 지원"
 msgstr "전체 폴더 업로드 지원"
 
 
@@ -4470,12 +4498,12 @@ msgstr "이 작업은 구성 파일과 데이터베이스를 복원합니다. 
 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr "이 작업은 %{nodeNames}의 Nginx UI를 %{version}으로 업그레이드하거나 재설치합니다."
 msgstr "이 작업은 %{nodeNames}의 Nginx UI를 %{version}으로 업그레이드하거나 재설치합니다."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:123
+#: src/views/preference/tabs/AuthSettings.vue:92
 msgid "Throttle"
 msgid "Throttle"
 msgstr "제한"
 msgstr "제한"
 
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
-#: src/views/preference/tabs/AuthSettings.vue:143
+#: src/views/preference/tabs/AuthSettings.vue:112
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 msgid "Tips"
 msgid "Tips"
 msgstr "팁"
 msgstr "팁"
@@ -4486,7 +4514,7 @@ msgid ""
 "worker_processes or worker_connections"
 "worker_processes or worker_connections"
 msgstr "팁: worker_processes 또는 worker_connections를 증가시켜 동시 처리 능력을 향상시킬 수 있습니다."
 msgstr "팁: worker_processes 또는 worker_connections를 증가시켜 동시 처리 능력을 향상시킬 수 있습니다."
 
 
-#: src/views/notification/notificationColumns.tsx:52
+#: src/views/notification/notificationColumns.tsx:58
 msgid "Title"
 msgid "Title"
 msgstr "제목"
 msgstr "제목"
 
 
@@ -4598,6 +4626,14 @@ msgstr "유형"
 msgid "Unknown"
 msgid "Unknown"
 msgstr "알 수 없음"
 msgstr "알 수 없음"
 
 
+#: src/views/user/UserProfile.vue:218
+msgid "Update Password"
+msgstr "비밀번호 업데이트"
+
+#: src/views/user/UserProfile.vue:142
+msgid "Update Profile"
+msgstr "프로필 업데이트"
+
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "성공적으로 업데이트되었습니다"
 msgstr "성공적으로 업데이트되었습니다"
@@ -4615,8 +4651,8 @@ msgid "Updated at"
 msgstr "업데이트됨"
 msgstr "업데이트됨"
 
 
 #: src/routes/modules/system.ts:33
 #: src/routes/modules/system.ts:33
-#: src/views/environments/list/Environment.vue:107
-#: src/views/environments/list/Environment.vue:99
+#: src/views/environments/list/Environment.vue:100
+#: src/views/environments/list/Environment.vue:108
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "업그레이드"
 msgstr "업그레이드"
@@ -4642,7 +4678,7 @@ msgstr "파일 업로드"
 msgid "Upload Folders"
 msgid "Upload Folders"
 msgstr "폴더 업로드"
 msgstr "폴더 업로드"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:173
+#: src/components/NgxConfigEditor/NgxUpstream.vue:177
 msgid "Upstream Name"
 msgid "Upstream Name"
 msgstr "업스트림 이름"
 msgstr "업스트림 이름"
 
 
@@ -4674,11 +4710,20 @@ msgstr "사용자"
 msgid "User banned"
 msgid "User banned"
 msgstr "사용자가 차단되었습니다"
 msgstr "사용자가 차단되었습니다"
 
 
+#: src/views/user/UserProfile.vue:62
+msgid "User info updated successfully"
+msgstr "사용자 정보가 성공적으로 업데이트되었습니다"
+
 #: src/constants/errors/user.ts:8
 #: src/constants/errors/user.ts:8
 msgid "User not enabled otp as 2fa"
 msgid "User not enabled otp as 2fa"
 msgstr "사용자가 OTP를 2FA로 활성화하지 않음"
 msgstr "사용자가 OTP를 2FA로 활성화하지 않음"
 
 
+#: src/routes/modules/user.ts:19
+msgid "User Profile"
+msgstr "사용자 프로필"
+
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
+#: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "사용자 이름"
 msgstr "사용자 이름"
 
 
@@ -4762,7 +4807,7 @@ msgid ""
 "the Nginx. Are you sure you want to continue?"
 "the Nginx. Are you sure you want to continue?"
 msgstr "이 파일에서 HTTPChallenge 구성을 제거하고 Nginx를 다시 로드할 예정입니다. 계속하시겠습니까?"
 msgstr "이 파일에서 HTTPChallenge 구성을 제거하고 Nginx를 다시 로드할 예정입니다. 계속하시겠습니까?"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:96
+#: src/views/preference/tabs/AuthSettings.vue:65
 msgid "Webauthn"
 msgid "Webauthn"
 msgstr "웹인증"
 msgstr "웹인증"
 
 
@@ -4837,12 +4882,12 @@ msgstr "인증서를 디스크에 쓰기"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
-#: src/views/preference/tabs/AuthSettings.vue:162
+#: src/views/preference/tabs/AuthSettings.vue:131
 #: src/views/preference/tabs/CertSettings.vue:72
 #: src/views/preference/tabs/CertSettings.vue:72
 msgid "Yes"
 msgid "Yes"
 msgstr "예"
 msgstr "예"
 
 
-#: src/views/terminal/Terminal.vue:135
+#: src/views/terminal/Terminal.vue:132
 msgid ""
 msgid ""
 "You are accessing this terminal over an insecure HTTP connection on a "
 "You are accessing this terminal over an insecure HTTP connection on a "
 "non-localhost domain. This may expose sensitive information."
 "non-localhost domain. This may expose sensitive information."
@@ -4932,9 +4977,6 @@ msgstr "귀하의 패스키"
 #~ msgid_plural "Total %{total} items"
 #~ msgid_plural "Total %{total} items"
 #~ msgstr[0] "총 %{total} 항목"
 #~ msgstr[0] "총 %{total} 항목"
 
 
-#~ msgid "Updated successfully"
-#~ msgstr "성공적으로 업데이트되었습니다"
-
 #~ msgid "View Details"
 #~ msgid "View Details"
 #~ msgstr "상세 보기"
 #~ msgstr "상세 보기"
 
 

+ 124 - 73
app/src/language/messages.pot

@@ -90,7 +90,7 @@ msgstr ""
 msgid "2FA"
 msgid "2FA"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:69
+#: src/views/user/UserProfile.vue:151
 msgid "2FA Settings"
 msgid "2FA Settings"
 msgstr ""
 msgstr ""
 
 
@@ -117,8 +117,7 @@ msgstr ""
 msgid "ACME User"
 msgid "ACME User"
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/notificationColumns.tsx:66
-#: src/views/preference/tabs/AuthSettings.vue:29
+#: src/views/preference/tabs/AuthSettings.vue:26
 msgid "Action"
 msgid "Action"
 msgstr ""
 msgstr ""
 
 
@@ -129,6 +128,7 @@ msgstr ""
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/nginx_log/NginxLogList.vue:52
 #: src/views/nginx_log/NginxLogList.vue:52
+#: src/views/notification/notificationColumns.tsx:72
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
 #: src/views/site/site_list/columns.tsx:129
 #: src/views/site/site_list/columns.tsx:129
 #: src/views/stream/columns.tsx:64
 #: src/views/stream/columns.tsx:64
@@ -146,11 +146,11 @@ msgid "Actual worker to configured ratio"
 msgstr ""
 msgstr ""
 
 
 #: src/components/NgxConfigEditor/NgxServer.vue:112
 #: src/components/NgxConfigEditor/NgxServer.vue:112
-#: src/components/NgxConfigEditor/NgxUpstream.vue:155
+#: src/components/NgxConfigEditor/NgxUpstream.vue:159
 #: src/language/curd.ts:19
 #: src/language/curd.ts:19
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
-#: src/views/stream/StreamList.vue:120
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr ""
 msgstr ""
 
 
@@ -179,7 +179,7 @@ msgstr ""
 msgid "Add Site"
 msgid "Add Site"
 msgstr ""
 msgstr ""
 
 
-#: src/views/stream/StreamList.vue:173
+#: src/views/stream/StreamList.vue:174
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr ""
 msgstr ""
 
 
@@ -237,7 +237,7 @@ msgstr ""
 msgid "Arch"
 msgid "Arch"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:161
+#: src/views/preference/tabs/AuthSettings.vue:130
 msgid "Are you sure to delete this banned IP immediately?"
 msgid "Are you sure to delete this banned IP immediately?"
 msgstr ""
 msgstr ""
 
 
@@ -267,8 +267,8 @@ msgid "Are you sure you want to delete permanently?"
 msgstr ""
 msgstr ""
 
 
 #: src/language/curd.ts:25
 #: src/language/curd.ts:25
-#: src/views/site/site_list/SiteList.vue:99
-#: src/views/stream/StreamList.vue:156
+#: src/views/site/site_list/SiteList.vue:100
+#: src/views/stream/StreamList.vue:157
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr ""
 msgstr ""
 
 
@@ -308,7 +308,7 @@ msgstr ""
 msgid "Attempt to fix"
 msgid "Attempt to fix"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:20
+#: src/views/preference/tabs/AuthSettings.vue:17
 msgid "Attempts"
 msgid "Attempts"
 msgstr ""
 msgstr ""
 
 
@@ -320,7 +320,7 @@ msgstr ""
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:87
+#: src/views/preference/tabs/AuthSettings.vue:56
 msgid "Authentication Settings"
 msgid "Authentication Settings"
 msgstr ""
 msgstr ""
 
 
@@ -397,15 +397,15 @@ msgstr ""
 msgid "Backup has been downloaded successfully"
 msgid "Backup has been downloaded successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:128
+#: src/views/preference/tabs/AuthSettings.vue:97
 msgid "Ban Threshold Minutes"
 msgid "Ban Threshold Minutes"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:149
+#: src/views/preference/tabs/AuthSettings.vue:118
 msgid "Banned IPs"
 msgid "Banned IPs"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:23
+#: src/views/preference/tabs/AuthSettings.vue:20
 msgid "Banned Until"
 msgid "Banned Until"
 msgstr ""
 msgstr ""
 
 
@@ -511,7 +511,7 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
-#: src/views/site/components/SiteStatusSegmented.vue:97
+#: src/views/site/components/SiteStatusSelect.vue:124
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
@@ -630,6 +630,10 @@ msgstr ""
 msgid "Change Certificate"
 msgid "Change Certificate"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:181
+msgid "Change Password"
+msgstr ""
+
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 msgid "Changed Certificate"
 msgid "Changed Certificate"
 msgid_plural "Changed Certificates"
 msgid_plural "Changed Certificates"
@@ -858,6 +862,10 @@ msgstr ""
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:204
+msgid "Confirm New Password"
+msgstr ""
+
 #: src/views/dashboard/Environments.vue:141
 #: src/views/dashboard/Environments.vue:141
 msgid "Connected"
 msgid "Connected"
 msgstr ""
 msgstr ""
@@ -866,7 +874,7 @@ msgstr ""
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr ""
 msgstr ""
 
 
-#: src/views/terminal/Terminal.vue:142
+#: src/views/terminal/Terminal.vue:139
 msgid "Connection lost, please refresh the page."
 msgid "Connection lost, please refresh the page."
 msgstr ""
 msgstr ""
 
 
@@ -922,7 +930,7 @@ msgstr ""
 msgid "CPU:"
 msgid "CPU:"
 msgstr ""
 msgstr ""
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:166
+#: src/components/NgxConfigEditor/NgxUpstream.vue:170
 msgid "Create"
 msgid "Create"
 msgstr ""
 msgstr ""
 
 
@@ -948,7 +956,7 @@ msgid "Create system backups including Nginx configuration and Nginx UI settings
 msgstr ""
 msgstr ""
 
 
 #: src/views/environments/group/columns.ts:29
 #: src/views/environments/group/columns.ts:29
-#: src/views/notification/notificationColumns.tsx:45
+#: src/views/notification/notificationColumns.tsx:51
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/user/userColumns.tsx:46
 #: src/views/user/userColumns.tsx:46
@@ -987,6 +995,10 @@ msgstr ""
 msgid "Current Content"
 msgid "Current Content"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:186
+msgid "Current Password"
+msgstr ""
+
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 msgid "Current usage"
 msgid "Current usage"
 msgstr ""
 msgstr ""
@@ -1027,8 +1039,8 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129
 #: src/language/curd.ts:9
 #: src/language/curd.ts:9
 #: src/views/certificate/components/RemoveCert.vue:88
 #: src/views/certificate/components/RemoveCert.vue:88
-#: src/views/site/site_list/SiteList.vue:108
-#: src/views/stream/StreamList.vue:165
+#: src/views/site/site_list/SiteList.vue:109
+#: src/views/stream/StreamList.vue:166
 msgid "Delete"
 msgid "Delete"
 msgstr ""
 msgstr ""
 
 
@@ -1108,7 +1120,7 @@ msgstr ""
 msgid "Destination file: {0} already exists"
 msgid "Destination file: {0} already exists"
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/notificationColumns.tsx:60
+#: src/views/notification/notificationColumns.tsx:66
 msgid "Details"
 msgid "Details"
 msgstr ""
 msgstr ""
 
 
@@ -1152,11 +1164,11 @@ msgstr ""
 msgid "Directory path to store cache files"
 msgid "Directory path to store cache files"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:88
+#: src/views/site/components/SiteStatusSelect.vue:115
 msgid "disable"
 msgid "disable"
 msgstr ""
 msgstr ""
 
 
-#: src/views/stream/StreamList.vue:136
+#: src/views/stream/StreamList.vue:137
 msgid "Disable"
 msgid "Disable"
 msgstr ""
 msgstr ""
 
 
@@ -1219,7 +1231,7 @@ msgstr ""
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:134
+#: src/views/site/components/SiteStatusSelect.vue:162
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_list/columns.tsx:114
 #: src/views/site/site_list/columns.tsx:114
 #: src/views/stream/columns.tsx:48
 #: src/views/stream/columns.tsx:48
@@ -1228,7 +1240,7 @@ msgstr ""
 msgid "Disabled"
 msgid "Disabled"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:40
+#: src/views/site/components/SiteStatusSelect.vue:67
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/StreamList.vue:56
 #: src/views/stream/StreamList.vue:56
 msgid "Disabled successfully"
 msgid "Disabled successfully"
@@ -1256,7 +1268,7 @@ msgstr ""
 msgid "Do not enable this option unless you are sure that you need it."
 msgid "Do not enable this option unless you are sure that you need it."
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:93
+#: src/views/site/components/SiteStatusSelect.vue:120
 msgid "Do you want to %{action} this site?"
 msgid "Do you want to %{action} this site?"
 msgstr ""
 msgstr ""
 
 
@@ -1330,9 +1342,9 @@ msgid "Due to the security policies of some browsers, you cannot use passkeys on
 msgstr ""
 msgstr ""
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:94
+#: src/views/site/site_list/SiteList.vue:95
 #: src/views/stream/components/StreamDuplicate.vue:64
 #: src/views/stream/components/StreamDuplicate.vue:64
-#: src/views/stream/StreamList.vue:151
+#: src/views/stream/StreamList.vue:152
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr ""
 msgstr ""
 
 
@@ -1377,11 +1389,11 @@ msgstr ""
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:87
+#: src/views/site/components/SiteStatusSelect.vue:114
 msgid "enable"
 msgid "enable"
 msgstr ""
 msgstr ""
 
 
-#: src/views/stream/StreamList.vue:144
+#: src/views/stream/StreamList.vue:145
 msgid "Enable"
 msgid "Enable"
 msgstr ""
 msgstr ""
 
 
@@ -1481,7 +1493,7 @@ msgstr ""
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:130
+#: src/views/site/components/SiteStatusSelect.vue:159
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_list/columns.tsx:110
 #: src/views/site/site_list/columns.tsx:110
 #: src/views/stream/columns.tsx:44
 #: src/views/stream/columns.tsx:44
@@ -1491,7 +1503,7 @@ msgstr ""
 msgid "Enabled"
 msgid "Enabled"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:27
+#: src/views/site/components/SiteStatusSelect.vue:54
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/StreamList.vue:46
 #: src/views/stream/StreamList.vue:46
@@ -1701,23 +1713,23 @@ msgstr ""
 msgid "Failed to delete certificate from database: %{error}"
 msgid "Failed to delete certificate from database: %{error}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:46
+#: src/views/site/components/SiteStatusSelect.vue:73
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/StreamList.vue:60
 #: src/views/stream/StreamList.vue:60
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:72
+#: src/views/site/components/SiteStatusSelect.vue:99
 msgid "Failed to disable maintenance mode %{msg}"
 msgid "Failed to disable maintenance mode %{msg}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:33
+#: src/views/site/components/SiteStatusSelect.vue:60
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/StreamList.vue:50
 #: src/views/stream/StreamList.vue:50
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:59
+#: src/views/site/components/SiteStatusSelect.vue:86
 msgid "Failed to enable maintenance mode %{msg}"
 msgid "Failed to enable maintenance mode %{msg}"
 msgstr ""
 msgstr ""
 
 
@@ -2027,7 +2039,7 @@ msgstr ""
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:144
+#: src/views/preference/tabs/AuthSettings.vue:113
 msgid "If the number of login failed attempts from a ip reach the max attempts in ban threshold minutes, the ip will be banned for a period of time."
 msgid "If the number of login failed attempts from a ip reach the max attempts in ban threshold minutes, the ip will be banned for a period of time."
 msgstr ""
 msgstr ""
 
 
@@ -2177,7 +2189,7 @@ msgstr ""
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:17
+#: src/views/preference/tabs/AuthSettings.vue:14
 msgid "IP"
 msgid "IP"
 msgstr ""
 msgstr ""
 
 
@@ -2288,7 +2300,7 @@ msgstr ""
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environments/list/Environment.vue:80
+#: src/views/environments/list/Environment.vue:81
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr ""
 msgstr ""
 
 
@@ -2370,17 +2382,17 @@ msgstr ""
 msgid "Logrotate, by default, is enabled in most mainstream Linux distributions for users who install Nginx UI on the host machine, so you don't need to modify the parameters on this page. For users who install Nginx UI using Docker containers, you can manually enable this option. The crontab task scheduler of Nginx UI will execute the logrotate command at the interval you set in minutes."
 msgid "Logrotate, by default, is enabled in most mainstream Linux distributions for users who install Nginx UI on the host machine, so you don't need to modify the parameters on this page. For users who install Nginx UI using Docker containers, you can manually enable this option. The crontab task scheduler of Nginx UI will execute the logrotate command at the interval you set in minutes."
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:138
+#: src/views/site/components/SiteStatusSelect.vue:165
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_list/columns.tsx:118
 #: src/views/site/site_list/columns.tsx:118
 msgid "Maintenance"
 msgid "Maintenance"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:66
+#: src/views/site/components/SiteStatusSelect.vue:93
 msgid "Maintenance mode disabled successfully"
 msgid "Maintenance mode disabled successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:53
+#: src/views/site/components/SiteStatusSelect.vue:80
 msgid "Maintenance mode enabled successfully"
 msgid "Maintenance mode enabled successfully"
 msgstr ""
 msgstr ""
 
 
@@ -2448,7 +2460,7 @@ msgstr ""
 msgid "Master Process"
 msgid "Master Process"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:134
+#: src/views/preference/tabs/AuthSettings.vue:103
 msgid "Max Attempts"
 msgid "Max Attempts"
 msgstr ""
 msgstr ""
 
 
@@ -2548,7 +2560,7 @@ msgstr ""
 msgid "Multi-line Directive"
 msgid "Multi-line Directive"
 msgstr ""
 msgstr ""
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:178
+#: src/components/NgxConfigEditor/NgxUpstream.vue:182
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateList/certColumns.tsx:9
 #: src/views/certificate/CertificateList/certColumns.tsx:9
@@ -2566,7 +2578,7 @@ msgstr ""
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/StreamDuplicate.vue:71
 #: src/views/stream/components/StreamDuplicate.vue:71
-#: src/views/stream/StreamList.vue:178
+#: src/views/stream/StreamList.vue:179
 msgid "Name"
 msgid "Name"
 msgstr ""
 msgstr ""
 
 
@@ -2598,6 +2610,10 @@ msgstr ""
 msgid "New name"
 msgid "New name"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:195
+msgid "New Password"
+msgstr ""
+
 #: src/views/config/ConfigEditor.vue:328
 #: src/views/config/ConfigEditor.vue:328
 msgid "New Path"
 msgid "New Path"
 msgstr ""
 msgstr ""
@@ -2814,10 +2830,10 @@ msgstr ""
 #: src/components/Notification/Notification.vue:109
 #: src/components/Notification/Notification.vue:109
 #: src/language/curd.ts:38
 #: src/language/curd.ts:38
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
-#: src/views/preference/tabs/AuthSettings.vue:163
+#: src/views/preference/tabs/AuthSettings.vue:132
 #: src/views/preference/tabs/CertSettings.vue:73
 #: src/views/preference/tabs/CertSettings.vue:73
-#: src/views/site/site_list/SiteList.vue:97
-#: src/views/stream/StreamList.vue:154
+#: src/views/site/site_list/SiteList.vue:98
+#: src/views/stream/StreamList.vue:155
 msgid "No"
 msgid "No"
 msgstr ""
 msgstr ""
 
 
@@ -2943,6 +2959,7 @@ msgid "Off"
 msgstr ""
 msgstr ""
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/components/NgxConfigEditor/NgxUpstream.vue:145
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -2955,13 +2972,13 @@ msgstr ""
 #: src/components/Notification/Notification.vue:110
 #: src/components/Notification/Notification.vue:110
 #: src/language/curd.ts:15
 #: src/language/curd.ts:15
 #: src/views/notification/Notification.vue:39
 #: src/views/notification/Notification.vue:39
-#: src/views/site/components/SiteStatusSegmented.vue:96
+#: src/views/site/components/SiteStatusSelect.vue:123
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
-#: src/views/site/site_list/SiteList.vue:98
+#: src/views/site/site_list/SiteList.vue:99
 #: src/views/stream/components/RightPanel/Basic.vue:46
 #: src/views/stream/components/RightPanel/Basic.vue:46
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:156
 #: src/views/system/Backup/BackupCreator.vue:149
 #: src/views/system/Backup/BackupCreator.vue:149
 msgid "OK"
 msgid "OK"
 msgstr ""
 msgstr ""
@@ -3076,6 +3093,14 @@ msgstr ""
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:96
+msgid "Password updated successfully"
+msgstr ""
+
+#: src/views/user/UserProfile.vue:75
+msgid "Passwords do not match"
+msgstr ""
+
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/language/curd.ts:59
 #: src/language/curd.ts:59
@@ -3117,6 +3142,10 @@ msgstr ""
 msgid "Performing core upgrade"
 msgid "Performing core upgrade"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:121
+msgid "Personal Information"
+msgstr ""
+
 #: src/constants/errors/self_check.ts:19
 #: src/constants/errors/self_check.ts:19
 msgid "PID path not exist"
 msgid "PID path not exist"
 msgstr ""
 msgstr ""
@@ -3219,17 +3248,17 @@ msgstr ""
 msgid "Please select at least one item"
 msgid "Please select at least one item"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environments/list/Environment.vue:112
+#: src/views/environments/list/Environment.vue:113
 #: src/views/environments/list/Environment.vue:35
 #: src/views/environments/list/Environment.vue:35
 msgid "Please select at least one node to reload Nginx"
 msgid "Please select at least one node to reload Nginx"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environments/list/Environment.vue:133
+#: src/views/environments/list/Environment.vue:134
 #: src/views/environments/list/Environment.vue:49
 #: src/views/environments/list/Environment.vue:49
 msgid "Please select at least one node to restart Nginx"
 msgid "Please select at least one node to restart Nginx"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environments/list/Environment.vue:91
+#: src/views/environments/list/Environment.vue:92
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr ""
 msgstr ""
 
 
@@ -3390,8 +3419,8 @@ msgstr ""
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/EnvGroup.vue:50
 #: src/views/environments/group/EnvGroup.vue:50
-#: src/views/environments/list/Environment.vue:120
-#: src/views/environments/list/Environment.vue:128
+#: src/views/environments/list/Environment.vue:121
+#: src/views/environments/list/Environment.vue:129
 msgid "Reload Nginx"
 msgid "Reload Nginx"
 msgstr ""
 msgstr ""
 
 
@@ -3427,12 +3456,12 @@ msgstr ""
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:168
+#: src/views/preference/tabs/AuthSettings.vue:137
 msgid "Remove"
 msgid "Remove"
 msgstr ""
 msgstr ""
 
 
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
-#: src/views/preference/tabs/AuthSettings.vue:50
+#: src/views/preference/tabs/AuthSettings.vue:47
 msgid "Remove successfully"
 msgid "Remove successfully"
 msgstr ""
 msgstr ""
 
 
@@ -3568,8 +3597,8 @@ msgid "Restart"
 msgstr ""
 msgstr ""
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
-#: src/views/environments/list/Environment.vue:141
-#: src/views/environments/list/Environment.vue:149
+#: src/views/environments/list/Environment.vue:142
+#: src/views/environments/list/Environment.vue:150
 msgid "Restart Nginx"
 msgid "Restart Nginx"
 msgstr ""
 msgstr ""
 
 
@@ -3645,15 +3674,15 @@ msgstr ""
 msgid "Revoking a certificate will affect any services currently using it. This action cannot be undone."
 msgid "Revoking a certificate will affect any services currently using it. This action cannot be undone."
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:106
+#: src/views/preference/tabs/AuthSettings.vue:75
 msgid "RP Display Name"
 msgid "RP Display Name"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:112
+#: src/views/preference/tabs/AuthSettings.vue:81
 msgid "RP Origins"
 msgid "RP Origins"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:100
+#: src/views/preference/tabs/AuthSettings.vue:69
 msgid "RPID"
 msgid "RPID"
 msgstr ""
 msgstr ""
 
 
@@ -3762,6 +3791,10 @@ msgstr ""
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:175
+msgid "Security Settings"
+msgstr ""
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 msgid "Security Token"
 msgid "Security Token"
@@ -3835,7 +3868,7 @@ msgstr ""
 msgid "Set the recursive nameservers to override the systems nameservers for the step of DNS challenge."
 msgid "Set the recursive nameservers to override the systems nameservers for the step of DNS challenge."
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:89
+#: src/views/site/components/SiteStatusSelect.vue:116
 msgid "set to maintenance mode"
 msgid "set to maintenance mode"
 msgstr ""
 msgstr ""
 
 
@@ -4343,12 +4376,12 @@ msgstr ""
 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:123
+#: src/views/preference/tabs/AuthSettings.vue:92
 msgid "Throttle"
 msgid "Throttle"
 msgstr ""
 msgstr ""
 
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
-#: src/views/preference/tabs/AuthSettings.vue:143
+#: src/views/preference/tabs/AuthSettings.vue:112
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 msgid "Tips"
 msgid "Tips"
 msgstr ""
 msgstr ""
@@ -4357,7 +4390,7 @@ msgstr ""
 msgid "Tips: You can increase the concurrency processing capacity by increasing worker_processes or worker_connections"
 msgid "Tips: You can increase the concurrency processing capacity by increasing worker_processes or worker_connections"
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/notificationColumns.tsx:52
+#: src/views/notification/notificationColumns.tsx:58
 msgid "Title"
 msgid "Title"
 msgstr ""
 msgstr ""
 
 
@@ -4449,6 +4482,14 @@ msgstr ""
 msgid "Unknown"
 msgid "Unknown"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:218
+msgid "Update Password"
+msgstr ""
+
+#: src/views/user/UserProfile.vue:142
+msgid "Update Profile"
+msgstr ""
+
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr ""
 msgstr ""
@@ -4468,8 +4509,8 @@ msgid "Updated at"
 msgstr ""
 msgstr ""
 
 
 #: src/routes/modules/system.ts:33
 #: src/routes/modules/system.ts:33
-#: src/views/environments/list/Environment.vue:107
-#: src/views/environments/list/Environment.vue:99
+#: src/views/environments/list/Environment.vue:100
+#: src/views/environments/list/Environment.vue:108
 #: src/views/system/Upgrade.vue:154
 #: src/views/system/Upgrade.vue:154
 #: src/views/system/Upgrade.vue:159
 #: src/views/system/Upgrade.vue:159
 msgid "Upgrade"
 msgid "Upgrade"
@@ -4496,7 +4537,7 @@ msgstr ""
 msgid "Upload Folders"
 msgid "Upload Folders"
 msgstr ""
 msgstr ""
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:173
+#: src/components/NgxConfigEditor/NgxUpstream.vue:177
 msgid "Upstream Name"
 msgid "Upstream Name"
 msgstr ""
 msgstr ""
 
 
@@ -4528,12 +4569,22 @@ msgstr ""
 msgid "User banned"
 msgid "User banned"
 msgstr ""
 msgstr ""
 
 
+#: src/views/user/UserProfile.vue:62
+msgid "User info updated successfully"
+msgstr ""
+
 #: src/constants/errors/user.ts:8
 #: src/constants/errors/user.ts:8
 msgid "User not enabled otp as 2fa"
 msgid "User not enabled otp as 2fa"
 msgstr ""
 msgstr ""
 
 
+#: src/routes/modules/user.ts:19
+msgid "User Profile"
+msgstr ""
+
 #: src/views/other/Login.vue:173
 #: src/views/other/Login.vue:173
 #: src/views/user/userColumns.tsx:7
 #: src/views/user/userColumns.tsx:7
+#: src/views/user/UserProfile.vue:127
+#: src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr ""
 msgstr ""
 
 
@@ -4612,7 +4663,7 @@ msgstr ""
 msgid "We will remove the HTTPChallenge configuration from this file and reload the Nginx. Are you sure you want to continue?"
 msgid "We will remove the HTTPChallenge configuration from this file and reload the Nginx. Are you sure you want to continue?"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:96
+#: src/views/preference/tabs/AuthSettings.vue:65
 msgid "Webauthn"
 msgid "Webauthn"
 msgstr ""
 msgstr ""
 
 
@@ -4679,12 +4730,12 @@ msgstr ""
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
-#: src/views/preference/tabs/AuthSettings.vue:162
+#: src/views/preference/tabs/AuthSettings.vue:131
 #: src/views/preference/tabs/CertSettings.vue:72
 #: src/views/preference/tabs/CertSettings.vue:72
 msgid "Yes"
 msgid "Yes"
 msgstr ""
 msgstr ""
 
 
-#: src/views/terminal/Terminal.vue:135
+#: src/views/terminal/Terminal.vue:132
 msgid "You are accessing this terminal over an insecure HTTP connection on a non-localhost domain. This may expose sensitive information."
 msgid "You are accessing this terminal over an insecure HTTP connection on a non-localhost domain. This may expose sensitive information."
 msgstr ""
 msgstr ""
 
 

+ 127 - 85
app/src/language/pt_PT/app.po

@@ -104,7 +104,7 @@ msgstr "[Nginx UI] A escrever o certificado no disco"
 msgid "2FA"
 msgid "2FA"
 msgstr "2FA"
 msgstr "2FA"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:69
+#: src/views/user/UserProfile.vue:151
 msgid "2FA Settings"
 msgid "2FA Settings"
 msgstr "Definições 2FA"
 msgstr "Definições 2FA"
 
 
@@ -130,8 +130,7 @@ msgstr "Logs de Acesso"
 msgid "ACME User"
 msgid "ACME User"
 msgstr "Utilizador ACME"
 msgstr "Utilizador ACME"
 
 
-#: src/views/notification/notificationColumns.tsx:66
-#: src/views/preference/tabs/AuthSettings.vue:29
+#: src/views/preference/tabs/AuthSettings.vue:26
 msgid "Action"
 msgid "Action"
 msgstr "Acção"
 msgstr "Acção"
 
 
@@ -142,9 +141,9 @@ msgstr "Acção"
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/nginx_log/NginxLogList.vue:52
 #: src/views/nginx_log/NginxLogList.vue:52
+#: src/views/notification/notificationColumns.tsx:72
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
-#: src/views/site/site_list/columns.tsx:129
-#: src/views/stream/columns.tsx:64
+#: src/views/site/site_list/columns.tsx:129 src/views/stream/columns.tsx:64
 #: src/views/user/userColumns.tsx:58
 #: src/views/user/userColumns.tsx:58
 msgid "Actions"
 msgid "Actions"
 msgstr "Ações"
 msgstr "Ações"
@@ -159,10 +158,10 @@ msgid "Actual worker to configured ratio"
 msgstr "Rácio real de workers para configurado"
 msgstr "Rácio real de workers para configurado"
 
 
 #: src/components/NgxConfigEditor/NgxServer.vue:112
 #: src/components/NgxConfigEditor/NgxServer.vue:112
-#: src/components/NgxConfigEditor/NgxUpstream.vue:155 src/language/curd.ts:19
+#: src/components/NgxConfigEditor/NgxUpstream.vue:159 src/language/curd.ts:19
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
-#: src/views/stream/StreamList.vue:120
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "Adicionar"
 msgstr "Adicionar"
 
 
@@ -189,7 +188,7 @@ msgstr "Adicionar Local"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "Adicionar Site"
 msgstr "Adicionar Site"
 
 
-#: src/views/stream/StreamList.vue:173
+#: src/views/stream/StreamList.vue:174
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "Adicionar Stream"
 msgstr "Adicionar Stream"
 
 
@@ -249,7 +248,7 @@ msgstr "Aplicação"
 msgid "Arch"
 msgid "Arch"
 msgstr "\"Arquitetura\""
 msgstr "\"Arquitetura\""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:161
+#: src/views/preference/tabs/AuthSettings.vue:130
 msgid "Are you sure to delete this banned IP immediately?"
 msgid "Are you sure to delete this banned IP immediately?"
 msgstr "Tem certeza que pretende eliminar este IP banido imediatamente?"
 msgstr "Tem certeza que pretende eliminar este IP banido imediatamente?"
 
 
@@ -278,8 +277,8 @@ msgstr "Tem certeza que pretende limpar o registo do chat?"
 msgid "Are you sure you want to delete permanently?"
 msgid "Are you sure you want to delete permanently?"
 msgstr "Tem a certeza de que pretende eliminar permanentemente?"
 msgstr "Tem a certeza de que pretende eliminar permanentemente?"
 
 
-#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:99
-#: src/views/stream/StreamList.vue:156
+#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:100
+#: src/views/stream/StreamList.vue:157
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "Tem certeza que pretende eliminar?"
 msgstr "Tem certeza que pretende eliminar?"
 
 
@@ -323,7 +322,7 @@ msgstr "Assistente"
 msgid "Attempt to fix"
 msgid "Attempt to fix"
 msgstr "Tentar corrigir"
 msgstr "Tentar corrigir"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:20
+#: src/views/preference/tabs/AuthSettings.vue:17
 msgid "Attempts"
 msgid "Attempts"
 msgstr "Tentativas"
 msgstr "Tentativas"
 
 
@@ -335,7 +334,7 @@ msgstr "Auth"
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr "Autenticar com uma chave de acesso"
 msgstr "Autenticar com uma chave de acesso"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:87
+#: src/views/preference/tabs/AuthSettings.vue:56
 msgid "Authentication Settings"
 msgid "Authentication Settings"
 msgstr "Definições de Autenticação"
 msgstr "Definições de Autenticação"
 
 
@@ -412,15 +411,15 @@ msgstr "Ficheiro de cópia de segurança não encontrado: {0}"
 msgid "Backup has been downloaded successfully"
 msgid "Backup has been downloaded successfully"
 msgstr "O backup foi descarregado com sucesso"
 msgstr "O backup foi descarregado com sucesso"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:128
+#: src/views/preference/tabs/AuthSettings.vue:97
 msgid "Ban Threshold Minutes"
 msgid "Ban Threshold Minutes"
 msgstr "Minutos Limite para Banir"
 msgstr "Minutos Limite para Banir"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:149
+#: src/views/preference/tabs/AuthSettings.vue:118
 msgid "Banned IPs"
 msgid "Banned IPs"
 msgstr "IPs Banidos"
 msgstr "IPs Banidos"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:23
+#: src/views/preference/tabs/AuthSettings.vue:20
 msgid "Banned Until"
 msgid "Banned Until"
 msgstr "Banido Até"
 msgstr "Banido Até"
 
 
@@ -530,7 +529,7 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
-#: src/views/site/components/SiteStatusSegmented.vue:97
+#: src/views/site/components/SiteStatusSelect.vue:124
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
@@ -651,6 +650,10 @@ msgstr "Método do Challenge"
 msgid "Change Certificate"
 msgid "Change Certificate"
 msgstr "Alterar Certificado"
 msgstr "Alterar Certificado"
 
 
+#: src/views/user/UserProfile.vue:181
+msgid "Change Password"
+msgstr "Alterar senha"
+
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 msgid "Changed Certificate"
 msgid "Changed Certificate"
 msgid_plural "Changed Certificates"
 msgid_plural "Changed Certificates"
@@ -820,13 +823,11 @@ msgstr "Limpo com sucesso"
 msgid "Click or drag backup file to this area to upload"
 msgid "Click or drag backup file to this area to upload"
 msgstr "Clique ou arraste o arquivo de backup para esta área para fazer o upload"
 msgstr "Clique ou arraste o arquivo de backup para esta área para fazer o upload"
 
 
-#: src/language/curd.ts:49
-#: src/language/curd.ts:53
+#: src/language/curd.ts:49 src/language/curd.ts:53
 msgid "Click or drag files to this area to upload"
 msgid "Click or drag files to this area to upload"
 msgstr "Clique ou arraste ficheiros para esta área para carregar"
 msgstr "Clique ou arraste ficheiros para esta área para carregar"
 
 
-#: src/language/curd.ts:50
-#: src/language/curd.ts:54
+#: src/language/curd.ts:50 src/language/curd.ts:54
 msgid "Click or drag folders to this area to upload"
 msgid "Click or drag folders to this area to upload"
 msgstr "Clique ou arraste pastas para esta área para carregar"
 msgstr "Clique ou arraste pastas para esta área para carregar"
 
 
@@ -946,6 +947,10 @@ msgstr "Configurações"
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr "Configurar SSL"
 msgstr "Configurar SSL"
 
 
+#: src/views/user/UserProfile.vue:204
+msgid "Confirm New Password"
+msgstr "Confirmar nova palavra-passe"
+
 #: src/views/dashboard/Environments.vue:141
 #: src/views/dashboard/Environments.vue:141
 msgid "Connected"
 msgid "Connected"
 msgstr "Conectado"
 msgstr "Conectado"
@@ -954,7 +959,7 @@ msgstr "Conectado"
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Erro de conexão, tentando reconectar..."
 msgstr "Erro de conexão, tentando reconectar..."
 
 
-#: src/views/terminal/Terminal.vue:142
+#: src/views/terminal/Terminal.vue:139
 msgid "Connection lost, please refresh the page."
 msgid "Connection lost, please refresh the page."
 msgstr "Ligação perdida, por favor actualize a página."
 msgstr "Ligação perdida, por favor actualize a página."
 
 
@@ -1012,7 +1017,7 @@ msgstr ""
 msgid "CPU:"
 msgid "CPU:"
 msgstr "CPU:"
 msgstr "CPU:"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:166
+#: src/components/NgxConfigEditor/NgxUpstream.vue:170
 msgid "Create"
 msgid "Create"
 msgstr "Criar"
 msgstr "Criar"
 
 
@@ -1042,7 +1047,7 @@ msgstr ""
 "automaticamente para o seu computador."
 "automaticamente para o seu computador."
 
 
 #: src/views/environments/group/columns.ts:29
 #: src/views/environments/group/columns.ts:29
-#: src/views/notification/notificationColumns.tsx:45
+#: src/views/notification/notificationColumns.tsx:51
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/user/userColumns.tsx:46
 #: src/views/user/userColumns.tsx:46
@@ -1081,6 +1086,10 @@ msgstr "Ligações ativas atuais"
 msgid "Current Content"
 msgid "Current Content"
 msgstr "Conteúdo atual"
 msgstr "Conteúdo atual"
 
 
+#: src/views/user/UserProfile.vue:186
+msgid "Current Password"
+msgstr "Palavra-passe atual"
+
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 msgid "Current usage"
 msgid "Current usage"
 msgstr "Utilização atual"
 msgstr "Utilização atual"
@@ -1122,8 +1131,8 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/views/certificate/components/RemoveCert.vue:88
 #: src/views/certificate/components/RemoveCert.vue:88
-#: src/views/site/site_list/SiteList.vue:108
-#: src/views/stream/StreamList.vue:165
+#: src/views/site/site_list/SiteList.vue:109
+#: src/views/stream/StreamList.vue:166
 msgid "Delete"
 msgid "Delete"
 msgstr "Eliminar"
 msgstr "Eliminar"
 
 
@@ -1200,7 +1209,7 @@ msgstr "O ficheiro de destino já existe"
 msgid "Destination file: {0} already exists"
 msgid "Destination file: {0} already exists"
 msgstr "Ficheiro de destino: {0} já existe"
 msgstr "Ficheiro de destino: {0} já existe"
 
 
-#: src/views/notification/notificationColumns.tsx:60
+#: src/views/notification/notificationColumns.tsx:66
 msgid "Details"
 msgid "Details"
 msgstr "Detalhes"
 msgstr "Detalhes"
 
 
@@ -1244,11 +1253,11 @@ msgstr "Níveis de diretório"
 msgid "Directory path to store cache files"
 msgid "Directory path to store cache files"
 msgstr "Caminho do diretório para armazenar ficheiros de cache"
 msgstr "Caminho do diretório para armazenar ficheiros de cache"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:88
+#: src/views/site/components/SiteStatusSelect.vue:115
 msgid "disable"
 msgid "disable"
 msgstr "Desativar"
 msgstr "Desativar"
 
 
-#: src/views/stream/StreamList.vue:136
+#: src/views/stream/StreamList.vue:137
 msgid "Disable"
 msgid "Disable"
 msgstr "Desativar"
 msgstr "Desativar"
 
 
@@ -1309,7 +1318,7 @@ msgstr "Desativar o fluxo %{name} de %{node} com sucesso"
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:134
+#: src/views/site/components/SiteStatusSelect.vue:162
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/stream/components/StreamEditor.vue:30
 #: src/views/stream/components/StreamEditor.vue:30
@@ -1317,7 +1326,7 @@ msgstr "Desativar o fluxo %{name} de %{node} com sucesso"
 msgid "Disabled"
 msgid "Disabled"
 msgstr "Desativado"
 msgstr "Desativado"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:40
+#: src/views/site/components/SiteStatusSelect.vue:67
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/StreamList.vue:56
 #: src/views/stream/StreamList.vue:56
 msgid "Disabled successfully"
 msgid "Disabled successfully"
@@ -1345,7 +1354,7 @@ msgstr "DNS01"
 msgid "Do not enable this option unless you are sure that you need it."
 msgid "Do not enable this option unless you are sure that you need it."
 msgstr "Não ative esta opção a menos que tenha a certeza de que precisa dela."
 msgstr "Não ative esta opção a menos que tenha a certeza de que precisa dela."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:93
+#: src/views/site/components/SiteStatusSelect.vue:120
 msgid "Do you want to %{action} this site?"
 msgid "Do you want to %{action} this site?"
 msgstr "Deseja %{action} este site?"
 msgstr "Deseja %{action} este site?"
 
 
@@ -1423,9 +1432,9 @@ msgstr ""
 "localhost."
 "localhost."
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:94
+#: src/views/site/site_list/SiteList.vue:95
 #: src/views/stream/components/StreamDuplicate.vue:64
 #: src/views/stream/components/StreamDuplicate.vue:64
-#: src/views/stream/StreamList.vue:151
+#: src/views/stream/StreamList.vue:152
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "Duplicado"
 msgstr "Duplicado"
 
 
@@ -1469,11 +1478,11 @@ msgstr "E-mail"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "E-mail (*)"
 msgstr "E-mail (*)"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:87
+#: src/views/site/components/SiteStatusSelect.vue:114
 msgid "enable"
 msgid "enable"
 msgstr "ativar"
 msgstr "ativar"
 
 
-#: src/views/stream/StreamList.vue:144
+#: src/views/stream/StreamList.vue:145
 msgid "Enable"
 msgid "Enable"
 msgstr "Activar"
 msgstr "Activar"
 
 
@@ -1571,7 +1580,7 @@ msgstr "Ativar TOTP"
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:130
+#: src/views/site/components/SiteStatusSelect.vue:159
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/stream/components/RightPanel/Basic.vue:62
 #: src/views/stream/components/RightPanel/Basic.vue:62
@@ -1580,7 +1589,7 @@ msgstr "Ativar TOTP"
 msgid "Enabled"
 msgid "Enabled"
 msgstr "Activado"
 msgstr "Activado"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:27
+#: src/views/site/components/SiteStatusSelect.vue:54
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/StreamList.vue:46
 #: src/views/stream/StreamList.vue:46
@@ -1789,23 +1798,23 @@ msgstr "Falha ao eliminar o certificado"
 msgid "Failed to delete certificate from database: %{error}"
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "Falha ao eliminar o certificado da base de dados: %{error}"
 msgstr "Falha ao eliminar o certificado da base de dados: %{error}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:46
+#: src/views/site/components/SiteStatusSelect.vue:73
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/StreamList.vue:60
 #: src/views/stream/StreamList.vue:60
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "Falha ao desactivar %{msg}"
 msgstr "Falha ao desactivar %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:72
+#: src/views/site/components/SiteStatusSelect.vue:99
 msgid "Failed to disable maintenance mode %{msg}"
 msgid "Failed to disable maintenance mode %{msg}"
 msgstr "Falha ao desativar o modo de manutenção: %{msg}"
 msgstr "Falha ao desativar o modo de manutenção: %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:33
+#: src/views/site/components/SiteStatusSelect.vue:60
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/StreamList.vue:50
 #: src/views/stream/StreamList.vue:50
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Falha ao Activar %{msg}"
 msgstr "Falha ao Activar %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:59
+#: src/views/site/components/SiteStatusSelect.vue:86
 msgid "Failed to enable maintenance mode %{msg}"
 msgid "Failed to enable maintenance mode %{msg}"
 msgstr "Falha ao ativar o modo de manutenção: %{msg}"
 msgstr "Falha ao ativar o modo de manutenção: %{msg}"
 
 
@@ -2118,7 +2127,7 @@ msgstr "Número ICP"
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr "Se for deixado em branco, será utilizado o diretório CA padrão."
 msgstr "Se for deixado em branco, será utilizado o diretório CA padrão."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:144
+#: src/views/preference/tabs/AuthSettings.vue:113
 msgid ""
 msgid ""
 "If the number of login failed attempts from a ip reach the max attempts in "
 "If the number of login failed attempts from a ip reach the max attempts in "
 "ban threshold minutes, the ip will be banned for a period of time."
 "ban threshold minutes, the ip will be banned for a period of time."
@@ -2288,7 +2297,7 @@ msgstr "Formato de pedido inválido"
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "Formato de token de segurança inválido"
 msgstr "Formato de token de segurança inválido"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:17
+#: src/views/preference/tabs/AuthSettings.vue:14
 msgid "IP"
 msgid "IP"
 msgstr "IP"
 msgstr "IP"
 
 
@@ -2403,7 +2412,7 @@ msgstr "Lista"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "Média de Carga:"
 msgstr "Média de Carga:"
 
 
-#: src/views/environments/list/Environment.vue:80
+#: src/views/environments/list/Environment.vue:81
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "Carregar a partir das configurações"
 msgstr "Carregar a partir das configurações"
 
 
@@ -2501,17 +2510,17 @@ msgstr ""
 "activar manualmente esta opção. O agendador de tarefas crontab do Nginx UI "
 "activar manualmente esta opção. O agendador de tarefas crontab do Nginx UI "
 "executará o comando logrotate no intervalo que definir em minutos."
 "executará o comando logrotate no intervalo que definir em minutos."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:138
+#: src/views/site/components/SiteStatusSelect.vue:165
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_list/columns.tsx:118
 #: src/views/site/site_list/columns.tsx:118
 msgid "Maintenance"
 msgid "Maintenance"
 msgstr "Manutenção"
 msgstr "Manutenção"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:66
+#: src/views/site/components/SiteStatusSelect.vue:93
 msgid "Maintenance mode disabled successfully"
 msgid "Maintenance mode disabled successfully"
 msgstr "Modo de manutenção desativado com sucesso"
 msgstr "Modo de manutenção desativado com sucesso"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:53
+#: src/views/site/components/SiteStatusSelect.vue:80
 msgid "Maintenance mode enabled successfully"
 msgid "Maintenance mode enabled successfully"
 msgstr "Modo de manutenção ativado com sucesso"
 msgstr "Modo de manutenção ativado com sucesso"
 
 
@@ -2578,7 +2587,7 @@ msgstr "Processo principal"
 msgid "Master Process"
 msgid "Master Process"
 msgstr "Processo mestre"
 msgstr "Processo mestre"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:134
+#: src/views/preference/tabs/AuthSettings.vue:103
 msgid "Max Attempts"
 msgid "Max Attempts"
 msgstr "Máximo de Tentativas"
 msgstr "Máximo de Tentativas"
 
 
@@ -2677,7 +2686,7 @@ msgstr "Módulos"
 msgid "Multi-line Directive"
 msgid "Multi-line Directive"
 msgstr "Diretiva Multilinha"
 msgstr "Diretiva Multilinha"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:178
+#: src/components/NgxConfigEditor/NgxUpstream.vue:182
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateList/certColumns.tsx:9
 #: src/views/certificate/CertificateList/certColumns.tsx:9
@@ -2694,7 +2703,7 @@ msgstr "Diretiva Multilinha"
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/StreamDuplicate.vue:71
 #: src/views/stream/components/StreamDuplicate.vue:71
-#: src/views/stream/StreamList.vue:178
+#: src/views/stream/StreamList.vue:179
 msgid "Name"
 msgid "Name"
 msgstr "Nome"
 msgstr "Nome"
 
 
@@ -2726,6 +2735,10 @@ msgstr "Nova instalação"
 msgid "New name"
 msgid "New name"
 msgstr "Novo nome"
 msgstr "Novo nome"
 
 
+#: src/views/user/UserProfile.vue:195
+msgid "New Password"
+msgstr "Nova senha"
+
 #: src/views/config/ConfigEditor.vue:328
 #: src/views/config/ConfigEditor.vue:328
 msgid "New Path"
 msgid "New Path"
 msgstr "Novo Caminho"
 msgstr "Novo Caminho"
@@ -2941,9 +2954,9 @@ msgstr "Nginx.conf inclui o diretório streams-enabled"
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
-#: src/views/preference/tabs/AuthSettings.vue:163
+#: src/views/preference/tabs/AuthSettings.vue:132
 #: src/views/preference/tabs/CertSettings.vue:73
 #: src/views/preference/tabs/CertSettings.vue:73
-#: src/views/site/site_list/SiteList.vue:97 src/views/stream/StreamList.vue:154
+#: src/views/site/site_list/SiteList.vue:98 src/views/stream/StreamList.vue:155
 msgid "No"
 msgid "No"
 msgstr "Não"
 msgstr "Não"
 
 
@@ -3078,6 +3091,7 @@ msgid "Off"
 msgstr "Desligado"
 msgstr "Desligado"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/components/NgxConfigEditor/NgxUpstream.vue:145
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3089,13 +3103,13 @@ msgstr "Off-line"
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/views/notification/Notification.vue:39
 #: src/views/notification/Notification.vue:39
-#: src/views/site/components/SiteStatusSegmented.vue:96
+#: src/views/site/components/SiteStatusSelect.vue:123
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
-#: src/views/site/site_list/SiteList.vue:98
+#: src/views/site/site_list/SiteList.vue:99
 #: src/views/stream/components/RightPanel/Basic.vue:46
 #: src/views/stream/components/RightPanel/Basic.vue:46
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:156
 #: src/views/system/Backup/BackupCreator.vue:149
 #: src/views/system/Backup/BackupCreator.vue:149
 msgid "OK"
 msgid "OK"
 msgstr "OK"
 msgstr "OK"
@@ -3215,6 +3229,14 @@ msgstr "Palavra-passe incorreta"
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr "O comprimento da palavra-passe não pode exceder 20 caracteres"
 msgstr "O comprimento da palavra-passe não pode exceder 20 caracteres"
 
 
+#: src/views/user/UserProfile.vue:96
+msgid "Password updated successfully"
+msgstr "Palavra-passe atualizada com sucesso"
+
+#: src/views/user/UserProfile.vue:75
+msgid "Passwords do not match"
+msgstr "As palavras-passe não coincidem"
+
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
@@ -3254,6 +3276,10 @@ msgstr "Configurações de desempenho guardadas com sucesso"
 msgid "Performing core upgrade"
 msgid "Performing core upgrade"
 msgstr "Executando actualização do core"
 msgstr "Executando actualização do core"
 
 
+#: src/views/user/UserProfile.vue:121
+msgid "Personal Information"
+msgstr "Informações pessoais"
+
 #: src/constants/errors/self_check.ts:19
 #: src/constants/errors/self_check.ts:19
 msgid "PID path not exist"
 msgid "PID path not exist"
 msgstr "O caminho do PID não existe"
 msgstr "O caminho do PID não existe"
@@ -3384,17 +3410,17 @@ msgstr "Por favor, selecione um ficheiro de cópia de segurança"
 msgid "Please select at least one item"
 msgid "Please select at least one item"
 msgstr "Por favor, selecione pelo menos um item"
 msgstr "Por favor, selecione pelo menos um item"
 
 
-#: src/views/environments/list/Environment.vue:112
+#: src/views/environments/list/Environment.vue:113
 #: src/views/environments/list/Environment.vue:35
 #: src/views/environments/list/Environment.vue:35
 msgid "Please select at least one node to reload Nginx"
 msgid "Please select at least one node to reload Nginx"
 msgstr "Por favor, selecione pelo menos um nó para recarregar o Nginx"
 msgstr "Por favor, selecione pelo menos um nó para recarregar o Nginx"
 
 
-#: src/views/environments/list/Environment.vue:133
+#: src/views/environments/list/Environment.vue:134
 #: src/views/environments/list/Environment.vue:49
 #: src/views/environments/list/Environment.vue:49
 msgid "Please select at least one node to restart Nginx"
 msgid "Please select at least one node to restart Nginx"
 msgstr "Por favor, selecione pelo menos um nó para reiniciar o Nginx"
 msgstr "Por favor, selecione pelo menos um nó para reiniciar o Nginx"
 
 
-#: src/views/environments/list/Environment.vue:91
+#: src/views/environments/list/Environment.vue:92
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "Por favor, selecione pelo menos um nó para atualizar"
 msgstr "Por favor, selecione pelo menos um nó para atualizar"
 
 
@@ -3560,8 +3586,8 @@ msgstr "Recarregar"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/EnvGroup.vue:50
 #: src/views/environments/group/EnvGroup.vue:50
-#: src/views/environments/list/Environment.vue:120
-#: src/views/environments/list/Environment.vue:128
+#: src/views/environments/list/Environment.vue:121
+#: src/views/environments/list/Environment.vue:129
 msgid "Reload Nginx"
 msgid "Reload Nginx"
 msgstr "Recarregar Nginx"
 msgstr "Recarregar Nginx"
 
 
@@ -3597,12 +3623,12 @@ msgstr "Recarregando"
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr "Recarregando Nginx"
 msgstr "Recarregando Nginx"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:168
+#: src/views/preference/tabs/AuthSettings.vue:137
 msgid "Remove"
 msgid "Remove"
 msgstr "Remover"
 msgstr "Remover"
 
 
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
-#: src/views/preference/tabs/AuthSettings.vue:50
+#: src/views/preference/tabs/AuthSettings.vue:47
 msgid "Remove successfully"
 msgid "Remove successfully"
 msgstr "Removido com sucesso"
 msgstr "Removido com sucesso"
 
 
@@ -3743,8 +3769,8 @@ msgid "Restart"
 msgstr "Reiniciar"
 msgstr "Reiniciar"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
-#: src/views/environments/list/Environment.vue:141
-#: src/views/environments/list/Environment.vue:149
+#: src/views/environments/list/Environment.vue:142
+#: src/views/environments/list/Environment.vue:150
 msgid "Restart Nginx"
 msgid "Restart Nginx"
 msgstr "Reiniciar Nginx"
 msgstr "Reiniciar Nginx"
 
 
@@ -3824,15 +3850,15 @@ msgstr ""
 "A revogação de um certificado afetará quaisquer serviços que o estejam a "
 "A revogação de um certificado afetará quaisquer serviços que o estejam a "
 "utilizar atualmente. Esta ação não pode ser desfeita."
 "utilizar atualmente. Esta ação não pode ser desfeita."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:106
+#: src/views/preference/tabs/AuthSettings.vue:75
 msgid "RP Display Name"
 msgid "RP Display Name"
 msgstr "Nome de Exibição RP"
 msgstr "Nome de Exibição RP"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:112
+#: src/views/preference/tabs/AuthSettings.vue:81
 msgid "RP Origins"
 msgid "RP Origins"
 msgstr "Origens RP"
 msgstr "Origens RP"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:100
+#: src/views/preference/tabs/AuthSettings.vue:69
 msgid "RPID"
 msgid "RPID"
 msgstr "RPID"
 msgstr "RPID"
 
 
@@ -3939,6 +3965,10 @@ msgstr "Nome do módulo de pesquisa"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "O segredo foi copiado"
 msgstr "O segredo foi copiado"
 
 
+#: src/views/user/UserProfile.vue:175
+msgid "Security Settings"
+msgstr "Configurações de segurança"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 msgid "Security Token"
 msgid "Security Token"
@@ -4016,7 +4046,7 @@ msgstr ""
 "Configure os nameservers recursivos para substituir os nameservers dos "
 "Configure os nameservers recursivos para substituir os nameservers dos "
 "sistemas na etapa de DNS challenge."
 "sistemas na etapa de DNS challenge."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:89
+#: src/views/site/components/SiteStatusSelect.vue:116
 msgid "set to maintenance mode"
 msgid "set to maintenance mode"
 msgstr "definir como modo de manutenção"
 msgstr "definir como modo de manutenção"
 
 
@@ -4259,13 +4289,11 @@ msgstr ""
 "consulte este link para escrever o ficheiro de configuração correspondente: "
 "consulte este link para escrever o ficheiro de configuração correspondente: "
 "https://nginxui.com/guide/nginx-proxy-example.html"
 "https://nginxui.com/guide/nginx-proxy-example.html"
 
 
-#: src/language/curd.ts:51
-#: src/language/curd.ts:55
+#: src/language/curd.ts:51 src/language/curd.ts:55
 msgid "Support single or batch upload of files"
 msgid "Support single or batch upload of files"
 msgstr "Suporta upload único ou em lote de ficheiros"
 msgstr "Suporta upload único ou em lote de ficheiros"
 
 
-#: src/language/curd.ts:52
-#: src/language/curd.ts:56
+#: src/language/curd.ts:52 src/language/curd.ts:56
 msgid "Support uploading entire folders"
 msgid "Support uploading entire folders"
 msgstr "Suporta o carregamento de pastas inteiras"
 msgstr "Suporta o carregamento de pastas inteiras"
 
 
@@ -4608,12 +4636,12 @@ msgstr ""
 "Isto vai actualizar ou reinstalar o Nginx UI em %{nodeNames} para "
 "Isto vai actualizar ou reinstalar o Nginx UI em %{nodeNames} para "
 "%{version}."
 "%{version}."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:123
+#: src/views/preference/tabs/AuthSettings.vue:92
 msgid "Throttle"
 msgid "Throttle"
 msgstr "Limitação"
 msgstr "Limitação"
 
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
-#: src/views/preference/tabs/AuthSettings.vue:143
+#: src/views/preference/tabs/AuthSettings.vue:112
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 msgid "Tips"
 msgid "Tips"
 msgstr "Dicas"
 msgstr "Dicas"
@@ -4626,7 +4654,7 @@ msgstr ""
 "Dica: Pode aumentar a capacidade de processamento concorrente aumentando "
 "Dica: Pode aumentar a capacidade de processamento concorrente aumentando "
 "worker_processes ou worker_connections."
 "worker_processes ou worker_connections."
 
 
-#: src/views/notification/notificationColumns.tsx:52
+#: src/views/notification/notificationColumns.tsx:58
 msgid "Title"
 msgid "Title"
 msgstr "Título"
 msgstr "Título"
 
 
@@ -4746,6 +4774,14 @@ msgstr "Tipo"
 msgid "Unknown"
 msgid "Unknown"
 msgstr "Desconhecido"
 msgstr "Desconhecido"
 
 
+#: src/views/user/UserProfile.vue:218
+msgid "Update Password"
+msgstr "Atualizar senha"
+
+#: src/views/user/UserProfile.vue:142
+msgid "Update Profile"
+msgstr "Atualizar perfil"
+
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "Atualização bem-sucedida"
 msgstr "Atualização bem-sucedida"
@@ -4763,8 +4799,8 @@ msgid "Updated at"
 msgstr "Actualizado em"
 msgstr "Actualizado em"
 
 
 #: src/routes/modules/system.ts:33
 #: src/routes/modules/system.ts:33
-#: src/views/environments/list/Environment.vue:107
-#: src/views/environments/list/Environment.vue:99
+#: src/views/environments/list/Environment.vue:100
+#: src/views/environments/list/Environment.vue:108
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "Actualizar"
 msgstr "Actualizar"
@@ -4790,7 +4826,7 @@ msgstr "Carregar ficheiros"
 msgid "Upload Folders"
 msgid "Upload Folders"
 msgstr "Carregar pastas"
 msgstr "Carregar pastas"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:173
+#: src/components/NgxConfigEditor/NgxUpstream.vue:177
 msgid "Upstream Name"
 msgid "Upstream Name"
 msgstr "Nome do Upstream"
 msgstr "Nome do Upstream"
 
 
@@ -4822,11 +4858,20 @@ msgstr "Utilizador"
 msgid "User banned"
 msgid "User banned"
 msgstr "Utilizador banido"
 msgstr "Utilizador banido"
 
 
+#: src/views/user/UserProfile.vue:62
+msgid "User info updated successfully"
+msgstr "Informações do utilizador atualizadas com sucesso"
+
 #: src/constants/errors/user.ts:8
 #: src/constants/errors/user.ts:8
 msgid "User not enabled otp as 2fa"
 msgid "User not enabled otp as 2fa"
 msgstr "Utilizador não ativou OTP como 2FA"
 msgstr "Utilizador não ativou OTP como 2FA"
 
 
+#: src/routes/modules/user.ts:19
+msgid "User Profile"
+msgstr "Perfil do utilizador"
+
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
+#: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Nome de Utilizador"
 msgstr "Nome de Utilizador"
 
 
@@ -4917,7 +4962,7 @@ msgstr ""
 "Removeremos a configuração HTTPChallenge deste ficheiro e reiniciaremos o "
 "Removeremos a configuração HTTPChallenge deste ficheiro e reiniciaremos o "
 "Nginx. Tem a certeza de que quer continuar?"
 "Nginx. Tem a certeza de que quer continuar?"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:96
+#: src/views/preference/tabs/AuthSettings.vue:65
 msgid "Webauthn"
 msgid "Webauthn"
 msgstr "Webauthn"
 msgstr "Webauthn"
 
 
@@ -4997,12 +5042,12 @@ msgstr "Escrevendo certificado no disco"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
-#: src/views/preference/tabs/AuthSettings.vue:162
+#: src/views/preference/tabs/AuthSettings.vue:131
 #: src/views/preference/tabs/CertSettings.vue:72
 #: src/views/preference/tabs/CertSettings.vue:72
 msgid "Yes"
 msgid "Yes"
 msgstr "Sim"
 msgstr "Sim"
 
 
-#: src/views/terminal/Terminal.vue:135
+#: src/views/terminal/Terminal.vue:132
 msgid ""
 msgid ""
 "You are accessing this terminal over an insecure HTTP connection on a "
 "You are accessing this terminal over an insecure HTTP connection on a "
 "non-localhost domain. This may expose sensitive information."
 "non-localhost domain. This may expose sensitive information."
@@ -5099,9 +5144,6 @@ msgstr "As suas chaves de acesso"
 #~ msgid_plural "Total %{total} items"
 #~ msgid_plural "Total %{total} items"
 #~ msgstr[0] "Total %{total} item"
 #~ msgstr[0] "Total %{total} item"
 
 
-#~ msgid "Updated successfully"
-#~ msgstr "Actualizado com sucesso"
-
 #~ msgid "View Details"
 #~ msgid "View Details"
 #~ msgstr "Ver Detalhes"
 #~ msgstr "Ver Detalhes"
 
 

+ 127 - 85
app/src/language/ru_RU/app.po

@@ -108,7 +108,7 @@ msgstr "[Nginx UI] Запись сертификата на диск"
 msgid "2FA"
 msgid "2FA"
 msgstr "2FA"
 msgstr "2FA"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:69
+#: src/views/user/UserProfile.vue:151
 msgid "2FA Settings"
 msgid "2FA Settings"
 msgstr "Настройки 2FA"
 msgstr "Настройки 2FA"
 
 
@@ -134,8 +134,7 @@ msgstr "Журналы доступа"
 msgid "ACME User"
 msgid "ACME User"
 msgstr "Пользователь ACME"
 msgstr "Пользователь ACME"
 
 
-#: src/views/notification/notificationColumns.tsx:66
-#: src/views/preference/tabs/AuthSettings.vue:29
+#: src/views/preference/tabs/AuthSettings.vue:26
 msgid "Action"
 msgid "Action"
 msgstr "Действие"
 msgstr "Действие"
 
 
@@ -146,9 +145,9 @@ msgstr "Действие"
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/nginx_log/NginxLogList.vue:52
 #: src/views/nginx_log/NginxLogList.vue:52
+#: src/views/notification/notificationColumns.tsx:72
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
-#: src/views/site/site_list/columns.tsx:129
-#: src/views/stream/columns.tsx:64
+#: src/views/site/site_list/columns.tsx:129 src/views/stream/columns.tsx:64
 #: src/views/user/userColumns.tsx:58
 #: src/views/user/userColumns.tsx:58
 msgid "Actions"
 msgid "Actions"
 msgstr "Действия"
 msgstr "Действия"
@@ -163,10 +162,10 @@ msgid "Actual worker to configured ratio"
 msgstr "Фактическое соотношение рабочих к настроенным"
 msgstr "Фактическое соотношение рабочих к настроенным"
 
 
 #: src/components/NgxConfigEditor/NgxServer.vue:112
 #: src/components/NgxConfigEditor/NgxServer.vue:112
-#: src/components/NgxConfigEditor/NgxUpstream.vue:155 src/language/curd.ts:19
+#: src/components/NgxConfigEditor/NgxUpstream.vue:159 src/language/curd.ts:19
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
-#: src/views/stream/StreamList.vue:120
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "Добавить"
 msgstr "Добавить"
 
 
@@ -193,7 +192,7 @@ msgstr "Добавить Location"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "Добавить Сайт"
 msgstr "Добавить Сайт"
 
 
-#: src/views/stream/StreamList.vue:173
+#: src/views/stream/StreamList.vue:174
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "Добавить поток"
 msgstr "Добавить поток"
 
 
@@ -251,7 +250,7 @@ msgstr "Приложение"
 msgid "Arch"
 msgid "Arch"
 msgstr "\"Архитектура\""
 msgstr "\"Архитектура\""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:161
+#: src/views/preference/tabs/AuthSettings.vue:130
 msgid "Are you sure to delete this banned IP immediately?"
 msgid "Are you sure to delete this banned IP immediately?"
 msgstr "Вы уверены, что хотите немедленно удалить этот заблокированный IP?"
 msgstr "Вы уверены, что хотите немедленно удалить этот заблокированный IP?"
 
 
@@ -280,8 +279,8 @@ msgstr "Вы уверены, что хотите очистить сообщен
 msgid "Are you sure you want to delete permanently?"
 msgid "Are you sure you want to delete permanently?"
 msgstr "Вы уверены, что хотите удалить безвозвратно?"
 msgstr "Вы уверены, что хотите удалить безвозвратно?"
 
 
-#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:99
-#: src/views/stream/StreamList.vue:156
+#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:100
+#: src/views/stream/StreamList.vue:157
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "Вы уверены, что хотите удалить?"
 msgstr "Вы уверены, что хотите удалить?"
 
 
@@ -325,7 +324,7 @@ msgstr "Ассистент"
 msgid "Attempt to fix"
 msgid "Attempt to fix"
 msgstr "Попытка исправить"
 msgstr "Попытка исправить"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:20
+#: src/views/preference/tabs/AuthSettings.vue:17
 msgid "Attempts"
 msgid "Attempts"
 msgstr "Попытки"
 msgstr "Попытки"
 
 
@@ -337,7 +336,7 @@ msgstr "Авторизация"
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr "Аутентификация с помощью ключа доступа"
 msgstr "Аутентификация с помощью ключа доступа"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:87
+#: src/views/preference/tabs/AuthSettings.vue:56
 msgid "Authentication Settings"
 msgid "Authentication Settings"
 msgstr "Настройки аутентификации"
 msgstr "Настройки аутентификации"
 
 
@@ -414,15 +413,15 @@ msgstr "Файл резервной копии не найден: {0}"
 msgid "Backup has been downloaded successfully"
 msgid "Backup has been downloaded successfully"
 msgstr "Резервная копия успешно загружена"
 msgstr "Резервная копия успешно загружена"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:128
+#: src/views/preference/tabs/AuthSettings.vue:97
 msgid "Ban Threshold Minutes"
 msgid "Ban Threshold Minutes"
 msgstr "Порог блокировки в минутах"
 msgstr "Порог блокировки в минутах"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:149
+#: src/views/preference/tabs/AuthSettings.vue:118
 msgid "Banned IPs"
 msgid "Banned IPs"
 msgstr "Заблокированные IP-адреса"
 msgstr "Заблокированные IP-адреса"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:23
+#: src/views/preference/tabs/AuthSettings.vue:20
 msgid "Banned Until"
 msgid "Banned Until"
 msgstr "Заблокирован до"
 msgstr "Заблокирован до"
 
 
@@ -534,7 +533,7 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
-#: src/views/site/components/SiteStatusSegmented.vue:97
+#: src/views/site/components/SiteStatusSelect.vue:124
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
@@ -653,6 +652,10 @@ msgstr "Метод Challenge"
 msgid "Change Certificate"
 msgid "Change Certificate"
 msgstr "Изменить сертификат"
 msgstr "Изменить сертификат"
 
 
+#: src/views/user/UserProfile.vue:181
+msgid "Change Password"
+msgstr "Изменить пароль"
+
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 msgid "Changed Certificate"
 msgid "Changed Certificate"
 msgid_plural "Changed Certificates"
 msgid_plural "Changed Certificates"
@@ -821,13 +824,11 @@ msgstr ""
 "Нажмите или перетащите файл резервного копирования в эту область, чтобы "
 "Нажмите или перетащите файл резервного копирования в эту область, чтобы "
 "загрузить"
 "загрузить"
 
 
-#: src/language/curd.ts:49
-#: src/language/curd.ts:53
+#: src/language/curd.ts:49 src/language/curd.ts:53
 msgid "Click or drag files to this area to upload"
 msgid "Click or drag files to this area to upload"
 msgstr "Нажмите или перетащите файлы в эту область для загрузки"
 msgstr "Нажмите или перетащите файлы в эту область для загрузки"
 
 
-#: src/language/curd.ts:50
-#: src/language/curd.ts:54
+#: src/language/curd.ts:50 src/language/curd.ts:54
 msgid "Click or drag folders to this area to upload"
 msgid "Click or drag folders to this area to upload"
 msgstr "Нажмите или перетащите папки в эту область для загрузки"
 msgstr "Нажмите или перетащите папки в эту область для загрузки"
 
 
@@ -947,6 +948,10 @@ msgstr "Конфигурации"
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr "Настроить SSL"
 msgstr "Настроить SSL"
 
 
+#: src/views/user/UserProfile.vue:204
+msgid "Confirm New Password"
+msgstr "Подтвердите новый пароль"
+
 #: src/views/dashboard/Environments.vue:141
 #: src/views/dashboard/Environments.vue:141
 msgid "Connected"
 msgid "Connected"
 msgstr "Подключено"
 msgstr "Подключено"
@@ -955,7 +960,7 @@ msgstr "Подключено"
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Ошибка соединения, попытка переподключения..."
 msgstr "Ошибка соединения, попытка переподключения..."
 
 
-#: src/views/terminal/Terminal.vue:142
+#: src/views/terminal/Terminal.vue:139
 msgid "Connection lost, please refresh the page."
 msgid "Connection lost, please refresh the page."
 msgstr "Соединение потеряно, пожалуйста, обновите страницу."
 msgstr "Соединение потеряно, пожалуйста, обновите страницу."
 
 
@@ -1013,7 +1018,7 @@ msgstr ""
 msgid "CPU:"
 msgid "CPU:"
 msgstr "CPU:"
 msgstr "CPU:"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:166
+#: src/components/NgxConfigEditor/NgxUpstream.vue:170
 msgid "Create"
 msgid "Create"
 msgstr "Создать"
 msgstr "Создать"
 
 
@@ -1043,7 +1048,7 @@ msgstr ""
 "компьютер."
 "компьютер."
 
 
 #: src/views/environments/group/columns.ts:29
 #: src/views/environments/group/columns.ts:29
-#: src/views/notification/notificationColumns.tsx:45
+#: src/views/notification/notificationColumns.tsx:51
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/user/userColumns.tsx:46
 #: src/views/user/userColumns.tsx:46
@@ -1082,6 +1087,10 @@ msgstr "Текущие активные подключения"
 msgid "Current Content"
 msgid "Current Content"
 msgstr "Текущее содержимое"
 msgstr "Текущее содержимое"
 
 
+#: src/views/user/UserProfile.vue:186
+msgid "Current Password"
+msgstr "Текущий пароль"
+
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 msgid "Current usage"
 msgid "Current usage"
 msgstr "Текущее использование"
 msgstr "Текущее использование"
@@ -1121,8 +1130,8 @@ msgstr "Определите имя и размер зоны общей памя
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/views/certificate/components/RemoveCert.vue:88
 #: src/views/certificate/components/RemoveCert.vue:88
-#: src/views/site/site_list/SiteList.vue:108
-#: src/views/stream/StreamList.vue:165
+#: src/views/site/site_list/SiteList.vue:109
+#: src/views/stream/StreamList.vue:166
 msgid "Delete"
 msgid "Delete"
 msgstr "Удалить"
 msgstr "Удалить"
 
 
@@ -1199,7 +1208,7 @@ msgstr "Файл назначения уже существует"
 msgid "Destination file: {0} already exists"
 msgid "Destination file: {0} already exists"
 msgstr "Файл назначения: {0} уже существует"
 msgstr "Файл назначения: {0} уже существует"
 
 
-#: src/views/notification/notificationColumns.tsx:60
+#: src/views/notification/notificationColumns.tsx:66
 msgid "Details"
 msgid "Details"
 msgstr "Детали"
 msgstr "Детали"
 
 
@@ -1243,11 +1252,11 @@ msgstr "Уровни каталога"
 msgid "Directory path to store cache files"
 msgid "Directory path to store cache files"
 msgstr "Путь к каталогу для хранения кэшированных файлов"
 msgstr "Путь к каталогу для хранения кэшированных файлов"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:88
+#: src/views/site/components/SiteStatusSelect.vue:115
 msgid "disable"
 msgid "disable"
 msgstr "Отключить"
 msgstr "Отключить"
 
 
-#: src/views/stream/StreamList.vue:136
+#: src/views/stream/StreamList.vue:137
 msgid "Disable"
 msgid "Disable"
 msgstr "Отключить"
 msgstr "Отключить"
 
 
@@ -1308,7 +1317,7 @@ msgstr "Поток %{name} отключен от %{node} успешно"
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:134
+#: src/views/site/components/SiteStatusSelect.vue:162
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/stream/components/StreamEditor.vue:30
 #: src/views/stream/components/StreamEditor.vue:30
@@ -1316,7 +1325,7 @@ msgstr "Поток %{name} отключен от %{node} успешно"
 msgid "Disabled"
 msgid "Disabled"
 msgstr "Отключено"
 msgstr "Отключено"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:40
+#: src/views/site/components/SiteStatusSelect.vue:67
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/StreamList.vue:56
 #: src/views/stream/StreamList.vue:56
 msgid "Disabled successfully"
 msgid "Disabled successfully"
@@ -1344,7 +1353,7 @@ msgstr "DNS01"
 msgid "Do not enable this option unless you are sure that you need it."
 msgid "Do not enable this option unless you are sure that you need it."
 msgstr "Не включайте эту опцию, если не уверены, что она вам нужна."
 msgstr "Не включайте эту опцию, если не уверены, что она вам нужна."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:93
+#: src/views/site/components/SiteStatusSelect.vue:120
 msgid "Do you want to %{action} this site?"
 msgid "Do you want to %{action} this site?"
 msgstr "Вы хотите %{action} этот сайт?"
 msgstr "Вы хотите %{action} этот сайт?"
 
 
@@ -1422,9 +1431,9 @@ msgstr ""
 "запускаются на localhost."
 "запускаются на localhost."
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:94
+#: src/views/site/site_list/SiteList.vue:95
 #: src/views/stream/components/StreamDuplicate.vue:64
 #: src/views/stream/components/StreamDuplicate.vue:64
-#: src/views/stream/StreamList.vue:151
+#: src/views/stream/StreamList.vue:152
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "Дублировать"
 msgstr "Дублировать"
 
 
@@ -1468,11 +1477,11 @@ msgstr "Электронная почта"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:87
+#: src/views/site/components/SiteStatusSelect.vue:114
 msgid "enable"
 msgid "enable"
 msgstr "включить"
 msgstr "включить"
 
 
-#: src/views/stream/StreamList.vue:144
+#: src/views/stream/StreamList.vue:145
 msgid "Enable"
 msgid "Enable"
 msgstr "Включить"
 msgstr "Включить"
 
 
@@ -1570,7 +1579,7 @@ msgstr "Включить TOTP"
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:130
+#: src/views/site/components/SiteStatusSelect.vue:159
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/stream/components/RightPanel/Basic.vue:62
 #: src/views/stream/components/RightPanel/Basic.vue:62
@@ -1579,7 +1588,7 @@ msgstr "Включить TOTP"
 msgid "Enabled"
 msgid "Enabled"
 msgstr "Включено"
 msgstr "Включено"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:27
+#: src/views/site/components/SiteStatusSelect.vue:54
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/StreamList.vue:46
 #: src/views/stream/StreamList.vue:46
@@ -1788,23 +1797,23 @@ msgstr "Не удалось удалить сертификат"
 msgid "Failed to delete certificate from database: %{error}"
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "Не удалось удалить сертификат из базы данных: %{error}"
 msgstr "Не удалось удалить сертификат из базы данных: %{error}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:46
+#: src/views/site/components/SiteStatusSelect.vue:73
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/StreamList.vue:60
 #: src/views/stream/StreamList.vue:60
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "Не удалось отключить %{msg}"
 msgstr "Не удалось отключить %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:72
+#: src/views/site/components/SiteStatusSelect.vue:99
 msgid "Failed to disable maintenance mode %{msg}"
 msgid "Failed to disable maintenance mode %{msg}"
 msgstr "Не удалось отключить режим обслуживания: %{msg}"
 msgstr "Не удалось отключить режим обслуживания: %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:33
+#: src/views/site/components/SiteStatusSelect.vue:60
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/StreamList.vue:50
 #: src/views/stream/StreamList.vue:50
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:59
+#: src/views/site/components/SiteStatusSelect.vue:86
 msgid "Failed to enable maintenance mode %{msg}"
 msgid "Failed to enable maintenance mode %{msg}"
 msgstr "Не удалось включить режим обслуживания: %{msg}"
 msgstr "Не удалось включить режим обслуживания: %{msg}"
 
 
@@ -2117,7 +2126,7 @@ msgstr "ICP номер"
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr "Если оставить пустым, будет использоваться каталог CA по умолчанию."
 msgstr "Если оставить пустым, будет использоваться каталог CA по умолчанию."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:144
+#: src/views/preference/tabs/AuthSettings.vue:113
 msgid ""
 msgid ""
 "If the number of login failed attempts from a ip reach the max attempts in "
 "If the number of login failed attempts from a ip reach the max attempts in "
 "ban threshold minutes, the ip will be banned for a period of time."
 "ban threshold minutes, the ip will be banned for a period of time."
@@ -2285,7 +2294,7 @@ msgstr "Неверный формат запроса"
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "Неверный формат токена безопасности"
 msgstr "Неверный формат токена безопасности"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:17
+#: src/views/preference/tabs/AuthSettings.vue:14
 msgid "IP"
 msgid "IP"
 msgstr "IP"
 msgstr "IP"
 
 
@@ -2400,7 +2409,7 @@ msgstr "Список"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "Средняя нагрузка:"
 msgstr "Средняя нагрузка:"
 
 
-#: src/views/environments/list/Environment.vue:80
+#: src/views/environments/list/Environment.vue:81
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "Загрузить из настроек"
 msgstr "Загрузить из настроек"
 
 
@@ -2498,17 +2507,17 @@ msgstr ""
 "можете вручную включить эту опцию. Планировщик задач crontab Nginx UI будет "
 "можете вручную включить эту опцию. Планировщик задач crontab Nginx UI будет "
 "выполнять команду logrotate с интервалом, который вы установите в минутах."
 "выполнять команду logrotate с интервалом, который вы установите в минутах."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:138
+#: src/views/site/components/SiteStatusSelect.vue:165
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_list/columns.tsx:118
 #: src/views/site/site_list/columns.tsx:118
 msgid "Maintenance"
 msgid "Maintenance"
 msgstr "Техническое обслуживание"
 msgstr "Техническое обслуживание"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:66
+#: src/views/site/components/SiteStatusSelect.vue:93
 msgid "Maintenance mode disabled successfully"
 msgid "Maintenance mode disabled successfully"
 msgstr "Режим обслуживания успешно отключен"
 msgstr "Режим обслуживания успешно отключен"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:53
+#: src/views/site/components/SiteStatusSelect.vue:80
 msgid "Maintenance mode enabled successfully"
 msgid "Maintenance mode enabled successfully"
 msgstr "Режим обслуживания успешно включен"
 msgstr "Режим обслуживания успешно включен"
 
 
@@ -2575,7 +2584,7 @@ msgstr "Главный процесс"
 msgid "Master Process"
 msgid "Master Process"
 msgstr "Главный процесс"
 msgstr "Главный процесс"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:134
+#: src/views/preference/tabs/AuthSettings.vue:103
 msgid "Max Attempts"
 msgid "Max Attempts"
 msgstr "Максимальное количество попыток"
 msgstr "Максимальное количество попыток"
 
 
@@ -2674,7 +2683,7 @@ msgstr "Модули"
 msgid "Multi-line Directive"
 msgid "Multi-line Directive"
 msgstr "Многострочная директива"
 msgstr "Многострочная директива"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:178
+#: src/components/NgxConfigEditor/NgxUpstream.vue:182
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateList/certColumns.tsx:9
 #: src/views/certificate/CertificateList/certColumns.tsx:9
@@ -2691,7 +2700,7 @@ msgstr "Многострочная директива"
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/StreamDuplicate.vue:71
 #: src/views/stream/components/StreamDuplicate.vue:71
-#: src/views/stream/StreamList.vue:178
+#: src/views/stream/StreamList.vue:179
 msgid "Name"
 msgid "Name"
 msgstr "Имя"
 msgstr "Имя"
 
 
@@ -2723,6 +2732,10 @@ msgstr "Новая установка"
 msgid "New name"
 msgid "New name"
 msgstr "Новое имя"
 msgstr "Новое имя"
 
 
+#: src/views/user/UserProfile.vue:195
+msgid "New Password"
+msgstr "Новый пароль"
+
 #: src/views/config/ConfigEditor.vue:328
 #: src/views/config/ConfigEditor.vue:328
 msgid "New Path"
 msgid "New Path"
 msgstr "Новый путь"
 msgstr "Новый путь"
@@ -2938,9 +2951,9 @@ msgstr "Nginx.conf включает каталог streams-enabled"
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
-#: src/views/preference/tabs/AuthSettings.vue:163
+#: src/views/preference/tabs/AuthSettings.vue:132
 #: src/views/preference/tabs/CertSettings.vue:73
 #: src/views/preference/tabs/CertSettings.vue:73
-#: src/views/site/site_list/SiteList.vue:97 src/views/stream/StreamList.vue:154
+#: src/views/site/site_list/SiteList.vue:98 src/views/stream/StreamList.vue:155
 msgid "No"
 msgid "No"
 msgstr "Нет"
 msgstr "Нет"
 
 
@@ -3075,6 +3088,7 @@ msgid "Off"
 msgstr "Выкл"
 msgstr "Выкл"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/components/NgxConfigEditor/NgxUpstream.vue:145
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3086,13 +3100,13 @@ msgstr "Оффлайн"
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/views/notification/Notification.vue:39
 #: src/views/notification/Notification.vue:39
-#: src/views/site/components/SiteStatusSegmented.vue:96
+#: src/views/site/components/SiteStatusSelect.vue:123
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
-#: src/views/site/site_list/SiteList.vue:98
+#: src/views/site/site_list/SiteList.vue:99
 #: src/views/stream/components/RightPanel/Basic.vue:46
 #: src/views/stream/components/RightPanel/Basic.vue:46
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:156
 #: src/views/system/Backup/BackupCreator.vue:149
 #: src/views/system/Backup/BackupCreator.vue:149
 msgid "OK"
 msgid "OK"
 msgstr "ОК"
 msgstr "ОК"
@@ -3212,6 +3226,14 @@ msgstr "Неверный пароль"
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr "Длина пароля не может превышать 20 символов"
 msgstr "Длина пароля не может превышать 20 символов"
 
 
+#: src/views/user/UserProfile.vue:96
+msgid "Password updated successfully"
+msgstr "Пароль успешно обновлен"
+
+#: src/views/user/UserProfile.vue:75
+msgid "Passwords do not match"
+msgstr "Пароли не совпадают"
+
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
@@ -3251,6 +3273,10 @@ msgstr "Настройки производительности успешно 
 msgid "Performing core upgrade"
 msgid "Performing core upgrade"
 msgstr "Выполнение обновления ядра"
 msgstr "Выполнение обновления ядра"
 
 
+#: src/views/user/UserProfile.vue:121
+msgid "Personal Information"
+msgstr "Личная информация"
+
 #: src/constants/errors/self_check.ts:19
 #: src/constants/errors/self_check.ts:19
 msgid "PID path not exist"
 msgid "PID path not exist"
 msgstr "Путь PID не существует"
 msgstr "Путь PID не существует"
@@ -3386,17 +3412,17 @@ msgstr "Пожалуйста, выберите файл резервной ко
 msgid "Please select at least one item"
 msgid "Please select at least one item"
 msgstr "Пожалуйста, выберите хотя бы один элемент"
 msgstr "Пожалуйста, выберите хотя бы один элемент"
 
 
-#: src/views/environments/list/Environment.vue:112
+#: src/views/environments/list/Environment.vue:113
 #: src/views/environments/list/Environment.vue:35
 #: src/views/environments/list/Environment.vue:35
 msgid "Please select at least one node to reload Nginx"
 msgid "Please select at least one node to reload Nginx"
 msgstr "Пожалуйста, выберите хотя бы один узел для перезагрузки Nginx"
 msgstr "Пожалуйста, выберите хотя бы один узел для перезагрузки Nginx"
 
 
-#: src/views/environments/list/Environment.vue:133
+#: src/views/environments/list/Environment.vue:134
 #: src/views/environments/list/Environment.vue:49
 #: src/views/environments/list/Environment.vue:49
 msgid "Please select at least one node to restart Nginx"
 msgid "Please select at least one node to restart Nginx"
 msgstr "Пожалуйста, выберите хотя бы один узел для перезапуска Nginx"
 msgstr "Пожалуйста, выберите хотя бы один узел для перезапуска Nginx"
 
 
-#: src/views/environments/list/Environment.vue:91
+#: src/views/environments/list/Environment.vue:92
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "Пожалуйста, выберите хотя бы один узел"
 msgstr "Пожалуйста, выберите хотя бы один узел"
 
 
@@ -3562,8 +3588,8 @@ msgstr "Перегрузить"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/EnvGroup.vue:50
 #: src/views/environments/group/EnvGroup.vue:50
-#: src/views/environments/list/Environment.vue:120
-#: src/views/environments/list/Environment.vue:128
+#: src/views/environments/list/Environment.vue:121
+#: src/views/environments/list/Environment.vue:129
 msgid "Reload Nginx"
 msgid "Reload Nginx"
 msgstr "Перезагрузить Nginx"
 msgstr "Перезагрузить Nginx"
 
 
@@ -3599,12 +3625,12 @@ msgstr "Перезагружается"
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr "Перезагружается nginx"
 msgstr "Перезагружается nginx"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:168
+#: src/views/preference/tabs/AuthSettings.vue:137
 msgid "Remove"
 msgid "Remove"
 msgstr "Удалить"
 msgstr "Удалить"
 
 
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
-#: src/views/preference/tabs/AuthSettings.vue:50
+#: src/views/preference/tabs/AuthSettings.vue:47
 msgid "Remove successfully"
 msgid "Remove successfully"
 msgstr "Удалено успешно"
 msgstr "Удалено успешно"
 
 
@@ -3743,8 +3769,8 @@ msgid "Restart"
 msgstr "Перезапуск"
 msgstr "Перезапуск"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
-#: src/views/environments/list/Environment.vue:141
-#: src/views/environments/list/Environment.vue:149
+#: src/views/environments/list/Environment.vue:142
+#: src/views/environments/list/Environment.vue:150
 msgid "Restart Nginx"
 msgid "Restart Nginx"
 msgstr "Перезапустить Nginx"
 msgstr "Перезапустить Nginx"
 
 
@@ -3824,15 +3850,15 @@ msgstr ""
 "Отзыв сертификата затронет все службы, которые его используют в данный "
 "Отзыв сертификата затронет все службы, которые его используют в данный "
 "момент. Это действие нельзя отменить."
 "момент. Это действие нельзя отменить."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:106
+#: src/views/preference/tabs/AuthSettings.vue:75
 msgid "RP Display Name"
 msgid "RP Display Name"
 msgstr "Отображаемое имя RP"
 msgstr "Отображаемое имя RP"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:112
+#: src/views/preference/tabs/AuthSettings.vue:81
 msgid "RP Origins"
 msgid "RP Origins"
 msgstr "Истоки RP"
 msgstr "Истоки RP"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:100
+#: src/views/preference/tabs/AuthSettings.vue:69
 msgid "RPID"
 msgid "RPID"
 msgstr "RPID"
 msgstr "RPID"
 
 
@@ -3939,6 +3965,10 @@ msgstr "Название модуля поиска"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "Секрет скопирован"
 msgstr "Секрет скопирован"
 
 
+#: src/views/user/UserProfile.vue:175
+msgid "Security Settings"
+msgstr "Настройки безопасности"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 msgid "Security Token"
 msgid "Security Token"
@@ -4014,7 +4044,7 @@ msgstr ""
 "Установите рекурсивные серверы имен, чтобы переопределить системные серверы "
 "Установите рекурсивные серверы имен, чтобы переопределить системные серверы "
 "имен для шага проверки DNS."
 "имен для шага проверки DNS."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:89
+#: src/views/site/components/SiteStatusSelect.vue:116
 msgid "set to maintenance mode"
 msgid "set to maintenance mode"
 msgstr "перевести в режим обслуживания"
 msgstr "перевести в режим обслуживания"
 
 
@@ -4253,13 +4283,11 @@ msgstr ""
 "написать соответствующий конфигурационный файл: "
 "написать соответствующий конфигурационный файл: "
 "https://nginxui.com/guide/nginx-proxy-example.html"
 "https://nginxui.com/guide/nginx-proxy-example.html"
 
 
-#: src/language/curd.ts:51
-#: src/language/curd.ts:55
+#: src/language/curd.ts:51 src/language/curd.ts:55
 msgid "Support single or batch upload of files"
 msgid "Support single or batch upload of files"
 msgstr "Поддержка одиночной или пакетной загрузки файлов"
 msgstr "Поддержка одиночной или пакетной загрузки файлов"
 
 
-#: src/language/curd.ts:52
-#: src/language/curd.ts:56
+#: src/language/curd.ts:52 src/language/curd.ts:56
 msgid "Support uploading entire folders"
 msgid "Support uploading entire folders"
 msgstr "Поддержка загрузки целых папок"
 msgstr "Поддержка загрузки целых папок"
 
 
@@ -4603,12 +4631,12 @@ msgstr ""
 "Это обновит или переустановит интерфейс Nginx на %{nodeNames} до версии "
 "Это обновит или переустановит интерфейс Nginx на %{nodeNames} до версии "
 "%{version}."
 "%{version}."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:123
+#: src/views/preference/tabs/AuthSettings.vue:92
 msgid "Throttle"
 msgid "Throttle"
 msgstr "Ограничение"
 msgstr "Ограничение"
 
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
-#: src/views/preference/tabs/AuthSettings.vue:143
+#: src/views/preference/tabs/AuthSettings.vue:112
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 msgid "Tips"
 msgid "Tips"
 msgstr "Советы"
 msgstr "Советы"
@@ -4621,7 +4649,7 @@ msgstr ""
 "Совет: Вы можете увеличить пропускную способность обработки параллельных "
 "Совет: Вы можете увеличить пропускную способность обработки параллельных "
 "запросов, увеличив worker_processes или worker_connections."
 "запросов, увеличив worker_processes или worker_connections."
 
 
-#: src/views/notification/notificationColumns.tsx:52
+#: src/views/notification/notificationColumns.tsx:58
 msgid "Title"
 msgid "Title"
 msgstr "Заголовок"
 msgstr "Заголовок"
 
 
@@ -4741,6 +4769,14 @@ msgstr "Тип"
 msgid "Unknown"
 msgid "Unknown"
 msgstr "Неизвестно"
 msgstr "Неизвестно"
 
 
+#: src/views/user/UserProfile.vue:218
+msgid "Update Password"
+msgstr "Обновить пароль"
+
+#: src/views/user/UserProfile.vue:142
+msgid "Update Profile"
+msgstr "Обновить профиль"
+
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "Успешно обновлено"
 msgstr "Успешно обновлено"
@@ -4758,8 +4794,8 @@ msgid "Updated at"
 msgstr "Обновлено в"
 msgstr "Обновлено в"
 
 
 #: src/routes/modules/system.ts:33
 #: src/routes/modules/system.ts:33
-#: src/views/environments/list/Environment.vue:107
-#: src/views/environments/list/Environment.vue:99
+#: src/views/environments/list/Environment.vue:100
+#: src/views/environments/list/Environment.vue:108
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "Обновление"
 msgstr "Обновление"
@@ -4785,7 +4821,7 @@ msgstr "Загрузить файлы"
 msgid "Upload Folders"
 msgid "Upload Folders"
 msgstr "Загрузить папки"
 msgstr "Загрузить папки"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:173
+#: src/components/NgxConfigEditor/NgxUpstream.vue:177
 msgid "Upstream Name"
 msgid "Upstream Name"
 msgstr "Имя Upstream"
 msgstr "Имя Upstream"
 
 
@@ -4817,11 +4853,20 @@ msgstr "Пользователь"
 msgid "User banned"
 msgid "User banned"
 msgstr "Пользователь заблокирован"
 msgstr "Пользователь заблокирован"
 
 
+#: src/views/user/UserProfile.vue:62
+msgid "User info updated successfully"
+msgstr "Информация о пользователе успешно обновлена"
+
 #: src/constants/errors/user.ts:8
 #: src/constants/errors/user.ts:8
 msgid "User not enabled otp as 2fa"
 msgid "User not enabled otp as 2fa"
 msgstr "Пользователь не включил OTP в качестве 2FA"
 msgstr "Пользователь не включил OTP в качестве 2FA"
 
 
+#: src/routes/modules/user.ts:19
+msgid "User Profile"
+msgstr "Профиль пользователя"
+
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
+#: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Имя пользователя"
 msgstr "Имя пользователя"
 
 
@@ -4912,7 +4957,7 @@ msgstr ""
 "Мы удалим конфигурацию HTTPChallenge из этого файла и перезагрузим Nginx. "
 "Мы удалим конфигурацию HTTPChallenge из этого файла и перезагрузим Nginx. "
 "Вы уверены, что хотите продолжить?"
 "Вы уверены, что хотите продолжить?"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:96
+#: src/views/preference/tabs/AuthSettings.vue:65
 msgid "Webauthn"
 msgid "Webauthn"
 msgstr "WebAuthn"
 msgstr "WebAuthn"
 
 
@@ -4992,12 +5037,12 @@ msgstr "Запись сертификата на диск"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
-#: src/views/preference/tabs/AuthSettings.vue:162
+#: src/views/preference/tabs/AuthSettings.vue:131
 #: src/views/preference/tabs/CertSettings.vue:72
 #: src/views/preference/tabs/CertSettings.vue:72
 msgid "Yes"
 msgid "Yes"
 msgstr "Да"
 msgstr "Да"
 
 
-#: src/views/terminal/Terminal.vue:135
+#: src/views/terminal/Terminal.vue:132
 msgid ""
 msgid ""
 "You are accessing this terminal over an insecure HTTP connection on a "
 "You are accessing this terminal over an insecure HTTP connection on a "
 "non-localhost domain. This may expose sensitive information."
 "non-localhost domain. This may expose sensitive information."
@@ -5093,9 +5138,6 @@ msgstr "Ваши ключи доступа"
 #~ msgid_plural "Total %{total} items"
 #~ msgid_plural "Total %{total} items"
 #~ msgstr[0] "Всего %{total} элемент"
 #~ msgstr[0] "Всего %{total} элемент"
 
 
-#~ msgid "Updated successfully"
-#~ msgstr "Успешно обновлено"
-
 #~ msgid "View Details"
 #~ msgid "View Details"
 #~ msgstr "Подробно"
 #~ msgstr "Подробно"
 
 

+ 127 - 85
app/src/language/tr_TR/app.po

@@ -104,7 +104,7 @@ msgstr "[Nginx UI] Sertifika diske yazılıyor"
 msgid "2FA"
 msgid "2FA"
 msgstr "İki aşamalı kimlik doğrulaması(2FA)"
 msgstr "İki aşamalı kimlik doğrulaması(2FA)"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:69
+#: src/views/user/UserProfile.vue:151
 msgid "2FA Settings"
 msgid "2FA Settings"
 msgstr "2FA Ayarları"
 msgstr "2FA Ayarları"
 
 
@@ -130,8 +130,7 @@ msgstr "Erişim Günlükleri"
 msgid "ACME User"
 msgid "ACME User"
 msgstr "ACME Kullanıcısı"
 msgstr "ACME Kullanıcısı"
 
 
-#: src/views/notification/notificationColumns.tsx:66
-#: src/views/preference/tabs/AuthSettings.vue:29
+#: src/views/preference/tabs/AuthSettings.vue:26
 msgid "Action"
 msgid "Action"
 msgstr "Eylem"
 msgstr "Eylem"
 
 
@@ -142,9 +141,9 @@ msgstr "Eylem"
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/nginx_log/NginxLogList.vue:52
 #: src/views/nginx_log/NginxLogList.vue:52
+#: src/views/notification/notificationColumns.tsx:72
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
-#: src/views/site/site_list/columns.tsx:129
-#: src/views/stream/columns.tsx:64
+#: src/views/site/site_list/columns.tsx:129 src/views/stream/columns.tsx:64
 #: src/views/user/userColumns.tsx:58
 #: src/views/user/userColumns.tsx:58
 msgid "Actions"
 msgid "Actions"
 msgstr "İşlemler"
 msgstr "İşlemler"
@@ -159,10 +158,10 @@ msgid "Actual worker to configured ratio"
 msgstr "Gerçek çalışanın yapılandırılmışa oranı"
 msgstr "Gerçek çalışanın yapılandırılmışa oranı"
 
 
 #: src/components/NgxConfigEditor/NgxServer.vue:112
 #: src/components/NgxConfigEditor/NgxServer.vue:112
-#: src/components/NgxConfigEditor/NgxUpstream.vue:155 src/language/curd.ts:19
+#: src/components/NgxConfigEditor/NgxUpstream.vue:159 src/language/curd.ts:19
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
-#: src/views/stream/StreamList.vue:120
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "Ekle"
 msgstr "Ekle"
 
 
@@ -189,7 +188,7 @@ msgstr "Konum ekle"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "Site Ekle"
 msgstr "Site Ekle"
 
 
-#: src/views/stream/StreamList.vue:173
+#: src/views/stream/StreamList.vue:174
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "Akış Ekle"
 msgstr "Akış Ekle"
 
 
@@ -247,7 +246,7 @@ msgstr "Uygulama"
 msgid "Arch"
 msgid "Arch"
 msgstr "\"Mimari\""
 msgstr "\"Mimari\""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:161
+#: src/views/preference/tabs/AuthSettings.vue:130
 msgid "Are you sure to delete this banned IP immediately?"
 msgid "Are you sure to delete this banned IP immediately?"
 msgstr "Bu yasaklı IP'yi hemen sileceğinizden emin misiniz?"
 msgstr "Bu yasaklı IP'yi hemen sileceğinizden emin misiniz?"
 
 
@@ -276,8 +275,8 @@ msgstr "Sohbet kaydını silmek istediğinizden emin misiniz?"
 msgid "Are you sure you want to delete permanently?"
 msgid "Are you sure you want to delete permanently?"
 msgstr "Kalıcı olarak silmek istediğinizden emin misiniz?"
 msgstr "Kalıcı olarak silmek istediğinizden emin misiniz?"
 
 
-#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:99
-#: src/views/stream/StreamList.vue:156
+#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:100
+#: src/views/stream/StreamList.vue:157
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "Silmek istediğine emin misin?"
 msgstr "Silmek istediğine emin misin?"
 
 
@@ -321,7 +320,7 @@ msgstr "Asistan"
 msgid "Attempt to fix"
 msgid "Attempt to fix"
 msgstr "Düzeltmeyi dene"
 msgstr "Düzeltmeyi dene"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:20
+#: src/views/preference/tabs/AuthSettings.vue:17
 msgid "Attempts"
 msgid "Attempts"
 msgstr "Girişimler"
 msgstr "Girişimler"
 
 
@@ -333,7 +332,7 @@ msgstr "Kimlik Doğrulama"
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr "Geçiş anahtarıyla kimlik doğrulama"
 msgstr "Geçiş anahtarıyla kimlik doğrulama"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:87
+#: src/views/preference/tabs/AuthSettings.vue:56
 msgid "Authentication Settings"
 msgid "Authentication Settings"
 msgstr "Kimlik Doğrulama Ayarları"
 msgstr "Kimlik Doğrulama Ayarları"
 
 
@@ -408,15 +407,15 @@ msgstr "Yedek dosya bulunamadı: {0}"
 msgid "Backup has been downloaded successfully"
 msgid "Backup has been downloaded successfully"
 msgstr "Yedek başarıyla indirildi"
 msgstr "Yedek başarıyla indirildi"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:128
+#: src/views/preference/tabs/AuthSettings.vue:97
 msgid "Ban Threshold Minutes"
 msgid "Ban Threshold Minutes"
 msgstr "Yasaklama Eşiği Süresi (Dakika)"
 msgstr "Yasaklama Eşiği Süresi (Dakika)"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:149
+#: src/views/preference/tabs/AuthSettings.vue:118
 msgid "Banned IPs"
 msgid "Banned IPs"
 msgstr "Yasaklı IP'ler"
 msgstr "Yasaklı IP'ler"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:23
+#: src/views/preference/tabs/AuthSettings.vue:20
 msgid "Banned Until"
 msgid "Banned Until"
 msgstr "Şu Zamana Kadar Yasaklı"
 msgstr "Şu Zamana Kadar Yasaklı"
 
 
@@ -526,7 +525,7 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
-#: src/views/site/components/SiteStatusSegmented.vue:97
+#: src/views/site/components/SiteStatusSelect.vue:124
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
@@ -645,6 +644,10 @@ msgstr "Doğrulama Yöntemi"
 msgid "Change Certificate"
 msgid "Change Certificate"
 msgstr "Sertifika Değiştir"
 msgstr "Sertifika Değiştir"
 
 
+#: src/views/user/UserProfile.vue:181
+msgid "Change Password"
+msgstr "Şifreyi Değiştir"
+
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 msgid "Changed Certificate"
 msgid "Changed Certificate"
 msgid_plural "Changed Certificates"
 msgid_plural "Changed Certificates"
@@ -816,13 +819,11 @@ msgstr "Başarıyla temizlendi"
 msgid "Click or drag backup file to this area to upload"
 msgid "Click or drag backup file to this area to upload"
 msgstr "Yüklemek için bu alana yedekleme dosyasını tıklayın veya sürükleyin"
 msgstr "Yüklemek için bu alana yedekleme dosyasını tıklayın veya sürükleyin"
 
 
-#: src/language/curd.ts:49
-#: src/language/curd.ts:53
+#: src/language/curd.ts:49 src/language/curd.ts:53
 msgid "Click or drag files to this area to upload"
 msgid "Click or drag files to this area to upload"
 msgstr "Yüklemek için dosyaları bu alana tıklayın veya sürükleyin"
 msgstr "Yüklemek için dosyaları bu alana tıklayın veya sürükleyin"
 
 
-#: src/language/curd.ts:50
-#: src/language/curd.ts:54
+#: src/language/curd.ts:50 src/language/curd.ts:54
 msgid "Click or drag folders to this area to upload"
 msgid "Click or drag folders to this area to upload"
 msgstr "Yüklemek için klasörleri bu alana tıklayın veya sürükleyin"
 msgstr "Yüklemek için klasörleri bu alana tıklayın veya sürükleyin"
 
 
@@ -942,6 +943,10 @@ msgstr "Yapılandırmalar"
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr "SSL'yi Yapılandırma"
 msgstr "SSL'yi Yapılandırma"
 
 
+#: src/views/user/UserProfile.vue:204
+msgid "Confirm New Password"
+msgstr "Yeni Şifreyi Onayla"
+
 #: src/views/dashboard/Environments.vue:141
 #: src/views/dashboard/Environments.vue:141
 msgid "Connected"
 msgid "Connected"
 msgstr "Bağlandı"
 msgstr "Bağlandı"
@@ -950,7 +955,7 @@ msgstr "Bağlandı"
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Bağlantı hatası, yeniden bağlanılmaya çalışılıyor..."
 msgstr "Bağlantı hatası, yeniden bağlanılmaya çalışılıyor..."
 
 
-#: src/views/terminal/Terminal.vue:142
+#: src/views/terminal/Terminal.vue:139
 msgid "Connection lost, please refresh the page."
 msgid "Connection lost, please refresh the page."
 msgstr "Bağlantı kesildi, lütfen sayfayı yenileyin."
 msgstr "Bağlantı kesildi, lütfen sayfayı yenileyin."
 
 
@@ -1008,7 +1013,7 @@ msgstr ""
 msgid "CPU:"
 msgid "CPU:"
 msgstr "CPU:"
 msgstr "CPU:"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:166
+#: src/components/NgxConfigEditor/NgxUpstream.vue:170
 msgid "Create"
 msgid "Create"
 msgstr "Oluştur"
 msgstr "Oluştur"
 
 
@@ -1037,7 +1042,7 @@ msgstr ""
 "oluşturun. Yedek dosyaları otomatik olarak bilgisayarınıza indirilecektir."
 "oluşturun. Yedek dosyaları otomatik olarak bilgisayarınıza indirilecektir."
 
 
 #: src/views/environments/group/columns.ts:29
 #: src/views/environments/group/columns.ts:29
-#: src/views/notification/notificationColumns.tsx:45
+#: src/views/notification/notificationColumns.tsx:51
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/user/userColumns.tsx:46
 #: src/views/user/userColumns.tsx:46
@@ -1076,6 +1081,10 @@ msgstr "Mevcut aktif bağlantılar"
 msgid "Current Content"
 msgid "Current Content"
 msgstr "Mevcut İçerik"
 msgstr "Mevcut İçerik"
 
 
+#: src/views/user/UserProfile.vue:186
+msgid "Current Password"
+msgstr "Mevcut Şifre"
+
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 msgid "Current usage"
 msgid "Current usage"
 msgstr "Mevcut kullanım"
 msgstr "Mevcut kullanım"
@@ -1117,8 +1126,8 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/views/certificate/components/RemoveCert.vue:88
 #: src/views/certificate/components/RemoveCert.vue:88
-#: src/views/site/site_list/SiteList.vue:108
-#: src/views/stream/StreamList.vue:165
+#: src/views/site/site_list/SiteList.vue:109
+#: src/views/stream/StreamList.vue:166
 msgid "Delete"
 msgid "Delete"
 msgstr "Sil"
 msgstr "Sil"
 
 
@@ -1195,7 +1204,7 @@ msgstr "Hedef dosya zaten mevcut"
 msgid "Destination file: {0} already exists"
 msgid "Destination file: {0} already exists"
 msgstr "Hedef dosya: {0} zaten mevcut"
 msgstr "Hedef dosya: {0} zaten mevcut"
 
 
-#: src/views/notification/notificationColumns.tsx:60
+#: src/views/notification/notificationColumns.tsx:66
 msgid "Details"
 msgid "Details"
 msgstr "Detaylar"
 msgstr "Detaylar"
 
 
@@ -1239,11 +1248,11 @@ msgstr "Dizin Seviyeleri"
 msgid "Directory path to store cache files"
 msgid "Directory path to store cache files"
 msgstr "Önbellek dosyalarını depolamak için dizin yolu"
 msgstr "Önbellek dosyalarını depolamak için dizin yolu"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:88
+#: src/views/site/components/SiteStatusSelect.vue:115
 msgid "disable"
 msgid "disable"
 msgstr "Devre dışı bırak"
 msgstr "Devre dışı bırak"
 
 
-#: src/views/stream/StreamList.vue:136
+#: src/views/stream/StreamList.vue:137
 msgid "Disable"
 msgid "Disable"
 msgstr "Devre Dışı Bırak"
 msgstr "Devre Dışı Bırak"
 
 
@@ -1304,7 +1313,7 @@ msgstr "Akış %{name}, %{node} üzerinden başarıyla devre dışı bırakıld
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:134
+#: src/views/site/components/SiteStatusSelect.vue:162
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/stream/components/StreamEditor.vue:30
 #: src/views/stream/components/StreamEditor.vue:30
@@ -1312,7 +1321,7 @@ msgstr "Akış %{name}, %{node} üzerinden başarıyla devre dışı bırakıld
 msgid "Disabled"
 msgid "Disabled"
 msgstr "Devre dışı"
 msgstr "Devre dışı"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:40
+#: src/views/site/components/SiteStatusSelect.vue:67
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/StreamList.vue:56
 #: src/views/stream/StreamList.vue:56
 msgid "Disabled successfully"
 msgid "Disabled successfully"
@@ -1340,7 +1349,7 @@ msgstr "DNS01"
 msgid "Do not enable this option unless you are sure that you need it."
 msgid "Do not enable this option unless you are sure that you need it."
 msgstr "Bu seçeneği, ihtiyacınız olduğundan emin olmadıkça etkinleştirmeyin."
 msgstr "Bu seçeneği, ihtiyacınız olduğundan emin olmadıkça etkinleştirmeyin."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:93
+#: src/views/site/components/SiteStatusSelect.vue:120
 msgid "Do you want to %{action} this site?"
 msgid "Do you want to %{action} this site?"
 msgstr "Bu siteyi %{action} etmek istiyor musunuz?"
 msgstr "Bu siteyi %{action} etmek istiyor musunuz?"
 
 
@@ -1420,9 +1429,9 @@ msgstr ""
 "kullanamazsınız."
 "kullanamazsınız."
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:94
+#: src/views/site/site_list/SiteList.vue:95
 #: src/views/stream/components/StreamDuplicate.vue:64
 #: src/views/stream/components/StreamDuplicate.vue:64
-#: src/views/stream/StreamList.vue:151
+#: src/views/stream/StreamList.vue:152
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "Kopyala"
 msgstr "Kopyala"
 
 
@@ -1466,11 +1475,11 @@ msgstr "E-posta"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "E-posta(*)"
 msgstr "E-posta(*)"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:87
+#: src/views/site/components/SiteStatusSelect.vue:114
 msgid "enable"
 msgid "enable"
 msgstr "etkinleştir"
 msgstr "etkinleştir"
 
 
-#: src/views/stream/StreamList.vue:144
+#: src/views/stream/StreamList.vue:145
 msgid "Enable"
 msgid "Enable"
 msgstr "Etkinleştir"
 msgstr "Etkinleştir"
 
 
@@ -1568,7 +1577,7 @@ msgstr "TOTP'yi Etkinleştir"
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:130
+#: src/views/site/components/SiteStatusSelect.vue:159
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/stream/components/RightPanel/Basic.vue:62
 #: src/views/stream/components/RightPanel/Basic.vue:62
@@ -1577,7 +1586,7 @@ msgstr "TOTP'yi Etkinleştir"
 msgid "Enabled"
 msgid "Enabled"
 msgstr "Etkin"
 msgstr "Etkin"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:27
+#: src/views/site/components/SiteStatusSelect.vue:54
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/StreamList.vue:46
 #: src/views/stream/StreamList.vue:46
@@ -1786,23 +1795,23 @@ msgstr "Sertifika silinemedi"
 msgid "Failed to delete certificate from database: %{error}"
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "Sertifika veritabanından silinemedi: %{error}"
 msgstr "Sertifika veritabanından silinemedi: %{error}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:46
+#: src/views/site/components/SiteStatusSelect.vue:73
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/StreamList.vue:60
 #: src/views/stream/StreamList.vue:60
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "Devre dışı bırakılamadı %{msg}"
 msgstr "Devre dışı bırakılamadı %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:72
+#: src/views/site/components/SiteStatusSelect.vue:99
 msgid "Failed to disable maintenance mode %{msg}"
 msgid "Failed to disable maintenance mode %{msg}"
 msgstr "Bakım modu devre dışı bırakılamadı: %{msg}"
 msgstr "Bakım modu devre dışı bırakılamadı: %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:33
+#: src/views/site/components/SiteStatusSelect.vue:60
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/StreamList.vue:50
 #: src/views/stream/StreamList.vue:50
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:59
+#: src/views/site/components/SiteStatusSelect.vue:86
 msgid "Failed to enable maintenance mode %{msg}"
 msgid "Failed to enable maintenance mode %{msg}"
 msgstr "Bakım modu etkinleştirilemedi: %{msg}"
 msgstr "Bakım modu etkinleştirilemedi: %{msg}"
 
 
@@ -2115,7 +2124,7 @@ msgstr "ICP Numarası"
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr "Boş bırakılırsa, varsayılan CA Dir kullanılır."
 msgstr "Boş bırakılırsa, varsayılan CA Dir kullanılır."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:144
+#: src/views/preference/tabs/AuthSettings.vue:113
 msgid ""
 msgid ""
 "If the number of login failed attempts from a ip reach the max attempts in "
 "If the number of login failed attempts from a ip reach the max attempts in "
 "ban threshold minutes, the ip will be banned for a period of time."
 "ban threshold minutes, the ip will be banned for a period of time."
@@ -2287,7 +2296,7 @@ msgstr "Geçersiz istek biçimi"
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "Geçersiz güvenlik belirteci biçimi"
 msgstr "Geçersiz güvenlik belirteci biçimi"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:17
+#: src/views/preference/tabs/AuthSettings.vue:14
 msgid "IP"
 msgid "IP"
 msgstr "IP"
 msgstr "IP"
 
 
@@ -2402,7 +2411,7 @@ msgstr "Liste"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "Yük Ortalaması:"
 msgstr "Yük Ortalaması:"
 
 
-#: src/views/environments/list/Environment.vue:80
+#: src/views/environments/list/Environment.vue:81
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "Ayarlar'dan yükle"
 msgstr "Ayarlar'dan yükle"
 
 
@@ -2499,17 +2508,17 @@ msgstr ""
 "olarak etkinleştirebilir. Nginx UI'nin crontab görev zamanlayıcısı, "
 "olarak etkinleştirebilir. Nginx UI'nin crontab görev zamanlayıcısı, "
 "belirlediğiniz dakika aralığında logrotate komutunu çalıştıracaktır."
 "belirlediğiniz dakika aralığında logrotate komutunu çalıştıracaktır."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:138
+#: src/views/site/components/SiteStatusSelect.vue:165
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_list/columns.tsx:118
 #: src/views/site/site_list/columns.tsx:118
 msgid "Maintenance"
 msgid "Maintenance"
 msgstr "Bakım"
 msgstr "Bakım"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:66
+#: src/views/site/components/SiteStatusSelect.vue:93
 msgid "Maintenance mode disabled successfully"
 msgid "Maintenance mode disabled successfully"
 msgstr "Bakım modu başarıyla devre dışı bırakıldı"
 msgstr "Bakım modu başarıyla devre dışı bırakıldı"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:53
+#: src/views/site/components/SiteStatusSelect.vue:80
 msgid "Maintenance mode enabled successfully"
 msgid "Maintenance mode enabled successfully"
 msgstr "Bakım modu başarıyla etkinleştirildi"
 msgstr "Bakım modu başarıyla etkinleştirildi"
 
 
@@ -2576,7 +2585,7 @@ msgstr "Ana süreç"
 msgid "Master Process"
 msgid "Master Process"
 msgstr "Ana Süreç"
 msgstr "Ana Süreç"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:134
+#: src/views/preference/tabs/AuthSettings.vue:103
 msgid "Max Attempts"
 msgid "Max Attempts"
 msgstr "Maksimum Deneme Sayısı"
 msgstr "Maksimum Deneme Sayısı"
 
 
@@ -2675,7 +2684,7 @@ msgstr "Modüller"
 msgid "Multi-line Directive"
 msgid "Multi-line Directive"
 msgstr "Çok Satırlı Yönergeler"
 msgstr "Çok Satırlı Yönergeler"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:178
+#: src/components/NgxConfigEditor/NgxUpstream.vue:182
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateList/certColumns.tsx:9
 #: src/views/certificate/CertificateList/certColumns.tsx:9
@@ -2692,7 +2701,7 @@ msgstr "Çok Satırlı Yönergeler"
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/StreamDuplicate.vue:71
 #: src/views/stream/components/StreamDuplicate.vue:71
-#: src/views/stream/StreamList.vue:178
+#: src/views/stream/StreamList.vue:179
 msgid "Name"
 msgid "Name"
 msgstr "İsim"
 msgstr "İsim"
 
 
@@ -2724,6 +2733,10 @@ msgstr "Yeni Kurulum"
 msgid "New name"
 msgid "New name"
 msgstr "Yeni ad"
 msgstr "Yeni ad"
 
 
+#: src/views/user/UserProfile.vue:195
+msgid "New Password"
+msgstr "Yeni Şifre"
+
 #: src/views/config/ConfigEditor.vue:328
 #: src/views/config/ConfigEditor.vue:328
 msgid "New Path"
 msgid "New Path"
 msgstr "Yeni Yol"
 msgstr "Yeni Yol"
@@ -2939,9 +2952,9 @@ msgstr "Nginx.conf, streams-enabled dizinini içerir"
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
-#: src/views/preference/tabs/AuthSettings.vue:163
+#: src/views/preference/tabs/AuthSettings.vue:132
 #: src/views/preference/tabs/CertSettings.vue:73
 #: src/views/preference/tabs/CertSettings.vue:73
-#: src/views/site/site_list/SiteList.vue:97 src/views/stream/StreamList.vue:154
+#: src/views/site/site_list/SiteList.vue:98 src/views/stream/StreamList.vue:155
 msgid "No"
 msgid "No"
 msgstr "Hayır"
 msgstr "Hayır"
 
 
@@ -3076,6 +3089,7 @@ msgid "Off"
 msgstr "Kapalı"
 msgstr "Kapalı"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/components/NgxConfigEditor/NgxUpstream.vue:145
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3087,13 +3101,13 @@ msgstr "Çevrimdışı"
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/views/notification/Notification.vue:39
 #: src/views/notification/Notification.vue:39
-#: src/views/site/components/SiteStatusSegmented.vue:96
+#: src/views/site/components/SiteStatusSelect.vue:123
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
-#: src/views/site/site_list/SiteList.vue:98
+#: src/views/site/site_list/SiteList.vue:99
 #: src/views/stream/components/RightPanel/Basic.vue:46
 #: src/views/stream/components/RightPanel/Basic.vue:46
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:156
 #: src/views/system/Backup/BackupCreator.vue:149
 #: src/views/system/Backup/BackupCreator.vue:149
 msgid "OK"
 msgid "OK"
 msgstr "Tamam"
 msgstr "Tamam"
@@ -3212,6 +3226,14 @@ msgstr "Yanlış şifre"
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr "Şifre uzunluğu 20 karakteri geçemez"
 msgstr "Şifre uzunluğu 20 karakteri geçemez"
 
 
+#: src/views/user/UserProfile.vue:96
+msgid "Password updated successfully"
+msgstr "Şifre başarıyla güncellendi"
+
+#: src/views/user/UserProfile.vue:75
+msgid "Passwords do not match"
+msgstr "Şifreler eşleşmiyor"
+
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
@@ -3251,6 +3273,10 @@ msgstr "Performans ayarları başarıyla kaydedildi"
 msgid "Performing core upgrade"
 msgid "Performing core upgrade"
 msgstr "Çekirdek yükseltme gerçekleştiriliyor"
 msgstr "Çekirdek yükseltme gerçekleştiriliyor"
 
 
+#: src/views/user/UserProfile.vue:121
+msgid "Personal Information"
+msgstr "Kişisel Bilgiler"
+
 #: src/constants/errors/self_check.ts:19
 #: src/constants/errors/self_check.ts:19
 msgid "PID path not exist"
 msgid "PID path not exist"
 msgstr "PID yolu mevcut değil"
 msgstr "PID yolu mevcut değil"
@@ -3382,17 +3408,17 @@ msgstr "Lütfen bir yedekleme dosyası seçin"
 msgid "Please select at least one item"
 msgid "Please select at least one item"
 msgstr "Lütfen en az bir öğe seçin"
 msgstr "Lütfen en az bir öğe seçin"
 
 
-#: src/views/environments/list/Environment.vue:112
+#: src/views/environments/list/Environment.vue:113
 #: src/views/environments/list/Environment.vue:35
 #: src/views/environments/list/Environment.vue:35
 msgid "Please select at least one node to reload Nginx"
 msgid "Please select at least one node to reload Nginx"
 msgstr "Lütfen Nginx'i yeniden yüklemek için en az bir düğüm seçin"
 msgstr "Lütfen Nginx'i yeniden yüklemek için en az bir düğüm seçin"
 
 
-#: src/views/environments/list/Environment.vue:133
+#: src/views/environments/list/Environment.vue:134
 #: src/views/environments/list/Environment.vue:49
 #: src/views/environments/list/Environment.vue:49
 msgid "Please select at least one node to restart Nginx"
 msgid "Please select at least one node to restart Nginx"
 msgstr "Lütfen Nginx'i yeniden başlatmak için en az bir düğüm seçin"
 msgstr "Lütfen Nginx'i yeniden başlatmak için en az bir düğüm seçin"
 
 
-#: src/views/environments/list/Environment.vue:91
+#: src/views/environments/list/Environment.vue:92
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "Lütfen yükseltmek için en az bir düğüm seçin"
 msgstr "Lütfen yükseltmek için en az bir düğüm seçin"
 
 
@@ -3558,8 +3584,8 @@ msgstr "Yeniden Yükle"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/EnvGroup.vue:50
 #: src/views/environments/group/EnvGroup.vue:50
-#: src/views/environments/list/Environment.vue:120
-#: src/views/environments/list/Environment.vue:128
+#: src/views/environments/list/Environment.vue:121
+#: src/views/environments/list/Environment.vue:129
 msgid "Reload Nginx"
 msgid "Reload Nginx"
 msgstr "Nginx'i Yeniden Yükle"
 msgstr "Nginx'i Yeniden Yükle"
 
 
@@ -3595,12 +3621,12 @@ msgstr "Yeniden Yükleniyor"
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr "nginx yeniden yükleniyor"
 msgstr "nginx yeniden yükleniyor"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:168
+#: src/views/preference/tabs/AuthSettings.vue:137
 msgid "Remove"
 msgid "Remove"
 msgstr "Kaldır"
 msgstr "Kaldır"
 
 
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
-#: src/views/preference/tabs/AuthSettings.vue:50
+#: src/views/preference/tabs/AuthSettings.vue:47
 msgid "Remove successfully"
 msgid "Remove successfully"
 msgstr "Başarıyla kaldırıldı"
 msgstr "Başarıyla kaldırıldı"
 
 
@@ -3748,8 +3774,8 @@ msgid "Restart"
 msgstr "Yeniden Başlat"
 msgstr "Yeniden Başlat"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
-#: src/views/environments/list/Environment.vue:141
-#: src/views/environments/list/Environment.vue:149
+#: src/views/environments/list/Environment.vue:142
+#: src/views/environments/list/Environment.vue:150
 msgid "Restart Nginx"
 msgid "Restart Nginx"
 msgstr "Nginx'i Yeniden Başlat"
 msgstr "Nginx'i Yeniden Başlat"
 
 
@@ -3829,15 +3855,15 @@ msgstr ""
 "Bir sertifikanın iptal edilmesi, şu anda onu kullanan tüm hizmetleri "
 "Bir sertifikanın iptal edilmesi, şu anda onu kullanan tüm hizmetleri "
 "etkileyecektir. Bu işlem geri alınamaz."
 "etkileyecektir. Bu işlem geri alınamaz."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:106
+#: src/views/preference/tabs/AuthSettings.vue:75
 msgid "RP Display Name"
 msgid "RP Display Name"
 msgstr "RP Görünen Adı"
 msgstr "RP Görünen Adı"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:112
+#: src/views/preference/tabs/AuthSettings.vue:81
 msgid "RP Origins"
 msgid "RP Origins"
 msgstr "RP Kökenleri"
 msgstr "RP Kökenleri"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:100
+#: src/views/preference/tabs/AuthSettings.vue:69
 msgid "RPID"
 msgid "RPID"
 msgstr "RPID"
 msgstr "RPID"
 
 
@@ -3942,6 +3968,10 @@ msgstr "Modül adı ara"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "Gizli kod kopyalandı"
 msgstr "Gizli kod kopyalandı"
 
 
+#: src/views/user/UserProfile.vue:175
+msgid "Security Settings"
+msgstr "Güvenlik Ayarları"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 msgid "Security Token"
 msgid "Security Token"
@@ -4017,7 +4047,7 @@ msgstr ""
 "DNS sorgulama adımında sistem ad sunucularını geçersiz kılmak için "
 "DNS sorgulama adımında sistem ad sunucularını geçersiz kılmak için "
 "özyinelemeli ad sunucularını ayarlayın."
 "özyinelemeli ad sunucularını ayarlayın."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:89
+#: src/views/site/components/SiteStatusSelect.vue:116
 msgid "set to maintenance mode"
 msgid "set to maintenance mode"
 msgstr "bakım moduna ayarla"
 msgstr "bakım moduna ayarla"
 
 
@@ -4256,13 +4286,11 @@ msgstr ""
 "dosyasını yazmak için bu bağlantıya bakın: "
 "dosyasını yazmak için bu bağlantıya bakın: "
 "https://nginxui.com/guide/nginx-proxy-example.html"
 "https://nginxui.com/guide/nginx-proxy-example.html"
 
 
-#: src/language/curd.ts:51
-#: src/language/curd.ts:55
+#: src/language/curd.ts:51 src/language/curd.ts:55
 msgid "Support single or batch upload of files"
 msgid "Support single or batch upload of files"
 msgstr "Tek veya toplu dosya yüklemeyi destekler"
 msgstr "Tek veya toplu dosya yüklemeyi destekler"
 
 
-#: src/language/curd.ts:52
-#: src/language/curd.ts:56
+#: src/language/curd.ts:52 src/language/curd.ts:56
 msgid "Support uploading entire folders"
 msgid "Support uploading entire folders"
 msgstr "Tüm klasörlerin yüklenmesini destekler"
 msgstr "Tüm klasörlerin yüklenmesini destekler"
 
 
@@ -4607,12 +4635,12 @@ msgstr ""
 "Bu işlem, %{nodeNames} üzerindeki Nginx UI'yi %{version} sürümüne "
 "Bu işlem, %{nodeNames} üzerindeki Nginx UI'yi %{version} sürümüne "
 "yükseltecek veya yeniden yükleyecektir."
 "yükseltecek veya yeniden yükleyecektir."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:123
+#: src/views/preference/tabs/AuthSettings.vue:92
 msgid "Throttle"
 msgid "Throttle"
 msgstr "Kısıtlama"
 msgstr "Kısıtlama"
 
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
-#: src/views/preference/tabs/AuthSettings.vue:143
+#: src/views/preference/tabs/AuthSettings.vue:112
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 msgid "Tips"
 msgid "Tips"
 msgstr "İpuçları"
 msgstr "İpuçları"
@@ -4625,7 +4653,7 @@ msgstr ""
 "İpucu: worker_processes veya worker_connections değerlerini artırarak "
 "İpucu: worker_processes veya worker_connections değerlerini artırarak "
 "eşzamanlı işleme kapasitesini artırabilirsiniz."
 "eşzamanlı işleme kapasitesini artırabilirsiniz."
 
 
-#: src/views/notification/notificationColumns.tsx:52
+#: src/views/notification/notificationColumns.tsx:58
 msgid "Title"
 msgid "Title"
 msgstr "Başlık"
 msgstr "Başlık"
 
 
@@ -4745,6 +4773,14 @@ msgstr "Tür"
 msgid "Unknown"
 msgid "Unknown"
 msgstr "Bilinmeyen"
 msgstr "Bilinmeyen"
 
 
+#: src/views/user/UserProfile.vue:218
+msgid "Update Password"
+msgstr "Şifreyi Güncelle"
+
+#: src/views/user/UserProfile.vue:142
+msgid "Update Profile"
+msgstr "Profili Güncelle"
+
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "Başarıyla güncellendi"
 msgstr "Başarıyla güncellendi"
@@ -4762,8 +4798,8 @@ msgid "Updated at"
 msgstr "Güncellenme Tarihi"
 msgstr "Güncellenme Tarihi"
 
 
 #: src/routes/modules/system.ts:33
 #: src/routes/modules/system.ts:33
-#: src/views/environments/list/Environment.vue:107
-#: src/views/environments/list/Environment.vue:99
+#: src/views/environments/list/Environment.vue:100
+#: src/views/environments/list/Environment.vue:108
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "Yükselt"
 msgstr "Yükselt"
@@ -4789,7 +4825,7 @@ msgstr "Dosyaları Yükle"
 msgid "Upload Folders"
 msgid "Upload Folders"
 msgstr "Klasörleri Yükle"
 msgstr "Klasörleri Yükle"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:173
+#: src/components/NgxConfigEditor/NgxUpstream.vue:177
 msgid "Upstream Name"
 msgid "Upstream Name"
 msgstr "Yukarı Akış Adı"
 msgstr "Yukarı Akış Adı"
 
 
@@ -4821,11 +4857,20 @@ msgstr "Kullanıcı"
 msgid "User banned"
 msgid "User banned"
 msgstr "Kullanıcı yasaklandı"
 msgstr "Kullanıcı yasaklandı"
 
 
+#: src/views/user/UserProfile.vue:62
+msgid "User info updated successfully"
+msgstr "Kullanıcı bilgileri başarıyla güncellendi"
+
 #: src/constants/errors/user.ts:8
 #: src/constants/errors/user.ts:8
 msgid "User not enabled otp as 2fa"
 msgid "User not enabled otp as 2fa"
 msgstr "Kullanıcı OTP'yi 2FA olarak etkinleştirmedi"
 msgstr "Kullanıcı OTP'yi 2FA olarak etkinleştirmedi"
 
 
+#: src/routes/modules/user.ts:19
+msgid "User Profile"
+msgstr "Kullanıcı Profili"
+
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
+#: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Kullanıcı Adı"
 msgstr "Kullanıcı Adı"
 
 
@@ -4916,7 +4961,7 @@ msgstr ""
 "Bu dosyadan HTTPChallenge yapılandırmasını kaldıracağız ve Nginx'i yeniden "
 "Bu dosyadan HTTPChallenge yapılandırmasını kaldıracağız ve Nginx'i yeniden "
 "yükleyeceğiz. Devam etmek istediğinizden emin misiniz?"
 "yükleyeceğiz. Devam etmek istediğinizden emin misiniz?"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:96
+#: src/views/preference/tabs/AuthSettings.vue:65
 msgid "Webauthn"
 msgid "Webauthn"
 msgstr "WebAuthn"
 msgstr "WebAuthn"
 
 
@@ -4997,12 +5042,12 @@ msgstr "Sertifika diske yazılıyor"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
-#: src/views/preference/tabs/AuthSettings.vue:162
+#: src/views/preference/tabs/AuthSettings.vue:131
 #: src/views/preference/tabs/CertSettings.vue:72
 #: src/views/preference/tabs/CertSettings.vue:72
 msgid "Yes"
 msgid "Yes"
 msgstr "Evet"
 msgstr "Evet"
 
 
-#: src/views/terminal/Terminal.vue:135
+#: src/views/terminal/Terminal.vue:132
 msgid ""
 msgid ""
 "You are accessing this terminal over an insecure HTTP connection on a "
 "You are accessing this terminal over an insecure HTTP connection on a "
 "non-localhost domain. This may expose sensitive information."
 "non-localhost domain. This may expose sensitive information."
@@ -5099,9 +5144,6 @@ msgstr "Geçiş Anahtarlarınız"
 #~ msgid_plural "Total %{total} items"
 #~ msgid_plural "Total %{total} items"
 #~ msgstr[0] "Toplam %{total} öğe"
 #~ msgstr[0] "Toplam %{total} öğe"
 
 
-#~ msgid "Updated successfully"
-#~ msgstr "Başarıyla güncellendi"
-
 #~ msgid "View Details"
 #~ msgid "View Details"
 #~ msgstr "Detayları Görüntüle"
 #~ msgstr "Detayları Görüntüle"
 
 

+ 127 - 85
app/src/language/uk_UA/app.po

@@ -108,7 +108,7 @@ msgstr "[Nginx UI] Запис сертифіката на диск"
 msgid "2FA"
 msgid "2FA"
 msgstr "2FA"
 msgstr "2FA"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:69
+#: src/views/user/UserProfile.vue:151
 msgid "2FA Settings"
 msgid "2FA Settings"
 msgstr "2FA Налаштування"
 msgstr "2FA Налаштування"
 
 
@@ -134,8 +134,7 @@ msgstr "Логи доступу"
 msgid "ACME User"
 msgid "ACME User"
 msgstr "ACME Логін"
 msgstr "ACME Логін"
 
 
-#: src/views/notification/notificationColumns.tsx:66
-#: src/views/preference/tabs/AuthSettings.vue:29
+#: src/views/preference/tabs/AuthSettings.vue:26
 msgid "Action"
 msgid "Action"
 msgstr "Дія"
 msgstr "Дія"
 
 
@@ -146,9 +145,9 @@ msgstr "Дія"
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/nginx_log/NginxLogList.vue:52
 #: src/views/nginx_log/NginxLogList.vue:52
+#: src/views/notification/notificationColumns.tsx:72
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
-#: src/views/site/site_list/columns.tsx:129
-#: src/views/stream/columns.tsx:64
+#: src/views/site/site_list/columns.tsx:129 src/views/stream/columns.tsx:64
 #: src/views/user/userColumns.tsx:58
 #: src/views/user/userColumns.tsx:58
 msgid "Actions"
 msgid "Actions"
 msgstr "Дії"
 msgstr "Дії"
@@ -163,10 +162,10 @@ msgid "Actual worker to configured ratio"
 msgstr "Фактичне співвідношення робочих до налаштованих"
 msgstr "Фактичне співвідношення робочих до налаштованих"
 
 
 #: src/components/NgxConfigEditor/NgxServer.vue:112
 #: src/components/NgxConfigEditor/NgxServer.vue:112
-#: src/components/NgxConfigEditor/NgxUpstream.vue:155 src/language/curd.ts:19
+#: src/components/NgxConfigEditor/NgxUpstream.vue:159 src/language/curd.ts:19
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
-#: src/views/stream/StreamList.vue:120
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "Додати"
 msgstr "Додати"
 
 
@@ -193,7 +192,7 @@ msgstr "Додати локацію"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "Додати сайт"
 msgstr "Додати сайт"
 
 
-#: src/views/stream/StreamList.vue:173
+#: src/views/stream/StreamList.vue:174
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "Додати стрім"
 msgstr "Додати стрім"
 
 
@@ -251,7 +250,7 @@ msgstr "Додаток"
 msgid "Arch"
 msgid "Arch"
 msgstr "\"Архітектура\""
 msgstr "\"Архітектура\""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:161
+#: src/views/preference/tabs/AuthSettings.vue:130
 msgid "Are you sure to delete this banned IP immediately?"
 msgid "Are you sure to delete this banned IP immediately?"
 msgstr "Ви впевнені, що хочите видалити цю заборонену IP-адресу?"
 msgstr "Ви впевнені, що хочите видалити цю заборонену IP-адресу?"
 
 
@@ -280,8 +279,8 @@ msgstr "Ви впевнені, що бажаєте очистити запис 
 msgid "Are you sure you want to delete permanently?"
 msgid "Are you sure you want to delete permanently?"
 msgstr "Ви впевнені, що хочете видалити назавжди?"
 msgstr "Ви впевнені, що хочете видалити назавжди?"
 
 
-#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:99
-#: src/views/stream/StreamList.vue:156
+#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:100
+#: src/views/stream/StreamList.vue:157
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "Ви впевнені, що хочете видалити?"
 msgstr "Ви впевнені, що хочете видалити?"
 
 
@@ -325,7 +324,7 @@ msgstr "Помічник"
 msgid "Attempt to fix"
 msgid "Attempt to fix"
 msgstr "Спробувати виправити"
 msgstr "Спробувати виправити"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:20
+#: src/views/preference/tabs/AuthSettings.vue:17
 msgid "Attempts"
 msgid "Attempts"
 msgstr "Спроби"
 msgstr "Спроби"
 
 
@@ -337,7 +336,7 @@ msgstr "Авторизація"
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr "Автентифікація пасоком"
 msgstr "Автентифікація пасоком"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:87
+#: src/views/preference/tabs/AuthSettings.vue:56
 msgid "Authentication Settings"
 msgid "Authentication Settings"
 msgstr "Налаштування аутентифікації"
 msgstr "Налаштування аутентифікації"
 
 
@@ -412,15 +411,15 @@ msgstr "Файл резервної копії не знайдено: {0}"
 msgid "Backup has been downloaded successfully"
 msgid "Backup has been downloaded successfully"
 msgstr "Резервну копію успішно завантажено"
 msgstr "Резервну копію успішно завантажено"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:128
+#: src/views/preference/tabs/AuthSettings.vue:97
 msgid "Ban Threshold Minutes"
 msgid "Ban Threshold Minutes"
 msgstr "Хвилини до блокування"
 msgstr "Хвилини до блокування"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:149
+#: src/views/preference/tabs/AuthSettings.vue:118
 msgid "Banned IPs"
 msgid "Banned IPs"
 msgstr "Заблоковані IP-адреси"
 msgstr "Заблоковані IP-адреси"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:23
+#: src/views/preference/tabs/AuthSettings.vue:20
 msgid "Banned Until"
 msgid "Banned Until"
 msgstr "Заблоковано до"
 msgstr "Заблоковано до"
 
 
@@ -531,7 +530,7 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
-#: src/views/site/components/SiteStatusSegmented.vue:97
+#: src/views/site/components/SiteStatusSelect.vue:124
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
@@ -649,6 +648,10 @@ msgstr "Метод перевірки"
 msgid "Change Certificate"
 msgid "Change Certificate"
 msgstr "Змінити сертифікат"
 msgstr "Змінити сертифікат"
 
 
+#: src/views/user/UserProfile.vue:181
+msgid "Change Password"
+msgstr "Змінити пароль"
+
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 msgid "Changed Certificate"
 msgid "Changed Certificate"
 msgid_plural "Changed Certificates"
 msgid_plural "Changed Certificates"
@@ -815,13 +818,11 @@ msgstr ""
 "Клацніть або перетягніть файл резервного копіювання в цю область, щоб "
 "Клацніть або перетягніть файл резервного копіювання в цю область, щоб "
 "завантажити"
 "завантажити"
 
 
-#: src/language/curd.ts:49
-#: src/language/curd.ts:53
+#: src/language/curd.ts:49 src/language/curd.ts:53
 msgid "Click or drag files to this area to upload"
 msgid "Click or drag files to this area to upload"
 msgstr "Натисніть або перетягніть файли в цю область для завантаження"
 msgstr "Натисніть або перетягніть файли в цю область для завантаження"
 
 
-#: src/language/curd.ts:50
-#: src/language/curd.ts:54
+#: src/language/curd.ts:50 src/language/curd.ts:54
 msgid "Click or drag folders to this area to upload"
 msgid "Click or drag folders to this area to upload"
 msgstr "Натисніть або перетягніть папки в цю область для завантаження"
 msgstr "Натисніть або перетягніть папки в цю область для завантаження"
 
 
@@ -941,6 +942,10 @@ msgstr "Конфігурації"
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr "Налаштувати SSL"
 msgstr "Налаштувати SSL"
 
 
+#: src/views/user/UserProfile.vue:204
+msgid "Confirm New Password"
+msgstr "Підтвердити новий пароль"
+
 #: src/views/dashboard/Environments.vue:141
 #: src/views/dashboard/Environments.vue:141
 msgid "Connected"
 msgid "Connected"
 msgstr "Підключено"
 msgstr "Підключено"
@@ -949,7 +954,7 @@ msgstr "Підключено"
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Помилка з'єднання, спроба повторного підключення..."
 msgstr "Помилка з'єднання, спроба повторного підключення..."
 
 
-#: src/views/terminal/Terminal.vue:142
+#: src/views/terminal/Terminal.vue:139
 msgid "Connection lost, please refresh the page."
 msgid "Connection lost, please refresh the page."
 msgstr "З'єднання, будь ласка, оновіть сторінку."
 msgstr "З'єднання, будь ласка, оновіть сторінку."
 
 
@@ -1007,7 +1012,7 @@ msgstr ""
 msgid "CPU:"
 msgid "CPU:"
 msgstr "CPU:"
 msgstr "CPU:"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:166
+#: src/components/NgxConfigEditor/NgxUpstream.vue:170
 msgid "Create"
 msgid "Create"
 msgstr "Створити"
 msgstr "Створити"
 
 
@@ -1037,7 +1042,7 @@ msgstr ""
 "комп’ютер."
 "комп’ютер."
 
 
 #: src/views/environments/group/columns.ts:29
 #: src/views/environments/group/columns.ts:29
-#: src/views/notification/notificationColumns.tsx:45
+#: src/views/notification/notificationColumns.tsx:51
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/user/userColumns.tsx:46
 #: src/views/user/userColumns.tsx:46
@@ -1112,6 +1117,10 @@ msgstr ""
 "  - Без будь-яких пояснень, коментарів чи іншого тексту\n"
 "  - Без будь-яких пояснень, коментарів чи іншого тексту\n"
 "  - Чисте форматування"
 "  - Чисте форматування"
 
 
+#: src/views/user/UserProfile.vue:186
+msgid "Current Password"
+msgstr "Поточний пароль"
+
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 msgid "Current usage"
 msgid "Current usage"
 msgstr "Поточне використання"
 msgstr "Поточне використання"
@@ -1151,8 +1160,8 @@ msgstr "Вкажіть назву та розмір зони спільної п
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/views/certificate/components/RemoveCert.vue:88
 #: src/views/certificate/components/RemoveCert.vue:88
-#: src/views/site/site_list/SiteList.vue:108
-#: src/views/stream/StreamList.vue:165
+#: src/views/site/site_list/SiteList.vue:109
+#: src/views/stream/StreamList.vue:166
 msgid "Delete"
 msgid "Delete"
 msgstr "Видалити"
 msgstr "Видалити"
 
 
@@ -1265,7 +1274,7 @@ msgstr "Файл призначення вже існує"
 msgid "Destination file: {0} already exists"
 msgid "Destination file: {0} already exists"
 msgstr "Файл призначення: {0} вже існує"
 msgstr "Файл призначення: {0} вже існує"
 
 
-#: src/views/notification/notificationColumns.tsx:60
+#: src/views/notification/notificationColumns.tsx:66
 msgid "Details"
 msgid "Details"
 msgstr "Деталі"
 msgstr "Деталі"
 
 
@@ -1309,11 +1318,11 @@ msgstr "Рівні каталогу"
 msgid "Directory path to store cache files"
 msgid "Directory path to store cache files"
 msgstr "Шлях до каталогу для зберігання файлів кешу"
 msgstr "Шлях до каталогу для зберігання файлів кешу"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:88
+#: src/views/site/components/SiteStatusSelect.vue:115
 msgid "disable"
 msgid "disable"
 msgstr "Вимкнути"
 msgstr "Вимкнути"
 
 
-#: src/views/stream/StreamList.vue:136
+#: src/views/stream/StreamList.vue:137
 msgid "Disable"
 msgid "Disable"
 msgstr "Вимкнути"
 msgstr "Вимкнути"
 
 
@@ -1374,7 +1383,7 @@ msgstr "Потік %{name} успішно вимкнено з %{node}"
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:134
+#: src/views/site/components/SiteStatusSelect.vue:162
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/stream/components/StreamEditor.vue:30
 #: src/views/stream/components/StreamEditor.vue:30
@@ -1382,7 +1391,7 @@ msgstr "Потік %{name} успішно вимкнено з %{node}"
 msgid "Disabled"
 msgid "Disabled"
 msgstr "Вимкнено"
 msgstr "Вимкнено"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:40
+#: src/views/site/components/SiteStatusSelect.vue:67
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/StreamList.vue:56
 #: src/views/stream/StreamList.vue:56
 msgid "Disabled successfully"
 msgid "Disabled successfully"
@@ -1410,7 +1419,7 @@ msgstr "DNS01"
 msgid "Do not enable this option unless you are sure that you need it."
 msgid "Do not enable this option unless you are sure that you need it."
 msgstr "Не вмикайте цю опцію, якщо ви не впевнені, що вона вам потрібна."
 msgstr "Не вмикайте цю опцію, якщо ви не впевнені, що вона вам потрібна."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:93
+#: src/views/site/components/SiteStatusSelect.vue:120
 msgid "Do you want to %{action} this site?"
 msgid "Do you want to %{action} this site?"
 msgstr "Ви хочете %{action} цей сайт?"
 msgstr "Ви хочете %{action} цей сайт?"
 
 
@@ -1488,9 +1497,9 @@ msgstr ""
 "localhost."
 "localhost."
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:94
+#: src/views/site/site_list/SiteList.vue:95
 #: src/views/stream/components/StreamDuplicate.vue:64
 #: src/views/stream/components/StreamDuplicate.vue:64
-#: src/views/stream/StreamList.vue:151
+#: src/views/stream/StreamList.vue:152
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "Дублювати"
 msgstr "Дублювати"
 
 
@@ -1534,11 +1543,11 @@ msgstr "Електронна пошта"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Електронна пошта (*)"
 msgstr "Електронна пошта (*)"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:87
+#: src/views/site/components/SiteStatusSelect.vue:114
 msgid "enable"
 msgid "enable"
 msgstr "увімкнути"
 msgstr "увімкнути"
 
 
-#: src/views/stream/StreamList.vue:144
+#: src/views/stream/StreamList.vue:145
 msgid "Enable"
 msgid "Enable"
 msgstr "Увімкнути"
 msgstr "Увімкнути"
 
 
@@ -1636,7 +1645,7 @@ msgstr "Увімкнути TOTP"
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:130
+#: src/views/site/components/SiteStatusSelect.vue:159
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/stream/components/RightPanel/Basic.vue:62
 #: src/views/stream/components/RightPanel/Basic.vue:62
@@ -1645,7 +1654,7 @@ msgstr "Увімкнути TOTP"
 msgid "Enabled"
 msgid "Enabled"
 msgstr "Увімкнено"
 msgstr "Увімкнено"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:27
+#: src/views/site/components/SiteStatusSelect.vue:54
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/StreamList.vue:46
 #: src/views/stream/StreamList.vue:46
@@ -1854,23 +1863,23 @@ msgstr "Не вдалося видалити сертифікат"
 msgid "Failed to delete certificate from database: %{error}"
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "Не вдалося видалити сертифікат з бази даних: %{error}"
 msgstr "Не вдалося видалити сертифікат з бази даних: %{error}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:46
+#: src/views/site/components/SiteStatusSelect.vue:73
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/StreamList.vue:60
 #: src/views/stream/StreamList.vue:60
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "Не вдалося вимкнути %{msg}"
 msgstr "Не вдалося вимкнути %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:72
+#: src/views/site/components/SiteStatusSelect.vue:99
 msgid "Failed to disable maintenance mode %{msg}"
 msgid "Failed to disable maintenance mode %{msg}"
 msgstr "Не вдалося вимкнути режим обслуговування %{msg}"
 msgstr "Не вдалося вимкнути режим обслуговування %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:33
+#: src/views/site/components/SiteStatusSelect.vue:60
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/StreamList.vue:50
 #: src/views/stream/StreamList.vue:50
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Не вдалося увімкнути %{msg}"
 msgstr "Не вдалося увімкнути %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:59
+#: src/views/site/components/SiteStatusSelect.vue:86
 msgid "Failed to enable maintenance mode %{msg}"
 msgid "Failed to enable maintenance mode %{msg}"
 msgstr "Не вдалося увімкнути режим обслуговування %{msg}"
 msgstr "Не вдалося увімкнути режим обслуговування %{msg}"
 
 
@@ -2183,7 +2192,7 @@ msgstr "Номер ICP"
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr "Якщо залишити порожнім, буде використовуватися стандартний каталог CA."
 msgstr "Якщо залишити порожнім, буде використовуватися стандартний каталог CA."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:144
+#: src/views/preference/tabs/AuthSettings.vue:113
 msgid ""
 msgid ""
 "If the number of login failed attempts from a ip reach the max attempts in "
 "If the number of login failed attempts from a ip reach the max attempts in "
 "ban threshold minutes, the ip will be banned for a period of time."
 "ban threshold minutes, the ip will be banned for a period of time."
@@ -2351,7 +2360,7 @@ msgstr "Недійсний формат запиту"
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "Недійсний формат токена безпеки"
 msgstr "Недійсний формат токена безпеки"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:17
+#: src/views/preference/tabs/AuthSettings.vue:14
 msgid "IP"
 msgid "IP"
 msgstr "IP"
 msgstr "IP"
 
 
@@ -2466,7 +2475,7 @@ msgstr "Список"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "Середнє навантаження:"
 msgstr "Середнє навантаження:"
 
 
-#: src/views/environments/list/Environment.vue:80
+#: src/views/environments/list/Environment.vue:81
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "Завантажити з налаштувань"
 msgstr "Завантажити з налаштувань"
 
 
@@ -2564,17 +2573,17 @@ msgstr ""
 "можете вручну активувати цю опцію. Планувальник завдань crontab у Nginx UI "
 "можете вручну активувати цю опцію. Планувальник завдань crontab у Nginx UI "
 "виконуватиме команду logrotate з інтервалом, який ви встановите у хвилинах."
 "виконуватиме команду logrotate з інтервалом, який ви встановите у хвилинах."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:138
+#: src/views/site/components/SiteStatusSelect.vue:165
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_list/columns.tsx:118
 #: src/views/site/site_list/columns.tsx:118
 msgid "Maintenance"
 msgid "Maintenance"
 msgstr "Технічне обслуговування"
 msgstr "Технічне обслуговування"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:66
+#: src/views/site/components/SiteStatusSelect.vue:93
 msgid "Maintenance mode disabled successfully"
 msgid "Maintenance mode disabled successfully"
 msgstr "Режим обслуговування успішно вимкнено"
 msgstr "Режим обслуговування успішно вимкнено"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:53
+#: src/views/site/components/SiteStatusSelect.vue:80
 msgid "Maintenance mode enabled successfully"
 msgid "Maintenance mode enabled successfully"
 msgstr "Режим обслуговування успішно ввімкнено"
 msgstr "Режим обслуговування успішно ввімкнено"
 
 
@@ -2641,7 +2650,7 @@ msgstr "Головний процес"
 msgid "Master Process"
 msgid "Master Process"
 msgstr "Головний процес"
 msgstr "Головний процес"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:134
+#: src/views/preference/tabs/AuthSettings.vue:103
 msgid "Max Attempts"
 msgid "Max Attempts"
 msgstr "Максимальна кількість спроб"
 msgstr "Максимальна кількість спроб"
 
 
@@ -2740,7 +2749,7 @@ msgstr "Модулі"
 msgid "Multi-line Directive"
 msgid "Multi-line Directive"
 msgstr "Багаторядкова директива"
 msgstr "Багаторядкова директива"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:178
+#: src/components/NgxConfigEditor/NgxUpstream.vue:182
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateList/certColumns.tsx:9
 #: src/views/certificate/CertificateList/certColumns.tsx:9
@@ -2757,7 +2766,7 @@ msgstr "Багаторядкова директива"
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/StreamDuplicate.vue:71
 #: src/views/stream/components/StreamDuplicate.vue:71
-#: src/views/stream/StreamList.vue:178
+#: src/views/stream/StreamList.vue:179
 msgid "Name"
 msgid "Name"
 msgstr "Ім'я"
 msgstr "Ім'я"
 
 
@@ -2789,6 +2798,10 @@ msgstr "Нове встановлення"
 msgid "New name"
 msgid "New name"
 msgstr "Нова назва"
 msgstr "Нова назва"
 
 
+#: src/views/user/UserProfile.vue:195
+msgid "New Password"
+msgstr "Новий пароль"
+
 #: src/views/config/ConfigEditor.vue:328
 #: src/views/config/ConfigEditor.vue:328
 msgid "New Path"
 msgid "New Path"
 msgstr "Новий шлях"
 msgstr "Новий шлях"
@@ -3004,9 +3017,9 @@ msgstr "Nginx.conf включає каталог streams-enabled"
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
-#: src/views/preference/tabs/AuthSettings.vue:163
+#: src/views/preference/tabs/AuthSettings.vue:132
 #: src/views/preference/tabs/CertSettings.vue:73
 #: src/views/preference/tabs/CertSettings.vue:73
-#: src/views/site/site_list/SiteList.vue:97 src/views/stream/StreamList.vue:154
+#: src/views/site/site_list/SiteList.vue:98 src/views/stream/StreamList.vue:155
 msgid "No"
 msgid "No"
 msgstr "Ні"
 msgstr "Ні"
 
 
@@ -3141,6 +3154,7 @@ msgid "Off"
 msgstr "Вимкнено"
 msgstr "Вимкнено"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/components/NgxConfigEditor/NgxUpstream.vue:145
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3152,13 +3166,13 @@ msgstr "Офлайн"
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/views/notification/Notification.vue:39
 #: src/views/notification/Notification.vue:39
-#: src/views/site/components/SiteStatusSegmented.vue:96
+#: src/views/site/components/SiteStatusSelect.vue:123
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
-#: src/views/site/site_list/SiteList.vue:98
+#: src/views/site/site_list/SiteList.vue:99
 #: src/views/stream/components/RightPanel/Basic.vue:46
 #: src/views/stream/components/RightPanel/Basic.vue:46
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:156
 #: src/views/system/Backup/BackupCreator.vue:149
 #: src/views/system/Backup/BackupCreator.vue:149
 msgid "OK"
 msgid "OK"
 msgstr "Гаразд"
 msgstr "Гаразд"
@@ -3278,6 +3292,14 @@ msgstr "Невірний пароль"
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr "Довжина пароля не може перевищувати 20 символів"
 msgstr "Довжина пароля не може перевищувати 20 символів"
 
 
+#: src/views/user/UserProfile.vue:96
+msgid "Password updated successfully"
+msgstr "Пароль успішно оновлено"
+
+#: src/views/user/UserProfile.vue:75
+msgid "Passwords do not match"
+msgstr "Паролі не збігаються"
+
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
@@ -3317,6 +3339,10 @@ msgstr "Налаштування продуктивності успішно з
 msgid "Performing core upgrade"
 msgid "Performing core upgrade"
 msgstr "Виконується оновлення ядра"
 msgstr "Виконується оновлення ядра"
 
 
+#: src/views/user/UserProfile.vue:121
+msgid "Personal Information"
+msgstr "Особиста інформація"
+
 #: src/constants/errors/self_check.ts:19
 #: src/constants/errors/self_check.ts:19
 msgid "PID path not exist"
 msgid "PID path not exist"
 msgstr "Шлях PID не існує"
 msgstr "Шлях PID не існує"
@@ -3448,17 +3474,17 @@ msgstr "Будь ласка, виберіть файл резервної коп
 msgid "Please select at least one item"
 msgid "Please select at least one item"
 msgstr "Будь ласка, виберіть хоча б один елемент"
 msgstr "Будь ласка, виберіть хоча б один елемент"
 
 
-#: src/views/environments/list/Environment.vue:112
+#: src/views/environments/list/Environment.vue:113
 #: src/views/environments/list/Environment.vue:35
 #: src/views/environments/list/Environment.vue:35
 msgid "Please select at least one node to reload Nginx"
 msgid "Please select at least one node to reload Nginx"
 msgstr "Будь ласка, виберіть принаймні один вузол для перезавантаження Nginx"
 msgstr "Будь ласка, виберіть принаймні один вузол для перезавантаження Nginx"
 
 
-#: src/views/environments/list/Environment.vue:133
+#: src/views/environments/list/Environment.vue:134
 #: src/views/environments/list/Environment.vue:49
 #: src/views/environments/list/Environment.vue:49
 msgid "Please select at least one node to restart Nginx"
 msgid "Please select at least one node to restart Nginx"
 msgstr "Будь ласка, виберіть принаймні один вузол для перезапуску Nginx"
 msgstr "Будь ласка, виберіть принаймні один вузол для перезапуску Nginx"
 
 
-#: src/views/environments/list/Environment.vue:91
+#: src/views/environments/list/Environment.vue:92
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "Будь ласка, виберіть принаймні один вузол для оновлення"
 msgstr "Будь ласка, виберіть принаймні один вузол для оновлення"
 
 
@@ -3625,8 +3651,8 @@ msgstr "Перезавантажити"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/EnvGroup.vue:50
 #: src/views/environments/group/EnvGroup.vue:50
-#: src/views/environments/list/Environment.vue:120
-#: src/views/environments/list/Environment.vue:128
+#: src/views/environments/list/Environment.vue:121
+#: src/views/environments/list/Environment.vue:129
 msgid "Reload Nginx"
 msgid "Reload Nginx"
 msgstr "Перезавантажити Nginx"
 msgstr "Перезавантажити Nginx"
 
 
@@ -3664,12 +3690,12 @@ msgstr "Перезавантаження"
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr "Перезавантаження nginx"
 msgstr "Перезавантаження nginx"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:168
+#: src/views/preference/tabs/AuthSettings.vue:137
 msgid "Remove"
 msgid "Remove"
 msgstr "Видалити"
 msgstr "Видалити"
 
 
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
-#: src/views/preference/tabs/AuthSettings.vue:50
+#: src/views/preference/tabs/AuthSettings.vue:47
 msgid "Remove successfully"
 msgid "Remove successfully"
 msgstr "Успішно видалено"
 msgstr "Успішно видалено"
 
 
@@ -3808,8 +3834,8 @@ msgid "Restart"
 msgstr "Перезавантажити"
 msgstr "Перезавантажити"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
-#: src/views/environments/list/Environment.vue:141
-#: src/views/environments/list/Environment.vue:149
+#: src/views/environments/list/Environment.vue:142
+#: src/views/environments/list/Environment.vue:150
 msgid "Restart Nginx"
 msgid "Restart Nginx"
 msgstr "Перезапустити Nginx"
 msgstr "Перезапустити Nginx"
 
 
@@ -3891,15 +3917,15 @@ msgstr ""
 "Відкликання сертифіката вплине на всі служби, які його використовують. Цю "
 "Відкликання сертифіката вплине на всі служби, які його використовують. Цю "
 "дію не можна скасувати."
 "дію не можна скасувати."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:106
+#: src/views/preference/tabs/AuthSettings.vue:75
 msgid "RP Display Name"
 msgid "RP Display Name"
 msgstr "Відображуване ім’я RP"
 msgstr "Відображуване ім’я RP"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:112
+#: src/views/preference/tabs/AuthSettings.vue:81
 msgid "RP Origins"
 msgid "RP Origins"
 msgstr "Джерела RP"
 msgstr "Джерела RP"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:100
+#: src/views/preference/tabs/AuthSettings.vue:69
 msgid "RPID"
 msgid "RPID"
 msgstr "RPID"
 msgstr "RPID"
 
 
@@ -4006,6 +4032,10 @@ msgstr "Назва модуля пошуку"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "Секрет скопійовано"
 msgstr "Секрет скопійовано"
 
 
+#: src/views/user/UserProfile.vue:175
+msgid "Security Settings"
+msgstr "Налаштування безпеки"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 msgid "Security Token"
 msgid "Security Token"
@@ -4081,7 +4111,7 @@ msgstr ""
 "Встановіть рекурсивні сервери імен, щоб перевизначити системні сервери імен "
 "Встановіть рекурсивні сервери імен, щоб перевизначити системні сервери імен "
 "на етапі DNS-виклику."
 "на етапі DNS-виклику."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:89
+#: src/views/site/components/SiteStatusSelect.vue:116
 msgid "set to maintenance mode"
 msgid "set to maintenance mode"
 msgstr "перевести в режим обслуговування"
 msgstr "перевести в режим обслуговування"
 
 
@@ -4322,13 +4352,11 @@ msgstr ""
 "щоб написати відповідний конфігураційний файл: "
 "щоб написати відповідний конфігураційний файл: "
 "https://nginxui.com/guide/nginx-proxy-example.html"
 "https://nginxui.com/guide/nginx-proxy-example.html"
 
 
-#: src/language/curd.ts:51
-#: src/language/curd.ts:55
+#: src/language/curd.ts:51 src/language/curd.ts:55
 msgid "Support single or batch upload of files"
 msgid "Support single or batch upload of files"
 msgstr "Підтримка одиночного або пакетного завантаження файлів"
 msgstr "Підтримка одиночного або пакетного завантаження файлів"
 
 
-#: src/language/curd.ts:52
-#: src/language/curd.ts:56
+#: src/language/curd.ts:52 src/language/curd.ts:56
 msgid "Support uploading entire folders"
 msgid "Support uploading entire folders"
 msgstr "Підтримка завантаження цілих папок"
 msgstr "Підтримка завантаження цілих папок"
 
 
@@ -4671,12 +4699,12 @@ msgstr ""
 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr "Це оновить або перевстановить Nginx UI на %{nodeNames} до версії %{version}."
 msgstr "Це оновить або перевстановить Nginx UI на %{nodeNames} до версії %{version}."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:123
+#: src/views/preference/tabs/AuthSettings.vue:92
 msgid "Throttle"
 msgid "Throttle"
 msgstr "Обмеження"
 msgstr "Обмеження"
 
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
-#: src/views/preference/tabs/AuthSettings.vue:143
+#: src/views/preference/tabs/AuthSettings.vue:112
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 msgid "Tips"
 msgid "Tips"
 msgstr "Поради"
 msgstr "Поради"
@@ -4689,7 +4717,7 @@ msgstr ""
 "Порада: Ви можете збільшити потужність обробки паралельних запитів, "
 "Порада: Ви можете збільшити потужність обробки паралельних запитів, "
 "збільшивши worker_processes або worker_connections."
 "збільшивши worker_processes або worker_connections."
 
 
-#: src/views/notification/notificationColumns.tsx:52
+#: src/views/notification/notificationColumns.tsx:58
 msgid "Title"
 msgid "Title"
 msgstr "Назва"
 msgstr "Назва"
 
 
@@ -4809,6 +4837,14 @@ msgstr "Тип"
 msgid "Unknown"
 msgid "Unknown"
 msgstr "Невідомо"
 msgstr "Невідомо"
 
 
+#: src/views/user/UserProfile.vue:218
+msgid "Update Password"
+msgstr "Оновити пароль"
+
+#: src/views/user/UserProfile.vue:142
+msgid "Update Profile"
+msgstr "Оновити профіль"
+
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "Успішно оновлено"
 msgstr "Успішно оновлено"
@@ -4826,8 +4862,8 @@ msgid "Updated at"
 msgstr "Оновлено"
 msgstr "Оновлено"
 
 
 #: src/routes/modules/system.ts:33
 #: src/routes/modules/system.ts:33
-#: src/views/environments/list/Environment.vue:107
-#: src/views/environments/list/Environment.vue:99
+#: src/views/environments/list/Environment.vue:100
+#: src/views/environments/list/Environment.vue:108
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "Оновити"
 msgstr "Оновити"
@@ -4853,7 +4889,7 @@ msgstr "Завантажити файли"
 msgid "Upload Folders"
 msgid "Upload Folders"
 msgstr "Завантажити папки"
 msgstr "Завантажити папки"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:173
+#: src/components/NgxConfigEditor/NgxUpstream.vue:177
 msgid "Upstream Name"
 msgid "Upstream Name"
 msgstr "Назва апстріму"
 msgstr "Назва апстріму"
 
 
@@ -4885,11 +4921,20 @@ msgstr "Користувач"
 msgid "User banned"
 msgid "User banned"
 msgstr "Користувача заблоковано"
 msgstr "Користувача заблоковано"
 
 
+#: src/views/user/UserProfile.vue:62
+msgid "User info updated successfully"
+msgstr "Інформацію про користувача успішно оновлено"
+
 #: src/constants/errors/user.ts:8
 #: src/constants/errors/user.ts:8
 msgid "User not enabled otp as 2fa"
 msgid "User not enabled otp as 2fa"
 msgstr "Користувач не увімкнув OTP як 2FA"
 msgstr "Користувач не увімкнув OTP як 2FA"
 
 
+#: src/routes/modules/user.ts:19
+msgid "User Profile"
+msgstr "Профіль користувача"
+
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
+#: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Ім’я користувача"
 msgstr "Ім’я користувача"
 
 
@@ -4980,7 +5025,7 @@ msgstr ""
 "Ми видалимо конфігурацію HTTPChallenge з цього файлу та перезавантажимо "
 "Ми видалимо конфігурацію HTTPChallenge з цього файлу та перезавантажимо "
 "Nginx. Ви впевнені, що хочете продовжити?"
 "Nginx. Ви впевнені, що хочете продовжити?"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:96
+#: src/views/preference/tabs/AuthSettings.vue:65
 msgid "Webauthn"
 msgid "Webauthn"
 msgstr "WebAuthn"
 msgstr "WebAuthn"
 
 
@@ -5060,12 +5105,12 @@ msgstr "Запис сертифіката на диск"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
-#: src/views/preference/tabs/AuthSettings.vue:162
+#: src/views/preference/tabs/AuthSettings.vue:131
 #: src/views/preference/tabs/CertSettings.vue:72
 #: src/views/preference/tabs/CertSettings.vue:72
 msgid "Yes"
 msgid "Yes"
 msgstr "Так"
 msgstr "Так"
 
 
-#: src/views/terminal/Terminal.vue:135
+#: src/views/terminal/Terminal.vue:132
 msgid ""
 msgid ""
 "You are accessing this terminal over an insecure HTTP connection on a "
 "You are accessing this terminal over an insecure HTTP connection on a "
 "non-localhost domain. This may expose sensitive information."
 "non-localhost domain. This may expose sensitive information."
@@ -5160,9 +5205,6 @@ msgstr "Ваші ключі доступу"
 #~ msgid_plural "Total %{total} items"
 #~ msgid_plural "Total %{total} items"
 #~ msgstr[0] "Всього %{total} елемент"
 #~ msgstr[0] "Всього %{total} елемент"
 
 
-#~ msgid "Updated successfully"
-#~ msgstr "Успішно оновлено"
-
 #~ msgid "View Details"
 #~ msgid "View Details"
 #~ msgstr "Переглянути деталі"
 #~ msgstr "Переглянути деталі"
 
 

+ 127 - 85
app/src/language/vi_VN/app.po

@@ -99,7 +99,7 @@ msgstr "[Nginx UI] Đang ghi chứng chỉ vào ổ đĩa"
 msgid "2FA"
 msgid "2FA"
 msgstr "2fa"
 msgstr "2fa"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:69
+#: src/views/user/UserProfile.vue:151
 msgid "2FA Settings"
 msgid "2FA Settings"
 msgstr "Cài đặt 2FA"
 msgstr "Cài đặt 2FA"
 
 
@@ -125,8 +125,7 @@ msgstr "Log truy cập"
 msgid "ACME User"
 msgid "ACME User"
 msgstr "Người dùng ACME"
 msgstr "Người dùng ACME"
 
 
-#: src/views/notification/notificationColumns.tsx:66
-#: src/views/preference/tabs/AuthSettings.vue:29
+#: src/views/preference/tabs/AuthSettings.vue:26
 msgid "Action"
 msgid "Action"
 msgstr "Hành động"
 msgstr "Hành động"
 
 
@@ -137,9 +136,9 @@ msgstr "Hành động"
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/nginx_log/NginxLogList.vue:52
 #: src/views/nginx_log/NginxLogList.vue:52
+#: src/views/notification/notificationColumns.tsx:72
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
-#: src/views/site/site_list/columns.tsx:129
-#: src/views/stream/columns.tsx:64
+#: src/views/site/site_list/columns.tsx:129 src/views/stream/columns.tsx:64
 #: src/views/user/userColumns.tsx:58
 #: src/views/user/userColumns.tsx:58
 msgid "Actions"
 msgid "Actions"
 msgstr "Hành động"
 msgstr "Hành động"
@@ -154,10 +153,10 @@ msgid "Actual worker to configured ratio"
 msgstr "Tỷ lệ công nhân thực tế so với cấu hình"
 msgstr "Tỷ lệ công nhân thực tế so với cấu hình"
 
 
 #: src/components/NgxConfigEditor/NgxServer.vue:112
 #: src/components/NgxConfigEditor/NgxServer.vue:112
-#: src/components/NgxConfigEditor/NgxUpstream.vue:155 src/language/curd.ts:19
+#: src/components/NgxConfigEditor/NgxUpstream.vue:159 src/language/curd.ts:19
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
-#: src/views/stream/StreamList.vue:120
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "Thêm"
 msgstr "Thêm"
 
 
@@ -184,7 +183,7 @@ msgstr "Thêm Location"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "Thêm Website"
 msgstr "Thêm Website"
 
 
-#: src/views/stream/StreamList.vue:173
+#: src/views/stream/StreamList.vue:174
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "Thêm luồng"
 msgstr "Thêm luồng"
 
 
@@ -242,7 +241,7 @@ msgstr "Ứng dụng"
 msgid "Arch"
 msgid "Arch"
 msgstr "\"Kiến trúc\""
 msgstr "\"Kiến trúc\""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:161
+#: src/views/preference/tabs/AuthSettings.vue:130
 msgid "Are you sure to delete this banned IP immediately?"
 msgid "Are you sure to delete this banned IP immediately?"
 msgstr "Bạn có chắc chắn muốn xóa IP bị cấm này ngay lập tức không?"
 msgstr "Bạn có chắc chắn muốn xóa IP bị cấm này ngay lập tức không?"
 
 
@@ -271,8 +270,8 @@ msgstr "Bạn có chắc chắn muốn xóa lịch sử trò chuyện không?"
 msgid "Are you sure you want to delete permanently?"
 msgid "Are you sure you want to delete permanently?"
 msgstr "Bạn có chắc chắn muốn xóa vĩnh viễn không?"
 msgstr "Bạn có chắc chắn muốn xóa vĩnh viễn không?"
 
 
-#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:99
-#: src/views/stream/StreamList.vue:156
+#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:100
+#: src/views/stream/StreamList.vue:157
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "Bạn có chắc chắn muốn xóa không?"
 msgstr "Bạn có chắc chắn muốn xóa không?"
 
 
@@ -312,7 +311,7 @@ msgstr "Trợ lý"
 msgid "Attempt to fix"
 msgid "Attempt to fix"
 msgstr "Cố gắng sửa chữa"
 msgstr "Cố gắng sửa chữa"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:20
+#: src/views/preference/tabs/AuthSettings.vue:17
 msgid "Attempts"
 msgid "Attempts"
 msgstr "Nỗ lực"
 msgstr "Nỗ lực"
 
 
@@ -324,7 +323,7 @@ msgstr "Xác thực"
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr "Xác thực với một cô ấy"
 msgstr "Xác thực với một cô ấy"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:87
+#: src/views/preference/tabs/AuthSettings.vue:56
 msgid "Authentication Settings"
 msgid "Authentication Settings"
 msgstr "Cài đặt xác thực"
 msgstr "Cài đặt xác thực"
 
 
@@ -399,15 +398,15 @@ msgstr "Không tìm thấy tệp sao lưu: {0}"
 msgid "Backup has been downloaded successfully"
 msgid "Backup has been downloaded successfully"
 msgstr "Đã tải xuống bản sao lưu thành công"
 msgstr "Đã tải xuống bản sao lưu thành công"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:128
+#: src/views/preference/tabs/AuthSettings.vue:97
 msgid "Ban Threshold Minutes"
 msgid "Ban Threshold Minutes"
 msgstr "Phút Ngưỡng Cấm"
 msgstr "Phút Ngưỡng Cấm"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:149
+#: src/views/preference/tabs/AuthSettings.vue:118
 msgid "Banned IPs"
 msgid "Banned IPs"
 msgstr "Danh sách IP bị cấm"
 msgstr "Danh sách IP bị cấm"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:23
+#: src/views/preference/tabs/AuthSettings.vue:20
 msgid "Banned Until"
 msgid "Banned Until"
 msgstr "Bị cấm đến"
 msgstr "Bị cấm đến"
 
 
@@ -517,7 +516,7 @@ msgstr ""
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
-#: src/views/site/components/SiteStatusSegmented.vue:97
+#: src/views/site/components/SiteStatusSelect.vue:124
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
@@ -635,6 +634,10 @@ msgstr "Phương pháp xác thực"
 msgid "Change Certificate"
 msgid "Change Certificate"
 msgstr "Thay đổi chứng chỉ"
 msgstr "Thay đổi chứng chỉ"
 
 
+#: src/views/user/UserProfile.vue:181
+msgid "Change Password"
+msgstr "Đổi mật khẩu"
+
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 msgid "Changed Certificate"
 msgid "Changed Certificate"
 msgid_plural "Changed Certificates"
 msgid_plural "Changed Certificates"
@@ -800,13 +803,11 @@ msgstr "Đã xóa thành công"
 msgid "Click or drag backup file to this area to upload"
 msgid "Click or drag backup file to this area to upload"
 msgstr "Nhấp hoặc kéo tệp sao lưu vào khu vực này để tải lên"
 msgstr "Nhấp hoặc kéo tệp sao lưu vào khu vực này để tải lên"
 
 
-#: src/language/curd.ts:49
-#: src/language/curd.ts:53
+#: src/language/curd.ts:49 src/language/curd.ts:53
 msgid "Click or drag files to this area to upload"
 msgid "Click or drag files to this area to upload"
 msgstr "Nhấp hoặc kéo thả tệp vào khu vực này để tải lên"
 msgstr "Nhấp hoặc kéo thả tệp vào khu vực này để tải lên"
 
 
-#: src/language/curd.ts:50
-#: src/language/curd.ts:54
+#: src/language/curd.ts:50 src/language/curd.ts:54
 msgid "Click or drag folders to this area to upload"
 msgid "Click or drag folders to this area to upload"
 msgstr "Nhấp hoặc kéo thư mục vào khu vực này để tải lên"
 msgstr "Nhấp hoặc kéo thư mục vào khu vực này để tải lên"
 
 
@@ -926,6 +927,10 @@ msgstr "Cấu hình"
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr "Cấu hình SSL"
 msgstr "Cấu hình SSL"
 
 
+#: src/views/user/UserProfile.vue:204
+msgid "Confirm New Password"
+msgstr "Xác nhận mật khẩu mới"
+
 #: src/views/dashboard/Environments.vue:141
 #: src/views/dashboard/Environments.vue:141
 msgid "Connected"
 msgid "Connected"
 msgstr "Đã kết nối"
 msgstr "Đã kết nối"
@@ -934,7 +939,7 @@ msgstr "Đã kết nối"
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Lỗi kết nối, đang thử kết nối lại..."
 msgstr "Lỗi kết nối, đang thử kết nối lại..."
 
 
-#: src/views/terminal/Terminal.vue:142
+#: src/views/terminal/Terminal.vue:139
 msgid "Connection lost, please refresh the page."
 msgid "Connection lost, please refresh the page."
 msgstr "Kết nối bị mất, xin vui lòng làm mới trang."
 msgstr "Kết nối bị mất, xin vui lòng làm mới trang."
 
 
@@ -990,7 +995,7 @@ msgstr "Mức sử dụng CPU tương đối cao, hãy cân nhắc tối ưu c
 msgid "CPU:"
 msgid "CPU:"
 msgstr "CPU:"
 msgstr "CPU:"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:166
+#: src/components/NgxConfigEditor/NgxUpstream.vue:170
 msgid "Create"
 msgid "Create"
 msgstr "Tạo"
 msgstr "Tạo"
 
 
@@ -1019,7 +1024,7 @@ msgstr ""
 "tệp sao lưu sẽ tự động được tải xuống máy tính của bạn."
 "tệp sao lưu sẽ tự động được tải xuống máy tính của bạn."
 
 
 #: src/views/environments/group/columns.ts:29
 #: src/views/environments/group/columns.ts:29
-#: src/views/notification/notificationColumns.tsx:45
+#: src/views/notification/notificationColumns.tsx:51
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/user/userColumns.tsx:46
 #: src/views/user/userColumns.tsx:46
@@ -1058,6 +1063,10 @@ msgstr "Kết nối đang hoạt động hiện tại"
 msgid "Current Content"
 msgid "Current Content"
 msgstr "Nội dung hiện tại"
 msgstr "Nội dung hiện tại"
 
 
+#: src/views/user/UserProfile.vue:186
+msgid "Current Password"
+msgstr "Mật khẩu hiện tại"
+
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 msgid "Current usage"
 msgid "Current usage"
 msgstr "Mức sử dụng hiện tại"
 msgstr "Mức sử dụng hiện tại"
@@ -1097,8 +1106,8 @@ msgstr "Xác định tên và kích thước vùng bộ nhớ dùng chung, ví d
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/views/certificate/components/RemoveCert.vue:88
 #: src/views/certificate/components/RemoveCert.vue:88
-#: src/views/site/site_list/SiteList.vue:108
-#: src/views/stream/StreamList.vue:165
+#: src/views/site/site_list/SiteList.vue:109
+#: src/views/stream/StreamList.vue:166
 msgid "Delete"
 msgid "Delete"
 msgstr "Xoá"
 msgstr "Xoá"
 
 
@@ -1175,7 +1184,7 @@ msgstr "Tệp đích đã tồn tại"
 msgid "Destination file: {0} already exists"
 msgid "Destination file: {0} already exists"
 msgstr "Tệp đích: {0} đã tồn tại"
 msgstr "Tệp đích: {0} đã tồn tại"
 
 
-#: src/views/notification/notificationColumns.tsx:60
+#: src/views/notification/notificationColumns.tsx:66
 msgid "Details"
 msgid "Details"
 msgstr "Chi tiết"
 msgstr "Chi tiết"
 
 
@@ -1219,11 +1228,11 @@ msgstr "Cấp độ thư mục"
 msgid "Directory path to store cache files"
 msgid "Directory path to store cache files"
 msgstr "Đường dẫn thư mục để lưu trữ các tệp bộ nhớ đệm"
 msgstr "Đường dẫn thư mục để lưu trữ các tệp bộ nhớ đệm"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:88
+#: src/views/site/components/SiteStatusSelect.vue:115
 msgid "disable"
 msgid "disable"
 msgstr "Vô hiệu hóa"
 msgstr "Vô hiệu hóa"
 
 
-#: src/views/stream/StreamList.vue:136
+#: src/views/stream/StreamList.vue:137
 msgid "Disable"
 msgid "Disable"
 msgstr "Vô hiệu hóa"
 msgstr "Vô hiệu hóa"
 
 
@@ -1284,7 +1293,7 @@ msgstr "Đã vô hiệu hóa luồng %{name} từ %{node} thành công"
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:134
+#: src/views/site/components/SiteStatusSelect.vue:162
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/stream/components/StreamEditor.vue:30
 #: src/views/stream/components/StreamEditor.vue:30
@@ -1292,7 +1301,7 @@ msgstr "Đã vô hiệu hóa luồng %{name} từ %{node} thành công"
 msgid "Disabled"
 msgid "Disabled"
 msgstr "Đã tắt"
 msgstr "Đã tắt"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:40
+#: src/views/site/components/SiteStatusSelect.vue:67
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/StreamList.vue:56
 #: src/views/stream/StreamList.vue:56
 msgid "Disabled successfully"
 msgid "Disabled successfully"
@@ -1320,7 +1329,7 @@ msgstr "DNS01"
 msgid "Do not enable this option unless you are sure that you need it."
 msgid "Do not enable this option unless you are sure that you need it."
 msgstr "Không bật tùy chọn này trừ khi bạn chắc chắn cần đến nó."
 msgstr "Không bật tùy chọn này trừ khi bạn chắc chắn cần đến nó."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:93
+#: src/views/site/components/SiteStatusSelect.vue:120
 msgid "Do you want to %{action} this site?"
 msgid "Do you want to %{action} this site?"
 msgstr "Bạn có muốn %{action} trang web này không?"
 msgstr "Bạn có muốn %{action} trang web này không?"
 
 
@@ -1399,9 +1408,9 @@ msgstr ""
 "trên các trang web không phải HTTPS, trừ khi chạy trên localhost."
 "trên các trang web không phải HTTPS, trừ khi chạy trên localhost."
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:94
+#: src/views/site/site_list/SiteList.vue:95
 #: src/views/stream/components/StreamDuplicate.vue:64
 #: src/views/stream/components/StreamDuplicate.vue:64
-#: src/views/stream/StreamList.vue:151
+#: src/views/stream/StreamList.vue:152
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "Nhân bản"
 msgstr "Nhân bản"
 
 
@@ -1445,11 +1454,11 @@ msgstr "Email"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:87
+#: src/views/site/components/SiteStatusSelect.vue:114
 msgid "enable"
 msgid "enable"
 msgstr "bật"
 msgstr "bật"
 
 
-#: src/views/stream/StreamList.vue:144
+#: src/views/stream/StreamList.vue:145
 msgid "Enable"
 msgid "Enable"
 msgstr "Bật"
 msgstr "Bật"
 
 
@@ -1547,7 +1556,7 @@ msgstr "Bật TOTP"
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:130
+#: src/views/site/components/SiteStatusSelect.vue:159
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/stream/components/RightPanel/Basic.vue:62
 #: src/views/stream/components/RightPanel/Basic.vue:62
@@ -1556,7 +1565,7 @@ msgstr "Bật TOTP"
 msgid "Enabled"
 msgid "Enabled"
 msgstr "Đã bật"
 msgstr "Đã bật"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:27
+#: src/views/site/components/SiteStatusSelect.vue:54
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/StreamList.vue:46
 #: src/views/stream/StreamList.vue:46
@@ -1765,23 +1774,23 @@ msgstr "Xóa chứng chỉ không thành công"
 msgid "Failed to delete certificate from database: %{error}"
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "Xóa chứng chỉ từ cơ sở dữ liệu thất bại: %{error}"
 msgstr "Xóa chứng chỉ từ cơ sở dữ liệu thất bại: %{error}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:46
+#: src/views/site/components/SiteStatusSelect.vue:73
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/StreamList.vue:60
 #: src/views/stream/StreamList.vue:60
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "Không thể tắt %{msg}"
 msgstr "Không thể tắt %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:72
+#: src/views/site/components/SiteStatusSelect.vue:99
 msgid "Failed to disable maintenance mode %{msg}"
 msgid "Failed to disable maintenance mode %{msg}"
 msgstr "Không thể tắt chế độ bảo trì %{msg}"
 msgstr "Không thể tắt chế độ bảo trì %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:33
+#: src/views/site/components/SiteStatusSelect.vue:60
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/StreamList.vue:50
 #: src/views/stream/StreamList.vue:50
 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/views/site/components/SiteStatusSegmented.vue:59
+#: src/views/site/components/SiteStatusSelect.vue:86
 msgid "Failed to enable maintenance mode %{msg}"
 msgid "Failed to enable maintenance mode %{msg}"
 msgstr "Không thể bật chế độ bảo trì %{msg}"
 msgstr "Không thể bật chế độ bảo trì %{msg}"
 
 
@@ -2094,7 +2103,7 @@ msgstr "Số ICP"
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr "Nếu để trống, thư mục CA mặc định sẽ được sử dụng."
 msgstr "Nếu để trống, thư mục CA mặc định sẽ được sử dụng."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:144
+#: src/views/preference/tabs/AuthSettings.vue:113
 msgid ""
 msgid ""
 "If the number of login failed attempts from a ip reach the max attempts in "
 "If the number of login failed attempts from a ip reach the max attempts in "
 "ban threshold minutes, the ip will be banned for a period of time."
 "ban threshold minutes, the ip will be banned for a period of time."
@@ -2261,7 +2270,7 @@ msgstr "Định dạng yêu cầu không hợp lệ"
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "Định dạng mã bảo mật không hợp lệ"
 msgstr "Định dạng mã bảo mật không hợp lệ"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:17
+#: src/views/preference/tabs/AuthSettings.vue:14
 msgid "IP"
 msgid "IP"
 msgstr "IP"
 msgstr "IP"
 
 
@@ -2376,7 +2385,7 @@ msgstr "Danh sách"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "Tải trung bình:"
 msgstr "Tải trung bình:"
 
 
-#: src/views/environments/list/Environment.vue:80
+#: src/views/environments/list/Environment.vue:81
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "Tải từ cài đặt"
 msgstr "Tải từ cài đặt"
 
 
@@ -2474,17 +2483,17 @@ msgstr ""
 "chọn này. Bộ lập lịch tác vụ crontab của Nginx UI sẽ thực thi lệnh "
 "chọn này. Bộ lập lịch tác vụ crontab của Nginx UI sẽ thực thi lệnh "
 "logrotate theo khoảng thời gian bạn đặt (tính bằng phút)."
 "logrotate theo khoảng thời gian bạn đặt (tính bằng phút)."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:138
+#: src/views/site/components/SiteStatusSelect.vue:165
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_list/columns.tsx:118
 #: src/views/site/site_list/columns.tsx:118
 msgid "Maintenance"
 msgid "Maintenance"
 msgstr "Bảo trì"
 msgstr "Bảo trì"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:66
+#: src/views/site/components/SiteStatusSelect.vue:93
 msgid "Maintenance mode disabled successfully"
 msgid "Maintenance mode disabled successfully"
 msgstr "Đã tắt chế độ bảo trì thành công"
 msgstr "Đã tắt chế độ bảo trì thành công"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:53
+#: src/views/site/components/SiteStatusSelect.vue:80
 msgid "Maintenance mode enabled successfully"
 msgid "Maintenance mode enabled successfully"
 msgstr "Đã bật chế độ bảo trì thành công"
 msgstr "Đã bật chế độ bảo trì thành công"
 
 
@@ -2551,7 +2560,7 @@ msgstr "Tiến trình chính"
 msgid "Master Process"
 msgid "Master Process"
 msgstr "Tiến trình chính"
 msgstr "Tiến trình chính"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:134
+#: src/views/preference/tabs/AuthSettings.vue:103
 msgid "Max Attempts"
 msgid "Max Attempts"
 msgstr "Số lần thử tối đa"
 msgstr "Số lần thử tối đa"
 
 
@@ -2650,7 +2659,7 @@ msgstr "Mô-đun"
 msgid "Multi-line Directive"
 msgid "Multi-line Directive"
 msgstr "Chỉ thị nhiều dòng"
 msgstr "Chỉ thị nhiều dòng"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:178
+#: src/components/NgxConfigEditor/NgxUpstream.vue:182
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateList/certColumns.tsx:9
 #: src/views/certificate/CertificateList/certColumns.tsx:9
@@ -2667,7 +2676,7 @@ msgstr "Chỉ thị nhiều dòng"
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/StreamDuplicate.vue:71
 #: src/views/stream/components/StreamDuplicate.vue:71
-#: src/views/stream/StreamList.vue:178
+#: src/views/stream/StreamList.vue:179
 msgid "Name"
 msgid "Name"
 msgstr "Tên"
 msgstr "Tên"
 
 
@@ -2699,6 +2708,10 @@ msgstr "Cài đặt mới"
 msgid "New name"
 msgid "New name"
 msgstr "Tên mới"
 msgstr "Tên mới"
 
 
+#: src/views/user/UserProfile.vue:195
+msgid "New Password"
+msgstr "Mật khẩu mới"
+
 #: src/views/config/ConfigEditor.vue:328
 #: src/views/config/ConfigEditor.vue:328
 msgid "New Path"
 msgid "New Path"
 msgstr "Đường dẫn mới"
 msgstr "Đường dẫn mới"
@@ -2914,9 +2927,9 @@ msgstr "Nginx.conf bao gồm thư mục streams-enabled"
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
-#: src/views/preference/tabs/AuthSettings.vue:163
+#: src/views/preference/tabs/AuthSettings.vue:132
 #: src/views/preference/tabs/CertSettings.vue:73
 #: src/views/preference/tabs/CertSettings.vue:73
-#: src/views/site/site_list/SiteList.vue:97 src/views/stream/StreamList.vue:154
+#: src/views/site/site_list/SiteList.vue:98 src/views/stream/StreamList.vue:155
 msgid "No"
 msgid "No"
 msgstr "Không"
 msgstr "Không"
 
 
@@ -3049,6 +3062,7 @@ msgid "Off"
 msgstr "Tắt"
 msgstr "Tắt"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/components/NgxConfigEditor/NgxUpstream.vue:145
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3060,13 +3074,13 @@ msgstr "Ngoại tuyến"
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/views/notification/Notification.vue:39
 #: src/views/notification/Notification.vue:39
-#: src/views/site/components/SiteStatusSegmented.vue:96
+#: src/views/site/components/SiteStatusSelect.vue:123
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
-#: src/views/site/site_list/SiteList.vue:98
+#: src/views/site/site_list/SiteList.vue:99
 #: src/views/stream/components/RightPanel/Basic.vue:46
 #: src/views/stream/components/RightPanel/Basic.vue:46
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:156
 #: src/views/system/Backup/BackupCreator.vue:149
 #: src/views/system/Backup/BackupCreator.vue:149
 msgid "OK"
 msgid "OK"
 msgstr "Đồng ý"
 msgstr "Đồng ý"
@@ -3186,6 +3200,14 @@ msgstr "Mật khẩu không đúng"
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr "Độ dài mật khẩu không được vượt quá 20 ký tự"
 msgstr "Độ dài mật khẩu không được vượt quá 20 ký tự"
 
 
+#: src/views/user/UserProfile.vue:96
+msgid "Password updated successfully"
+msgstr "Cập nhật mật khẩu thành công"
+
+#: src/views/user/UserProfile.vue:75
+msgid "Passwords do not match"
+msgstr "Mật khẩu không khớp"
+
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
@@ -3225,6 +3247,10 @@ msgstr "Đã lưu cài đặt hiệu suất thành công"
 msgid "Performing core upgrade"
 msgid "Performing core upgrade"
 msgstr "Nâng cấp core"
 msgstr "Nâng cấp core"
 
 
+#: src/views/user/UserProfile.vue:121
+msgid "Personal Information"
+msgstr "Thông tin cá nhân"
+
 #: src/constants/errors/self_check.ts:19
 #: src/constants/errors/self_check.ts:19
 msgid "PID path not exist"
 msgid "PID path not exist"
 msgstr "Đường dẫn PID không tồn tại"
 msgstr "Đường dẫn PID không tồn tại"
@@ -3347,17 +3373,17 @@ msgstr "Vui lòng chọn tệp sao lưu"
 msgid "Please select at least one item"
 msgid "Please select at least one item"
 msgstr "Vui lòng chọn ít nhất một mục"
 msgstr "Vui lòng chọn ít nhất một mục"
 
 
-#: src/views/environments/list/Environment.vue:112
+#: src/views/environments/list/Environment.vue:113
 #: src/views/environments/list/Environment.vue:35
 #: src/views/environments/list/Environment.vue:35
 msgid "Please select at least one node to reload Nginx"
 msgid "Please select at least one node to reload Nginx"
 msgstr "Vui lòng chọn ít nhất một nút để tải lại Nginx"
 msgstr "Vui lòng chọn ít nhất một nút để tải lại Nginx"
 
 
-#: src/views/environments/list/Environment.vue:133
+#: src/views/environments/list/Environment.vue:134
 #: src/views/environments/list/Environment.vue:49
 #: src/views/environments/list/Environment.vue:49
 msgid "Please select at least one node to restart Nginx"
 msgid "Please select at least one node to restart Nginx"
 msgstr "Vui lòng chọn ít nhất một nút để khởi động lại Nginx"
 msgstr "Vui lòng chọn ít nhất một nút để khởi động lại Nginx"
 
 
-#: src/views/environments/list/Environment.vue:91
+#: src/views/environments/list/Environment.vue:92
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "Vui lòng chọn ít nhất một nút để nâng cấp"
 msgstr "Vui lòng chọn ít nhất một nút để nâng cấp"
 
 
@@ -3523,8 +3549,8 @@ msgstr "Tải lại"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/EnvGroup.vue:50
 #: src/views/environments/group/EnvGroup.vue:50
-#: src/views/environments/list/Environment.vue:120
-#: src/views/environments/list/Environment.vue:128
+#: src/views/environments/list/Environment.vue:121
+#: src/views/environments/list/Environment.vue:129
 msgid "Reload Nginx"
 msgid "Reload Nginx"
 msgstr "Tải lại Nginx"
 msgstr "Tải lại Nginx"
 
 
@@ -3560,12 +3586,12 @@ msgstr "Đang tải lại"
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr "Tải lại nginx"
 msgstr "Tải lại nginx"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:168
+#: src/views/preference/tabs/AuthSettings.vue:137
 msgid "Remove"
 msgid "Remove"
 msgstr "Xóa"
 msgstr "Xóa"
 
 
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
-#: src/views/preference/tabs/AuthSettings.vue:50
+#: src/views/preference/tabs/AuthSettings.vue:47
 msgid "Remove successfully"
 msgid "Remove successfully"
 msgstr "Xóa thành công"
 msgstr "Xóa thành công"
 
 
@@ -3704,8 +3730,8 @@ msgid "Restart"
 msgstr "Khởi động lại"
 msgstr "Khởi động lại"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
-#: src/views/environments/list/Environment.vue:141
-#: src/views/environments/list/Environment.vue:149
+#: src/views/environments/list/Environment.vue:142
+#: src/views/environments/list/Environment.vue:150
 msgid "Restart Nginx"
 msgid "Restart Nginx"
 msgstr "Khởi động lại Nginx"
 msgstr "Khởi động lại Nginx"
 
 
@@ -3785,15 +3811,15 @@ msgstr ""
 "Việc thu hồi chứng chỉ sẽ ảnh hưởng đến bất kỳ dịch vụ nào hiện đang sử "
 "Việc thu hồi chứng chỉ sẽ ảnh hưởng đến bất kỳ dịch vụ nào hiện đang sử "
 "dụng nó. Hành động này không thể hoàn tác."
 "dụng nó. Hành động này không thể hoàn tác."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:106
+#: src/views/preference/tabs/AuthSettings.vue:75
 msgid "RP Display Name"
 msgid "RP Display Name"
 msgstr "Tên hiển thị RP"
 msgstr "Tên hiển thị RP"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:112
+#: src/views/preference/tabs/AuthSettings.vue:81
 msgid "RP Origins"
 msgid "RP Origins"
 msgstr "Nguồn gốc RP"
 msgstr "Nguồn gốc RP"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:100
+#: src/views/preference/tabs/AuthSettings.vue:69
 msgid "RPID"
 msgid "RPID"
 msgstr "RPID"
 msgstr "RPID"
 
 
@@ -3898,6 +3924,10 @@ msgstr "Tên mô-đun tìm kiếm"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "Mật khẩu đã được sao chép"
 msgstr "Mật khẩu đã được sao chép"
 
 
+#: src/views/user/UserProfile.vue:175
+msgid "Security Settings"
+msgstr "Cài đặt bảo mật"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 msgid "Security Token"
 msgid "Security Token"
@@ -3973,7 +4003,7 @@ msgstr ""
 "Đặt các máy chủ tên đệ quy để ghi đè các máy chủ tên hệ thống trong bước "
 "Đặt các máy chủ tên đệ quy để ghi đè các máy chủ tên hệ thống trong bước "
 "thử thách DNS."
 "thử thách DNS."
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:89
+#: src/views/site/components/SiteStatusSelect.vue:116
 msgid "set to maintenance mode"
 msgid "set to maintenance mode"
 msgstr "đặt vào chế độ bảo trì"
 msgstr "đặt vào chế độ bảo trì"
 
 
@@ -4212,13 +4242,11 @@ msgstr ""
 "liên kết này để viết tệp cấu hình tương ứng: "
 "liên kết này để viết tệp cấu hình tương ứng: "
 "https://nginxui.com/guide/nginx-proxy-example.html"
 "https://nginxui.com/guide/nginx-proxy-example.html"
 
 
-#: src/language/curd.ts:51
-#: src/language/curd.ts:55
+#: src/language/curd.ts:51 src/language/curd.ts:55
 msgid "Support single or batch upload of files"
 msgid "Support single or batch upload of files"
 msgstr "Hỗ trợ tải lên một hoặc nhiều tệp"
 msgstr "Hỗ trợ tải lên một hoặc nhiều tệp"
 
 
-#: src/language/curd.ts:52
-#: src/language/curd.ts:56
+#: src/language/curd.ts:52 src/language/curd.ts:56
 msgid "Support uploading entire folders"
 msgid "Support uploading entire folders"
 msgstr "Hỗ trợ tải lên toàn bộ thư mục"
 msgstr "Hỗ trợ tải lên toàn bộ thư mục"
 
 
@@ -4561,12 +4589,12 @@ msgstr ""
 "Thao tác này sẽ nâng cấp hoặc cài đặt lại Nginx UI trên %{nodeNames} lên "
 "Thao tác này sẽ nâng cấp hoặc cài đặt lại Nginx UI trên %{nodeNames} lên "
 "phiên bản %{version}."
 "phiên bản %{version}."
 
 
-#: src/views/preference/tabs/AuthSettings.vue:123
+#: src/views/preference/tabs/AuthSettings.vue:92
 msgid "Throttle"
 msgid "Throttle"
 msgstr "Hạn chế"
 msgstr "Hạn chế"
 
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
-#: src/views/preference/tabs/AuthSettings.vue:143
+#: src/views/preference/tabs/AuthSettings.vue:112
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 msgid "Tips"
 msgid "Tips"
 msgstr "Mẹo"
 msgstr "Mẹo"
@@ -4579,7 +4607,7 @@ msgstr ""
 "Mẹo: Bạn có thể tăng khả năng xử lý đồng thời bằng cách tăng "
 "Mẹo: Bạn có thể tăng khả năng xử lý đồng thời bằng cách tăng "
 "worker_processes hoặc worker_connections"
 "worker_processes hoặc worker_connections"
 
 
-#: src/views/notification/notificationColumns.tsx:52
+#: src/views/notification/notificationColumns.tsx:58
 msgid "Title"
 msgid "Title"
 msgstr "Tiêu đề"
 msgstr "Tiêu đề"
 
 
@@ -4699,6 +4727,14 @@ msgstr "Loại"
 msgid "Unknown"
 msgid "Unknown"
 msgstr "Không xác định"
 msgstr "Không xác định"
 
 
+#: src/views/user/UserProfile.vue:218
+msgid "Update Password"
+msgstr "Cập nhật mật khẩu"
+
+#: src/views/user/UserProfile.vue:142
+msgid "Update Profile"
+msgstr "Cập nhật hồ sơ"
+
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "Cập nhật thành công"
 msgstr "Cập nhật thành công"
@@ -4716,8 +4752,8 @@ msgid "Updated at"
 msgstr "Ngày cập nhật"
 msgstr "Ngày cập nhật"
 
 
 #: src/routes/modules/system.ts:33
 #: src/routes/modules/system.ts:33
-#: src/views/environments/list/Environment.vue:107
-#: src/views/environments/list/Environment.vue:99
+#: src/views/environments/list/Environment.vue:100
+#: src/views/environments/list/Environment.vue:108
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "Cập nhật"
 msgstr "Cập nhật"
@@ -4743,7 +4779,7 @@ msgstr "Tải lên tệp"
 msgid "Upload Folders"
 msgid "Upload Folders"
 msgstr "Tải lên thư mục"
 msgstr "Tải lên thư mục"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:173
+#: src/components/NgxConfigEditor/NgxUpstream.vue:177
 msgid "Upstream Name"
 msgid "Upstream Name"
 msgstr "Tên Upstream"
 msgstr "Tên Upstream"
 
 
@@ -4775,11 +4811,20 @@ msgstr "Người dùng"
 msgid "User banned"
 msgid "User banned"
 msgstr "Người dùng bị cấm"
 msgstr "Người dùng bị cấm"
 
 
+#: src/views/user/UserProfile.vue:62
+msgid "User info updated successfully"
+msgstr "Cập nhật thông tin người dùng thành công"
+
 #: src/constants/errors/user.ts:8
 #: src/constants/errors/user.ts:8
 msgid "User not enabled otp as 2fa"
 msgid "User not enabled otp as 2fa"
 msgstr "Người dùng chưa bật OTP làm 2FA"
 msgstr "Người dùng chưa bật OTP làm 2FA"
 
 
+#: src/routes/modules/user.ts:19
+msgid "User Profile"
+msgstr "Hồ sơ người dùng"
+
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
+#: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Username"
 msgstr "Username"
 
 
@@ -4870,7 +4915,7 @@ msgstr ""
 "Chúng tôi sẽ xóa cấu hình HTTPChallenge khỏi tệp này và tải lại Nginx. Bạn "
 "Chúng tôi sẽ xóa cấu hình HTTPChallenge khỏi tệp này và tải lại Nginx. Bạn "
 "có muốn tiếp tục không?"
 "có muốn tiếp tục không?"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:96
+#: src/views/preference/tabs/AuthSettings.vue:65
 msgid "Webauthn"
 msgid "Webauthn"
 msgstr "WebAuthn"
 msgstr "WebAuthn"
 
 
@@ -4948,12 +4993,12 @@ msgstr "Ghi chứng chỉ vào disk"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
-#: src/views/preference/tabs/AuthSettings.vue:162
+#: src/views/preference/tabs/AuthSettings.vue:131
 #: src/views/preference/tabs/CertSettings.vue:72
 #: src/views/preference/tabs/CertSettings.vue:72
 msgid "Yes"
 msgid "Yes"
 msgstr "Có"
 msgstr "Có"
 
 
-#: src/views/terminal/Terminal.vue:135
+#: src/views/terminal/Terminal.vue:132
 msgid ""
 msgid ""
 "You are accessing this terminal over an insecure HTTP connection on a "
 "You are accessing this terminal over an insecure HTTP connection on a "
 "non-localhost domain. This may expose sensitive information."
 "non-localhost domain. This may expose sensitive information."
@@ -5048,9 +5093,6 @@ msgstr "Khóa truy cập của bạn"
 #~ msgid_plural "Total %{total} items"
 #~ msgid_plural "Total %{total} items"
 #~ msgstr[0] "Tổng %{total} mục"
 #~ msgstr[0] "Tổng %{total} mục"
 
 
-#~ msgid "Updated successfully"
-#~ msgstr "Cập nhật thành công"
-
 #~ msgid "View Details"
 #~ msgid "View Details"
 #~ msgstr "Xem chi tiết"
 #~ msgstr "Xem chi tiết"
 
 

+ 127 - 85
app/src/language/zh_CN/app.po

@@ -103,7 +103,7 @@ msgstr "[Nginx UI] 正在将证书写入磁盘"
 msgid "2FA"
 msgid "2FA"
 msgstr "2FA"
 msgstr "2FA"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:69
+#: src/views/user/UserProfile.vue:151
 msgid "2FA Settings"
 msgid "2FA Settings"
 msgstr "2FA 设置"
 msgstr "2FA 设置"
 
 
@@ -129,8 +129,7 @@ msgstr "访问日志"
 msgid "ACME User"
 msgid "ACME User"
 msgstr "ACME 用户"
 msgstr "ACME 用户"
 
 
-#: src/views/notification/notificationColumns.tsx:66
-#: src/views/preference/tabs/AuthSettings.vue:29
+#: src/views/preference/tabs/AuthSettings.vue:26
 msgid "Action"
 msgid "Action"
 msgstr "操作"
 msgstr "操作"
 
 
@@ -141,9 +140,9 @@ msgstr "操作"
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/nginx_log/NginxLogList.vue:52
 #: src/views/nginx_log/NginxLogList.vue:52
+#: src/views/notification/notificationColumns.tsx:72
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
-#: src/views/site/site_list/columns.tsx:129
-#: src/views/stream/columns.tsx:64
+#: src/views/site/site_list/columns.tsx:129 src/views/stream/columns.tsx:64
 #: src/views/user/userColumns.tsx:58
 #: src/views/user/userColumns.tsx:58
 msgid "Actions"
 msgid "Actions"
 msgstr "操作"
 msgstr "操作"
@@ -158,10 +157,10 @@ msgid "Actual worker to configured ratio"
 msgstr "实际工作进程与配置比例"
 msgstr "实际工作进程与配置比例"
 
 
 #: src/components/NgxConfigEditor/NgxServer.vue:112
 #: src/components/NgxConfigEditor/NgxServer.vue:112
-#: src/components/NgxConfigEditor/NgxUpstream.vue:155 src/language/curd.ts:19
+#: src/components/NgxConfigEditor/NgxUpstream.vue:159 src/language/curd.ts:19
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
-#: src/views/stream/StreamList.vue:120
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "添加"
 msgstr "添加"
 
 
@@ -188,7 +187,7 @@ msgstr "添加 Location"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "添加站点"
 msgstr "添加站点"
 
 
-#: src/views/stream/StreamList.vue:173
+#: src/views/stream/StreamList.vue:174
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "添加 Stream"
 msgstr "添加 Stream"
 
 
@@ -246,7 +245,7 @@ msgstr "应用"
 msgid "Arch"
 msgid "Arch"
 msgstr "\"架构\""
 msgstr "\"架构\""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:161
+#: src/views/preference/tabs/AuthSettings.vue:130
 msgid "Are you sure to delete this banned IP immediately?"
 msgid "Are you sure to delete this banned IP immediately?"
 msgstr "您确定要立即删除这个被禁用的 IP 吗?"
 msgstr "您确定要立即删除这个被禁用的 IP 吗?"
 
 
@@ -275,8 +274,8 @@ msgstr "你确定你要清除聊天记录吗?"
 msgid "Are you sure you want to delete permanently?"
 msgid "Are you sure you want to delete permanently?"
 msgstr "确定要永久删除吗?"
 msgstr "确定要永久删除吗?"
 
 
-#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:99
-#: src/views/stream/StreamList.vue:156
+#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:100
+#: src/views/stream/StreamList.vue:157
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "您确定要删除吗?"
 msgstr "您确定要删除吗?"
 
 
@@ -316,7 +315,7 @@ msgstr "助手"
 msgid "Attempt to fix"
 msgid "Attempt to fix"
 msgstr "尝试修复"
 msgstr "尝试修复"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:20
+#: src/views/preference/tabs/AuthSettings.vue:17
 msgid "Attempts"
 msgid "Attempts"
 msgstr "尝试次数"
 msgstr "尝试次数"
 
 
@@ -328,7 +327,7 @@ msgstr "认证"
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr "通过 Passkey 认证"
 msgstr "通过 Passkey 认证"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:87
+#: src/views/preference/tabs/AuthSettings.vue:56
 msgid "Authentication Settings"
 msgid "Authentication Settings"
 msgstr "认证设置"
 msgstr "认证设置"
 
 
@@ -403,15 +402,15 @@ msgstr "未找到备份文件: {0}"
 msgid "Backup has been downloaded successfully"
 msgid "Backup has been downloaded successfully"
 msgstr "已成功下载备份"
 msgstr "已成功下载备份"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:128
+#: src/views/preference/tabs/AuthSettings.vue:97
 msgid "Ban Threshold Minutes"
 msgid "Ban Threshold Minutes"
 msgstr "禁止阈值(分钟)"
 msgstr "禁止阈值(分钟)"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:149
+#: src/views/preference/tabs/AuthSettings.vue:118
 msgid "Banned IPs"
 msgid "Banned IPs"
 msgstr "禁止 IP 列表"
 msgstr "禁止 IP 列表"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:23
+#: src/views/preference/tabs/AuthSettings.vue:20
 msgid "Banned Until"
 msgid "Banned Until"
 msgstr "禁用至"
 msgstr "禁用至"
 
 
@@ -519,7 +518,7 @@ msgstr "基于 worker_processes * worker_connections 计算得出。实际性能
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
-#: src/views/site/components/SiteStatusSegmented.vue:97
+#: src/views/site/components/SiteStatusSelect.vue:124
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
@@ -637,6 +636,10 @@ msgstr "挑战方法"
 msgid "Change Certificate"
 msgid "Change Certificate"
 msgstr "更改证书"
 msgstr "更改证书"
 
 
+#: src/views/user/UserProfile.vue:181
+msgid "Change Password"
+msgstr "更改密码"
+
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 msgid "Changed Certificate"
 msgid "Changed Certificate"
 msgid_plural "Changed Certificates"
 msgid_plural "Changed Certificates"
@@ -784,13 +787,11 @@ msgstr "清除成功"
 msgid "Click or drag backup file to this area to upload"
 msgid "Click or drag backup file to this area to upload"
 msgstr "单击或拖动备份文件到此区域上传"
 msgstr "单击或拖动备份文件到此区域上传"
 
 
-#: src/language/curd.ts:49
-#: src/language/curd.ts:53
+#: src/language/curd.ts:49 src/language/curd.ts:53
 msgid "Click or drag files to this area to upload"
 msgid "Click or drag files to this area to upload"
 msgstr "点击或拖拽文件到此处上传"
 msgstr "点击或拖拽文件到此处上传"
 
 
-#: src/language/curd.ts:50
-#: src/language/curd.ts:54
+#: src/language/curd.ts:50 src/language/curd.ts:54
 msgid "Click or drag folders to this area to upload"
 msgid "Click or drag folders to this area to upload"
 msgstr "点击或拖拽文件夹到此处上传"
 msgstr "点击或拖拽文件夹到此处上传"
 
 
@@ -910,6 +911,10 @@ msgstr "配置"
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr "配置 SSL"
 msgstr "配置 SSL"
 
 
+#: src/views/user/UserProfile.vue:204
+msgid "Confirm New Password"
+msgstr "确认新密码"
+
 #: src/views/dashboard/Environments.vue:141
 #: src/views/dashboard/Environments.vue:141
 msgid "Connected"
 msgid "Connected"
 msgstr "已连接"
 msgstr "已连接"
@@ -918,7 +923,7 @@ msgstr "已连接"
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "连接错误,正在尝试重新连接..."
 msgstr "连接错误,正在尝试重新连接..."
 
 
-#: src/views/terminal/Terminal.vue:142
+#: src/views/terminal/Terminal.vue:139
 msgid "Connection lost, please refresh the page."
 msgid "Connection lost, please refresh the page."
 msgstr "连接中断,请刷新页面。"
 msgstr "连接中断,请刷新页面。"
 
 
@@ -974,7 +979,7 @@ msgstr "CPU 使用率相对较高,请考虑优化 Nginx 配置"
 msgid "CPU:"
 msgid "CPU:"
 msgstr "CPU:"
 msgstr "CPU:"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:166
+#: src/components/NgxConfigEditor/NgxUpstream.vue:170
 msgid "Create"
 msgid "Create"
 msgstr "创建"
 msgstr "创建"
 
 
@@ -1001,7 +1006,7 @@ msgid ""
 msgstr "创建系统备份,包括 Nginx 配置和 Nginx UI 设置。备份文件将自动下载到你的电脑。"
 msgstr "创建系统备份,包括 Nginx 配置和 Nginx UI 设置。备份文件将自动下载到你的电脑。"
 
 
 #: src/views/environments/group/columns.ts:29
 #: src/views/environments/group/columns.ts:29
-#: src/views/notification/notificationColumns.tsx:45
+#: src/views/notification/notificationColumns.tsx:51
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/user/userColumns.tsx:46
 #: src/views/user/userColumns.tsx:46
@@ -1040,6 +1045,10 @@ msgstr "当前活动连接"
 msgid "Current Content"
 msgid "Current Content"
 msgstr "当前内容"
 msgstr "当前内容"
 
 
+#: src/views/user/UserProfile.vue:186
+msgid "Current Password"
+msgstr "当前密码"
+
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 msgid "Current usage"
 msgid "Current usage"
 msgstr "当前用量"
 msgstr "当前用量"
@@ -1079,8 +1088,8 @@ msgstr "定义共享内存区名称和大小,例如 proxy_cache:10m"
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/views/certificate/components/RemoveCert.vue:88
 #: src/views/certificate/components/RemoveCert.vue:88
-#: src/views/site/site_list/SiteList.vue:108
-#: src/views/stream/StreamList.vue:165
+#: src/views/site/site_list/SiteList.vue:109
+#: src/views/stream/StreamList.vue:166
 msgid "Delete"
 msgid "Delete"
 msgstr "删除"
 msgstr "删除"
 
 
@@ -1157,7 +1166,7 @@ msgstr "目标文件已存在"
 msgid "Destination file: {0} already exists"
 msgid "Destination file: {0} already exists"
 msgstr "目标文件: {0} 已存在"
 msgstr "目标文件: {0} 已存在"
 
 
-#: src/views/notification/notificationColumns.tsx:60
+#: src/views/notification/notificationColumns.tsx:66
 msgid "Details"
 msgid "Details"
 msgstr "详情"
 msgstr "详情"
 
 
@@ -1201,11 +1210,11 @@ msgstr "目录层级"
 msgid "Directory path to store cache files"
 msgid "Directory path to store cache files"
 msgstr "存储缓存文件的目录路径"
 msgstr "存储缓存文件的目录路径"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:88
+#: src/views/site/components/SiteStatusSelect.vue:115
 msgid "disable"
 msgid "disable"
 msgstr "禁用"
 msgstr "禁用"
 
 
-#: src/views/stream/StreamList.vue:136
+#: src/views/stream/StreamList.vue:137
 msgid "Disable"
 msgid "Disable"
 msgstr "禁用"
 msgstr "禁用"
 
 
@@ -1266,7 +1275,7 @@ msgstr "在 %{node} 上禁用 %{name} 成功"
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:134
+#: src/views/site/components/SiteStatusSelect.vue:162
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/stream/components/StreamEditor.vue:30
 #: src/views/stream/components/StreamEditor.vue:30
@@ -1274,7 +1283,7 @@ msgstr "在 %{node} 上禁用 %{name} 成功"
 msgid "Disabled"
 msgid "Disabled"
 msgstr "禁用"
 msgstr "禁用"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:40
+#: src/views/site/components/SiteStatusSelect.vue:67
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/StreamList.vue:56
 #: src/views/stream/StreamList.vue:56
 msgid "Disabled successfully"
 msgid "Disabled successfully"
@@ -1302,7 +1311,7 @@ msgstr "DNS01"
 msgid "Do not enable this option unless you are sure that you need it."
 msgid "Do not enable this option unless you are sure that you need it."
 msgstr "除非确定需要,否则不要启用该选项。"
 msgstr "除非确定需要,否则不要启用该选项。"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:93
+#: src/views/site/components/SiteStatusSelect.vue:120
 msgid "Do you want to %{action} this site?"
 msgid "Do you want to %{action} this site?"
 msgstr "您想将这个网站%{action}吗?"
 msgstr "您想将这个网站%{action}吗?"
 
 
@@ -1377,9 +1386,9 @@ msgid ""
 msgstr "由于某些浏览器的安全策略,除非在 localhost 上使用,否则不能在非 HTTPS 网站上使用 Passkey。"
 msgstr "由于某些浏览器的安全策略,除非在 localhost 上使用,否则不能在非 HTTPS 网站上使用 Passkey。"
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:94
+#: src/views/site/site_list/SiteList.vue:95
 #: src/views/stream/components/StreamDuplicate.vue:64
 #: src/views/stream/components/StreamDuplicate.vue:64
-#: src/views/stream/StreamList.vue:151
+#: src/views/stream/StreamList.vue:152
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "复制"
 msgstr "复制"
 
 
@@ -1423,11 +1432,11 @@ msgstr "邮箱"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "邮箱 (*)"
 msgstr "邮箱 (*)"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:87
+#: src/views/site/components/SiteStatusSelect.vue:114
 msgid "enable"
 msgid "enable"
 msgstr "启用"
 msgstr "启用"
 
 
-#: src/views/stream/StreamList.vue:144
+#: src/views/stream/StreamList.vue:145
 msgid "Enable"
 msgid "Enable"
 msgstr "启用"
 msgstr "启用"
 
 
@@ -1525,7 +1534,7 @@ msgstr "启用 TOTP"
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:130
+#: src/views/site/components/SiteStatusSelect.vue:159
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/stream/components/RightPanel/Basic.vue:62
 #: src/views/stream/components/RightPanel/Basic.vue:62
@@ -1534,7 +1543,7 @@ msgstr "启用 TOTP"
 msgid "Enabled"
 msgid "Enabled"
 msgstr "启用"
 msgstr "启用"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:27
+#: src/views/site/components/SiteStatusSelect.vue:54
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/StreamList.vue:46
 #: src/views/stream/StreamList.vue:46
@@ -1743,23 +1752,23 @@ msgstr "删除证书失败"
 msgid "Failed to delete certificate from database: %{error}"
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "从数据库中删除证书失败:%{error}"
 msgstr "从数据库中删除证书失败:%{error}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:46
+#: src/views/site/components/SiteStatusSelect.vue:73
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/StreamList.vue:60
 #: src/views/stream/StreamList.vue:60
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "禁用失败 %{msg}"
 msgstr "禁用失败 %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:72
+#: src/views/site/components/SiteStatusSelect.vue:99
 msgid "Failed to disable maintenance mode %{msg}"
 msgid "Failed to disable maintenance mode %{msg}"
 msgstr "停用维护模式失败 %{msg}"
 msgstr "停用维护模式失败 %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:33
+#: src/views/site/components/SiteStatusSelect.vue:60
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/StreamList.vue:50
 #: src/views/stream/StreamList.vue:50
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "启用失败 %{msg}"
 msgstr "启用失败 %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:59
+#: src/views/site/components/SiteStatusSelect.vue:86
 msgid "Failed to enable maintenance mode %{msg}"
 msgid "Failed to enable maintenance mode %{msg}"
 msgstr "启用维护模式失败 %{msg}"
 msgstr "启用维护模式失败 %{msg}"
 
 
@@ -2070,7 +2079,7 @@ msgstr "ICP备案号"
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr "如果留空,则使用默认 CA Dir。"
 msgstr "如果留空,则使用默认 CA Dir。"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:144
+#: src/views/preference/tabs/AuthSettings.vue:113
 msgid ""
 msgid ""
 "If the number of login failed attempts from a ip reach the max attempts in "
 "If the number of login failed attempts from a ip reach the max attempts in "
 "ban threshold minutes, the ip will be banned for a period of time."
 "ban threshold minutes, the ip will be banned for a period of time."
@@ -2229,7 +2238,7 @@ msgstr "无效的请求格式"
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "安全令牌格式无效"
 msgstr "安全令牌格式无效"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:17
+#: src/views/preference/tabs/AuthSettings.vue:14
 msgid "IP"
 msgid "IP"
 msgstr "IP"
 msgstr "IP"
 
 
@@ -2342,7 +2351,7 @@ msgstr "列表"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "系统负载:"
 msgstr "系统负载:"
 
 
-#: src/views/environments/list/Environment.vue:80
+#: src/views/environments/list/Environment.vue:81
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "从设置中加载"
 msgstr "从设置中加载"
 
 
@@ -2435,17 +2444,17 @@ msgstr ""
 "定时任务,因此您无需修改本页面的参数。对于使用 Docker 容器安装 Nginx 用户界面的用户,您可以手动启用该选项。Nginx UI "
 "定时任务,因此您无需修改本页面的参数。对于使用 Docker 容器安装 Nginx 用户界面的用户,您可以手动启用该选项。Nginx UI "
 "的定时任务任务调度器将按照您设置的时间间隔(以分钟为单位)执行 logrotate 命令。"
 "的定时任务任务调度器将按照您设置的时间间隔(以分钟为单位)执行 logrotate 命令。"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:138
+#: src/views/site/components/SiteStatusSelect.vue:165
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_list/columns.tsx:118
 #: src/views/site/site_list/columns.tsx:118
 msgid "Maintenance"
 msgid "Maintenance"
 msgstr "维护模式"
 msgstr "维护模式"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:66
+#: src/views/site/components/SiteStatusSelect.vue:93
 msgid "Maintenance mode disabled successfully"
 msgid "Maintenance mode disabled successfully"
 msgstr "成功禁用维护模式"
 msgstr "成功禁用维护模式"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:53
+#: src/views/site/components/SiteStatusSelect.vue:80
 msgid "Maintenance mode enabled successfully"
 msgid "Maintenance mode enabled successfully"
 msgstr "成功启用维护模式"
 msgstr "成功启用维护模式"
 
 
@@ -2510,7 +2519,7 @@ msgstr "主进程"
 msgid "Master Process"
 msgid "Master Process"
 msgstr "主进程"
 msgstr "主进程"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:134
+#: src/views/preference/tabs/AuthSettings.vue:103
 msgid "Max Attempts"
 msgid "Max Attempts"
 msgstr "最大尝试次数"
 msgstr "最大尝试次数"
 
 
@@ -2609,7 +2618,7 @@ msgstr "模块"
 msgid "Multi-line Directive"
 msgid "Multi-line Directive"
 msgstr "多行指令"
 msgstr "多行指令"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:178
+#: src/components/NgxConfigEditor/NgxUpstream.vue:182
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateList/certColumns.tsx:9
 #: src/views/certificate/CertificateList/certColumns.tsx:9
@@ -2626,7 +2635,7 @@ msgstr "多行指令"
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/StreamDuplicate.vue:71
 #: src/views/stream/components/StreamDuplicate.vue:71
-#: src/views/stream/StreamList.vue:178
+#: src/views/stream/StreamList.vue:179
 msgid "Name"
 msgid "Name"
 msgstr "名称"
 msgstr "名称"
 
 
@@ -2658,6 +2667,10 @@ msgstr "新安装"
 msgid "New name"
 msgid "New name"
 msgstr "新名称"
 msgstr "新名称"
 
 
+#: src/views/user/UserProfile.vue:195
+msgid "New Password"
+msgstr "新密码"
+
 #: src/views/config/ConfigEditor.vue:328
 #: src/views/config/ConfigEditor.vue:328
 msgid "New Path"
 msgid "New Path"
 msgstr "新路径"
 msgstr "新路径"
@@ -2871,9 +2884,9 @@ msgstr "检查 nginx.conf 是否包含 streams-enabled 的目录"
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
-#: src/views/preference/tabs/AuthSettings.vue:163
+#: src/views/preference/tabs/AuthSettings.vue:132
 #: src/views/preference/tabs/CertSettings.vue:73
 #: src/views/preference/tabs/CertSettings.vue:73
-#: src/views/site/site_list/SiteList.vue:97 src/views/stream/StreamList.vue:154
+#: src/views/site/site_list/SiteList.vue:98 src/views/stream/StreamList.vue:155
 msgid "No"
 msgid "No"
 msgstr "取消"
 msgstr "取消"
 
 
@@ -3002,6 +3015,7 @@ msgid "Off"
 msgstr "关闭"
 msgstr "关闭"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/components/NgxConfigEditor/NgxUpstream.vue:145
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3013,13 +3027,13 @@ msgstr "离线"
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/views/notification/Notification.vue:39
 #: src/views/notification/Notification.vue:39
-#: src/views/site/components/SiteStatusSegmented.vue:96
+#: src/views/site/components/SiteStatusSelect.vue:123
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
-#: src/views/site/site_list/SiteList.vue:98
+#: src/views/site/site_list/SiteList.vue:99
 #: src/views/stream/components/RightPanel/Basic.vue:46
 #: src/views/stream/components/RightPanel/Basic.vue:46
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:156
 #: src/views/system/Backup/BackupCreator.vue:149
 #: src/views/system/Backup/BackupCreator.vue:149
 msgid "OK"
 msgid "OK"
 msgstr "确定"
 msgstr "确定"
@@ -3135,6 +3149,14 @@ msgstr "用户名和密码错误"
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr "密码长度不能超过 20 个字符"
 msgstr "密码长度不能超过 20 个字符"
 
 
+#: src/views/user/UserProfile.vue:96
+msgid "Password updated successfully"
+msgstr "密码更新成功"
+
+#: src/views/user/UserProfile.vue:75
+msgid "Passwords do not match"
+msgstr "密码不匹配"
+
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
@@ -3174,6 +3196,10 @@ msgstr "性能调优参数保存成功"
 msgid "Performing core upgrade"
 msgid "Performing core upgrade"
 msgstr "正在进行核心升级"
 msgstr "正在进行核心升级"
 
 
+#: src/views/user/UserProfile.vue:121
+msgid "Personal Information"
+msgstr "个人信息"
+
 #: src/constants/errors/self_check.ts:19
 #: src/constants/errors/self_check.ts:19
 msgid "PID path not exist"
 msgid "PID path not exist"
 msgstr "PID 路径不存在"
 msgstr "PID 路径不存在"
@@ -3288,17 +3314,17 @@ msgstr "请选择备份文件"
 msgid "Please select at least one item"
 msgid "Please select at least one item"
 msgstr "请至少选择一项"
 msgstr "请至少选择一项"
 
 
-#: src/views/environments/list/Environment.vue:112
+#: src/views/environments/list/Environment.vue:113
 #: src/views/environments/list/Environment.vue:35
 #: src/views/environments/list/Environment.vue:35
 msgid "Please select at least one node to reload Nginx"
 msgid "Please select at least one node to reload Nginx"
 msgstr "请至少选择一个节点重载 Nginx"
 msgstr "请至少选择一个节点重载 Nginx"
 
 
-#: src/views/environments/list/Environment.vue:133
+#: src/views/environments/list/Environment.vue:134
 #: src/views/environments/list/Environment.vue:49
 #: src/views/environments/list/Environment.vue:49
 msgid "Please select at least one node to restart Nginx"
 msgid "Please select at least one node to restart Nginx"
 msgstr "请至少选择一个节点重启 Nginx"
 msgstr "请至少选择一个节点重启 Nginx"
 
 
-#: src/views/environments/list/Environment.vue:91
+#: src/views/environments/list/Environment.vue:92
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "请至少选择一个节点进行升级"
 msgstr "请至少选择一个节点进行升级"
 
 
@@ -3460,8 +3486,8 @@ msgstr "重载"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/EnvGroup.vue:50
 #: src/views/environments/group/EnvGroup.vue:50
-#: src/views/environments/list/Environment.vue:120
-#: src/views/environments/list/Environment.vue:128
+#: src/views/environments/list/Environment.vue:121
+#: src/views/environments/list/Environment.vue:129
 msgid "Reload Nginx"
 msgid "Reload Nginx"
 msgstr "重载 Nginx"
 msgstr "重载 Nginx"
 
 
@@ -3497,12 +3523,12 @@ msgstr "重载中"
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr "正在重载 Nginx"
 msgstr "正在重载 Nginx"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:168
+#: src/views/preference/tabs/AuthSettings.vue:137
 msgid "Remove"
 msgid "Remove"
 msgstr "删除"
 msgstr "删除"
 
 
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
-#: src/views/preference/tabs/AuthSettings.vue:50
+#: src/views/preference/tabs/AuthSettings.vue:47
 msgid "Remove successfully"
 msgid "Remove successfully"
 msgstr "移除成功"
 msgstr "移除成功"
 
 
@@ -3638,8 +3664,8 @@ msgid "Restart"
 msgstr "重启"
 msgstr "重启"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
-#: src/views/environments/list/Environment.vue:141
-#: src/views/environments/list/Environment.vue:149
+#: src/views/environments/list/Environment.vue:142
+#: src/views/environments/list/Environment.vue:150
 msgid "Restart Nginx"
 msgid "Restart Nginx"
 msgstr "重启 Nginx"
 msgstr "重启 Nginx"
 
 
@@ -3717,15 +3743,15 @@ msgid ""
 "action cannot be undone."
 "action cannot be undone."
 msgstr "撤销证书将影响当前使用该证书的任何服务。该操作无法撤销。"
 msgstr "撤销证书将影响当前使用该证书的任何服务。该操作无法撤销。"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:106
+#: src/views/preference/tabs/AuthSettings.vue:75
 msgid "RP Display Name"
 msgid "RP Display Name"
 msgstr "依赖方显示名称"
 msgstr "依赖方显示名称"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:112
+#: src/views/preference/tabs/AuthSettings.vue:81
 msgid "RP Origins"
 msgid "RP Origins"
 msgstr "依赖方的源"
 msgstr "依赖方的源"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:100
+#: src/views/preference/tabs/AuthSettings.vue:69
 msgid "RPID"
 msgid "RPID"
 msgstr "依赖方 ID"
 msgstr "依赖方 ID"
 
 
@@ -3830,6 +3856,10 @@ msgstr "搜索模块名称"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "密钥已复制"
 msgstr "密钥已复制"
 
 
+#: src/views/user/UserProfile.vue:175
+msgid "Security Settings"
+msgstr "安全设置"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 msgid "Security Token"
 msgid "Security Token"
@@ -3903,7 +3933,7 @@ msgid ""
 "step of DNS challenge."
 "step of DNS challenge."
 msgstr "为 DNS 挑战步骤设置递归域名服务器以覆盖操作系统的域名服务器设置。"
 msgstr "为 DNS 挑战步骤设置递归域名服务器以覆盖操作系统的域名服务器设置。"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:89
+#: src/views/site/components/SiteStatusSelect.vue:116
 msgid "set to maintenance mode"
 msgid "set to maintenance mode"
 msgstr "设置为维护模式"
 msgstr "设置为维护模式"
 
 
@@ -4138,13 +4168,11 @@ msgstr ""
 "支持通过 WebSocket 协议与后端通信,如果您正在使用 Nginx 反向代理了 Nginx UI "
 "支持通过 WebSocket 协议与后端通信,如果您正在使用 Nginx 反向代理了 Nginx UI "
 "请参考:https://nginxui.com/guide/nginx-proxy-example.html 编写配置文件"
 "请参考:https://nginxui.com/guide/nginx-proxy-example.html 编写配置文件"
 
 
-#: src/language/curd.ts:51
-#: src/language/curd.ts:55
+#: src/language/curd.ts:51 src/language/curd.ts:55
 msgid "Support single or batch upload of files"
 msgid "Support single or batch upload of files"
 msgstr "支持单个或多个文件上传"
 msgstr "支持单个或多个文件上传"
 
 
-#: src/language/curd.ts:52
-#: src/language/curd.ts:56
+#: src/language/curd.ts:52 src/language/curd.ts:56
 msgid "Support uploading entire folders"
 msgid "Support uploading entire folders"
 msgstr "支持上传整个文件夹"
 msgstr "支持上传整个文件夹"
 
 
@@ -4452,12 +4480,12 @@ msgstr "这将恢复配置文件和数据库。恢复完成后,Nginx UI 将重
 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr "将 %{nodeNames} 上的 Nginx UI 升级或重新安装到 %{version} 版本。"
 msgstr "将 %{nodeNames} 上的 Nginx UI 升级或重新安装到 %{version} 版本。"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:123
+#: src/views/preference/tabs/AuthSettings.vue:92
 msgid "Throttle"
 msgid "Throttle"
 msgstr "限流"
 msgstr "限流"
 
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
-#: src/views/preference/tabs/AuthSettings.vue:143
+#: src/views/preference/tabs/AuthSettings.vue:112
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 msgid "Tips"
 msgid "Tips"
 msgstr "提示"
 msgstr "提示"
@@ -4468,7 +4496,7 @@ msgid ""
 "worker_processes or worker_connections"
 "worker_processes or worker_connections"
 msgstr "提示您可以通过增加 worker_processes 或 worker_connections 来提高并发处理能力"
 msgstr "提示您可以通过增加 worker_processes 或 worker_connections 来提高并发处理能力"
 
 
-#: src/views/notification/notificationColumns.tsx:52
+#: src/views/notification/notificationColumns.tsx:58
 msgid "Title"
 msgid "Title"
 msgstr "标题"
 msgstr "标题"
 
 
@@ -4578,6 +4606,14 @@ msgstr "类型"
 msgid "Unknown"
 msgid "Unknown"
 msgstr "未知"
 msgstr "未知"
 
 
+#: src/views/user/UserProfile.vue:218
+msgid "Update Password"
+msgstr "更新密码"
+
+#: src/views/user/UserProfile.vue:142
+msgid "Update Profile"
+msgstr "更新资料"
+
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "更新成功"
 msgstr "更新成功"
@@ -4595,8 +4631,8 @@ msgid "Updated at"
 msgstr "修改时间"
 msgstr "修改时间"
 
 
 #: src/routes/modules/system.ts:33
 #: src/routes/modules/system.ts:33
-#: src/views/environments/list/Environment.vue:107
-#: src/views/environments/list/Environment.vue:99
+#: src/views/environments/list/Environment.vue:100
+#: src/views/environments/list/Environment.vue:108
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "升级"
 msgstr "升级"
@@ -4622,7 +4658,7 @@ msgstr "上传文件"
 msgid "Upload Folders"
 msgid "Upload Folders"
 msgstr "上传文件夹"
 msgstr "上传文件夹"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:173
+#: src/components/NgxConfigEditor/NgxUpstream.vue:177
 msgid "Upstream Name"
 msgid "Upstream Name"
 msgstr "Upstream 名称"
 msgstr "Upstream 名称"
 
 
@@ -4654,11 +4690,20 @@ msgstr "用户"
 msgid "User banned"
 msgid "User banned"
 msgstr "用户被禁止"
 msgstr "用户被禁止"
 
 
+#: src/views/user/UserProfile.vue:62
+msgid "User info updated successfully"
+msgstr "用户信息更新成功"
+
 #: src/constants/errors/user.ts:8
 #: src/constants/errors/user.ts:8
 msgid "User not enabled otp as 2fa"
 msgid "User not enabled otp as 2fa"
 msgstr "用户未启用 OTP 作为 2FA"
 msgstr "用户未启用 OTP 作为 2FA"
 
 
+#: src/routes/modules/user.ts:19
+msgid "User Profile"
+msgstr "用户资料"
+
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
+#: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "用户名"
 msgstr "用户名"
 
 
@@ -4742,7 +4787,7 @@ msgid ""
 "the Nginx. Are you sure you want to continue?"
 "the Nginx. Are you sure you want to continue?"
 msgstr "我们将从这个文件中删除HTTPChallenge的配置,并重新加载Nginx。你确定要继续吗?"
 msgstr "我们将从这个文件中删除HTTPChallenge的配置,并重新加载Nginx。你确定要继续吗?"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:96
+#: src/views/preference/tabs/AuthSettings.vue:65
 msgid "Webauthn"
 msgid "Webauthn"
 msgstr "Webauthn"
 msgstr "Webauthn"
 
 
@@ -4815,12 +4860,12 @@ msgstr "正在将证书写入磁盘"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
-#: src/views/preference/tabs/AuthSettings.vue:162
+#: src/views/preference/tabs/AuthSettings.vue:131
 #: src/views/preference/tabs/CertSettings.vue:72
 #: src/views/preference/tabs/CertSettings.vue:72
 msgid "Yes"
 msgid "Yes"
 msgstr "是的"
 msgstr "是的"
 
 
-#: src/views/terminal/Terminal.vue:135
+#: src/views/terminal/Terminal.vue:132
 msgid ""
 msgid ""
 "You are accessing this terminal over an insecure HTTP connection on a "
 "You are accessing this terminal over an insecure HTTP connection on a "
 "non-localhost domain. This may expose sensitive information."
 "non-localhost domain. This may expose sensitive information."
@@ -4908,9 +4953,6 @@ msgstr "你的 Passkeys"
 #~ msgid_plural "Total %{total} items"
 #~ msgid_plural "Total %{total} items"
 #~ msgstr[0] "共 %{total} 个项目"
 #~ msgstr[0] "共 %{total} 个项目"
 
 
-#~ msgid "Updated successfully"
-#~ msgstr "更新成功"
-
 #~ msgid "View Details"
 #~ msgid "View Details"
 #~ msgstr "查看详情"
 #~ msgstr "查看详情"
 
 

+ 127 - 85
app/src/language/zh_TW/app.po

@@ -107,7 +107,7 @@ msgstr "[Nginx UI] 正在將憑證寫入磁碟"
 msgid "2FA"
 msgid "2FA"
 msgstr "雙因素驗證"
 msgstr "雙因素驗證"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:69
+#: src/views/user/UserProfile.vue:151
 msgid "2FA Settings"
 msgid "2FA Settings"
 msgstr "多重要素驗證設定"
 msgstr "多重要素驗證設定"
 
 
@@ -133,8 +133,7 @@ msgstr "存取日誌"
 msgid "ACME User"
 msgid "ACME User"
 msgstr "ACME 使用者"
 msgstr "ACME 使用者"
 
 
-#: src/views/notification/notificationColumns.tsx:66
-#: src/views/preference/tabs/AuthSettings.vue:29
+#: src/views/preference/tabs/AuthSettings.vue:26
 msgid "Action"
 msgid "Action"
 msgstr "操作"
 msgstr "操作"
 
 
@@ -145,9 +144,9 @@ msgstr "操作"
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/group/columns.ts:41
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/environments/list/envColumns.tsx:96
 #: src/views/nginx_log/NginxLogList.vue:52
 #: src/views/nginx_log/NginxLogList.vue:52
+#: src/views/notification/notificationColumns.tsx:72
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
 #: src/views/preference/components/ExternalNotify/columns.tsx:76
-#: src/views/site/site_list/columns.tsx:129
-#: src/views/stream/columns.tsx:64
+#: src/views/site/site_list/columns.tsx:129 src/views/stream/columns.tsx:64
 #: src/views/user/userColumns.tsx:58
 #: src/views/user/userColumns.tsx:58
 msgid "Actions"
 msgid "Actions"
 msgstr "操作"
 msgstr "操作"
@@ -162,10 +161,10 @@ msgid "Actual worker to configured ratio"
 msgstr "實際工作進程與配置比例"
 msgstr "實際工作進程與配置比例"
 
 
 #: src/components/NgxConfigEditor/NgxServer.vue:112
 #: src/components/NgxConfigEditor/NgxServer.vue:112
-#: src/components/NgxConfigEditor/NgxUpstream.vue:155 src/language/curd.ts:19
+#: src/components/NgxConfigEditor/NgxUpstream.vue:159 src/language/curd.ts:19
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/preference/tabs/CertSettings.vue:45
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
 #: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94
-#: src/views/stream/StreamList.vue:120
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "新增"
 msgstr "新增"
 
 
@@ -192,7 +191,7 @@ msgstr "新增 Location"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "新增網站"
 msgstr "新增網站"
 
 
-#: src/views/stream/StreamList.vue:173
+#: src/views/stream/StreamList.vue:174
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "新增 Stream"
 msgstr "新增 Stream"
 
 
@@ -250,7 +249,7 @@ msgstr "應用"
 msgid "Arch"
 msgid "Arch"
 msgstr "\"架構\""
 msgstr "\"架構\""
 
 
-#: src/views/preference/tabs/AuthSettings.vue:161
+#: src/views/preference/tabs/AuthSettings.vue:130
 msgid "Are you sure to delete this banned IP immediately?"
 msgid "Are you sure to delete this banned IP immediately?"
 msgstr "您確定要刪除這個被停用的 IP 嗎?"
 msgstr "您確定要刪除這個被停用的 IP 嗎?"
 
 
@@ -279,8 +278,8 @@ msgstr "您確定要清除聊天記錄嗎?"
 msgid "Are you sure you want to delete permanently?"
 msgid "Are you sure you want to delete permanently?"
 msgstr "確定要永久刪除嗎?"
 msgstr "確定要永久刪除嗎?"
 
 
-#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:99
-#: src/views/stream/StreamList.vue:156
+#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:100
+#: src/views/stream/StreamList.vue:157
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "您確定要刪除嗎?"
 msgstr "您確定要刪除嗎?"
 
 
@@ -320,7 +319,7 @@ msgstr "助理"
 msgid "Attempt to fix"
 msgid "Attempt to fix"
 msgstr "嘗試修復"
 msgstr "嘗試修復"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:20
+#: src/views/preference/tabs/AuthSettings.vue:17
 msgid "Attempts"
 msgid "Attempts"
 msgstr "嘗試次數"
 msgstr "嘗試次數"
 
 
@@ -332,7 +331,7 @@ msgstr "身份驗證"
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr "使用通行金鑰認證"
 msgstr "使用通行金鑰認證"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:87
+#: src/views/preference/tabs/AuthSettings.vue:56
 msgid "Authentication Settings"
 msgid "Authentication Settings"
 msgstr "認證設定"
 msgstr "認證設定"
 
 
@@ -407,15 +406,15 @@ msgstr "找不到備份檔案: {0}"
 msgid "Backup has been downloaded successfully"
 msgid "Backup has been downloaded successfully"
 msgstr "備份已成功下載"
 msgstr "備份已成功下載"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:128
+#: src/views/preference/tabs/AuthSettings.vue:97
 msgid "Ban Threshold Minutes"
 msgid "Ban Threshold Minutes"
 msgstr "封禁閾值分鐘數"
 msgstr "封禁閾值分鐘數"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:149
+#: src/views/preference/tabs/AuthSettings.vue:118
 msgid "Banned IPs"
 msgid "Banned IPs"
 msgstr "被禁止的 IP"
 msgstr "被禁止的 IP"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:23
+#: src/views/preference/tabs/AuthSettings.vue:20
 msgid "Banned Until"
 msgid "Banned Until"
 msgstr "禁止至"
 msgstr "禁止至"
 
 
@@ -523,7 +522,7 @@ msgstr "基於 worker_processes * worker_connections 計算得出。實際效能
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxServer.vue:54
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/components/NgxConfigEditor/NgxUpstream.vue:37
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
 #: src/views/preference/components/AuthSettings/Passkey.vue:141
-#: src/views/site/components/SiteStatusSegmented.vue:97
+#: src/views/site/components/SiteStatusSelect.vue:124
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:143
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21
@@ -641,6 +640,10 @@ msgstr "驗證方式"
 msgid "Change Certificate"
 msgid "Change Certificate"
 msgstr "更換憑證"
 msgstr "更換憑證"
 
 
+#: src/views/user/UserProfile.vue:181
+msgid "Change Password"
+msgstr "更改密碼"
+
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 #: src/views/site/site_edit/components/Cert/Cert.vue:77
 msgid "Changed Certificate"
 msgid "Changed Certificate"
 msgid_plural "Changed Certificates"
 msgid_plural "Changed Certificates"
@@ -788,13 +791,11 @@ msgstr "清除成功"
 msgid "Click or drag backup file to this area to upload"
 msgid "Click or drag backup file to this area to upload"
 msgstr "點選或拖曳備份檔案至此區域上傳"
 msgstr "點選或拖曳備份檔案至此區域上傳"
 
 
-#: src/language/curd.ts:49
-#: src/language/curd.ts:53
+#: src/language/curd.ts:49 src/language/curd.ts:53
 msgid "Click or drag files to this area to upload"
 msgid "Click or drag files to this area to upload"
 msgstr "點擊或拖拽文件到此處上傳"
 msgstr "點擊或拖拽文件到此處上傳"
 
 
-#: src/language/curd.ts:50
-#: src/language/curd.ts:54
+#: src/language/curd.ts:50 src/language/curd.ts:54
 msgid "Click or drag folders to this area to upload"
 msgid "Click or drag folders to this area to upload"
 msgstr "點擊或拖拽文件夾到此處上傳"
 msgstr "點擊或拖拽文件夾到此處上傳"
 
 
@@ -914,6 +915,10 @@ msgstr "設定"
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr "設定 SSL"
 msgstr "設定 SSL"
 
 
+#: src/views/user/UserProfile.vue:204
+msgid "Confirm New Password"
+msgstr "確認新密碼"
+
 #: src/views/dashboard/Environments.vue:141
 #: src/views/dashboard/Environments.vue:141
 msgid "Connected"
 msgid "Connected"
 msgstr "已連線"
 msgstr "已連線"
@@ -922,7 +927,7 @@ msgstr "已連線"
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "連線錯誤,正在嘗試重新連線..."
 msgstr "連線錯誤,正在嘗試重新連線..."
 
 
-#: src/views/terminal/Terminal.vue:142
+#: src/views/terminal/Terminal.vue:139
 msgid "Connection lost, please refresh the page."
 msgid "Connection lost, please refresh the page."
 msgstr "連線中斷,請重新整理此頁面。"
 msgstr "連線中斷,請重新整理此頁面。"
 
 
@@ -978,7 +983,7 @@ msgstr "CPU 使用率較高,建議優化 Nginx 配置"
 msgid "CPU:"
 msgid "CPU:"
 msgstr "CPU:"
 msgstr "CPU:"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:166
+#: src/components/NgxConfigEditor/NgxUpstream.vue:170
 msgid "Create"
 msgid "Create"
 msgstr "建立"
 msgstr "建立"
 
 
@@ -1005,7 +1010,7 @@ msgid ""
 msgstr "建立系統備份,包括 Nginx 設定與 Nginx UI 設定。備份檔案將自動下載至您的電腦。"
 msgstr "建立系統備份,包括 Nginx 設定與 Nginx UI 設定。備份檔案將自動下載至您的電腦。"
 
 
 #: src/views/environments/group/columns.ts:29
 #: src/views/environments/group/columns.ts:29
-#: src/views/notification/notificationColumns.tsx:45
+#: src/views/notification/notificationColumns.tsx:51
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/AuthSettings/Passkey.vue:95
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/preference/components/ExternalNotify/columns.tsx:71
 #: src/views/user/userColumns.tsx:46
 #: src/views/user/userColumns.tsx:46
@@ -1044,6 +1049,10 @@ msgstr "目前使用中連線數"
 msgid "Current Content"
 msgid "Current Content"
 msgstr "目前內容"
 msgstr "目前內容"
 
 
+#: src/views/user/UserProfile.vue:186
+msgid "Current Password"
+msgstr "當前密碼"
+
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 #: src/views/dashboard/components/PerformanceStatisticsCard.vue:65
 msgid "Current usage"
 msgid "Current usage"
 msgstr "目前用量"
 msgstr "目前用量"
@@ -1083,8 +1092,8 @@ msgstr "定義共享記憶體區域名稱和大小,例如 proxy_cache:10m"
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxServer.vue:78
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/components/NgxConfigEditor/NgxUpstream.vue:129 src/language/curd.ts:9
 #: src/views/certificate/components/RemoveCert.vue:88
 #: src/views/certificate/components/RemoveCert.vue:88
-#: src/views/site/site_list/SiteList.vue:108
-#: src/views/stream/StreamList.vue:165
+#: src/views/site/site_list/SiteList.vue:109
+#: src/views/stream/StreamList.vue:166
 msgid "Delete"
 msgid "Delete"
 msgstr "刪除"
 msgstr "刪除"
 
 
@@ -1161,7 +1170,7 @@ msgstr "目的檔案已存在"
 msgid "Destination file: {0} already exists"
 msgid "Destination file: {0} already exists"
 msgstr "目標檔案: {0} 已存在"
 msgstr "目標檔案: {0} 已存在"
 
 
-#: src/views/notification/notificationColumns.tsx:60
+#: src/views/notification/notificationColumns.tsx:66
 msgid "Details"
 msgid "Details"
 msgstr "細節"
 msgstr "細節"
 
 
@@ -1205,11 +1214,11 @@ msgstr "目錄層級"
 msgid "Directory path to store cache files"
 msgid "Directory path to store cache files"
 msgstr "儲存快取檔案的目錄路徑"
 msgstr "儲存快取檔案的目錄路徑"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:88
+#: src/views/site/components/SiteStatusSelect.vue:115
 msgid "disable"
 msgid "disable"
 msgstr "禁用"
 msgstr "禁用"
 
 
-#: src/views/stream/StreamList.vue:136
+#: src/views/stream/StreamList.vue:137
 msgid "Disable"
 msgid "Disable"
 msgstr "停用"
 msgstr "停用"
 
 
@@ -1270,7 +1279,7 @@ msgstr "已成功從 %{node} 停用串流 %{name}"
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/HTTPSettings.vue:24
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:134
+#: src/views/site/components/SiteStatusSelect.vue:162
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/site/site_list/columns.tsx:114 src/views/stream/columns.tsx:48
 #: src/views/stream/components/StreamEditor.vue:30
 #: src/views/stream/components/StreamEditor.vue:30
@@ -1278,7 +1287,7 @@ msgstr "已成功從 %{node} 停用串流 %{name}"
 msgid "Disabled"
 msgid "Disabled"
 msgstr "停用"
 msgstr "停用"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:40
+#: src/views/site/components/SiteStatusSelect.vue:67
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/components/RightPanel/Basic.vue:34
 #: src/views/stream/StreamList.vue:56
 #: src/views/stream/StreamList.vue:56
 msgid "Disabled successfully"
 msgid "Disabled successfully"
@@ -1306,7 +1315,7 @@ msgstr "DNS01"
 msgid "Do not enable this option unless you are sure that you need it."
 msgid "Do not enable this option unless you are sure that you need it."
 msgstr "除非您確定需要,否則不要啟用此選項。"
 msgstr "除非您確定需要,否則不要啟用此選項。"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:93
+#: src/views/site/components/SiteStatusSelect.vue:120
 msgid "Do you want to %{action} this site?"
 msgid "Do you want to %{action} this site?"
 msgstr "您想要%{action}這個網站嗎?"
 msgstr "您想要%{action}這個網站嗎?"
 
 
@@ -1381,9 +1390,9 @@ msgid ""
 msgstr "基於部分瀏覽器的安全政策,您無法在未啟用 HTTPS 網站,特別是 localhost 上使用通行金鑰。"
 msgstr "基於部分瀏覽器的安全政策,您無法在未啟用 HTTPS 網站,特別是 localhost 上使用通行金鑰。"
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:94
+#: src/views/site/site_list/SiteList.vue:95
 #: src/views/stream/components/StreamDuplicate.vue:64
 #: src/views/stream/components/StreamDuplicate.vue:64
-#: src/views/stream/StreamList.vue:151
+#: src/views/stream/StreamList.vue:152
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "複製"
 msgstr "複製"
 
 
@@ -1427,11 +1436,11 @@ msgstr "電子郵件"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "電子郵件 (*)"
 msgstr "電子郵件 (*)"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:87
+#: src/views/site/components/SiteStatusSelect.vue:114
 msgid "enable"
 msgid "enable"
 msgstr "啟用"
 msgstr "啟用"
 
 
-#: src/views/stream/StreamList.vue:144
+#: src/views/stream/StreamList.vue:145
 msgid "Enable"
 msgid "Enable"
 msgstr "啟用"
 msgstr "啟用"
 
 
@@ -1529,7 +1538,7 @@ msgstr "啟用 TOTP"
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/LogrotateSettings.vue:20
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:25
 #: src/views/preference/tabs/NodeSettings.vue:30
 #: src/views/preference/tabs/NodeSettings.vue:30
-#: src/views/site/components/SiteStatusSegmented.vue:130
+#: src/views/site/components/SiteStatusSelect.vue:159
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/site/site_list/columns.tsx:110 src/views/stream/columns.tsx:44
 #: src/views/stream/components/RightPanel/Basic.vue:62
 #: src/views/stream/components/RightPanel/Basic.vue:62
@@ -1538,7 +1547,7 @@ msgstr "啟用 TOTP"
 msgid "Enabled"
 msgid "Enabled"
 msgstr "已啟用"
 msgstr "已啟用"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:27
+#: src/views/site/components/SiteStatusSelect.vue:54
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/site/site_add/SiteAdd.vue:32
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/components/RightPanel/Basic.vue:25
 #: src/views/stream/StreamList.vue:46
 #: src/views/stream/StreamList.vue:46
@@ -1747,23 +1756,23 @@ msgstr "憑證刪除失敗"
 msgid "Failed to delete certificate from database: %{error}"
 msgid "Failed to delete certificate from database: %{error}"
 msgstr "從資料庫刪除憑證失敗: %{error}"
 msgstr "從資料庫刪除憑證失敗: %{error}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:46
+#: src/views/site/components/SiteStatusSelect.vue:73
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/components/RightPanel/Basic.vue:37
 #: src/views/stream/StreamList.vue:60
 #: src/views/stream/StreamList.vue:60
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "停用 %{msg} 失敗"
 msgstr "停用 %{msg} 失敗"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:72
+#: src/views/site/components/SiteStatusSelect.vue:99
 msgid "Failed to disable maintenance mode %{msg}"
 msgid "Failed to disable maintenance mode %{msg}"
 msgstr "無法停用維護模式 %{msg}"
 msgstr "無法停用維護模式 %{msg}"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:33
+#: src/views/site/components/SiteStatusSelect.vue:60
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/components/RightPanel/Basic.vue:28
 #: src/views/stream/StreamList.vue:50
 #: src/views/stream/StreamList.vue:50
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "啟用 %{msg} 失敗"
 msgstr "啟用 %{msg} 失敗"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:59
+#: src/views/site/components/SiteStatusSelect.vue:86
 msgid "Failed to enable maintenance mode %{msg}"
 msgid "Failed to enable maintenance mode %{msg}"
 msgstr "無法啟用維護模式 %{msg}"
 msgstr "無法啟用維護模式 %{msg}"
 
 
@@ -2074,7 +2083,7 @@ msgstr "ICP 編號"
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr "如果留空,將使用預設的 CA Dir。"
 msgstr "如果留空,將使用預設的 CA Dir。"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:144
+#: src/views/preference/tabs/AuthSettings.vue:113
 msgid ""
 msgid ""
 "If the number of login failed attempts from a ip reach the max attempts in "
 "If the number of login failed attempts from a ip reach the max attempts in "
 "ban threshold minutes, the ip will be banned for a period of time."
 "ban threshold minutes, the ip will be banned for a period of time."
@@ -2233,7 +2242,7 @@ msgstr "無效的請求格式"
 msgid "Invalid security token format"
 msgid "Invalid security token format"
 msgstr "無效的安全令牌格式"
 msgstr "無效的安全令牌格式"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:17
+#: src/views/preference/tabs/AuthSettings.vue:14
 msgid "IP"
 msgid "IP"
 msgstr "IP"
 msgstr "IP"
 
 
@@ -2346,7 +2355,7 @@ msgstr "列表"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "負載平均值:"
 msgstr "負載平均值:"
 
 
-#: src/views/environments/list/Environment.vue:80
+#: src/views/environments/list/Environment.vue:81
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "從設定載入"
 msgstr "從設定載入"
 
 
@@ -2439,17 +2448,17 @@ msgstr ""
 "logrotate,因此您無需修改此頁面的參數。對於使用 Docker 容器安裝 Nginx UI 的使用者,您可以手動啟用此選項。Nginx UI "
 "logrotate,因此您無需修改此頁面的參數。對於使用 Docker 容器安裝 Nginx UI 的使用者,您可以手動啟用此選項。Nginx UI "
 "的 crontab 任務排程器將按照您設定的分鐘間隔執行 logrotate 命令。"
 "的 crontab 任務排程器將按照您設定的分鐘間隔執行 logrotate 命令。"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:138
+#: src/views/site/components/SiteStatusSelect.vue:165
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68
 #: src/views/site/site_list/columns.tsx:118
 #: src/views/site/site_list/columns.tsx:118
 msgid "Maintenance"
 msgid "Maintenance"
 msgstr "維護"
 msgstr "維護"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:66
+#: src/views/site/components/SiteStatusSelect.vue:93
 msgid "Maintenance mode disabled successfully"
 msgid "Maintenance mode disabled successfully"
 msgstr "維護模式已成功停用"
 msgstr "維護模式已成功停用"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:53
+#: src/views/site/components/SiteStatusSelect.vue:80
 msgid "Maintenance mode enabled successfully"
 msgid "Maintenance mode enabled successfully"
 msgstr "維護模式已成功啟用"
 msgstr "維護模式已成功啟用"
 
 
@@ -2514,7 +2523,7 @@ msgstr "主行程"
 msgid "Master Process"
 msgid "Master Process"
 msgstr "主行程"
 msgstr "主行程"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:134
+#: src/views/preference/tabs/AuthSettings.vue:103
 msgid "Max Attempts"
 msgid "Max Attempts"
 msgstr "最大嘗試次數"
 msgstr "最大嘗試次數"
 
 
@@ -2613,7 +2622,7 @@ msgstr "模組"
 msgid "Multi-line Directive"
 msgid "Multi-line Directive"
 msgstr "多行指令"
 msgstr "多行指令"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:178
+#: src/components/NgxConfigEditor/NgxUpstream.vue:182
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/ACMEUser.vue:11
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateEditor.vue:162
 #: src/views/certificate/CertificateList/certColumns.tsx:9
 #: src/views/certificate/CertificateList/certColumns.tsx:9
@@ -2630,7 +2639,7 @@ msgstr "多行指令"
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/columns.tsx:10
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/RightPanel/Basic.vue:69
 #: src/views/stream/components/StreamDuplicate.vue:71
 #: src/views/stream/components/StreamDuplicate.vue:71
-#: src/views/stream/StreamList.vue:178
+#: src/views/stream/StreamList.vue:179
 msgid "Name"
 msgid "Name"
 msgstr "名稱"
 msgstr "名稱"
 
 
@@ -2662,6 +2671,10 @@ msgstr "新安裝"
 msgid "New name"
 msgid "New name"
 msgstr "新名稱"
 msgstr "新名稱"
 
 
+#: src/views/user/UserProfile.vue:195
+msgid "New Password"
+msgstr "新密碼"
+
 #: src/views/config/ConfigEditor.vue:328
 #: src/views/config/ConfigEditor.vue:328
 msgid "New Path"
 msgid "New Path"
 msgstr "新路徑"
 msgstr "新路徑"
@@ -2875,9 +2888,9 @@ msgstr "Nginx.conf 包含 streams-enabled 目錄"
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:109 src/language/curd.ts:38
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
-#: src/views/preference/tabs/AuthSettings.vue:163
+#: src/views/preference/tabs/AuthSettings.vue:132
 #: src/views/preference/tabs/CertSettings.vue:73
 #: src/views/preference/tabs/CertSettings.vue:73
-#: src/views/site/site_list/SiteList.vue:97 src/views/stream/StreamList.vue:154
+#: src/views/site/site_list/SiteList.vue:98 src/views/stream/StreamList.vue:155
 msgid "No"
 msgid "No"
 msgstr "取消"
 msgstr "取消"
 
 
@@ -3006,6 +3019,7 @@ msgid "Off"
 msgstr "關"
 msgstr "關"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/components/NgxConfigEditor/NgxUpstream.vue:145
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3017,13 +3031,13 @@ msgstr "離線"
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/NgxConfigEditor/NgxUpstream.vue:36
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/components/Notification/Notification.vue:110 src/language/curd.ts:15
 #: src/views/notification/Notification.vue:39
 #: src/views/notification/Notification.vue:39
-#: src/views/site/components/SiteStatusSegmented.vue:96
+#: src/views/site/components/SiteStatusSelect.vue:123
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20
-#: src/views/site/site_list/SiteList.vue:98
+#: src/views/site/site_list/SiteList.vue:99
 #: src/views/stream/components/RightPanel/Basic.vue:46
 #: src/views/stream/components/RightPanel/Basic.vue:46
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:156
 #: src/views/system/Backup/BackupCreator.vue:149
 #: src/views/system/Backup/BackupCreator.vue:149
 msgid "OK"
 msgid "OK"
 msgstr "確定"
 msgstr "確定"
@@ -3141,6 +3155,14 @@ msgstr "密碼錯誤"
 msgid "Password length cannot exceed 20 characters"
 msgid "Password length cannot exceed 20 characters"
 msgstr "密碼長度不能超過 20 個字元"
 msgstr "密碼長度不能超過 20 個字元"
 
 
+#: src/views/user/UserProfile.vue:96
+msgid "Password updated successfully"
+msgstr "密碼更新成功"
+
+#: src/views/user/UserProfile.vue:75
+msgid "Passwords do not match"
+msgstr "密碼不匹配"
+
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:110
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/components/NgxConfigEditor/LocationEditor.vue:138
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
 #: src/language/curd.ts:59 src/views/config/ConfigEditor.vue:322
@@ -3180,6 +3202,10 @@ msgstr "效能設定已成功儲存"
 msgid "Performing core upgrade"
 msgid "Performing core upgrade"
 msgstr "正在執行核心升級"
 msgstr "正在執行核心升級"
 
 
+#: src/views/user/UserProfile.vue:121
+msgid "Personal Information"
+msgstr "個人資訊"
+
 #: src/constants/errors/self_check.ts:19
 #: src/constants/errors/self_check.ts:19
 msgid "PID path not exist"
 msgid "PID path not exist"
 msgstr "PID 路徑不存在"
 msgstr "PID 路徑不存在"
@@ -3294,17 +3320,17 @@ msgstr "請選擇備份檔案"
 msgid "Please select at least one item"
 msgid "Please select at least one item"
 msgstr "請至少選擇一項"
 msgstr "請至少選擇一項"
 
 
-#: src/views/environments/list/Environment.vue:112
+#: src/views/environments/list/Environment.vue:113
 #: src/views/environments/list/Environment.vue:35
 #: src/views/environments/list/Environment.vue:35
 msgid "Please select at least one node to reload Nginx"
 msgid "Please select at least one node to reload Nginx"
 msgstr "請至少選擇一個節點以重新載入 Nginx"
 msgstr "請至少選擇一個節點以重新載入 Nginx"
 
 
-#: src/views/environments/list/Environment.vue:133
+#: src/views/environments/list/Environment.vue:134
 #: src/views/environments/list/Environment.vue:49
 #: src/views/environments/list/Environment.vue:49
 msgid "Please select at least one node to restart Nginx"
 msgid "Please select at least one node to restart Nginx"
 msgstr "請至少選擇一個節點以重啟 Nginx"
 msgstr "請至少選擇一個節點以重啟 Nginx"
 
 
-#: src/views/environments/list/Environment.vue:91
+#: src/views/environments/list/Environment.vue:92
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "請至少選擇一個節點進行升級"
 msgstr "請至少選擇一個節點進行升級"
 
 
@@ -3466,8 +3492,8 @@ msgstr "重新載入"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/columns.ts:22
 #: src/views/environments/group/EnvGroup.vue:50
 #: src/views/environments/group/EnvGroup.vue:50
-#: src/views/environments/list/Environment.vue:120
-#: src/views/environments/list/Environment.vue:128
+#: src/views/environments/list/Environment.vue:121
+#: src/views/environments/list/Environment.vue:129
 msgid "Reload Nginx"
 msgid "Reload Nginx"
 msgstr "重新載入 Nginx"
 msgstr "重新載入 Nginx"
 
 
@@ -3503,12 +3529,12 @@ msgstr "重新載入中"
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr "正在重新載入 Nginx"
 msgstr "正在重新載入 Nginx"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:168
+#: src/views/preference/tabs/AuthSettings.vue:137
 msgid "Remove"
 msgid "Remove"
 msgstr "移除"
 msgstr "移除"
 
 
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
 #: src/views/preference/components/AuthSettings/Passkey.vue:46
-#: src/views/preference/tabs/AuthSettings.vue:50
+#: src/views/preference/tabs/AuthSettings.vue:47
 msgid "Remove successfully"
 msgid "Remove successfully"
 msgstr "移除成功"
 msgstr "移除成功"
 
 
@@ -3644,8 +3670,8 @@ msgid "Restart"
 msgstr "重新啟動"
 msgstr "重新啟動"
 
 
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
-#: src/views/environments/list/Environment.vue:141
-#: src/views/environments/list/Environment.vue:149
+#: src/views/environments/list/Environment.vue:142
+#: src/views/environments/list/Environment.vue:150
 msgid "Restart Nginx"
 msgid "Restart Nginx"
 msgstr "重新啟動 Nginx"
 msgstr "重新啟動 Nginx"
 
 
@@ -3723,15 +3749,15 @@ msgid ""
 "action cannot be undone."
 "action cannot be undone."
 msgstr "撤銷憑證將會影響目前使用它的所有服務。此動作無法復原。"
 msgstr "撤銷憑證將會影響目前使用它的所有服務。此動作無法復原。"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:106
+#: src/views/preference/tabs/AuthSettings.vue:75
 msgid "RP Display Name"
 msgid "RP Display Name"
 msgstr "RP 顯示名稱"
 msgstr "RP 顯示名稱"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:112
+#: src/views/preference/tabs/AuthSettings.vue:81
 msgid "RP Origins"
 msgid "RP Origins"
 msgstr "RP 源站"
 msgstr "RP 源站"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:100
+#: src/views/preference/tabs/AuthSettings.vue:69
 msgid "RPID"
 msgid "RPID"
 msgstr "RPID"
 msgstr "RPID"
 
 
@@ -3836,6 +3862,10 @@ msgstr "搜尋模組名稱"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "金鑰已複製"
 msgstr "金鑰已複製"
 
 
+#: src/views/user/UserProfile.vue:175
+msgid "Security Settings"
+msgstr "安全設定"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:207
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 #: src/components/SystemRestore/SystemRestoreContent.vue:284
 msgid "Security Token"
 msgid "Security Token"
@@ -3909,7 +3939,7 @@ msgid ""
 "step of DNS challenge."
 "step of DNS challenge."
 msgstr "設定遞迴名稱伺服器以覆蓋系統名稱伺服器以進行 DNS 驗證步驟。"
 msgstr "設定遞迴名稱伺服器以覆蓋系統名稱伺服器以進行 DNS 驗證步驟。"
 
 
-#: src/views/site/components/SiteStatusSegmented.vue:89
+#: src/views/site/components/SiteStatusSelect.vue:116
 msgid "set to maintenance mode"
 msgid "set to maintenance mode"
 msgstr "設定為維護模式"
 msgstr "設定為維護模式"
 
 
@@ -4144,13 +4174,11 @@ msgstr ""
 "支援透過 WebSocket 協議與後端進行通訊。如果您的 Nginx UI 是透過 Nginx "
 "支援透過 WebSocket 協議與後端進行通訊。如果您的 Nginx UI 是透過 Nginx "
 "反向代理使用,請參考此連結編寫對應的設定文件:https://nginxui.com/guide/nginx-proxy-example.html"
 "反向代理使用,請參考此連結編寫對應的設定文件:https://nginxui.com/guide/nginx-proxy-example.html"
 
 
-#: src/language/curd.ts:51
-#: src/language/curd.ts:55
+#: src/language/curd.ts:51 src/language/curd.ts:55
 msgid "Support single or batch upload of files"
 msgid "Support single or batch upload of files"
 msgstr "支援單個或多個檔案上傳"
 msgstr "支援單個或多個檔案上傳"
 
 
-#: src/language/curd.ts:52
-#: src/language/curd.ts:56
+#: src/language/curd.ts:52 src/language/curd.ts:56
 msgid "Support uploading entire folders"
 msgid "Support uploading entire folders"
 msgstr "支援上傳整個資料夾"
 msgstr "支援上傳整個資料夾"
 
 
@@ -4458,12 +4486,12 @@ msgstr "這將恢復設定檔案和資料庫。恢復完成後,Nginx UI 將重
 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr "這將在 %{nodeNames} 上升級或重新安裝 Nginx UI 到 %{version}。"
 msgstr "這將在 %{nodeNames} 上升級或重新安裝 Nginx UI 到 %{version}。"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:123
+#: src/views/preference/tabs/AuthSettings.vue:92
 msgid "Throttle"
 msgid "Throttle"
 msgstr "節流"
 msgstr "節流"
 
 
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:65
-#: src/views/preference/tabs/AuthSettings.vue:143
+#: src/views/preference/tabs/AuthSettings.vue:112
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 #: src/views/preference/tabs/LogrotateSettings.vue:12
 msgid "Tips"
 msgid "Tips"
 msgstr "提示"
 msgstr "提示"
@@ -4474,7 +4502,7 @@ msgid ""
 "worker_processes or worker_connections"
 "worker_processes or worker_connections"
 msgstr "提示:您可以通過增加 worker_processes 或 worker_connections 來提高並行處理能力"
 msgstr "提示:您可以通過增加 worker_processes 或 worker_connections 來提高並行處理能力"
 
 
-#: src/views/notification/notificationColumns.tsx:52
+#: src/views/notification/notificationColumns.tsx:58
 msgid "Title"
 msgid "Title"
 msgstr "標題"
 msgstr "標題"
 
 
@@ -4584,6 +4612,14 @@ msgstr "類型"
 msgid "Unknown"
 msgid "Unknown"
 msgstr "未知"
 msgstr "未知"
 
 
+#: src/views/user/UserProfile.vue:218
+msgid "Update Password"
+msgstr "更新密碼"
+
+#: src/views/user/UserProfile.vue:142
+msgid "Update Profile"
+msgstr "更新資料"
+
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 #: src/views/preference/components/AuthSettings/Passkey.vue:39
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "更新成功"
 msgstr "更新成功"
@@ -4601,8 +4637,8 @@ msgid "Updated at"
 msgstr "更新時間"
 msgstr "更新時間"
 
 
 #: src/routes/modules/system.ts:33
 #: src/routes/modules/system.ts:33
-#: src/views/environments/list/Environment.vue:107
-#: src/views/environments/list/Environment.vue:99
+#: src/views/environments/list/Environment.vue:100
+#: src/views/environments/list/Environment.vue:108
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 #: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "升級"
 msgstr "升級"
@@ -4628,7 +4664,7 @@ msgstr "上傳檔案"
 msgid "Upload Folders"
 msgid "Upload Folders"
 msgstr "上傳資料夾"
 msgstr "上傳資料夾"
 
 
-#: src/components/NgxConfigEditor/NgxUpstream.vue:173
+#: src/components/NgxConfigEditor/NgxUpstream.vue:177
 msgid "Upstream Name"
 msgid "Upstream Name"
 msgstr "Upstream 名稱"
 msgstr "Upstream 名稱"
 
 
@@ -4660,11 +4696,20 @@ msgstr "使用者名稱"
 msgid "User banned"
 msgid "User banned"
 msgstr "使用者被禁止"
 msgstr "使用者被禁止"
 
 
+#: src/views/user/UserProfile.vue:62
+msgid "User info updated successfully"
+msgstr "用戶資訊更新成功"
+
 #: src/constants/errors/user.ts:8
 #: src/constants/errors/user.ts:8
 msgid "User not enabled otp as 2fa"
 msgid "User not enabled otp as 2fa"
 msgstr "使用者未啟用 OTP 作為雙重身份驗證 (2FA)"
 msgstr "使用者未啟用 OTP 作為雙重身份驗證 (2FA)"
 
 
+#: src/routes/modules/user.ts:19
+msgid "User Profile"
+msgstr "用戶資料"
+
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
 #: src/views/other/Login.vue:173 src/views/user/userColumns.tsx:7
+#: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "使用者名稱"
 msgstr "使用者名稱"
 
 
@@ -4748,7 +4793,7 @@ msgid ""
 "the Nginx. Are you sure you want to continue?"
 "the Nginx. Are you sure you want to continue?"
 msgstr "我們將從該檔案中刪除 HTTPChallenge 設定並重新載入 Nginx 設定檔案。你確定你要繼續嗎?"
 msgstr "我們將從該檔案中刪除 HTTPChallenge 設定並重新載入 Nginx 設定檔案。你確定你要繼續嗎?"
 
 
-#: src/views/preference/tabs/AuthSettings.vue:96
+#: src/views/preference/tabs/AuthSettings.vue:65
 msgid "Webauthn"
 msgid "Webauthn"
 msgstr "Webauthn"
 msgstr "Webauthn"
 
 
@@ -4821,12 +4866,12 @@ msgstr "將憑證寫入磁碟"
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
 #: src/components/NgxConfigEditor/LocationEditor.vue:88
-#: src/views/preference/tabs/AuthSettings.vue:162
+#: src/views/preference/tabs/AuthSettings.vue:131
 #: src/views/preference/tabs/CertSettings.vue:72
 #: src/views/preference/tabs/CertSettings.vue:72
 msgid "Yes"
 msgid "Yes"
 msgstr "是的"
 msgstr "是的"
 
 
-#: src/views/terminal/Terminal.vue:135
+#: src/views/terminal/Terminal.vue:132
 msgid ""
 msgid ""
 "You are accessing this terminal over an insecure HTTP connection on a "
 "You are accessing this terminal over an insecure HTTP connection on a "
 "non-localhost domain. This may expose sensitive information."
 "non-localhost domain. This may expose sensitive information."
@@ -4914,9 +4959,6 @@ msgstr "您的通行金鑰"
 #~ msgid_plural "Total %{total} items"
 #~ msgid_plural "Total %{total} items"
 #~ msgstr[0] "總計 %{total} 項"
 #~ msgstr[0] "總計 %{total} 項"
 
 
-#~ msgid "Updated successfully"
-#~ msgstr "更新成功"
-
 #~ msgid "View Details"
 #~ msgid "View Details"
 #~ msgstr "檢視詳細資訊"
 #~ msgstr "檢視詳細資訊"
 
 

+ 43 - 0
app/src/pinia/moudule/user.ts

@@ -1,6 +1,8 @@
 import type { CookieChangeOptions } from 'universal-cookie'
 import type { CookieChangeOptions } from 'universal-cookie'
+import type { User } from '@/api/user'
 import { useCookies } from '@vueuse/integrations/useCookies'
 import { useCookies } from '@vueuse/integrations/useCookies'
 import { defineStore } from 'pinia'
 import { defineStore } from 'pinia'
+import user from '@/api/user'
 
 
 export const useUserStore = defineStore('user', () => {
 export const useUserStore = defineStore('user', () => {
   const cookies = useCookies(['nginx-ui'])
   const cookies = useCookies(['nginx-ui'])
@@ -27,6 +29,7 @@ export const useUserStore = defineStore('user', () => {
   cookies.addChangeListener(handleCookieChange)
   cookies.addChangeListener(handleCookieChange)
 
 
   const passkeyRawId = ref('')
   const passkeyRawId = ref('')
+  const info = ref<User>({} as User)
 
 
   const unreadCount = ref(0)
   const unreadCount = ref(0)
   const isLogin = computed(() => !!token.value)
   const isLogin = computed(() => !!token.value)
@@ -46,6 +49,42 @@ export const useUserStore = defineStore('user', () => {
     passkeyRawId.value = ''
     passkeyRawId.value = ''
     secureSessionId.value = ''
     secureSessionId.value = ''
     unreadCount.value = 0
     unreadCount.value = 0
+    info.value = {} as User
+  }
+
+  async function getCurrentUser() {
+    try {
+      const data = await user.getCurrentUser()
+      info.value = data
+      return data
+    }
+    catch (error) {
+      console.error('Failed to get current user:', error)
+      throw error
+    }
+  }
+
+  async function updateCurrentUser(userData: Partial<User>) {
+    try {
+      const response = await user.updateCurrentUser(userData as User)
+      info.value = { ...info.value, ...userData }
+      return response.data
+    }
+    catch (error) {
+      console.error('Failed to update current user:', error)
+      throw error
+    }
+  }
+
+  async function updateCurrentUserPassword(data: { old_password: string, new_password: string }) {
+    try {
+      const response = await user.updateCurrentUserPassword(data)
+      return response.data
+    }
+    catch (error) {
+      console.error('Failed to update password:', error)
+      throw error
+    }
   }
   }
 
 
   return {
   return {
@@ -53,11 +92,15 @@ export const useUserStore = defineStore('user', () => {
     unreadCount,
     unreadCount,
     secureSessionId,
     secureSessionId,
     passkeyRawId,
     passkeyRawId,
+    info,
     isLogin,
     isLogin,
     passkeyLoginAvailable,
     passkeyLoginAvailable,
     passkeyLogin,
     passkeyLogin,
     login,
     login,
     logout,
     logout,
+    getCurrentUser,
+    updateCurrentUser,
+    updateCurrentUserPassword,
   }
   }
 }, {
 }, {
   persist: true,
   persist: true,

+ 11 - 2
app/src/routes/modules/user.ts

@@ -1,13 +1,22 @@
 import type { RouteRecordRaw } from 'vue-router'
 import type { RouteRecordRaw } from 'vue-router'
-import { UserOutlined } from '@ant-design/icons-vue'
+import { UsergroupAddOutlined, UserOutlined } from '@ant-design/icons-vue'
 
 
 export const userRoutes: RouteRecordRaw[] = [
 export const userRoutes: RouteRecordRaw[] = [
   {
   {
-    path: 'user',
+    path: 'users',
     name: 'Manage Users',
     name: 'Manage Users',
     component: () => import('@/views/user/User.vue'),
     component: () => import('@/views/user/User.vue'),
     meta: {
     meta: {
       name: () => $gettext('Manage Users'),
       name: () => $gettext('Manage Users'),
+      icon: UsergroupAddOutlined,
+    },
+  },
+  {
+    path: 'profile',
+    name: 'User Profile',
+    component: () => import('@/views/user/UserProfile.vue'),
+    meta: {
+      name: () => $gettext('User Profile'),
       icon: UserOutlined,
       icon: UserOutlined,
     },
     },
   },
   },

+ 1 - 32
app/src/views/preference/tabs/AuthSettings.vue

@@ -1,13 +1,10 @@
 <script setup lang="tsx">
 <script setup lang="tsx">
 import type { Ref } from 'vue'
 import type { Ref } from 'vue'
-import type { TwoFAStatus } from '@/api/2fa'
-import type { RecoveryCode } from '@/api/recovery'
+
 import type { BannedIP } from '@/api/settings'
 import type { BannedIP } from '@/api/settings'
 import { message } from 'ant-design-vue'
 import { message } from 'ant-design-vue'
 import dayjs from 'dayjs'
 import dayjs from 'dayjs'
-import twoFA from '@/api/2fa'
 import setting from '@/api/settings'
 import setting from '@/api/settings'
-import { Passkey, RecoveryCodes, TOTP } from '../components/AuthSettings'
 import useSystemSettingsStore from '../store'
 import useSystemSettingsStore from '../store'
 
 
 const systemSettingsStore = useSystemSettingsStore()
 const systemSettingsStore = useSystemSettingsStore()
@@ -50,39 +47,11 @@ function removeBannedIP(ip: string) {
     message.success($gettext('Remove successfully'))
     message.success($gettext('Remove successfully'))
   })
   })
 }
 }
-
-const twoFAStatus = ref<TwoFAStatus>({} as TwoFAStatus)
-const recoveryCodes = ref<RecoveryCode[]>()
-
-function get2FAStatus() {
-  twoFA.status().then(r => {
-    twoFAStatus.value = r
-  })
-}
-
-get2FAStatus()
 </script>
 </script>
 
 
 <template>
 <template>
   <div class="flex justify-center">
   <div class="flex justify-center">
     <div>
     <div>
-      <h2>{{ $gettext('2FA Settings') }}</h2>
-      <Passkey class="mb-4" />
-
-      <TOTP
-        v-model:recovery-codes="recoveryCodes"
-        class="mb-4"
-        :status="twoFAStatus?.otp_status"
-        @refresh="get2FAStatus"
-      />
-
-      <RecoveryCodes
-        class="mb-4"
-        :two-f-a-status="twoFAStatus"
-        :recovery-codes="recoveryCodes"
-        @refresh="get2FAStatus"
-      />
-
       <h2>
       <h2>
         {{ $gettext('Authentication Settings') }}
         {{ $gettext('Authentication Settings') }}
       </h2>
       </h2>

+ 0 - 3
app/src/views/terminal/Terminal.vue

@@ -3,7 +3,6 @@ import type ReconnectingWebSocket from 'reconnecting-websocket'
 import { FitAddon } from '@xterm/addon-fit'
 import { FitAddon } from '@xterm/addon-fit'
 import { Terminal } from '@xterm/xterm'
 import { Terminal } from '@xterm/xterm'
 import { throttle } from 'lodash'
 import { throttle } from 'lodash'
-import twoFA from '@/api/2fa'
 import use2FAModal from '@/components/TwoFA/use2FAModal'
 import use2FAModal from '@/components/TwoFA/use2FAModal'
 import ws from '@/lib/websocket'
 import ws from '@/lib/websocket'
 import '@xterm/xterm/css/xterm.css'
 import '@xterm/xterm/css/xterm.css'
@@ -31,8 +30,6 @@ onMounted(() => {
   // Check connection security
   // Check connection security
   checkSecureConnection()
   checkSecureConnection()
 
 
-  twoFA.secure_session_status()
-
   const otpModal = use2FAModal()
   const otpModal = use2FAModal()
 
 
   otpModal.open().then(secureSessionId => {
   otpModal.open().then(secureSessionId => {

+ 231 - 0
app/src/views/user/UserProfile.vue

@@ -0,0 +1,231 @@
+<script setup lang="tsx">
+import type { TwoFAStatus } from '@/api/2fa'
+import type { RecoveryCode } from '@/api/recovery'
+import { message } from 'ant-design-vue'
+import twoFA from '@/api/2fa'
+import { use2FAModal } from '@/components/TwoFA'
+import { useUserStore } from '@/pinia'
+import { Passkey, RecoveryCodes, TOTP } from '@/views/preference/components/AuthSettings'
+
+const twoFAStatus = ref<TwoFAStatus>({} as TwoFAStatus)
+const recoveryCodes = ref<RecoveryCode[]>()
+
+const userStore = useUserStore()
+const { info } = storeToRefs(userStore)
+
+// Form data
+const userForm = ref({
+  name: '',
+})
+
+const passwordForm = ref({
+  old_password: '',
+  new_password: '',
+  confirm_password: '',
+})
+
+const loading = ref(false)
+const passwordLoading = ref(false)
+
+function get2FAStatus() {
+  twoFA.status().then(r => {
+    twoFAStatus.value = r
+  })
+}
+
+async function getCurrentUser() {
+  try {
+    loading.value = true
+    await userStore.getCurrentUser()
+    // Update form with current user data
+    userForm.value.name = info.value.name || ''
+  }
+  catch (error) {
+    console.error('Failed to get current user:', error)
+    // Handle error (could show notification)
+  }
+  finally {
+    loading.value = false
+  }
+}
+
+async function updateUserInfo() {
+  try {
+    loading.value = true
+    const otpModal = use2FAModal()
+
+    otpModal.open().then(() => {
+      userStore.updateCurrentUser({
+        name: userForm.value.name,
+      })
+      // Show success message
+      message.success($gettext('User info updated successfully'))
+    })
+  }
+  catch (error) {
+    console.error('Failed to update user info:', error)
+  }
+  finally {
+    loading.value = false
+  }
+}
+
+async function changePassword() {
+  if (passwordForm.value.new_password !== passwordForm.value.confirm_password) {
+    message.error($gettext('Passwords do not match'))
+    return
+  }
+
+  try {
+    passwordLoading.value = true
+    const otpModal = use2FAModal()
+
+    otpModal.open().then(async () => {
+      await userStore.updateCurrentUserPassword({
+        old_password: passwordForm.value.old_password,
+        new_password: passwordForm.value.new_password,
+      })
+
+      // Clear password form
+      passwordForm.value = {
+        old_password: '',
+        new_password: '',
+        confirm_password: '',
+      }
+
+      message.success($gettext('Password updated successfully'))
+    })
+  }
+  catch (error) {
+    console.error('Failed to update password:', error)
+    // Handle error (could show notification)
+  }
+  finally {
+    passwordLoading.value = false
+  }
+}
+
+// Initialize data on mount
+onMounted(() => {
+  getCurrentUser()
+  get2FAStatus()
+})
+</script>
+
+<template>
+  <div>
+    <div class="max-w-4xl mx-auto">
+      <!-- Personal Information Section -->
+      <div class="mb-8">
+        <h2 class="text-xl font-semibold mb-4">
+          {{ $gettext('Personal Information') }}
+        </h2>
+        <ACard class="mb-4">
+          <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
+            <div>
+              <label class="block text-sm font-medium mb-2">
+                {{ $gettext('Username') }}
+              </label>
+              <AInput
+                v-model:value="userForm.name"
+                :placeholder="$gettext('Username')"
+                class="w-full"
+              />
+            </div>
+          </div>
+          <div class="mt-4">
+            <AButton
+              type="primary"
+              :loading="loading"
+              @click="updateUserInfo"
+            >
+              {{ $gettext('Update Profile') }}
+            </AButton>
+          </div>
+        </ACard>
+      </div>
+
+      <!-- 2FA Settings Section -->
+      <div class="mb-8">
+        <h2 class="text-xl font-semibold mb-4">
+          {{ $gettext('2FA Settings') }}
+        </h2>
+        <ACard>
+          <Passkey class="mb-4" />
+
+          <TOTP
+            v-model:recovery-codes="recoveryCodes"
+            class="mb-4"
+            :status="twoFAStatus?.otp_status"
+            @refresh="get2FAStatus"
+          />
+
+          <RecoveryCodes
+            class="mb-4"
+            :two-f-a-status="twoFAStatus"
+            :recovery-codes="recoveryCodes"
+            @refresh="get2FAStatus"
+          />
+        </ACard>
+      </div>
+
+      <!-- Security Settings Section -->
+      <div class="mb-8">
+        <h2 class="text-xl font-semibold mb-4">
+          {{ $gettext('Security Settings') }}
+        </h2>
+        <ACard>
+          <div class="space-y-4">
+            <div>
+              <h3 class="text-lg font-medium mb-2">
+                {{ $gettext('Change Password') }}
+              </h3>
+              <div class="grid grid-cols-1 gap-4">
+                <div>
+                  <label class="block text-sm font-medium mb-2">
+                    {{ $gettext('Current Password') }}
+                  </label>
+                  <AInputPassword
+                    v-model:value="passwordForm.old_password"
+                    class="w-full max-w-xs"
+                  />
+                </div>
+                <div>
+                  <label class="block text-sm font-medium mb-2">
+                    {{ $gettext('New Password') }}
+                  </label>
+                  <AInputPassword
+                    v-model:value="passwordForm.new_password"
+                    class="w-full max-w-xs"
+                  />
+                </div>
+                <div>
+                  <label class="block text-sm font-medium mb-2">
+                    {{ $gettext('Confirm New Password') }}
+                  </label>
+                  <AInputPassword
+                    v-model:value="passwordForm.confirm_password"
+                    class="w-full max-w-xs"
+                  />
+                </div>
+                <div>
+                  <AButton
+                    type="primary"
+                    :loading="passwordLoading"
+                    :disabled="!passwordForm.old_password || !passwordForm.new_password || !passwordForm.confirm_password"
+                    @click="changePassword"
+                  >
+                    {{ $gettext('Update Password') }}
+                  </AButton>
+                </div>
+              </div>
+            </div>
+          </div>
+        </ACard>
+      </div>
+    </div>
+  </div>
+</template>
+
+<style lang="less" scoped>
+</style>