Browse Source

chore: update docs

Jacky 1 day ago
parent
commit
edb8a8a48d

+ 14 - 0
README.md

@@ -27,6 +27,20 @@ Yet another Nginx Web UI, developed by [0xJacky](https://jackyu.cn/), [Hintay](h
 ## Documentation
 ## Documentation
 To check out docs, visit [nginxui.com](https://nginxui.com).
 To check out docs, visit [nginxui.com](https://nginxui.com).
 
 
+## Sponsor
+
+If you find this project helpful, please consider sponsoring us to support ongoing development and maintenance.
+
+[![GitHub Sponsors](https://img.shields.io/badge/GitHub-Sponsors-ea4aaa?style=for-the-badge&logo=github-sponsors&logoColor=white)](https://github.com/sponsors/nginxui)
+[![Afdian](https://img.shields.io/badge/爱发电-Support-946ce6?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyIDJMMTMuMDkgOC4yNkwyMCA5TDEzLjA5IDE1Ljc0TDEyIDIyTDEwLjkxIDE1Ljc0TDQgOUwxMC45MSA4LjI2TDEyIDJaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K)](https://afdian.com/a/nginxui)
+
+Your support helps us:
+- 🚀 Accelerate development of new features
+- 🐛 Fix bugs and improve stability
+- 📚 Enhance documentation and tutorials
+- 🌐 Provide better community support
+- 💻 Maintain infrastructure and demo servers
+
 ## Stargazers over time
 ## Stargazers over time
 
 
 [![Stargazers over time](https://starchart.cc/0xJacky/nginx-ui.svg)](https://starchart.cc/0xJacky/nginx-ui)
 [![Stargazers over time](https://starchart.cc/0xJacky/nginx-ui.svg)](https://starchart.cc/0xJacky/nginx-ui)

+ 60 - 44
app/src/language/ar/app.po

@@ -222,7 +222,7 @@ msgstr "الوضع المتقدم"
 msgid "Afterwards, refresh this page and click add passkey again."
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr "بعد ذلك، قم بتحديث هذه الصفحة وانقر على إضافة مفتاح مرور مرة أخرى."
 msgstr "بعد ذلك، قم بتحديث هذه الصفحة وانقر على إضافة مفتاح مرور مرة أخرى."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:115
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
 msgid "All"
 msgid "All"
 msgstr "الكل"
 msgstr "الكل"
 
 
@@ -301,7 +301,7 @@ msgstr "هل أنت متأكد أنك تريد الحذف نهائيًا؟"
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "هل أنت متأكد أنك تريد الحذف؟"
 msgstr "هل أنت متأكد أنك تريد الحذف؟"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:129
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr "هل أنت متأكد أنك تريد إعادة تحميل Nginx على عقد المزامنة التالية؟"
 msgstr "هل أنت متأكد أنك تريد إعادة تحميل Nginx على عقد المزامنة التالية؟"
 
 
@@ -317,7 +317,7 @@ msgstr "هل أنت متأكد أنك تريد إزالة هذا العنصر؟"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "هل أنت متأكد أنك تريد إزالة هذا المكان؟"
 msgstr "هل أنت متأكد أنك تريد إزالة هذا المكان؟"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr "هل أنت متأكد أنك تريد إعادة تشغيل Nginx على عقد المزامنة التالية؟"
 msgstr "هل أنت متأكد أنك تريد إعادة تشغيل Nginx على عقد المزامنة التالية؟"
 
 
@@ -552,7 +552,7 @@ msgstr "فيما يلي العناصر المحددة التي تريد تعدي
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr "الكتلة فارغة"
 msgstr "الكتلة فارغة"
 
 
-#: src/views/system/About.vue:55
+#: src/views/system/About.vue:75
 msgid "Build with"
 msgid "Build with"
 msgstr "بناء مع"
 msgstr "بناء مع"
 
 
@@ -644,7 +644,7 @@ msgstr "لا يمكن المقارنة: المحتوى المفقود"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "لا يمكن حذف المسار المحمي: {0}"
 msgstr "لا يمكن حذف المسار المحمي: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:154
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "لا يمكن الحصول على بيانات الأداء في هذه الحالة"
 msgstr "لا يمكن الحصول على بيانات الأداء في هذه الحالة"
 
 
@@ -1075,7 +1075,7 @@ msgstr "تأكيد كلمة المرور الجديدة"
 msgid "Connected"
 msgid "Connected"
 msgstr "متصل"
 msgstr "متصل"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:87
+#: src/views/dashboard/NginxDashBoard.vue:100
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "خطأ في الاتصال، جاري محاولة إعادة الاتصال..."
 msgstr "خطأ في الاتصال، جاري محاولة إعادة الاتصال..."
 
 
@@ -1730,7 +1730,7 @@ msgstr "فشل تمكين الدفق %{name} على %{node}"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "تم تمكين الدفق %{name} على %{node} بنجاح"
 msgstr "تم تمكين الدفق %{name} على %{node} بنجاح"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:152
+#: src/views/dashboard/NginxDashBoard.vue:172
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "تمكين وحدة stub_status"
 msgstr "تمكين وحدة stub_status"
 
 
@@ -2313,7 +2313,7 @@ msgstr "توليد مفتاح خاص لتسجيل الحساب"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "خطأ في الحصول على مستخدم ACME: {0}"
 msgstr "خطأ في الحصول على مستخدم ACME: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:143
+#: src/views/dashboard/NginxDashBoard.vue:163
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "فشل الحصول على البيانات"
 msgstr "فشل الحصول على البيانات"
 
 
@@ -2526,6 +2526,10 @@ msgstr "تنسيق AES IV غير صالح: {0}"
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "تنسيق مفتاح AES غير صالح: {0}"
 msgstr "تنسيق مفتاح AES غير صالح: {0}"
 
 
+#: src/constants/errors/user.ts:14
+msgid "Invalid claims type"
+msgstr "نوع المطالبات غير صالح"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "كائن ملف غير صالح"
 msgstr "كائن ملف غير صالح"
@@ -2644,7 +2648,7 @@ msgstr "وقت آخر نسخة احتياطية"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "آخر فحص في"
 msgstr "آخر فحص في"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:118
+#: src/views/dashboard/NginxDashBoard.vue:138
 msgid "Last update"
 msgid "Last update"
 msgstr "آخر تحديث"
 msgstr "آخر تحديث"
 
 
@@ -2681,7 +2685,7 @@ msgstr "لا يُسمح برمز الاسترداد القديم نظرًا لع
 msgid "Lego disable CNAME Support"
 msgid "Lego disable CNAME Support"
 msgstr "تعطيل دعم CNAME في Lego"
 msgstr "تعطيل دعم CNAME في Lego"
 
 
-#: src/views/system/About.vue:63
+#: src/views/system/About.vue:83
 msgid "License"
 msgid "License"
 msgstr "رخصة"
 msgstr "رخصة"
 
 
@@ -2731,12 +2735,12 @@ msgstr "وقت توقف المحمل"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "عتبة المحمل"
 msgstr "عتبة المحمل"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:180
+#: src/views/dashboard/NginxDashBoard.vue:200
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "جارٍ تحميل البيانات..."
 msgstr "جارٍ تحميل البيانات..."
 
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:71
+#: src/components/NodeSelector/NodeSelector.vue:84
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
@@ -2774,11 +2778,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "قائمة السجلات"
 msgstr "قائمة السجلات"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:271
 msgid "Login"
 msgid "Login"
 msgstr "تسجيل الدخول"
 msgstr "تسجيل الدخول"
 
 
-#: src/views/other/Login.vue:76
+#: src/views/other/Login.vue:78
 msgid "Login successful"
 msgid "Login successful"
 msgstr "تم تسجيل الدخول بنجاح"
 msgstr "تم تسجيل الدخول بنجاح"
 
 
@@ -3029,7 +3033,7 @@ msgstr "توجيه متعدد الأسطر"
 msgid "Name"
 msgid "Name"
 msgstr "اسم"
 msgstr "اسم"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:195
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "يجب تمكين وحدة stub_status"
 msgstr "يجب تمكين وحدة stub_status"
 
 
@@ -3185,9 +3189,9 @@ msgstr "خطأ في Nginx: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:114
-#: src/views/dashboard/NginxDashBoard.vue:133
-#: src/views/dashboard/NginxDashBoard.vue:77
+#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:153
+#: src/views/dashboard/NginxDashBoard.vue:84
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx لا يعمل"
 msgstr "Nginx لا يعمل"
 
 
@@ -3195,7 +3199,7 @@ msgstr "Nginx لا يعمل"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "إن Nginx لا يعمل في حاوية أخرى"
 msgstr "إن Nginx لا يعمل في حاوية أخرى"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "إن Nginx يعمل"
 msgstr "إن Nginx يعمل"
 
 
@@ -3293,8 +3297,8 @@ msgid "Nginx.conf includes streams-enabled directory"
 msgstr "يتضمن Nginx.conf دليل streams-enabled"
 msgstr "يتضمن Nginx.conf دليل streams-enabled"
 
 
 #: src/components/ChatGPT/ChatMessageInput.vue:17
 #: src/components/ChatGPT/ChatMessageInput.vue:17
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
@@ -3311,7 +3315,7 @@ msgstr "لا"
 msgid "No Action"
 msgid "No Action"
 msgstr "لا إجراء"
 msgstr "لا إجراء"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:202
 msgid "No data"
 msgid "No data"
 msgstr "لا توجد بيانات"
 msgstr "لا توجد بيانات"
 
 
@@ -3446,9 +3450,13 @@ msgstr ""
 msgid "Off"
 msgid "Off"
 msgstr "إيقاف"
 msgstr "إيقاف"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/views/system/About.vue:31
+msgid "Official Document"
+msgstr "الوثيقة الرسمية"
+
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
-#: src/components/NodeSelector/NodeSelector.vue:94
+#: src/components/NodeSelector/NodeSelector.vue:107
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/views/dashboard/Environments.vue:99
 #: src/views/dashboard/Environments.vue:99
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3480,9 +3488,9 @@ msgstr "تشغيل"
 msgid "Once the verification is complete, the records will be removed."
 msgid "Once the verification is complete, the records will be removed."
 msgstr "بمجرد اكتمال التحقق، سيتم إزالة السجلات."
 msgstr "بمجرد اكتمال التحقق، سيتم إزالة السجلات."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
-#: src/components/NodeSelector/NodeSelector.vue:74
-#: src/components/NodeSelector/NodeSelector.vue:88
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
+#: src/components/NodeSelector/NodeSelector.vue:101
+#: src/components/NodeSelector/NodeSelector.vue:87
 #: src/views/dashboard/Environments.vue:92
 #: src/views/dashboard/Environments.vue:92
 #: src/views/environments/list/envColumns.tsx:51
 #: src/views/environments/list/envColumns.tsx:51
 msgid "Online"
 msgid "Online"
@@ -3500,7 +3508,7 @@ msgstr "مفتوح"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "أوبن أي آي"
 msgstr "أوبن أي آي"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:280
 msgid "Or"
 msgid "Or"
 msgstr "أو"
 msgstr "أو"
 
 
@@ -3573,7 +3581,7 @@ msgstr ""
 "التعرف على الوجه أو كلمة مرور الجهاز أو رقم التعريف الشخصي. يمكن استخدامها "
 "التعرف على الوجه أو كلمة مرور الجهاز أو رقم التعريف الشخصي. يمكن استخدامها "
 "كبديل لكلمة المرور أو كطريقة للمصادقة الثنائية."
 "كبديل لكلمة المرور أو كطريقة للمصادقة الثنائية."
 
 
-#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:232 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "كلمة المرور"
 msgstr "كلمة المرور"
 
 
@@ -3635,7 +3643,7 @@ msgstr "خطأ في تنفيذ ترقية النواة"
 msgid "Performance"
 msgid "Performance"
 msgstr "الأداء"
 msgstr "الأداء"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:187
+#: src/views/dashboard/NginxDashBoard.vue:207
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "مقاييس الأداء"
 msgstr "مقاييس الأداء"
 
 
@@ -3659,7 +3667,7 @@ msgstr "مسار PID غير موجود"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "النص العادي فارغ"
 msgstr "النص العادي فارغ"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:176
+#: src/views/dashboard/NginxDashBoard.vue:196
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -3856,7 +3864,7 @@ msgstr "حظر تغيير كلمة مرور root في العرض التوضيح
 msgid "Prohibit deleting the default user"
 msgid "Prohibit deleting the default user"
 msgstr "حظر حذف المستخدم الافتراضي"
 msgstr "حظر حذف المستخدم الافتراضي"
 
 
-#: src/views/system/About.vue:51
+#: src/views/system/About.vue:71
 msgid "Project Team"
 msgid "Project Team"
 msgstr "فريق المشروع"
 msgstr "فريق المشروع"
 
 
@@ -3982,7 +3990,7 @@ msgstr "ملاحظة الإصدار"
 msgid "Reload"
 msgid "Reload"
 msgstr "إعادة تحميل"
 msgstr "إعادة تحميل"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: 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:209
 #: src/views/environments/list/Environment.vue:209
@@ -4010,7 +4018,7 @@ msgstr "خطأ في إعادة تحميل Nginx البعيد"
 msgid "Reload Remote Nginx Success"
 msgid "Reload Remote Nginx Success"
 msgstr "إعادة تحميل Nginx البعيد بنجاح"
 msgstr "إعادة تحميل Nginx البعيد بنجاح"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:84
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110
 msgid "Reload request failed, please check your network connection"
 msgid "Reload request failed, please check your network connection"
 msgstr "فشل طلب إعادة التحميل، يرجى التحقق من اتصال الشبكة لديك"
 msgstr "فشل طلب إعادة التحميل، يرجى التحقق من اتصال الشبكة لديك"
 
 
@@ -4169,7 +4177,7 @@ msgstr "الردود"
 msgid "Restart"
 msgid "Restart"
 msgstr "إعادة تشغيل"
 msgstr "إعادة تشغيل"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:238
 #: src/views/environments/list/Environment.vue:238
 msgid "Restart Nginx"
 msgid "Restart Nginx"
@@ -4191,7 +4199,7 @@ msgstr "خطأ في إعادة تشغيل Nginx البعيد"
 msgid "Restart Remote Nginx Success"
 msgid "Restart Remote Nginx Success"
 msgstr "إعادة تشغيل Nginx البعيد بنجاح"
 msgstr "إعادة تشغيل Nginx البعيد بنجاح"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:104
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
 msgid "Restart request failed, please check your network connection"
 msgid "Restart request failed, please check your network connection"
 msgstr "فشل طلب إعادة التشغيل، يرجى التحقق من اتصال الشبكة لديك"
 msgstr "فشل طلب إعادة التشغيل، يرجى التحقق من اتصال الشبكة لديك"
 
 
@@ -4639,7 +4647,7 @@ msgstr "منطقة الذاكرة المشتركة"
 msgid "Show"
 msgid "Show"
 msgstr "عرض"
 msgstr "عرض"
 
 
-#: src/views/other/Login.vue:285
+#: src/views/other/Login.vue:289
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "تسجيل الدخول باستخدام مفتاح المرور"
 msgstr "تسجيل الدخول باستخدام مفتاح المرور"
 
 
@@ -4699,6 +4707,10 @@ msgstr "وقت الانتظار بين تكرارات محمل ذاكرة الت
 msgid "Sleep time between cache manager iterations"
 msgid "Sleep time between cache manager iterations"
 msgstr "وقت الانتظار بين تكرارات مدير الذاكرة المؤقتة"
 msgstr "وقت الانتظار بين تكرارات مدير الذاكرة المؤقتة"
 
 
+#: src/views/system/About.vue:46
+msgid "Sponsor"
+msgstr "راعي"
+
 #: src/views/certificate/CertificateEditor.vue:211
 #: src/views/certificate/CertificateEditor.vue:211
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "محتوى شهادة SSL"
 msgstr "محتوى شهادة SSL"
@@ -4744,7 +4756,7 @@ msgstr "مسار مفتاح SSL"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "مسار مفتاح SSL مطلوب عند تمكين HTTPS"
 msgstr "مسار مفتاح SSL مطلوب عند تمكين HTTPS"
 
 
-#: src/views/other/Login.vue:242
+#: src/views/other/Login.vue:246
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "تسجيل الدخول عبر SSO"
 msgstr "تسجيل الدخول عبر SSO"
 
 
@@ -4947,7 +4959,7 @@ msgstr "خطأ في تزامن التكوين"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "تمت مزامنة التكوين بنجاح"
 msgstr "تمت مزامنة التكوين بنجاح"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:122
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/views/environments/group/EnvGroup.vue:31
 #: src/views/environments/group/EnvGroup.vue:31
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "مزامنة العقد"
 msgstr "مزامنة العقد"
@@ -5182,7 +5194,7 @@ msgid ""
 "-_./:"
 "-_./:"
 msgstr "يجب أن يحتوي هذا الحقل على أحرف وأحرف يونيكود وأرقام و -_./: فقط"
 msgstr "يجب أن يحتوي هذا الحقل على أحرف وأحرف يونيكود وأرقام و -_./: فقط"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:155
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5305,10 +5317,14 @@ msgstr ""
 "توفر هذه الأدوات نقطة نهاية API متوافقة مع OpenAI، لذا ما عليك سوى تعيين "
 "توفر هذه الأدوات نقطة نهاية API متوافقة مع OpenAI، لذا ما عليك سوى تعيين "
 "baseUrl إلى API المحلي الخاص بك."
 "baseUrl إلى API المحلي الخاص بك."
 
 
-#: src/views/dashboard/NginxDashBoard.vue:55
+#: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
 msgid "Toggle failed"
 msgstr "فشل التبديل"
 msgstr "فشل التبديل"
 
 
+#: src/constants/errors/user.ts:13
+msgid "Token is empty"
+msgstr "الرمز فارغ"
+
 #: src/views/preference/tabs/OpenAISettings.vue:61
 #: src/views/preference/tabs/OpenAISettings.vue:61
 msgid "Token is not valid"
 msgid "Token is not valid"
 msgstr "الرمز غير صالح"
 msgstr "الرمز غير صالح"
@@ -5493,7 +5509,7 @@ msgstr "المستخدم لم يتم تفعيل OTP كعامل ثنائي"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "ملف المستخدم"
 msgstr "ملف المستخدم"
 
 
-#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:222 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "اسم المستخدم"
 msgstr "اسم المستخدم"
@@ -5685,8 +5701,8 @@ msgstr "كتابة مفتاح الشهادة الخاص إلى القرص"
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr "كتابة الشهادة إلى القرص"
 msgstr "كتابة الشهادة إلى القرص"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168
 #: 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:131
 #: src/views/preference/tabs/AuthSettings.vue:131

+ 60 - 44
app/src/language/de_DE/app.po

@@ -224,7 +224,7 @@ msgstr ""
 "Aktualisieren Sie anschließend diese Seite und klicken Sie erneut auf "
 "Aktualisieren Sie anschließend diese Seite und klicken Sie erneut auf "
 "\"Passkey hinzufügen\"."
 "\"Passkey hinzufügen\"."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:115
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
 msgid "All"
 msgid "All"
 msgstr "Alle"
 msgstr "Alle"
 
 
@@ -303,7 +303,7 @@ msgstr "Sind Sie sicher, dass Sie dauerhaft löschen möchten?"
 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?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:129
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 "Sind Sie sicher, dass Sie Nginx auf den folgenden Sync-Knoten neu laden "
 "Sind Sie sicher, dass Sie Nginx auf den folgenden Sync-Knoten neu laden "
@@ -321,7 +321,7 @@ msgstr "Möchten Sie dieses Element wirklich entfernen?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Sind Sie sicher, dass Sie diesen Standort entfernen möchten?"
 msgstr "Sind Sie sicher, dass Sie diesen Standort entfernen möchten?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 "Sind Sie sicher, dass Sie Nginx auf den folgenden Synchronisationsknoten "
 "Sind Sie sicher, dass Sie Nginx auf den folgenden Synchronisationsknoten "
@@ -566,7 +566,7 @@ msgstr "Hier sind die ausgewählten Elemente, die Sie stapelweise ändern möcht
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr "Block ist nil"
 msgstr "Block ist nil"
 
 
-#: src/views/system/About.vue:55
+#: src/views/system/About.vue:75
 msgid "Build with"
 msgid "Build with"
 msgstr "Build mit"
 msgstr "Build mit"
 
 
@@ -660,7 +660,7 @@ msgstr "Kann nicht vergleichen: Fehlende Inhalte"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "Geschützter Pfad kann nicht gelöscht werden: {0}"
 msgstr "Geschützter Pfad kann nicht gelöscht werden: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:154
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "In diesem Zustand können Leistungsdaten nicht erhalten"
 msgstr "In diesem Zustand können Leistungsdaten nicht erhalten"
 
 
@@ -1089,7 +1089,7 @@ msgstr "Neues Passwort bestätigen"
 msgid "Connected"
 msgid "Connected"
 msgstr "Verbunden"
 msgstr "Verbunden"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:87
+#: src/views/dashboard/NginxDashBoard.vue:100
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Verbindungsfehler, versuche erneut zu verbinden..."
 msgstr "Verbindungsfehler, versuche erneut zu verbinden..."
 
 
@@ -1754,7 +1754,7 @@ msgstr "Aktivierung des Streams %{name} auf %{node} fehlgeschlagen"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Stream %{name} auf %{node} erfolgreich aktiviert"
 msgstr "Stream %{name} auf %{node} erfolgreich aktiviert"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:152
+#: src/views/dashboard/NginxDashBoard.vue:172
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "Aktiviere stub_status-Modul"
 msgstr "Aktiviere stub_status-Modul"
 
 
@@ -2339,7 +2339,7 @@ msgstr "Generiere privaten Schlüssel zur Registrierung des Kontos"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "Fehler beim Abrufen des ACME-Benutzers: {0}"
 msgstr "Fehler beim Abrufen des ACME-Benutzers: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:143
+#: src/views/dashboard/NginxDashBoard.vue:163
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "Datenabruf fehlgeschlagen"
 msgstr "Datenabruf fehlgeschlagen"
 
 
@@ -2557,6 +2557,10 @@ msgstr "Ungültiges AES-IV-Format: {0}"
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "Ungültiges AES-Schlüsselformat: {0}"
 msgstr "Ungültiges AES-Schlüsselformat: {0}"
 
 
+#: src/constants/errors/user.ts:14
+msgid "Invalid claims type"
+msgstr "Ungültiger Anspruchstyp"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "Ungültiges Dateiobjekt"
 msgstr "Ungültiges Dateiobjekt"
@@ -2675,7 +2679,7 @@ msgstr "Letzter Sicherungszeitpunkt"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Zuletzt überprüft am"
 msgstr "Zuletzt überprüft am"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:118
+#: src/views/dashboard/NginxDashBoard.vue:138
 msgid "Last update"
 msgid "Last update"
 msgstr "Letzte Aktualisierung"
 msgstr "Letzte Aktualisierung"
 
 
@@ -2712,7 +2716,7 @@ msgstr "Alter Wiederherstellungscode nicht erlaubt, da TOTP nicht aktiviert ist"
 msgid "Lego disable CNAME Support"
 msgid "Lego disable CNAME Support"
 msgstr "Lego deaktiviert CNAME-Unterstützung"
 msgstr "Lego deaktiviert CNAME-Unterstützung"
 
 
-#: src/views/system/About.vue:63
+#: src/views/system/About.vue:83
 msgid "License"
 msgid "License"
 msgstr "Lizenz"
 msgstr "Lizenz"
 
 
@@ -2762,12 +2766,12 @@ msgstr "Loader-Pause"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "Laderschwelle"
 msgstr "Laderschwelle"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:180
+#: src/views/dashboard/NginxDashBoard.vue:200
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "Daten werden geladen..."
 msgstr "Daten werden geladen..."
 
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:71
+#: src/components/NodeSelector/NodeSelector.vue:84
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
@@ -2805,11 +2809,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "Protokollliste"
 msgstr "Protokollliste"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:271
 msgid "Login"
 msgid "Login"
 msgstr "Login"
 msgstr "Login"
 
 
-#: src/views/other/Login.vue:76
+#: src/views/other/Login.vue:78
 msgid "Login successful"
 msgid "Login successful"
 msgstr "Login erfolgreich"
 msgstr "Login erfolgreich"
 
 
@@ -3061,7 +3065,7 @@ msgstr "Mehrzeilige Direktive"
 msgid "Name"
 msgid "Name"
 msgstr "Name"
 msgstr "Name"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:195
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "Das stub_status-Modul muss aktiviert werden"
 msgstr "Das stub_status-Modul muss aktiviert werden"
 
 
@@ -3217,9 +3221,9 @@ msgstr "Nginx-Fehler: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:114
-#: src/views/dashboard/NginxDashBoard.vue:133
-#: src/views/dashboard/NginxDashBoard.vue:77
+#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:153
+#: src/views/dashboard/NginxDashBoard.vue:84
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx läuft nicht"
 msgstr "Nginx läuft nicht"
 
 
@@ -3227,7 +3231,7 @@ msgstr "Nginx läuft nicht"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx läuft nicht in einem anderen Container"
 msgstr "Nginx läuft nicht in einem anderen Container"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx läuft"
 msgstr "Nginx läuft"
 
 
@@ -3327,8 +3331,8 @@ msgid "Nginx.conf includes streams-enabled directory"
 msgstr "Nginx.conf enthält das streams-enabled-Verzeichnis"
 msgstr "Nginx.conf enthält das streams-enabled-Verzeichnis"
 
 
 #: src/components/ChatGPT/ChatMessageInput.vue:17
 #: src/components/ChatGPT/ChatMessageInput.vue:17
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
@@ -3345,7 +3349,7 @@ msgstr "Nein"
 msgid "No Action"
 msgid "No Action"
 msgstr "Keine Aktion"
 msgstr "Keine Aktion"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:202
 msgid "No data"
 msgid "No data"
 msgstr "Keine Daten"
 msgstr "Keine Daten"
 
 
@@ -3483,9 +3487,13 @@ msgstr ""
 msgid "Off"
 msgid "Off"
 msgstr "Aus"
 msgstr "Aus"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/views/system/About.vue:31
+msgid "Official Document"
+msgstr "Offizielle Dokumentation"
+
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
-#: src/components/NodeSelector/NodeSelector.vue:94
+#: src/components/NodeSelector/NodeSelector.vue:107
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/views/dashboard/Environments.vue:99
 #: src/views/dashboard/Environments.vue:99
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3517,9 +3525,9 @@ msgstr "Ein"
 msgid "Once the verification is complete, the records will be removed."
 msgid "Once the verification is complete, the records will be removed."
 msgstr "Sobaöd die Überprüfung abgeschlossen ist, werden die Einträge entfernt."
 msgstr "Sobaöd die Überprüfung abgeschlossen ist, werden die Einträge entfernt."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
-#: src/components/NodeSelector/NodeSelector.vue:74
-#: src/components/NodeSelector/NodeSelector.vue:88
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
+#: src/components/NodeSelector/NodeSelector.vue:101
+#: src/components/NodeSelector/NodeSelector.vue:87
 #: src/views/dashboard/Environments.vue:92
 #: src/views/dashboard/Environments.vue:92
 #: src/views/environments/list/envColumns.tsx:51
 #: src/views/environments/list/envColumns.tsx:51
 msgid "Online"
 msgid "Online"
@@ -3537,7 +3545,7 @@ msgstr "Offen"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:280
 msgid "Or"
 msgid "Or"
 msgstr "Oder"
 msgstr "Oder"
 
 
@@ -3610,7 +3618,7 @@ msgstr ""
 "Berührung, Gesichtserkennung, ein Gerätepasswort oder eine PIN validieren. "
 "Berührung, Gesichtserkennung, ein Gerätepasswort oder eine PIN validieren. "
 "Sie können als Passwortersatz oder als 2FA-Methode verwendet werden."
 "Sie können als Passwortersatz oder als 2FA-Methode verwendet werden."
 
 
-#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:232 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "Passwort"
 msgstr "Passwort"
 
 
@@ -3672,7 +3680,7 @@ msgstr "Führe Core-Upgrade-Fehler aus"
 msgid "Performance"
 msgid "Performance"
 msgstr "Leistung"
 msgstr "Leistung"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:187
+#: src/views/dashboard/NginxDashBoard.vue:207
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "Leistungsmetriken"
 msgstr "Leistungsmetriken"
 
 
@@ -3696,7 +3704,7 @@ msgstr "PID-Pfad existiert nicht"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "Klartext ist leer"
 msgstr "Klartext ist leer"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:176
+#: src/views/dashboard/NginxDashBoard.vue:196
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -3908,7 +3916,7 @@ msgstr "Verhindere das Ändern des Root-Passworts in der Demo"
 msgid "Prohibit deleting the default user"
 msgid "Prohibit deleting the default user"
 msgstr "Verhindere das Löschen des Standardbenutzers"
 msgstr "Verhindere das Löschen des Standardbenutzers"
 
 
-#: src/views/system/About.vue:51
+#: src/views/system/About.vue:71
 msgid "Project Team"
 msgid "Project Team"
 msgstr "Projektteam"
 msgstr "Projektteam"
 
 
@@ -4037,7 +4045,7 @@ msgstr "Änderungsprotokoll"
 msgid "Reload"
 msgid "Reload"
 msgstr "Neu laden"
 msgstr "Neu laden"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: 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:209
 #: src/views/environments/list/Environment.vue:209
@@ -4065,7 +4073,7 @@ msgstr "Fehler beim Neuladen von Remote-Nginx"
 msgid "Reload Remote Nginx Success"
 msgid "Reload Remote Nginx Success"
 msgstr "Neustart von Remote-Nginx erfolgreich"
 msgstr "Neustart von Remote-Nginx erfolgreich"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:84
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110
 msgid "Reload request failed, please check your network connection"
 msgid "Reload request failed, please check your network connection"
 msgstr ""
 msgstr ""
 "Die Neulade-Anfrage ist fehlgeschlagen, bitte überprüfen Sie Ihre "
 "Die Neulade-Anfrage ist fehlgeschlagen, bitte überprüfen Sie Ihre "
@@ -4227,7 +4235,7 @@ msgstr "Antworten"
 msgid "Restart"
 msgid "Restart"
 msgstr "Neustart"
 msgstr "Neustart"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:238
 #: src/views/environments/list/Environment.vue:238
 msgid "Restart Nginx"
 msgid "Restart Nginx"
@@ -4249,7 +4257,7 @@ msgstr "Fehler beim Neustart von Remote-Nginx"
 msgid "Restart Remote Nginx Success"
 msgid "Restart Remote Nginx Success"
 msgstr "Neustart von Remote-Nginx erfolgreich"
 msgstr "Neustart von Remote-Nginx erfolgreich"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:104
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
 msgid "Restart request failed, please check your network connection"
 msgid "Restart request failed, please check your network connection"
 msgstr ""
 msgstr ""
 "Neustart-Anforderung fehlgeschlagen, bitte überprüfen Sie Ihre "
 "Neustart-Anforderung fehlgeschlagen, bitte überprüfen Sie Ihre "
@@ -4703,7 +4711,7 @@ msgstr "Gemeinsamer Speicherbereich"
 msgid "Show"
 msgid "Show"
 msgstr "Zeige"
 msgstr "Zeige"
 
 
-#: src/views/other/Login.vue:285
+#: src/views/other/Login.vue:289
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "Mit einem Passkey anmelden"
 msgstr "Mit einem Passkey anmelden"
 
 
@@ -4763,6 +4771,10 @@ msgstr "Wartezeit zwischen den Iterationen des Cache-Loaders"
 msgid "Sleep time between cache manager iterations"
 msgid "Sleep time between cache manager iterations"
 msgstr "Wartezeit zwischen den Iterationen des Cache-Managers"
 msgstr "Wartezeit zwischen den Iterationen des Cache-Managers"
 
 
+#: src/views/system/About.vue:46
+msgid "Sponsor"
+msgstr "Sponsor"
+
 #: src/views/certificate/CertificateEditor.vue:211
 #: src/views/certificate/CertificateEditor.vue:211
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "SSL-Zertifikatsinhalt"
 msgstr "SSL-Zertifikatsinhalt"
@@ -4812,7 +4824,7 @@ msgstr "SSL-Schlüsselpfad"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "Der SSL-Schlüsselpfad ist erforderlich, wenn HTTPS aktiviert ist"
 msgstr "Der SSL-Schlüsselpfad ist erforderlich, wenn HTTPS aktiviert ist"
 
 
-#: src/views/other/Login.vue:242
+#: src/views/other/Login.vue:246
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSO-Anmeldung"
 msgstr "SSO-Anmeldung"
 
 
@@ -5020,7 +5032,7 @@ msgstr "Fehler beim Synchronisieren der Konfiguration"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Konfiguration erfolgreich synchronisiert"
 msgstr "Konfiguration erfolgreich synchronisiert"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:122
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/views/environments/group/EnvGroup.vue:31
 #: src/views/environments/group/EnvGroup.vue:31
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "Synchrone Knoten"
 msgstr "Synchrone Knoten"
@@ -5259,7 +5271,7 @@ msgid ""
 "-_./:"
 "-_./:"
 msgstr "Dieses Feld darf nur Buchstaben, Unicode-Zeichen, Zahlen und -_./: enthalten"
 msgstr "Dieses Feld darf nur Buchstaben, Unicode-Zeichen, Zahlen und -_./: enthalten"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:155
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5388,10 +5400,14 @@ msgstr ""
 "vllm oder lmdeploy. Sie bieten einen OpenAI-kompatiblen API-Endpunkt, also "
 "vllm oder lmdeploy. Sie bieten einen OpenAI-kompatiblen API-Endpunkt, also "
 "setze die baseUrl auf deine lokale API."
 "setze die baseUrl auf deine lokale API."
 
 
-#: src/views/dashboard/NginxDashBoard.vue:55
+#: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
 msgid "Toggle failed"
 msgstr "Umschalten fehlgeschlagen"
 msgstr "Umschalten fehlgeschlagen"
 
 
+#: src/constants/errors/user.ts:13
+msgid "Token is empty"
+msgstr "Token ist leer"
+
 #: src/views/preference/tabs/OpenAISettings.vue:61
 #: src/views/preference/tabs/OpenAISettings.vue:61
 msgid "Token is not valid"
 msgid "Token is not valid"
 msgstr "Schlüssel ist ungültig"
 msgstr "Schlüssel ist ungültig"
@@ -5576,7 +5592,7 @@ msgstr "Benutzer hat OTP nicht als 2FA aktiviert"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "Benutzerprofil"
 msgstr "Benutzerprofil"
 
 
-#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:222 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Benutzername"
 msgstr "Benutzername"
@@ -5778,8 +5794,8 @@ msgstr "Scrheibe Zertifikat-Privatschlüssel auf die Festplatte"
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr "Schreibe Zertifikat auf die Festplatte"
 msgstr "Schreibe Zertifikat auf die Festplatte"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168
 #: 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:131
 #: src/views/preference/tabs/AuthSettings.vue:131

+ 60 - 44
app/src/language/en/app.po

@@ -206,7 +206,7 @@ msgstr ""
 msgid "Afterwards, refresh this page and click add passkey again."
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:115
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
 msgid "All"
 msgid "All"
 msgstr ""
 msgstr ""
 
 
@@ -283,7 +283,7 @@ msgstr ""
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:129
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 
 
@@ -299,7 +299,7 @@ msgstr ""
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 
 
@@ -533,7 +533,7 @@ msgstr ""
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/system/About.vue:55
+#: src/views/system/About.vue:75
 msgid "Build with"
 msgid "Build with"
 msgstr ""
 msgstr ""
 
 
@@ -623,7 +623,7 @@ msgstr ""
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:154
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr ""
 msgstr ""
 
 
@@ -1015,7 +1015,7 @@ msgstr ""
 msgid "Connected"
 msgid "Connected"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:87
+#: src/views/dashboard/NginxDashBoard.vue:100
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr ""
 msgstr ""
 
 
@@ -1667,7 +1667,7 @@ msgstr ""
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:152
+#: src/views/dashboard/NginxDashBoard.vue:172
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr ""
 msgstr ""
 
 
@@ -2250,7 +2250,7 @@ msgstr ""
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:143
+#: src/views/dashboard/NginxDashBoard.vue:163
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr ""
 msgstr ""
 
 
@@ -2455,6 +2455,10 @@ msgstr ""
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/user.ts:14
+msgid "Invalid claims type"
+msgstr ""
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr ""
 msgstr ""
@@ -2571,7 +2575,7 @@ msgstr ""
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:118
+#: src/views/dashboard/NginxDashBoard.vue:138
 msgid "Last update"
 msgid "Last update"
 msgstr ""
 msgstr ""
 
 
@@ -2608,7 +2612,7 @@ msgstr ""
 msgid "Lego disable CNAME Support"
 msgid "Lego disable CNAME Support"
 msgstr ""
 msgstr ""
 
 
-#: src/views/system/About.vue:63
+#: src/views/system/About.vue:83
 msgid "License"
 msgid "License"
 msgstr ""
 msgstr ""
 
 
@@ -2658,12 +2662,12 @@ msgstr ""
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:180
+#: src/views/dashboard/NginxDashBoard.vue:200
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr ""
 msgstr ""
 
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:71
+#: src/components/NodeSelector/NodeSelector.vue:84
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
@@ -2698,11 +2702,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:271
 msgid "Login"
 msgid "Login"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:76
+#: src/views/other/Login.vue:78
 msgid "Login successful"
 msgid "Login successful"
 msgstr ""
 msgstr ""
 
 
@@ -2945,7 +2949,7 @@ msgstr ""
 msgid "Name"
 msgid "Name"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:195
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr ""
 msgstr ""
 
 
@@ -3101,9 +3105,9 @@ msgstr ""
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:114
-#: src/views/dashboard/NginxDashBoard.vue:133
-#: src/views/dashboard/NginxDashBoard.vue:77
+#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:153
+#: src/views/dashboard/NginxDashBoard.vue:84
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr ""
 msgstr ""
 
 
@@ -3111,7 +3115,7 @@ msgstr ""
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr ""
 msgstr ""
 
 
@@ -3209,8 +3213,8 @@ msgid "Nginx.conf includes streams-enabled directory"
 msgstr ""
 msgstr ""
 
 
 #: src/components/ChatGPT/ChatMessageInput.vue:17
 #: src/components/ChatGPT/ChatMessageInput.vue:17
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
@@ -3227,7 +3231,7 @@ msgstr ""
 msgid "No Action"
 msgid "No Action"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:202
 msgid "No data"
 msgid "No data"
 msgstr ""
 msgstr ""
 
 
@@ -3358,9 +3362,13 @@ msgstr ""
 msgid "Off"
 msgid "Off"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/views/system/About.vue:31
+msgid "Official Document"
+msgstr ""
+
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
-#: src/components/NodeSelector/NodeSelector.vue:94
+#: src/components/NodeSelector/NodeSelector.vue:107
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/views/dashboard/Environments.vue:99
 #: src/views/dashboard/Environments.vue:99
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3392,9 +3400,9 @@ msgstr ""
 msgid "Once the verification is complete, the records will be removed."
 msgid "Once the verification is complete, the records will be removed."
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
-#: src/components/NodeSelector/NodeSelector.vue:74
-#: src/components/NodeSelector/NodeSelector.vue:88
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
+#: src/components/NodeSelector/NodeSelector.vue:101
+#: src/components/NodeSelector/NodeSelector.vue:87
 #: src/views/dashboard/Environments.vue:92
 #: src/views/dashboard/Environments.vue:92
 #: src/views/environments/list/envColumns.tsx:51
 #: src/views/environments/list/envColumns.tsx:51
 msgid "Online"
 msgid "Online"
@@ -3412,7 +3420,7 @@ msgstr ""
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr ""
 msgstr ""
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:280
 msgid "Or"
 msgid "Or"
 msgstr ""
 msgstr ""
 
 
@@ -3482,7 +3490,7 @@ msgid ""
 "password replacement or as a 2FA method."
 "password replacement or as a 2FA method."
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:232 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr ""
 msgstr ""
 
 
@@ -3544,7 +3552,7 @@ msgstr ""
 msgid "Performance"
 msgid "Performance"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:187
+#: src/views/dashboard/NginxDashBoard.vue:207
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr ""
 msgstr ""
 
 
@@ -3568,7 +3576,7 @@ msgstr ""
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:176
+#: src/views/dashboard/NginxDashBoard.vue:196
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -3762,7 +3770,7 @@ msgstr ""
 msgid "Prohibit deleting the default user"
 msgid "Prohibit deleting the default user"
 msgstr ""
 msgstr ""
 
 
-#: src/views/system/About.vue:51
+#: src/views/system/About.vue:71
 msgid "Project Team"
 msgid "Project Team"
 msgstr ""
 msgstr ""
 
 
@@ -3886,7 +3894,7 @@ msgstr ""
 msgid "Reload"
 msgid "Reload"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: 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:209
 #: src/views/environments/list/Environment.vue:209
@@ -3914,7 +3922,7 @@ msgstr ""
 msgid "Reload Remote Nginx Success"
 msgid "Reload Remote Nginx Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:84
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110
 msgid "Reload request failed, please check your network connection"
 msgid "Reload request failed, please check your network connection"
 msgstr ""
 msgstr ""
 
 
@@ -4071,7 +4079,7 @@ msgstr ""
 msgid "Restart"
 msgid "Restart"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:238
 #: src/views/environments/list/Environment.vue:238
 msgid "Restart Nginx"
 msgid "Restart Nginx"
@@ -4093,7 +4101,7 @@ msgstr ""
 msgid "Restart Remote Nginx Success"
 msgid "Restart Remote Nginx Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:104
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
 msgid "Restart request failed, please check your network connection"
 msgid "Restart request failed, please check your network connection"
 msgstr ""
 msgstr ""
 
 
@@ -4533,7 +4541,7 @@ msgstr ""
 msgid "Show"
 msgid "Show"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:285
+#: src/views/other/Login.vue:289
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr ""
 msgstr ""
 
 
@@ -4593,6 +4601,10 @@ msgstr ""
 msgid "Sleep time between cache manager iterations"
 msgid "Sleep time between cache manager iterations"
 msgstr ""
 msgstr ""
 
 
+#: src/views/system/About.vue:46
+msgid "Sponsor"
+msgstr ""
+
 #: src/views/certificate/CertificateEditor.vue:211
 #: src/views/certificate/CertificateEditor.vue:211
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr ""
 msgstr ""
@@ -4638,7 +4650,7 @@ msgstr ""
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:242
+#: src/views/other/Login.vue:246
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr ""
 msgstr ""
 
 
@@ -4833,7 +4845,7 @@ msgstr ""
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:122
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/views/environments/group/EnvGroup.vue:31
 #: src/views/environments/group/EnvGroup.vue:31
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr ""
 msgstr ""
@@ -5048,7 +5060,7 @@ msgid ""
 "_./:"
 "_./:"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:155
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5150,10 +5162,14 @@ msgid ""
 "local API."
 "local API."
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:55
+#: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
 msgid "Toggle failed"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/user.ts:13
+msgid "Token is empty"
+msgstr ""
+
 #: src/views/preference/tabs/OpenAISettings.vue:61
 #: src/views/preference/tabs/OpenAISettings.vue:61
 msgid "Token is not valid"
 msgid "Token is not valid"
 msgstr ""
 msgstr ""
@@ -5336,7 +5352,7 @@ msgstr ""
 msgid "User Profile"
 msgid "User Profile"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:222 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr ""
 msgstr ""
@@ -5519,8 +5535,8 @@ msgstr ""
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168
 #: 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:131
 #: src/views/preference/tabs/AuthSettings.vue:131

+ 60 - 44
app/src/language/es/app.po

@@ -231,7 +231,7 @@ msgstr ""
 "Después, actualice esta página y haga clic en agregar clave de acceso "
 "Después, actualice esta página y haga clic en agregar clave de acceso "
 "nuevamente."
 "nuevamente."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:115
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
 msgid "All"
 msgid "All"
 msgstr "Todos"
 msgstr "Todos"
 
 
@@ -310,7 +310,7 @@ msgstr "¿Estás seguro de que quieres eliminar permanentemente?"
 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?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:129
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 "¿Estás seguro de que deseas recargar Nginx en los siguientes nodos de "
 "¿Estás seguro de que deseas recargar Nginx en los siguientes nodos de "
@@ -328,7 +328,7 @@ msgstr "¿Está seguro de que desea eliminar este elemento?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "¿Está seguro de que quiere borrar esta ubicación?"
 msgstr "¿Está seguro de que quiere borrar esta ubicación?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 "¿Estás seguro de que deseas reiniciar Nginx en los siguientes nodos de "
 "¿Estás seguro de que deseas reiniciar Nginx en los siguientes nodos de "
@@ -575,7 +575,7 @@ msgstr ""
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr "El bloque es nulo"
 msgstr "El bloque es nulo"
 
 
-#: src/views/system/About.vue:55
+#: src/views/system/About.vue:75
 msgid "Build with"
 msgid "Build with"
 msgstr "Desarrollado con"
 msgstr "Desarrollado con"
 
 
@@ -669,7 +669,7 @@ msgstr "No se puede comparar: faltando contenido"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "No se puede eliminar la ruta protegida: {0}"
 msgstr "No se puede eliminar la ruta protegida: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:154
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "No se puede obtener datos de rendimiento en este estado"
 msgstr "No se puede obtener datos de rendimiento en este estado"
 
 
@@ -1098,7 +1098,7 @@ msgstr "Confirmar nueva contraseña"
 msgid "Connected"
 msgid "Connected"
 msgstr "Conectado"
 msgstr "Conectado"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:87
+#: src/views/dashboard/NginxDashBoard.vue:100
 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..."
 
 
@@ -1763,7 +1763,7 @@ msgstr "No se pudo habilitar el flujo %{name} en %{node}"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Habilitar el flujo %{name} en %{node} correctamente"
 msgstr "Habilitar el flujo %{name} en %{node} correctamente"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:152
+#: src/views/dashboard/NginxDashBoard.vue:172
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "Habilitar módulo stub_status"
 msgstr "Habilitar módulo stub_status"
 
 
@@ -2350,7 +2350,7 @@ msgstr "Generando clave privada para registrar cuenta"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "Error al obtener el usuario de ACME: {0}"
 msgstr "Error al obtener el usuario de ACME: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:143
+#: src/views/dashboard/NginxDashBoard.vue:163
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "Error al obtener los datos"
 msgstr "Error al obtener los datos"
 
 
@@ -2564,6 +2564,10 @@ msgstr "Formato de IV de AES no válido: {0}"
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "Formato de clave AES no válido: {0}"
 msgstr "Formato de clave AES no válido: {0}"
 
 
+#: src/constants/errors/user.ts:14
+msgid "Invalid claims type"
+msgstr "Tipo de reclamación no válido"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "Objeto de archivo no válido"
 msgstr "Objeto de archivo no válido"
@@ -2682,7 +2686,7 @@ msgstr "Hora del último respaldo"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Comprobado por última vez el"
 msgstr "Comprobado por última vez el"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:118
+#: src/views/dashboard/NginxDashBoard.vue:138
 msgid "Last update"
 msgid "Last update"
 msgstr "Última actualización"
 msgstr "Última actualización"
 
 
@@ -2719,7 +2723,7 @@ msgstr "Código de recuperación heredado no permitido ya que TOTP no está habi
 msgid "Lego disable CNAME Support"
 msgid "Lego disable CNAME Support"
 msgstr "Lego desactivar soporte CNAME"
 msgstr "Lego desactivar soporte CNAME"
 
 
-#: src/views/system/About.vue:63
+#: src/views/system/About.vue:83
 msgid "License"
 msgid "License"
 msgstr "Licencia"
 msgstr "Licencia"
 
 
@@ -2769,12 +2773,12 @@ msgstr "Pausa del cargador"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "Umbral del cargador"
 msgstr "Umbral del cargador"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:180
+#: src/views/dashboard/NginxDashBoard.vue:200
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "Cargando datos..."
 msgstr "Cargando datos..."
 
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:71
+#: src/components/NodeSelector/NodeSelector.vue:84
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
@@ -2813,11 +2817,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "Lista de registros"
 msgstr "Lista de registros"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:271
 msgid "Login"
 msgid "Login"
 msgstr "Acceso"
 msgstr "Acceso"
 
 
-#: src/views/other/Login.vue:76
+#: src/views/other/Login.vue:78
 msgid "Login successful"
 msgid "Login successful"
 msgstr "Acceso exitoso"
 msgstr "Acceso exitoso"
 
 
@@ -3069,7 +3073,7 @@ msgstr "Directiva multilínea"
 msgid "Name"
 msgid "Name"
 msgstr "Nombre"
 msgstr "Nombre"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:195
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "Es necesario habilitar el módulo stub_status"
 msgstr "Es necesario habilitar el módulo stub_status"
 
 
@@ -3225,9 +3229,9 @@ msgstr "Error de Nginx: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:114
-#: src/views/dashboard/NginxDashBoard.vue:133
-#: src/views/dashboard/NginxDashBoard.vue:77
+#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:153
+#: src/views/dashboard/NginxDashBoard.vue:84
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx no se está ejecutando"
 msgstr "Nginx no se está ejecutando"
 
 
@@ -3235,7 +3239,7 @@ msgstr "Nginx no se está ejecutando"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx no se está ejecutando en otro contenedor"
 msgstr "Nginx no se está ejecutando en otro contenedor"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx está en ejecución"
 msgstr "Nginx está en ejecución"
 
 
@@ -3335,8 +3339,8 @@ msgid "Nginx.conf includes streams-enabled directory"
 msgstr "Nginx.conf incluye el directorio streams-enabled"
 msgstr "Nginx.conf incluye el directorio streams-enabled"
 
 
 #: src/components/ChatGPT/ChatMessageInput.vue:17
 #: src/components/ChatGPT/ChatMessageInput.vue:17
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
@@ -3353,7 +3357,7 @@ msgstr "No"
 msgid "No Action"
 msgid "No Action"
 msgstr "Sin acción"
 msgstr "Sin acción"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:202
 msgid "No data"
 msgid "No data"
 msgstr "Sin datos"
 msgstr "Sin datos"
 
 
@@ -3491,9 +3495,13 @@ msgstr ""
 msgid "Off"
 msgid "Off"
 msgstr "Apagado"
 msgstr "Apagado"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/views/system/About.vue:31
+msgid "Official Document"
+msgstr "Documentación oficial"
+
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
-#: src/components/NodeSelector/NodeSelector.vue:94
+#: src/components/NodeSelector/NodeSelector.vue:107
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/views/dashboard/Environments.vue:99
 #: src/views/dashboard/Environments.vue:99
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3525,9 +3533,9 @@ msgstr "Encendido"
 msgid "Once the verification is complete, the records will be removed."
 msgid "Once the verification is complete, the records will be removed."
 msgstr "Una vez que se complete la verificación, los registros se eliminarán."
 msgstr "Una vez que se complete la verificación, los registros se eliminarán."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
-#: src/components/NodeSelector/NodeSelector.vue:74
-#: src/components/NodeSelector/NodeSelector.vue:88
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
+#: src/components/NodeSelector/NodeSelector.vue:101
+#: src/components/NodeSelector/NodeSelector.vue:87
 #: src/views/dashboard/Environments.vue:92
 #: src/views/dashboard/Environments.vue:92
 #: src/views/environments/list/envColumns.tsx:51
 #: src/views/environments/list/envColumns.tsx:51
 msgid "Online"
 msgid "Online"
@@ -3545,7 +3553,7 @@ msgstr "Abierto"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:280
 msgid "Or"
 msgid "Or"
 msgstr "O"
 msgstr "O"
 
 
@@ -3619,7 +3627,7 @@ msgstr ""
 "dispositivo o un PIN. Se pueden utilizar como reemplazo de contraseña o "
 "dispositivo o un PIN. Se pueden utilizar como reemplazo de contraseña o "
 "como método de autenticación de dos factores."
 "como método de autenticación de dos factores."
 
 
-#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:232 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "Contraseña"
 msgstr "Contraseña"
 
 
@@ -3681,7 +3689,7 @@ msgstr "Error al ejecutar la actualización del kernel"
 msgid "Performance"
 msgid "Performance"
 msgstr "Rendimiento"
 msgstr "Rendimiento"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:187
+#: src/views/dashboard/NginxDashBoard.vue:207
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "Métricas de rendimiento"
 msgstr "Métricas de rendimiento"
 
 
@@ -3705,7 +3713,7 @@ msgstr "La ruta del PID no existe"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "El texto plano está vacío"
 msgstr "El texto plano está vacío"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:176
+#: src/views/dashboard/NginxDashBoard.vue:196
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -3919,7 +3927,7 @@ msgstr "Prohibir cambiar la contraseña de root en la demostración"
 msgid "Prohibit deleting the default user"
 msgid "Prohibit deleting the default user"
 msgstr "Prohibir la eliminación del usuario predeterminado"
 msgstr "Prohibir la eliminación del usuario predeterminado"
 
 
-#: src/views/system/About.vue:51
+#: src/views/system/About.vue:71
 msgid "Project Team"
 msgid "Project Team"
 msgstr "Grupo del proyecto"
 msgstr "Grupo del proyecto"
 
 
@@ -4048,7 +4056,7 @@ msgstr "Nota de versión"
 msgid "Reload"
 msgid "Reload"
 msgstr "Recargar"
 msgstr "Recargar"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: 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:209
 #: src/views/environments/list/Environment.vue:209
@@ -4076,7 +4084,7 @@ msgstr "Error al recargar Nginx remoto"
 msgid "Reload Remote Nginx Success"
 msgid "Reload Remote Nginx Success"
 msgstr "Reinicio remoto de Nginx exitoso"
 msgstr "Reinicio remoto de Nginx exitoso"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:84
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110
 msgid "Reload request failed, please check your network connection"
 msgid "Reload request failed, please check your network connection"
 msgstr "La solicitud de recarga falló, por favor verifique su conexión de red"
 msgstr "La solicitud de recarga falló, por favor verifique su conexión de red"
 
 
@@ -4236,7 +4244,7 @@ msgstr "Respuestas"
 msgid "Restart"
 msgid "Restart"
 msgstr "Reiniciar"
 msgstr "Reiniciar"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:238
 #: src/views/environments/list/Environment.vue:238
 msgid "Restart Nginx"
 msgid "Restart Nginx"
@@ -4258,7 +4266,7 @@ msgstr "Error al reiniciar Nginx remoto"
 msgid "Restart Remote Nginx Success"
 msgid "Restart Remote Nginx Success"
 msgstr "Reinicio remoto de Nginx exitoso"
 msgstr "Reinicio remoto de Nginx exitoso"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:104
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
 msgid "Restart request failed, please check your network connection"
 msgid "Restart request failed, please check your network connection"
 msgstr "La solicitud de reinicio falló, por favor verifique su conexión de red"
 msgstr "La solicitud de reinicio falló, por favor verifique su conexión de red"
 
 
@@ -4712,7 +4720,7 @@ msgstr "Zona de Memoria Compartida"
 msgid "Show"
 msgid "Show"
 msgstr "Mostrar"
 msgstr "Mostrar"
 
 
-#: src/views/other/Login.vue:285
+#: src/views/other/Login.vue:289
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "Iniciar sesión con una llave de acceso"
 msgstr "Iniciar sesión con una llave de acceso"
 
 
@@ -4772,6 +4780,10 @@ msgstr "Tiempo de espera entre iteraciones del cargador de caché"
 msgid "Sleep time between cache manager iterations"
 msgid "Sleep time between cache manager iterations"
 msgstr "Tiempo de espera entre iteraciones del administrador de caché"
 msgstr "Tiempo de espera entre iteraciones del administrador de caché"
 
 
+#: src/views/system/About.vue:46
+msgid "Sponsor"
+msgstr "Patrocinador"
+
 #: src/views/certificate/CertificateEditor.vue:211
 #: src/views/certificate/CertificateEditor.vue:211
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "Contenido de certificado SSL"
 msgstr "Contenido de certificado SSL"
@@ -4821,7 +4833,7 @@ msgstr "Ruta de la clave SSL"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "Se requiere la ruta de la clave SSL cuando HTTPS está habilitado"
 msgstr "Se requiere la ruta de la clave SSL cuando HTTPS está habilitado"
 
 
-#: src/views/other/Login.vue:242
+#: src/views/other/Login.vue:246
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "Acceso SSO"
 msgstr "Acceso SSO"
 
 
@@ -5027,7 +5039,7 @@ msgstr "Error de Configuración de Sincronización"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Configuración de sincronización exitosa"
 msgstr "Configuración de sincronización exitosa"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:122
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/views/environments/group/EnvGroup.vue:31
 #: src/views/environments/group/EnvGroup.vue:31
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "Nodos de sincronización"
 msgstr "Nodos de sincronización"
@@ -5266,7 +5278,7 @@ msgid ""
 "-_./:"
 "-_./:"
 msgstr "Este campo solo debe contener letras, caracteres Unicode, números y -_./:"
 msgstr "Este campo solo debe contener letras, caracteres Unicode, números y -_./:"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:155
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5396,10 +5408,14 @@ msgstr ""
 "lmdeploy. Proporcionan un punto final de API compatible con OpenAI, así que "
 "lmdeploy. Proporcionan un punto final de API compatible con OpenAI, así que "
 "solo configura el baseUrl a tu API local."
 "solo configura el baseUrl a tu API local."
 
 
-#: src/views/dashboard/NginxDashBoard.vue:55
+#: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
 msgid "Toggle failed"
 msgstr "Error al cambiar"
 msgstr "Error al cambiar"
 
 
+#: src/constants/errors/user.ts:13
+msgid "Token is empty"
+msgstr "El token está vacío"
+
 #: src/views/preference/tabs/OpenAISettings.vue:61
 #: src/views/preference/tabs/OpenAISettings.vue:61
 msgid "Token is not valid"
 msgid "Token is not valid"
 msgstr "El token no es válido"
 msgstr "El token no es válido"
@@ -5584,7 +5600,7 @@ msgstr "Usuario no ha habilitado OTP como 2FA"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "Perfil de usuario"
 msgstr "Perfil de usuario"
 
 
-#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:222 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Nombre de usuario"
 msgstr "Nombre de usuario"
@@ -5782,8 +5798,8 @@ msgstr "Escribir la clave privada del certificado a disco"
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr "Escribir certificado a disco"
 msgstr "Escribir certificado a disco"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168
 #: 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:131
 #: src/views/preference/tabs/AuthSettings.vue:131

+ 60 - 44
app/src/language/fr_FR/app.po

@@ -229,7 +229,7 @@ msgstr ""
 "Ensuite, rafraîchissez cette page et cliquez à nouveau sur ajouter une clé "
 "Ensuite, rafraîchissez cette page et cliquez à nouveau sur ajouter une clé "
 "d'accès."
 "d'accès."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:115
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
 msgid "All"
 msgid "All"
 msgstr "Tous"
 msgstr "Tous"
 
 
@@ -308,7 +308,7 @@ msgstr "Êtes-vous sûr de vouloir supprimer définitivement ?"
 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 ?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:129
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 "Êtes-vous sûr de vouloir recharger Nginx sur les nœuds de synchronisation "
 "Êtes-vous sûr de vouloir recharger Nginx sur les nœuds de synchronisation "
@@ -326,7 +326,7 @@ msgstr "Êtes-vous sûr de vouloir supprimer cet élément ?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Voulez-vous vraiment supprimer cette localisation ?"
 msgstr "Voulez-vous vraiment supprimer cette localisation ?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 "Êtes-vous sûr de vouloir redémarrer Nginx sur les nœuds de synchronisation "
 "Êtes-vous sûr de vouloir redémarrer Nginx sur les nœuds de synchronisation "
@@ -571,7 +571,7 @@ msgstr "Ci-dessous sont sélectionnés les éléments que vous voulez modifier e
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr "Le bloc est nul"
 msgstr "Le bloc est nul"
 
 
-#: src/views/system/About.vue:55
+#: src/views/system/About.vue:75
 msgid "Build with"
 msgid "Build with"
 msgstr "Build avec"
 msgstr "Build avec"
 
 
@@ -664,7 +664,7 @@ msgstr "Impossible de comparer: contenu manquant"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "Impossible de supprimer le chemin protégé : {0}"
 msgstr "Impossible de supprimer le chemin protégé : {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:154
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "Impossible d'obtenir des données de performance dans cet état"
 msgstr "Impossible d'obtenir des données de performance dans cet état"
 
 
@@ -1094,7 +1094,7 @@ msgstr "Confirmer le nouveau mot de passe"
 msgid "Connected"
 msgid "Connected"
 msgstr "Connecté"
 msgstr "Connecté"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:87
+#: src/views/dashboard/NginxDashBoard.vue:100
 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..."
 
 
@@ -1757,7 +1757,7 @@ msgstr "Échec de l'activation du flux %{name} sur %{node}"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Activation du flux %{name} sur %{node} réussie"
 msgstr "Activation du flux %{name} sur %{node} réussie"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:152
+#: src/views/dashboard/NginxDashBoard.vue:172
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "Activer le module stub_status"
 msgstr "Activer le module stub_status"
 
 
@@ -2344,7 +2344,7 @@ msgstr "Génération de clé privée pour l'enregistrement du compte"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "Erreur lors de la récupération de l'utilisateur ACME: {0}"
 msgstr "Erreur lors de la récupération de l'utilisateur ACME: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:143
+#: src/views/dashboard/NginxDashBoard.vue:163
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "Échec de la récupération des données"
 msgstr "Échec de la récupération des données"
 
 
@@ -2562,6 +2562,10 @@ msgstr "Format de vecteur d'initialisation AES invalide : {0}"
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "Format de clé AES invalide : {0}"
 msgstr "Format de clé AES invalide : {0}"
 
 
+#: src/constants/errors/user.ts:14
+msgid "Invalid claims type"
+msgstr "Type de réclamation invalide"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "Objet de fichier non valide"
 msgstr "Objet de fichier non valide"
@@ -2680,7 +2684,7 @@ msgstr "Dernière heure de sauvegarde"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Dernière vérification le"
 msgstr "Dernière vérification le"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:118
+#: src/views/dashboard/NginxDashBoard.vue:138
 msgid "Last update"
 msgid "Last update"
 msgstr "Dernière mise à jour"
 msgstr "Dernière mise à jour"
 
 
@@ -2717,7 +2721,7 @@ msgstr "Ancien code de récupération non autorisé car TOTP n'est pas activé"
 msgid "Lego disable CNAME Support"
 msgid "Lego disable CNAME Support"
 msgstr "Lego désactiver la prise en charge CNAME"
 msgstr "Lego désactiver la prise en charge CNAME"
 
 
-#: src/views/system/About.vue:63
+#: src/views/system/About.vue:83
 msgid "License"
 msgid "License"
 msgstr "Licence"
 msgstr "Licence"
 
 
@@ -2767,12 +2771,12 @@ msgstr "Pause du chargeur"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "Seuil du chargeur"
 msgstr "Seuil du chargeur"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:180
+#: src/views/dashboard/NginxDashBoard.vue:200
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "Chargement des données..."
 msgstr "Chargement des données..."
 
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:71
+#: src/components/NodeSelector/NodeSelector.vue:84
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
@@ -2811,11 +2815,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "Liste des journaux"
 msgstr "Liste des journaux"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:271
 msgid "Login"
 msgid "Login"
 msgstr "Connexion"
 msgstr "Connexion"
 
 
-#: src/views/other/Login.vue:76
+#: src/views/other/Login.vue:78
 msgid "Login successful"
 msgid "Login successful"
 msgstr "Connexion réussie"
 msgstr "Connexion réussie"
 
 
@@ -3067,7 +3071,7 @@ msgstr "Directive multiligne"
 msgid "Name"
 msgid "Name"
 msgstr "Nom"
 msgstr "Nom"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:195
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "Il faut activer le module stub_status"
 msgstr "Il faut activer le module stub_status"
 
 
@@ -3223,9 +3227,9 @@ msgstr "Erreur Nginx : {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:114
-#: src/views/dashboard/NginxDashBoard.vue:133
-#: src/views/dashboard/NginxDashBoard.vue:77
+#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:153
+#: src/views/dashboard/NginxDashBoard.vue:84
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx n'est pas en cours d'exécution"
 msgstr "Nginx n'est pas en cours d'exécution"
 
 
@@ -3233,7 +3237,7 @@ msgstr "Nginx n'est pas en cours d'exécution"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx ne fonctionne pas dans un autre conteneur"
 msgstr "Nginx ne fonctionne pas dans un autre conteneur"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx est en cours d'exécution"
 msgstr "Nginx est en cours d'exécution"
 
 
@@ -3333,8 +3337,8 @@ msgid "Nginx.conf includes streams-enabled directory"
 msgstr "Nginx.conf inclut le répertoire streams-enabled"
 msgstr "Nginx.conf inclut le répertoire streams-enabled"
 
 
 #: src/components/ChatGPT/ChatMessageInput.vue:17
 #: src/components/ChatGPT/ChatMessageInput.vue:17
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
@@ -3351,7 +3355,7 @@ msgstr "Non"
 msgid "No Action"
 msgid "No Action"
 msgstr "Aucune action"
 msgstr "Aucune action"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:202
 msgid "No data"
 msgid "No data"
 msgstr "Aucune donnée"
 msgstr "Aucune donnée"
 
 
@@ -3488,9 +3492,13 @@ msgstr ""
 msgid "Off"
 msgid "Off"
 msgstr "Désactivé"
 msgstr "Désactivé"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/views/system/About.vue:31
+msgid "Official Document"
+msgstr "Documentation officielle"
+
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
-#: src/components/NodeSelector/NodeSelector.vue:94
+#: src/components/NodeSelector/NodeSelector.vue:107
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/views/dashboard/Environments.vue:99
 #: src/views/dashboard/Environments.vue:99
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3522,9 +3530,9 @@ msgstr "Activé"
 msgid "Once the verification is complete, the records will be removed."
 msgid "Once the verification is complete, the records will be removed."
 msgstr "Une fois la vérification terminée, les enregistrements seront supprimés."
 msgstr "Une fois la vérification terminée, les enregistrements seront supprimés."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
-#: src/components/NodeSelector/NodeSelector.vue:74
-#: src/components/NodeSelector/NodeSelector.vue:88
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
+#: src/components/NodeSelector/NodeSelector.vue:101
+#: src/components/NodeSelector/NodeSelector.vue:87
 #: src/views/dashboard/Environments.vue:92
 #: src/views/dashboard/Environments.vue:92
 #: src/views/environments/list/envColumns.tsx:51
 #: src/views/environments/list/envColumns.tsx:51
 msgid "Online"
 msgid "Online"
@@ -3542,7 +3550,7 @@ msgstr "Ouvert"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:280
 msgid "Or"
 msgid "Or"
 msgstr "Ou"
 msgstr "Ou"
 
 
@@ -3616,7 +3624,7 @@ msgstr ""
 "ou un code PIN. Elles peuvent être utilisées comme remplacement d'un mot de "
 "ou un code PIN. Elles peuvent être utilisées comme remplacement d'un mot de "
 "passe ou comme méthode d'authentification à deux facteurs (2FA)."
 "passe ou comme méthode d'authentification à deux facteurs (2FA)."
 
 
-#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:232 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "Mot de passe"
 msgstr "Mot de passe"
 
 
@@ -3680,7 +3688,7 @@ msgstr "Erreur lors de la mise a niveau du core"
 msgid "Performance"
 msgid "Performance"
 msgstr "Performance"
 msgstr "Performance"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:187
+#: src/views/dashboard/NginxDashBoard.vue:207
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "Métriques de performance"
 msgstr "Métriques de performance"
 
 
@@ -3704,7 +3712,7 @@ msgstr "Le chemin du PID n'existe pas"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "Le texte en clair est vide"
 msgstr "Le texte en clair est vide"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:176
+#: src/views/dashboard/NginxDashBoard.vue:196
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -3916,7 +3924,7 @@ msgstr "Interdire la modification du mot de passe root dans la démo"
 msgid "Prohibit deleting the default user"
 msgid "Prohibit deleting the default user"
 msgstr "Interdire la suppression de l'utilisateur par défaut"
 msgstr "Interdire la suppression de l'utilisateur par défaut"
 
 
-#: src/views/system/About.vue:51
+#: src/views/system/About.vue:71
 msgid "Project Team"
 msgid "Project Team"
 msgstr "Groupe de projet"
 msgstr "Groupe de projet"
 
 
@@ -4045,7 +4053,7 @@ msgstr "Note de version"
 msgid "Reload"
 msgid "Reload"
 msgstr "Recharger"
 msgstr "Recharger"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: 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:209
 #: src/views/environments/list/Environment.vue:209
@@ -4073,7 +4081,7 @@ msgstr "Erreur de rechargement de Nginx distant"
 msgid "Reload Remote Nginx Success"
 msgid "Reload Remote Nginx Success"
 msgstr "Rechargement distant de Nginx réussi"
 msgstr "Rechargement distant de Nginx réussi"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:84
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110
 msgid "Reload request failed, please check your network connection"
 msgid "Reload request failed, please check your network connection"
 msgstr ""
 msgstr ""
 "La demande de rechargement a échoué, veuillez vérifier votre connexion "
 "La demande de rechargement a échoué, veuillez vérifier votre connexion "
@@ -4235,7 +4243,7 @@ msgstr "Réponses"
 msgid "Restart"
 msgid "Restart"
 msgstr "Redémarrer"
 msgstr "Redémarrer"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:238
 #: src/views/environments/list/Environment.vue:238
 msgid "Restart Nginx"
 msgid "Restart Nginx"
@@ -4257,7 +4265,7 @@ msgstr "Erreur de redémarrage de Nginx distant"
 msgid "Restart Remote Nginx Success"
 msgid "Restart Remote Nginx Success"
 msgstr "Redémarrage distant de Nginx réussi"
 msgstr "Redémarrage distant de Nginx réussi"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:104
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
 msgid "Restart request failed, please check your network connection"
 msgid "Restart request failed, please check your network connection"
 msgstr "La demande de redémarrage a échoué, veuillez vérifier votre connexion réseau"
 msgstr "La demande de redémarrage a échoué, veuillez vérifier votre connexion réseau"
 
 
@@ -4711,7 +4719,7 @@ msgstr "Zone de Mémoire Partagée"
 msgid "Show"
 msgid "Show"
 msgstr "Afficher"
 msgstr "Afficher"
 
 
-#: src/views/other/Login.vue:285
+#: src/views/other/Login.vue:289
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "Se connecter avec une clé d'accès"
 msgstr "Se connecter avec une clé d'accès"
 
 
@@ -4771,6 +4779,10 @@ msgstr "Temps d'attente entre les itérations du chargeur de cache"
 msgid "Sleep time between cache manager iterations"
 msgid "Sleep time between cache manager iterations"
 msgstr "Temps d'attente entre les itérations du gestionnaire de cache"
 msgstr "Temps d'attente entre les itérations du gestionnaire de cache"
 
 
+#: src/views/system/About.vue:46
+msgid "Sponsor"
+msgstr "Sponsor"
+
 #: src/views/certificate/CertificateEditor.vue:211
 #: src/views/certificate/CertificateEditor.vue:211
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "Contenu du certificat SSL"
 msgstr "Contenu du certificat SSL"
@@ -4820,7 +4832,7 @@ msgstr "Chemin de la clé SSL"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "Le chemin de la clé SSL est requis lorsque HTTPS est activé"
 msgstr "Le chemin de la clé SSL est requis lorsque HTTPS est activé"
 
 
-#: src/views/other/Login.vue:242
+#: src/views/other/Login.vue:246
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "Connexion SSO"
 msgstr "Connexion SSO"
 
 
@@ -5028,7 +5040,7 @@ msgstr "Erreur de synchronisation de la configuration"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Synchronisation de la configuration réussie"
 msgstr "Synchronisation de la configuration réussie"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:122
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/views/environments/group/EnvGroup.vue:31
 #: src/views/environments/group/EnvGroup.vue:31
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "Nœuds de synchronisation"
 msgstr "Nœuds de synchronisation"
@@ -5272,7 +5284,7 @@ msgstr ""
 "Ce champ ne doit contenir que des lettres, des caractères Unicode, des "
 "Ce champ ne doit contenir que des lettres, des caractères Unicode, des "
 "chiffres et -_./:"
 "chiffres et -_./:"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:155
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5404,10 +5416,14 @@ msgstr ""
 "vllm ou lmdeploy. Ils fournissent un point de terminaison d'API compatible "
 "vllm ou lmdeploy. Ils fournissent un point de terminaison d'API compatible "
 "avec OpenAI, il suffit donc de définir le baseUrl sur votre API locale."
 "avec OpenAI, il suffit donc de définir le baseUrl sur votre API locale."
 
 
-#: src/views/dashboard/NginxDashBoard.vue:55
+#: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
 msgid "Toggle failed"
 msgstr "Échec de la bascule"
 msgstr "Échec de la bascule"
 
 
+#: src/constants/errors/user.ts:13
+msgid "Token is empty"
+msgstr "Le jeton est vide"
+
 #: src/views/preference/tabs/OpenAISettings.vue:61
 #: src/views/preference/tabs/OpenAISettings.vue:61
 msgid "Token is not valid"
 msgid "Token is not valid"
 msgstr "Le jeton n'est pas valide"
 msgstr "Le jeton n'est pas valide"
@@ -5592,7 +5608,7 @@ msgstr "L'utilisateur n'a pas activé l'OTP comme 2FA"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "Profil utilisateur"
 msgstr "Profil utilisateur"
 
 
-#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:222 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Nom d'utilisateur"
 msgstr "Nom d'utilisateur"
@@ -5793,8 +5809,8 @@ msgstr "Écriture de la clé privée du certificat sur le disque"
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr "Écriture du certificat sur le disque"
 msgstr "Écriture du certificat sur le disque"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168
 #: 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:131
 #: src/views/preference/tabs/AuthSettings.vue:131

+ 60 - 44
app/src/language/ja_JP/app.po

@@ -223,7 +223,7 @@ msgstr "アドバンスモード"
 msgid "Afterwards, refresh this page and click add passkey again."
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr "その後、このページを更新し、再度パスキーを追加をクリックしてください。"
 msgstr "その後、このページを更新し、再度パスキーを追加をクリックしてください。"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:115
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
 msgid "All"
 msgid "All"
 msgstr "すべて"
 msgstr "すべて"
 
 
@@ -300,7 +300,7 @@ msgstr "完全に削除してもよろしいですか?"
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "削除してもよろしいですか?"
 msgstr "削除してもよろしいですか?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:129
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr "以下の同期ノードでNginxを再読み込みしてもよろしいですか?"
 msgstr "以下の同期ノードでNginxを再読み込みしてもよろしいですか?"
 
 
@@ -316,7 +316,7 @@ msgstr "このアイテムを削除してもよろしいですか?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "このLocationを削除してもよろしいですか?"
 msgstr "このLocationを削除してもよろしいですか?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr "以下の同期ノードでNginxを再起動してもよろしいですか?"
 msgstr "以下の同期ノードでNginxを再起動してもよろしいですか?"
 
 
@@ -549,7 +549,7 @@ msgstr "以下は一括修正したい選択項目です"
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr "ブロックがnilです"
 msgstr "ブロックがnilです"
 
 
-#: src/views/system/About.vue:55
+#: src/views/system/About.vue:75
 msgid "Build with"
 msgid "Build with"
 msgstr "ビルド環境"
 msgstr "ビルド環境"
 
 
@@ -641,7 +641,7 @@ msgstr "比較できません:不足しているコンテンツ"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "保護されたパスを削除できません: {0}"
 msgstr "保護されたパスを削除できません: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:154
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "この状態でパフォーマンスデータを取得できません"
 msgstr "この状態でパフォーマンスデータを取得できません"
 
 
@@ -1052,7 +1052,7 @@ msgstr "新しいパスワードを確認"
 msgid "Connected"
 msgid "Connected"
 msgstr "接続済み"
 msgstr "接続済み"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:87
+#: src/views/dashboard/NginxDashBoard.vue:100
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "接続エラー、再接続を試みています..."
 msgstr "接続エラー、再接続を試みています..."
 
 
@@ -1703,7 +1703,7 @@ msgstr "ストリーム %{name} を %{node} で有効化できませんでした
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "ストリーム %{name} を %{node} で有効化しました"
 msgstr "ストリーム %{name} を %{node} で有効化しました"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:152
+#: src/views/dashboard/NginxDashBoard.vue:172
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "stub_status モジュールを有効にする"
 msgstr "stub_status モジュールを有効にする"
 
 
@@ -2286,7 +2286,7 @@ msgstr "アカウント登録用の秘密鍵を生成中"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "ACMEユーザーの取得エラー: {0}"
 msgstr "ACMEユーザーの取得エラー: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:143
+#: src/views/dashboard/NginxDashBoard.vue:163
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "データの取得に失敗しました"
 msgstr "データの取得に失敗しました"
 
 
@@ -2491,6 +2491,10 @@ msgstr "無効なAES IV形式: {0}"
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "無効なAESキーフォーマット: {0}"
 msgstr "無効なAESキーフォーマット: {0}"
 
 
+#: src/constants/errors/user.ts:14
+msgid "Invalid claims type"
+msgstr "無効なクレームタイプ"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "無効なファイルオブジェクト"
 msgstr "無効なファイルオブジェクト"
@@ -2607,7 +2611,7 @@ msgstr "最終バックアップ時刻"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "最終確認日時"
 msgstr "最終確認日時"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:118
+#: src/views/dashboard/NginxDashBoard.vue:138
 msgid "Last update"
 msgid "Last update"
 msgstr "最終更新"
 msgstr "最終更新"
 
 
@@ -2644,7 +2648,7 @@ msgstr "TOTPが有効になっていないため、従来のリカバリーコ
 msgid "Lego disable CNAME Support"
 msgid "Lego disable CNAME Support"
 msgstr "Lego CNAME サポートを無効にする"
 msgstr "Lego CNAME サポートを無効にする"
 
 
-#: src/views/system/About.vue:63
+#: src/views/system/About.vue:83
 msgid "License"
 msgid "License"
 msgstr "ライセンス"
 msgstr "ライセンス"
 
 
@@ -2694,12 +2698,12 @@ msgstr "ローダー スリープ"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "ローダー閾値"
 msgstr "ローダー閾値"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:180
+#: src/views/dashboard/NginxDashBoard.vue:200
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "データを読み込んでいます..."
 msgstr "データを読み込んでいます..."
 
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:71
+#: src/components/NodeSelector/NodeSelector.vue:84
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
@@ -2736,11 +2740,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "ログリスト"
 msgstr "ログリスト"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:271
 msgid "Login"
 msgid "Login"
 msgstr "ログイン"
 msgstr "ログイン"
 
 
-#: src/views/other/Login.vue:76
+#: src/views/other/Login.vue:78
 msgid "Login successful"
 msgid "Login successful"
 msgstr "ログインに成功しました"
 msgstr "ログインに成功しました"
 
 
@@ -2989,7 +2993,7 @@ msgstr "複数行ディレクティブ"
 msgid "Name"
 msgid "Name"
 msgstr "名前"
 msgstr "名前"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:195
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "stub_statusモジュールを有効にする必要があります"
 msgstr "stub_statusモジュールを有効にする必要があります"
 
 
@@ -3145,9 +3149,9 @@ msgstr "Nginxエラー: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:114
-#: src/views/dashboard/NginxDashBoard.vue:133
-#: src/views/dashboard/NginxDashBoard.vue:77
+#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:153
+#: src/views/dashboard/NginxDashBoard.vue:84
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx は実行されていません"
 msgstr "Nginx は実行されていません"
 
 
@@ -3155,7 +3159,7 @@ msgstr "Nginx は実行されていません"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx は他のコンテナで実行されていません"
 msgstr "Nginx は他のコンテナで実行されていません"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx は実行中です"
 msgstr "Nginx は実行中です"
 
 
@@ -3253,8 +3257,8 @@ msgid "Nginx.conf includes streams-enabled directory"
 msgstr "Nginx.conf には streams-enabled ディレクトリが含まれています"
 msgstr "Nginx.conf には streams-enabled ディレクトリが含まれています"
 
 
 #: src/components/ChatGPT/ChatMessageInput.vue:17
 #: src/components/ChatGPT/ChatMessageInput.vue:17
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
@@ -3271,7 +3275,7 @@ msgstr "いいえ"
 msgid "No Action"
 msgid "No Action"
 msgstr "アクションなし"
 msgstr "アクションなし"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:202
 msgid "No data"
 msgid "No data"
 msgstr "データなし"
 msgstr "データなし"
 
 
@@ -3402,9 +3406,13 @@ msgstr "OCSP Must Staple は、Firefox を使用した初回アクセス時に
 msgid "Off"
 msgid "Off"
 msgstr "オフ"
 msgstr "オフ"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/views/system/About.vue:31
+msgid "Official Document"
+msgstr "公式ドキュメント"
+
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
-#: src/components/NodeSelector/NodeSelector.vue:94
+#: src/components/NodeSelector/NodeSelector.vue:107
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/views/dashboard/Environments.vue:99
 #: src/views/dashboard/Environments.vue:99
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3436,9 +3444,9 @@ msgstr "オン"
 msgid "Once the verification is complete, the records will be removed."
 msgid "Once the verification is complete, the records will be removed."
 msgstr "検証が完了すると、レコードは削除されます。"
 msgstr "検証が完了すると、レコードは削除されます。"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
-#: src/components/NodeSelector/NodeSelector.vue:74
-#: src/components/NodeSelector/NodeSelector.vue:88
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
+#: src/components/NodeSelector/NodeSelector.vue:101
+#: src/components/NodeSelector/NodeSelector.vue:87
 #: src/views/dashboard/Environments.vue:92
 #: src/views/dashboard/Environments.vue:92
 #: src/views/environments/list/envColumns.tsx:51
 #: src/views/environments/list/envColumns.tsx:51
 msgid "Online"
 msgid "Online"
@@ -3456,7 +3464,7 @@ msgstr "開いている"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:280
 msgid "Or"
 msgid "Or"
 msgstr "または"
 msgstr "または"
 
 
@@ -3528,7 +3536,7 @@ msgstr ""
 "パスキーは、タッチ、顔認証、デバイスパスワード、または PIN を使用して身元を確認する WebAuthn 認証情報です。パスワードの代わりや 2FA "
 "パスキーは、タッチ、顔認証、デバイスパスワード、または PIN を使用して身元を確認する WebAuthn 認証情報です。パスワードの代わりや 2FA "
 "方法として使用できます。"
 "方法として使用できます。"
 
 
-#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:232 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "パスワード"
 msgstr "パスワード"
 
 
@@ -3590,7 +3598,7 @@ msgstr "コアアップグレード実行エラー"
 msgid "Performance"
 msgid "Performance"
 msgstr "パフォーマンス"
 msgstr "パフォーマンス"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:187
+#: src/views/dashboard/NginxDashBoard.vue:207
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "パフォーマンスメトリクス"
 msgstr "パフォーマンスメトリクス"
 
 
@@ -3614,7 +3622,7 @@ msgstr "PID パスが存在しません"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "プレーンテキストが空です"
 msgstr "プレーンテキストが空です"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:176
+#: src/views/dashboard/NginxDashBoard.vue:196
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -3809,7 +3817,7 @@ msgstr "デモでは root パスワードの変更を禁止します"
 msgid "Prohibit deleting the default user"
 msgid "Prohibit deleting the default user"
 msgstr "デフォルトユーザーの削除を禁止します"
 msgstr "デフォルトユーザーの削除を禁止します"
 
 
-#: src/views/system/About.vue:51
+#: src/views/system/About.vue:71
 msgid "Project Team"
 msgid "Project Team"
 msgstr "プロジェクトチーム"
 msgstr "プロジェクトチーム"
 
 
@@ -3933,7 +3941,7 @@ msgstr "リリースノート"
 msgid "Reload"
 msgid "Reload"
 msgstr "再読み込み"
 msgstr "再読み込み"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: 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:209
 #: src/views/environments/list/Environment.vue:209
@@ -3961,7 +3969,7 @@ msgstr "リモートNginxの再読み込みエラー"
 msgid "Reload Remote Nginx Success"
 msgid "Reload Remote Nginx Success"
 msgstr "リモートNginxのリロード成功"
 msgstr "リモートNginxのリロード成功"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:84
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110
 msgid "Reload request failed, please check your network connection"
 msgid "Reload request failed, please check your network connection"
 msgstr "再読み込みリクエストが失敗しました。ネットワーク接続を確認してください"
 msgstr "再読み込みリクエストが失敗しました。ネットワーク接続を確認してください"
 
 
@@ -4118,7 +4126,7 @@ msgstr "レスポンス"
 msgid "Restart"
 msgid "Restart"
 msgstr "再起動"
 msgstr "再起動"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:238
 #: src/views/environments/list/Environment.vue:238
 msgid "Restart Nginx"
 msgid "Restart Nginx"
@@ -4140,7 +4148,7 @@ msgstr "リモートNginxの再起動エラー"
 msgid "Restart Remote Nginx Success"
 msgid "Restart Remote Nginx Success"
 msgstr "リモートNginxの再起動成功"
 msgstr "リモートNginxの再起動成功"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:104
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
 msgid "Restart request failed, please check your network connection"
 msgid "Restart request failed, please check your network connection"
 msgstr "再起動リクエストが失敗しました。ネットワーク接続を確認してください"
 msgstr "再起動リクエストが失敗しました。ネットワーク接続を確認してください"
 
 
@@ -4584,7 +4592,7 @@ msgstr "共有メモリゾーン"
 msgid "Show"
 msgid "Show"
 msgstr "表示"
 msgstr "表示"
 
 
-#: src/views/other/Login.vue:285
+#: src/views/other/Login.vue:289
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "パスキーでサインイン"
 msgstr "パスキーでサインイン"
 
 
@@ -4644,6 +4652,10 @@ msgstr "キャッシュローダーの反復処理間の待機時間"
 msgid "Sleep time between cache manager iterations"
 msgid "Sleep time between cache manager iterations"
 msgstr "キャッシュマネージャーの反復処理間の待機時間"
 msgstr "キャッシュマネージャーの反復処理間の待機時間"
 
 
+#: src/views/system/About.vue:46
+msgid "Sponsor"
+msgstr "スポンサー"
+
 #: src/views/certificate/CertificateEditor.vue:211
 #: src/views/certificate/CertificateEditor.vue:211
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "SSL証明書の内容"
 msgstr "SSL証明書の内容"
@@ -4689,7 +4701,7 @@ msgstr "SSLキーのパス"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "HTTPS を有効にするには SSL キーのパスが必要です"
 msgstr "HTTPS を有効にするには SSL キーのパスが必要です"
 
 
-#: src/views/other/Login.vue:242
+#: src/views/other/Login.vue:246
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSOログイン"
 msgstr "SSOログイン"
 
 
@@ -4890,7 +4902,7 @@ msgstr "設定同期エラー"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "設定の同期に成功しました"
 msgstr "設定の同期に成功しました"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:122
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/views/environments/group/EnvGroup.vue:31
 #: src/views/environments/group/EnvGroup.vue:31
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "同期ノード"
 msgstr "同期ノード"
@@ -5108,7 +5120,7 @@ msgid ""
 "-_./:"
 "-_./:"
 msgstr "このフィールドには、文字、Unicode文字、数字、および -_./: のみを含める必要があります"
 msgstr "このフィールドには、文字、Unicode文字、数字、および -_./: のみを含める必要があります"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:155
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5217,10 +5229,14 @@ msgstr ""
 "ローカルの大規模モデルを使用するには、ollama、vllm、または lmdeploy でデプロイしてください。これらは OpenAI 互換の API "
 "ローカルの大規模モデルを使用するには、ollama、vllm、または lmdeploy でデプロイしてください。これらは OpenAI 互換の API "
 "エンドポイントを提供するため、baseUrl をローカルの API に設定するだけです。"
 "エンドポイントを提供するため、baseUrl をローカルの API に設定するだけです。"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:55
+#: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
 msgid "Toggle failed"
 msgstr "切り替えに失敗しました"
 msgstr "切り替えに失敗しました"
 
 
+#: src/constants/errors/user.ts:13
+msgid "Token is empty"
+msgstr "トークンが空です"
+
 #: src/views/preference/tabs/OpenAISettings.vue:61
 #: src/views/preference/tabs/OpenAISettings.vue:61
 msgid "Token is not valid"
 msgid "Token is not valid"
 msgstr "トークンが無効です"
 msgstr "トークンが無効です"
@@ -5403,7 +5419,7 @@ msgstr "ユーザーはOTPを2FAとして有効にしていません"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "ユーザープロフィール"
 msgstr "ユーザープロフィール"
 
 
-#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:222 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "ユーザー名"
 msgstr "ユーザー名"
@@ -5588,8 +5604,8 @@ msgstr "証明書の秘密鍵をディスクに書き込んでいます"
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr "証明書をディスクに書き込み中"
 msgstr "証明書をディスクに書き込み中"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168
 #: 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:131
 #: src/views/preference/tabs/AuthSettings.vue:131

+ 60 - 44
app/src/language/ko_KR/app.po

@@ -221,7 +221,7 @@ msgstr "고급 모드"
 msgid "Afterwards, refresh this page and click add passkey again."
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr "이후에 이 페이지를 새로 고치고 패스키 추가를 다시 클릭하세요."
 msgstr "이후에 이 페이지를 새로 고치고 패스키 추가를 다시 클릭하세요."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:115
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
 msgid "All"
 msgid "All"
 msgstr "모두"
 msgstr "모두"
 
 
@@ -298,7 +298,7 @@ msgstr "정말 영구적으로 삭제하시겠습니까?"
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "정말 삭제하시겠습니까?"
 msgstr "정말 삭제하시겠습니까?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:129
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr "다음 동기화 노드에서 Nginx를 다시 로드하시겠습니까?"
 msgstr "다음 동기화 노드에서 Nginx를 다시 로드하시겠습니까?"
 
 
@@ -314,7 +314,7 @@ msgstr "이 항목을 제거하시겠습니까?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "이 위치를 제거하시겠습니까?"
 msgstr "이 위치를 제거하시겠습니까?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr "다음 동기화 노드에서 Nginx를 다시 시작하시겠습니까?"
 msgstr "다음 동기화 노드에서 Nginx를 다시 시작하시겠습니까?"
 
 
@@ -547,7 +547,7 @@ msgstr "아래에는 일괄 수정하려는 선택된 항목이 있습니다"
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr "블록이 nil입니다"
 msgstr "블록이 nil입니다"
 
 
-#: src/views/system/About.vue:55
+#: src/views/system/About.vue:75
 msgid "Build with"
 msgid "Build with"
 msgstr "빌드 환경"
 msgstr "빌드 환경"
 
 
@@ -639,7 +639,7 @@ msgstr "비교할 수 없습니다 : 내용 누락"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "보호된 경로를 삭제할 수 없습니다: {0}"
 msgstr "보호된 경로를 삭제할 수 없습니다: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:154
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "이 상태에서 성능 데이터를 얻을 수 없습니다"
 msgstr "이 상태에서 성능 데이터를 얻을 수 없습니다"
 
 
@@ -1049,7 +1049,7 @@ msgstr "새 비밀번호 확인"
 msgid "Connected"
 msgid "Connected"
 msgstr "연결됨"
 msgstr "연결됨"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:87
+#: src/views/dashboard/NginxDashBoard.vue:100
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "연결 오류, 다시 연결 시도 중..."
 msgstr "연결 오류, 다시 연결 시도 중..."
 
 
@@ -1702,7 +1702,7 @@ msgstr "%{node}에서 스트림 %{name} 활성화 실패"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "%{node}에서 스트림 %{name} 활성화 성공"
 msgstr "%{node}에서 스트림 %{name} 활성화 성공"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:152
+#: src/views/dashboard/NginxDashBoard.vue:172
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "stub_status 모듈 활성화"
 msgstr "stub_status 모듈 활성화"
 
 
@@ -2285,7 +2285,7 @@ msgstr "계정 등록을 위한 개인 키 생성 중"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "ACME 사용자 가져오기 오류: {0}"
 msgstr "ACME 사용자 가져오기 오류: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:143
+#: src/views/dashboard/NginxDashBoard.vue:163
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "데이터 가져오기 실패"
 msgstr "데이터 가져오기 실패"
 
 
@@ -2490,6 +2490,10 @@ msgstr "잘못된 AES IV 형식: {0}"
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "잘못된 AES 키 형식: {0}"
 msgstr "잘못된 AES 키 형식: {0}"
 
 
+#: src/constants/errors/user.ts:14
+msgid "Invalid claims type"
+msgstr "유효하지 않은 클레임 유형"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "잘못된 파일 객체"
 msgstr "잘못된 파일 객체"
@@ -2606,7 +2610,7 @@ msgstr "마지막 백업 시간"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "마지막 확인 시간"
 msgstr "마지막 확인 시간"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:118
+#: src/views/dashboard/NginxDashBoard.vue:138
 msgid "Last update"
 msgid "Last update"
 msgstr "마지막 업데이트"
 msgstr "마지막 업데이트"
 
 
@@ -2643,7 +2647,7 @@ msgstr "TOTP가 활성화되지 않았기 때문에 레거시 복구 코드는 
 msgid "Lego disable CNAME Support"
 msgid "Lego disable CNAME Support"
 msgstr "Lego CNAME 지원 비활성화"
 msgstr "Lego CNAME 지원 비활성화"
 
 
-#: src/views/system/About.vue:63
+#: src/views/system/About.vue:83
 msgid "License"
 msgid "License"
 msgstr "라이선스"
 msgstr "라이선스"
 
 
@@ -2693,12 +2697,12 @@ msgstr "로더 슬립"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "로더 임계값"
 msgstr "로더 임계값"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:180
+#: src/views/dashboard/NginxDashBoard.vue:200
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "데이터를 불러오는 중..."
 msgstr "데이터를 불러오는 중..."
 
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:71
+#: src/components/NodeSelector/NodeSelector.vue:84
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
@@ -2735,11 +2739,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "로그 목록"
 msgstr "로그 목록"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:271
 msgid "Login"
 msgid "Login"
 msgstr "로그인"
 msgstr "로그인"
 
 
-#: src/views/other/Login.vue:76
+#: src/views/other/Login.vue:78
 msgid "Login successful"
 msgid "Login successful"
 msgstr "로그인 성공"
 msgstr "로그인 성공"
 
 
@@ -2985,7 +2989,7 @@ msgstr "여러 줄 지시문"
 msgid "Name"
 msgid "Name"
 msgstr "이름"
 msgstr "이름"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:195
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "stub_status 모듈을 활성화해야 합니다"
 msgstr "stub_status 모듈을 활성화해야 합니다"
 
 
@@ -3141,9 +3145,9 @@ msgstr "Nginx 오류: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:114
-#: src/views/dashboard/NginxDashBoard.vue:133
-#: src/views/dashboard/NginxDashBoard.vue:77
+#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:153
+#: src/views/dashboard/NginxDashBoard.vue:84
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx가 실행 중이 아닙니다"
 msgstr "Nginx가 실행 중이 아닙니다"
 
 
@@ -3151,7 +3155,7 @@ msgstr "Nginx가 실행 중이 아닙니다"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx가 다른 컨테이너에서 실행되고 있지 않습니다"
 msgstr "Nginx가 다른 컨테이너에서 실행되고 있지 않습니다"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx가 실행 중입니다"
 msgstr "Nginx가 실행 중입니다"
 
 
@@ -3249,8 +3253,8 @@ msgid "Nginx.conf includes streams-enabled directory"
 msgstr "Nginx.conf에는 streams-enabled 디렉토리가 포함됩니다"
 msgstr "Nginx.conf에는 streams-enabled 디렉토리가 포함됩니다"
 
 
 #: src/components/ChatGPT/ChatMessageInput.vue:17
 #: src/components/ChatGPT/ChatMessageInput.vue:17
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
@@ -3267,7 +3271,7 @@ msgstr "아니요"
 msgid "No Action"
 msgid "No Action"
 msgstr "작업 없음"
 msgstr "작업 없음"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:202
 msgid "No data"
 msgid "No data"
 msgstr "데이터 없음"
 msgstr "데이터 없음"
 
 
@@ -3398,9 +3402,13 @@ msgstr "OCSP Must Staple은 Firefox를 사용한 첫 접속 시 일부 사용자
 msgid "Off"
 msgid "Off"
 msgstr "끔"
 msgstr "끔"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/views/system/About.vue:31
+msgid "Official Document"
+msgstr "공식 문서"
+
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
-#: src/components/NodeSelector/NodeSelector.vue:94
+#: src/components/NodeSelector/NodeSelector.vue:107
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/views/dashboard/Environments.vue:99
 #: src/views/dashboard/Environments.vue:99
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3432,9 +3440,9 @@ msgstr "켜짐"
 msgid "Once the verification is complete, the records will be removed."
 msgid "Once the verification is complete, the records will be removed."
 msgstr "검증이 완료되면, 레코드는 제거됩니다."
 msgstr "검증이 완료되면, 레코드는 제거됩니다."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
-#: src/components/NodeSelector/NodeSelector.vue:74
-#: src/components/NodeSelector/NodeSelector.vue:88
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
+#: src/components/NodeSelector/NodeSelector.vue:101
+#: src/components/NodeSelector/NodeSelector.vue:87
 #: src/views/dashboard/Environments.vue:92
 #: src/views/dashboard/Environments.vue:92
 #: src/views/environments/list/envColumns.tsx:51
 #: src/views/environments/list/envColumns.tsx:51
 msgid "Online"
 msgid "Online"
@@ -3452,7 +3460,7 @@ msgstr "열림"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "오픈AI"
 msgstr "오픈AI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:280
 msgid "Or"
 msgid "Or"
 msgstr "또는"
 msgstr "또는"
 
 
@@ -3524,7 +3532,7 @@ msgstr ""
 "패스키는 터치, 얼굴 인식, 기기 비밀번호 또는 PIN을 사용하여 신원을 확인하는 웹인증(WebAuthn) 자격 증명입니다. 비밀번호 "
 "패스키는 터치, 얼굴 인식, 기기 비밀번호 또는 PIN을 사용하여 신원을 확인하는 웹인증(WebAuthn) 자격 증명입니다. 비밀번호 "
 "대체 또는 2FA 방법으로 사용할 수 있습니다."
 "대체 또는 2FA 방법으로 사용할 수 있습니다."
 
 
-#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:232 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "비밀번호"
 msgstr "비밀번호"
 
 
@@ -3586,7 +3594,7 @@ msgstr "핵심 업그레이드 오류 수행"
 msgid "Performance"
 msgid "Performance"
 msgstr "성능"
 msgstr "성능"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:187
+#: src/views/dashboard/NginxDashBoard.vue:207
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "성능 메트릭"
 msgstr "성능 메트릭"
 
 
@@ -3610,7 +3618,7 @@ msgstr "PID 경로가 존재하지 않습니다"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "평문이 비어 있습니다"
 msgstr "평문이 비어 있습니다"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:176
+#: src/views/dashboard/NginxDashBoard.vue:196
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -3803,7 +3811,7 @@ msgstr "데모에서 루트 비밀번호 변경 금지"
 msgid "Prohibit deleting the default user"
 msgid "Prohibit deleting the default user"
 msgstr "기본 사용자 삭제 금지"
 msgstr "기본 사용자 삭제 금지"
 
 
-#: src/views/system/About.vue:51
+#: src/views/system/About.vue:71
 msgid "Project Team"
 msgid "Project Team"
 msgstr "프로젝트 팀"
 msgstr "프로젝트 팀"
 
 
@@ -3927,7 +3935,7 @@ msgstr "릴리스 노트"
 msgid "Reload"
 msgid "Reload"
 msgstr "리로드"
 msgstr "리로드"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: 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:209
 #: src/views/environments/list/Environment.vue:209
@@ -3955,7 +3963,7 @@ msgstr "원격 Nginx 다시 로드 오류"
 msgid "Reload Remote Nginx Success"
 msgid "Reload Remote Nginx Success"
 msgstr "원격 Nginx 다시 로드 성공"
 msgstr "원격 Nginx 다시 로드 성공"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:84
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110
 msgid "Reload request failed, please check your network connection"
 msgid "Reload request failed, please check your network connection"
 msgstr "다시 로드 요청이 실패했습니다. 네트워크 연결을 확인하세요"
 msgstr "다시 로드 요청이 실패했습니다. 네트워크 연결을 확인하세요"
 
 
@@ -4114,7 +4122,7 @@ msgstr "응답"
 msgid "Restart"
 msgid "Restart"
 msgstr "재시작"
 msgstr "재시작"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:238
 #: src/views/environments/list/Environment.vue:238
 msgid "Restart Nginx"
 msgid "Restart Nginx"
@@ -4136,7 +4144,7 @@ msgstr "원격 Nginx 재시작 오류"
 msgid "Restart Remote Nginx Success"
 msgid "Restart Remote Nginx Success"
 msgstr "원격 Nginx 재시작 성공"
 msgstr "원격 Nginx 재시작 성공"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:104
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
 msgid "Restart request failed, please check your network connection"
 msgid "Restart request failed, please check your network connection"
 msgstr "재시작 요청이 실패했습니다. 네트워크 연결을 확인해 주세요"
 msgstr "재시작 요청이 실패했습니다. 네트워크 연결을 확인해 주세요"
 
 
@@ -4580,7 +4588,7 @@ msgstr "공유 메모리 영역"
 msgid "Show"
 msgid "Show"
 msgstr "표시"
 msgstr "표시"
 
 
-#: src/views/other/Login.vue:285
+#: src/views/other/Login.vue:289
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "패스키로 로그인"
 msgstr "패스키로 로그인"
 
 
@@ -4640,6 +4648,10 @@ msgstr "캐시 로더 반복 사이의 대기 시간"
 msgid "Sleep time between cache manager iterations"
 msgid "Sleep time between cache manager iterations"
 msgstr "캐시 관리자 반복 간 대기 시간"
 msgstr "캐시 관리자 반복 간 대기 시간"
 
 
+#: src/views/system/About.vue:46
+msgid "Sponsor"
+msgstr "스폰서"
+
 #: src/views/certificate/CertificateEditor.vue:211
 #: src/views/certificate/CertificateEditor.vue:211
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "SSL 인증서 내용"
 msgstr "SSL 인증서 내용"
@@ -4685,7 +4697,7 @@ msgstr "SSL 키 경로"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "HTTPS가 활성화된 경우 SSL 키 경로가 필요합니다"
 msgstr "HTTPS가 활성화된 경우 SSL 키 경로가 필요합니다"
 
 
-#: src/views/other/Login.vue:242
+#: src/views/other/Login.vue:246
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSO 로그인"
 msgstr "SSO 로그인"
 
 
@@ -4886,7 +4898,7 @@ msgstr "구성 동기화 오류"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "구성 동기화 성공"
 msgstr "구성 동기화 성공"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:122
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/views/environments/group/EnvGroup.vue:31
 #: src/views/environments/group/EnvGroup.vue:31
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "동기화 노드"
 msgstr "동기화 노드"
@@ -5104,7 +5116,7 @@ msgid ""
 "-_./:"
 "-_./:"
 msgstr "이 필드에는 문자, 유니코드 문자, 숫자 및 -_./: 만 포함되어야 합니다"
 msgstr "이 필드에는 문자, 유니코드 문자, 숫자 및 -_./: 만 포함되어야 합니다"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:155
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5211,10 +5223,14 @@ msgstr ""
 "로컬 대형 모델을 사용하려면 ollama, vllm 또는 lmdeploy로 배포하세요. 이들은 OpenAI 호환 API 엔드포인트를 "
 "로컬 대형 모델을 사용하려면 ollama, vllm 또는 lmdeploy로 배포하세요. 이들은 OpenAI 호환 API 엔드포인트를 "
 "제공하므로 baseUrl을 로컬 API로 설정하기만 하면 됩니다."
 "제공하므로 baseUrl을 로컬 API로 설정하기만 하면 됩니다."
 
 
-#: src/views/dashboard/NginxDashBoard.vue:55
+#: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
 msgid "Toggle failed"
 msgstr "전환 실패"
 msgstr "전환 실패"
 
 
+#: src/constants/errors/user.ts:13
+msgid "Token is empty"
+msgstr "토큰이 비어 있습니다"
+
 #: src/views/preference/tabs/OpenAISettings.vue:61
 #: src/views/preference/tabs/OpenAISettings.vue:61
 msgid "Token is not valid"
 msgid "Token is not valid"
 msgstr "토큰이 유효하지 않습니다"
 msgstr "토큰이 유효하지 않습니다"
@@ -5397,7 +5413,7 @@ msgstr "사용자가 OTP를 2FA로 활성화하지 않음"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "사용자 프로필"
 msgstr "사용자 프로필"
 
 
-#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:222 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "사용자 이름"
 msgstr "사용자 이름"
@@ -5582,8 +5598,8 @@ msgstr "인증서 개인 키를 디스크에 쓰기"
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr "인증서를 디스크에 쓰기"
 msgstr "인증서를 디스크에 쓰기"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168
 #: 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:131
 #: src/views/preference/tabs/AuthSettings.vue:131

+ 60 - 44
app/src/language/messages.pot

@@ -214,7 +214,7 @@ msgstr ""
 msgid "Afterwards, refresh this page and click add passkey again."
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:115
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
 msgid "All"
 msgid "All"
 msgstr ""
 msgstr ""
 
 
@@ -290,7 +290,7 @@ msgstr ""
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:129
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 
 
@@ -306,7 +306,7 @@ msgstr ""
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 
 
@@ -541,7 +541,7 @@ msgstr ""
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/system/About.vue:55
+#: src/views/system/About.vue:75
 msgid "Build with"
 msgid "Build with"
 msgstr ""
 msgstr ""
 
 
@@ -629,7 +629,7 @@ msgstr ""
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:154
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr ""
 msgstr ""
 
 
@@ -992,7 +992,7 @@ msgstr ""
 msgid "Connected"
 msgid "Connected"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:87
+#: src/views/dashboard/NginxDashBoard.vue:100
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr ""
 msgstr ""
 
 
@@ -1645,7 +1645,7 @@ msgstr ""
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:152
+#: src/views/dashboard/NginxDashBoard.vue:172
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr ""
 msgstr ""
 
 
@@ -2229,7 +2229,7 @@ msgstr ""
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:143
+#: src/views/dashboard/NginxDashBoard.vue:163
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr ""
 msgstr ""
 
 
@@ -2425,6 +2425,10 @@ msgstr ""
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/user.ts:14
+msgid "Invalid claims type"
+msgstr ""
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr ""
 msgstr ""
@@ -2539,7 +2543,7 @@ msgstr ""
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:118
+#: src/views/dashboard/NginxDashBoard.vue:138
 msgid "Last update"
 msgid "Last update"
 msgstr ""
 msgstr ""
 
 
@@ -2576,7 +2580,7 @@ msgstr ""
 msgid "Lego disable CNAME Support"
 msgid "Lego disable CNAME Support"
 msgstr ""
 msgstr ""
 
 
-#: src/views/system/About.vue:63
+#: src/views/system/About.vue:83
 msgid "License"
 msgid "License"
 msgstr ""
 msgstr ""
 
 
@@ -2626,12 +2630,12 @@ msgstr ""
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:180
+#: src/views/dashboard/NginxDashBoard.vue:200
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr ""
 msgstr ""
 
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:71
+#: src/components/NodeSelector/NodeSelector.vue:84
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
@@ -2665,11 +2669,11 @@ msgid "Log List"
 msgstr ""
 msgstr ""
 
 
 #: src/routes/modules/auth.ts:14
 #: src/routes/modules/auth.ts:14
-#: src/views/other/Login.vue:267
+#: src/views/other/Login.vue:271
 msgid "Login"
 msgid "Login"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:76
+#: src/views/other/Login.vue:78
 msgid "Login successful"
 msgid "Login successful"
 msgstr ""
 msgstr ""
 
 
@@ -2907,7 +2911,7 @@ msgstr ""
 msgid "Name"
 msgid "Name"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:195
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr ""
 msgstr ""
 
 
@@ -3064,9 +3068,9 @@ msgstr ""
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:114
-#: src/views/dashboard/NginxDashBoard.vue:133
-#: src/views/dashboard/NginxDashBoard.vue:77
+#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:153
+#: src/views/dashboard/NginxDashBoard.vue:84
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr ""
 msgstr ""
 
 
@@ -3074,7 +3078,7 @@ msgstr ""
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr ""
 msgstr ""
 
 
@@ -3173,8 +3177,8 @@ msgid "Nginx.conf includes streams-enabled directory"
 msgstr ""
 msgstr ""
 
 
 #: src/components/ChatGPT/ChatMessageInput.vue:17
 #: src/components/ChatGPT/ChatMessageInput.vue:17
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:108
 #: src/components/Notification/Notification.vue:108
@@ -3192,7 +3196,7 @@ msgstr ""
 msgid "No Action"
 msgid "No Action"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:202
 msgid "No data"
 msgid "No data"
 msgstr ""
 msgstr ""
 
 
@@ -3320,9 +3324,13 @@ msgstr ""
 msgid "Off"
 msgid "Off"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/views/system/About.vue:31
+msgid "Official Document"
+msgstr ""
+
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
-#: src/components/NodeSelector/NodeSelector.vue:94
+#: src/components/NodeSelector/NodeSelector.vue:107
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/views/dashboard/Environments.vue:99
 #: src/views/dashboard/Environments.vue:99
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3355,9 +3363,9 @@ msgstr ""
 msgid "Once the verification is complete, the records will be removed."
 msgid "Once the verification is complete, the records will be removed."
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
-#: src/components/NodeSelector/NodeSelector.vue:74
-#: src/components/NodeSelector/NodeSelector.vue:88
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
+#: src/components/NodeSelector/NodeSelector.vue:101
+#: src/components/NodeSelector/NodeSelector.vue:87
 #: src/views/dashboard/Environments.vue:92
 #: src/views/dashboard/Environments.vue:92
 #: src/views/environments/list/envColumns.tsx:51
 #: src/views/environments/list/envColumns.tsx:51
 msgid "Online"
 msgid "Online"
@@ -3376,7 +3384,7 @@ msgid "OpenAI"
 msgstr ""
 msgstr ""
 
 
 #: src/components/TwoFA/Authorization.vue:100
 #: src/components/TwoFA/Authorization.vue:100
-#: src/views/other/Login.vue:276
+#: src/views/other/Login.vue:280
 msgid "Or"
 msgid "Or"
 msgstr ""
 msgstr ""
 
 
@@ -3443,7 +3451,7 @@ msgstr ""
 msgid "Passkeys are webauthn credentials that validate your identity using touch, facial recognition, a device password, or a PIN. They can be used as a password replacement or as a 2FA method."
 msgid "Passkeys are webauthn credentials that validate your identity using touch, facial recognition, a device password, or a PIN. They can be used as a password replacement or as a 2FA method."
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:228
+#: src/views/other/Login.vue:232
 #: src/views/user/userColumns.tsx:16
 #: src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr ""
 msgstr ""
@@ -3507,7 +3515,7 @@ msgstr ""
 msgid "Performance"
 msgid "Performance"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:187
+#: src/views/dashboard/NginxDashBoard.vue:207
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr ""
 msgstr ""
 
 
@@ -3531,7 +3539,7 @@ msgstr ""
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:176
+#: src/views/dashboard/NginxDashBoard.vue:196
 msgid "Please enable the stub_status module to get request statistics, connection count, etc."
 msgid "Please enable the stub_status module to get request statistics, connection count, etc."
 msgstr ""
 msgstr ""
 
 
@@ -3714,7 +3722,7 @@ msgstr ""
 msgid "Prohibit deleting the default user"
 msgid "Prohibit deleting the default user"
 msgstr ""
 msgstr ""
 
 
-#: src/views/system/About.vue:51
+#: src/views/system/About.vue:71
 msgid "Project Team"
 msgid "Project Team"
 msgstr ""
 msgstr ""
 
 
@@ -3836,7 +3844,7 @@ msgstr ""
 msgid "Reload"
 msgid "Reload"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: 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:209
 #: src/views/environments/list/Environment.vue:209
@@ -3864,7 +3872,7 @@ msgstr ""
 msgid "Reload Remote Nginx Success"
 msgid "Reload Remote Nginx Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:84
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110
 msgid "Reload request failed, please check your network connection"
 msgid "Reload request failed, please check your network connection"
 msgstr ""
 msgstr ""
 
 
@@ -4021,7 +4029,7 @@ msgstr ""
 msgid "Restart"
 msgid "Restart"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:238
 #: src/views/environments/list/Environment.vue:238
 msgid "Restart Nginx"
 msgid "Restart Nginx"
@@ -4043,7 +4051,7 @@ msgstr ""
 msgid "Restart Remote Nginx Success"
 msgid "Restart Remote Nginx Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:104
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
 msgid "Restart request failed, please check your network connection"
 msgid "Restart request failed, please check your network connection"
 msgstr ""
 msgstr ""
 
 
@@ -4481,7 +4489,7 @@ msgstr ""
 msgid "Show"
 msgid "Show"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:285
+#: src/views/other/Login.vue:289
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr ""
 msgstr ""
 
 
@@ -4541,6 +4549,10 @@ msgstr ""
 msgid "Sleep time between cache manager iterations"
 msgid "Sleep time between cache manager iterations"
 msgstr ""
 msgstr ""
 
 
+#: src/views/system/About.vue:46
+msgid "Sponsor"
+msgstr ""
+
 #: src/views/certificate/CertificateEditor.vue:211
 #: src/views/certificate/CertificateEditor.vue:211
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr ""
 msgstr ""
@@ -4586,7 +4598,7 @@ msgstr ""
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:242
+#: src/views/other/Login.vue:246
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr ""
 msgstr ""
 
 
@@ -4780,7 +4792,7 @@ msgstr ""
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:122
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/views/environments/group/EnvGroup.vue:31
 #: src/views/environments/group/EnvGroup.vue:31
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr ""
 msgstr ""
@@ -4975,7 +4987,7 @@ msgstr ""
 msgid "This field should only contain letters, unicode characters, numbers, and -_./:"
 msgid "This field should only contain letters, unicode characters, numbers, and -_./:"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:155
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid "This module provides Nginx request statistics, connection count, etc. data. After enabling it, you can view performance statistics"
 msgid "This module provides Nginx request statistics, connection count, etc. data. After enabling it, you can view performance statistics"
 msgstr ""
 msgstr ""
 
 
@@ -5053,10 +5065,14 @@ msgstr ""
 msgid "To use a local large model, deploy it with ollama, vllm or lmdeploy. They provide an OpenAI-compatible API endpoint, so just set the baseUrl to your local API."
 msgid "To use a local large model, deploy it with ollama, vllm or lmdeploy. They provide an OpenAI-compatible API endpoint, so just set the baseUrl to your local API."
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:55
+#: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
 msgid "Toggle failed"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/user.ts:13
+msgid "Token is empty"
+msgstr ""
+
 #: src/views/preference/tabs/OpenAISettings.vue:61
 #: src/views/preference/tabs/OpenAISettings.vue:61
 msgid "Token is not valid"
 msgid "Token is not valid"
 msgstr ""
 msgstr ""
@@ -5239,7 +5255,7 @@ msgstr ""
 msgid "User Profile"
 msgid "User Profile"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:218
+#: src/views/other/Login.vue:222
 #: src/views/user/userColumns.tsx:7
 #: src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127
 #: src/views/user/UserProfile.vue:127
 #: src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:131
@@ -5413,8 +5429,8 @@ msgstr ""
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr ""
 msgstr ""
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168
 #: 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:131
 #: src/views/preference/tabs/AuthSettings.vue:131

+ 60 - 44
app/src/language/pt_PT/app.po

@@ -225,7 +225,7 @@ msgstr ""
 "Depois, atualize esta página e clique em adicionar chave de acesso "
 "Depois, atualize esta página e clique em adicionar chave de acesso "
 "novamente."
 "novamente."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:115
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
 msgid "All"
 msgid "All"
 msgstr "Todos"
 msgstr "Todos"
 
 
@@ -304,7 +304,7 @@ msgstr "Tem a certeza de que pretende eliminar permanentemente?"
 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?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:129
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 "Tem a certeza que pretende recarregar o Nginx nos seguintes nós de "
 "Tem a certeza que pretende recarregar o Nginx nos seguintes nós de "
@@ -322,7 +322,7 @@ msgstr "Tem certeza que pretende eliminar este item?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Tem certeza que pretende eliminar este local?"
 msgstr "Tem certeza que pretende eliminar este local?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 "Tem a certeza de que pretende reiniciar o Nginx nos seguintes nós de "
 "Tem a certeza de que pretende reiniciar o Nginx nos seguintes nós de "
@@ -563,7 +563,7 @@ msgstr "Abaixo estão os itens selecionados que pretende modificar em lote"
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr "O bloco é nulo"
 msgstr "O bloco é nulo"
 
 
-#: src/views/system/About.vue:55
+#: src/views/system/About.vue:75
 msgid "Build with"
 msgid "Build with"
 msgstr "Build com"
 msgstr "Build com"
 
 
@@ -655,7 +655,7 @@ msgstr "Não posso comparar: conteúdo ausente"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "Não é possível eliminar o caminho protegido: {0}"
 msgstr "Não é possível eliminar o caminho protegido: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:154
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "Não é possível obter dados de desempenho neste estado"
 msgstr "Não é possível obter dados de desempenho neste estado"
 
 
@@ -1085,7 +1085,7 @@ msgstr "Confirmar nova palavra-passe"
 msgid "Connected"
 msgid "Connected"
 msgstr "Conectado"
 msgstr "Conectado"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:87
+#: src/views/dashboard/NginxDashBoard.vue:100
 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..."
 
 
@@ -1746,7 +1746,7 @@ msgstr "Falha ao ativar o fluxo %{name} em %{node}"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Ativar o fluxo %{name} em %{node} com sucesso"
 msgstr "Ativar o fluxo %{name} em %{node} com sucesso"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:152
+#: src/views/dashboard/NginxDashBoard.vue:172
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "Ativar módulo stub_status"
 msgstr "Ativar módulo stub_status"
 
 
@@ -2331,7 +2331,7 @@ msgstr "Gerar chave privada para registo de conta"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "Erro ao obter o utilizador ACME: {0}"
 msgstr "Erro ao obter o utilizador ACME: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:143
+#: src/views/dashboard/NginxDashBoard.vue:163
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "Falha ao obter os dados"
 msgstr "Falha ao obter os dados"
 
 
@@ -2547,6 +2547,10 @@ msgstr "Formato de IV AES inválido: {0}"
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "Formato de chave AES inválido: {0}"
 msgstr "Formato de chave AES inválido: {0}"
 
 
+#: src/constants/errors/user.ts:14
+msgid "Invalid claims type"
+msgstr "Tipo de reclamação inválido"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "Objeto de ficheiro inválido"
 msgstr "Objeto de ficheiro inválido"
@@ -2665,7 +2669,7 @@ msgstr "Hora do último backup"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Última verificação em"
 msgstr "Última verificação em"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:118
+#: src/views/dashboard/NginxDashBoard.vue:138
 msgid "Last update"
 msgid "Last update"
 msgstr "Última atualização"
 msgstr "Última atualização"
 
 
@@ -2702,7 +2706,7 @@ msgstr "Código de recuperação antigo não permitido porque o TOTP não está
 msgid "Lego disable CNAME Support"
 msgid "Lego disable CNAME Support"
 msgstr "Lego desativar suporte CNAME"
 msgstr "Lego desativar suporte CNAME"
 
 
-#: src/views/system/About.vue:63
+#: src/views/system/About.vue:83
 msgid "License"
 msgid "License"
 msgstr "Licença"
 msgstr "Licença"
 
 
@@ -2752,12 +2756,12 @@ msgstr "Pausa do Carregador"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "Limiar do carregador"
 msgstr "Limiar do carregador"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:180
+#: src/views/dashboard/NginxDashBoard.vue:200
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "A carregar dados..."
 msgstr "A carregar dados..."
 
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:71
+#: src/components/NodeSelector/NodeSelector.vue:84
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
@@ -2796,11 +2800,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "Lista de registos"
 msgstr "Lista de registos"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:271
 msgid "Login"
 msgid "Login"
 msgstr "Autenticar"
 msgstr "Autenticar"
 
 
-#: src/views/other/Login.vue:76
+#: src/views/other/Login.vue:78
 msgid "Login successful"
 msgid "Login successful"
 msgstr "Autenticado com sucesso"
 msgstr "Autenticado com sucesso"
 
 
@@ -3051,7 +3055,7 @@ msgstr "Diretiva Multilinha"
 msgid "Name"
 msgid "Name"
 msgstr "Nome"
 msgstr "Nome"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:195
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "É necessário ativar o módulo stub_status"
 msgstr "É necessário ativar o módulo stub_status"
 
 
@@ -3207,9 +3211,9 @@ msgstr "Erro do Nginx: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:114
-#: src/views/dashboard/NginxDashBoard.vue:133
-#: src/views/dashboard/NginxDashBoard.vue:77
+#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:153
+#: src/views/dashboard/NginxDashBoard.vue:84
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "O Nginx não está em execução"
 msgstr "O Nginx não está em execução"
 
 
@@ -3217,7 +3221,7 @@ msgstr "O Nginx não está em execução"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "O Nginx não está em execução noutro contentor"
 msgstr "O Nginx não está em execução noutro contentor"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "O Nginx está em execução"
 msgstr "O Nginx está em execução"
 
 
@@ -3317,8 +3321,8 @@ msgid "Nginx.conf includes streams-enabled directory"
 msgstr "Nginx.conf inclui o diretório streams-enabled"
 msgstr "Nginx.conf inclui o diretório streams-enabled"
 
 
 #: src/components/ChatGPT/ChatMessageInput.vue:17
 #: src/components/ChatGPT/ChatMessageInput.vue:17
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
@@ -3335,7 +3339,7 @@ msgstr "Não"
 msgid "No Action"
 msgid "No Action"
 msgstr "Sem ação"
 msgstr "Sem ação"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:202
 msgid "No data"
 msgid "No data"
 msgstr "Sem dados"
 msgstr "Sem dados"
 
 
@@ -3472,9 +3476,13 @@ msgstr ""
 msgid "Off"
 msgid "Off"
 msgstr "Desligado"
 msgstr "Desligado"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/views/system/About.vue:31
+msgid "Official Document"
+msgstr "Documentação oficial"
+
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
-#: src/components/NodeSelector/NodeSelector.vue:94
+#: src/components/NodeSelector/NodeSelector.vue:107
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/views/dashboard/Environments.vue:99
 #: src/views/dashboard/Environments.vue:99
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3506,9 +3514,9 @@ msgstr "Ligado"
 msgid "Once the verification is complete, the records will be removed."
 msgid "Once the verification is complete, the records will be removed."
 msgstr "Assim que a verificação estiver concluída, os registos serão removidos."
 msgstr "Assim que a verificação estiver concluída, os registos serão removidos."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
-#: src/components/NodeSelector/NodeSelector.vue:74
-#: src/components/NodeSelector/NodeSelector.vue:88
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
+#: src/components/NodeSelector/NodeSelector.vue:101
+#: src/components/NodeSelector/NodeSelector.vue:87
 #: src/views/dashboard/Environments.vue:92
 #: src/views/dashboard/Environments.vue:92
 #: src/views/environments/list/envColumns.tsx:51
 #: src/views/environments/list/envColumns.tsx:51
 msgid "Online"
 msgid "Online"
@@ -3526,7 +3534,7 @@ msgstr "Aberto"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:280
 msgid "Or"
 msgid "Or"
 msgstr "Ou"
 msgstr "Ou"
 
 
@@ -3600,7 +3608,7 @@ msgstr ""
 "ou um PIN. Podem ser usadas como substituto de palavra-passe ou como método "
 "ou um PIN. Podem ser usadas como substituto de palavra-passe ou como método "
 "de autenticação de dois fatores (2FA)."
 "de autenticação de dois fatores (2FA)."
 
 
-#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:232 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "Palavra-passe"
 msgstr "Palavra-passe"
 
 
@@ -3662,7 +3670,7 @@ msgstr "Erro ao efectuar actualização do core"
 msgid "Performance"
 msgid "Performance"
 msgstr "Desempenho"
 msgstr "Desempenho"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:187
+#: src/views/dashboard/NginxDashBoard.vue:207
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "Métricas de desempenho"
 msgstr "Métricas de desempenho"
 
 
@@ -3686,7 +3694,7 @@ msgstr "O caminho do PID não existe"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "O texto simples está vazio"
 msgstr "O texto simples está vazio"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:176
+#: src/views/dashboard/NginxDashBoard.vue:196
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -3895,7 +3903,7 @@ msgstr "Proibir a alteração da password root na demonstração"
 msgid "Prohibit deleting the default user"
 msgid "Prohibit deleting the default user"
 msgstr "Proibir a eliminação do utilizador padrão"
 msgstr "Proibir a eliminação do utilizador padrão"
 
 
-#: src/views/system/About.vue:51
+#: src/views/system/About.vue:71
 msgid "Project Team"
 msgid "Project Team"
 msgstr "Equipe de Projecto"
 msgstr "Equipe de Projecto"
 
 
@@ -4023,7 +4031,7 @@ msgstr "Nota de Lançamento"
 msgid "Reload"
 msgid "Reload"
 msgstr "Recarregar"
 msgstr "Recarregar"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: 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:209
 #: src/views/environments/list/Environment.vue:209
@@ -4051,7 +4059,7 @@ msgstr "Erro ao Recarregar Nginx Remoto"
 msgid "Reload Remote Nginx Success"
 msgid "Reload Remote Nginx Success"
 msgstr "Recarregamento remoto do Nginx bem-sucedido"
 msgstr "Recarregamento remoto do Nginx bem-sucedido"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:84
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110
 msgid "Reload request failed, please check your network connection"
 msgid "Reload request failed, please check your network connection"
 msgstr "O pedido de recarregamento falhou, por favor verifique a sua ligação à rede"
 msgstr "O pedido de recarregamento falhou, por favor verifique a sua ligação à rede"
 
 
@@ -4213,7 +4221,7 @@ msgstr "Respostas"
 msgid "Restart"
 msgid "Restart"
 msgstr "Reiniciar"
 msgstr "Reiniciar"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:238
 #: src/views/environments/list/Environment.vue:238
 msgid "Restart Nginx"
 msgid "Restart Nginx"
@@ -4235,7 +4243,7 @@ msgstr "Erro ao reiniciar Nginx remoto"
 msgid "Restart Remote Nginx Success"
 msgid "Restart Remote Nginx Success"
 msgstr "Reinício remoto do Nginx bem-sucedido"
 msgstr "Reinício remoto do Nginx bem-sucedido"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:104
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
 msgid "Restart request failed, please check your network connection"
 msgid "Restart request failed, please check your network connection"
 msgstr "Pedido de reinício falhou, por favor verifique a sua ligação à rede"
 msgstr "Pedido de reinício falhou, por favor verifique a sua ligação à rede"
 
 
@@ -4687,7 +4695,7 @@ msgstr "Zona de Memória Partilhada"
 msgid "Show"
 msgid "Show"
 msgstr "Mostrar"
 msgstr "Mostrar"
 
 
-#: src/views/other/Login.vue:285
+#: src/views/other/Login.vue:289
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "Iniciar sessão com uma chave de acesso"
 msgstr "Iniciar sessão com uma chave de acesso"
 
 
@@ -4747,6 +4755,10 @@ msgstr "Tempo de espera entre iterações do carregador de cache"
 msgid "Sleep time between cache manager iterations"
 msgid "Sleep time between cache manager iterations"
 msgstr "Tempo de espera entre iterações do gestor de cache"
 msgstr "Tempo de espera entre iterações do gestor de cache"
 
 
+#: src/views/system/About.vue:46
+msgid "Sponsor"
+msgstr "Patrocinador"
+
 #: src/views/certificate/CertificateEditor.vue:211
 #: src/views/certificate/CertificateEditor.vue:211
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "Conteúdo do Certificado SSL"
 msgstr "Conteúdo do Certificado SSL"
@@ -4796,7 +4808,7 @@ msgstr "Caminho da chave SSL"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "O caminho da chave SSL é necessário quando o HTTPS está ativado"
 msgstr "O caminho da chave SSL é necessário quando o HTTPS está ativado"
 
 
-#: src/views/other/Login.vue:242
+#: src/views/other/Login.vue:246
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "Autenticação SSO"
 msgstr "Autenticação SSO"
 
 
@@ -5001,7 +5013,7 @@ msgstr "Erro de Configuração de Sincronização"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Sucesso na configuração da sincronização"
 msgstr "Sucesso na configuração da sincronização"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:122
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/views/environments/group/EnvGroup.vue:31
 #: src/views/environments/group/EnvGroup.vue:31
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "Nós de sincronização"
 msgstr "Nós de sincronização"
@@ -5240,7 +5252,7 @@ msgid ""
 "-_./:"
 "-_./:"
 msgstr "Este campo deve conter apenas letras, caracteres Unicode, números e -_./:"
 msgstr "Este campo deve conter apenas letras, caracteres Unicode, números e -_./:"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:155
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5367,10 +5379,14 @@ msgstr ""
 "Eles fornecem um ponto de extremidade de API compatível com OpenAI, então "
 "Eles fornecem um ponto de extremidade de API compatível com OpenAI, então "
 "basta definir o baseUrl para sua API local."
 "basta definir o baseUrl para sua API local."
 
 
-#: src/views/dashboard/NginxDashBoard.vue:55
+#: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
 msgid "Toggle failed"
 msgstr "Falha ao alternar"
 msgstr "Falha ao alternar"
 
 
+#: src/constants/errors/user.ts:13
+msgid "Token is empty"
+msgstr "O token está vazio"
+
 #: src/views/preference/tabs/OpenAISettings.vue:61
 #: src/views/preference/tabs/OpenAISettings.vue:61
 msgid "Token is not valid"
 msgid "Token is not valid"
 msgstr "Token inválida"
 msgstr "Token inválida"
@@ -5555,7 +5571,7 @@ msgstr "Utilizador não ativou OTP como 2FA"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "Perfil do utilizador"
 msgstr "Perfil do utilizador"
 
 
-#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:222 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Nome de Utilizador"
 msgstr "Nome de Utilizador"
@@ -5752,8 +5768,8 @@ msgstr "Escrever chave privada do certificado ao disco"
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr "Escrevendo certificado no disco"
 msgstr "Escrevendo certificado no disco"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168
 #: 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:131
 #: src/views/preference/tabs/AuthSettings.vue:131

+ 60 - 44
app/src/language/ru_RU/app.po

@@ -227,7 +227,7 @@ msgstr "Расширенный режим"
 msgid "Afterwards, refresh this page and click add passkey again."
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr "После этого обновите эту страницу и снова нажмите «Добавить ключ доступа»."
 msgstr "После этого обновите эту страницу и снова нажмите «Добавить ключ доступа»."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:115
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
 msgid "All"
 msgid "All"
 msgstr "Все"
 msgstr "Все"
 
 
@@ -306,7 +306,7 @@ msgstr "Вы уверены, что хотите удалить безвозвр
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "Вы уверены, что хотите удалить?"
 msgstr "Вы уверены, что хотите удалить?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:129
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 "Вы уверены, что хотите перезагрузить Nginx на следующих синхронизированных "
 "Вы уверены, что хотите перезагрузить Nginx на следующих синхронизированных "
@@ -324,7 +324,7 @@ msgstr "Вы уверены, что хотите удалить этот эле
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Вы уверены, что хотите удалить location?"
 msgstr "Вы уверены, что хотите удалить location?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 "Вы уверены, что хотите перезапустить Nginx на следующих синхронизированных "
 "Вы уверены, что хотите перезапустить Nginx на следующих синхронизированных "
@@ -569,7 +569,7 @@ msgstr "Ниже приведены выбранные элементы, кот
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr "Блок равен nil"
 msgstr "Блок равен nil"
 
 
-#: src/views/system/About.vue:55
+#: src/views/system/About.vue:75
 msgid "Build with"
 msgid "Build with"
 msgstr "Собрать с"
 msgstr "Собрать с"
 
 
@@ -663,7 +663,7 @@ msgstr "Невозможно сравнить: отсутствующий кон
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "Невозможно удалить защищенный путь: {0}"
 msgstr "Невозможно удалить защищенный путь: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:154
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "Не может получить данные о производительности в этом состоянии"
 msgstr "Не может получить данные о производительности в этом состоянии"
 
 
@@ -1090,7 +1090,7 @@ msgstr "Подтвердите новый пароль"
 msgid "Connected"
 msgid "Connected"
 msgstr "Подключено"
 msgstr "Подключено"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:87
+#: src/views/dashboard/NginxDashBoard.vue:100
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Ошибка соединения, попытка переподключения..."
 msgstr "Ошибка соединения, попытка переподключения..."
 
 
@@ -1749,7 +1749,7 @@ msgstr "Не удалось включить поток %{name} на %{node}"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Поток %{name} успешно включён на %{node}"
 msgstr "Поток %{name} успешно включён на %{node}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:152
+#: src/views/dashboard/NginxDashBoard.vue:172
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "Включить модуль stub_status"
 msgstr "Включить модуль stub_status"
 
 
@@ -2334,7 +2334,7 @@ msgstr "Генерация приватного ключа для регистр
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "Ошибка получения пользователя ACME: {0}"
 msgstr "Ошибка получения пользователя ACME: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:143
+#: src/views/dashboard/NginxDashBoard.vue:163
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "Не удалось получить данные"
 msgstr "Не удалось получить данные"
 
 
@@ -2548,6 +2548,10 @@ msgstr "Неверный формат AES IV: {0}"
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "Неверный формат AES-ключа: {0}"
 msgstr "Неверный формат AES-ключа: {0}"
 
 
+#: src/constants/errors/user.ts:14
+msgid "Invalid claims type"
+msgstr "Неверный тип требований"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "Неверный объект файла"
 msgstr "Неверный объект файла"
@@ -2666,7 +2670,7 @@ msgstr "Время последнего резервного копирован
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Последняя проверка в"
 msgstr "Последняя проверка в"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:118
+#: src/views/dashboard/NginxDashBoard.vue:138
 msgid "Last update"
 msgid "Last update"
 msgstr "Последнее обновление"
 msgstr "Последнее обновление"
 
 
@@ -2703,7 +2707,7 @@ msgstr "Устаревшие коды восстановления не разр
 msgid "Lego disable CNAME Support"
 msgid "Lego disable CNAME Support"
 msgstr "Lego отключить поддержку CNAME"
 msgstr "Lego отключить поддержку CNAME"
 
 
-#: src/views/system/About.vue:63
+#: src/views/system/About.vue:83
 msgid "License"
 msgid "License"
 msgstr "Лицензия"
 msgstr "Лицензия"
 
 
@@ -2753,12 +2757,12 @@ msgstr "Пауза загрузчика"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "Порог загрузчика"
 msgstr "Порог загрузчика"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:180
+#: src/views/dashboard/NginxDashBoard.vue:200
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "Загрузка данных..."
 msgstr "Загрузка данных..."
 
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:71
+#: src/components/NodeSelector/NodeSelector.vue:84
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
@@ -2797,11 +2801,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "Список журналов"
 msgstr "Список журналов"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:271
 msgid "Login"
 msgid "Login"
 msgstr "Логин"
 msgstr "Логин"
 
 
-#: src/views/other/Login.vue:76
+#: src/views/other/Login.vue:78
 msgid "Login successful"
 msgid "Login successful"
 msgstr "Авторизация успешна"
 msgstr "Авторизация успешна"
 
 
@@ -3052,7 +3056,7 @@ msgstr "Многострочная директива"
 msgid "Name"
 msgid "Name"
 msgstr "Имя"
 msgstr "Имя"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:195
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "Необходимо включить модуль stub_status"
 msgstr "Необходимо включить модуль stub_status"
 
 
@@ -3208,9 +3212,9 @@ msgstr "Ошибка Nginx: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:114
-#: src/views/dashboard/NginxDashBoard.vue:133
-#: src/views/dashboard/NginxDashBoard.vue:77
+#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:153
+#: src/views/dashboard/NginxDashBoard.vue:84
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx не работает"
 msgstr "Nginx не работает"
 
 
@@ -3218,7 +3222,7 @@ msgstr "Nginx не работает"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx не работает в другом контейнере"
 msgstr "Nginx не работает в другом контейнере"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx работает"
 msgstr "Nginx работает"
 
 
@@ -3318,8 +3322,8 @@ msgid "Nginx.conf includes streams-enabled directory"
 msgstr "Nginx.conf включает каталог streams-enabled"
 msgstr "Nginx.conf включает каталог streams-enabled"
 
 
 #: src/components/ChatGPT/ChatMessageInput.vue:17
 #: src/components/ChatGPT/ChatMessageInput.vue:17
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
@@ -3336,7 +3340,7 @@ msgstr "Нет"
 msgid "No Action"
 msgid "No Action"
 msgstr "Нет действия"
 msgstr "Нет действия"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:202
 msgid "No data"
 msgid "No data"
 msgstr "Нет данных"
 msgstr "Нет данных"
 
 
@@ -3473,9 +3477,13 @@ msgstr ""
 msgid "Off"
 msgid "Off"
 msgstr "Выкл"
 msgstr "Выкл"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/views/system/About.vue:31
+msgid "Official Document"
+msgstr "Официальная документация"
+
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
-#: src/components/NodeSelector/NodeSelector.vue:94
+#: src/components/NodeSelector/NodeSelector.vue:107
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/views/dashboard/Environments.vue:99
 #: src/views/dashboard/Environments.vue:99
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3507,9 +3515,9 @@ msgstr "Вкл"
 msgid "Once the verification is complete, the records will be removed."
 msgid "Once the verification is complete, the records will be removed."
 msgstr "После завершения проверки записи будут удалены."
 msgstr "После завершения проверки записи будут удалены."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
-#: src/components/NodeSelector/NodeSelector.vue:74
-#: src/components/NodeSelector/NodeSelector.vue:88
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
+#: src/components/NodeSelector/NodeSelector.vue:101
+#: src/components/NodeSelector/NodeSelector.vue:87
 #: src/views/dashboard/Environments.vue:92
 #: src/views/dashboard/Environments.vue:92
 #: src/views/environments/list/envColumns.tsx:51
 #: src/views/environments/list/envColumns.tsx:51
 msgid "Online"
 msgid "Online"
@@ -3527,7 +3535,7 @@ msgstr "Открыт"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:280
 msgid "Or"
 msgid "Or"
 msgstr "Или"
 msgstr "Или"
 
 
@@ -3601,7 +3609,7 @@ msgstr ""
 "могут использоваться вместо пароля или в качестве метода двухфакторной "
 "могут использоваться вместо пароля или в качестве метода двухфакторной "
 "аутентификации (2FA)."
 "аутентификации (2FA)."
 
 
-#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:232 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "Пароль"
 msgstr "Пароль"
 
 
@@ -3663,7 +3671,7 @@ msgstr "Ошибка обновления ядра"
 msgid "Performance"
 msgid "Performance"
 msgstr "Производительность"
 msgstr "Производительность"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:187
+#: src/views/dashboard/NginxDashBoard.vue:207
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "Метрики производительности"
 msgstr "Метрики производительности"
 
 
@@ -3687,7 +3695,7 @@ msgstr "Путь PID не существует"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "Открытый текст пуст"
 msgstr "Открытый текст пуст"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:176
+#: src/views/dashboard/NginxDashBoard.vue:196
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -3901,7 +3909,7 @@ msgstr "Запретить изменение пароля root в демо"
 msgid "Prohibit deleting the default user"
 msgid "Prohibit deleting the default user"
 msgstr "Запретить удаление пользователя по умолчанию"
 msgstr "Запретить удаление пользователя по умолчанию"
 
 
-#: src/views/system/About.vue:51
+#: src/views/system/About.vue:71
 msgid "Project Team"
 msgid "Project Team"
 msgstr "Команда проекта"
 msgstr "Команда проекта"
 
 
@@ -4029,7 +4037,7 @@ msgstr "Что нового"
 msgid "Reload"
 msgid "Reload"
 msgstr "Перегрузить"
 msgstr "Перегрузить"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: 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:209
 #: src/views/environments/list/Environment.vue:209
@@ -4057,7 +4065,7 @@ msgstr "Ошибка перезагрузки удаленного Nginx"
 msgid "Reload Remote Nginx Success"
 msgid "Reload Remote Nginx Success"
 msgstr "Удаленная перезагрузка Nginx успешно выполнена"
 msgstr "Удаленная перезагрузка Nginx успешно выполнена"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:84
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110
 msgid "Reload request failed, please check your network connection"
 msgid "Reload request failed, please check your network connection"
 msgstr "Не удалось выполнить запрос на перезагрузку, проверьте подключение к сети"
 msgstr "Не удалось выполнить запрос на перезагрузку, проверьте подключение к сети"
 
 
@@ -4217,7 +4225,7 @@ msgstr "Ответы"
 msgid "Restart"
 msgid "Restart"
 msgstr "Перезапуск"
 msgstr "Перезапуск"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:238
 #: src/views/environments/list/Environment.vue:238
 msgid "Restart Nginx"
 msgid "Restart Nginx"
@@ -4239,7 +4247,7 @@ msgstr "Ошибка перезапуска удаленного Nginx"
 msgid "Restart Remote Nginx Success"
 msgid "Restart Remote Nginx Success"
 msgstr "Удалённая перезагрузка Nginx успешно выполнена"
 msgstr "Удалённая перезагрузка Nginx успешно выполнена"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:104
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
 msgid "Restart request failed, please check your network connection"
 msgid "Restart request failed, please check your network connection"
 msgstr "Запрос на перезапуск не выполнен, проверьте подключение к сети"
 msgstr "Запрос на перезапуск не выполнен, проверьте подключение к сети"
 
 
@@ -4689,7 +4697,7 @@ msgstr "Зона общей памяти"
 msgid "Show"
 msgid "Show"
 msgstr "Показать"
 msgstr "Показать"
 
 
-#: src/views/other/Login.vue:285
+#: src/views/other/Login.vue:289
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "Войти с помощью ключа доступа"
 msgstr "Войти с помощью ключа доступа"
 
 
@@ -4749,6 +4757,10 @@ msgstr "Время ожидания между итерациями загруз
 msgid "Sleep time between cache manager iterations"
 msgid "Sleep time between cache manager iterations"
 msgstr "Время ожидания между итерациями менеджера кеша"
 msgstr "Время ожидания между итерациями менеджера кеша"
 
 
+#: src/views/system/About.vue:46
+msgid "Sponsor"
+msgstr "Спонсор"
+
 #: src/views/certificate/CertificateEditor.vue:211
 #: src/views/certificate/CertificateEditor.vue:211
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "Содержимое SSL-сертификата"
 msgstr "Содержимое SSL-сертификата"
@@ -4794,7 +4806,7 @@ msgstr "Путь к SSL-ключу"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "Путь к SSL-ключу обязателен при включении HTTPS"
 msgstr "Путь к SSL-ключу обязателен при включении HTTPS"
 
 
-#: src/views/other/Login.vue:242
+#: src/views/other/Login.vue:246
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSO Вход"
 msgstr "SSO Вход"
 
 
@@ -4999,7 +5011,7 @@ msgstr "Ошибка синхронизации конфигурации"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Синхронизация конфигурации успешна"
 msgstr "Синхронизация конфигурации успешна"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:122
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/views/environments/group/EnvGroup.vue:31
 #: src/views/environments/group/EnvGroup.vue:31
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "Синхронизированные узлы"
 msgstr "Синхронизированные узлы"
@@ -5236,7 +5248,7 @@ msgid ""
 "-_./:"
 "-_./:"
 msgstr "Это поле должно содержать только буквы, символы Unicode, цифры и -_./:"
 msgstr "Это поле должно содержать только буквы, символы Unicode, цифры и -_./:"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:155
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5364,10 +5376,14 @@ msgstr ""
 "ollama, vllm или lmdeploy. Они предоставляют API-эндпоинт, совместимый с "
 "ollama, vllm или lmdeploy. Они предоставляют API-эндпоинт, совместимый с "
 "OpenAI, поэтому просто установите baseUrl на ваш локальный API."
 "OpenAI, поэтому просто установите baseUrl на ваш локальный API."
 
 
-#: src/views/dashboard/NginxDashBoard.vue:55
+#: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
 msgid "Toggle failed"
 msgstr "Не удалось переключить"
 msgstr "Не удалось переключить"
 
 
+#: src/constants/errors/user.ts:13
+msgid "Token is empty"
+msgstr "Токен пуст"
+
 #: src/views/preference/tabs/OpenAISettings.vue:61
 #: src/views/preference/tabs/OpenAISettings.vue:61
 msgid "Token is not valid"
 msgid "Token is not valid"
 msgstr "Токен недействителен"
 msgstr "Токен недействителен"
@@ -5552,7 +5568,7 @@ msgstr "Пользователь не включил OTP в качестве 2FA
 msgid "User Profile"
 msgid "User Profile"
 msgstr "Профиль пользователя"
 msgstr "Профиль пользователя"
 
 
-#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:222 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Имя пользователя"
 msgstr "Имя пользователя"
@@ -5749,8 +5765,8 @@ msgstr "Запись закрытого ключа сертификата на 
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr "Запись сертификата на диск"
 msgstr "Запись сертификата на диск"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168
 #: 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:131
 #: src/views/preference/tabs/AuthSettings.vue:131

+ 60 - 44
app/src/language/tr_TR/app.po

@@ -223,7 +223,7 @@ msgstr "Gelişmiş Mod"
 msgid "Afterwards, refresh this page and click add passkey again."
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr "Daha sonra bu sayfayı yenileyin ve tekrar parola anahtarı ekle'ye tıklayın."
 msgstr "Daha sonra bu sayfayı yenileyin ve tekrar parola anahtarı ekle'ye tıklayın."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:115
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
 msgid "All"
 msgid "All"
 msgstr "Tümü"
 msgstr "Tümü"
 
 
@@ -302,7 +302,7 @@ msgstr "Kalıcı olarak silmek istediğinizden emin misiniz?"
 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?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:129
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 "Aşağıdaki senkronizasyon düğümlerinde Nginx'i yeniden yüklemek "
 "Aşağıdaki senkronizasyon düğümlerinde Nginx'i yeniden yüklemek "
@@ -320,7 +320,7 @@ msgstr "Bu öğeyi kaldırmak istediğinizden emin misiniz?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Bu konumu kaldırmak istediğinizden emin misiniz?"
 msgstr "Bu konumu kaldırmak istediğinizden emin misiniz?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 "Aşağıdaki senkronizasyon düğümlerinde Nginx'i yeniden başlatmak "
 "Aşağıdaki senkronizasyon düğümlerinde Nginx'i yeniden başlatmak "
@@ -557,7 +557,7 @@ msgstr "Aşağıda toplu olarak değiştirmek istediğiniz seçili öğeler bulu
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr "Blok nil değerinde"
 msgstr "Blok nil değerinde"
 
 
-#: src/views/system/About.vue:55
+#: src/views/system/About.vue:75
 msgid "Build with"
 msgid "Build with"
 msgstr "İle Oluşturuldu"
 msgstr "İle Oluşturuldu"
 
 
@@ -649,7 +649,7 @@ msgstr "Karşılaştırılamaz: Eksik İçerik"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "Korunan yol silinemez: {0}"
 msgstr "Korunan yol silinemez: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:154
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "Bu durumda performans verileri alamıyorum"
 msgstr "Bu durumda performans verileri alamıyorum"
 
 
@@ -1079,7 +1079,7 @@ msgstr "Yeni Şifreyi Onayla"
 msgid "Connected"
 msgid "Connected"
 msgstr "Bağlandı"
 msgstr "Bağlandı"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:87
+#: src/views/dashboard/NginxDashBoard.vue:100
 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..."
 
 
@@ -1741,7 +1741,7 @@ msgstr "%{node} üzerinde %{name} akışı etkinleştirilemedi"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "%{node} üzerinde %{name} akışı başarıyla etkinleştirildi"
 msgstr "%{node} üzerinde %{name} akışı başarıyla etkinleştirildi"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:152
+#: src/views/dashboard/NginxDashBoard.vue:172
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "stub_status modülünü etkinleştir"
 msgstr "stub_status modülünü etkinleştir"
 
 
@@ -2326,7 +2326,7 @@ msgstr "Hesap kaydı için özel anahtar oluşturuluyor"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "ACME kullanıcısı alınırken hata: {0}"
 msgstr "ACME kullanıcısı alınırken hata: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:143
+#: src/views/dashboard/NginxDashBoard.vue:163
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "Veri alınamadı"
 msgstr "Veri alınamadı"
 
 
@@ -2544,6 +2544,10 @@ msgstr "Geçersiz AES IV biçimi: {0}"
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "Geçersiz AES anahtar biçimi: {0}"
 msgstr "Geçersiz AES anahtar biçimi: {0}"
 
 
+#: src/constants/errors/user.ts:14
+msgid "Invalid claims type"
+msgstr "Geçersiz talep türü"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "Geçersiz dosya nesnesi"
 msgstr "Geçersiz dosya nesnesi"
@@ -2662,7 +2666,7 @@ msgstr "Son Yedekleme Zamanı"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "En son şu tarihte kontrol edildi"
 msgstr "En son şu tarihte kontrol edildi"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:118
+#: src/views/dashboard/NginxDashBoard.vue:138
 msgid "Last update"
 msgid "Last update"
 msgstr "Son güncelleme"
 msgstr "Son güncelleme"
 
 
@@ -2699,7 +2703,7 @@ msgstr "TOTP etkin olmadığı için eski kurtarma kodu kullanılamaz"
 msgid "Lego disable CNAME Support"
 msgid "Lego disable CNAME Support"
 msgstr "Lego CNAME Desteğini Devre Dışı Bırak"
 msgstr "Lego CNAME Desteğini Devre Dışı Bırak"
 
 
-#: src/views/system/About.vue:63
+#: src/views/system/About.vue:83
 msgid "License"
 msgid "License"
 msgstr "Lisans"
 msgstr "Lisans"
 
 
@@ -2749,12 +2753,12 @@ msgstr "Yükleyici Bekleme Süresi"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "Yükleyici Eşiği"
 msgstr "Yükleyici Eşiği"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:180
+#: src/views/dashboard/NginxDashBoard.vue:200
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "Veriler yükleniyor..."
 msgstr "Veriler yükleniyor..."
 
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:71
+#: src/components/NodeSelector/NodeSelector.vue:84
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
@@ -2792,11 +2796,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "Günlük Listesi"
 msgstr "Günlük Listesi"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:271
 msgid "Login"
 msgid "Login"
 msgstr "Giriş"
 msgstr "Giriş"
 
 
-#: src/views/other/Login.vue:76
+#: src/views/other/Login.vue:78
 msgid "Login successful"
 msgid "Login successful"
 msgstr "Giriş Başarılı"
 msgstr "Giriş Başarılı"
 
 
@@ -3047,7 +3051,7 @@ msgstr "Çok Satırlı Yönergeler"
 msgid "Name"
 msgid "Name"
 msgstr "İsim"
 msgstr "İsim"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:195
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "stub_status modülünün etkinleştirilmesi gerekiyor"
 msgstr "stub_status modülünün etkinleştirilmesi gerekiyor"
 
 
@@ -3203,9 +3207,9 @@ msgstr "Nginx hatası: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:114
-#: src/views/dashboard/NginxDashBoard.vue:133
-#: src/views/dashboard/NginxDashBoard.vue:77
+#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:153
+#: src/views/dashboard/NginxDashBoard.vue:84
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx çalışmıyor"
 msgstr "Nginx çalışmıyor"
 
 
@@ -3213,7 +3217,7 @@ msgstr "Nginx çalışmıyor"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx başka bir konteynerde çalışmıyor"
 msgstr "Nginx başka bir konteynerde çalışmıyor"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx çalışıyor"
 msgstr "Nginx çalışıyor"
 
 
@@ -3313,8 +3317,8 @@ msgid "Nginx.conf includes streams-enabled directory"
 msgstr "Nginx.conf, streams-enabled dizinini içerir"
 msgstr "Nginx.conf, streams-enabled dizinini içerir"
 
 
 #: src/components/ChatGPT/ChatMessageInput.vue:17
 #: src/components/ChatGPT/ChatMessageInput.vue:17
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
@@ -3331,7 +3335,7 @@ msgstr "Hayır"
 msgid "No Action"
 msgid "No Action"
 msgstr "Eylem Yok"
 msgstr "Eylem Yok"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:202
 msgid "No data"
 msgid "No data"
 msgstr "Veri yok"
 msgstr "Veri yok"
 
 
@@ -3468,9 +3472,13 @@ msgstr ""
 msgid "Off"
 msgid "Off"
 msgstr "Kapalı"
 msgstr "Kapalı"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/views/system/About.vue:31
+msgid "Official Document"
+msgstr "Resmi Belge"
+
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
-#: src/components/NodeSelector/NodeSelector.vue:94
+#: src/components/NodeSelector/NodeSelector.vue:107
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/views/dashboard/Environments.vue:99
 #: src/views/dashboard/Environments.vue:99
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3502,9 +3510,9 @@ msgstr "Açık"
 msgid "Once the verification is complete, the records will be removed."
 msgid "Once the verification is complete, the records will be removed."
 msgstr "Doğrulama tamamlandığında, kayıtlar kaldırılacaktır."
 msgstr "Doğrulama tamamlandığında, kayıtlar kaldırılacaktır."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
-#: src/components/NodeSelector/NodeSelector.vue:74
-#: src/components/NodeSelector/NodeSelector.vue:88
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
+#: src/components/NodeSelector/NodeSelector.vue:101
+#: src/components/NodeSelector/NodeSelector.vue:87
 #: src/views/dashboard/Environments.vue:92
 #: src/views/dashboard/Environments.vue:92
 #: src/views/environments/list/envColumns.tsx:51
 #: src/views/environments/list/envColumns.tsx:51
 msgid "Online"
 msgid "Online"
@@ -3522,7 +3530,7 @@ msgstr "Açık"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:280
 msgid "Or"
 msgid "Or"
 msgstr "Veya"
 msgstr "Veya"
 
 
@@ -3595,7 +3603,7 @@ msgstr ""
 "kimliğinizi doğrulayan WebAuthn kimlik bilgileridir. Bir şifre yerine veya "
 "kimliğinizi doğrulayan WebAuthn kimlik bilgileridir. Bir şifre yerine veya "
 "iki faktörlü kimlik doğrulama (2FA) yöntemi olarak kullanılabilirler."
 "iki faktörlü kimlik doğrulama (2FA) yöntemi olarak kullanılabilirler."
 
 
-#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:232 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "Şifre"
 msgstr "Şifre"
 
 
@@ -3657,7 +3665,7 @@ msgstr "Çekirdek yükseltme hatası"
 msgid "Performance"
 msgid "Performance"
 msgstr "Performans"
 msgstr "Performans"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:187
+#: src/views/dashboard/NginxDashBoard.vue:207
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "Performans Metrikleri"
 msgstr "Performans Metrikleri"
 
 
@@ -3681,7 +3689,7 @@ msgstr "PID yolu mevcut değil"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "Düz metin boş"
 msgstr "Düz metin boş"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:176
+#: src/views/dashboard/NginxDashBoard.vue:196
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -3891,7 +3899,7 @@ msgstr "Demoda root şifresini değiştirmek yasaktır"
 msgid "Prohibit deleting the default user"
 msgid "Prohibit deleting the default user"
 msgstr "Varsayılan kullanıcı silme yasağı"
 msgstr "Varsayılan kullanıcı silme yasağı"
 
 
-#: src/views/system/About.vue:51
+#: src/views/system/About.vue:71
 msgid "Project Team"
 msgid "Project Team"
 msgstr "Proje Ekibi"
 msgstr "Proje Ekibi"
 
 
@@ -4019,7 +4027,7 @@ msgstr "Sürüm Notları"
 msgid "Reload"
 msgid "Reload"
 msgstr "Yeniden Yükle"
 msgstr "Yeniden Yükle"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: 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:209
 #: src/views/environments/list/Environment.vue:209
@@ -4047,7 +4055,7 @@ msgstr "Uzak Nginx Yeniden Yükleme Hatası"
 msgid "Reload Remote Nginx Success"
 msgid "Reload Remote Nginx Success"
 msgstr "Uzak Nginx Yeniden Yükleme Başarılı"
 msgstr "Uzak Nginx Yeniden Yükleme Başarılı"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:84
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110
 msgid "Reload request failed, please check your network connection"
 msgid "Reload request failed, please check your network connection"
 msgstr "Yeniden yükleme isteği başarısız oldu, lütfen ağ bağlantınızı kontrol edin"
 msgstr "Yeniden yükleme isteği başarısız oldu, lütfen ağ bağlantınızı kontrol edin"
 
 
@@ -4216,7 +4224,7 @@ msgstr "Yanıtlar"
 msgid "Restart"
 msgid "Restart"
 msgstr "Yeniden Başlat"
 msgstr "Yeniden Başlat"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:238
 #: src/views/environments/list/Environment.vue:238
 msgid "Restart Nginx"
 msgid "Restart Nginx"
@@ -4238,7 +4246,7 @@ msgstr "Uzak Nginx Yeniden Başlatma Hatası"
 msgid "Restart Remote Nginx Success"
 msgid "Restart Remote Nginx Success"
 msgstr "Uzak Nginx Yeniden Başlatma Başarılı"
 msgstr "Uzak Nginx Yeniden Başlatma Başarılı"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:104
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
 msgid "Restart request failed, please check your network connection"
 msgid "Restart request failed, please check your network connection"
 msgstr "Yeniden başlatma isteği başarısız oldu, lütfen ağ bağlantınızı kontrol edin"
 msgstr "Yeniden başlatma isteği başarısız oldu, lütfen ağ bağlantınızı kontrol edin"
 
 
@@ -4688,7 +4696,7 @@ msgstr "Paylaşılan Bellek Bölgesi"
 msgid "Show"
 msgid "Show"
 msgstr "Göster"
 msgstr "Göster"
 
 
-#: src/views/other/Login.vue:285
+#: src/views/other/Login.vue:289
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "Bir anahtarla oturum aç"
 msgstr "Bir anahtarla oturum aç"
 
 
@@ -4748,6 +4756,10 @@ msgstr "Önbellek yükleyici tekrarları arasındaki bekleme süresi"
 msgid "Sleep time between cache manager iterations"
 msgid "Sleep time between cache manager iterations"
 msgstr "Önbellek yöneticisi yinelemeleri arasındaki bekleme süresi"
 msgstr "Önbellek yöneticisi yinelemeleri arasındaki bekleme süresi"
 
 
+#: src/views/system/About.vue:46
+msgid "Sponsor"
+msgstr "Sponsor"
+
 #: src/views/certificate/CertificateEditor.vue:211
 #: src/views/certificate/CertificateEditor.vue:211
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "SSL Sertifika İçeriği"
 msgstr "SSL Sertifika İçeriği"
@@ -4793,7 +4805,7 @@ msgstr "SSL Anahtar Yolu"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "HTTPS etkinleştirildiğinde SSL anahtar yolu gereklidir"
 msgstr "HTTPS etkinleştirildiğinde SSL anahtar yolu gereklidir"
 
 
-#: src/views/other/Login.vue:242
+#: src/views/other/Login.vue:246
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSO Girişi"
 msgstr "SSO Girişi"
 
 
@@ -5000,7 +5012,7 @@ msgstr "Yapılandırma Senkronizasyon Hatası"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Yapılandırma Başarıyla Senkronize Edildi"
 msgstr "Yapılandırma Başarıyla Senkronize Edildi"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:122
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/views/environments/group/EnvGroup.vue:31
 #: src/views/environments/group/EnvGroup.vue:31
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "Senkronizasyon Düğümleri"
 msgstr "Senkronizasyon Düğümleri"
@@ -5237,7 +5249,7 @@ msgid ""
 "-_./:"
 "-_./:"
 msgstr "Bu alan yalnızca harfler, Unicode karakterler, sayılar ve -_./: içermelidir"
 msgstr "Bu alan yalnızca harfler, Unicode karakterler, sayılar ve -_./: içermelidir"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:155
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5364,10 +5376,14 @@ msgstr ""
 "dağıtın. Bunlar OpenAI uyumlu bir API uç noktası sağlar, bu yüzden sadece "
 "dağıtın. Bunlar OpenAI uyumlu bir API uç noktası sağlar, bu yüzden sadece "
 "baseUrl'i yerel API'nize ayarlayın."
 "baseUrl'i yerel API'nize ayarlayın."
 
 
-#: src/views/dashboard/NginxDashBoard.vue:55
+#: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
 msgid "Toggle failed"
 msgstr "Değiştirme başarısız"
 msgstr "Değiştirme başarısız"
 
 
+#: src/constants/errors/user.ts:13
+msgid "Token is empty"
+msgstr "Token boş"
+
 #: src/views/preference/tabs/OpenAISettings.vue:61
 #: src/views/preference/tabs/OpenAISettings.vue:61
 msgid "Token is not valid"
 msgid "Token is not valid"
 msgstr "Token geçerli değil"
 msgstr "Token geçerli değil"
@@ -5552,7 +5568,7 @@ msgstr "Kullanıcı OTP'yi 2FA olarak etkinleştirmedi"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "Kullanıcı Profili"
 msgstr "Kullanıcı Profili"
 
 
-#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:222 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Kullanıcı Adı"
 msgstr "Kullanıcı Adı"
@@ -5750,8 +5766,8 @@ msgstr "Sertifika özel anahtarı diske yazılıyor"
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr "Sertifika diske yazılıyor"
 msgstr "Sertifika diske yazılıyor"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168
 #: 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:131
 #: src/views/preference/tabs/AuthSettings.vue:131

+ 60 - 44
app/src/language/uk_UA/app.po

@@ -227,7 +227,7 @@ msgstr "Розширений режим"
 msgid "Afterwards, refresh this page and click add passkey again."
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr "Після цього оновіть цю сторінку та натисніть «Додати ключ доступу» знову."
 msgstr "Після цього оновіть цю сторінку та натисніть «Додати ключ доступу» знову."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:115
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
 msgid "All"
 msgid "All"
 msgstr "Усі"
 msgstr "Усі"
 
 
@@ -306,7 +306,7 @@ msgstr "Ви впевнені, що хочете видалити назавжд
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "Ви впевнені, що хочете видалити?"
 msgstr "Ви впевнені, що хочете видалити?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:129
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 "Ви впевнені, що бажаєте перезавантажити Nginx на наступних вузлах "
 "Ви впевнені, що бажаєте перезавантажити Nginx на наступних вузлах "
@@ -324,7 +324,7 @@ msgstr "Ви впевнені, що хочете видалити цей еле
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Ви впевнені, що хочете видалити цю локацію?"
 msgstr "Ви впевнені, що хочете видалити цю локацію?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr ""
 msgstr ""
 "Ви впевнені, що хочете перезавантажити Nginx на вказаних синхронізованих "
 "Ви впевнені, що хочете перезавантажити Nginx на вказаних синхронізованих "
@@ -567,7 +567,7 @@ msgstr "Нижче наведені елементи, які ви обрали 
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr "Блок є nil"
 msgstr "Блок є nil"
 
 
-#: src/views/system/About.vue:55
+#: src/views/system/About.vue:75
 msgid "Build with"
 msgid "Build with"
 msgstr "Створено за допомогою"
 msgstr "Створено за допомогою"
 
 
@@ -660,7 +660,7 @@ msgstr "Не вдається порівняти: відсутній вміст"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "Неможливо видалити захищений шлях: {0}"
 msgstr "Неможливо видалити захищений шлях: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:154
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "Не вдається отримати дані про ефективність у цьому стані"
 msgstr "Не вдається отримати дані про ефективність у цьому стані"
 
 
@@ -1084,7 +1084,7 @@ msgstr "Підтвердити новий пароль"
 msgid "Connected"
 msgid "Connected"
 msgstr "Підключено"
 msgstr "Підключено"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:87
+#: src/views/dashboard/NginxDashBoard.vue:100
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Помилка з'єднання, спроба повторного підключення..."
 msgstr "Помилка з'єднання, спроба повторного підключення..."
 
 
@@ -1815,7 +1815,7 @@ msgstr "Не вдалося увімкнути потік %{name} на %{node}"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Потік %{name} успішно ввімкнено на %{node}"
 msgstr "Потік %{name} успішно ввімкнено на %{node}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:152
+#: src/views/dashboard/NginxDashBoard.vue:172
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "Увімкнути модуль stub_status"
 msgstr "Увімкнути модуль stub_status"
 
 
@@ -2400,7 +2400,7 @@ msgstr "Генерація приватного ключа для реєстра
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "Помилка отримання користувача ACME: {0}"
 msgstr "Помилка отримання користувача ACME: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:143
+#: src/views/dashboard/NginxDashBoard.vue:163
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "Не вдалося отримати дані"
 msgstr "Не вдалося отримати дані"
 
 
@@ -2614,6 +2614,10 @@ msgstr "Невірний формат AES IV: {0}"
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "Невірний формат ключа AES: {0}"
 msgstr "Невірний формат ключа AES: {0}"
 
 
+#: src/constants/errors/user.ts:14
+msgid "Invalid claims type"
+msgstr "Недійсний тип вимог"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "Недійсний об’єкт файлу"
 msgstr "Недійсний об’єкт файлу"
@@ -2732,7 +2736,7 @@ msgstr "Час останньої резервної копії"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Остання перевірка"
 msgstr "Остання перевірка"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:118
+#: src/views/dashboard/NginxDashBoard.vue:138
 msgid "Last update"
 msgid "Last update"
 msgstr "Останнє оновлення"
 msgstr "Останнє оновлення"
 
 
@@ -2769,7 +2773,7 @@ msgstr "Застарілий код відновлення не дозволяє
 msgid "Lego disable CNAME Support"
 msgid "Lego disable CNAME Support"
 msgstr "Lego вимкнути підтримку CNAME"
 msgstr "Lego вимкнути підтримку CNAME"
 
 
-#: src/views/system/About.vue:63
+#: src/views/system/About.vue:83
 msgid "License"
 msgid "License"
 msgstr "Ліцензія"
 msgstr "Ліцензія"
 
 
@@ -2819,12 +2823,12 @@ msgstr "Час очікування завантажувача"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "Поріг завантажувача"
 msgstr "Поріг завантажувача"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:180
+#: src/views/dashboard/NginxDashBoard.vue:200
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "Завантаження даних..."
 msgstr "Завантаження даних..."
 
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:71
+#: src/components/NodeSelector/NodeSelector.vue:84
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
@@ -2863,11 +2867,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "Список журналів"
 msgstr "Список журналів"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:271
 msgid "Login"
 msgid "Login"
 msgstr "Увійти"
 msgstr "Увійти"
 
 
-#: src/views/other/Login.vue:76
+#: src/views/other/Login.vue:78
 msgid "Login successful"
 msgid "Login successful"
 msgstr "Успішний вхід"
 msgstr "Успішний вхід"
 
 
@@ -3118,7 +3122,7 @@ msgstr "Багаторядкова директива"
 msgid "Name"
 msgid "Name"
 msgstr "Ім'я"
 msgstr "Ім'я"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:195
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "Потрібно активувати модуль stub_status"
 msgstr "Потрібно активувати модуль stub_status"
 
 
@@ -3274,9 +3278,9 @@ msgstr "Помилка Nginx: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:114
-#: src/views/dashboard/NginxDashBoard.vue:133
-#: src/views/dashboard/NginxDashBoard.vue:77
+#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:153
+#: src/views/dashboard/NginxDashBoard.vue:84
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx не працює"
 msgstr "Nginx не працює"
 
 
@@ -3284,7 +3288,7 @@ msgstr "Nginx не працює"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx не працює в іншому контейнері"
 msgstr "Nginx не працює в іншому контейнері"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx працює"
 msgstr "Nginx працює"
 
 
@@ -3384,8 +3388,8 @@ msgid "Nginx.conf includes streams-enabled directory"
 msgstr "Nginx.conf включає каталог streams-enabled"
 msgstr "Nginx.conf включає каталог streams-enabled"
 
 
 #: src/components/ChatGPT/ChatMessageInput.vue:17
 #: src/components/ChatGPT/ChatMessageInput.vue:17
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
@@ -3402,7 +3406,7 @@ msgstr "Ні"
 msgid "No Action"
 msgid "No Action"
 msgstr "Без дії"
 msgstr "Без дії"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:202
 msgid "No data"
 msgid "No data"
 msgstr "Немає даних"
 msgstr "Немає даних"
 
 
@@ -3539,9 +3543,13 @@ msgstr ""
 msgid "Off"
 msgid "Off"
 msgstr "Вимкнено"
 msgstr "Вимкнено"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/views/system/About.vue:31
+msgid "Official Document"
+msgstr "Офіційна документація"
+
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
-#: src/components/NodeSelector/NodeSelector.vue:94
+#: src/components/NodeSelector/NodeSelector.vue:107
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/views/dashboard/Environments.vue:99
 #: src/views/dashboard/Environments.vue:99
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3573,9 +3581,9 @@ msgstr "Увімкнено"
 msgid "Once the verification is complete, the records will be removed."
 msgid "Once the verification is complete, the records will be removed."
 msgstr "Після завершення перевірки записи будуть видалені."
 msgstr "Після завершення перевірки записи будуть видалені."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
-#: src/components/NodeSelector/NodeSelector.vue:74
-#: src/components/NodeSelector/NodeSelector.vue:88
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
+#: src/components/NodeSelector/NodeSelector.vue:101
+#: src/components/NodeSelector/NodeSelector.vue:87
 #: src/views/dashboard/Environments.vue:92
 #: src/views/dashboard/Environments.vue:92
 #: src/views/environments/list/envColumns.tsx:51
 #: src/views/environments/list/envColumns.tsx:51
 msgid "Online"
 msgid "Online"
@@ -3593,7 +3601,7 @@ msgstr "Відкрито"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:280
 msgid "Or"
 msgid "Or"
 msgstr "Або"
 msgstr "Або"
 
 
@@ -3667,7 +3675,7 @@ msgstr ""
 "можуть використовуватися замість пароля або як метод двофакторної "
 "можуть використовуватися замість пароля або як метод двофакторної "
 "аутентифікації (2FA)."
 "аутентифікації (2FA)."
 
 
-#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:232 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "Пароль"
 msgstr "Пароль"
 
 
@@ -3729,7 +3737,7 @@ msgstr "Помилка виконання оновлення ядра"
 msgid "Performance"
 msgid "Performance"
 msgstr "Продуктивність"
 msgstr "Продуктивність"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:187
+#: src/views/dashboard/NginxDashBoard.vue:207
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "Метрики продуктивності"
 msgstr "Метрики продуктивності"
 
 
@@ -3753,7 +3761,7 @@ msgstr "Шлях PID не існує"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "Звичайний текст порожній"
 msgstr "Звичайний текст порожній"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:176
+#: src/views/dashboard/NginxDashBoard.vue:196
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -3963,7 +3971,7 @@ msgstr "У демо-версії заборонено змінювати пар
 msgid "Prohibit deleting the default user"
 msgid "Prohibit deleting the default user"
 msgstr "Забороняється видаляти типового користувача"
 msgstr "Забороняється видаляти типового користувача"
 
 
-#: src/views/system/About.vue:51
+#: src/views/system/About.vue:71
 msgid "Project Team"
 msgid "Project Team"
 msgstr "Команда проекту"
 msgstr "Команда проекту"
 
 
@@ -4092,7 +4100,7 @@ msgstr "Примітки до версії"
 msgid "Reload"
 msgid "Reload"
 msgstr "Перезавантажити"
 msgstr "Перезавантажити"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: 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:209
 #: src/views/environments/list/Environment.vue:209
@@ -4120,7 +4128,7 @@ msgstr "Помилка перезавантаження віддаленого N
 msgid "Reload Remote Nginx Success"
 msgid "Reload Remote Nginx Success"
 msgstr "Успішне перезавантаження віддаленого Nginx"
 msgstr "Успішне перезавантаження віддаленого Nginx"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:84
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110
 msgid "Reload request failed, please check your network connection"
 msgid "Reload request failed, please check your network connection"
 msgstr ""
 msgstr ""
 "Не вдалося виконати запит на перезавантаження, будь ласка, перевірте "
 "Не вдалося виконати запит на перезавантаження, будь ласка, перевірте "
@@ -4282,7 +4290,7 @@ msgstr "Відповіді"
 msgid "Restart"
 msgid "Restart"
 msgstr "Перезавантажити"
 msgstr "Перезавантажити"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:238
 #: src/views/environments/list/Environment.vue:238
 msgid "Restart Nginx"
 msgid "Restart Nginx"
@@ -4304,7 +4312,7 @@ msgstr "Помилка перезапуску віддаленого Nginx"
 msgid "Restart Remote Nginx Success"
 msgid "Restart Remote Nginx Success"
 msgstr "Віддалений перезапуск Nginx успішний"
 msgstr "Віддалений перезапуск Nginx успішний"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:104
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
 msgid "Restart request failed, please check your network connection"
 msgid "Restart request failed, please check your network connection"
 msgstr ""
 msgstr ""
 "Не вдалося виконати запит на перезавантаження, будь ласка, перевірте "
 "Не вдалося виконати запит на перезавантаження, будь ласка, перевірте "
@@ -4760,7 +4768,7 @@ msgstr "Зона спільної пам'яті"
 msgid "Show"
 msgid "Show"
 msgstr "Показати"
 msgstr "Показати"
 
 
-#: src/views/other/Login.vue:285
+#: src/views/other/Login.vue:289
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "Увійти за допомогою ключа доступу"
 msgstr "Увійти за допомогою ключа доступу"
 
 
@@ -4820,6 +4828,10 @@ msgstr "Час очікування між ітераціями завантаж
 msgid "Sleep time between cache manager iterations"
 msgid "Sleep time between cache manager iterations"
 msgstr "Час очікування між ітераціями менеджера кешу"
 msgstr "Час очікування між ітераціями менеджера кешу"
 
 
+#: src/views/system/About.vue:46
+msgid "Sponsor"
+msgstr "Спонсор"
+
 #: src/views/certificate/CertificateEditor.vue:211
 #: src/views/certificate/CertificateEditor.vue:211
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "Вміст SSL-сертифіката"
 msgstr "Вміст SSL-сертифіката"
@@ -4865,7 +4877,7 @@ msgstr "Шлях до SSL-ключа"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "Шлях до SSL-ключа обов’язковий при ввімкненні HTTPS"
 msgstr "Шлях до SSL-ключа обов’язковий при ввімкненні HTTPS"
 
 
-#: src/views/other/Login.vue:242
+#: src/views/other/Login.vue:246
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "Вхід через SSO"
 msgstr "Вхід через SSO"
 
 
@@ -5070,7 +5082,7 @@ msgstr "Помилка синхронізації конфігурації"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Успішна синхронізація конфігурації"
 msgstr "Успішна синхронізація конфігурації"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:122
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/views/environments/group/EnvGroup.vue:31
 #: src/views/environments/group/EnvGroup.vue:31
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "Синхронізовані вузли"
 msgstr "Синхронізовані вузли"
@@ -5309,7 +5321,7 @@ msgid ""
 "-_./:"
 "-_./:"
 msgstr "Це поле має містити лише літери, символи Unicode, цифри та -_./:"
 msgstr "Це поле має містити лише літери, символи Unicode, цифри та -_./:"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:155
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5434,10 +5446,14 @@ msgstr ""
 "ollama, vllm або lmdeploy. Вони надають API-ендпоінт, сумісний з OpenAI, "
 "ollama, vllm або lmdeploy. Вони надають API-ендпоінт, сумісний з OpenAI, "
 "тому просто встановіть baseUrl на вашу локальну API."
 "тому просто встановіть baseUrl на вашу локальну API."
 
 
-#: src/views/dashboard/NginxDashBoard.vue:55
+#: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
 msgid "Toggle failed"
 msgstr "Не вдалося перемкнути"
 msgstr "Не вдалося перемкнути"
 
 
+#: src/constants/errors/user.ts:13
+msgid "Token is empty"
+msgstr "Токен порожній"
+
 #: src/views/preference/tabs/OpenAISettings.vue:61
 #: src/views/preference/tabs/OpenAISettings.vue:61
 msgid "Token is not valid"
 msgid "Token is not valid"
 msgstr "Токен недійсний"
 msgstr "Токен недійсний"
@@ -5622,7 +5638,7 @@ msgstr "Користувач не увімкнув OTP як 2FA"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "Профіль користувача"
 msgstr "Профіль користувача"
 
 
-#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:222 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Ім’я користувача"
 msgstr "Ім’я користувача"
@@ -5819,8 +5835,8 @@ msgstr "Запис приватного ключа сертифіката на 
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr "Запис сертифіката на диск"
 msgstr "Запис сертифіката на диск"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168
 #: 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:131
 #: src/views/preference/tabs/AuthSettings.vue:131

+ 60 - 44
app/src/language/vi_VN/app.po

@@ -218,7 +218,7 @@ msgstr "Nâng cao"
 msgid "Afterwards, refresh this page and click add passkey again."
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr "Sau đó, làm mới trang này và nhấp vào thêm khóa truy cập một lần nữa."
 msgstr "Sau đó, làm mới trang này và nhấp vào thêm khóa truy cập một lần nữa."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:115
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
 msgid "All"
 msgid "All"
 msgstr "Tất cả"
 msgstr "Tất cả"
 
 
@@ -297,7 +297,7 @@ msgstr "Bạn có chắc chắn muốn xóa vĩnh viễn không?"
 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?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:129
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr "Bạn có chắc chắn muốn tải lại Nginx trên các nút đồng bộ sau không?"
 msgstr "Bạn có chắc chắn muốn tải lại Nginx trên các nút đồng bộ sau không?"
 
 
@@ -313,7 +313,7 @@ msgstr "Bạn có chắc chắn muốn xóa mục này không?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Bạn có chắc chắn muốn xóa vị trí này không?"
 msgstr "Bạn có chắc chắn muốn xóa vị trí này không?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr "Bạn có chắc chắn muốn khởi động lại Nginx trên các nút đồng bộ sau không?"
 msgstr "Bạn có chắc chắn muốn khởi động lại Nginx trên các nút đồng bộ sau không?"
 
 
@@ -548,7 +548,7 @@ msgstr "Dưới đây là các mục đã chọn mà bạn muốn sửa hàng lo
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr "Khối là nil"
 msgstr "Khối là nil"
 
 
-#: src/views/system/About.vue:55
+#: src/views/system/About.vue:75
 msgid "Build with"
 msgid "Build with"
 msgstr "Xây dựng với"
 msgstr "Xây dựng với"
 
 
@@ -640,7 +640,7 @@ msgstr "Không thể so sánh: Thiếu nội dung"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "Không thể xóa đường dẫn được bảo vệ: {0}"
 msgstr "Không thể xóa đường dẫn được bảo vệ: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:154
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "Không thể nhận được dữ liệu hiệu suất ở trạng thái này"
 msgstr "Không thể nhận được dữ liệu hiệu suất ở trạng thái này"
 
 
@@ -1063,7 +1063,7 @@ msgstr "Xác nhận mật khẩu mới"
 msgid "Connected"
 msgid "Connected"
 msgstr "Đã kết nối"
 msgstr "Đã kết nối"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:87
+#: src/views/dashboard/NginxDashBoard.vue:100
 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..."
 
 
@@ -1720,7 +1720,7 @@ msgstr "Không thể bật luồng %{name} trên %{node}"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Đã bật luồng %{name} trên %{node} thành công"
 msgstr "Đã bật luồng %{name} trên %{node} thành công"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:152
+#: src/views/dashboard/NginxDashBoard.vue:172
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "Bật module stub_status"
 msgstr "Bật module stub_status"
 
 
@@ -2305,7 +2305,7 @@ msgstr "Tạo khóa riêng để đăng ký tài khoản"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "Lỗi khi lấy người dùng ACME: {0}"
 msgstr "Lỗi khi lấy người dùng ACME: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:143
+#: src/views/dashboard/NginxDashBoard.vue:163
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "Không thể lấy dữ liệu"
 msgstr "Không thể lấy dữ liệu"
 
 
@@ -2518,6 +2518,10 @@ msgstr "Định dạng AES IV không hợp lệ: {0}"
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "Định dạng khóa AES không hợp lệ: {0}"
 msgstr "Định dạng khóa AES không hợp lệ: {0}"
 
 
+#: src/constants/errors/user.ts:14
+msgid "Invalid claims type"
+msgstr "Loại yêu cầu không hợp lệ"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "Đối tượng tệp không hợp lệ"
 msgstr "Đối tượng tệp không hợp lệ"
@@ -2636,7 +2640,7 @@ msgstr "Thời gian sao lưu cuối cùng"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Kiểm tra lần cuối lúc"
 msgstr "Kiểm tra lần cuối lúc"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:118
+#: src/views/dashboard/NginxDashBoard.vue:138
 msgid "Last update"
 msgid "Last update"
 msgstr "Cập nhật cuối cùng"
 msgstr "Cập nhật cuối cùng"
 
 
@@ -2673,7 +2677,7 @@ msgstr "Không cho phép mã khôi phục cũ vì TOTP chưa được bật"
 msgid "Lego disable CNAME Support"
 msgid "Lego disable CNAME Support"
 msgstr "Lego tắt hỗ trợ CNAME"
 msgstr "Lego tắt hỗ trợ CNAME"
 
 
-#: src/views/system/About.vue:63
+#: src/views/system/About.vue:83
 msgid "License"
 msgid "License"
 msgstr "Giấy phép"
 msgstr "Giấy phép"
 
 
@@ -2723,12 +2727,12 @@ msgstr "Thời gian nghỉ của bộ nạp"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "Ngưỡng tải"
 msgstr "Ngưỡng tải"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:180
+#: src/views/dashboard/NginxDashBoard.vue:200
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "Đang tải dữ liệu..."
 msgstr "Đang tải dữ liệu..."
 
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:71
+#: src/components/NodeSelector/NodeSelector.vue:84
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
@@ -2767,11 +2771,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "Danh sách nhật ký"
 msgstr "Danh sách nhật ký"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:271
 msgid "Login"
 msgid "Login"
 msgstr "Đăng nhập"
 msgstr "Đăng nhập"
 
 
-#: src/views/other/Login.vue:76
+#: src/views/other/Login.vue:78
 msgid "Login successful"
 msgid "Login successful"
 msgstr "Đăng nhập thành công"
 msgstr "Đăng nhập thành công"
 
 
@@ -3022,7 +3026,7 @@ msgstr "Chỉ thị nhiều dòng"
 msgid "Name"
 msgid "Name"
 msgstr "Tên"
 msgstr "Tên"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:195
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "Cần bật module stub_status"
 msgstr "Cần bật module stub_status"
 
 
@@ -3178,9 +3182,9 @@ msgstr "Lỗi Nginx: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:114
-#: src/views/dashboard/NginxDashBoard.vue:133
-#: src/views/dashboard/NginxDashBoard.vue:77
+#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:153
+#: src/views/dashboard/NginxDashBoard.vue:84
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx không đang chạy"
 msgstr "Nginx không đang chạy"
 
 
@@ -3188,7 +3192,7 @@ msgstr "Nginx không đang chạy"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx không chạy trong một container khác"
 msgstr "Nginx không chạy trong một container khác"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx đang chạy"
 msgstr "Nginx đang chạy"
 
 
@@ -3288,8 +3292,8 @@ msgid "Nginx.conf includes streams-enabled directory"
 msgstr "Nginx.conf bao gồm thư mục streams-enabled"
 msgstr "Nginx.conf bao gồm thư mục streams-enabled"
 
 
 #: src/components/ChatGPT/ChatMessageInput.vue:17
 #: src/components/ChatGPT/ChatMessageInput.vue:17
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
@@ -3306,7 +3310,7 @@ msgstr "Không"
 msgid "No Action"
 msgid "No Action"
 msgstr "Không hành động"
 msgstr "Không hành động"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:202
 msgid "No data"
 msgid "No data"
 msgstr "Không có dữ liệu"
 msgstr "Không có dữ liệu"
 
 
@@ -3441,9 +3445,13 @@ msgstr ""
 msgid "Off"
 msgid "Off"
 msgstr "Tắt"
 msgstr "Tắt"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/views/system/About.vue:31
+msgid "Official Document"
+msgstr "Tài liệu chính thức"
+
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
-#: src/components/NodeSelector/NodeSelector.vue:94
+#: src/components/NodeSelector/NodeSelector.vue:107
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/views/dashboard/Environments.vue:99
 #: src/views/dashboard/Environments.vue:99
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3475,9 +3483,9 @@ msgstr "Bật"
 msgid "Once the verification is complete, the records will be removed."
 msgid "Once the verification is complete, the records will be removed."
 msgstr "Sau khi quá trình xác minh hoàn tất, bản ghi sẽ bị xóa."
 msgstr "Sau khi quá trình xác minh hoàn tất, bản ghi sẽ bị xóa."
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
-#: src/components/NodeSelector/NodeSelector.vue:74
-#: src/components/NodeSelector/NodeSelector.vue:88
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
+#: src/components/NodeSelector/NodeSelector.vue:101
+#: src/components/NodeSelector/NodeSelector.vue:87
 #: src/views/dashboard/Environments.vue:92
 #: src/views/dashboard/Environments.vue:92
 #: src/views/environments/list/envColumns.tsx:51
 #: src/views/environments/list/envColumns.tsx:51
 msgid "Online"
 msgid "Online"
@@ -3495,7 +3503,7 @@ msgstr "Mở"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:280
 msgid "Or"
 msgid "Or"
 msgstr "Hoặc"
 msgstr "Hoặc"
 
 
@@ -3569,7 +3577,7 @@ msgstr ""
 "có thể được sử dụng để thay thế mật khẩu hoặc làm phương thức xác thực hai "
 "có thể được sử dụng để thay thế mật khẩu hoặc làm phương thức xác thực hai "
 "yếu tố (2FA)."
 "yếu tố (2FA)."
 
 
-#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:232 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "Mật khẩu"
 msgstr "Mật khẩu"
 
 
@@ -3631,7 +3639,7 @@ msgstr "Nâng cấp core không thành công"
 msgid "Performance"
 msgid "Performance"
 msgstr "Hiệu suất"
 msgstr "Hiệu suất"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:187
+#: src/views/dashboard/NginxDashBoard.vue:207
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "Chỉ số hiệu suất"
 msgstr "Chỉ số hiệu suất"
 
 
@@ -3655,7 +3663,7 @@ msgstr "Đường dẫn PID không tồn tại"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "Văn bản thuần túy trống"
 msgstr "Văn bản thuần túy trống"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:176
+#: src/views/dashboard/NginxDashBoard.vue:196
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -3856,7 +3864,7 @@ msgstr "Cấm thay đổi mật khẩu root trong demo"
 msgid "Prohibit deleting the default user"
 msgid "Prohibit deleting the default user"
 msgstr "Cấm xóa người dùng mặc định"
 msgstr "Cấm xóa người dùng mặc định"
 
 
-#: src/views/system/About.vue:51
+#: src/views/system/About.vue:71
 msgid "Project Team"
 msgid "Project Team"
 msgstr "Đội ngũ phát triển"
 msgstr "Đội ngũ phát triển"
 
 
@@ -3984,7 +3992,7 @@ msgstr "Ghi chú phát hành"
 msgid "Reload"
 msgid "Reload"
 msgstr "Tải lại"
 msgstr "Tải lại"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: 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:209
 #: src/views/environments/list/Environment.vue:209
@@ -4012,7 +4020,7 @@ msgstr "Lỗi tải lại Nginx từ xa"
 msgid "Reload Remote Nginx Success"
 msgid "Reload Remote Nginx Success"
 msgstr "Tải lại Nginx từ xa thành công"
 msgstr "Tải lại Nginx từ xa thành công"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:84
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110
 msgid "Reload request failed, please check your network connection"
 msgid "Reload request failed, please check your network connection"
 msgstr "Yêu cầu tải lại thất bại, vui lòng kiểm tra kết nối mạng của bạn"
 msgstr "Yêu cầu tải lại thất bại, vui lòng kiểm tra kết nối mạng của bạn"
 
 
@@ -4172,7 +4180,7 @@ msgstr "Phản hồi"
 msgid "Restart"
 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:174
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:238
 #: src/views/environments/list/Environment.vue:238
 msgid "Restart Nginx"
 msgid "Restart Nginx"
@@ -4194,7 +4202,7 @@ msgstr "Lỗi khởi động lại Nginx từ xa"
 msgid "Restart Remote Nginx Success"
 msgid "Restart Remote Nginx Success"
 msgstr "Khởi động lại Nginx từ xa thành công"
 msgstr "Khởi động lại Nginx từ xa thành công"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:104
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
 msgid "Restart request failed, please check your network connection"
 msgid "Restart request failed, please check your network connection"
 msgstr "Yêu cầu khởi động lại thất bại, vui lòng kiểm tra kết nối mạng của bạn"
 msgstr "Yêu cầu khởi động lại thất bại, vui lòng kiểm tra kết nối mạng của bạn"
 
 
@@ -4642,7 +4650,7 @@ msgstr "Vùng Bộ Nhớ Chia Sẻ"
 msgid "Show"
 msgid "Show"
 msgstr "Hiển thị"
 msgstr "Hiển thị"
 
 
-#: src/views/other/Login.vue:285
+#: src/views/other/Login.vue:289
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "Đăng nhập bằng khóa truy cập"
 msgstr "Đăng nhập bằng khóa truy cập"
 
 
@@ -4702,6 +4710,10 @@ msgstr "Thời gian chờ giữa các lần lặp của bộ nạp bộ đệm"
 msgid "Sleep time between cache manager iterations"
 msgid "Sleep time between cache manager iterations"
 msgstr "Thời gian chờ giữa các lần lặp của trình quản lý bộ nhớ đệm"
 msgstr "Thời gian chờ giữa các lần lặp của trình quản lý bộ nhớ đệm"
 
 
+#: src/views/system/About.vue:46
+msgid "Sponsor"
+msgstr "Nhà tài trợ"
+
 #: src/views/certificate/CertificateEditor.vue:211
 #: src/views/certificate/CertificateEditor.vue:211
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "Nội dung chứng chỉ SSL"
 msgstr "Nội dung chứng chỉ SSL"
@@ -4747,7 +4759,7 @@ msgstr "Đường dẫn khóa SSL"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "Đường dẫn khóa SSL là bắt buộc khi bật HTTPS"
 msgstr "Đường dẫn khóa SSL là bắt buộc khi bật HTTPS"
 
 
-#: src/views/other/Login.vue:242
+#: src/views/other/Login.vue:246
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "Đăng nhập SSO"
 msgstr "Đăng nhập SSO"
 
 
@@ -4952,7 +4964,7 @@ msgstr "Lỗi đồng bộ cấu hình"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Đồng bộ cấu hình thành công"
 msgstr "Đồng bộ cấu hình thành công"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:122
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/views/environments/group/EnvGroup.vue:31
 #: src/views/environments/group/EnvGroup.vue:31
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "Nút đồng bộ"
 msgstr "Nút đồng bộ"
@@ -5189,7 +5201,7 @@ msgid ""
 "-_./:"
 "-_./:"
 msgstr "Trường này chỉ được chứa chữ cái, ký tự Unicode, số và -_./:"
 msgstr "Trường này chỉ được chứa chữ cái, ký tự Unicode, số và -_./:"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:155
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5316,10 +5328,14 @@ msgstr ""
 "lmdeploy. Chúng cung cấp một điểm cuối API tương thích với OpenAI, vì vậy "
 "lmdeploy. Chúng cung cấp một điểm cuối API tương thích với OpenAI, vì vậy "
 "chỉ cần đặt baseUrl thành API cục bộ của bạn."
 "chỉ cần đặt baseUrl thành API cục bộ của bạn."
 
 
-#: src/views/dashboard/NginxDashBoard.vue:55
+#: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
 msgid "Toggle failed"
 msgstr "Chuyển đổi thất bại"
 msgstr "Chuyển đổi thất bại"
 
 
+#: src/constants/errors/user.ts:13
+msgid "Token is empty"
+msgstr "Token trống"
+
 #: src/views/preference/tabs/OpenAISettings.vue:61
 #: src/views/preference/tabs/OpenAISettings.vue:61
 msgid "Token is not valid"
 msgid "Token is not valid"
 msgstr "Mã thông báo không hợp lệ"
 msgstr "Mã thông báo không hợp lệ"
@@ -5504,7 +5520,7 @@ msgstr "Người dùng chưa bật OTP làm 2FA"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "Hồ sơ người dùng"
 msgstr "Hồ sơ người dùng"
 
 
-#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:222 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Username"
 msgstr "Username"
@@ -5699,8 +5715,8 @@ msgstr "Ghi Private Key vào disk"
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr "Ghi chứng chỉ vào disk"
 msgstr "Ghi chứng chỉ vào disk"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168
 #: 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:131
 #: src/views/preference/tabs/AuthSettings.vue:131

+ 60 - 44
app/src/language/zh_CN/app.po

@@ -222,7 +222,7 @@ msgstr "高级模式"
 msgid "Afterwards, refresh this page and click add passkey again."
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr "之后,请刷新此页面并再次点击添加通行密钥。"
 msgstr "之后,请刷新此页面并再次点击添加通行密钥。"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:115
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
 msgid "All"
 msgid "All"
 msgstr "全部"
 msgstr "全部"
 
 
@@ -299,7 +299,7 @@ msgstr "确定要永久删除吗?"
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "您确定要删除吗?"
 msgstr "您确定要删除吗?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:129
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr "你确定要在以下同步节点上重载 Nginx?"
 msgstr "你确定要在以下同步节点上重载 Nginx?"
 
 
@@ -315,7 +315,7 @@ msgstr "您确定要删除这个项目吗?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "您确定要删除这个 Location?"
 msgstr "您确定要删除这个 Location?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr "你确定要在以下同步节点上重启 Nginx 吗?"
 msgstr "你确定要在以下同步节点上重启 Nginx 吗?"
 
 
@@ -548,7 +548,7 @@ msgstr "以下是您选定的需要批量修改的项目"
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr "区块为空"
 msgstr "区块为空"
 
 
-#: src/views/system/About.vue:55
+#: src/views/system/About.vue:75
 msgid "Build with"
 msgid "Build with"
 msgstr "构建基于"
 msgstr "构建基于"
 
 
@@ -638,7 +638,7 @@ msgstr "无法比较:内容缺失"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "无法删除受保护的路径:{0}"
 msgstr "无法删除受保护的路径:{0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:154
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "在此状态下无法获取性能数据"
 msgstr "在此状态下无法获取性能数据"
 
 
@@ -1043,7 +1043,7 @@ msgstr "确认新密码"
 msgid "Connected"
 msgid "Connected"
 msgstr "已连接"
 msgstr "已连接"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:87
+#: src/views/dashboard/NginxDashBoard.vue:100
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "连接错误,正在尝试重新连接..."
 msgstr "连接错误,正在尝试重新连接..."
 
 
@@ -1694,7 +1694,7 @@ msgstr "在 %{node} 中启用 %{name} 失败"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "在 %{node} 上启用 %{name} 成功"
 msgstr "在 %{node} 上启用 %{name} 成功"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:152
+#: src/views/dashboard/NginxDashBoard.vue:172
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "启用 stub_status 模块"
 msgstr "启用 stub_status 模块"
 
 
@@ -2277,7 +2277,7 @@ msgstr "正在生成私钥用于注册账户"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "获取 ACME 用户错误: {0}"
 msgstr "获取 ACME 用户错误: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:143
+#: src/views/dashboard/NginxDashBoard.vue:163
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "获取数据失败"
 msgstr "获取数据失败"
 
 
@@ -2482,6 +2482,10 @@ msgstr "AES IV 格式无效:{0}"
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "AES 密钥格式无效:{0}"
 msgstr "AES 密钥格式无效:{0}"
 
 
+#: src/constants/errors/user.ts:14
+msgid "Invalid claims type"
+msgstr "无效的声明类型"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "无效文件对象"
 msgstr "无效文件对象"
@@ -2598,7 +2602,7 @@ msgstr "上次备份时间"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "最后检查时间"
 msgstr "最后检查时间"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:118
+#: src/views/dashboard/NginxDashBoard.vue:138
 msgid "Last update"
 msgid "Last update"
 msgstr "上次更新"
 msgstr "上次更新"
 
 
@@ -2635,7 +2639,7 @@ msgstr "由于未启用 TOTP,因此不允许使用传统恢复代码"
 msgid "Lego disable CNAME Support"
 msgid "Lego disable CNAME Support"
 msgstr "Lego 禁用 CNAME 支持"
 msgstr "Lego 禁用 CNAME 支持"
 
 
-#: src/views/system/About.vue:63
+#: src/views/system/About.vue:83
 msgid "License"
 msgid "License"
 msgstr "开源许可"
 msgstr "开源许可"
 
 
@@ -2685,12 +2689,12 @@ msgstr "加载器睡眠"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "加载器阈值"
 msgstr "加载器阈值"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:180
+#: src/views/dashboard/NginxDashBoard.vue:200
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "正在加载数据..."
 msgstr "正在加载数据..."
 
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:71
+#: src/components/NodeSelector/NodeSelector.vue:84
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
@@ -2727,11 +2731,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "日志列表"
 msgstr "日志列表"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:271
 msgid "Login"
 msgid "Login"
 msgstr "登录"
 msgstr "登录"
 
 
-#: src/views/other/Login.vue:76
+#: src/views/other/Login.vue:78
 msgid "Login successful"
 msgid "Login successful"
 msgstr "登录成功"
 msgstr "登录成功"
 
 
@@ -2977,7 +2981,7 @@ msgstr "多行指令"
 msgid "Name"
 msgid "Name"
 msgstr "名称"
 msgstr "名称"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:195
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "需要启用 stub_status 模块"
 msgstr "需要启用 stub_status 模块"
 
 
@@ -3133,9 +3137,9 @@ msgstr "Nginx 错误:{0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:114
-#: src/views/dashboard/NginxDashBoard.vue:133
-#: src/views/dashboard/NginxDashBoard.vue:77
+#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:153
+#: src/views/dashboard/NginxDashBoard.vue:84
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx 未启动"
 msgstr "Nginx 未启动"
 
 
@@ -3143,7 +3147,7 @@ msgstr "Nginx 未启动"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx 未在另一个容器中运行"
 msgstr "Nginx 未在另一个容器中运行"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx 正在运行"
 msgstr "Nginx 正在运行"
 
 
@@ -3241,8 +3245,8 @@ msgid "Nginx.conf includes streams-enabled directory"
 msgstr "检查 nginx.conf 是否包含 streams-enabled 的目录"
 msgstr "检查 nginx.conf 是否包含 streams-enabled 的目录"
 
 
 #: src/components/ChatGPT/ChatMessageInput.vue:17
 #: src/components/ChatGPT/ChatMessageInput.vue:17
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
@@ -3259,7 +3263,7 @@ msgstr "取消"
 msgid "No Action"
 msgid "No Action"
 msgstr "无操作"
 msgstr "无操作"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:202
 msgid "No data"
 msgid "No data"
 msgstr "没有数据"
 msgstr "没有数据"
 
 
@@ -3390,9 +3394,13 @@ msgstr "某些用户在使用 Firefox 首次访问时,OCSP Must Staple 可能
 msgid "Off"
 msgid "Off"
 msgstr "关闭"
 msgstr "关闭"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/views/system/About.vue:31
+msgid "Official Document"
+msgstr "官方文档"
+
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
-#: src/components/NodeSelector/NodeSelector.vue:94
+#: src/components/NodeSelector/NodeSelector.vue:107
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/views/dashboard/Environments.vue:99
 #: src/views/dashboard/Environments.vue:99
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3424,9 +3432,9 @@ msgstr "开启"
 msgid "Once the verification is complete, the records will be removed."
 msgid "Once the verification is complete, the records will be removed."
 msgstr "一旦验证完成,这些记录将被删除。"
 msgstr "一旦验证完成,这些记录将被删除。"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
-#: src/components/NodeSelector/NodeSelector.vue:74
-#: src/components/NodeSelector/NodeSelector.vue:88
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
+#: src/components/NodeSelector/NodeSelector.vue:101
+#: src/components/NodeSelector/NodeSelector.vue:87
 #: src/views/dashboard/Environments.vue:92
 #: src/views/dashboard/Environments.vue:92
 #: src/views/environments/list/envColumns.tsx:51
 #: src/views/environments/list/envColumns.tsx:51
 msgid "Online"
 msgid "Online"
@@ -3444,7 +3452,7 @@ msgstr "开放"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:280
 msgid "Or"
 msgid "Or"
 msgstr "或"
 msgstr "或"
 
 
@@ -3514,7 +3522,7 @@ msgid ""
 "password replacement or as a 2FA method."
 "password replacement or as a 2FA method."
 msgstr "Passkey 是一种网络认证凭据,可通过指纹、面部识别、设备密码或 PIN 码验证身份。它们可用作密码替代品或二步验证方法。"
 msgstr "Passkey 是一种网络认证凭据,可通过指纹、面部识别、设备密码或 PIN 码验证身份。它们可用作密码替代品或二步验证方法。"
 
 
-#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:232 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "密码"
 msgstr "密码"
 
 
@@ -3576,7 +3584,7 @@ msgstr "执行核心升级错误"
 msgid "Performance"
 msgid "Performance"
 msgstr "性能"
 msgstr "性能"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:187
+#: src/views/dashboard/NginxDashBoard.vue:207
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "性能指标"
 msgstr "性能指标"
 
 
@@ -3600,7 +3608,7 @@ msgstr "PID 路径不存在"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "原文为空"
 msgstr "原文为空"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:176
+#: src/views/dashboard/NginxDashBoard.vue:196
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -3793,7 +3801,7 @@ msgstr "禁止在演示模式下修改 root 账户的密码"
 msgid "Prohibit deleting the default user"
 msgid "Prohibit deleting the default user"
 msgstr "禁止删除默认用户"
 msgstr "禁止删除默认用户"
 
 
-#: src/views/system/About.vue:51
+#: src/views/system/About.vue:71
 msgid "Project Team"
 msgid "Project Team"
 msgstr "项目团队"
 msgstr "项目团队"
 
 
@@ -3917,7 +3925,7 @@ msgstr "发行日志"
 msgid "Reload"
 msgid "Reload"
 msgstr "重载"
 msgstr "重载"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: 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:209
 #: src/views/environments/list/Environment.vue:209
@@ -3945,7 +3953,7 @@ msgstr "重载远程 Nginx 错误"
 msgid "Reload Remote Nginx Success"
 msgid "Reload Remote Nginx Success"
 msgstr "重载远程 Nginx 成功"
 msgstr "重载远程 Nginx 成功"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:84
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110
 msgid "Reload request failed, please check your network connection"
 msgid "Reload request failed, please check your network connection"
 msgstr "重载请求失败,请检查网络连接"
 msgstr "重载请求失败,请检查网络连接"
 
 
@@ -4102,7 +4110,7 @@ msgstr "响应"
 msgid "Restart"
 msgid "Restart"
 msgstr "重启"
 msgstr "重启"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:238
 #: src/views/environments/list/Environment.vue:238
 msgid "Restart Nginx"
 msgid "Restart Nginx"
@@ -4124,7 +4132,7 @@ msgstr "重启远程 Nginx 错误"
 msgid "Restart Remote Nginx Success"
 msgid "Restart Remote Nginx Success"
 msgstr "重启远程 Nginx 成功"
 msgstr "重启远程 Nginx 成功"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:104
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
 msgid "Restart request failed, please check your network connection"
 msgid "Restart request failed, please check your network connection"
 msgstr "重启请求失败,请检查网络连接"
 msgstr "重启请求失败,请检查网络连接"
 
 
@@ -4568,7 +4576,7 @@ msgstr "共享内存区"
 msgid "Show"
 msgid "Show"
 msgstr "显示"
 msgstr "显示"
 
 
-#: src/views/other/Login.vue:285
+#: src/views/other/Login.vue:289
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "使用 Passkey 登录"
 msgstr "使用 Passkey 登录"
 
 
@@ -4628,6 +4636,10 @@ msgstr "缓存加载器迭代之间的休眠时间"
 msgid "Sleep time between cache manager iterations"
 msgid "Sleep time between cache manager iterations"
 msgstr "缓存管理器迭代之间的休眠时间"
 msgstr "缓存管理器迭代之间的休眠时间"
 
 
+#: src/views/system/About.vue:46
+msgid "Sponsor"
+msgstr "赞助"
+
 #: src/views/certificate/CertificateEditor.vue:211
 #: src/views/certificate/CertificateEditor.vue:211
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "SSL 证书内容"
 msgstr "SSL 证书内容"
@@ -4673,7 +4685,7 @@ msgstr "SSL 密钥路径"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "启用 HTTPS 时需要 SSL 密钥路径"
 msgstr "启用 HTTPS 时需要 SSL 密钥路径"
 
 
-#: src/views/other/Login.vue:242
+#: src/views/other/Login.vue:246
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSO 登录"
 msgstr "SSO 登录"
 
 
@@ -4872,7 +4884,7 @@ msgstr "同步配置错误"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "同步配置成功"
 msgstr "同步配置成功"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:122
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/views/environments/group/EnvGroup.vue:31
 #: src/views/environments/group/EnvGroup.vue:31
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "同步节点"
 msgstr "同步节点"
@@ -5086,7 +5098,7 @@ msgid ""
 "-_./:"
 "-_./:"
 msgstr "此字段应仅包含字母、Unicode字符、数字和 -_./:"
 msgstr "此字段应仅包含字母、Unicode字符、数字和 -_./:"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:155
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5191,10 +5203,14 @@ msgstr ""
 "要使用本地大型模型,可使用 ollama、vllm 或 lmdeploy 进行部署。它们提供了与 OpenAI 兼容的 API 端点,因此只需将 "
 "要使用本地大型模型,可使用 ollama、vllm 或 lmdeploy 进行部署。它们提供了与 OpenAI 兼容的 API 端点,因此只需将 "
 "baseUrl 设置为本地 API 即可。"
 "baseUrl 设置为本地 API 即可。"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:55
+#: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
 msgid "Toggle failed"
 msgstr "切换失败"
 msgstr "切换失败"
 
 
+#: src/constants/errors/user.ts:13
+msgid "Token is empty"
+msgstr "令牌为空"
+
 #: src/views/preference/tabs/OpenAISettings.vue:61
 #: src/views/preference/tabs/OpenAISettings.vue:61
 msgid "Token is not valid"
 msgid "Token is not valid"
 msgstr "Token 无效"
 msgstr "Token 无效"
@@ -5377,7 +5393,7 @@ msgstr "用户未启用 OTP 作为 2FA"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "用户资料"
 msgstr "用户资料"
 
 
-#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:222 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "用户名"
 msgstr "用户名"
@@ -5560,8 +5576,8 @@ msgstr "正在将证书私钥写入磁盘"
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr "正在将证书写入磁盘"
 msgstr "正在将证书写入磁盘"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168
 #: 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:131
 #: src/views/preference/tabs/AuthSettings.vue:131

+ 60 - 44
app/src/language/zh_TW/app.po

@@ -226,7 +226,7 @@ msgstr "進階模式"
 msgid "Afterwards, refresh this page and click add passkey again."
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr "之後,請重新整理此頁面並再次點擊新增通行金鑰。"
 msgstr "之後,請重新整理此頁面並再次點擊新增通行金鑰。"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:115
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
 msgid "All"
 msgid "All"
 msgstr "全部"
 msgstr "全部"
 
 
@@ -303,7 +303,7 @@ msgstr "確定要永久刪除嗎?"
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "您確定要刪除嗎?"
 msgstr "您確定要刪除嗎?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:129
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr "您確定要在以下同步節點上重新載入 Nginx 嗎?"
 msgstr "您確定要在以下同步節點上重新載入 Nginx 嗎?"
 
 
@@ -319,7 +319,7 @@ msgstr "您確定要刪除此項目嗎?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "您確定要刪除此 Location 嗎?"
 msgstr "您確定要刪除此 Location 嗎?"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr "您確定要在以下同步節點上重新啟動 Nginx 嗎?"
 msgstr "您確定要在以下同步節點上重新啟動 Nginx 嗎?"
 
 
@@ -552,7 +552,7 @@ msgstr "以下是您要批次修改的選定項目"
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr "區塊為空"
 msgstr "區塊為空"
 
 
-#: src/views/system/About.vue:55
+#: src/views/system/About.vue:75
 msgid "Build with"
 msgid "Build with"
 msgstr "建構基於"
 msgstr "建構基於"
 
 
@@ -642,7 +642,7 @@ msgstr "無法比較:缺少內容"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "無法刪除受保護的路徑:{0}"
 msgstr "無法刪除受保護的路徑:{0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:154
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "目前狀態無法取得效能資料"
 msgstr "目前狀態無法取得效能資料"
 
 
@@ -1047,7 +1047,7 @@ msgstr "確認新密碼"
 msgid "Connected"
 msgid "Connected"
 msgstr "已連線"
 msgstr "已連線"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:87
+#: src/views/dashboard/NginxDashBoard.vue:100
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "連線錯誤,正在嘗試重新連線..."
 msgstr "連線錯誤,正在嘗試重新連線..."
 
 
@@ -1698,7 +1698,7 @@ msgstr "在 %{node} 上啟用串流 %{name} 失敗"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "在 %{node} 上成功啟用串流 %{name}"
 msgstr "在 %{node} 上成功啟用串流 %{name}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:152
+#: src/views/dashboard/NginxDashBoard.vue:172
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "啟用stub_status模組"
 msgstr "啟用stub_status模組"
 
 
@@ -2281,7 +2281,7 @@ msgstr "產生註冊帳號的私鑰"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "獲取 ACME 用戶錯誤: {0}"
 msgstr "獲取 ACME 用戶錯誤: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:143
+#: src/views/dashboard/NginxDashBoard.vue:163
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "取得資料失敗"
 msgstr "取得資料失敗"
 
 
@@ -2486,6 +2486,10 @@ msgstr "無效的 AES IV 格式:{0}"
 msgid "Invalid AES key format: {0}"
 msgid "Invalid AES key format: {0}"
 msgstr "無效的 AES 金鑰格式:{0}"
 msgstr "無效的 AES 金鑰格式:{0}"
 
 
+#: src/constants/errors/user.ts:14
+msgid "Invalid claims type"
+msgstr "無效的聲明類型"
+
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 #: src/components/SystemRestore/SystemRestoreContent.vue:121
 msgid "Invalid file object"
 msgid "Invalid file object"
 msgstr "無效的檔案物件"
 msgstr "無效的檔案物件"
@@ -2602,7 +2606,7 @@ msgstr "上次備份時間"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "上次檢查時間"
 msgstr "上次檢查時間"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:118
+#: src/views/dashboard/NginxDashBoard.vue:138
 msgid "Last update"
 msgid "Last update"
 msgstr "最後更新時間"
 msgstr "最後更新時間"
 
 
@@ -2639,7 +2643,7 @@ msgstr "不允許使用舊版恢復代碼,因為未啟用 TOTP 功能"
 msgid "Lego disable CNAME Support"
 msgid "Lego disable CNAME Support"
 msgstr "Lego 停用 CNAME 支援"
 msgstr "Lego 停用 CNAME 支援"
 
 
-#: src/views/system/About.vue:63
+#: src/views/system/About.vue:83
 msgid "License"
 msgid "License"
 msgstr "開源授權"
 msgstr "開源授權"
 
 
@@ -2689,12 +2693,12 @@ msgstr "載入器休眠時間"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "載入器門檻值"
 msgstr "載入器門檻值"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:180
+#: src/views/dashboard/NginxDashBoard.vue:200
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "資料載入中…"
 msgstr "資料載入中…"
 
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:71
+#: src/components/NodeSelector/NodeSelector.vue:84
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:74
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/AutoBackup.vue:83
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48
@@ -2731,11 +2735,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "日誌列表"
 msgstr "日誌列表"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:271
 msgid "Login"
 msgid "Login"
 msgstr "登入"
 msgstr "登入"
 
 
-#: src/views/other/Login.vue:76
+#: src/views/other/Login.vue:78
 msgid "Login successful"
 msgid "Login successful"
 msgstr "登入成功"
 msgstr "登入成功"
 
 
@@ -2981,7 +2985,7 @@ msgstr "多行指令"
 msgid "Name"
 msgid "Name"
 msgstr "名稱"
 msgstr "名稱"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:195
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "需要啟用 stub_status 模組"
 msgstr "需要啟用 stub_status 模組"
 
 
@@ -3137,9 +3141,9 @@ msgstr "Nginx 錯誤:{0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:114
-#: src/views/dashboard/NginxDashBoard.vue:133
-#: src/views/dashboard/NginxDashBoard.vue:77
+#: src/views/dashboard/NginxDashBoard.vue:134
+#: src/views/dashboard/NginxDashBoard.vue:153
+#: src/views/dashboard/NginxDashBoard.vue:84
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx 未執行"
 msgstr "Nginx 未執行"
 
 
@@ -3147,7 +3151,7 @@ msgstr "Nginx 未執行"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx 未在另一個容器中運行"
 msgstr "Nginx 未在另一個容器中運行"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx 執行中"
 msgstr "Nginx 執行中"
 
 
@@ -3245,8 +3249,8 @@ msgid "Nginx.conf includes streams-enabled directory"
 msgstr "Nginx.conf 包含 streams-enabled 目錄"
 msgstr "Nginx.conf 包含 streams-enabled 目錄"
 
 
 #: src/components/ChatGPT/ChatMessageInput.vue:17
 #: src/components/ChatGPT/ChatMessageInput.vue:17
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/NgxConfigEditor/LocationEditor.vue:89
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
 #: src/components/Notification/Notification.vue:108 src/language/curd.ts:38
@@ -3263,7 +3267,7 @@ msgstr "取消"
 msgid "No Action"
 msgid "No Action"
 msgstr "無行動"
 msgstr "無行動"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:202
 msgid "No data"
 msgid "No data"
 msgstr "無數據"
 msgstr "無數據"
 
 
@@ -3394,9 +3398,13 @@ msgstr "OCSP 強制裝訂可能會導致部分使用者在首次使用 Firefox 
 msgid "Off"
 msgid "Off"
 msgstr "關"
 msgstr "關"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
+#: src/views/system/About.vue:31
+msgid "Official Document"
+msgstr "官方文件"
+
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
 #: src/components/NgxConfigEditor/NgxUpstream.vue:151
-#: src/components/NodeSelector/NodeSelector.vue:94
+#: src/components/NodeSelector/NodeSelector.vue:107
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/components/ProxyTargets/ProxyTargets.vue:43
 #: src/views/dashboard/Environments.vue:99
 #: src/views/dashboard/Environments.vue:99
 #: src/views/environments/list/envColumns.tsx:55
 #: src/views/environments/list/envColumns.tsx:55
@@ -3428,9 +3436,9 @@ msgstr "開啟"
 msgid "Once the verification is complete, the records will be removed."
 msgid "Once the verification is complete, the records will be removed."
 msgstr "驗證完成後,記錄將被刪除。"
 msgstr "驗證完成後,記錄將被刪除。"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:159
-#: src/components/NodeSelector/NodeSelector.vue:74
-#: src/components/NodeSelector/NodeSelector.vue:88
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185
+#: src/components/NodeSelector/NodeSelector.vue:101
+#: src/components/NodeSelector/NodeSelector.vue:87
 #: src/views/dashboard/Environments.vue:92
 #: src/views/dashboard/Environments.vue:92
 #: src/views/environments/list/envColumns.tsx:51
 #: src/views/environments/list/envColumns.tsx:51
 msgid "Online"
 msgid "Online"
@@ -3448,7 +3456,7 @@ msgstr "開放"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:280
 msgid "Or"
 msgid "Or"
 msgstr "或"
 msgstr "或"
 
 
@@ -3520,7 +3528,7 @@ msgstr ""
 "通行金鑰是 WebAuthn 認證,透過觸控、面部辨識、裝置密碼或 PIN 碼來驗證您的身份。它們可以用作密碼替代品或作為雙重身份驗證 (2FA) "
 "通行金鑰是 WebAuthn 認證,透過觸控、面部辨識、裝置密碼或 PIN 碼來驗證您的身份。它們可以用作密碼替代品或作為雙重身份驗證 (2FA) "
 "方法。"
 "方法。"
 
 
-#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:232 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "密碼"
 msgstr "密碼"
 
 
@@ -3582,7 +3590,7 @@ msgstr "執行核心升級錯誤"
 msgid "Performance"
 msgid "Performance"
 msgstr "效能"
 msgstr "效能"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:187
+#: src/views/dashboard/NginxDashBoard.vue:207
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "效能指標"
 msgstr "效能指標"
 
 
@@ -3606,7 +3614,7 @@ msgstr "PID 路徑不存在"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "純文字為空"
 msgstr "純文字為空"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:176
+#: src/views/dashboard/NginxDashBoard.vue:196
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -3799,7 +3807,7 @@ msgstr "在示範模式中禁止更改 root 密碼"
 msgid "Prohibit deleting the default user"
 msgid "Prohibit deleting the default user"
 msgstr "禁止刪除預設使用者"
 msgstr "禁止刪除預設使用者"
 
 
-#: src/views/system/About.vue:51
+#: src/views/system/About.vue:71
 msgid "Project Team"
 msgid "Project Team"
 msgstr "專案團隊"
 msgstr "專案團隊"
 
 
@@ -3923,7 +3931,7 @@ msgstr "發行公告"
 msgid "Reload"
 msgid "Reload"
 msgstr "重新載入"
 msgstr "重新載入"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:136
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: 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:209
 #: src/views/environments/list/Environment.vue:209
@@ -3951,7 +3959,7 @@ msgstr "重新載入遠端 Nginx 錯誤"
 msgid "Reload Remote Nginx Success"
 msgid "Reload Remote Nginx Success"
 msgstr "遠端 Nginx 重新載入成功"
 msgstr "遠端 Nginx 重新載入成功"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:84
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110
 msgid "Reload request failed, please check your network connection"
 msgid "Reload request failed, please check your network connection"
 msgstr "重新載入請求失敗,請檢查您的網路連線"
 msgstr "重新載入請求失敗,請檢查您的網路連線"
 
 
@@ -4108,7 +4116,7 @@ msgstr "回應"
 msgid "Restart"
 msgid "Restart"
 msgstr "重新啟動"
 msgstr "重新啟動"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:230
 #: src/views/environments/list/Environment.vue:238
 #: src/views/environments/list/Environment.vue:238
 msgid "Restart Nginx"
 msgid "Restart Nginx"
@@ -4130,7 +4138,7 @@ msgstr "遠端 Nginx 重啟錯誤"
 msgid "Restart Remote Nginx Success"
 msgid "Restart Remote Nginx Success"
 msgstr "遠端 Nginx 重啟成功"
 msgstr "遠端 Nginx 重啟成功"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:104
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
 msgid "Restart request failed, please check your network connection"
 msgid "Restart request failed, please check your network connection"
 msgstr "重新啟動請求失敗,請檢查您的網路連線"
 msgstr "重新啟動請求失敗,請檢查您的網路連線"
 
 
@@ -4574,7 +4582,7 @@ msgstr "共享記憶體區域"
 msgid "Show"
 msgid "Show"
 msgstr "顯示"
 msgstr "顯示"
 
 
-#: src/views/other/Login.vue:285
+#: src/views/other/Login.vue:289
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "使用通行金鑰登入"
 msgstr "使用通行金鑰登入"
 
 
@@ -4634,6 +4642,10 @@ msgstr "快取載入器迭代間的休眠時間"
 msgid "Sleep time between cache manager iterations"
 msgid "Sleep time between cache manager iterations"
 msgstr "快取管理器迭代間的休眠時間"
 msgstr "快取管理器迭代間的休眠時間"
 
 
+#: src/views/system/About.vue:46
+msgid "Sponsor"
+msgstr "贊助"
+
 #: src/views/certificate/CertificateEditor.vue:211
 #: src/views/certificate/CertificateEditor.vue:211
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "SSL 憑證內容"
 msgstr "SSL 憑證內容"
@@ -4679,7 +4691,7 @@ msgstr "SSL 金鑰路徑"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "啟用 HTTPS 時必須提供 SSL 金鑰路徑"
 msgstr "啟用 HTTPS 時必須提供 SSL 金鑰路徑"
 
 
-#: src/views/other/Login.vue:242
+#: src/views/other/Login.vue:246
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSO 登入"
 msgstr "SSO 登入"
 
 
@@ -4878,7 +4890,7 @@ msgstr "同步設定錯誤"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "同步設定成功"
 msgstr "同步設定成功"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:122
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148
 #: src/views/environments/group/EnvGroup.vue:31
 #: src/views/environments/group/EnvGroup.vue:31
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "同步節點"
 msgstr "同步節點"
@@ -5092,7 +5104,7 @@ msgid ""
 "-_./:"
 "-_./:"
 msgstr "此欄位應僅包含字母、Unicode字符、數字和 -_./:"
 msgstr "此欄位應僅包含字母、Unicode字符、數字和 -_./:"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:155
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5197,10 +5209,14 @@ msgstr ""
 "要使用本機大型語言模型,請使用 ollama、vllm 或 lmdeploy 部署。它們提供與 OpenAI 相容的 API 端點,因此只需將 "
 "要使用本機大型語言模型,請使用 ollama、vllm 或 lmdeploy 部署。它們提供與 OpenAI 相容的 API 端點,因此只需將 "
 "baseUrl 設定為您的本機 API。"
 "baseUrl 設定為您的本機 API。"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:55
+#: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
 msgid "Toggle failed"
 msgstr "切換失敗"
 msgstr "切換失敗"
 
 
+#: src/constants/errors/user.ts:13
+msgid "Token is empty"
+msgstr "令牌為空"
+
 #: src/views/preference/tabs/OpenAISettings.vue:61
 #: src/views/preference/tabs/OpenAISettings.vue:61
 msgid "Token is not valid"
 msgid "Token is not valid"
 msgstr "令牌無效"
 msgstr "令牌無效"
@@ -5383,7 +5399,7 @@ msgstr "使用者未啟用 OTP 作為雙重身份驗證 (2FA)"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "用戶資料"
 msgstr "用戶資料"
 
 
-#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:222 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "使用者名稱"
 msgstr "使用者名稱"
@@ -5566,8 +5582,8 @@ msgstr "將憑證私鑰寫入磁碟"
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr "將憑證寫入磁碟"
 msgstr "將憑證寫入磁碟"
 
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:142
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168
 #: 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:131
 #: src/views/preference/tabs/AuthSettings.vue:131

+ 23 - 3
app/src/views/system/About.vue

@@ -26,6 +26,11 @@ const thisYear = new Date().getFullYear()
     <h2>Nginx UI</h2>
     <h2>Nginx UI</h2>
     <p>Yet another WebUI for Nginx</p>
     <p>Yet another WebUI for Nginx</p>
     <p>Version: {{ ver.version }} ({{ ver.total_build || $gettext('Development Mode') }})</p>
     <p>Version: {{ ver.version }} ({{ ver.total_build || $gettext('Development Mode') }})</p>
+    <p>
+      <a href="https://nginxui.com" target="_blank" rel="noopener noreferrer">
+        {{ $gettext('Official Document') }}
+      </a>
+    </p>
     <div class="mb-2">
     <div class="mb-2">
       <GithubButton
       <GithubButton
         href="https://github.com/0xJacky/nginx-ui"
         href="https://github.com/0xJacky/nginx-ui"
@@ -37,7 +42,10 @@ const thisYear = new Date().getFullYear()
         Star
         Star
       </GithubButton>
       </GithubButton>
     </div>
     </div>
-    <div class="mb-2">
+    <h3 class="mb-4">
+      {{ $gettext('Sponsor') }}
+    </h3>
+    <div class="mb-4">
       <GithubButton
       <GithubButton
         href="https://github.com/sponsors/nginxui"
         href="https://github.com/sponsors/nginxui"
         data-color-scheme="no-preference: light; light: light; dark: dark;"
         data-color-scheme="no-preference: light; light: light; dark: dark;"
@@ -47,7 +55,19 @@ const thisYear = new Date().getFullYear()
         Sponsor
         Sponsor
       </GithubButton>
       </GithubButton>
     </div>
     </div>
-    <h3>
+    <div class="mb-4">
+      <a
+        href="https://afdian.com/a/nginxui"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <img
+          src="https://img.shields.io/badge/爱发电-Support-946ce6?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyIDJMMTMuMDkgOC4yNkwyMCA5TDEzLjA5IDE1Ljc0TDEyIDIyTDEwLjkxIDE1Ljc0TDQgOUwxMC45MSA4LjI2TDEyIDJaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K"
+          alt="Support on Afdian"
+        >
+      </a>
+    </div>
+    <h3 class="mb-4">
       {{ $gettext('Project Team') }}
       {{ $gettext('Project Team') }}
     </h3>
     </h3>
     <p><a href="https://jackyu.cn/">@0xJacky</a> <a href="https://blog.kugeek.com/">@Hintay</a> <a href="https://github.com/akinoccc">@Akino</a></p>
     <p><a href="https://jackyu.cn/">@0xJacky</a> <a href="https://blog.kugeek.com/">@Hintay</a> <a href="https://github.com/akinoccc">@Akino</a></p>
@@ -62,7 +82,7 @@ const thisYear = new Date().getFullYear()
     <h3>
     <h3>
       {{ $gettext('License') }}
       {{ $gettext('License') }}
     </h3>
     </h3>
-    <p>GNU General Public License v3.0</p>
+    <p>GNU Affero General Public License v3.0</p>
     <p>Copyright © 2021 - {{ thisYear }} Nginx UI Team</p>
     <p>Copyright © 2021 - {{ thisYear }} Nginx UI Team</p>
   </ACard>
   </ACard>
 </template>
 </template>