From aedf631254c1ae9be67e00235226892988e7a6c4 Mon Sep 17 00:00:00 2001 From: Hintay Date: Fri, 7 Feb 2025 21:05:17 +0900 Subject: [PATCH 01/12] refactor(otp): generate enroll QR code in front-end --- api/user/otp.go | 29 ++-------- app/components.d.ts | 1 + app/src/api/otp.ts | 2 +- app/src/views/preference/components/TOTP.vue | 59 ++++++++++---------- 4 files changed, 36 insertions(+), 55 deletions(-) diff --git a/api/user/otp.go b/api/user/otp.go index 108a5f4a2..66071ea6e 100644 --- a/api/user/otp.go +++ b/api/user/otp.go @@ -3,9 +3,11 @@ package user import ( "bytes" "crypto/sha1" - "encoding/base64" "encoding/hex" "fmt" + "net/http" + "strings" + "github.com/0xJacky/Nginx-UI/api" "github.com/0xJacky/Nginx-UI/internal/crypto" "github.com/0xJacky/Nginx-UI/query" @@ -14,9 +16,6 @@ import ( "github.com/pquerna/otp" "github.com/pquerna/otp/totp" "github.com/uozi-tech/cosy" - "image/jpeg" - "net/http" - "strings" ) func GenerateTOTP(c *gin.Context) { @@ -38,27 +37,9 @@ func GenerateTOTP(c *gin.Context) { return } - qrCode, err := otpKey.Image(512, 512) - if err != nil { - api.ErrHandler(c, err) - return - } - - // Encode the image to a buffer - var buf []byte - buffer := bytes.NewBuffer(buf) - err = jpeg.Encode(buffer, qrCode, nil) - if err != nil { - fmt.Println("Error encoding image:", err) - return - } - - // Convert the buffer to a base64 string - base64Str := "data:image/jpeg;base64," + base64.StdEncoding.EncodeToString(buffer.Bytes()) - c.JSON(http.StatusOK, gin.H{ - "secret": otpKey.Secret(), - "qr_code": base64Str, + "secret": otpKey.Secret(), + "url": otpKey.URL(), }) } diff --git a/app/components.d.ts b/app/components.d.ts index 644e4f401..7defeaea6 100644 --- a/app/components.d.ts +++ b/app/components.d.ts @@ -49,6 +49,7 @@ declare module 'vue' { APopconfirm: typeof import('ant-design-vue/es')['Popconfirm'] APopover: typeof import('ant-design-vue/es')['Popover'] AProgress: typeof import('ant-design-vue/es')['Progress'] + AQrcode: typeof import('ant-design-vue/es')['QRCode'] ARadioButton: typeof import('ant-design-vue/es')['RadioButton'] ARadioGroup: typeof import('ant-design-vue/es')['RadioGroup'] AResult: typeof import('ant-design-vue/es')['Result'] diff --git a/app/src/api/otp.ts b/app/src/api/otp.ts index 75672a0b5..0bbe2c63b 100644 --- a/app/src/api/otp.ts +++ b/app/src/api/otp.ts @@ -2,7 +2,7 @@ import http from '@/lib/http' export interface OTPGenerateSecretResponse { secret: string - qr_code: string + url: string } const otp = { diff --git a/app/src/views/preference/components/TOTP.vue b/app/src/views/preference/components/TOTP.vue index 36a1cbbab..b8d551416 100644 --- a/app/src/views/preference/components/TOTP.vue +++ b/app/src/views/preference/components/TOTP.vue @@ -10,7 +10,7 @@ import { message } from 'ant-design-vue' const status = ref(false) const enrolling = ref(false) const resetting = ref(false) -const qrCode = ref('') +const generatedUrl = ref('') const secret = ref('') const passcode = ref('') const refOtp = useTemplateRef('refOtp') @@ -25,7 +25,7 @@ function clickEnable2FA() { function generateSecret() { otp.generate_secret().then(r => { secret.value = r.secret - qrCode.value = r.qr_code + generatedUrl.value = r.url refOtp.value?.clearInput() }) } @@ -70,9 +70,7 @@ function reset2FA() {

{{ $gettext('TOTP is a two-factor authentication method that uses a time-based one-time password algorithm.') }}

{{ $gettext('To enable it, you need to install the Google or Microsoft Authenticator app on your mobile phone.') }}

{{ $gettext('Scan the QR code with your mobile phone to add the account to the app.') }}

-

- {{ $gettext('Current account is not enabled TOTP.') }} -

+

{{ $gettext('Current account is enabled TOTP.') }}

@@ -112,33 +110,34 @@ function reset2FA() { From 3738bebca7420f735087b5820b18e43877e73c54 Mon Sep 17 00:00:00 2001 From: Hintay Date: Fri, 7 Feb 2025 23:09:48 +0900 Subject: [PATCH 02/12] refactor(otp): styles for TOTP settings --- app/src/language/ar/app.po | 162 +++++++------ app/src/language/en/app.po | 229 +++++++++++-------- app/src/language/es/app.po | 163 +++++++------ app/src/language/fr_FR/app.po | 181 ++++++++------- app/src/language/ko_KR/app.po | 169 +++++++------- app/src/language/messages.pot | 128 ++++++----- app/src/language/ru_RU/app.po | 186 ++++++++------- app/src/language/tr_TR/app.po | 157 +++++++------ app/src/language/vi_VN/app.po | 200 +++++++++------- app/src/language/zh_CN/app.po | 133 ++++++----- app/src/language/zh_TW/app.po | 177 +++++++------- app/src/views/preference/components/TOTP.vue | 18 +- 12 files changed, 1037 insertions(+), 866 deletions(-) diff --git a/app/src/language/ar/app.po b/app/src/language/ar/app.po index 62f115370..848324cc7 100644 --- a/app/src/language/ar/app.po +++ b/app/src/language/ar/app.po @@ -71,8 +71,8 @@ msgstr "إضافة تكوين" msgid "Add Directive Below" msgstr "أضف التوجيه أدناه" -#: src/views/site/ngx_conf/LocationEditor.vue:132 -#: src/views/site/ngx_conf/LocationEditor.vue:159 +#: src/views/site/ngx_conf/LocationEditor.vue:130 +#: src/views/site/ngx_conf/LocationEditor.vue:157 msgid "Add Location" msgstr "أضف مكان" @@ -187,7 +187,7 @@ msgstr "هل أنت متأكد أنك تريد إزالة هذا التوجيه msgid "Are you sure you want to remove this item?" msgstr "هل أنت متأكد أنك تريد إزالة هذا العنصر؟" -#: src/views/site/ngx_conf/LocationEditor.vue:88 +#: src/views/site/ngx_conf/LocationEditor.vue:86 msgid "Are you sure you want to remove this location?" msgstr "هل أنت متأكد أنك تريد إزالة هذا المكان؟" @@ -315,10 +315,6 @@ msgstr "مجلد سلطة التصديق" msgid "CADir" msgstr "مجلد سلطة التصديق" -#: src/views/preference/components/TOTP.vue:145 -msgid "Can't scan? Use text key binding" -msgstr "لا يمكن المسح؟ استخدم ربط مفتاح النص" - #: src/components/ChatGPT/ChatGPT.vue:356 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187 @@ -372,7 +368,7 @@ msgid "Certificate Renewal Interval" msgstr "الفاصل الزمني لتجديد الشهادة" #: src/views/certificate/CertificateEditor.vue:128 -#: src/views/site/cert/Cert.vue:32 +#: src/views/site/cert/Cert.vue:33 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "صفر" @@ -400,7 +396,7 @@ msgstr "طريقة التحدي" msgid "Change Certificate" msgstr "تغيير الشهادة" -#: src/views/site/cert/Cert.vue:51 +#: src/views/site/cert/Cert.vue:52 msgid "Changed Certificate" msgid_plural "Changed Certificates" msgstr[0] "صفر" @@ -461,13 +457,17 @@ msgstr "مسح" msgid "Cleared successfully" msgstr "تم المسح بنجاح" +#: src/views/preference/components/TOTP.vue:125 +msgid "Click to copy" +msgstr "" + #: src/views/preference/LogrotateSettings.vue:22 msgid "Command" msgstr "أمر" #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:113 -#: src/views/site/ngx_conf/LocationEditor.vue:105 -#: src/views/site/ngx_conf/LocationEditor.vue:136 +#: src/views/site/ngx_conf/LocationEditor.vue:103 +#: src/views/site/ngx_conf/LocationEditor.vue:134 #: src/views/site/ngx_conf/NgxServer.vue:134 msgid "Comments" msgstr "تعليقات" @@ -501,8 +501,8 @@ msgid "Connection lost, please refresh the page." msgstr "تم فقدان الاتصال، يرجى تحديث الصفحة." #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:118 -#: src/views/site/ngx_conf/LocationEditor.vue:117 -#: src/views/site/ngx_conf/LocationEditor.vue:145 +#: src/views/site/ngx_conf/LocationEditor.vue:115 +#: src/views/site/ngx_conf/LocationEditor.vue:143 msgid "Content" msgstr "محتوى" @@ -519,11 +519,11 @@ msgstr "نسخ" msgid "Core Upgrade" msgstr "ترقية نواة" -#: src/views/dashboard/ServerAnalytic.vue:305 +#: src/views/dashboard/ServerAnalytic.vue:301 msgid "CPU Status" msgstr "حالة CPU" -#: src/views/dashboard/ServerAnalytic.vue:199 +#: src/views/dashboard/ServerAnalytic.vue:195 msgid "CPU:" msgstr "CPU:" @@ -565,11 +565,11 @@ msgstr "بيان الاعتماد" msgid "Credentials" msgstr "بيانات الاعتماد" -#: src/views/preference/components/TOTP.vue:93 +#: src/views/preference/components/TOTP.vue:75 msgid "Current account is enabled TOTP." msgstr "TOTP مفعل للحساب الحالي." -#: src/views/preference/components/TOTP.vue:90 +#: src/views/preference/components/TOTP.vue:73 msgid "Current account is not enabled TOTP." msgstr "TOTP معطل للحساب الحالي." @@ -731,7 +731,7 @@ msgstr "معطل" msgid "Disabled successfully" msgstr "تم التعطيل بنجاح" -#: src/views/dashboard/ServerAnalytic.vue:370 +#: src/views/dashboard/ServerAnalytic.vue:366 msgid "Disk IO" msgstr "إدخال/إخراج القرص" @@ -906,7 +906,7 @@ msgstr "فشل تفعيل %{conf_name} في %{node_name}" msgid "Enable %{conf_name} in %{node_name} successfully" msgstr "تم تفعيل %{conf_name} في %{node_name} بنجاح" -#: src/views/preference/components/TOTP.vue:52 +#: src/views/preference/components/TOTP.vue:38 msgid "Enable 2FA successfully" msgstr "تم تفعيل المصادقة الثنائية بنجاح" @@ -942,7 +942,7 @@ msgstr "تم التفعيل بنجاح" msgid "Enable TLS" msgstr "تفعيل TLS" -#: src/views/preference/components/TOTP.vue:119 +#: src/views/preference/components/TOTP.vue:101 msgid "Enable TOTP" msgstr "تفعيل TOTP" @@ -976,7 +976,7 @@ msgid "Environment variables cleaned" msgstr "تم تنظيف متغيرات البيئة" #: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83 -#: src/views/environment/Environment.vue:33 +#: src/views/environment/Environment.vue:43 msgid "Environments" msgstr "البيئات" @@ -1038,8 +1038,9 @@ msgid "Failed to parse nginx.conf" msgstr "" #: src/constants/errors/self_check.ts:3 +#, fuzzy msgid "Failed to read nginx.conf" -msgstr "" +msgstr "فشل في التفعيل %{msg}" #: src/views/site/site_edit/SiteEdit.vue:135 #: src/views/stream/StreamEdit.vue:122 @@ -1157,7 +1158,7 @@ msgstr "" "إذا وصل عدد محاولات تسجيل الدخول الفاشلة من عنوان IP إلى الحد الأقصى " "للمحاولات في حد دقائق الحظر، سيتم حظر عنوان IP لفترة من الوقت." -#: src/views/preference/components/TOTP.vue:105 +#: src/views/preference/components/TOTP.vue:87 msgid "" "If you lose your mobile phone, you can use the recovery code to reset your " "2FA." @@ -1198,12 +1199,12 @@ msgstr "خطأ في ترقية النواة الأولية" msgid "Initialing core upgrader" msgstr "بدء ترقية النواة" -#: src/views/preference/components/TOTP.vue:152 +#: src/views/preference/components/TOTP.vue:134 msgid "Input the code from the app:" msgstr "أدخل الرمز من التطبيق:" #: src/components/TwoFA/Authorization.vue:82 -#: src/views/preference/components/TOTP.vue:165 +#: src/views/preference/components/TOTP.vue:148 msgid "Input the recovery code:" msgstr "أدخل رمز الاسترداد:" @@ -1321,15 +1322,15 @@ msgstr "ابدأ الرابط" msgid "List" msgstr "قائمة" -#: src/views/dashboard/ServerAnalytic.vue:187 +#: src/views/dashboard/ServerAnalytic.vue:183 msgid "Load Average:" msgstr "متوسط التحميل:" -#: src/views/environment/Environment.vue:39 +#: src/views/environment/Environment.vue:49 msgid "Load from settings" msgstr "تحميل من الإعدادات" -#: src/views/environment/Environment.vue:13 +#: src/views/environment/Environment.vue:17 msgid "Load successfully" msgstr "تم التحميل بنجاح" @@ -1338,7 +1339,7 @@ msgstr "تم التحميل بنجاح" msgid "Local" msgstr "محلي" -#: src/views/site/ngx_conf/LocationEditor.vue:69 +#: src/views/site/ngx_conf/LocationEditor.vue:68 msgid "Location" msgstr "مكان" @@ -1415,12 +1416,12 @@ msgstr "شهادة مُدارة" msgid "Max Attempts" msgstr "الحد الأقصى للمحاولات" -#: src/views/dashboard/ServerAnalytic.vue:226 -#: src/views/dashboard/ServerAnalytic.vue:227 +#: src/views/dashboard/ServerAnalytic.vue:222 +#: src/views/dashboard/ServerAnalytic.vue:223 msgid "Memory" msgstr "ذاكرة" -#: src/views/dashboard/ServerAnalytic.vue:216 +#: src/views/dashboard/ServerAnalytic.vue:212 msgid "Memory and Storage" msgstr "الذاكرة والتخزين" @@ -1474,19 +1475,19 @@ msgstr "توجيه متعدد الأسطر" msgid "Name" msgstr "اسم" -#: src/views/dashboard/ServerAnalytic.vue:331 +#: src/views/dashboard/ServerAnalytic.vue:327 msgid "Network" msgstr "شبكة" -#: src/views/dashboard/ServerAnalytic.vue:273 +#: src/views/dashboard/ServerAnalytic.vue:269 msgid "Network Statistics" msgstr "إحصائيات الشبكة" -#: src/views/dashboard/ServerAnalytic.vue:280 +#: src/views/dashboard/ServerAnalytic.vue:276 msgid "Network Total Receive" msgstr "إجمالي استقبال الشبكة" -#: src/views/dashboard/ServerAnalytic.vue:286 +#: src/views/dashboard/ServerAnalytic.vue:282 msgid "Network Total Send" msgstr "إجمالي إرسال الشبكة" @@ -1600,7 +1601,7 @@ msgstr "تم إعادة تشغيل Nginx بنجاح" #: src/views/preference/AuthSettings.vue:136 #: src/views/preference/CertSettings.vue:70 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97 -#: src/views/site/ngx_conf/LocationEditor.vue:90 +#: src/views/site/ngx_conf/LocationEditor.vue:88 #: src/views/site/site_list/SiteList.vue:143 #: src/views/stream/StreamList.vue:163 msgid "No" @@ -1716,6 +1717,10 @@ msgstr "أوبن أي آي" msgid "Or" msgstr "أو" +#: src/views/preference/components/TOTP.vue:127 +msgid "Or enter the secret: %{secret}" +msgstr "" + #: src/views/config/components/Rename.vue:68 msgid "Original name" msgstr "الاسم الأصلي" @@ -1724,7 +1729,7 @@ msgstr "الاسم الأصلي" msgid "OS" msgstr "نظام التشغيل" -#: src/views/dashboard/ServerAnalytic.vue:193 +#: src/views/dashboard/ServerAnalytic.vue:189 msgid "OS:" msgstr "نظام التشغيل:" @@ -1779,8 +1784,8 @@ msgid "Password length cannot exceed 20 characters" msgstr "" #: src/views/config/ConfigEditor.vue:263 -#: src/views/site/ngx_conf/LocationEditor.vue:111 -#: src/views/site/ngx_conf/LocationEditor.vue:139 +#: src/views/site/ngx_conf/LocationEditor.vue:109 +#: src/views/site/ngx_conf/LocationEditor.vue:137 msgid "Path" msgstr "مسار" @@ -1875,7 +1880,7 @@ msgid "" "Please note that the unit of time configurations below are all in seconds." msgstr "يرجى ملاحظة أن تكوين وحدات الوقت أدناه كلها بالثواني." -#: src/views/environment/Environment.vue:48 +#: src/views/environment/Environment.vue:58 msgid "Please select at least one node to upgrade" msgstr "يرجى اختيار عقدة واحدة على الأقل للترقية" @@ -1932,11 +1937,11 @@ msgid "Public Security Number" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:387 +#: src/views/dashboard/ServerAnalytic.vue:383 msgid "Reads" msgstr "يقرأ" -#: src/views/dashboard/ServerAnalytic.vue:338 +#: src/views/dashboard/ServerAnalytic.vue:334 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "يستقبل" @@ -1955,15 +1960,15 @@ msgid "Recovered Successfully" msgstr "تم الاسترداد بنجاح" #: src/components/TwoFA/Authorization.vue:89 -#: src/views/preference/components/TOTP.vue:172 +#: src/views/preference/components/TOTP.vue:155 msgid "Recovery" msgstr "استرداد" -#: src/views/preference/components/TOTP.vue:98 +#: src/views/preference/components/TOTP.vue:80 msgid "Recovery Code" msgstr "رمز الاسترداد" -#: src/views/preference/components/TOTP.vue:107 +#: src/views/preference/components/TOTP.vue:89 msgid "Recovery Code:" msgstr "رمز الاسترداد:" @@ -2063,8 +2068,8 @@ msgstr "إعادة تسمية" msgid "" "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: %{resp}" msgstr "" -"فشل إعادة تسمية %{orig_path} إلى %{new_path} على %{env_name}، الاستجابة: %" -"{resp}" +"فشل إعادة تسمية %{orig_path} إلى %{new_path} على %{env_name}، الاستجابة: " +"%{resp}" #: src/components/Notification/config.ts:20 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully" @@ -2089,8 +2094,8 @@ msgstr "تم إعادة تسمية الموقع البعيد بنجاح" #: src/components/Notification/config.ts:95 msgid "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}" msgstr "" -"خطأ في إعادة تسمية الموقع %{site} إلى %{new_site} على %{node}، الاستجابة: %" -"{resp}" +"خطأ في إعادة تسمية الموقع %{site} إلى %{new_site} على %{node}، الاستجابة: " +"%{resp}" #: src/components/Notification/config.ts:87 msgid "Rename Site %{site} to %{new_site} on %{node} successfully" @@ -2131,7 +2136,7 @@ msgstr "تم الطلب باستخدام عوامل خاطئة" msgid "Reset" msgstr "إعادة تعيين" -#: src/views/preference/components/TOTP.vue:127 +#: src/views/preference/components/TOTP.vue:109 msgid "Reset 2FA" msgstr "إعادة تعيين التحقق بخطوتين" @@ -2218,7 +2223,7 @@ msgstr "تم الحفظ بنجاح" msgid "Saved successfully" msgstr "تم الحفظ بنجاح" -#: src/views/preference/components/TOTP.vue:88 +#: src/views/preference/components/TOTP.vue:72 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "امسح رمز الاستجابة السريعة بهاتفك المحمول لإضافة الحساب إلى التطبيق." @@ -2226,7 +2231,7 @@ msgstr "امسح رمز الاستجابة السريعة بهاتفك المح msgid "SDK" msgstr "حزمة تطوير البرمجيات SDK" -#: src/views/preference/components/TOTP.vue:144 +#: src/views/preference/components/TOTP.vue:124 msgid "Secret has been copied" msgstr "تم نسخ السر" @@ -2238,12 +2243,12 @@ msgstr "المحدد" msgid "Self Check" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:348 +#: src/views/dashboard/ServerAnalytic.vue:344 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Send" msgstr "إرسال" -#: src/views/dashboard/ServerAnalytic.vue:179 +#: src/views/dashboard/ServerAnalytic.vue:175 msgid "Server Info" msgstr "معلومات الخادم" @@ -2260,8 +2265,9 @@ msgid "ServerIdx out of range" msgstr "" #: src/constants/errors/user.ts:11 +#, fuzzy msgid "Session not found" -msgstr "" +msgstr "لم يتم العثور على الملف" #: src/views/preference/CertSettings.vue:33 msgid "" @@ -2285,14 +2291,14 @@ msgstr "تعيين موفر تحدي HTTP01" #: src/constants/errors/nginx_log.ts:8 msgid "" -"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/constants/errors/nginx_log.ts:7 msgid "" -"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/components/SensitiveString/SensitiveString.vue:40 @@ -2335,12 +2341,14 @@ msgid "Sites List" msgstr "قائمة المواقع" #: src/constants/errors/self_check.ts:10 +#, fuzzy msgid "Sites-available directory not exist" -msgstr "" +msgstr "مجلد" #: src/constants/errors/self_check.ts:11 +#, fuzzy msgid "Sites-enabled directory not exist" -msgstr "" +msgstr "مجلد" #: src/views/certificate/CertificateEditor.vue:211 msgid "SSL Certificate Content" @@ -2379,8 +2387,8 @@ msgstr "الحالة" msgid "Stopped" msgstr "متوقف" -#: src/views/dashboard/ServerAnalytic.vue:254 -#: src/views/dashboard/ServerAnalytic.vue:255 +#: src/views/dashboard/ServerAnalytic.vue:250 +#: src/views/dashboard/ServerAnalytic.vue:251 msgid "Storage" msgstr "تخزين" @@ -2390,8 +2398,9 @@ msgid "Streams Directory" msgstr "مجلد" #: src/constants/errors/self_check.ts:12 +#, fuzzy msgid "Streams-available directory not exist" -msgstr "" +msgstr "مجلد" #: src/constants/errors/self_check.ts:13 #, fuzzy @@ -2410,8 +2419,8 @@ msgid "" "guide/nginx-proxy-example.html" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:240 -#: src/views/dashboard/ServerAnalytic.vue:241 +#: src/views/dashboard/ServerAnalytic.vue:236 +#: src/views/dashboard/ServerAnalytic.vue:237 msgid "Swap" msgstr "تبديل" @@ -2581,7 +2590,7 @@ msgstr "" "يجب أن يحتوي اسم العقدة على حروف وأحرف يونيكود وأرقام وشرطات وعلامات وصل " "ونقاط فقط." -#: src/views/preference/components/TOTP.vue:106 +#: src/views/preference/components/TOTP.vue:88 msgid "" "The recovery code is only displayed once, please save it in a safe place." msgstr "رمز الاسترداد يُعرض مرة واحدة فقط، يرجى حفظه في مكان آمن." @@ -2672,7 +2681,7 @@ msgstr "نصائح" msgid "Title" msgstr "عنوان" -#: src/views/preference/components/TOTP.vue:87 +#: src/views/preference/components/TOTP.vue:71 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -2725,11 +2734,11 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: src/views/preference/components/TOTP.vue:85 +#: src/views/preference/components/TOTP.vue:69 msgid "TOTP" msgstr "كلمة مرور لمرة واحدة تعتمد على الوقت" -#: src/views/preference/components/TOTP.vue:86 +#: src/views/preference/components/TOTP.vue:70 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -2770,7 +2779,7 @@ msgstr "محدث في" msgid "Updated successfully" msgstr "تم التحديث بنجاح" -#: src/routes/index.ts:297 src/views/environment/Environment.vue:56 +#: src/routes/index.ts:297 src/views/environment/Environment.vue:66 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226 msgid "Upgrade" msgstr "ترقية" @@ -2791,7 +2800,7 @@ msgstr "جارٍ ترقية Nginx UI، يرجى الانتظار..." msgid "Upstream Name" msgstr "اسم المنبع" -#: src/views/dashboard/ServerAnalytic.vue:183 +#: src/views/dashboard/ServerAnalytic.vue:179 msgid "Uptime:" msgstr "مدة التشغيل:" @@ -2903,7 +2912,7 @@ msgstr "" "الموقع والعقد المحددة أدناه." #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:377 +#: src/views/dashboard/ServerAnalytic.vue:373 msgid "Writes" msgstr "يكتب" @@ -2918,7 +2927,7 @@ msgstr "كتابة الشهادة إلى القرص" #: src/views/preference/AuthSettings.vue:135 #: src/views/preference/CertSettings.vue:69 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96 -#: src/views/site/ngx_conf/LocationEditor.vue:89 +#: src/views/site/ngx_conf/LocationEditor.vue:87 msgid "Yes" msgstr "نعم" @@ -2940,6 +2949,9 @@ msgstr "لم تقم بتكوين إعدادات Webauthn، لذا لا يمكن msgid "Your passkeys" msgstr "مفاتيح المرور الخاصة بك" +#~ msgid "Can't scan? Use text key binding" +#~ msgstr "لا يمكن المسح؟ استخدم ربط مفتاح النص" + #~ msgid "Directory" #~ msgstr "مجلد" diff --git a/app/src/language/en/app.po b/app/src/language/en/app.po index 9e498ea40..04a81dbf4 100644 --- a/app/src/language/en/app.po +++ b/app/src/language/en/app.po @@ -22,8 +22,9 @@ msgid "About" msgstr "About" #: src/routes/index.ts:210 src/views/site/ngx_conf/LogEntry.vue:75 +#, fuzzy msgid "Access Logs" -msgstr "" +msgstr "Sites List" #: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:113 #: src/views/certificate/ACMEUserSelector.vue:85 @@ -69,8 +70,8 @@ msgstr "Edit Configuration" msgid "Add Directive Below" msgstr "Add Directive Below" -#: src/views/site/ngx_conf/LocationEditor.vue:132 -#: src/views/site/ngx_conf/LocationEditor.vue:159 +#: src/views/site/ngx_conf/LocationEditor.vue:130 +#: src/views/site/ngx_conf/LocationEditor.vue:157 msgid "Add Location" msgstr "Add Location" @@ -112,8 +113,9 @@ msgid "API Base Url" msgstr "" #: src/views/certificate/DNSChallenge.vue:83 +#, fuzzy msgid "API Document" -msgstr "" +msgstr "Comments" #: src/views/preference/OpenAISettings.vue:57 msgid "API Proxy" @@ -196,7 +198,7 @@ msgstr "Are you sure you want to remove this directive?" msgid "Are you sure you want to remove this item?" msgstr "Are you sure you want to remove this directive?" -#: src/views/site/ngx_conf/LocationEditor.vue:88 +#: src/views/site/ngx_conf/LocationEditor.vue:86 #, fuzzy msgid "Are you sure you want to remove this location?" msgstr "Are you sure you want to remove this directive?" @@ -327,10 +329,6 @@ msgstr "" msgid "CADir" msgstr "" -#: src/views/preference/components/TOTP.vue:145 -msgid "Can't scan? Use text key binding" -msgstr "" - #: src/components/ChatGPT/ChatGPT.vue:356 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187 @@ -383,7 +381,7 @@ msgid "Certificate Renewal Interval" msgstr "Certificate is valid" #: src/views/certificate/CertificateEditor.vue:128 -#: src/views/site/cert/Cert.vue:32 +#: src/views/site/cert/Cert.vue:33 #, fuzzy msgid "Certificate Status" msgid_plural "Certificates Status" @@ -411,7 +409,7 @@ msgstr "" msgid "Change Certificate" msgstr "Certificate is valid" -#: src/views/site/cert/Cert.vue:51 +#: src/views/site/cert/Cert.vue:52 #, fuzzy msgid "Changed Certificate" msgid_plural "Changed Certificates" @@ -471,14 +469,18 @@ msgstr "" msgid "Cleared successfully" msgstr "Disabled successfully" +#: src/views/preference/components/TOTP.vue:125 +msgid "Click to copy" +msgstr "" + #: src/views/preference/LogrotateSettings.vue:22 #, fuzzy msgid "Command" msgstr "Comments" #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:113 -#: src/views/site/ngx_conf/LocationEditor.vue:105 -#: src/views/site/ngx_conf/LocationEditor.vue:136 +#: src/views/site/ngx_conf/LocationEditor.vue:103 +#: src/views/site/ngx_conf/LocationEditor.vue:134 #: src/views/site/ngx_conf/NgxServer.vue:134 msgid "Comments" msgstr "Comments" @@ -513,8 +515,8 @@ msgid "Connection lost, please refresh the page." msgstr "" #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:118 -#: src/views/site/ngx_conf/LocationEditor.vue:117 -#: src/views/site/ngx_conf/LocationEditor.vue:145 +#: src/views/site/ngx_conf/LocationEditor.vue:115 +#: src/views/site/ngx_conf/LocationEditor.vue:143 msgid "Content" msgstr "Content" @@ -531,11 +533,11 @@ msgstr "" msgid "Core Upgrade" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:305 +#: src/views/dashboard/ServerAnalytic.vue:301 msgid "CPU Status" msgstr "CPU Status" -#: src/views/dashboard/ServerAnalytic.vue:199 +#: src/views/dashboard/ServerAnalytic.vue:195 msgid "CPU:" msgstr "CPU:" @@ -581,11 +583,11 @@ msgstr "" msgid "Credentials" msgstr "" -#: src/views/preference/components/TOTP.vue:93 +#: src/views/preference/components/TOTP.vue:75 msgid "Current account is enabled TOTP." msgstr "" -#: src/views/preference/components/TOTP.vue:90 +#: src/views/preference/components/TOTP.vue:73 msgid "Current account is not enabled TOTP." msgstr "" @@ -661,12 +663,14 @@ msgid "Deploy" msgstr "" #: src/views/stream/components/Deploy.vue:57 +#, fuzzy msgid "Deploy %{conf_name} to %{node_name} failed" -msgstr "" +msgstr "Saved successfully" #: src/views/stream/components/Deploy.vue:36 +#, fuzzy msgid "Deploy %{conf_name} to %{node_name} successfully" -msgstr "" +msgstr "Saved successfully" #: src/views/stream/components/Deploy.vue:34 #, fuzzy @@ -756,7 +760,7 @@ msgstr "Disabled" msgid "Disabled successfully" msgstr "Disabled successfully" -#: src/views/dashboard/ServerAnalytic.vue:370 +#: src/views/dashboard/ServerAnalytic.vue:366 msgid "Disk IO" msgstr "Disk IO" @@ -785,8 +789,9 @@ msgstr[0] "Are you sure you want to remove this directive?" msgstr[1] "Are you sure you want to remove this directive?" #: src/views/site/cert/components/ObtainCert.vue:136 +#, fuzzy msgid "Do you want to disable auto-cert renewal?" -msgstr "" +msgstr "Are you sure you want to remove this directive?" #: src/views/site/site_edit/RightSettings.vue:51 #, fuzzy @@ -865,8 +870,9 @@ msgstr "" #: src/views/site/site_list/SiteList.vue:140 #: src/views/stream/components/StreamDuplicate.vue:121 #: src/views/stream/StreamList.vue:160 +#, fuzzy msgid "Duplicate" -msgstr "" +msgstr "Enable failed" #: src/views/stream/components/StreamDuplicate.vue:82 #, fuzzy @@ -929,14 +935,16 @@ msgid "Enable" msgstr "Enabled" #: src/views/stream/components/Deploy.vue:47 +#, fuzzy msgid "Enable %{conf_name} in %{node_name} failed" -msgstr "" +msgstr "Saved successfully" #: src/views/stream/components/Deploy.vue:43 +#, fuzzy msgid "Enable %{conf_name} in %{node_name} successfully" -msgstr "" +msgstr "Saved successfully" -#: src/views/preference/components/TOTP.vue:52 +#: src/views/preference/components/TOTP.vue:38 #, fuzzy msgid "Enable 2FA successfully" msgstr "Enabled successfully" @@ -978,7 +986,7 @@ msgstr "Enabled successfully" msgid "Enable TLS" msgstr "Enable TLS" -#: src/views/preference/components/TOTP.vue:119 +#: src/views/preference/components/TOTP.vue:101 #, fuzzy msgid "Enable TOTP" msgstr "Enable TLS" @@ -1013,7 +1021,7 @@ msgid "Environment variables cleaned" msgstr "" #: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83 -#: src/views/environment/Environment.vue:33 +#: src/views/environment/Environment.vue:43 #, fuzzy msgid "Environments" msgstr "Comments" @@ -1070,16 +1078,18 @@ msgid "Failed to enable %{msg}" msgstr "Failed to enable %{msg}" #: src/language/constants.ts:5 +#, fuzzy msgid "Failed to get certificate information" -msgstr "" +msgstr "Certificate is valid" #: src/constants/errors/self_check.ts:4 msgid "Failed to parse nginx.conf" msgstr "" #: src/constants/errors/self_check.ts:3 +#, fuzzy msgid "Failed to read nginx.conf" -msgstr "" +msgstr "Failed to enable %{msg}" #: src/views/site/site_edit/SiteEdit.vue:135 #: src/views/stream/StreamEdit.vue:122 @@ -1199,7 +1209,7 @@ msgid "" "ban threshold minutes, the ip will be banned for a period of time." msgstr "" -#: src/views/preference/components/TOTP.vue:105 +#: src/views/preference/components/TOTP.vue:87 msgid "" "If you lose your mobile phone, you can use the recovery code to reset your " "2FA." @@ -1237,12 +1247,12 @@ msgstr "" msgid "Initialing core upgrader" msgstr "" -#: src/views/preference/components/TOTP.vue:152 +#: src/views/preference/components/TOTP.vue:134 msgid "Input the code from the app:" msgstr "" #: src/components/TwoFA/Authorization.vue:82 -#: src/views/preference/components/TOTP.vue:165 +#: src/views/preference/components/TOTP.vue:148 msgid "Input the recovery code:" msgstr "" @@ -1271,8 +1281,9 @@ msgid "Invalid filename" msgstr "Invalid E-mail!" #: src/views/config/components/Mkdir.vue:57 +#, fuzzy msgid "Invalid folder name" -msgstr "" +msgstr "Invalid E-mail!" #: src/constants/errors/user.ts:4 #, fuzzy @@ -1284,8 +1295,9 @@ msgid "Invalid passcode or recovery code" msgstr "" #: src/constants/errors/user.ts:5 +#, fuzzy msgid "Invalid recovery code" -msgstr "" +msgstr "Invalid E-mail!" #: src/views/preference/AuthSettings.vue:14 msgid "IP" @@ -1320,8 +1332,9 @@ msgid "Key Type" msgstr "" #: src/views/system/Upgrade.vue:179 +#, fuzzy msgid "Last checked at" -msgstr "" +msgstr "Created at" #: src/views/preference/components/Passkey.vue:96 #, fuzzy @@ -1370,16 +1383,16 @@ msgstr "" msgid "List" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:187 +#: src/views/dashboard/ServerAnalytic.vue:183 #, fuzzy msgid "Load Average:" msgstr "Load Averages:" -#: src/views/environment/Environment.vue:39 +#: src/views/environment/Environment.vue:49 msgid "Load from settings" msgstr "" -#: src/views/environment/Environment.vue:13 +#: src/views/environment/Environment.vue:17 #, fuzzy msgid "Load successfully" msgstr "Saved successfully" @@ -1390,7 +1403,7 @@ msgstr "Saved successfully" msgid "Local" msgstr "Location" -#: src/views/site/ngx_conf/LocationEditor.vue:69 +#: src/views/site/ngx_conf/LocationEditor.vue:68 msgid "Location" msgstr "Location" @@ -1465,12 +1478,12 @@ msgstr "Certificate is valid" msgid "Max Attempts" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:226 -#: src/views/dashboard/ServerAnalytic.vue:227 +#: src/views/dashboard/ServerAnalytic.vue:222 +#: src/views/dashboard/ServerAnalytic.vue:223 msgid "Memory" msgstr "Memory" -#: src/views/dashboard/ServerAnalytic.vue:216 +#: src/views/dashboard/ServerAnalytic.vue:212 msgid "Memory and Storage" msgstr "Memory and Storage" @@ -1529,19 +1542,19 @@ msgstr "Single Directive" msgid "Name" msgstr "Name" -#: src/views/dashboard/ServerAnalytic.vue:331 +#: src/views/dashboard/ServerAnalytic.vue:327 msgid "Network" msgstr "Network" -#: src/views/dashboard/ServerAnalytic.vue:273 +#: src/views/dashboard/ServerAnalytic.vue:269 msgid "Network Statistics" msgstr "Network Statistics" -#: src/views/dashboard/ServerAnalytic.vue:280 +#: src/views/dashboard/ServerAnalytic.vue:276 msgid "Network Total Receive" msgstr "Network Total Receive" -#: src/views/dashboard/ServerAnalytic.vue:286 +#: src/views/dashboard/ServerAnalytic.vue:282 msgid "Network Total Send" msgstr "Network Total Send" @@ -1625,8 +1638,9 @@ msgid "Nginx Log" msgstr "" #: src/views/preference/NginxSettings.vue:18 +#, fuzzy msgid "Nginx Log Directory Whitelist" -msgstr "" +msgstr "Configuration Name" #: src/views/preference/NginxSettings.vue:27 msgid "Nginx PID Path" @@ -1661,7 +1675,7 @@ msgstr "Saved successfully" #: src/views/preference/AuthSettings.vue:136 #: src/views/preference/CertSettings.vue:70 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97 -#: src/views/site/ngx_conf/LocationEditor.vue:90 +#: src/views/site/ngx_conf/LocationEditor.vue:88 #: src/views/site/site_list/SiteList.vue:143 #: src/views/stream/StreamList.vue:163 msgid "No" @@ -1673,8 +1687,9 @@ msgid "Node name" msgstr "Username" #: src/views/preference/BasicSettings.vue:23 +#, fuzzy msgid "Node Secret" -msgstr "" +msgstr "Username" #: src/views/certificate/CertificateList/certColumns.tsx:91 msgid "Not After" @@ -1715,8 +1730,9 @@ msgid "Obtain certificate" msgstr "Certificate is valid" #: src/language/constants.ts:15 +#, fuzzy msgid "Obtaining certificate" -msgstr "" +msgstr "Certificate is valid" #: src/views/site/cert/components/AutoCertStepOne.vue:95 msgid "OCSP Must Staple" @@ -1777,6 +1793,10 @@ msgstr "" msgid "Or" msgstr "" +#: src/views/preference/components/TOTP.vue:127 +msgid "Or enter the secret: %{secret}" +msgstr "" + #: src/views/config/components/Rename.vue:68 msgid "Original name" msgstr "" @@ -1786,7 +1806,7 @@ msgstr "" msgid "OS" msgstr "OS:" -#: src/views/dashboard/ServerAnalytic.vue:193 +#: src/views/dashboard/ServerAnalytic.vue:189 msgid "OS:" msgstr "OS:" @@ -1837,8 +1857,8 @@ msgid "Password length cannot exceed 20 characters" msgstr "" #: src/views/config/ConfigEditor.vue:263 -#: src/views/site/ngx_conf/LocationEditor.vue:111 -#: src/views/site/ngx_conf/LocationEditor.vue:139 +#: src/views/site/ngx_conf/LocationEditor.vue:109 +#: src/views/site/ngx_conf/LocationEditor.vue:137 msgid "Path" msgstr "Path" @@ -1855,8 +1875,9 @@ msgid "Perform" msgstr "" #: src/language/constants.ts:28 +#, fuzzy msgid "Perform core upgrade error" -msgstr "" +msgstr "Certificate has expired" #: src/language/constants.ts:27 msgid "Performing core upgrade" @@ -1932,7 +1953,7 @@ msgid "" "Please note that the unit of time configurations below are all in seconds." msgstr "" -#: src/views/environment/Environment.vue:48 +#: src/views/environment/Environment.vue:58 msgid "Please select at least one node to upgrade" msgstr "" @@ -1991,11 +2012,11 @@ msgid "Public Security Number" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:387 +#: src/views/dashboard/ServerAnalytic.vue:383 msgid "Reads" msgstr "Reads" -#: src/views/dashboard/ServerAnalytic.vue:338 +#: src/views/dashboard/ServerAnalytic.vue:334 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "Receive" @@ -2015,15 +2036,15 @@ msgid "Recovered Successfully" msgstr "Saved successfully" #: src/components/TwoFA/Authorization.vue:89 -#: src/views/preference/components/TOTP.vue:172 +#: src/views/preference/components/TOTP.vue:155 msgid "Recovery" msgstr "" -#: src/views/preference/components/TOTP.vue:98 +#: src/views/preference/components/TOTP.vue:80 msgid "Recovery Code" msgstr "" -#: src/views/preference/components/TOTP.vue:107 +#: src/views/preference/components/TOTP.vue:89 msgid "Recovery Code:" msgstr "" @@ -2036,8 +2057,9 @@ msgid "Regenerate response" msgstr "" #: src/views/certificate/ACMEUser.vue:137 +#, fuzzy msgid "Register" -msgstr "" +msgstr "Enable failed" #: src/views/certificate/ACMEUser.vue:56 msgid "" @@ -2065,8 +2087,9 @@ msgid "Register successfully" msgstr "Enabled successfully" #: src/language/constants.ts:14 +#, fuzzy msgid "Registering user" -msgstr "" +msgstr "Enable failed" #: src/views/certificate/ACMEUser.vue:120 msgid "Registration Status" @@ -2210,7 +2233,7 @@ msgstr "" msgid "Reset" msgstr "" -#: src/views/preference/components/TOTP.vue:127 +#: src/views/preference/components/TOTP.vue:109 msgid "Reset 2FA" msgstr "" @@ -2303,7 +2326,7 @@ msgstr "Saved successfully" msgid "Saved successfully" msgstr "Saved successfully" -#: src/views/preference/components/TOTP.vue:88 +#: src/views/preference/components/TOTP.vue:72 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "" @@ -2311,24 +2334,25 @@ msgstr "" msgid "SDK" msgstr "" -#: src/views/preference/components/TOTP.vue:144 +#: src/views/preference/components/TOTP.vue:124 msgid "Secret has been copied" msgstr "" #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:189 +#, fuzzy msgid "Selector" -msgstr "" +msgstr "Directive" #: src/routes/index.ts:283 src/views/system/SelfCheck/SelfCheck.vue:42 msgid "Self Check" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:348 +#: src/views/dashboard/ServerAnalytic.vue:344 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Send" msgstr "Send" -#: src/views/dashboard/ServerAnalytic.vue:179 +#: src/views/dashboard/ServerAnalytic.vue:175 msgid "Server Info" msgstr "Server Info" @@ -2369,14 +2393,14 @@ msgstr "" #: src/constants/errors/nginx_log.ts:8 msgid "" -"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/constants/errors/nginx_log.ts:7 msgid "" -"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/components/SensitiveString/SensitiveString.vue:40 @@ -2420,12 +2444,14 @@ msgid "Sites List" msgstr "Sites List" #: src/constants/errors/self_check.ts:10 +#, fuzzy msgid "Sites-available directory not exist" -msgstr "" +msgstr "Directive" #: src/constants/errors/self_check.ts:11 +#, fuzzy msgid "Sites-enabled directory not exist" -msgstr "" +msgstr "Directive" #: src/views/certificate/CertificateEditor.vue:211 #, fuzzy @@ -2470,8 +2496,8 @@ msgstr "Status" msgid "Stopped" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:254 -#: src/views/dashboard/ServerAnalytic.vue:255 +#: src/views/dashboard/ServerAnalytic.vue:250 +#: src/views/dashboard/ServerAnalytic.vue:251 msgid "Storage" msgstr "Storage" @@ -2481,8 +2507,9 @@ msgid "Streams Directory" msgstr "Directive" #: src/constants/errors/self_check.ts:12 +#, fuzzy msgid "Streams-available directory not exist" -msgstr "" +msgstr "Directive" #: src/constants/errors/self_check.ts:13 #, fuzzy @@ -2501,8 +2528,8 @@ msgid "" "guide/nginx-proxy-example.html" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:240 -#: src/views/dashboard/ServerAnalytic.vue:241 +#: src/views/dashboard/ServerAnalytic.vue:236 +#: src/views/dashboard/ServerAnalytic.vue:237 msgid "Swap" msgstr "Swap" @@ -2581,8 +2608,9 @@ msgid "Sync strategy" msgstr "Certificate is valid" #: src/views/certificate/CertificateEditor.vue:204 +#, fuzzy msgid "Sync to" -msgstr "" +msgstr "Certificate is valid" #: src/views/site/site_edit/RightSettings.vue:110 msgid "Synchronization" @@ -2634,8 +2662,9 @@ msgid "" msgstr "" #: src/views/certificate/CertificateEditor.vue:214 +#, fuzzy msgid "The input is not a SSL Certificate" -msgstr "" +msgstr "Certificate Status" #: src/views/certificate/CertificateEditor.vue:227 #, fuzzy @@ -2665,8 +2694,9 @@ msgid "The path exists, but the file is not a certificate" msgstr "Certificate Status" #: src/views/certificate/CertificateEditor.vue:194 +#, fuzzy msgid "The path exists, but the file is not a private key" -msgstr "" +msgstr "Certificate Status" #: src/views/preference/BasicSettings.vue:66 msgid "" @@ -2674,7 +2704,7 @@ msgid "" "hyphens, dashes, colons, and dots." msgstr "" -#: src/views/preference/components/TOTP.vue:106 +#: src/views/preference/components/TOTP.vue:88 msgid "" "The recovery code is only displayed once, please save it in a safe place." msgstr "" @@ -2706,8 +2736,9 @@ msgid "The url is invalid." msgstr "" #: src/language/constants.ts:2 +#, fuzzy msgid "The username or password is incorrect" -msgstr "" +msgstr "Password" #: src/views/certificate/CertificateEditor.vue:102 msgid "This Auto Cert item is invalid, please remove it." @@ -2746,9 +2777,10 @@ msgid "This value is already taken" msgstr "" #: src/views/environment/BatchUpgrader.vue:182 +#, fuzzy msgid "" "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." -msgstr "" +msgstr "Saved successfully" #: src/views/preference/AuthSettings.vue:96 msgid "Throttle" @@ -2764,7 +2796,7 @@ msgstr "" msgid "Title" msgstr "" -#: src/views/preference/components/TOTP.vue:87 +#: src/views/preference/components/TOTP.vue:71 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -2802,11 +2834,11 @@ msgid_plural "Total %{total} items" msgstr[0] "" msgstr[1] "" -#: src/views/preference/components/TOTP.vue:85 +#: src/views/preference/components/TOTP.vue:69 msgid "TOTP" msgstr "" -#: src/views/preference/components/TOTP.vue:86 +#: src/views/preference/components/TOTP.vue:70 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -2847,7 +2879,7 @@ msgstr "Updated at" msgid "Updated successfully" msgstr "Saved successfully" -#: src/routes/index.ts:297 src/views/environment/Environment.vue:56 +#: src/routes/index.ts:297 src/views/environment/Environment.vue:66 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226 msgid "Upgrade" msgstr "" @@ -2870,7 +2902,7 @@ msgstr "" msgid "Upstream Name" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:183 +#: src/views/dashboard/ServerAnalytic.vue:179 msgid "Uptime:" msgstr "Uptime:" @@ -2911,8 +2943,9 @@ msgstr "Username (*)" #: src/views/certificate/ACMEUser.vue:124 #: src/views/certificate/CertificateList/certColumns.tsx:81 #: src/views/site/cert/CertInfo.vue:24 +#, fuzzy msgid "Valid" -msgstr "" +msgstr "Invalid E-mail!" #: src/views/environment/envColumns.tsx:31 msgid "Version" @@ -2920,8 +2953,9 @@ msgstr "" #: src/components/StdDesign/StdDataDisplay/StdTable.vue:488 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:103 +#, fuzzy msgid "View" -msgstr "" +msgstr "Basic Mode" #: src/components/Notification/Notification.vue:187 #, fuzzy @@ -2978,7 +3012,7 @@ msgid "" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:377 +#: src/views/dashboard/ServerAnalytic.vue:373 msgid "Writes" msgstr "Writes" @@ -2987,13 +3021,14 @@ msgid "Writing certificate private key to disk" msgstr "" #: src/language/constants.ts:16 +#, fuzzy msgid "Writing certificate to disk" -msgstr "" +msgstr "Certificate is valid" #: src/views/preference/AuthSettings.vue:135 #: src/views/preference/CertSettings.vue:69 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96 -#: src/views/site/ngx_conf/LocationEditor.vue:89 +#: src/views/site/ngx_conf/LocationEditor.vue:87 msgid "Yes" msgstr "Yes" diff --git a/app/src/language/es/app.po b/app/src/language/es/app.po index 496f2b47d..b43cca8b4 100644 --- a/app/src/language/es/app.po +++ b/app/src/language/es/app.po @@ -74,8 +74,8 @@ msgstr "Agregar configuración" msgid "Add Directive Below" msgstr "Añadir directiva a continuación" -#: src/views/site/ngx_conf/LocationEditor.vue:132 -#: src/views/site/ngx_conf/LocationEditor.vue:159 +#: src/views/site/ngx_conf/LocationEditor.vue:130 +#: src/views/site/ngx_conf/LocationEditor.vue:157 msgid "Add Location" msgstr "Agregar Ubicación" @@ -192,7 +192,7 @@ msgstr "¿Está seguro de que quiere borrar esta directiva?" msgid "Are you sure you want to remove this item?" msgstr "¿Está seguro de que desea eliminar este elemento?" -#: src/views/site/ngx_conf/LocationEditor.vue:88 +#: src/views/site/ngx_conf/LocationEditor.vue:86 msgid "Are you sure you want to remove this location?" msgstr "¿Está seguro de que quiere borrar esta ubicación?" @@ -322,10 +322,6 @@ msgstr "Dir CA" msgid "CADir" msgstr "Directorio CA" -#: src/views/preference/components/TOTP.vue:145 -msgid "Can't scan? Use text key binding" -msgstr "¿No puede escanear? Utilice la vinculación con una llave de texto" - #: src/components/ChatGPT/ChatGPT.vue:356 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187 @@ -379,7 +375,7 @@ msgid "Certificate Renewal Interval" msgstr "Intervalo de renovación del Certificado" #: src/views/certificate/CertificateEditor.vue:128 -#: src/views/site/cert/Cert.vue:32 +#: src/views/site/cert/Cert.vue:33 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "Estado del Certificado" @@ -403,7 +399,7 @@ msgstr "Método de desafío" msgid "Change Certificate" msgstr "Cambiar Certificado" -#: src/views/site/cert/Cert.vue:51 +#: src/views/site/cert/Cert.vue:52 msgid "Changed Certificate" msgid_plural "Changed Certificates" msgstr[0] "Cambiar Certificado" @@ -460,13 +456,17 @@ msgstr "Borrar" msgid "Cleared successfully" msgstr "Limpiado exitoso" +#: src/views/preference/components/TOTP.vue:125 +msgid "Click to copy" +msgstr "" + #: src/views/preference/LogrotateSettings.vue:22 msgid "Command" msgstr "Comando" #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:113 -#: src/views/site/ngx_conf/LocationEditor.vue:105 -#: src/views/site/ngx_conf/LocationEditor.vue:136 +#: src/views/site/ngx_conf/LocationEditor.vue:103 +#: src/views/site/ngx_conf/LocationEditor.vue:134 #: src/views/site/ngx_conf/NgxServer.vue:134 msgid "Comments" msgstr "Comentarios" @@ -500,8 +500,8 @@ msgid "Connection lost, please refresh the page." msgstr "Conexión perdida, por favor actualice la página." #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:118 -#: src/views/site/ngx_conf/LocationEditor.vue:117 -#: src/views/site/ngx_conf/LocationEditor.vue:145 +#: src/views/site/ngx_conf/LocationEditor.vue:115 +#: src/views/site/ngx_conf/LocationEditor.vue:143 msgid "Content" msgstr "Contenido" @@ -518,11 +518,11 @@ msgstr "Copiar" msgid "Core Upgrade" msgstr "Actualización del kernel" -#: src/views/dashboard/ServerAnalytic.vue:305 +#: src/views/dashboard/ServerAnalytic.vue:301 msgid "CPU Status" msgstr "Estado del CPU" -#: src/views/dashboard/ServerAnalytic.vue:199 +#: src/views/dashboard/ServerAnalytic.vue:195 msgid "CPU:" msgstr "CPU:" @@ -564,11 +564,11 @@ msgstr "Credencial" msgid "Credentials" msgstr "Credenciales" -#: src/views/preference/components/TOTP.vue:93 +#: src/views/preference/components/TOTP.vue:75 msgid "Current account is enabled TOTP." msgstr "La cuenta actual tiene habilitada TOTP." -#: src/views/preference/components/TOTP.vue:90 +#: src/views/preference/components/TOTP.vue:73 msgid "Current account is not enabled TOTP." msgstr "La cuenta actual no tiene habilitada TOTP." @@ -733,7 +733,7 @@ msgstr "Desactivado" msgid "Disabled successfully" msgstr "Desactivado con éxito" -#: src/views/dashboard/ServerAnalytic.vue:370 +#: src/views/dashboard/ServerAnalytic.vue:366 msgid "Disk IO" msgstr "I/O del disco" @@ -903,7 +903,7 @@ msgstr "Falló el habilitado de %{conf_name} en %{node_name}" msgid "Enable %{conf_name} in %{node_name} successfully" msgstr "Habilitado exitoso de %{conf_name} en %{node_name}" -#: src/views/preference/components/TOTP.vue:52 +#: src/views/preference/components/TOTP.vue:38 msgid "Enable 2FA successfully" msgstr "Habilitar 2FA exitoso" @@ -943,7 +943,7 @@ msgstr "Habilitado con Éxito" msgid "Enable TLS" msgstr "Habilitar TLS" -#: src/views/preference/components/TOTP.vue:119 +#: src/views/preference/components/TOTP.vue:101 #, fuzzy msgid "Enable TOTP" msgstr "Habilitar TLS" @@ -978,7 +978,7 @@ msgid "Environment variables cleaned" msgstr "Variables de entorno limpiadas" #: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83 -#: src/views/environment/Environment.vue:33 +#: src/views/environment/Environment.vue:43 msgid "Environments" msgstr "Entornos" @@ -1040,8 +1040,9 @@ msgid "Failed to parse nginx.conf" msgstr "" #: src/constants/errors/self_check.ts:3 +#, fuzzy msgid "Failed to read nginx.conf" -msgstr "" +msgstr "Error al habilitar %{msg}" #: src/views/site/site_edit/SiteEdit.vue:135 #: src/views/stream/StreamEdit.vue:122 @@ -1163,7 +1164,7 @@ msgstr "" "el máximo de intentos en los minutos del umbral de prohibición, la IP será " "bloqueada por un período de tiempo." -#: src/views/preference/components/TOTP.vue:105 +#: src/views/preference/components/TOTP.vue:87 msgid "" "If you lose your mobile phone, you can use the recovery code to reset your " "2FA." @@ -1205,12 +1206,12 @@ msgstr "Error de actualización de kernel inicial" msgid "Initialing core upgrader" msgstr "Inicializando la actualización del kernel" -#: src/views/preference/components/TOTP.vue:152 +#: src/views/preference/components/TOTP.vue:134 msgid "Input the code from the app:" msgstr "Ingrese el código de la aplicación:" #: src/components/TwoFA/Authorization.vue:82 -#: src/views/preference/components/TOTP.vue:165 +#: src/views/preference/components/TOTP.vue:148 msgid "Input the recovery code:" msgstr "Ingrese el código de recuperación:" @@ -1330,15 +1331,15 @@ msgstr "Iniciar conexión" msgid "List" msgstr "Lista" -#: src/views/dashboard/ServerAnalytic.vue:187 +#: src/views/dashboard/ServerAnalytic.vue:183 msgid "Load Average:" msgstr "Promedios de carga:" -#: src/views/environment/Environment.vue:39 +#: src/views/environment/Environment.vue:49 msgid "Load from settings" msgstr "Cargar desde configuraciones" -#: src/views/environment/Environment.vue:13 +#: src/views/environment/Environment.vue:17 msgid "Load successfully" msgstr "Cargado con éxito" @@ -1347,7 +1348,7 @@ msgstr "Cargado con éxito" msgid "Local" msgstr "Local" -#: src/views/site/ngx_conf/LocationEditor.vue:69 +#: src/views/site/ngx_conf/LocationEditor.vue:68 msgid "Location" msgstr "Ubicación" @@ -1425,12 +1426,12 @@ msgstr "Certificado Administrado" msgid "Max Attempts" msgstr "Intentos máximos" -#: src/views/dashboard/ServerAnalytic.vue:226 -#: src/views/dashboard/ServerAnalytic.vue:227 +#: src/views/dashboard/ServerAnalytic.vue:222 +#: src/views/dashboard/ServerAnalytic.vue:223 msgid "Memory" msgstr "Memoria" -#: src/views/dashboard/ServerAnalytic.vue:216 +#: src/views/dashboard/ServerAnalytic.vue:212 msgid "Memory and Storage" msgstr "Memoria y almacenamiento" @@ -1484,19 +1485,19 @@ msgstr "Directiva multilínea" msgid "Name" msgstr "Nombre" -#: src/views/dashboard/ServerAnalytic.vue:331 +#: src/views/dashboard/ServerAnalytic.vue:327 msgid "Network" msgstr "Red" -#: src/views/dashboard/ServerAnalytic.vue:273 +#: src/views/dashboard/ServerAnalytic.vue:269 msgid "Network Statistics" msgstr "Estadísticas de red" -#: src/views/dashboard/ServerAnalytic.vue:280 +#: src/views/dashboard/ServerAnalytic.vue:276 msgid "Network Total Receive" msgstr "Total recibido por la red" -#: src/views/dashboard/ServerAnalytic.vue:286 +#: src/views/dashboard/ServerAnalytic.vue:282 msgid "Network Total Send" msgstr "Total enviado por la red" @@ -1613,7 +1614,7 @@ msgstr "Nginx reiniciado con éxito" #: src/views/preference/AuthSettings.vue:136 #: src/views/preference/CertSettings.vue:70 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97 -#: src/views/site/ngx_conf/LocationEditor.vue:90 +#: src/views/site/ngx_conf/LocationEditor.vue:88 #: src/views/site/site_list/SiteList.vue:143 #: src/views/stream/StreamList.vue:163 msgid "No" @@ -1731,6 +1732,10 @@ msgstr "OpenAI" msgid "Or" msgstr "O" +#: src/views/preference/components/TOTP.vue:127 +msgid "Or enter the secret: %{secret}" +msgstr "" + #: src/views/config/components/Rename.vue:68 msgid "Original name" msgstr "Nombre original" @@ -1739,7 +1744,7 @@ msgstr "Nombre original" msgid "OS" msgstr "SO" -#: src/views/dashboard/ServerAnalytic.vue:193 +#: src/views/dashboard/ServerAnalytic.vue:189 msgid "OS:" msgstr "SO:" @@ -1795,8 +1800,8 @@ msgid "Password length cannot exceed 20 characters" msgstr "" #: src/views/config/ConfigEditor.vue:263 -#: src/views/site/ngx_conf/LocationEditor.vue:111 -#: src/views/site/ngx_conf/LocationEditor.vue:139 +#: src/views/site/ngx_conf/LocationEditor.vue:109 +#: src/views/site/ngx_conf/LocationEditor.vue:137 msgid "Path" msgstr "Ruta" @@ -1902,7 +1907,7 @@ msgstr "" "Tenga en cuenta que las siguientes configuraciones de unidades de tiempo " "están todas en segundos." -#: src/views/environment/Environment.vue:48 +#: src/views/environment/Environment.vue:58 msgid "Please select at least one node to upgrade" msgstr "Seleccione al menos un nodo para actualizar" @@ -1964,11 +1969,11 @@ msgid "Public Security Number" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:387 +#: src/views/dashboard/ServerAnalytic.vue:383 msgid "Reads" msgstr "Lecturas" -#: src/views/dashboard/ServerAnalytic.vue:338 +#: src/views/dashboard/ServerAnalytic.vue:334 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "Recibido" @@ -1987,15 +1992,15 @@ msgid "Recovered Successfully" msgstr "Recuperado con éxito" #: src/components/TwoFA/Authorization.vue:89 -#: src/views/preference/components/TOTP.vue:172 +#: src/views/preference/components/TOTP.vue:155 msgid "Recovery" msgstr "Recuperación" -#: src/views/preference/components/TOTP.vue:98 +#: src/views/preference/components/TOTP.vue:80 msgid "Recovery Code" msgstr "Código de Recuperación" -#: src/views/preference/components/TOTP.vue:107 +#: src/views/preference/components/TOTP.vue:89 msgid "Recovery Code:" msgstr "Código de Recuperación:" @@ -2171,7 +2176,7 @@ msgstr "Pedido con parámetros incorrectos" msgid "Reset" msgstr "Limpiar" -#: src/views/preference/components/TOTP.vue:127 +#: src/views/preference/components/TOTP.vue:109 msgid "Reset 2FA" msgstr "Restablecer 2FA" @@ -2242,8 +2247,8 @@ msgstr "Renombrar Configuración Remota Exitosa" #, fuzzy msgid "Save site %{site} to %{node} error, response: %{resp}" msgstr "" -"Sincronización del Certificado %{cert_name} a %{env_name} falló, respuesta: %" -"{resp}" +"Sincronización del Certificado %{cert_name} a %{env_name} falló, respuesta: " +"%{resp}" #: src/components/Notification/config.ts:35 #, fuzzy @@ -2264,7 +2269,7 @@ msgstr "Guardado con éxito" msgid "Saved successfully" msgstr "Guardado con éxito" -#: src/views/preference/components/TOTP.vue:88 +#: src/views/preference/components/TOTP.vue:72 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "" "Escanee el código QR con su teléfono móvil para agregar la cuenta a la " @@ -2274,7 +2279,7 @@ msgstr "" msgid "SDK" msgstr "SDK" -#: src/views/preference/components/TOTP.vue:144 +#: src/views/preference/components/TOTP.vue:124 msgid "Secret has been copied" msgstr "El secreto ha sido copiado" @@ -2286,12 +2291,12 @@ msgstr "Seleccionador" msgid "Self Check" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:348 +#: src/views/dashboard/ServerAnalytic.vue:344 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Send" msgstr "Enviado" -#: src/views/dashboard/ServerAnalytic.vue:179 +#: src/views/dashboard/ServerAnalytic.vue:175 msgid "Server Info" msgstr "Información del servidor" @@ -2334,14 +2339,14 @@ msgstr "Usando el proveedor de desafíos HTTP01" #: src/constants/errors/nginx_log.ts:8 msgid "" -"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/constants/errors/nginx_log.ts:7 msgid "" -"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/components/SensitiveString/SensitiveString.vue:40 @@ -2384,12 +2389,14 @@ msgid "Sites List" msgstr "Lista de sitios" #: src/constants/errors/self_check.ts:10 +#, fuzzy msgid "Sites-available directory not exist" -msgstr "" +msgstr "Directorio" #: src/constants/errors/self_check.ts:11 +#, fuzzy msgid "Sites-enabled directory not exist" -msgstr "" +msgstr "Directorio" #: src/views/certificate/CertificateEditor.vue:211 msgid "SSL Certificate Content" @@ -2428,8 +2435,8 @@ msgstr "Estado" msgid "Stopped" msgstr "Detenido" -#: src/views/dashboard/ServerAnalytic.vue:254 -#: src/views/dashboard/ServerAnalytic.vue:255 +#: src/views/dashboard/ServerAnalytic.vue:250 +#: src/views/dashboard/ServerAnalytic.vue:251 msgid "Storage" msgstr "Almacenamiento" @@ -2439,8 +2446,9 @@ msgid "Streams Directory" msgstr "Directorio" #: src/constants/errors/self_check.ts:12 +#, fuzzy msgid "Streams-available directory not exist" -msgstr "" +msgstr "Directorio" #: src/constants/errors/self_check.ts:13 #, fuzzy @@ -2459,8 +2467,8 @@ msgid "" "guide/nginx-proxy-example.html" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:240 -#: src/views/dashboard/ServerAnalytic.vue:241 +#: src/views/dashboard/ServerAnalytic.vue:236 +#: src/views/dashboard/ServerAnalytic.vue:237 msgid "Swap" msgstr "Swap" @@ -2491,8 +2499,8 @@ msgstr "" #: src/components/Notification/cert.ts:14 msgid "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}" msgstr "" -"Sincronización del Certificado %{cert_name} a %{env_name} falló, respuesta: %" -"{resp}" +"Sincronización del Certificado %{cert_name} a %{env_name} falló, respuesta: " +"%{resp}" #: src/components/Notification/cert.ts:4 msgid "Sync Certificate %{cert_name} to %{env_name} successfully" @@ -2640,7 +2648,7 @@ msgstr "" "El nombre del servidor solo debe contener letras, Unicode, números, guiones, " "rayas y puntos." -#: src/views/preference/components/TOTP.vue:106 +#: src/views/preference/components/TOTP.vue:88 msgid "" "The recovery code is only displayed once, please save it in a safe place." msgstr "" @@ -2724,8 +2732,8 @@ msgstr "Este valor ya está elegido" msgid "" "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." msgstr "" -"Esto actualizará o reinstalará la interfaz de usuario de Nginx en %" -"{nodeNames} a %{version}." +"Esto actualizará o reinstalará la interfaz de usuario de Nginx en " +"%{nodeNames} a %{version}." #: src/views/preference/AuthSettings.vue:96 msgid "Throttle" @@ -2741,7 +2749,7 @@ msgstr "Consejos" msgid "Title" msgstr "Título" -#: src/views/preference/components/TOTP.vue:87 +#: src/views/preference/components/TOTP.vue:71 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -2792,11 +2800,11 @@ msgid_plural "Total %{total} items" msgstr[0] "" msgstr[1] "" -#: src/views/preference/components/TOTP.vue:85 +#: src/views/preference/components/TOTP.vue:69 msgid "TOTP" msgstr "TOTP" -#: src/views/preference/components/TOTP.vue:86 +#: src/views/preference/components/TOTP.vue:70 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -2838,7 +2846,7 @@ msgstr "Actualizado a" msgid "Updated successfully" msgstr "Actualización exitosa" -#: src/routes/index.ts:297 src/views/environment/Environment.vue:56 +#: src/routes/index.ts:297 src/views/environment/Environment.vue:66 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226 msgid "Upgrade" msgstr "Actualizar" @@ -2859,7 +2867,7 @@ msgstr "Actualizando Nginx UI, por favor espere..." msgid "Upstream Name" msgstr "Nombre de la Transmisión" -#: src/views/dashboard/ServerAnalytic.vue:183 +#: src/views/dashboard/ServerAnalytic.vue:179 msgid "Uptime:" msgstr "Tiempo encendido:" @@ -2974,7 +2982,7 @@ msgstr "" "continuación se sincronizarán." #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:377 +#: src/views/dashboard/ServerAnalytic.vue:373 msgid "Writes" msgstr "Escrituras" @@ -2989,7 +2997,7 @@ msgstr "Escribir certificado a disco" #: src/views/preference/AuthSettings.vue:135 #: src/views/preference/CertSettings.vue:69 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96 -#: src/views/site/ngx_conf/LocationEditor.vue:89 +#: src/views/site/ngx_conf/LocationEditor.vue:87 msgid "Yes" msgstr "Si" @@ -3013,6 +3021,9 @@ msgstr "" msgid "Your passkeys" msgstr "Sus llaves de acceso" +#~ msgid "Can't scan? Use text key binding" +#~ msgstr "¿No puede escanear? Utilice la vinculación con una llave de texto" + #~ msgid "Directory" #~ msgstr "Directorio" diff --git a/app/src/language/fr_FR/app.po b/app/src/language/fr_FR/app.po index fe647afa7..a3818a70a 100644 --- a/app/src/language/fr_FR/app.po +++ b/app/src/language/fr_FR/app.po @@ -71,8 +71,8 @@ msgstr "Modifier la configuration" msgid "Add Directive Below" msgstr "Ajouter une directive" -#: src/views/site/ngx_conf/LocationEditor.vue:132 -#: src/views/site/ngx_conf/LocationEditor.vue:159 +#: src/views/site/ngx_conf/LocationEditor.vue:130 +#: src/views/site/ngx_conf/LocationEditor.vue:157 msgid "Add Location" msgstr "Ajouter une localisation" @@ -199,7 +199,7 @@ msgstr "Voulez-vous vraiment supprimer cette directive ?" msgid "Are you sure you want to remove this item?" msgstr "Voulez-vous vraiment supprimer cette directive ?" -#: src/views/site/ngx_conf/LocationEditor.vue:88 +#: src/views/site/ngx_conf/LocationEditor.vue:86 msgid "Are you sure you want to remove this location?" msgstr "Voulez-vous vraiment supprimer cette localisation ?" @@ -330,10 +330,6 @@ msgstr "" msgid "CADir" msgstr "" -#: src/views/preference/components/TOTP.vue:145 -msgid "Can't scan? Use text key binding" -msgstr "" - #: src/components/ChatGPT/ChatGPT.vue:356 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187 @@ -388,7 +384,7 @@ msgid "Certificate Renewal Interval" msgstr "Le certificat est valide" #: src/views/certificate/CertificateEditor.vue:128 -#: src/views/site/cert/Cert.vue:32 +#: src/views/site/cert/Cert.vue:33 #, fuzzy msgid "Certificate Status" msgid_plural "Certificates Status" @@ -415,7 +411,7 @@ msgstr "Méthode de challenge" msgid "Change Certificate" msgstr "Changer de certificat" -#: src/views/site/cert/Cert.vue:51 +#: src/views/site/cert/Cert.vue:52 #, fuzzy msgid "Changed Certificate" msgid_plural "Changed Certificates" @@ -475,14 +471,18 @@ msgstr "Effacer" msgid "Cleared successfully" msgstr "Désactivé avec succès" +#: src/views/preference/components/TOTP.vue:125 +msgid "Click to copy" +msgstr "" + #: src/views/preference/LogrotateSettings.vue:22 #, fuzzy msgid "Command" msgstr "Commentaires" #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:113 -#: src/views/site/ngx_conf/LocationEditor.vue:105 -#: src/views/site/ngx_conf/LocationEditor.vue:136 +#: src/views/site/ngx_conf/LocationEditor.vue:103 +#: src/views/site/ngx_conf/LocationEditor.vue:134 #: src/views/site/ngx_conf/NgxServer.vue:134 msgid "Comments" msgstr "Commentaires" @@ -516,8 +516,8 @@ msgid "Connection lost, please refresh the page." msgstr "" #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:118 -#: src/views/site/ngx_conf/LocationEditor.vue:117 -#: src/views/site/ngx_conf/LocationEditor.vue:145 +#: src/views/site/ngx_conf/LocationEditor.vue:115 +#: src/views/site/ngx_conf/LocationEditor.vue:143 msgid "Content" msgstr "Contenu" @@ -534,11 +534,11 @@ msgstr "" msgid "Core Upgrade" msgstr "Mise à jour du core" -#: src/views/dashboard/ServerAnalytic.vue:305 +#: src/views/dashboard/ServerAnalytic.vue:301 msgid "CPU Status" msgstr "État du processeur" -#: src/views/dashboard/ServerAnalytic.vue:199 +#: src/views/dashboard/ServerAnalytic.vue:195 msgid "CPU:" msgstr "CPU :" @@ -584,11 +584,11 @@ msgstr "Identifiant" msgid "Credentials" msgstr "Identifiants" -#: src/views/preference/components/TOTP.vue:93 +#: src/views/preference/components/TOTP.vue:75 msgid "Current account is enabled TOTP." msgstr "" -#: src/views/preference/components/TOTP.vue:90 +#: src/views/preference/components/TOTP.vue:73 msgid "Current account is not enabled TOTP." msgstr "" @@ -665,12 +665,14 @@ msgid "Deploy" msgstr "" #: src/views/stream/components/Deploy.vue:57 +#, fuzzy msgid "Deploy %{conf_name} to %{node_name} failed" -msgstr "" +msgstr "Dupliqué avec succès" #: src/views/stream/components/Deploy.vue:36 +#, fuzzy msgid "Deploy %{conf_name} to %{node_name} successfully" -msgstr "" +msgstr "Dupliqué avec succès" #: src/views/stream/components/Deploy.vue:34 #, fuzzy @@ -760,7 +762,7 @@ msgstr "Désactivé" msgid "Disabled successfully" msgstr "Désactivé avec succès" -#: src/views/dashboard/ServerAnalytic.vue:370 +#: src/views/dashboard/ServerAnalytic.vue:366 msgid "Disk IO" msgstr "E/S disque" @@ -932,14 +934,16 @@ msgid "Enable" msgstr "Activé" #: src/views/stream/components/Deploy.vue:47 +#, fuzzy msgid "Enable %{conf_name} in %{node_name} failed" -msgstr "" +msgstr "Dupliqué avec succès" #: src/views/stream/components/Deploy.vue:43 +#, fuzzy msgid "Enable %{conf_name} in %{node_name} successfully" -msgstr "" +msgstr "Dupliqué avec succès" -#: src/views/preference/components/TOTP.vue:52 +#: src/views/preference/components/TOTP.vue:38 #, fuzzy msgid "Enable 2FA successfully" msgstr "Activé avec succès" @@ -981,7 +985,7 @@ msgstr "Activé avec succès" msgid "Enable TLS" msgstr "Activer TLS" -#: src/views/preference/components/TOTP.vue:119 +#: src/views/preference/components/TOTP.vue:101 #, fuzzy msgid "Enable TOTP" msgstr "Activer TLS" @@ -1017,7 +1021,7 @@ msgid "Environment variables cleaned" msgstr "Définition des variables d'environnement" #: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83 -#: src/views/environment/Environment.vue:33 +#: src/views/environment/Environment.vue:43 #, fuzzy msgid "Environments" msgstr "Commentaires" @@ -1082,8 +1086,9 @@ msgid "Failed to parse nginx.conf" msgstr "" #: src/constants/errors/self_check.ts:3 +#, fuzzy msgid "Failed to read nginx.conf" -msgstr "" +msgstr "Impossible d'activer %{msg}" #: src/views/site/site_edit/SiteEdit.vue:135 #: src/views/stream/StreamEdit.vue:122 @@ -1203,7 +1208,7 @@ msgid "" "ban threshold minutes, the ip will be banned for a period of time." msgstr "" -#: src/views/preference/components/TOTP.vue:105 +#: src/views/preference/components/TOTP.vue:87 msgid "" "If you lose your mobile phone, you can use the recovery code to reset your " "2FA." @@ -1242,12 +1247,12 @@ msgstr "Erreur du programme de mise à niveau initial du core" msgid "Initialing core upgrader" msgstr "Initialisation du programme de mise à niveau du core" -#: src/views/preference/components/TOTP.vue:152 +#: src/views/preference/components/TOTP.vue:134 msgid "Input the code from the app:" msgstr "" #: src/components/TwoFA/Authorization.vue:82 -#: src/views/preference/components/TOTP.vue:165 +#: src/views/preference/components/TOTP.vue:148 msgid "Input the recovery code:" msgstr "" @@ -1273,8 +1278,9 @@ msgid "Invalid filename" msgstr "" #: src/views/config/components/Mkdir.vue:57 +#, fuzzy msgid "Invalid folder name" -msgstr "" +msgstr "Veuillez saisir votre nom d'utilisateur !" #: src/constants/errors/user.ts:4 msgid "Invalid otp code" @@ -1371,16 +1377,16 @@ msgstr "" msgid "List" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:187 +#: src/views/dashboard/ServerAnalytic.vue:183 #, fuzzy msgid "Load Average:" msgstr "Charges moyennes :" -#: src/views/environment/Environment.vue:39 +#: src/views/environment/Environment.vue:49 msgid "Load from settings" msgstr "" -#: src/views/environment/Environment.vue:13 +#: src/views/environment/Environment.vue:17 #, fuzzy msgid "Load successfully" msgstr "Enregistré avec succès" @@ -1391,7 +1397,7 @@ msgstr "Enregistré avec succès" msgid "Local" msgstr "Localisation" -#: src/views/site/ngx_conf/LocationEditor.vue:69 +#: src/views/site/ngx_conf/LocationEditor.vue:68 #, fuzzy msgid "Location" msgstr "Localisation" @@ -1468,12 +1474,12 @@ msgstr "Changer de certificat" msgid "Max Attempts" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:226 -#: src/views/dashboard/ServerAnalytic.vue:227 +#: src/views/dashboard/ServerAnalytic.vue:222 +#: src/views/dashboard/ServerAnalytic.vue:223 msgid "Memory" msgstr "Mémoire" -#: src/views/dashboard/ServerAnalytic.vue:216 +#: src/views/dashboard/ServerAnalytic.vue:212 msgid "Memory and Storage" msgstr "Mémoire et stockage" @@ -1530,19 +1536,19 @@ msgstr "Directive multiligne" msgid "Name" msgstr "Nom" -#: src/views/dashboard/ServerAnalytic.vue:331 +#: src/views/dashboard/ServerAnalytic.vue:327 msgid "Network" msgstr "Réseau" -#: src/views/dashboard/ServerAnalytic.vue:273 +#: src/views/dashboard/ServerAnalytic.vue:269 msgid "Network Statistics" msgstr "Statistiques du réseau" -#: src/views/dashboard/ServerAnalytic.vue:280 +#: src/views/dashboard/ServerAnalytic.vue:276 msgid "Network Total Receive" msgstr "Réception totale du réseau" -#: src/views/dashboard/ServerAnalytic.vue:286 +#: src/views/dashboard/ServerAnalytic.vue:282 msgid "Network Total Send" msgstr "Envoi total réseau" @@ -1626,8 +1632,9 @@ msgid "Nginx Log" msgstr "Journal Nginx" #: src/views/preference/NginxSettings.vue:18 +#, fuzzy msgid "Nginx Log Directory Whitelist" -msgstr "" +msgstr "Erreur d'analyse de configuration Nginx" #: src/views/preference/NginxSettings.vue:27 #, fuzzy @@ -1635,8 +1642,9 @@ msgid "Nginx PID Path" msgstr "Chemin du journal des erreurs Nginx" #: src/views/preference/NginxSettings.vue:30 +#, fuzzy msgid "Nginx Reload Command" -msgstr "" +msgstr "Commande de démarrage du terminal" #: src/components/NginxControl/NginxControl.vue:26 msgid "Nginx reloaded successfully" @@ -1662,7 +1670,7 @@ msgstr "Nginx a redémarré avec succès" #: src/views/preference/AuthSettings.vue:136 #: src/views/preference/CertSettings.vue:70 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97 -#: src/views/site/ngx_conf/LocationEditor.vue:90 +#: src/views/site/ngx_conf/LocationEditor.vue:88 #: src/views/site/site_list/SiteList.vue:143 #: src/views/stream/StreamList.vue:163 msgid "No" @@ -1778,6 +1786,10 @@ msgstr "OpenAI" msgid "Or" msgstr "" +#: src/views/preference/components/TOTP.vue:127 +msgid "Or enter the secret: %{secret}" +msgstr "" + #: src/views/config/components/Rename.vue:68 msgid "Original name" msgstr "" @@ -1786,7 +1798,7 @@ msgstr "" msgid "OS" msgstr "OS" -#: src/views/dashboard/ServerAnalytic.vue:193 +#: src/views/dashboard/ServerAnalytic.vue:189 msgid "OS:" msgstr "OS :" @@ -1837,8 +1849,8 @@ msgid "Password length cannot exceed 20 characters" msgstr "" #: src/views/config/ConfigEditor.vue:263 -#: src/views/site/ngx_conf/LocationEditor.vue:111 -#: src/views/site/ngx_conf/LocationEditor.vue:139 +#: src/views/site/ngx_conf/LocationEditor.vue:109 +#: src/views/site/ngx_conf/LocationEditor.vue:137 msgid "Path" msgstr "Chemin" @@ -1942,7 +1954,7 @@ msgid "" "Please note that the unit of time configurations below are all in seconds." msgstr "" -#: src/views/environment/Environment.vue:48 +#: src/views/environment/Environment.vue:58 msgid "Please select at least one node to upgrade" msgstr "" @@ -2002,12 +2014,12 @@ msgid "Public Security Number" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:387 +#: src/views/dashboard/ServerAnalytic.vue:383 #, fuzzy msgid "Reads" msgstr "Lectures" -#: src/views/dashboard/ServerAnalytic.vue:338 +#: src/views/dashboard/ServerAnalytic.vue:334 #: src/views/dashboard/ServerAnalytic.vue:35 #, fuzzy msgid "Receive" @@ -2028,15 +2040,15 @@ msgid "Recovered Successfully" msgstr "Enregistré avec succès" #: src/components/TwoFA/Authorization.vue:89 -#: src/views/preference/components/TOTP.vue:172 +#: src/views/preference/components/TOTP.vue:155 msgid "Recovery" msgstr "" -#: src/views/preference/components/TOTP.vue:98 +#: src/views/preference/components/TOTP.vue:80 msgid "Recovery Code" msgstr "" -#: src/views/preference/components/TOTP.vue:107 +#: src/views/preference/components/TOTP.vue:89 msgid "Recovery Code:" msgstr "" @@ -2225,7 +2237,7 @@ msgstr "" msgid "Reset" msgstr "Réinitialiser" -#: src/views/preference/components/TOTP.vue:127 +#: src/views/preference/components/TOTP.vue:109 #, fuzzy msgid "Reset 2FA" msgstr "Réinitialiser" @@ -2317,7 +2329,7 @@ msgstr "Sauvegarde réussie" msgid "Saved successfully" msgstr "Enregistré avec succès" -#: src/views/preference/components/TOTP.vue:88 +#: src/views/preference/components/TOTP.vue:72 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "" @@ -2325,7 +2337,7 @@ msgstr "" msgid "SDK" msgstr "" -#: src/views/preference/components/TOTP.vue:144 +#: src/views/preference/components/TOTP.vue:124 msgid "Secret has been copied" msgstr "" @@ -2337,12 +2349,12 @@ msgstr "Sélecteur" msgid "Self Check" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:348 +#: src/views/dashboard/ServerAnalytic.vue:344 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Send" msgstr "Envoyer" -#: src/views/dashboard/ServerAnalytic.vue:179 +#: src/views/dashboard/ServerAnalytic.vue:175 msgid "Server Info" msgstr "Informations sur le serveur" @@ -2385,14 +2397,14 @@ msgstr "Utilisation du fournisseur de challenge HTTP01" #: src/constants/errors/nginx_log.ts:8 msgid "" -"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/constants/errors/nginx_log.ts:7 msgid "" -"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/components/SensitiveString/SensitiveString.vue:40 @@ -2435,12 +2447,14 @@ msgid "Sites List" msgstr "Liste des sites" #: src/constants/errors/self_check.ts:10 +#, fuzzy msgid "Sites-available directory not exist" -msgstr "" +msgstr "Directive" #: src/constants/errors/self_check.ts:11 +#, fuzzy msgid "Sites-enabled directory not exist" -msgstr "" +msgstr "Directive" #: src/views/certificate/CertificateEditor.vue:211 #, fuzzy @@ -2483,8 +2497,8 @@ msgstr "Statut" msgid "Stopped" msgstr "Arrêté" -#: src/views/dashboard/ServerAnalytic.vue:254 -#: src/views/dashboard/ServerAnalytic.vue:255 +#: src/views/dashboard/ServerAnalytic.vue:250 +#: src/views/dashboard/ServerAnalytic.vue:251 msgid "Storage" msgstr "Stockage" @@ -2494,8 +2508,9 @@ msgid "Streams Directory" msgstr "Directive" #: src/constants/errors/self_check.ts:12 +#, fuzzy msgid "Streams-available directory not exist" -msgstr "" +msgstr "Directive" #: src/constants/errors/self_check.ts:13 #, fuzzy @@ -2514,8 +2529,8 @@ msgid "" "guide/nginx-proxy-example.html" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:240 -#: src/views/dashboard/ServerAnalytic.vue:241 +#: src/views/dashboard/ServerAnalytic.vue:236 +#: src/views/dashboard/ServerAnalytic.vue:237 #, fuzzy msgid "Swap" msgstr "Échanger" @@ -2595,8 +2610,9 @@ msgid "Sync strategy" msgstr "Changer de certificat" #: src/views/certificate/CertificateEditor.vue:204 +#, fuzzy msgid "Sync to" -msgstr "" +msgstr "Changer de certificat" #: src/views/site/site_edit/RightSettings.vue:110 msgid "Synchronization" @@ -2648,8 +2664,9 @@ msgid "" msgstr "" #: src/views/certificate/CertificateEditor.vue:214 +#, fuzzy msgid "The input is not a SSL Certificate" -msgstr "" +msgstr "Chemin de la clé du certificat SSL" #: src/views/certificate/CertificateEditor.vue:227 #, fuzzy @@ -2679,8 +2696,9 @@ msgid "The path exists, but the file is not a certificate" msgstr "Chemin de la clé du certificat SSL" #: src/views/certificate/CertificateEditor.vue:194 +#, fuzzy msgid "The path exists, but the file is not a private key" -msgstr "" +msgstr "Chemin de la clé du certificat SSL" #: src/views/preference/BasicSettings.vue:66 msgid "" @@ -2688,7 +2706,7 @@ msgid "" "hyphens, dashes, colons, and dots." msgstr "" -#: src/views/preference/components/TOTP.vue:106 +#: src/views/preference/components/TOTP.vue:88 msgid "" "The recovery code is only displayed once, please save it in a safe place." msgstr "" @@ -2764,9 +2782,10 @@ msgid "This value is already taken" msgstr "" #: src/views/environment/BatchUpgrader.vue:182 +#, fuzzy msgid "" "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." -msgstr "" +msgstr "Dupliqué avec succès" #: src/views/preference/AuthSettings.vue:96 msgid "Throttle" @@ -2782,7 +2801,7 @@ msgstr "" msgid "Title" msgstr "" -#: src/views/preference/components/TOTP.vue:87 +#: src/views/preference/components/TOTP.vue:71 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -2824,11 +2843,11 @@ msgid_plural "Total %{total} items" msgstr[0] "" msgstr[1] "" -#: src/views/preference/components/TOTP.vue:85 +#: src/views/preference/components/TOTP.vue:69 msgid "TOTP" msgstr "" -#: src/views/preference/components/TOTP.vue:86 +#: src/views/preference/components/TOTP.vue:70 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -2868,7 +2887,7 @@ msgstr "Mis à jour le" msgid "Updated successfully" msgstr "Mis à jour avec succés" -#: src/routes/index.ts:297 src/views/environment/Environment.vue:56 +#: src/routes/index.ts:297 src/views/environment/Environment.vue:66 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226 msgid "Upgrade" msgstr "Mettre à niveau" @@ -2890,7 +2909,7 @@ msgstr "Mise à jour de Nginx UI, veuillez patienter..." msgid "Upstream Name" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:183 +#: src/views/dashboard/ServerAnalytic.vue:179 msgid "Uptime:" msgstr "Disponibilité :" @@ -3001,7 +3020,7 @@ msgid "" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:377 +#: src/views/dashboard/ServerAnalytic.vue:373 msgid "Writes" msgstr "Écritures" @@ -3016,7 +3035,7 @@ msgstr "Écriture du certificat sur le disque" #: src/views/preference/AuthSettings.vue:135 #: src/views/preference/CertSettings.vue:69 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96 -#: src/views/site/ngx_conf/LocationEditor.vue:89 +#: src/views/site/ngx_conf/LocationEditor.vue:87 msgid "Yes" msgstr "Oui" diff --git a/app/src/language/ko_KR/app.po b/app/src/language/ko_KR/app.po index 96e647cd8..f3113772c 100644 --- a/app/src/language/ko_KR/app.po +++ b/app/src/language/ko_KR/app.po @@ -72,8 +72,8 @@ msgstr "구성 추가" msgid "Add Directive Below" msgstr "아래에 지시문 추가" -#: src/views/site/ngx_conf/LocationEditor.vue:132 -#: src/views/site/ngx_conf/LocationEditor.vue:159 +#: src/views/site/ngx_conf/LocationEditor.vue:130 +#: src/views/site/ngx_conf/LocationEditor.vue:157 msgid "Add Location" msgstr "위치 추가" @@ -189,7 +189,7 @@ msgstr "이 지시문을 정말로 제거하시겠습니까?" msgid "Are you sure you want to remove this item?" msgstr "이 항목을 제거하시겠습니까?" -#: src/views/site/ngx_conf/LocationEditor.vue:88 +#: src/views/site/ngx_conf/LocationEditor.vue:86 msgid "Are you sure you want to remove this location?" msgstr "이 위치를 제거하시겠습니까?" @@ -317,10 +317,6 @@ msgstr "CA 디렉토리" msgid "CADir" msgstr "CA 디렉토리" -#: src/views/preference/components/TOTP.vue:145 -msgid "Can't scan? Use text key binding" -msgstr "" - #: src/components/ChatGPT/ChatGPT.vue:356 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187 @@ -374,7 +370,7 @@ msgid "Certificate Renewal Interval" msgstr "인증서 갱신 간격" #: src/views/certificate/CertificateEditor.vue:128 -#: src/views/site/cert/Cert.vue:32 +#: src/views/site/cert/Cert.vue:33 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "인증서 상태" @@ -398,7 +394,7 @@ msgstr "인증 방법" msgid "Change Certificate" msgstr "인증서 변경" -#: src/views/site/cert/Cert.vue:51 +#: src/views/site/cert/Cert.vue:52 #, fuzzy msgid "Changed Certificate" msgid_plural "Changed Certificates" @@ -457,13 +453,17 @@ msgstr "클리어" msgid "Cleared successfully" msgstr "성공적으로 제거됨" +#: src/views/preference/components/TOTP.vue:125 +msgid "Click to copy" +msgstr "" + #: src/views/preference/LogrotateSettings.vue:22 msgid "Command" msgstr "명령어" #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:113 -#: src/views/site/ngx_conf/LocationEditor.vue:105 -#: src/views/site/ngx_conf/LocationEditor.vue:136 +#: src/views/site/ngx_conf/LocationEditor.vue:103 +#: src/views/site/ngx_conf/LocationEditor.vue:134 #: src/views/site/ngx_conf/NgxServer.vue:134 msgid "Comments" msgstr "댓글" @@ -497,8 +497,8 @@ msgid "Connection lost, please refresh the page." msgstr "연결이 끊어졌습니다. 페이지를 새로 고침하세요." #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:118 -#: src/views/site/ngx_conf/LocationEditor.vue:117 -#: src/views/site/ngx_conf/LocationEditor.vue:145 +#: src/views/site/ngx_conf/LocationEditor.vue:115 +#: src/views/site/ngx_conf/LocationEditor.vue:143 msgid "Content" msgstr "내용" @@ -515,11 +515,11 @@ msgstr "" msgid "Core Upgrade" msgstr "코어 업그레이드" -#: src/views/dashboard/ServerAnalytic.vue:305 +#: src/views/dashboard/ServerAnalytic.vue:301 msgid "CPU Status" msgstr "CPU 상태" -#: src/views/dashboard/ServerAnalytic.vue:199 +#: src/views/dashboard/ServerAnalytic.vue:195 msgid "CPU:" msgstr "CPU:" @@ -564,11 +564,11 @@ msgstr "인증 정보" msgid "Credentials" msgstr "인증 정보들" -#: src/views/preference/components/TOTP.vue:93 +#: src/views/preference/components/TOTP.vue:75 msgid "Current account is enabled TOTP." msgstr "" -#: src/views/preference/components/TOTP.vue:90 +#: src/views/preference/components/TOTP.vue:73 msgid "Current account is not enabled TOTP." msgstr "" @@ -736,7 +736,7 @@ msgstr "비활성화됨" msgid "Disabled successfully" msgstr "성공적으로 비활성화됨" -#: src/views/dashboard/ServerAnalytic.vue:370 +#: src/views/dashboard/ServerAnalytic.vue:366 msgid "Disk IO" msgstr "디스크 IO" @@ -904,7 +904,7 @@ msgstr "%{node_name}에서 %{conf_name} 활성화 실패" msgid "Enable %{conf_name} in %{node_name} successfully" msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨" -#: src/views/preference/components/TOTP.vue:52 +#: src/views/preference/components/TOTP.vue:38 #, fuzzy msgid "Enable 2FA successfully" msgstr "성공적으로 활성화" @@ -945,7 +945,7 @@ msgstr "성공적으로 활성화" msgid "Enable TLS" msgstr "TLS 활성화" -#: src/views/preference/components/TOTP.vue:119 +#: src/views/preference/components/TOTP.vue:101 #, fuzzy msgid "Enable TOTP" msgstr "TLS 활성화" @@ -981,7 +981,7 @@ msgid "Environment variables cleaned" msgstr "환경 변수 설정" #: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83 -#: src/views/environment/Environment.vue:33 +#: src/views/environment/Environment.vue:43 msgid "Environments" msgstr "환경" @@ -1045,8 +1045,9 @@ msgid "Failed to parse nginx.conf" msgstr "" #: src/constants/errors/self_check.ts:3 +#, fuzzy msgid "Failed to read nginx.conf" -msgstr "" +msgstr "%{msg} 활성화 실패" #: src/views/site/site_edit/SiteEdit.vue:135 #: src/views/stream/StreamEdit.vue:122 @@ -1166,7 +1167,7 @@ msgid "" "ban threshold minutes, the ip will be banned for a period of time." msgstr "" -#: src/views/preference/components/TOTP.vue:105 +#: src/views/preference/components/TOTP.vue:87 msgid "" "If you lose your mobile phone, you can use the recovery code to reset your " "2FA." @@ -1204,12 +1205,12 @@ msgstr "초기 코어 업그레이더 오류" msgid "Initialing core upgrader" msgstr "코어 업그레이더 초기화" -#: src/views/preference/components/TOTP.vue:152 +#: src/views/preference/components/TOTP.vue:134 msgid "Input the code from the app:" msgstr "" #: src/components/TwoFA/Authorization.vue:82 -#: src/views/preference/components/TOTP.vue:165 +#: src/views/preference/components/TOTP.vue:148 msgid "Input the recovery code:" msgstr "" @@ -1238,8 +1239,9 @@ msgid "Invalid filename" msgstr "Invalid E-mail!" #: src/views/config/components/Mkdir.vue:57 +#, fuzzy msgid "Invalid folder name" -msgstr "" +msgstr "Invalid E-mail!" #: src/constants/errors/user.ts:4 #, fuzzy @@ -1251,8 +1253,9 @@ msgid "Invalid passcode or recovery code" msgstr "" #: src/constants/errors/user.ts:5 +#, fuzzy msgid "Invalid recovery code" -msgstr "" +msgstr "유효함" #: src/views/preference/AuthSettings.vue:14 msgid "IP" @@ -1337,16 +1340,16 @@ msgstr "링크 시작" msgid "List" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:187 +#: src/views/dashboard/ServerAnalytic.vue:183 #, fuzzy msgid "Load Average:" msgstr "부하 평균:" -#: src/views/environment/Environment.vue:39 +#: src/views/environment/Environment.vue:49 msgid "Load from settings" msgstr "" -#: src/views/environment/Environment.vue:13 +#: src/views/environment/Environment.vue:17 #, fuzzy msgid "Load successfully" msgstr "성공적으로 저장됨" @@ -1357,7 +1360,7 @@ msgstr "성공적으로 저장됨" msgid "Local" msgstr "지역" -#: src/views/site/ngx_conf/LocationEditor.vue:69 +#: src/views/site/ngx_conf/LocationEditor.vue:68 msgid "Location" msgstr "위치" @@ -1434,15 +1437,16 @@ msgid "Managed Certificate" msgstr "인증서 유효" #: src/views/preference/AuthSettings.vue:107 +#, fuzzy msgid "Max Attempts" -msgstr "" +msgstr "시도 횟수" -#: src/views/dashboard/ServerAnalytic.vue:226 -#: src/views/dashboard/ServerAnalytic.vue:227 +#: src/views/dashboard/ServerAnalytic.vue:222 +#: src/views/dashboard/ServerAnalytic.vue:223 msgid "Memory" msgstr "메모리" -#: src/views/dashboard/ServerAnalytic.vue:216 +#: src/views/dashboard/ServerAnalytic.vue:212 msgid "Memory and Storage" msgstr "메모리 및 저장소" @@ -1501,19 +1505,19 @@ msgstr "단일 지시문" msgid "Name" msgstr "이름" -#: src/views/dashboard/ServerAnalytic.vue:331 +#: src/views/dashboard/ServerAnalytic.vue:327 msgid "Network" msgstr "네트워크" -#: src/views/dashboard/ServerAnalytic.vue:273 +#: src/views/dashboard/ServerAnalytic.vue:269 msgid "Network Statistics" msgstr "네트워크 통계" -#: src/views/dashboard/ServerAnalytic.vue:280 +#: src/views/dashboard/ServerAnalytic.vue:276 msgid "Network Total Receive" msgstr "네트워크 총 수신" -#: src/views/dashboard/ServerAnalytic.vue:286 +#: src/views/dashboard/ServerAnalytic.vue:282 msgid "Network Total Send" msgstr "네트워크 총 송신" @@ -1597,8 +1601,9 @@ msgid "Nginx Log" msgstr "Nginx 로그" #: src/views/preference/NginxSettings.vue:18 +#, fuzzy msgid "Nginx Log Directory Whitelist" -msgstr "" +msgstr "Nginx 구성 오류름" #: src/views/preference/NginxSettings.vue:27 #, fuzzy @@ -1606,8 +1611,9 @@ msgid "Nginx PID Path" msgstr "Nginx 오류 로그 경로" #: src/views/preference/NginxSettings.vue:30 +#, fuzzy msgid "Nginx Reload Command" -msgstr "" +msgstr "터미널 시작 명령" #: src/components/NginxControl/NginxControl.vue:26 #, fuzzy @@ -1635,7 +1641,7 @@ msgstr "Nginx가 성공적으로 재시작됨" #: src/views/preference/AuthSettings.vue:136 #: src/views/preference/CertSettings.vue:70 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97 -#: src/views/site/ngx_conf/LocationEditor.vue:90 +#: src/views/site/ngx_conf/LocationEditor.vue:88 #: src/views/site/site_list/SiteList.vue:143 #: src/views/stream/StreamList.vue:163 msgid "No" @@ -1751,6 +1757,10 @@ msgstr "오픈AI" msgid "Or" msgstr "" +#: src/views/preference/components/TOTP.vue:127 +msgid "Or enter the secret: %{secret}" +msgstr "" + #: src/views/config/components/Rename.vue:68 msgid "Original name" msgstr "" @@ -1760,7 +1770,7 @@ msgstr "" msgid "OS" msgstr "OS" -#: src/views/dashboard/ServerAnalytic.vue:193 +#: src/views/dashboard/ServerAnalytic.vue:189 msgid "OS:" msgstr "OS:" @@ -1811,8 +1821,8 @@ msgid "Password length cannot exceed 20 characters" msgstr "" #: src/views/config/ConfigEditor.vue:263 -#: src/views/site/ngx_conf/LocationEditor.vue:111 -#: src/views/site/ngx_conf/LocationEditor.vue:139 +#: src/views/site/ngx_conf/LocationEditor.vue:109 +#: src/views/site/ngx_conf/LocationEditor.vue:137 msgid "Path" msgstr "경로" @@ -1909,7 +1919,7 @@ msgid "" "Please note that the unit of time configurations below are all in seconds." msgstr "아래의 시간 설정 단위는 모두 초 단위임을 유의해주세요." -#: src/views/environment/Environment.vue:48 +#: src/views/environment/Environment.vue:58 #, fuzzy msgid "Please select at least one node to upgrade" msgstr "적어도 하나의 노드를 선택해주세요!" @@ -1970,11 +1980,11 @@ msgid "Public Security Number" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:387 +#: src/views/dashboard/ServerAnalytic.vue:383 msgid "Reads" msgstr "읽기" -#: src/views/dashboard/ServerAnalytic.vue:338 +#: src/views/dashboard/ServerAnalytic.vue:334 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "수신" @@ -1994,15 +2004,15 @@ msgid "Recovered Successfully" msgstr "성공적으로 제거됨" #: src/components/TwoFA/Authorization.vue:89 -#: src/views/preference/components/TOTP.vue:172 +#: src/views/preference/components/TOTP.vue:155 msgid "Recovery" msgstr "" -#: src/views/preference/components/TOTP.vue:98 +#: src/views/preference/components/TOTP.vue:80 msgid "Recovery Code" msgstr "" -#: src/views/preference/components/TOTP.vue:107 +#: src/views/preference/components/TOTP.vue:89 msgid "Recovery Code:" msgstr "" @@ -2192,7 +2202,7 @@ msgstr "잘못된 매개변수로 요청됨" msgid "Reset" msgstr "재설정" -#: src/views/preference/components/TOTP.vue:127 +#: src/views/preference/components/TOTP.vue:109 #, fuzzy msgid "Reset 2FA" msgstr "재설정" @@ -2286,7 +2296,7 @@ msgstr "성공적으로 저장됨" msgid "Saved successfully" msgstr "성공적으로 저장됨" -#: src/views/preference/components/TOTP.vue:88 +#: src/views/preference/components/TOTP.vue:72 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "" @@ -2294,7 +2304,7 @@ msgstr "" msgid "SDK" msgstr "" -#: src/views/preference/components/TOTP.vue:144 +#: src/views/preference/components/TOTP.vue:124 msgid "Secret has been copied" msgstr "" @@ -2306,12 +2316,12 @@ msgstr "선택" msgid "Self Check" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:348 +#: src/views/dashboard/ServerAnalytic.vue:344 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Send" msgstr "보내기" -#: src/views/dashboard/ServerAnalytic.vue:179 +#: src/views/dashboard/ServerAnalytic.vue:175 msgid "Server Info" msgstr "서버 정보" @@ -2352,14 +2362,14 @@ msgstr "HTTP01 공급자 설정" #: src/constants/errors/nginx_log.ts:8 msgid "" -"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/constants/errors/nginx_log.ts:7 msgid "" -"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/components/SensitiveString/SensitiveString.vue:40 @@ -2403,12 +2413,14 @@ msgid "Sites List" msgstr "사이트 목록" #: src/constants/errors/self_check.ts:10 +#, fuzzy msgid "Sites-available directory not exist" -msgstr "" +msgstr "디렉토리" #: src/constants/errors/self_check.ts:11 +#, fuzzy msgid "Sites-enabled directory not exist" -msgstr "" +msgstr "디렉토리" #: src/views/certificate/CertificateEditor.vue:211 #, fuzzy @@ -2452,8 +2464,8 @@ msgstr "상태" msgid "Stopped" msgstr "정지됨" -#: src/views/dashboard/ServerAnalytic.vue:254 -#: src/views/dashboard/ServerAnalytic.vue:255 +#: src/views/dashboard/ServerAnalytic.vue:250 +#: src/views/dashboard/ServerAnalytic.vue:251 msgid "Storage" msgstr "저장소" @@ -2463,8 +2475,9 @@ msgid "Streams Directory" msgstr "디렉토리" #: src/constants/errors/self_check.ts:12 +#, fuzzy msgid "Streams-available directory not exist" -msgstr "" +msgstr "디렉토리" #: src/constants/errors/self_check.ts:13 #, fuzzy @@ -2483,8 +2496,8 @@ msgid "" "guide/nginx-proxy-example.html" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:240 -#: src/views/dashboard/ServerAnalytic.vue:241 +#: src/views/dashboard/ServerAnalytic.vue:236 +#: src/views/dashboard/ServerAnalytic.vue:237 msgid "Swap" msgstr "스왑" @@ -2563,8 +2576,9 @@ msgid "Sync strategy" msgstr "인증서 갱신" #: src/views/certificate/CertificateEditor.vue:204 +#, fuzzy msgid "Sync to" -msgstr "" +msgstr "인증서 갱신" #: src/views/site/site_edit/RightSettings.vue:110 msgid "Synchronization" @@ -2656,7 +2670,7 @@ msgid "" "hyphens, dashes, colons, and dots." msgstr "" -#: src/views/preference/components/TOTP.vue:106 +#: src/views/preference/components/TOTP.vue:88 msgid "" "The recovery code is only displayed once, please save it in a safe place." msgstr "" @@ -2732,9 +2746,10 @@ msgid "This value is already taken" msgstr "" #: src/views/environment/BatchUpgrader.vue:182 +#, fuzzy msgid "" "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." -msgstr "" +msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함" #: src/views/preference/AuthSettings.vue:96 msgid "Throttle" @@ -2750,7 +2765,7 @@ msgstr "팁" msgid "Title" msgstr "제목" -#: src/views/preference/components/TOTP.vue:87 +#: src/views/preference/components/TOTP.vue:71 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -2791,11 +2806,11 @@ msgid_plural "Total %{total} items" msgstr[0] "" msgstr[1] "" -#: src/views/preference/components/TOTP.vue:85 +#: src/views/preference/components/TOTP.vue:69 msgid "TOTP" msgstr "" -#: src/views/preference/components/TOTP.vue:86 +#: src/views/preference/components/TOTP.vue:70 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -2836,7 +2851,7 @@ msgstr "업데이트됨" msgid "Updated successfully" msgstr "성공적으로 저장되었습니다" -#: src/routes/index.ts:297 src/views/environment/Environment.vue:56 +#: src/routes/index.ts:297 src/views/environment/Environment.vue:66 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226 msgid "Upgrade" msgstr "업그레이드" @@ -2859,7 +2874,7 @@ msgstr "Nginx UI를 업그레이드하는 중입니다. 잠시 기다려주세 msgid "Upstream Name" msgstr "업스트림 이름" -#: src/views/dashboard/ServerAnalytic.vue:183 +#: src/views/dashboard/ServerAnalytic.vue:179 msgid "Uptime:" msgstr "가동 시간:" @@ -2973,7 +2988,7 @@ msgid "" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:377 +#: src/views/dashboard/ServerAnalytic.vue:373 msgid "Writes" msgstr "쓰기" @@ -2988,7 +3003,7 @@ msgstr "인증서를 디스크에 쓰기" #: src/views/preference/AuthSettings.vue:135 #: src/views/preference/CertSettings.vue:69 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96 -#: src/views/site/ngx_conf/LocationEditor.vue:89 +#: src/views/site/ngx_conf/LocationEditor.vue:87 msgid "Yes" msgstr "예" diff --git a/app/src/language/messages.pot b/app/src/language/messages.pot index 0c998e490..41ccfe3dc 100644 --- a/app/src/language/messages.pot +++ b/app/src/language/messages.pot @@ -64,8 +64,8 @@ msgstr "" msgid "Add Directive Below" msgstr "" -#: src/views/site/ngx_conf/LocationEditor.vue:132 -#: src/views/site/ngx_conf/LocationEditor.vue:159 +#: src/views/site/ngx_conf/LocationEditor.vue:130 +#: src/views/site/ngx_conf/LocationEditor.vue:157 msgid "Add Location" msgstr "" @@ -178,7 +178,7 @@ msgstr "" msgid "Are you sure you want to remove this item?" msgstr "" -#: src/views/site/ngx_conf/LocationEditor.vue:88 +#: src/views/site/ngx_conf/LocationEditor.vue:86 msgid "Are you sure you want to remove this location?" msgstr "" @@ -306,10 +306,6 @@ msgstr "" msgid "CADir" msgstr "" -#: src/views/preference/components/TOTP.vue:145 -msgid "Can't scan? Use text key binding" -msgstr "" - #: src/components/ChatGPT/ChatGPT.vue:356 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187 @@ -359,7 +355,7 @@ msgid "Certificate Renewal Interval" msgstr "" #: src/views/certificate/CertificateEditor.vue:128 -#: src/views/site/cert/Cert.vue:32 +#: src/views/site/cert/Cert.vue:33 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "" @@ -383,7 +379,7 @@ msgstr "" msgid "Change Certificate" msgstr "" -#: src/views/site/cert/Cert.vue:51 +#: src/views/site/cert/Cert.vue:52 msgid "Changed Certificate" msgid_plural "Changed Certificates" msgstr[0] "" @@ -437,13 +433,17 @@ msgstr "" msgid "Cleared successfully" msgstr "" +#: src/views/preference/components/TOTP.vue:125 +msgid "Click to copy" +msgstr "" + #: src/views/preference/LogrotateSettings.vue:22 msgid "Command" msgstr "" #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:113 -#: src/views/site/ngx_conf/LocationEditor.vue:105 -#: src/views/site/ngx_conf/LocationEditor.vue:136 +#: src/views/site/ngx_conf/LocationEditor.vue:103 +#: src/views/site/ngx_conf/LocationEditor.vue:134 #: src/views/site/ngx_conf/NgxServer.vue:134 msgid "Comments" msgstr "" @@ -477,8 +477,8 @@ msgid "Connection lost, please refresh the page." msgstr "" #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:118 -#: src/views/site/ngx_conf/LocationEditor.vue:117 -#: src/views/site/ngx_conf/LocationEditor.vue:145 +#: src/views/site/ngx_conf/LocationEditor.vue:115 +#: src/views/site/ngx_conf/LocationEditor.vue:143 msgid "Content" msgstr "" @@ -495,11 +495,11 @@ msgstr "" msgid "Core Upgrade" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:305 +#: src/views/dashboard/ServerAnalytic.vue:301 msgid "CPU Status" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:199 +#: src/views/dashboard/ServerAnalytic.vue:195 msgid "CPU:" msgstr "" @@ -543,11 +543,11 @@ msgstr "" msgid "Credentials" msgstr "" -#: src/views/preference/components/TOTP.vue:93 +#: src/views/preference/components/TOTP.vue:75 msgid "Current account is enabled TOTP." msgstr "" -#: src/views/preference/components/TOTP.vue:90 +#: src/views/preference/components/TOTP.vue:73 msgid "Current account is not enabled TOTP." msgstr "" @@ -711,7 +711,7 @@ msgstr "" msgid "Disabled successfully" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:370 +#: src/views/dashboard/ServerAnalytic.vue:366 msgid "Disk IO" msgstr "" @@ -875,7 +875,7 @@ msgstr "" msgid "Enable %{conf_name} in %{node_name} successfully" msgstr "" -#: src/views/preference/components/TOTP.vue:52 +#: src/views/preference/components/TOTP.vue:38 msgid "Enable 2FA successfully" msgstr "" @@ -911,7 +911,7 @@ msgstr "" msgid "Enable TLS" msgstr "" -#: src/views/preference/components/TOTP.vue:119 +#: src/views/preference/components/TOTP.vue:101 msgid "Enable TOTP" msgstr "" @@ -948,7 +948,7 @@ msgstr "" #: src/routes/index.ts:234 #: src/views/dashboard/Environments.vue:83 -#: src/views/environment/Environment.vue:33 +#: src/views/environment/Environment.vue:43 msgid "Environments" msgstr "" @@ -1126,7 +1126,7 @@ msgstr "" msgid "If the number of login failed attempts from a ip reach the max attempts in ban threshold minutes, the ip will be banned for a period of time." msgstr "" -#: src/views/preference/components/TOTP.vue:105 +#: src/views/preference/components/TOTP.vue:87 msgid "If you lose your mobile phone, you can use the recovery code to reset your 2FA." msgstr "" @@ -1161,12 +1161,12 @@ msgstr "" msgid "Initialing core upgrader" msgstr "" -#: src/views/preference/components/TOTP.vue:152 +#: src/views/preference/components/TOTP.vue:134 msgid "Input the code from the app:" msgstr "" #: src/components/TwoFA/Authorization.vue:82 -#: src/views/preference/components/TOTP.vue:165 +#: src/views/preference/components/TOTP.vue:148 msgid "Input the recovery code:" msgstr "" @@ -1283,15 +1283,15 @@ msgstr "" msgid "List" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:187 +#: src/views/dashboard/ServerAnalytic.vue:183 msgid "Load Average:" msgstr "" -#: src/views/environment/Environment.vue:39 +#: src/views/environment/Environment.vue:49 msgid "Load from settings" msgstr "" -#: src/views/environment/Environment.vue:13 +#: src/views/environment/Environment.vue:17 msgid "Load successfully" msgstr "" @@ -1300,7 +1300,7 @@ msgstr "" msgid "Local" msgstr "" -#: src/views/site/ngx_conf/LocationEditor.vue:69 +#: src/views/site/ngx_conf/LocationEditor.vue:68 msgid "Location" msgstr "" @@ -1368,12 +1368,12 @@ msgstr "" msgid "Max Attempts" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:226 -#: src/views/dashboard/ServerAnalytic.vue:227 +#: src/views/dashboard/ServerAnalytic.vue:222 +#: src/views/dashboard/ServerAnalytic.vue:223 msgid "Memory" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:216 +#: src/views/dashboard/ServerAnalytic.vue:212 msgid "Memory and Storage" msgstr "" @@ -1430,19 +1430,19 @@ msgstr "" msgid "Name" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:331 +#: src/views/dashboard/ServerAnalytic.vue:327 msgid "Network" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:273 +#: src/views/dashboard/ServerAnalytic.vue:269 msgid "Network Statistics" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:280 +#: src/views/dashboard/ServerAnalytic.vue:276 msgid "Network Total Receive" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:286 +#: src/views/dashboard/ServerAnalytic.vue:282 msgid "Network Total Send" msgstr "" @@ -1557,7 +1557,7 @@ msgstr "" #: src/views/preference/AuthSettings.vue:136 #: src/views/preference/CertSettings.vue:70 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97 -#: src/views/site/ngx_conf/LocationEditor.vue:90 +#: src/views/site/ngx_conf/LocationEditor.vue:88 #: src/views/site/site_list/SiteList.vue:143 #: src/views/stream/StreamList.vue:163 msgid "No" @@ -1667,6 +1667,10 @@ msgstr "" msgid "Or" msgstr "" +#: src/views/preference/components/TOTP.vue:127 +msgid "Or enter the secret: %{secret}" +msgstr "" + #: src/views/config/components/Rename.vue:68 msgid "Original name" msgstr "" @@ -1675,7 +1679,7 @@ msgstr "" msgid "OS" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:193 +#: src/views/dashboard/ServerAnalytic.vue:189 msgid "OS:" msgstr "" @@ -1723,8 +1727,8 @@ msgid "Password length cannot exceed 20 characters" msgstr "" #: src/views/config/ConfigEditor.vue:263 -#: src/views/site/ngx_conf/LocationEditor.vue:111 -#: src/views/site/ngx_conf/LocationEditor.vue:139 +#: src/views/site/ngx_conf/LocationEditor.vue:109 +#: src/views/site/ngx_conf/LocationEditor.vue:137 msgid "Path" msgstr "" @@ -1808,7 +1812,7 @@ msgstr "" msgid "Please note that the unit of time configurations below are all in seconds." msgstr "" -#: src/views/environment/Environment.vue:48 +#: src/views/environment/Environment.vue:58 msgid "Please select at least one node to upgrade" msgstr "" @@ -1867,11 +1871,11 @@ msgid "Public Security Number" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:387 +#: src/views/dashboard/ServerAnalytic.vue:383 msgid "Reads" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:338 +#: src/views/dashboard/ServerAnalytic.vue:334 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "" @@ -1890,15 +1894,15 @@ msgid "Recovered Successfully" msgstr "" #: src/components/TwoFA/Authorization.vue:89 -#: src/views/preference/components/TOTP.vue:172 +#: src/views/preference/components/TOTP.vue:155 msgid "Recovery" msgstr "" -#: src/views/preference/components/TOTP.vue:98 +#: src/views/preference/components/TOTP.vue:80 msgid "Recovery Code" msgstr "" -#: src/views/preference/components/TOTP.vue:107 +#: src/views/preference/components/TOTP.vue:89 msgid "Recovery Code:" msgstr "" @@ -2059,7 +2063,7 @@ msgstr "" msgid "Reset" msgstr "" -#: src/views/preference/components/TOTP.vue:127 +#: src/views/preference/components/TOTP.vue:109 msgid "Reset 2FA" msgstr "" @@ -2147,7 +2151,7 @@ msgstr "" msgid "Saved successfully" msgstr "" -#: src/views/preference/components/TOTP.vue:88 +#: src/views/preference/components/TOTP.vue:72 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "" @@ -2155,7 +2159,7 @@ msgstr "" msgid "SDK" msgstr "" -#: src/views/preference/components/TOTP.vue:144 +#: src/views/preference/components/TOTP.vue:124 msgid "Secret has been copied" msgstr "" @@ -2168,12 +2172,12 @@ msgstr "" msgid "Self Check" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:348 +#: src/views/dashboard/ServerAnalytic.vue:344 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Send" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:179 +#: src/views/dashboard/ServerAnalytic.vue:175 msgid "Server Info" msgstr "" @@ -2301,8 +2305,8 @@ msgstr "" msgid "Stopped" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:254 -#: src/views/dashboard/ServerAnalytic.vue:255 +#: src/views/dashboard/ServerAnalytic.vue:250 +#: src/views/dashboard/ServerAnalytic.vue:251 msgid "Storage" msgstr "" @@ -2327,8 +2331,8 @@ msgstr "" msgid "Support communication with the backend through the WebSocket protocol. If your Nginx UI is being used via an Nginx reverse proxy, please refer to this link to write the corresponding configuration file: https://nginxui.com/guide/nginx-proxy-example.html" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:240 -#: src/views/dashboard/ServerAnalytic.vue:241 +#: src/views/dashboard/ServerAnalytic.vue:236 +#: src/views/dashboard/ServerAnalytic.vue:237 msgid "Swap" msgstr "" @@ -2470,7 +2474,7 @@ msgstr "" msgid "The Public Security Number should only contain letters, unicode, numbers, hyphens, dashes, colons, and dots." msgstr "" -#: src/views/preference/components/TOTP.vue:106 +#: src/views/preference/components/TOTP.vue:88 msgid "The recovery code is only displayed once, please save it in a safe place." msgstr "" @@ -2549,7 +2553,7 @@ msgstr "" msgid "Title" msgstr "" -#: src/views/preference/components/TOTP.vue:87 +#: src/views/preference/components/TOTP.vue:71 msgid "To enable it, you need to install the Google or Microsoft Authenticator app on your mobile phone." msgstr "" @@ -2575,11 +2579,11 @@ msgid_plural "Total %{total} items" msgstr[0] "" msgstr[1] "" -#: src/views/preference/components/TOTP.vue:85 +#: src/views/preference/components/TOTP.vue:69 msgid "TOTP" msgstr "" -#: src/views/preference/components/TOTP.vue:86 +#: src/views/preference/components/TOTP.vue:70 msgid "TOTP is a two-factor authentication method that uses a time-based one-time password algorithm." msgstr "" @@ -2619,7 +2623,7 @@ msgid "Updated successfully" msgstr "" #: src/routes/index.ts:297 -#: src/views/environment/Environment.vue:56 +#: src/views/environment/Environment.vue:66 #: src/views/system/Upgrade.vue:143 #: src/views/system/Upgrade.vue:226 msgid "Upgrade" @@ -2642,7 +2646,7 @@ msgstr "" msgid "Upstream Name" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:183 +#: src/views/dashboard/ServerAnalytic.vue:179 msgid "Uptime:" msgstr "" @@ -2739,7 +2743,7 @@ msgid "When you enable/disable, delete, or save this site, the nodes set in the msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:377 +#: src/views/dashboard/ServerAnalytic.vue:373 msgid "Writes" msgstr "" @@ -2754,7 +2758,7 @@ msgstr "" #: src/views/preference/AuthSettings.vue:135 #: src/views/preference/CertSettings.vue:69 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96 -#: src/views/site/ngx_conf/LocationEditor.vue:89 +#: src/views/site/ngx_conf/LocationEditor.vue:87 msgid "Yes" msgstr "" diff --git a/app/src/language/ru_RU/app.po b/app/src/language/ru_RU/app.po index a8052efee..793298425 100644 --- a/app/src/language/ru_RU/app.po +++ b/app/src/language/ru_RU/app.po @@ -73,8 +73,8 @@ msgstr "Добавить конфигурацию" msgid "Add Directive Below" msgstr "Добавить директиву ниже" -#: src/views/site/ngx_conf/LocationEditor.vue:132 -#: src/views/site/ngx_conf/LocationEditor.vue:159 +#: src/views/site/ngx_conf/LocationEditor.vue:130 +#: src/views/site/ngx_conf/LocationEditor.vue:157 msgid "Add Location" msgstr "Добавить Location" @@ -191,7 +191,7 @@ msgstr "Вы уверены, что хотите удалить эту дире msgid "Are you sure you want to remove this item?" msgstr "Вы уверены, что хотите удалить этот элемент?" -#: src/views/site/ngx_conf/LocationEditor.vue:88 +#: src/views/site/ngx_conf/LocationEditor.vue:86 msgid "Are you sure you want to remove this location?" msgstr "Вы уверены, что хотите удалить location?" @@ -320,10 +320,6 @@ msgstr "Директория корневого сертификата" msgid "CADir" msgstr "" -#: src/views/preference/components/TOTP.vue:145 -msgid "Can't scan? Use text key binding" -msgstr "" - #: src/components/ChatGPT/ChatGPT.vue:356 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187 @@ -378,7 +374,7 @@ msgid "Certificate Renewal Interval" msgstr "Интервал обновления сертификата" #: src/views/certificate/CertificateEditor.vue:128 -#: src/views/site/cert/Cert.vue:32 +#: src/views/site/cert/Cert.vue:33 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "Статус сертификата" @@ -402,7 +398,7 @@ msgstr "Метод Challenge" msgid "Change Certificate" msgstr "Изменить сертификат" -#: src/views/site/cert/Cert.vue:51 +#: src/views/site/cert/Cert.vue:52 msgid "Changed Certificate" msgid_plural "Changed Certificates" msgstr[0] "Сертификат изменен" @@ -459,13 +455,17 @@ msgstr "Очистить" msgid "Cleared successfully" msgstr "Очищено успешно" +#: src/views/preference/components/TOTP.vue:125 +msgid "Click to copy" +msgstr "" + #: src/views/preference/LogrotateSettings.vue:22 msgid "Command" msgstr "Команда" #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:113 -#: src/views/site/ngx_conf/LocationEditor.vue:105 -#: src/views/site/ngx_conf/LocationEditor.vue:136 +#: src/views/site/ngx_conf/LocationEditor.vue:103 +#: src/views/site/ngx_conf/LocationEditor.vue:134 #: src/views/site/ngx_conf/NgxServer.vue:134 msgid "Comments" msgstr "Комментарии" @@ -499,8 +499,8 @@ msgid "Connection lost, please refresh the page." msgstr "Соединение потеряно, пожалуйста, обновите страницу." #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:118 -#: src/views/site/ngx_conf/LocationEditor.vue:117 -#: src/views/site/ngx_conf/LocationEditor.vue:145 +#: src/views/site/ngx_conf/LocationEditor.vue:115 +#: src/views/site/ngx_conf/LocationEditor.vue:143 msgid "Content" msgstr "Содержание" @@ -517,11 +517,11 @@ msgstr "Копировать" msgid "Core Upgrade" msgstr "Обновление ядра" -#: src/views/dashboard/ServerAnalytic.vue:305 +#: src/views/dashboard/ServerAnalytic.vue:301 msgid "CPU Status" msgstr "Нагрузка CPU" -#: src/views/dashboard/ServerAnalytic.vue:199 +#: src/views/dashboard/ServerAnalytic.vue:195 msgid "CPU:" msgstr "CPU:" @@ -563,12 +563,12 @@ msgstr "Учетные данные" msgid "Credentials" msgstr "Учетные данные" -#: src/views/preference/components/TOTP.vue:93 +#: src/views/preference/components/TOTP.vue:75 #, fuzzy msgid "Current account is enabled TOTP." msgstr "Текущая учетная запись имеет включенную 2ФА." -#: src/views/preference/components/TOTP.vue:90 +#: src/views/preference/components/TOTP.vue:73 #, fuzzy msgid "Current account is not enabled TOTP." msgstr "" @@ -739,7 +739,7 @@ msgstr "Отключено" msgid "Disabled successfully" msgstr "Отключено успешно" -#: src/views/dashboard/ServerAnalytic.vue:370 +#: src/views/dashboard/ServerAnalytic.vue:366 msgid "Disk IO" msgstr "Нагрузка на Диск IO" @@ -911,7 +911,7 @@ msgstr "Включение %{conf_name} in %{node_name} нипалучилася msgid "Enable %{conf_name} in %{node_name} successfully" msgstr "Включение %{conf_name} in %{node_name} успешно" -#: src/views/preference/components/TOTP.vue:52 +#: src/views/preference/components/TOTP.vue:38 msgid "Enable 2FA successfully" msgstr "Двухфакторная аутентификация успешно включена" @@ -951,7 +951,7 @@ msgstr "Включено успешно" msgid "Enable TLS" msgstr "Включить TLS" -#: src/views/preference/components/TOTP.vue:119 +#: src/views/preference/components/TOTP.vue:101 #, fuzzy msgid "Enable TOTP" msgstr "Включить TLS" @@ -986,7 +986,7 @@ msgid "Environment variables cleaned" msgstr "Переменные окружения очищены" #: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83 -#: src/views/environment/Environment.vue:33 +#: src/views/environment/Environment.vue:43 msgid "Environments" msgstr "Окружения" @@ -1048,8 +1048,9 @@ msgid "Failed to parse nginx.conf" msgstr "" #: src/constants/errors/self_check.ts:3 +#, fuzzy msgid "Failed to read nginx.conf" -msgstr "" +msgstr "Не удалось включить %{msg}" #: src/views/site/site_edit/SiteEdit.vue:135 #: src/views/stream/StreamEdit.vue:122 @@ -1170,7 +1171,7 @@ msgstr "" "количества попыток в течение пороговых минут блокировки, IP будет " "заблокирован на определенный период времени." -#: src/views/preference/components/TOTP.vue:105 +#: src/views/preference/components/TOTP.vue:87 msgid "" "If you lose your mobile phone, you can use the recovery code to reset your " "2FA." @@ -1212,12 +1213,12 @@ msgstr "Ошибка первоначального обновления ядр msgid "Initialing core upgrader" msgstr "Инициализация программы обновления ядра" -#: src/views/preference/components/TOTP.vue:152 +#: src/views/preference/components/TOTP.vue:134 msgid "Input the code from the app:" msgstr "Введите код из приложения:" #: src/components/TwoFA/Authorization.vue:82 -#: src/views/preference/components/TOTP.vue:165 +#: src/views/preference/components/TOTP.vue:148 msgid "Input the recovery code:" msgstr "Введите код восстановления:" @@ -1337,15 +1338,15 @@ msgstr "Начало ссылки" msgid "List" msgstr "Список" -#: src/views/dashboard/ServerAnalytic.vue:187 +#: src/views/dashboard/ServerAnalytic.vue:183 msgid "Load Average:" msgstr "Средняя нагрузка:" -#: src/views/environment/Environment.vue:39 +#: src/views/environment/Environment.vue:49 msgid "Load from settings" msgstr "Загрузить из настроек" -#: src/views/environment/Environment.vue:13 +#: src/views/environment/Environment.vue:17 msgid "Load successfully" msgstr "Загружено успешно" @@ -1354,7 +1355,7 @@ msgstr "Загружено успешно" msgid "Local" msgstr "Локальный" -#: src/views/site/ngx_conf/LocationEditor.vue:69 +#: src/views/site/ngx_conf/LocationEditor.vue:68 msgid "Location" msgstr "Локация" @@ -1431,12 +1432,12 @@ msgstr "Управление сертификатом" msgid "Max Attempts" msgstr "Максимальное количество попыток" -#: src/views/dashboard/ServerAnalytic.vue:226 -#: src/views/dashboard/ServerAnalytic.vue:227 +#: src/views/dashboard/ServerAnalytic.vue:222 +#: src/views/dashboard/ServerAnalytic.vue:223 msgid "Memory" msgstr "Память" -#: src/views/dashboard/ServerAnalytic.vue:216 +#: src/views/dashboard/ServerAnalytic.vue:212 msgid "Memory and Storage" msgstr "Память и хранилище" @@ -1490,19 +1491,19 @@ msgstr "Многострочная директива" msgid "Name" msgstr "Имя" -#: src/views/dashboard/ServerAnalytic.vue:331 +#: src/views/dashboard/ServerAnalytic.vue:327 msgid "Network" msgstr "Сеть" -#: src/views/dashboard/ServerAnalytic.vue:273 +#: src/views/dashboard/ServerAnalytic.vue:269 msgid "Network Statistics" msgstr "Статистика сети" -#: src/views/dashboard/ServerAnalytic.vue:280 +#: src/views/dashboard/ServerAnalytic.vue:276 msgid "Network Total Receive" msgstr "Всего получено" -#: src/views/dashboard/ServerAnalytic.vue:286 +#: src/views/dashboard/ServerAnalytic.vue:282 msgid "Network Total Send" msgstr "Всего отправлено" @@ -1619,7 +1620,7 @@ msgstr "Nginx успешно перезапущен" #: src/views/preference/AuthSettings.vue:136 #: src/views/preference/CertSettings.vue:70 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97 -#: src/views/site/ngx_conf/LocationEditor.vue:90 +#: src/views/site/ngx_conf/LocationEditor.vue:88 #: src/views/site/site_list/SiteList.vue:143 #: src/views/stream/StreamList.vue:163 msgid "No" @@ -1631,8 +1632,9 @@ msgid "Node name" msgstr "Новое имя" #: src/views/preference/BasicSettings.vue:23 +#, fuzzy msgid "Node Secret" -msgstr "" +msgstr "Jwt секрет" #: src/views/certificate/CertificateList/certColumns.tsx:91 msgid "Not After" @@ -1734,6 +1736,10 @@ msgstr "OpenAI" msgid "Or" msgstr "" +#: src/views/preference/components/TOTP.vue:127 +msgid "Or enter the secret: %{secret}" +msgstr "" + #: src/views/config/components/Rename.vue:68 msgid "Original name" msgstr "Оригинальное имя" @@ -1742,7 +1748,7 @@ msgstr "Оригинальное имя" msgid "OS" msgstr "ОС" -#: src/views/dashboard/ServerAnalytic.vue:193 +#: src/views/dashboard/ServerAnalytic.vue:189 msgid "OS:" msgstr "OS:" @@ -1766,8 +1772,9 @@ msgid "Params" msgstr "Параметры" #: src/views/preference/components/Passkey.vue:59 +#, fuzzy msgid "Passkey" -msgstr "" +msgstr "Добавить ключ доступа" #: src/views/preference/components/Passkey.vue:62 msgid "" @@ -1794,8 +1801,8 @@ msgid "Password length cannot exceed 20 characters" msgstr "" #: src/views/config/ConfigEditor.vue:263 -#: src/views/site/ngx_conf/LocationEditor.vue:111 -#: src/views/site/ngx_conf/LocationEditor.vue:139 +#: src/views/site/ngx_conf/LocationEditor.vue:109 +#: src/views/site/ngx_conf/LocationEditor.vue:137 msgid "Path" msgstr "Путь" @@ -1899,7 +1906,7 @@ msgstr "" "Обратите внимание, что единица измерения времени в конфигурациях ниже " "указана в секундах." -#: src/views/environment/Environment.vue:48 +#: src/views/environment/Environment.vue:58 msgid "Please select at least one node to upgrade" msgstr "Пожалуйста, выберите хотя бы один узел" @@ -1951,19 +1958,20 @@ msgid "Provider" msgstr "Провайдер" #: src/views/certificate/ACMEUser.vue:51 +#, fuzzy msgid "Proxy" -msgstr "" +msgstr "API Прокси" #: src/views/preference/BasicSettings.vue:63 msgid "Public Security Number" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:387 +#: src/views/dashboard/ServerAnalytic.vue:383 msgid "Reads" msgstr "Чтение" -#: src/views/dashboard/ServerAnalytic.vue:338 +#: src/views/dashboard/ServerAnalytic.vue:334 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "Принято" @@ -1982,15 +1990,15 @@ msgid "Recovered Successfully" msgstr "Восстановлено успешно" #: src/components/TwoFA/Authorization.vue:89 -#: src/views/preference/components/TOTP.vue:172 +#: src/views/preference/components/TOTP.vue:155 msgid "Recovery" msgstr "Восстановление" -#: src/views/preference/components/TOTP.vue:98 +#: src/views/preference/components/TOTP.vue:80 msgid "Recovery Code" msgstr "Код восстановления" -#: src/views/preference/components/TOTP.vue:107 +#: src/views/preference/components/TOTP.vue:89 msgid "Recovery Code:" msgstr "Код восстановления:" @@ -2094,8 +2102,8 @@ msgstr "Переименовать" msgid "" "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: %{resp}" msgstr "" -"Переименование %{orig_path} в %{new_path} на %{env_name} не удалось, ответ: %" -"{resp}" +"Переименование %{orig_path} в %{new_path} на %{env_name} не удалось, ответ: " +"%{resp}" #: src/components/Notification/config.ts:20 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully" @@ -2165,7 +2173,7 @@ msgstr "Запрос с неправильными параметрами" msgid "Reset" msgstr "Сброс" -#: src/views/preference/components/TOTP.vue:127 +#: src/views/preference/components/TOTP.vue:109 msgid "Reset 2FA" msgstr "Сброс 2FA" @@ -2236,8 +2244,8 @@ msgstr "Переименование удаленной конфигурации #, fuzzy msgid "Save site %{site} to %{node} error, response: %{resp}" msgstr "" -"Синхронизация сертификата %{cert_name} с %{env_name} не удалась, ответ: %" -"{resp}" +"Синхронизация сертификата %{cert_name} с %{env_name} не удалась, ответ: " +"%{resp}" #: src/components/Notification/config.ts:35 #, fuzzy @@ -2258,7 +2266,7 @@ msgstr "Сохранено успешно" msgid "Saved successfully" msgstr "Успешно сохранено" -#: src/views/preference/components/TOTP.vue:88 +#: src/views/preference/components/TOTP.vue:72 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "" "Отсканируйте QR-код с помощью мобильного телефона, чтобы добавить учетную " @@ -2268,7 +2276,7 @@ msgstr "" msgid "SDK" msgstr "SDK" -#: src/views/preference/components/TOTP.vue:144 +#: src/views/preference/components/TOTP.vue:124 msgid "Secret has been copied" msgstr "" @@ -2280,12 +2288,12 @@ msgstr "Выбор" msgid "Self Check" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:348 +#: src/views/dashboard/ServerAnalytic.vue:344 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Send" msgstr "Отправлено" -#: src/views/dashboard/ServerAnalytic.vue:179 +#: src/views/dashboard/ServerAnalytic.vue:175 msgid "Server Info" msgstr "Информация о сервере" @@ -2328,14 +2336,14 @@ msgstr "Настройка провайдера проверки HTTP01" #: src/constants/errors/nginx_log.ts:8 msgid "" -"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/constants/errors/nginx_log.ts:7 msgid "" -"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/components/SensitiveString/SensitiveString.vue:40 @@ -2343,16 +2351,18 @@ msgid "Show" msgstr "Показать" #: src/views/other/Login.vue:240 +#, fuzzy msgid "Sign in with a passkey" -msgstr "" +msgstr "Аутентификация с помощью ключа доступа" #: src/views/site/ngx_conf/directive/DirectiveAdd.vue:65 msgid "Single Directive" msgstr "Одиночная Директива" #: src/routes/index.ts:71 src/views/site/site_category/SiteCategory.vue:10 +#, fuzzy msgid "Site Categories" -msgstr "" +msgstr "Категория" #: src/constants/errors/site.ts:4 #, fuzzy @@ -2378,12 +2388,14 @@ msgid "Sites List" msgstr "Список сайтов" #: src/constants/errors/self_check.ts:10 +#, fuzzy msgid "Sites-available directory not exist" -msgstr "" +msgstr "Каталог" #: src/constants/errors/self_check.ts:11 +#, fuzzy msgid "Sites-enabled directory not exist" -msgstr "" +msgstr "Каталог" #: src/views/certificate/CertificateEditor.vue:211 msgid "SSL Certificate Content" @@ -2422,8 +2434,8 @@ msgstr "Статус" msgid "Stopped" msgstr "Остановлен" -#: src/views/dashboard/ServerAnalytic.vue:254 -#: src/views/dashboard/ServerAnalytic.vue:255 +#: src/views/dashboard/ServerAnalytic.vue:250 +#: src/views/dashboard/ServerAnalytic.vue:251 msgid "Storage" msgstr "Хранилище" @@ -2433,8 +2445,9 @@ msgid "Streams Directory" msgstr "Каталог" #: src/constants/errors/self_check.ts:12 +#, fuzzy msgid "Streams-available directory not exist" -msgstr "" +msgstr "Каталог" #: src/constants/errors/self_check.ts:13 #, fuzzy @@ -2453,8 +2466,8 @@ msgid "" "guide/nginx-proxy-example.html" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:240 -#: src/views/dashboard/ServerAnalytic.vue:241 +#: src/views/dashboard/ServerAnalytic.vue:236 +#: src/views/dashboard/ServerAnalytic.vue:237 msgid "Swap" msgstr "Своп" @@ -2485,8 +2498,8 @@ msgstr "" #: src/components/Notification/cert.ts:14 msgid "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}" msgstr "" -"Синхронизация сертификата %{cert_name} с %{env_name} не удалась, ответ: %" -"{resp}" +"Синхронизация сертификата %{cert_name} с %{env_name} не удалась, ответ: " +"%{resp}" #: src/components/Notification/cert.ts:4 msgid "Sync Certificate %{cert_name} to %{env_name} successfully" @@ -2503,8 +2516,8 @@ msgstr "Сертификат успешно синхронизирован" #: src/components/Notification/config.ts:14 msgid "Sync config %{config_name} to %{env_name} failed, response: %{resp}" msgstr "" -"Синхронизация конфигурации %{config_name} с %{env_name} не удалась, ответ: %" -"{resp}" +"Синхронизация конфигурации %{config_name} с %{env_name} не удалась, ответ: " +"%{resp}" #: src/components/Notification/config.ts:4 msgid "Sync Config %{config_name} to %{env_name} successfully" @@ -2633,7 +2646,7 @@ msgstr "" "Имя сервера должно содержать только буквы, юникод, цифры, дефисы, тире и " "точки." -#: src/views/preference/components/TOTP.vue:106 +#: src/views/preference/components/TOTP.vue:88 msgid "" "The recovery code is only displayed once, please save it in a safe place." msgstr "" @@ -2717,8 +2730,8 @@ msgstr "" msgid "" "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." msgstr "" -"Это обновит или переустановит интерфейс Nginx на %{nodeNames} до версии %" -"{version}." +"Это обновит или переустановит интерфейс Nginx на %{nodeNames} до версии " +"%{version}." #: src/views/preference/AuthSettings.vue:96 msgid "Throttle" @@ -2734,7 +2747,7 @@ msgstr "Советы" msgid "Title" msgstr "Заголовок" -#: src/views/preference/components/TOTP.vue:87 +#: src/views/preference/components/TOTP.vue:71 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -2778,11 +2791,11 @@ msgid_plural "Total %{total} items" msgstr[0] "" msgstr[1] "" -#: src/views/preference/components/TOTP.vue:85 +#: src/views/preference/components/TOTP.vue:69 msgid "TOTP" msgstr "" -#: src/views/preference/components/TOTP.vue:86 +#: src/views/preference/components/TOTP.vue:70 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -2824,7 +2837,7 @@ msgstr "Обновлено в" msgid "Updated successfully" msgstr "Успешно обновлено" -#: src/routes/index.ts:297 src/views/environment/Environment.vue:56 +#: src/routes/index.ts:297 src/views/environment/Environment.vue:66 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226 msgid "Upgrade" msgstr "Обновление" @@ -2845,7 +2858,7 @@ msgstr "Обновление Nginx UI, подождите..." msgid "Upstream Name" msgstr "Имя Upstream" -#: src/views/dashboard/ServerAnalytic.vue:183 +#: src/views/dashboard/ServerAnalytic.vue:179 msgid "Uptime:" msgstr "Аптайм:" @@ -2955,7 +2968,7 @@ msgid "" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:377 +#: src/views/dashboard/ServerAnalytic.vue:373 msgid "Writes" msgstr "Запись" @@ -2970,7 +2983,7 @@ msgstr "Запись сертификата на диск" #: src/views/preference/AuthSettings.vue:135 #: src/views/preference/CertSettings.vue:69 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96 -#: src/views/site/ngx_conf/LocationEditor.vue:89 +#: src/views/site/ngx_conf/LocationEditor.vue:87 msgid "Yes" msgstr "Да" @@ -2989,8 +3002,9 @@ msgid "" msgstr "" #: src/views/preference/components/Passkey.vue:75 +#, fuzzy msgid "Your passkeys" -msgstr "" +msgstr "Добавить ключ доступа" #~ msgid "Directory" #~ msgstr "Каталог" diff --git a/app/src/language/tr_TR/app.po b/app/src/language/tr_TR/app.po index c390569c5..d31594d73 100644 --- a/app/src/language/tr_TR/app.po +++ b/app/src/language/tr_TR/app.po @@ -70,8 +70,8 @@ msgstr "Yapılandırma Ekle" msgid "Add Directive Below" msgstr "Direktifi Aşağıya Ekleyin" -#: src/views/site/ngx_conf/LocationEditor.vue:132 -#: src/views/site/ngx_conf/LocationEditor.vue:159 +#: src/views/site/ngx_conf/LocationEditor.vue:130 +#: src/views/site/ngx_conf/LocationEditor.vue:157 msgid "Add Location" msgstr "Konum ekle" @@ -187,7 +187,7 @@ msgstr "Bu yönergeyi kaldırmak istediğinizden emin misiniz?" msgid "Are you sure you want to remove this item?" msgstr "Bu öğeyi kaldırmak istediğinizden emin misiniz?" -#: src/views/site/ngx_conf/LocationEditor.vue:88 +#: src/views/site/ngx_conf/LocationEditor.vue:86 msgid "Are you sure you want to remove this location?" msgstr "Bu konumu kaldırmak istediğinizden emin misiniz?" @@ -315,10 +315,6 @@ msgstr "CA Dizini" msgid "CADir" msgstr "CADizini" -#: src/views/preference/components/TOTP.vue:145 -msgid "Can't scan? Use text key binding" -msgstr "Tarayamıyor musunuz? Metin anahtar bağlamasını kullanın" - #: src/components/ChatGPT/ChatGPT.vue:356 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187 @@ -372,7 +368,7 @@ msgid "Certificate Renewal Interval" msgstr "Sertifika Yenileme Aralığı" #: src/views/certificate/CertificateEditor.vue:128 -#: src/views/site/cert/Cert.vue:32 +#: src/views/site/cert/Cert.vue:33 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "Sertifika Durumu" @@ -396,7 +392,7 @@ msgstr "Doğrulama Yöntemi" msgid "Change Certificate" msgstr "Sertifika Değiştir" -#: src/views/site/cert/Cert.vue:51 +#: src/views/site/cert/Cert.vue:52 msgid "Changed Certificate" msgid_plural "Changed Certificates" msgstr[0] "Değişen Sertifika" @@ -453,13 +449,17 @@ msgstr "Temizle" msgid "Cleared successfully" msgstr "Başarıyla temizlendi" +#: src/views/preference/components/TOTP.vue:125 +msgid "Click to copy" +msgstr "" + #: src/views/preference/LogrotateSettings.vue:22 msgid "Command" msgstr "Komut" #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:113 -#: src/views/site/ngx_conf/LocationEditor.vue:105 -#: src/views/site/ngx_conf/LocationEditor.vue:136 +#: src/views/site/ngx_conf/LocationEditor.vue:103 +#: src/views/site/ngx_conf/LocationEditor.vue:134 #: src/views/site/ngx_conf/NgxServer.vue:134 msgid "Comments" msgstr "Yorumlar" @@ -493,8 +493,8 @@ msgid "Connection lost, please refresh the page." msgstr "Bağlantı kesildi, lütfen sayfayı yenileyin." #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:118 -#: src/views/site/ngx_conf/LocationEditor.vue:117 -#: src/views/site/ngx_conf/LocationEditor.vue:145 +#: src/views/site/ngx_conf/LocationEditor.vue:115 +#: src/views/site/ngx_conf/LocationEditor.vue:143 msgid "Content" msgstr "İçerik" @@ -511,11 +511,11 @@ msgstr "Kopya" msgid "Core Upgrade" msgstr "Çekirdek Yükseltme" -#: src/views/dashboard/ServerAnalytic.vue:305 +#: src/views/dashboard/ServerAnalytic.vue:301 msgid "CPU Status" msgstr "CPU Durumu" -#: src/views/dashboard/ServerAnalytic.vue:199 +#: src/views/dashboard/ServerAnalytic.vue:195 msgid "CPU:" msgstr "CPU:" @@ -557,11 +557,11 @@ msgstr "Kimlik bilgisi" msgid "Credentials" msgstr "Kimlik bilgileri" -#: src/views/preference/components/TOTP.vue:93 +#: src/views/preference/components/TOTP.vue:75 msgid "Current account is enabled TOTP." msgstr "Mevcut hesap için TOTP etkinleştirildi." -#: src/views/preference/components/TOTP.vue:90 +#: src/views/preference/components/TOTP.vue:73 msgid "Current account is not enabled TOTP." msgstr "Mevcut hesap için TOTP etkin değil." @@ -735,7 +735,7 @@ msgstr "Devre dışı" msgid "Disabled successfully" msgstr "Başarıyla devre dışı bırakıldı" -#: src/views/dashboard/ServerAnalytic.vue:370 +#: src/views/dashboard/ServerAnalytic.vue:366 msgid "Disk IO" msgstr "Disk IO" @@ -909,7 +909,7 @@ msgstr "" "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı " "oldu" -#: src/views/preference/components/TOTP.vue:52 +#: src/views/preference/components/TOTP.vue:38 msgid "Enable 2FA successfully" msgstr "2FA'yı başarıyla etkinleştirildi" @@ -953,7 +953,7 @@ msgstr "Başarıyla etkinleştirildi" msgid "Enable TLS" msgstr "TLS'yi Etkinleştir" -#: src/views/preference/components/TOTP.vue:119 +#: src/views/preference/components/TOTP.vue:101 msgid "Enable TOTP" msgstr "TOTP'yi Etkinleştir" @@ -987,7 +987,7 @@ msgid "Environment variables cleaned" msgstr "Ortam değişkenleri temizlendi" #: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83 -#: src/views/environment/Environment.vue:33 +#: src/views/environment/Environment.vue:43 msgid "Environments" msgstr "Ortamlar" @@ -1049,8 +1049,9 @@ msgid "Failed to parse nginx.conf" msgstr "" #: src/constants/errors/self_check.ts:3 +#, fuzzy msgid "Failed to read nginx.conf" -msgstr "" +msgstr "Etkinleştirilemedi %{msg}" #: src/views/site/site_edit/SiteEdit.vue:135 #: src/views/stream/StreamEdit.vue:122 @@ -1171,7 +1172,7 @@ msgstr "" "yasaklama eşiği dakikaları içinde maksimum deneme sayısına ulaşırsa, IP " "adresi belirli bir süre için yasaklanacaktır." -#: src/views/preference/components/TOTP.vue:105 +#: src/views/preference/components/TOTP.vue:87 msgid "" "If you lose your mobile phone, you can use the recovery code to reset your " "2FA." @@ -1214,12 +1215,12 @@ msgstr "İlk çekirdek yükseltici hatası" msgid "Initialing core upgrader" msgstr "Çekirdek yükseltici başlatılıyor" -#: src/views/preference/components/TOTP.vue:152 +#: src/views/preference/components/TOTP.vue:134 msgid "Input the code from the app:" msgstr "Uygulamadan kodu girin:" #: src/components/TwoFA/Authorization.vue:82 -#: src/views/preference/components/TOTP.vue:165 +#: src/views/preference/components/TOTP.vue:148 msgid "Input the recovery code:" msgstr "Kurtarma kodunu girin:" @@ -1338,15 +1339,15 @@ msgstr "Bağlantı Başlat" msgid "List" msgstr "Liste" -#: src/views/dashboard/ServerAnalytic.vue:187 +#: src/views/dashboard/ServerAnalytic.vue:183 msgid "Load Average:" msgstr "Yük Ortalaması:" -#: src/views/environment/Environment.vue:39 +#: src/views/environment/Environment.vue:49 msgid "Load from settings" msgstr "Ayarlar'dan yükle" -#: src/views/environment/Environment.vue:13 +#: src/views/environment/Environment.vue:17 msgid "Load successfully" msgstr "Başarıyla yüklendi" @@ -1355,7 +1356,7 @@ msgstr "Başarıyla yüklendi" msgid "Local" msgstr "Yerel" -#: src/views/site/ngx_conf/LocationEditor.vue:69 +#: src/views/site/ngx_conf/LocationEditor.vue:68 msgid "Location" msgstr "Konum" @@ -1439,13 +1440,13 @@ msgstr "Yönetilen Sertifika" msgid "Max Attempts" msgstr "Maksimum Deneme" -#: src/views/dashboard/ServerAnalytic.vue:226 -#: src/views/dashboard/ServerAnalytic.vue:227 +#: src/views/dashboard/ServerAnalytic.vue:222 +#: src/views/dashboard/ServerAnalytic.vue:223 #, fuzzy msgid "Memory" msgstr "Hafıza" -#: src/views/dashboard/ServerAnalytic.vue:216 +#: src/views/dashboard/ServerAnalytic.vue:212 #, fuzzy msgid "Memory and Storage" msgstr "Bellek ve Depolama" @@ -1508,22 +1509,22 @@ msgstr "Çok Hatlı Direktif" msgid "Name" msgstr "İsim" -#: src/views/dashboard/ServerAnalytic.vue:331 +#: src/views/dashboard/ServerAnalytic.vue:327 #, fuzzy msgid "Network" msgstr "Ağ" -#: src/views/dashboard/ServerAnalytic.vue:273 +#: src/views/dashboard/ServerAnalytic.vue:269 #, fuzzy msgid "Network Statistics" msgstr "Ağ İstatistikleri" -#: src/views/dashboard/ServerAnalytic.vue:280 +#: src/views/dashboard/ServerAnalytic.vue:276 #, fuzzy msgid "Network Total Receive" msgstr "Ağ Toplam Alım" -#: src/views/dashboard/ServerAnalytic.vue:286 +#: src/views/dashboard/ServerAnalytic.vue:282 #, fuzzy msgid "Network Total Send" msgstr "Ağ Toplam Gönderme" @@ -1616,8 +1617,9 @@ msgid "Nginx Log" msgstr "Nginx Günlüğü" #: src/views/preference/NginxSettings.vue:18 +#, fuzzy msgid "Nginx Log Directory Whitelist" -msgstr "" +msgstr "Nginx Yapılandırma Ayrıştırma Hatası" #: src/views/preference/NginxSettings.vue:27 #, fuzzy @@ -1625,8 +1627,9 @@ msgid "Nginx PID Path" msgstr "Nginx Hata Günlüğü Yolu" #: src/views/preference/NginxSettings.vue:30 +#, fuzzy msgid "Nginx Reload Command" -msgstr "" +msgstr "Terminal Başlatma Komutu" #: src/components/NginxControl/NginxControl.vue:26 #, fuzzy @@ -1654,7 +1657,7 @@ msgstr "Nginx başarıyla yeniden başlatıldı" #: src/views/preference/AuthSettings.vue:136 #: src/views/preference/CertSettings.vue:70 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97 -#: src/views/site/ngx_conf/LocationEditor.vue:90 +#: src/views/site/ngx_conf/LocationEditor.vue:88 #: src/views/site/site_list/SiteList.vue:143 #: src/views/stream/StreamList.vue:163 #, fuzzy @@ -1788,6 +1791,10 @@ msgstr "OpenAI" msgid "Or" msgstr "Veya" +#: src/views/preference/components/TOTP.vue:127 +msgid "Or enter the secret: %{secret}" +msgstr "" + #: src/views/config/components/Rename.vue:68 #, fuzzy msgid "Original name" @@ -1798,7 +1805,7 @@ msgstr "Gerçek Adı" msgid "OS" msgstr "OS" -#: src/views/dashboard/ServerAnalytic.vue:193 +#: src/views/dashboard/ServerAnalytic.vue:189 #, fuzzy msgid "OS:" msgstr "İŞLETIM SISTEMI:" @@ -1861,8 +1868,8 @@ msgid "Password length cannot exceed 20 characters" msgstr "" #: src/views/config/ConfigEditor.vue:263 -#: src/views/site/ngx_conf/LocationEditor.vue:111 -#: src/views/site/ngx_conf/LocationEditor.vue:139 +#: src/views/site/ngx_conf/LocationEditor.vue:109 +#: src/views/site/ngx_conf/LocationEditor.vue:137 #, fuzzy msgid "Path" msgstr "Yol" @@ -1982,7 +1989,7 @@ msgstr "" "Lütfen aşağıdaki zaman birimi konfigürasyonlarının tümünün saniye cinsinden " "olduğunu unutmayın." -#: src/views/environment/Environment.vue:48 +#: src/views/environment/Environment.vue:58 #, fuzzy msgid "Please select at least one node to upgrade" msgstr "Lütfen yükseltmek için en az bir düğüm seçin" @@ -2052,12 +2059,12 @@ msgid "Public Security Number" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:387 +#: src/views/dashboard/ServerAnalytic.vue:383 #, fuzzy msgid "Reads" msgstr "Okumalar" -#: src/views/dashboard/ServerAnalytic.vue:338 +#: src/views/dashboard/ServerAnalytic.vue:334 #: src/views/dashboard/ServerAnalytic.vue:35 #, fuzzy msgid "Receive" @@ -2079,17 +2086,17 @@ msgid "Recovered Successfully" msgstr "Başarıyla Kurtarıldı" #: src/components/TwoFA/Authorization.vue:89 -#: src/views/preference/components/TOTP.vue:172 +#: src/views/preference/components/TOTP.vue:155 #, fuzzy msgid "Recovery" msgstr "Kurtarma" -#: src/views/preference/components/TOTP.vue:98 +#: src/views/preference/components/TOTP.vue:80 #, fuzzy msgid "Recovery Code" msgstr "Kurtarma Kodu" -#: src/views/preference/components/TOTP.vue:107 +#: src/views/preference/components/TOTP.vue:89 #, fuzzy msgid "Recovery Code:" msgstr "Kurtarma Kodu:" @@ -2298,7 +2305,7 @@ msgstr "Yanlış parametrelerle talep edildi" msgid "Reset" msgstr "Sıfırla" -#: src/views/preference/components/TOTP.vue:127 +#: src/views/preference/components/TOTP.vue:109 #, fuzzy msgid "Reset 2FA" msgstr "2FA'yı Sıfırla" @@ -2401,7 +2408,7 @@ msgstr "Başarıyla kaydedin" msgid "Saved successfully" msgstr "Başarıyla Kaydedildi" -#: src/views/preference/components/TOTP.vue:88 +#: src/views/preference/components/TOTP.vue:72 #, fuzzy msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "Hesabı uygulamaya eklemek için QR kodunu cep telefonunuzla tarayın." @@ -2411,7 +2418,7 @@ msgstr "Hesabı uygulamaya eklemek için QR kodunu cep telefonunuzla tarayın." msgid "SDK" msgstr "SDK" -#: src/views/preference/components/TOTP.vue:144 +#: src/views/preference/components/TOTP.vue:124 #, fuzzy msgid "Secret has been copied" msgstr "Sır kopyalandı" @@ -2425,13 +2432,13 @@ msgstr "Selektör" msgid "Self Check" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:348 +#: src/views/dashboard/ServerAnalytic.vue:344 #: src/views/dashboard/ServerAnalytic.vue:35 #, fuzzy msgid "Send" msgstr "Gönder" -#: src/views/dashboard/ServerAnalytic.vue:179 +#: src/views/dashboard/ServerAnalytic.vue:175 #, fuzzy msgid "Server Info" msgstr "Sunucu Bilgisi" @@ -2481,14 +2488,14 @@ msgstr "HTTP01 meydan okuma sağlayıcısını ayarlama" #: src/constants/errors/nginx_log.ts:8 msgid "" -"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/constants/errors/nginx_log.ts:7 msgid "" -"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/components/SensitiveString/SensitiveString.vue:40 @@ -2536,12 +2543,14 @@ msgid "Sites List" msgstr "Site Listesi" #: src/constants/errors/self_check.ts:10 +#, fuzzy msgid "Sites-available directory not exist" -msgstr "" +msgstr "Dizin" #: src/constants/errors/self_check.ts:11 +#, fuzzy msgid "Sites-enabled directory not exist" -msgstr "" +msgstr "Dizin" #: src/views/certificate/CertificateEditor.vue:211 #, fuzzy @@ -2588,8 +2597,8 @@ msgstr "Durum" msgid "Stopped" msgstr "Durduruldu" -#: src/views/dashboard/ServerAnalytic.vue:254 -#: src/views/dashboard/ServerAnalytic.vue:255 +#: src/views/dashboard/ServerAnalytic.vue:250 +#: src/views/dashboard/ServerAnalytic.vue:251 #, fuzzy msgid "Storage" msgstr "Depolama" @@ -2600,8 +2609,9 @@ msgid "Streams Directory" msgstr "Dizin" #: src/constants/errors/self_check.ts:12 +#, fuzzy msgid "Streams-available directory not exist" -msgstr "" +msgstr "Dizin" #: src/constants/errors/self_check.ts:13 #, fuzzy @@ -2621,8 +2631,8 @@ msgid "" "guide/nginx-proxy-example.html" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:240 -#: src/views/dashboard/ServerAnalytic.vue:241 +#: src/views/dashboard/ServerAnalytic.vue:236 +#: src/views/dashboard/ServerAnalytic.vue:237 #, fuzzy msgid "Swap" msgstr "Değiştir" @@ -2824,7 +2834,7 @@ msgstr "" "Sunucu adı yalnızca harf, unicode, sayı, kısa çizgi, tire ve nokta " "içermelidir." -#: src/views/preference/components/TOTP.vue:106 +#: src/views/preference/components/TOTP.vue:88 #, fuzzy msgid "" "The recovery code is only displayed once, please save it in a safe place." @@ -2937,7 +2947,7 @@ msgstr "İpuçları" msgid "Title" msgstr "Başlık" -#: src/views/preference/components/TOTP.vue:87 +#: src/views/preference/components/TOTP.vue:71 #, fuzzy msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " @@ -2992,12 +3002,12 @@ msgid_plural "Total %{total} items" msgstr[0] "" msgstr[1] "" -#: src/views/preference/components/TOTP.vue:85 +#: src/views/preference/components/TOTP.vue:69 #, fuzzy msgid "TOTP" msgstr "TOTP" -#: src/views/preference/components/TOTP.vue:86 +#: src/views/preference/components/TOTP.vue:70 #, fuzzy msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " @@ -3045,7 +3055,7 @@ msgstr "Güncelleme" msgid "Updated successfully" msgstr "Başarıyla güncellendi" -#: src/routes/index.ts:297 src/views/environment/Environment.vue:56 +#: src/routes/index.ts:297 src/views/environment/Environment.vue:66 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226 #, fuzzy msgid "Upgrade" @@ -3071,7 +3081,7 @@ msgstr "Nginx kullanıcı arayüzü yükseltiliyor, lütfen bekleyin..." msgid "Upstream Name" msgstr "Yukarı Akış Adı" -#: src/views/dashboard/ServerAnalytic.vue:183 +#: src/views/dashboard/ServerAnalytic.vue:179 #, fuzzy msgid "Uptime:" msgstr "Çalışma süresi:" @@ -3200,7 +3210,7 @@ msgid "" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:377 +#: src/views/dashboard/ServerAnalytic.vue:373 #, fuzzy msgid "Writes" msgstr "Yazıyor" @@ -3218,7 +3228,7 @@ msgstr "Sertifikayı diske yazma" #: src/views/preference/AuthSettings.vue:135 #: src/views/preference/CertSettings.vue:69 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96 -#: src/views/site/ngx_conf/LocationEditor.vue:89 +#: src/views/site/ngx_conf/LocationEditor.vue:87 #, fuzzy msgid "Yes" msgstr "Evet" @@ -3247,6 +3257,9 @@ msgstr "" msgid "Your passkeys" msgstr "Geçiş anahtarlarınız" +#~ msgid "Can't scan? Use text key binding" +#~ msgstr "Tarayamıyor musunuz? Metin anahtar bağlamasını kullanın" + #~ msgid "Directory" #~ msgstr "Dizin" diff --git a/app/src/language/vi_VN/app.po b/app/src/language/vi_VN/app.po index d3c60239f..a87bfe574 100644 --- a/app/src/language/vi_VN/app.po +++ b/app/src/language/vi_VN/app.po @@ -69,8 +69,8 @@ msgstr "Sửa cấu hình" msgid "Add Directive Below" msgstr "Thêm Directive" -#: src/views/site/ngx_conf/LocationEditor.vue:132 -#: src/views/site/ngx_conf/LocationEditor.vue:159 +#: src/views/site/ngx_conf/LocationEditor.vue:130 +#: src/views/site/ngx_conf/LocationEditor.vue:157 msgid "Add Location" msgstr "Thêm Location" @@ -112,16 +112,18 @@ msgid "API Base Url" msgstr "" #: src/views/certificate/DNSChallenge.vue:83 +#, fuzzy msgid "API Document" -msgstr "" +msgstr "Bình luận" #: src/views/preference/OpenAISettings.vue:57 msgid "API Proxy" msgstr "" #: src/views/preference/OpenAISettings.vue:69 +#, fuzzy msgid "API Token" -msgstr "" +msgstr "Loại" #: src/views/preference/OpenAISettings.vue:78 #, fuzzy @@ -197,7 +199,7 @@ msgstr "Bạn chắc chắn muốn xoá directive này ?" msgid "Are you sure you want to remove this item?" msgstr "Bạn chắc chắn muốn xoá directive này ?" -#: src/views/site/ngx_conf/LocationEditor.vue:88 +#: src/views/site/ngx_conf/LocationEditor.vue:86 #, fuzzy msgid "Are you sure you want to remove this location?" msgstr "Bạn chắc chắn muốn xoá location này ?" @@ -330,10 +332,6 @@ msgstr "" msgid "CADir" msgstr "" -#: src/views/preference/components/TOTP.vue:145 -msgid "Can't scan? Use text key binding" -msgstr "" - #: src/components/ChatGPT/ChatGPT.vue:356 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187 @@ -388,7 +386,7 @@ msgid "Certificate Renewal Interval" msgstr "Chứng chỉ SSL hợp lệ" #: src/views/certificate/CertificateEditor.vue:128 -#: src/views/site/cert/Cert.vue:32 +#: src/views/site/cert/Cert.vue:33 #, fuzzy msgid "Certificate Status" msgid_plural "Certificates Status" @@ -416,7 +414,7 @@ msgstr "Phương pháp xác thực" msgid "Change Certificate" msgstr "Thay đổi chứng chỉ" -#: src/views/site/cert/Cert.vue:51 +#: src/views/site/cert/Cert.vue:52 #, fuzzy msgid "Changed Certificate" msgid_plural "Changed Certificates" @@ -476,14 +474,18 @@ msgstr "Xoá" msgid "Cleared successfully" msgstr "Đã xóa thành công" +#: src/views/preference/components/TOTP.vue:125 +msgid "Click to copy" +msgstr "" + #: src/views/preference/LogrotateSettings.vue:22 #, fuzzy msgid "Command" msgstr "Bình luận" #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:113 -#: src/views/site/ngx_conf/LocationEditor.vue:105 -#: src/views/site/ngx_conf/LocationEditor.vue:136 +#: src/views/site/ngx_conf/LocationEditor.vue:103 +#: src/views/site/ngx_conf/LocationEditor.vue:134 #: src/views/site/ngx_conf/NgxServer.vue:134 msgid "Comments" msgstr "Bình luận" @@ -518,8 +520,8 @@ msgid "Connection lost, please refresh the page." msgstr "" #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:118 -#: src/views/site/ngx_conf/LocationEditor.vue:117 -#: src/views/site/ngx_conf/LocationEditor.vue:145 +#: src/views/site/ngx_conf/LocationEditor.vue:115 +#: src/views/site/ngx_conf/LocationEditor.vue:143 msgid "Content" msgstr "Nội dung" @@ -536,11 +538,11 @@ msgstr "" msgid "Core Upgrade" msgstr "Cập nhật core" -#: src/views/dashboard/ServerAnalytic.vue:305 +#: src/views/dashboard/ServerAnalytic.vue:301 msgid "CPU Status" msgstr "Trạng thái CPU" -#: src/views/dashboard/ServerAnalytic.vue:199 +#: src/views/dashboard/ServerAnalytic.vue:195 msgid "CPU:" msgstr "CPU:" @@ -586,11 +588,11 @@ msgstr "Chứng chỉ" msgid "Credentials" msgstr "Chứng chỉ" -#: src/views/preference/components/TOTP.vue:93 +#: src/views/preference/components/TOTP.vue:75 msgid "Current account is enabled TOTP." msgstr "" -#: src/views/preference/components/TOTP.vue:90 +#: src/views/preference/components/TOTP.vue:73 msgid "Current account is not enabled TOTP." msgstr "" @@ -762,7 +764,7 @@ msgstr "Đã tắt" msgid "Disabled successfully" msgstr "Đã tắt thành công" -#: src/views/dashboard/ServerAnalytic.vue:370 +#: src/views/dashboard/ServerAnalytic.vue:366 msgid "Disk IO" msgstr "Disk IO" @@ -848,8 +850,8 @@ msgstr "Tên miền đã được tạo" #: src/views/certificate/CertificateEditor.vue:112 msgid "Domains list is empty, try to reopen Auto Cert for %{config}" msgstr "" -"Danh sách tên miền rỗng, hãy thử mở lại chức năng Tạo chứng chỉ tự động cho %" -"{config}" +"Danh sách tên miền rỗng, hãy thử mở lại chức năng Tạo chứng chỉ tự động cho " +"%{config}" #: src/language/constants.ts:26 msgid "Download latest release error" @@ -944,7 +946,7 @@ msgstr "Không thể bật %{conf_name} trên %{node_name}" msgid "Enable %{conf_name} in %{node_name} successfully" msgstr "Đã bật %{conf_name} trên %{node_name}" -#: src/views/preference/components/TOTP.vue:52 +#: src/views/preference/components/TOTP.vue:38 #, fuzzy msgid "Enable 2FA successfully" msgstr "Đã bật" @@ -986,7 +988,7 @@ msgstr "Đã bật" msgid "Enable TLS" msgstr "Bật TLS" -#: src/views/preference/components/TOTP.vue:119 +#: src/views/preference/components/TOTP.vue:101 #, fuzzy msgid "Enable TOTP" msgstr "Bật TLS" @@ -1022,7 +1024,7 @@ msgid "Environment variables cleaned" msgstr "Đặt biến môi trường" #: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83 -#: src/views/environment/Environment.vue:33 +#: src/views/environment/Environment.vue:43 #, fuzzy msgid "Environments" msgstr "Environments" @@ -1087,8 +1089,9 @@ msgid "Failed to parse nginx.conf" msgstr "" #: src/constants/errors/self_check.ts:3 +#, fuzzy msgid "Failed to read nginx.conf" -msgstr "" +msgstr "Không thể bật %{msg}" #: src/views/site/site_edit/SiteEdit.vue:135 #: src/views/stream/StreamEdit.vue:122 @@ -1180,8 +1183,9 @@ msgid "Home" msgstr "Trang chủ" #: src/views/preference/CertSettings.vue:12 +#, fuzzy msgid "HTTP Challenge Port" -msgstr "" +msgstr "Phương pháp xác thực" #: src/views/preference/BasicSettings.vue:11 msgid "HTTP Host" @@ -1209,7 +1213,7 @@ msgid "" "ban threshold minutes, the ip will be banned for a period of time." msgstr "" -#: src/views/preference/components/TOTP.vue:105 +#: src/views/preference/components/TOTP.vue:87 msgid "" "If you lose your mobile phone, you can use the recovery code to reset your " "2FA." @@ -1248,12 +1252,12 @@ msgstr "Không thể khởi tạo trình nâng cấp" msgid "Initialing core upgrader" msgstr "Đang khởi tạo trình nâng cấp" -#: src/views/preference/components/TOTP.vue:152 +#: src/views/preference/components/TOTP.vue:134 msgid "Input the code from the app:" msgstr "" #: src/components/TwoFA/Authorization.vue:82 -#: src/views/preference/components/TOTP.vue:165 +#: src/views/preference/components/TOTP.vue:148 msgid "Input the recovery code:" msgstr "" @@ -1282,8 +1286,9 @@ msgid "Invalid filename" msgstr "E-mail không chính xác!" #: src/views/config/components/Mkdir.vue:57 +#, fuzzy msgid "Invalid folder name" -msgstr "" +msgstr "E-mail không chính xác!" #: src/constants/errors/user.ts:4 #, fuzzy @@ -1295,8 +1300,9 @@ msgid "Invalid passcode or recovery code" msgstr "" #: src/constants/errors/user.ts:5 +#, fuzzy msgid "Invalid recovery code" -msgstr "" +msgstr "Hợp lệ" #: src/views/preference/AuthSettings.vue:14 msgid "IP" @@ -1382,16 +1388,16 @@ msgstr "Liên kết bắt đầu" msgid "List" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:187 +#: src/views/dashboard/ServerAnalytic.vue:183 #, fuzzy msgid "Load Average:" msgstr "Tải trung bình:" -#: src/views/environment/Environment.vue:39 +#: src/views/environment/Environment.vue:49 msgid "Load from settings" msgstr "" -#: src/views/environment/Environment.vue:13 +#: src/views/environment/Environment.vue:17 #, fuzzy msgid "Load successfully" msgstr "Lưu thành công" @@ -1402,7 +1408,7 @@ msgstr "Lưu thành công" msgid "Local" msgstr "Location" -#: src/views/site/ngx_conf/LocationEditor.vue:69 +#: src/views/site/ngx_conf/LocationEditor.vue:68 msgid "Location" msgstr "Location" @@ -1469,19 +1475,20 @@ msgid "Manage Users" msgstr "Người dùng" #: src/views/certificate/CertificateList/certColumns.tsx:31 +#, fuzzy msgid "Managed Certificate" -msgstr "" +msgstr "Thay đổi chứng chỉ" #: src/views/preference/AuthSettings.vue:107 msgid "Max Attempts" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:226 -#: src/views/dashboard/ServerAnalytic.vue:227 +#: src/views/dashboard/ServerAnalytic.vue:222 +#: src/views/dashboard/ServerAnalytic.vue:223 msgid "Memory" msgstr "Memory" -#: src/views/dashboard/ServerAnalytic.vue:216 +#: src/views/dashboard/ServerAnalytic.vue:212 msgid "Memory and Storage" msgstr "Memory và Storage" @@ -1540,19 +1547,19 @@ msgstr "Single Directive" msgid "Name" msgstr "Tên" -#: src/views/dashboard/ServerAnalytic.vue:331 +#: src/views/dashboard/ServerAnalytic.vue:327 msgid "Network" msgstr "Mạng" -#: src/views/dashboard/ServerAnalytic.vue:273 +#: src/views/dashboard/ServerAnalytic.vue:269 msgid "Network Statistics" msgstr "Thống kê mạng" -#: src/views/dashboard/ServerAnalytic.vue:280 +#: src/views/dashboard/ServerAnalytic.vue:276 msgid "Network Total Receive" msgstr "Tổng lưu lượng mạng đã nhận" -#: src/views/dashboard/ServerAnalytic.vue:286 +#: src/views/dashboard/ServerAnalytic.vue:282 msgid "Network Total Send" msgstr "Tổng lưu lượng mạng đã gửi" @@ -1632,12 +1639,14 @@ msgid "Nginx is not running" msgstr "" #: src/routes/index.ts:202 src/views/nginx_log/NginxLog.vue:148 +#, fuzzy msgid "Nginx Log" -msgstr "" +msgstr "Vị trí lưu log lỗi (Error log) của Nginx" #: src/views/preference/NginxSettings.vue:18 +#, fuzzy msgid "Nginx Log Directory Whitelist" -msgstr "" +msgstr "Lỗi phân tích cú pháp cấu hình Nginx" #: src/views/preference/NginxSettings.vue:27 #, fuzzy @@ -1673,7 +1682,7 @@ msgstr "Restart Nginx thành công" #: src/views/preference/AuthSettings.vue:136 #: src/views/preference/CertSettings.vue:70 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97 -#: src/views/site/ngx_conf/LocationEditor.vue:90 +#: src/views/site/ngx_conf/LocationEditor.vue:88 #: src/views/site/site_list/SiteList.vue:143 #: src/views/stream/StreamList.vue:163 msgid "No" @@ -1685,8 +1694,9 @@ msgid "Node name" msgstr "Username" #: src/views/preference/BasicSettings.vue:23 +#, fuzzy msgid "Node Secret" -msgstr "" +msgstr "Username" #: src/views/certificate/CertificateList/certColumns.tsx:91 msgid "Not After" @@ -1789,6 +1799,10 @@ msgstr "" msgid "Or" msgstr "" +#: src/views/preference/components/TOTP.vue:127 +msgid "Or enter the secret: %{secret}" +msgstr "" + #: src/views/config/components/Rename.vue:68 msgid "Original name" msgstr "" @@ -1798,7 +1812,7 @@ msgstr "" msgid "OS" msgstr "Hệ điều hành" -#: src/views/dashboard/ServerAnalytic.vue:193 +#: src/views/dashboard/ServerAnalytic.vue:189 msgid "OS:" msgstr "Hệ điều hành:" @@ -1849,8 +1863,8 @@ msgid "Password length cannot exceed 20 characters" msgstr "" #: src/views/config/ConfigEditor.vue:263 -#: src/views/site/ngx_conf/LocationEditor.vue:111 -#: src/views/site/ngx_conf/LocationEditor.vue:139 +#: src/views/site/ngx_conf/LocationEditor.vue:109 +#: src/views/site/ngx_conf/LocationEditor.vue:137 msgid "Path" msgstr "Đường dẫn" @@ -1950,7 +1964,7 @@ msgid "" "Please note that the unit of time configurations below are all in seconds." msgstr "Lưu ý đơn vị cấu hình thời gian bên dưới được tính bằng giây." -#: src/views/environment/Environment.vue:48 +#: src/views/environment/Environment.vue:58 msgid "Please select at least one node to upgrade" msgstr "" @@ -2009,11 +2023,11 @@ msgid "Public Security Number" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:387 +#: src/views/dashboard/ServerAnalytic.vue:383 msgid "Reads" msgstr "Đọc" -#: src/views/dashboard/ServerAnalytic.vue:338 +#: src/views/dashboard/ServerAnalytic.vue:334 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "Nhận" @@ -2033,15 +2047,15 @@ msgid "Recovered Successfully" msgstr "Xoá thành công" #: src/components/TwoFA/Authorization.vue:89 -#: src/views/preference/components/TOTP.vue:172 +#: src/views/preference/components/TOTP.vue:155 msgid "Recovery" msgstr "" -#: src/views/preference/components/TOTP.vue:98 +#: src/views/preference/components/TOTP.vue:80 msgid "Recovery Code" msgstr "" -#: src/views/preference/components/TOTP.vue:107 +#: src/views/preference/components/TOTP.vue:89 msgid "Recovery Code:" msgstr "" @@ -2231,7 +2245,7 @@ msgstr "Yêu cầu có chứa tham số sai" msgid "Reset" msgstr "Đặt lại" -#: src/views/preference/components/TOTP.vue:127 +#: src/views/preference/components/TOTP.vue:109 #, fuzzy msgid "Reset 2FA" msgstr "Đặt lại" @@ -2325,7 +2339,7 @@ msgstr "Lưu thành công" msgid "Saved successfully" msgstr "Lưu thành công" -#: src/views/preference/components/TOTP.vue:88 +#: src/views/preference/components/TOTP.vue:72 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "" @@ -2333,7 +2347,7 @@ msgstr "" msgid "SDK" msgstr "" -#: src/views/preference/components/TOTP.vue:144 +#: src/views/preference/components/TOTP.vue:124 msgid "Secret has been copied" msgstr "" @@ -2345,12 +2359,12 @@ msgstr "Bộ chọn" msgid "Self Check" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:348 +#: src/views/dashboard/ServerAnalytic.vue:344 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Send" msgstr "Gửi" -#: src/views/dashboard/ServerAnalytic.vue:179 +#: src/views/dashboard/ServerAnalytic.vue:175 msgid "Server Info" msgstr "Thông tin máy chủ" @@ -2392,14 +2406,14 @@ msgstr "Sử dụng HTTP01 để xác thực SSL" #: src/constants/errors/nginx_log.ts:8 msgid "" -"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/constants/errors/nginx_log.ts:7 msgid "" -"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/components/SensitiveString/SensitiveString.vue:40 @@ -2443,32 +2457,39 @@ msgid "Sites List" msgstr "Danh sách Website" #: src/constants/errors/self_check.ts:10 +#, fuzzy msgid "Sites-available directory not exist" -msgstr "" +msgstr "Thư mục" #: src/constants/errors/self_check.ts:11 +#, fuzzy msgid "Sites-enabled directory not exist" -msgstr "" +msgstr "Thư mục" #: src/views/certificate/CertificateEditor.vue:211 +#, fuzzy msgid "SSL Certificate Content" -msgstr "" +msgstr "Trạng thái chứng chỉ" #: src/views/certificate/CertificateEditor.vue:224 +#, fuzzy msgid "SSL Certificate Key Content" -msgstr "" +msgstr "Trạng thái chứng chỉ" #: src/views/certificate/CertificateEditor.vue:190 +#, fuzzy msgid "SSL Certificate Key Path" -msgstr "" +msgstr "Trạng thái chứng chỉ" #: src/views/certificate/CertificateEditor.vue:175 +#, fuzzy msgid "SSL Certificate Path" -msgstr "" +msgstr "Trạng thái chứng chỉ" #: src/views/other/Login.vue:198 +#, fuzzy msgid "SSO Login" -msgstr "" +msgstr "Đăng nhập" #: src/views/environment/BatchUpgrader.vue:164 #: src/views/environment/BatchUpgrader.vue:214 src/views/system/Upgrade.vue:191 @@ -2488,8 +2509,8 @@ msgstr "Trạng thái" msgid "Stopped" msgstr "Đã dừng" -#: src/views/dashboard/ServerAnalytic.vue:254 -#: src/views/dashboard/ServerAnalytic.vue:255 +#: src/views/dashboard/ServerAnalytic.vue:250 +#: src/views/dashboard/ServerAnalytic.vue:251 msgid "Storage" msgstr "Storage" @@ -2499,8 +2520,9 @@ msgid "Streams Directory" msgstr "Thư mục" #: src/constants/errors/self_check.ts:12 +#, fuzzy msgid "Streams-available directory not exist" -msgstr "" +msgstr "Thư mục" #: src/constants/errors/self_check.ts:13 #, fuzzy @@ -2519,8 +2541,8 @@ msgid "" "guide/nginx-proxy-example.html" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:240 -#: src/views/dashboard/ServerAnalytic.vue:241 +#: src/views/dashboard/ServerAnalytic.vue:236 +#: src/views/dashboard/ServerAnalytic.vue:237 msgid "Swap" msgstr "Swap" @@ -2599,8 +2621,9 @@ msgid "Sync strategy" msgstr "Gia hạn chứng chỉ SSL" #: src/views/certificate/CertificateEditor.vue:204 +#, fuzzy msgid "Sync to" -msgstr "" +msgstr "Gia hạn chứng chỉ SSL" #: src/views/site/site_edit/RightSettings.vue:110 msgid "Synchronization" @@ -2690,7 +2713,7 @@ msgid "" "hyphens, dashes, colons, and dots." msgstr "" -#: src/views/preference/components/TOTP.vue:106 +#: src/views/preference/components/TOTP.vue:88 msgid "" "The recovery code is only displayed once, please save it in a safe place." msgstr "" @@ -2763,9 +2786,10 @@ msgid "This value is already taken" msgstr "" #: src/views/environment/BatchUpgrader.vue:182 +#, fuzzy msgid "" "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." -msgstr "" +msgstr "Nhân bản %{conf_name} thành %{node_name} thành công" #: src/views/preference/AuthSettings.vue:96 msgid "Throttle" @@ -2781,7 +2805,7 @@ msgstr "" msgid "Title" msgstr "Tiêu đề" -#: src/views/preference/components/TOTP.vue:87 +#: src/views/preference/components/TOTP.vue:71 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -2823,11 +2847,11 @@ msgid_plural "Total %{total} items" msgstr[0] "" msgstr[1] "" -#: src/views/preference/components/TOTP.vue:85 +#: src/views/preference/components/TOTP.vue:69 msgid "TOTP" msgstr "" -#: src/views/preference/components/TOTP.vue:86 +#: src/views/preference/components/TOTP.vue:70 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -2868,7 +2892,7 @@ msgstr "Ngày cập nhật" msgid "Updated successfully" msgstr "Cập nhật thành công" -#: src/routes/index.ts:297 src/views/environment/Environment.vue:56 +#: src/routes/index.ts:297 src/views/environment/Environment.vue:66 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226 msgid "Upgrade" msgstr "Cập nhật" @@ -2891,7 +2915,7 @@ msgstr "Đang cập nhật Nginx UI, vui lòng đợi..." msgid "Upstream Name" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:183 +#: src/views/dashboard/ServerAnalytic.vue:179 msgid "Uptime:" msgstr "Thời gian hoạt động:" @@ -3005,7 +3029,7 @@ msgid "" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:377 +#: src/views/dashboard/ServerAnalytic.vue:373 msgid "Writes" msgstr "Ghi" @@ -3020,7 +3044,7 @@ msgstr "Ghi chứng chỉ vào disk" #: src/views/preference/AuthSettings.vue:135 #: src/views/preference/CertSettings.vue:69 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96 -#: src/views/site/ngx_conf/LocationEditor.vue:89 +#: src/views/site/ngx_conf/LocationEditor.vue:87 msgid "Yes" msgstr "Có" diff --git a/app/src/language/zh_CN/app.po b/app/src/language/zh_CN/app.po index d560ab504..9b037bef0 100644 --- a/app/src/language/zh_CN/app.po +++ b/app/src/language/zh_CN/app.po @@ -11,7 +11,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "Generated-By: easygettext\n" -"X-Generator: Poedit 3.5\n" +"X-Generator: Poedit 3.4.1\n" #: src/views/user/userColumns.tsx:32 msgid "2FA" @@ -71,8 +71,8 @@ msgstr "添加配置" msgid "Add Directive Below" msgstr "在下面添加指令" -#: src/views/site/ngx_conf/LocationEditor.vue:132 -#: src/views/site/ngx_conf/LocationEditor.vue:159 +#: src/views/site/ngx_conf/LocationEditor.vue:130 +#: src/views/site/ngx_conf/LocationEditor.vue:157 msgid "Add Location" msgstr "添加 Location" @@ -184,7 +184,7 @@ msgstr "您确定要删除这条指令?" msgid "Are you sure you want to remove this item?" msgstr "您确定要删除这个项目吗?" -#: src/views/site/ngx_conf/LocationEditor.vue:88 +#: src/views/site/ngx_conf/LocationEditor.vue:86 msgid "Are you sure you want to remove this location?" msgstr "您确定要删除这个 Location?" @@ -310,10 +310,6 @@ msgstr "CA Dir" msgid "CADir" msgstr "CADir" -#: src/views/preference/components/TOTP.vue:145 -msgid "Can't scan? Use text key binding" -msgstr "无法扫描?使用文本密钥绑定" - #: src/components/ChatGPT/ChatGPT.vue:356 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187 @@ -363,7 +359,7 @@ msgid "Certificate Renewal Interval" msgstr "证书续期间隔" #: src/views/certificate/CertificateEditor.vue:128 -#: src/views/site/cert/Cert.vue:32 +#: src/views/site/cert/Cert.vue:33 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "证书状态" @@ -386,7 +382,7 @@ msgstr "挑战方法" msgid "Change Certificate" msgstr "更改证书" -#: src/views/site/cert/Cert.vue:51 +#: src/views/site/cert/Cert.vue:52 msgid "Changed Certificate" msgid_plural "Changed Certificates" msgstr[0] "变更证书" @@ -443,13 +439,17 @@ msgstr "清空" msgid "Cleared successfully" msgstr "清除成功" +#: src/views/preference/components/TOTP.vue:125 +msgid "Click to copy" +msgstr "点击复制" + #: src/views/preference/LogrotateSettings.vue:22 msgid "Command" msgstr "命令" #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:113 -#: src/views/site/ngx_conf/LocationEditor.vue:105 -#: src/views/site/ngx_conf/LocationEditor.vue:136 +#: src/views/site/ngx_conf/LocationEditor.vue:103 +#: src/views/site/ngx_conf/LocationEditor.vue:134 #: src/views/site/ngx_conf/NgxServer.vue:134 msgid "Comments" msgstr "注释" @@ -483,8 +483,8 @@ msgid "Connection lost, please refresh the page." msgstr "连接中断,请刷新页面。" #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:118 -#: src/views/site/ngx_conf/LocationEditor.vue:117 -#: src/views/site/ngx_conf/LocationEditor.vue:145 +#: src/views/site/ngx_conf/LocationEditor.vue:115 +#: src/views/site/ngx_conf/LocationEditor.vue:143 msgid "Content" msgstr "内容" @@ -501,11 +501,11 @@ msgstr "拷贝" msgid "Core Upgrade" msgstr "核心升级" -#: src/views/dashboard/ServerAnalytic.vue:305 +#: src/views/dashboard/ServerAnalytic.vue:301 msgid "CPU Status" msgstr "CPU 状态" -#: src/views/dashboard/ServerAnalytic.vue:199 +#: src/views/dashboard/ServerAnalytic.vue:195 msgid "CPU:" msgstr "CPU:" @@ -547,11 +547,11 @@ msgstr "DNS 凭证" msgid "Credentials" msgstr "凭证" -#: src/views/preference/components/TOTP.vue:93 +#: src/views/preference/components/TOTP.vue:75 msgid "Current account is enabled TOTP." msgstr "当前账户已启用 TOTP 验证。" -#: src/views/preference/components/TOTP.vue:90 +#: src/views/preference/components/TOTP.vue:73 msgid "Current account is not enabled TOTP." msgstr "当前用户未启用 TOTP 验证。" @@ -713,7 +713,7 @@ msgstr "禁用" msgid "Disabled successfully" msgstr "禁用成功" -#: src/views/dashboard/ServerAnalytic.vue:370 +#: src/views/dashboard/ServerAnalytic.vue:366 msgid "Disk IO" msgstr "磁盘 IO" @@ -876,7 +876,7 @@ msgstr "在%{node_name}中启用%{conf_name}失败" msgid "Enable %{conf_name} in %{node_name} successfully" msgstr "成功启用%{node_name}中的%{conf_name}" -#: src/views/preference/components/TOTP.vue:52 +#: src/views/preference/components/TOTP.vue:38 msgid "Enable 2FA successfully" msgstr "二步验证启用成功" @@ -912,7 +912,7 @@ msgstr "启用成功" msgid "Enable TLS" msgstr "启用 TLS" -#: src/views/preference/components/TOTP.vue:119 +#: src/views/preference/components/TOTP.vue:101 msgid "Enable TOTP" msgstr "启用 TOTP" @@ -946,7 +946,7 @@ msgid "Environment variables cleaned" msgstr "环境变量已清理" #: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83 -#: src/views/environment/Environment.vue:33 +#: src/views/environment/Environment.vue:43 msgid "Environments" msgstr "环境" @@ -1126,7 +1126,7 @@ msgstr "" "如果某个 IP 的登录失败次数达到禁用阈值分钟内的最大尝试次数,该 IP 将被禁止登" "录一段时间。" -#: src/views/preference/components/TOTP.vue:105 +#: src/views/preference/components/TOTP.vue:87 msgid "" "If you lose your mobile phone, you can use the recovery code to reset your " "2FA." @@ -1163,12 +1163,12 @@ msgstr "初始化核心升级程序错误" msgid "Initialing core upgrader" msgstr "初始化核心升级器" -#: src/views/preference/components/TOTP.vue:152 +#: src/views/preference/components/TOTP.vue:134 msgid "Input the code from the app:" msgstr "输入应用程序中的代码:" #: src/components/TwoFA/Authorization.vue:82 -#: src/views/preference/components/TOTP.vue:165 +#: src/views/preference/components/TOTP.vue:148 msgid "Input the recovery code:" msgstr "输入恢复代码:" @@ -1284,15 +1284,15 @@ msgstr "链接" msgid "List" msgstr "列表" -#: src/views/dashboard/ServerAnalytic.vue:187 +#: src/views/dashboard/ServerAnalytic.vue:183 msgid "Load Average:" msgstr "系统负载:" -#: src/views/environment/Environment.vue:39 +#: src/views/environment/Environment.vue:49 msgid "Load from settings" msgstr "从设置中加载" -#: src/views/environment/Environment.vue:13 +#: src/views/environment/Environment.vue:17 msgid "Load successfully" msgstr "加载成功" @@ -1301,7 +1301,7 @@ msgstr "加载成功" msgid "Local" msgstr "本地" -#: src/views/site/ngx_conf/LocationEditor.vue:69 +#: src/views/site/ngx_conf/LocationEditor.vue:68 msgid "Location" msgstr "Location" @@ -1376,12 +1376,12 @@ msgstr "托管证书" msgid "Max Attempts" msgstr "最大尝试次数" -#: src/views/dashboard/ServerAnalytic.vue:226 -#: src/views/dashboard/ServerAnalytic.vue:227 +#: src/views/dashboard/ServerAnalytic.vue:222 +#: src/views/dashboard/ServerAnalytic.vue:223 msgid "Memory" msgstr "内存" -#: src/views/dashboard/ServerAnalytic.vue:216 +#: src/views/dashboard/ServerAnalytic.vue:212 msgid "Memory and Storage" msgstr "内存与存储" @@ -1435,19 +1435,19 @@ msgstr "多行指令" msgid "Name" msgstr "名称" -#: src/views/dashboard/ServerAnalytic.vue:331 +#: src/views/dashboard/ServerAnalytic.vue:327 msgid "Network" msgstr "网络" -#: src/views/dashboard/ServerAnalytic.vue:273 +#: src/views/dashboard/ServerAnalytic.vue:269 msgid "Network Statistics" msgstr "流量统计" -#: src/views/dashboard/ServerAnalytic.vue:280 +#: src/views/dashboard/ServerAnalytic.vue:276 msgid "Network Total Receive" msgstr "下载流量" -#: src/views/dashboard/ServerAnalytic.vue:286 +#: src/views/dashboard/ServerAnalytic.vue:282 msgid "Network Total Send" msgstr "上传流量" @@ -1561,7 +1561,7 @@ msgstr "Nginx 重启成功" #: src/views/preference/AuthSettings.vue:136 #: src/views/preference/CertSettings.vue:70 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97 -#: src/views/site/ngx_conf/LocationEditor.vue:90 +#: src/views/site/ngx_conf/LocationEditor.vue:88 #: src/views/site/site_list/SiteList.vue:143 #: src/views/stream/StreamList.vue:163 msgid "No" @@ -1673,6 +1673,10 @@ msgstr "OpenAI" msgid "Or" msgstr "或" +#: src/views/preference/components/TOTP.vue:127 +msgid "Or enter the secret: %{secret}" +msgstr "或输入密钥:%{secret}" + #: src/views/config/components/Rename.vue:68 msgid "Original name" msgstr "原名" @@ -1681,7 +1685,7 @@ msgstr "原名" msgid "OS" msgstr "OS" -#: src/views/dashboard/ServerAnalytic.vue:193 +#: src/views/dashboard/ServerAnalytic.vue:189 msgid "OS:" msgstr "OS:" @@ -1733,8 +1737,8 @@ msgid "Password length cannot exceed 20 characters" msgstr "密码长度不能超过 20 个字符" #: src/views/config/ConfigEditor.vue:263 -#: src/views/site/ngx_conf/LocationEditor.vue:111 -#: src/views/site/ngx_conf/LocationEditor.vue:139 +#: src/views/site/ngx_conf/LocationEditor.vue:109 +#: src/views/site/ngx_conf/LocationEditor.vue:137 msgid "Path" msgstr "路径" @@ -1828,7 +1832,7 @@ msgid "" "Please note that the unit of time configurations below are all in seconds." msgstr "请注意,下面的时间单位配置均以秒为单位。" -#: src/views/environment/Environment.vue:48 +#: src/views/environment/Environment.vue:58 msgid "Please select at least one node to upgrade" msgstr "请至少选择一个节点进行升级" @@ -1885,11 +1889,11 @@ msgid "Public Security Number" msgstr "公安备案号" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:387 +#: src/views/dashboard/ServerAnalytic.vue:383 msgid "Reads" msgstr "读" -#: src/views/dashboard/ServerAnalytic.vue:338 +#: src/views/dashboard/ServerAnalytic.vue:334 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "下载" @@ -1908,15 +1912,15 @@ msgid "Recovered Successfully" msgstr "恢复成功" #: src/components/TwoFA/Authorization.vue:89 -#: src/views/preference/components/TOTP.vue:172 +#: src/views/preference/components/TOTP.vue:155 msgid "Recovery" msgstr "恢复" -#: src/views/preference/components/TOTP.vue:98 +#: src/views/preference/components/TOTP.vue:80 msgid "Recovery Code" msgstr "恢复代码" -#: src/views/preference/components/TOTP.vue:107 +#: src/views/preference/components/TOTP.vue:89 msgid "Recovery Code:" msgstr "恢复代码:" @@ -2081,7 +2085,7 @@ msgstr "请求参数错误" msgid "Reset" msgstr "重置" -#: src/views/preference/components/TOTP.vue:127 +#: src/views/preference/components/TOTP.vue:109 msgid "Reset 2FA" msgstr "重置二步验证" @@ -2168,7 +2172,7 @@ msgstr "保存成功" msgid "Saved successfully" msgstr "保存成功" -#: src/views/preference/components/TOTP.vue:88 +#: src/views/preference/components/TOTP.vue:72 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "用手机扫描二维码,将账户添加到应用程序中。" @@ -2176,7 +2180,7 @@ msgstr "用手机扫描二维码,将账户添加到应用程序中。" msgid "SDK" msgstr "SDK" -#: src/views/preference/components/TOTP.vue:144 +#: src/views/preference/components/TOTP.vue:124 msgid "Secret has been copied" msgstr "密钥已复制" @@ -2188,12 +2192,12 @@ msgstr "选择器" msgid "Self Check" msgstr "自我检查" -#: src/views/dashboard/ServerAnalytic.vue:348 +#: src/views/dashboard/ServerAnalytic.vue:344 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Send" msgstr "上传" -#: src/views/dashboard/ServerAnalytic.vue:179 +#: src/views/dashboard/ServerAnalytic.vue:175 msgid "Server Info" msgstr "服务器信息" @@ -2328,8 +2332,8 @@ msgstr "状态" msgid "Stopped" msgstr "已停止" -#: src/views/dashboard/ServerAnalytic.vue:254 -#: src/views/dashboard/ServerAnalytic.vue:255 +#: src/views/dashboard/ServerAnalytic.vue:250 +#: src/views/dashboard/ServerAnalytic.vue:251 msgid "Storage" msgstr "存储" @@ -2359,8 +2363,8 @@ msgstr "" "支持通过 WebSocket 协议与后端通信,如果您正在使用 Nginx 反向代理了 Nginx UI " "请参考:https://nginxui.com/guide/nginx-proxy-example.html 编写配置文件" -#: src/views/dashboard/ServerAnalytic.vue:240 -#: src/views/dashboard/ServerAnalytic.vue:241 +#: src/views/dashboard/ServerAnalytic.vue:236 +#: src/views/dashboard/ServerAnalytic.vue:237 msgid "Swap" msgstr "Swap" @@ -2519,7 +2523,7 @@ msgid "" "hyphens, dashes, colons, and dots." msgstr "公安备案号只能包含字母、单码、数字、连字符、破折号、冒号和点。" -#: src/views/preference/components/TOTP.vue:106 +#: src/views/preference/components/TOTP.vue:88 msgid "" "The recovery code is only displayed once, please save it in a safe place." msgstr "恢复密码只会显示一次,请妥善保存。" @@ -2608,7 +2612,7 @@ msgstr "提示" msgid "Title" msgstr "标题" -#: src/views/preference/components/TOTP.vue:87 +#: src/views/preference/components/TOTP.vue:71 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -2652,11 +2656,11 @@ msgid "Total %{total} item" msgid_plural "Total %{total} items" msgstr[0] "共 %{total} 个项目" -#: src/views/preference/components/TOTP.vue:85 +#: src/views/preference/components/TOTP.vue:69 msgid "TOTP" msgstr "TOTP" -#: src/views/preference/components/TOTP.vue:86 +#: src/views/preference/components/TOTP.vue:70 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -2695,7 +2699,7 @@ msgstr "修改时间" msgid "Updated successfully" msgstr "更新成功" -#: src/routes/index.ts:297 src/views/environment/Environment.vue:56 +#: src/routes/index.ts:297 src/views/environment/Environment.vue:66 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226 msgid "Upgrade" msgstr "升级" @@ -2716,7 +2720,7 @@ msgstr "正在升级 Nginx UI,请等待..." msgid "Upstream Name" msgstr "Upstream 名称" -#: src/views/dashboard/ServerAnalytic.vue:183 +#: src/views/dashboard/ServerAnalytic.vue:179 msgid "Uptime:" msgstr "运行时间:" @@ -2825,7 +2829,7 @@ msgstr "" "操作。" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:377 +#: src/views/dashboard/ServerAnalytic.vue:373 msgid "Writes" msgstr "写" @@ -2840,7 +2844,7 @@ msgstr "正在将证书写入磁盘" #: src/views/preference/AuthSettings.vue:135 #: src/views/preference/CertSettings.vue:69 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96 -#: src/views/site/ngx_conf/LocationEditor.vue:89 +#: src/views/site/ngx_conf/LocationEditor.vue:87 msgid "Yes" msgstr "是的" @@ -2862,6 +2866,9 @@ msgstr "您尚未配置 Webauthn 的设置,因此无法添加 Passkey。" msgid "Your passkeys" msgstr "你的 Passkeys" +#~ msgid "Can't scan? Use text key binding" +#~ msgstr "无法扫描?使用文本密钥绑定" + #~ msgid "Directory" #~ msgstr "目录" diff --git a/app/src/language/zh_TW/app.po b/app/src/language/zh_TW/app.po index bd038c878..5f8b57ecb 100644 --- a/app/src/language/zh_TW/app.po +++ b/app/src/language/zh_TW/app.po @@ -76,8 +76,8 @@ msgstr "添加配置" msgid "Add Directive Below" msgstr "在下方新增指令" -#: src/views/site/ngx_conf/LocationEditor.vue:132 -#: src/views/site/ngx_conf/LocationEditor.vue:159 +#: src/views/site/ngx_conf/LocationEditor.vue:130 +#: src/views/site/ngx_conf/LocationEditor.vue:157 msgid "Add Location" msgstr "新增 Location" @@ -192,7 +192,7 @@ msgstr "您確定要刪除這條指令嗎?" msgid "Are you sure you want to remove this item?" msgstr "您確定要刪除此項目嗎?" -#: src/views/site/ngx_conf/LocationEditor.vue:88 +#: src/views/site/ngx_conf/LocationEditor.vue:86 msgid "Are you sure you want to remove this location?" msgstr "您確定要刪除此 Location 嗎?" @@ -319,10 +319,6 @@ msgstr "CA Dir" msgid "CADir" msgstr "CADir" -#: src/views/preference/components/TOTP.vue:145 -msgid "Can't scan? Use text key binding" -msgstr "" - #: src/components/ChatGPT/ChatGPT.vue:356 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187 @@ -377,7 +373,7 @@ msgid "Certificate Renewal Interval" msgstr "憑證更新間隔" #: src/views/certificate/CertificateEditor.vue:128 -#: src/views/site/cert/Cert.vue:32 +#: src/views/site/cert/Cert.vue:33 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "憑證狀態" @@ -400,7 +396,7 @@ msgstr "驗證方式" msgid "Change Certificate" msgstr "更換憑證" -#: src/views/site/cert/Cert.vue:51 +#: src/views/site/cert/Cert.vue:52 msgid "Changed Certificate" msgid_plural "Changed Certificates" msgstr[0] "變更後憑證" @@ -456,13 +452,17 @@ msgstr "清除" msgid "Cleared successfully" msgstr "清除成功" +#: src/views/preference/components/TOTP.vue:125 +msgid "Click to copy" +msgstr "" + #: src/views/preference/LogrotateSettings.vue:22 msgid "Command" msgstr "命令" #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:113 -#: src/views/site/ngx_conf/LocationEditor.vue:105 -#: src/views/site/ngx_conf/LocationEditor.vue:136 +#: src/views/site/ngx_conf/LocationEditor.vue:103 +#: src/views/site/ngx_conf/LocationEditor.vue:134 #: src/views/site/ngx_conf/NgxServer.vue:134 msgid "Comments" msgstr "備註" @@ -496,8 +496,8 @@ msgid "Connection lost, please refresh the page." msgstr "連接丟失,請重新整理。" #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:118 -#: src/views/site/ngx_conf/LocationEditor.vue:117 -#: src/views/site/ngx_conf/LocationEditor.vue:145 +#: src/views/site/ngx_conf/LocationEditor.vue:115 +#: src/views/site/ngx_conf/LocationEditor.vue:143 msgid "Content" msgstr "內容" @@ -514,11 +514,11 @@ msgstr "複製" msgid "Core Upgrade" msgstr "核心升級" -#: src/views/dashboard/ServerAnalytic.vue:305 +#: src/views/dashboard/ServerAnalytic.vue:301 msgid "CPU Status" msgstr "中央處理器狀態" -#: src/views/dashboard/ServerAnalytic.vue:199 +#: src/views/dashboard/ServerAnalytic.vue:195 msgid "CPU:" msgstr "中央處理器:" @@ -560,12 +560,12 @@ msgstr "認證" msgid "Credentials" msgstr "認證資訊" -#: src/views/preference/components/TOTP.vue:93 +#: src/views/preference/components/TOTP.vue:75 #, fuzzy msgid "Current account is enabled TOTP." msgstr "當前帳戶已啟用多因素身份驗證。" -#: src/views/preference/components/TOTP.vue:90 +#: src/views/preference/components/TOTP.vue:73 #, fuzzy msgid "Current account is not enabled TOTP." msgstr "當前帳戶未啟用多因素身份驗證。" @@ -675,8 +675,9 @@ msgid "Directive" msgstr "指令" #: src/constants/errors/nginx_log.ts:6 +#, fuzzy msgid "Directive params is empty" -msgstr "" +msgstr "檔名空白" #: src/constants/errors/nginx_log.ts:5 msgid "Directive.Params neither access_log nor error_log" @@ -735,7 +736,7 @@ msgstr "停用" msgid "Disabled successfully" msgstr "成功停用" -#: src/views/dashboard/ServerAnalytic.vue:370 +#: src/views/dashboard/ServerAnalytic.vue:366 msgid "Disk IO" msgstr "磁碟 IO" @@ -828,8 +829,9 @@ msgstr "試運轉模式已啟用" msgid "" "Due to the security policies of some browsers, you cannot use passkeys on " "non-HTTPS websites, except when running on localhost." -msgstr "基於部分瀏覽器的安全政策,您無法在未啟用 HTTPS 網站,特別是 localhost " -"上使用通行密鑰。" +msgstr "" +"基於部分瀏覽器的安全政策,您無法在未啟用 HTTPS 網站,特別是 localhost 上使用" +"通行密鑰。" #: src/views/site/site_list/SiteDuplicate.vue:72 #: src/views/site/site_list/SiteList.vue:140 @@ -898,7 +900,7 @@ msgstr "在 %{node_name} 啟用 %{conf_name} 失敗" msgid "Enable %{conf_name} in %{node_name} successfully" msgstr "成功在 %{node_name} 啟用 %{conf_name}" -#: src/views/preference/components/TOTP.vue:52 +#: src/views/preference/components/TOTP.vue:38 msgid "Enable 2FA successfully" msgstr "啟用多因素身份驗證成功" @@ -938,7 +940,7 @@ msgstr "啟用成功" msgid "Enable TLS" msgstr "啟用 TLS" -#: src/views/preference/components/TOTP.vue:119 +#: src/views/preference/components/TOTP.vue:101 #, fuzzy msgid "Enable TOTP" msgstr "啟用 TLS" @@ -973,7 +975,7 @@ msgid "Environment variables cleaned" msgstr "環境變數已清理" #: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83 -#: src/views/environment/Environment.vue:33 +#: src/views/environment/Environment.vue:43 msgid "Environments" msgstr "環境" @@ -1031,8 +1033,9 @@ msgid "Failed to get certificate information" msgstr "取得憑證資訊失敗" #: src/constants/errors/self_check.ts:4 +#, fuzzy msgid "Failed to parse nginx.conf" -msgstr "" +msgstr "讀取 nginx.conf 失敗" #: src/constants/errors/self_check.ts:3 msgid "Failed to read nginx.conf" @@ -1154,7 +1157,7 @@ msgstr "" "如果來自某個 IP 的登錄失敗次數在禁止閾值分鐘內達到最大嘗試次數,該 IP 將被禁" "止一段時間。" -#: src/views/preference/components/TOTP.vue:105 +#: src/views/preference/components/TOTP.vue:87 msgid "" "If you lose your mobile phone, you can use the recovery code to reset your " "2FA." @@ -1191,12 +1194,12 @@ msgstr "初始化核心升級程式錯誤" msgid "Initialing core upgrader" msgstr "正在初始化核心升級程式" -#: src/views/preference/components/TOTP.vue:152 +#: src/views/preference/components/TOTP.vue:134 msgid "Input the code from the app:" msgstr "請輸入應用程式中的代碼:" #: src/components/TwoFA/Authorization.vue:82 -#: src/views/preference/components/TOTP.vue:165 +#: src/views/preference/components/TOTP.vue:148 msgid "Input the recovery code:" msgstr "輸入恢復碼:" @@ -1317,15 +1320,15 @@ msgstr "連結開始" msgid "List" msgstr "列表" -#: src/views/dashboard/ServerAnalytic.vue:187 +#: src/views/dashboard/ServerAnalytic.vue:183 msgid "Load Average:" msgstr "負載平均值:" -#: src/views/environment/Environment.vue:39 +#: src/views/environment/Environment.vue:49 msgid "Load from settings" msgstr "從設置加載" -#: src/views/environment/Environment.vue:13 +#: src/views/environment/Environment.vue:17 msgid "Load successfully" msgstr "加載成功" @@ -1334,7 +1337,7 @@ msgstr "加載成功" msgid "Local" msgstr "本機" -#: src/views/site/ngx_conf/LocationEditor.vue:69 +#: src/views/site/ngx_conf/LocationEditor.vue:68 msgid "Location" msgstr "Location" @@ -1408,12 +1411,12 @@ msgstr "受管理的憑證" msgid "Max Attempts" msgstr "最大嘗試次數" -#: src/views/dashboard/ServerAnalytic.vue:226 -#: src/views/dashboard/ServerAnalytic.vue:227 +#: src/views/dashboard/ServerAnalytic.vue:222 +#: src/views/dashboard/ServerAnalytic.vue:223 msgid "Memory" msgstr "記憶體" -#: src/views/dashboard/ServerAnalytic.vue:216 +#: src/views/dashboard/ServerAnalytic.vue:212 msgid "Memory and Storage" msgstr "記憶體與儲存" @@ -1467,19 +1470,19 @@ msgstr "多行指令" msgid "Name" msgstr "名稱" -#: src/views/dashboard/ServerAnalytic.vue:331 +#: src/views/dashboard/ServerAnalytic.vue:327 msgid "Network" msgstr "網路" -#: src/views/dashboard/ServerAnalytic.vue:273 +#: src/views/dashboard/ServerAnalytic.vue:269 msgid "Network Statistics" msgstr "網路統計" -#: src/views/dashboard/ServerAnalytic.vue:280 +#: src/views/dashboard/ServerAnalytic.vue:276 msgid "Network Total Receive" msgstr "下載流量" -#: src/views/dashboard/ServerAnalytic.vue:286 +#: src/views/dashboard/ServerAnalytic.vue:282 msgid "Network Total Send" msgstr "上傳流量" @@ -1560,8 +1563,9 @@ msgid "Nginx Log" msgstr "Nginx 日誌" #: src/views/preference/NginxSettings.vue:18 +#, fuzzy msgid "Nginx Log Directory Whitelist" -msgstr "" +msgstr "Nginx 設定解析錯誤" #: src/views/preference/NginxSettings.vue:27 #, fuzzy @@ -1569,8 +1573,9 @@ msgid "Nginx PID Path" msgstr "Nginx 錯誤日誌路徑" #: src/views/preference/NginxSettings.vue:30 +#, fuzzy msgid "Nginx Reload Command" -msgstr "" +msgstr "終端機啟動指令" #: src/components/NginxControl/NginxControl.vue:26 msgid "Nginx reloaded successfully" @@ -1596,7 +1601,7 @@ msgstr "Nginx 重啟成功" #: src/views/preference/AuthSettings.vue:136 #: src/views/preference/CertSettings.vue:70 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97 -#: src/views/site/ngx_conf/LocationEditor.vue:90 +#: src/views/site/ngx_conf/LocationEditor.vue:88 #: src/views/site/site_list/SiteList.vue:143 #: src/views/stream/StreamList.vue:163 msgid "No" @@ -1709,6 +1714,10 @@ msgstr "OpenAI" msgid "Or" msgstr "或" +#: src/views/preference/components/TOTP.vue:127 +msgid "Or enter the secret: %{secret}" +msgstr "" + #: src/views/config/components/Rename.vue:68 msgid "Original name" msgstr "原始名稱" @@ -1717,7 +1726,7 @@ msgstr "原始名稱" msgid "OS" msgstr "作業系統" -#: src/views/dashboard/ServerAnalytic.vue:193 +#: src/views/dashboard/ServerAnalytic.vue:189 msgid "OS:" msgstr "作業系統:" @@ -1769,14 +1778,15 @@ msgid "Password length cannot exceed 20 characters" msgstr "密碼長度不能超過 20 個字元" #: src/views/config/ConfigEditor.vue:263 -#: src/views/site/ngx_conf/LocationEditor.vue:111 -#: src/views/site/ngx_conf/LocationEditor.vue:139 +#: src/views/site/ngx_conf/LocationEditor.vue:109 +#: src/views/site/ngx_conf/LocationEditor.vue:137 msgid "Path" msgstr "路徑" #: src/constants/errors/cert.ts:7 src/constants/errors/config.ts:2 +#, fuzzy msgid "Path: {0} is not under the nginx conf dir: {1}" -msgstr "" +msgstr "簽章路徑不在 Nginx 設定檔資料夾下" #: src/constants/errors/cert.ts:6 msgid "Payload resource is nil" @@ -1795,8 +1805,9 @@ msgid "Performing core upgrade" msgstr "正在執行核心升級" #: src/constants/errors/crypto.ts:2 +#, fuzzy msgid "Plain text is empty" -msgstr "" +msgstr "檔名空白" #: src/views/preference/components/AddPasskey.vue:69 msgid "" @@ -1866,7 +1877,7 @@ msgid "" "Please note that the unit of time configurations below are all in seconds." msgstr "請注意,以下時間配置單位均為秒。" -#: src/views/environment/Environment.vue:48 +#: src/views/environment/Environment.vue:58 #, fuzzy msgid "Please select at least one node to upgrade" msgstr "請至少選擇一個節點!" @@ -1927,11 +1938,11 @@ msgid "Public Security Number" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:387 +#: src/views/dashboard/ServerAnalytic.vue:383 msgid "Reads" msgstr "讀取" -#: src/views/dashboard/ServerAnalytic.vue:338 +#: src/views/dashboard/ServerAnalytic.vue:334 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "接收" @@ -1950,15 +1961,15 @@ msgid "Recovered Successfully" msgstr "恢復成功" #: src/components/TwoFA/Authorization.vue:89 -#: src/views/preference/components/TOTP.vue:172 +#: src/views/preference/components/TOTP.vue:155 msgid "Recovery" msgstr "恢復" -#: src/views/preference/components/TOTP.vue:98 +#: src/views/preference/components/TOTP.vue:80 msgid "Recovery Code" msgstr "恢復碼" -#: src/views/preference/components/TOTP.vue:107 +#: src/views/preference/components/TOTP.vue:89 msgid "Recovery Code:" msgstr "恢復碼:" @@ -2132,7 +2143,7 @@ msgstr "請求參數錯誤" msgid "Reset" msgstr "重設" -#: src/views/preference/components/TOTP.vue:127 +#: src/views/preference/components/TOTP.vue:109 msgid "Reset 2FA" msgstr "重置多重因素驗證" @@ -2223,7 +2234,7 @@ msgstr "儲存成功" msgid "Saved successfully" msgstr "儲存成功" -#: src/views/preference/components/TOTP.vue:88 +#: src/views/preference/components/TOTP.vue:72 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "用手機掃描二維碼將賬戶添加到應用程序中。" @@ -2231,7 +2242,7 @@ msgstr "用手機掃描二維碼將賬戶添加到應用程序中。" msgid "SDK" msgstr "SDK" -#: src/views/preference/components/TOTP.vue:144 +#: src/views/preference/components/TOTP.vue:124 msgid "Secret has been copied" msgstr "" @@ -2243,12 +2254,12 @@ msgstr "選擇器" msgid "Self Check" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:348 +#: src/views/dashboard/ServerAnalytic.vue:344 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Send" msgstr "傳送" -#: src/views/dashboard/ServerAnalytic.vue:179 +#: src/views/dashboard/ServerAnalytic.vue:175 msgid "Server Info" msgstr "伺服器資訊" @@ -2289,14 +2300,14 @@ msgstr "使用 HTTP01 挑戰提供者" #: src/constants/errors/nginx_log.ts:8 msgid "" -"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/constants/errors/nginx_log.ts:7 msgid "" -"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://" -"nginxui.com/guide/config-nginx.html for more information" +"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui." +"com/guide/config-nginx.html for more information" msgstr "" #: src/components/SensitiveString/SensitiveString.vue:40 @@ -2304,16 +2315,18 @@ msgid "Show" msgstr "顯示" #: src/views/other/Login.vue:240 +#, fuzzy msgid "Sign in with a passkey" -msgstr "" +msgstr "使用通行密鑰認證" #: src/views/site/ngx_conf/directive/DirectiveAdd.vue:65 msgid "Single Directive" msgstr "單一指令" #: src/routes/index.ts:71 src/views/site/site_category/SiteCategory.vue:10 +#, fuzzy msgid "Site Categories" -msgstr "" +msgstr "類別" #: src/constants/errors/site.ts:4 #, fuzzy @@ -2339,12 +2352,14 @@ msgid "Sites List" msgstr "網站列表" #: src/constants/errors/self_check.ts:10 +#, fuzzy msgid "Sites-available directory not exist" -msgstr "" +msgstr "目錄" #: src/constants/errors/self_check.ts:11 +#, fuzzy msgid "Sites-enabled directory not exist" -msgstr "" +msgstr "目錄" #: src/views/certificate/CertificateEditor.vue:211 msgid "SSL Certificate Content" @@ -2383,8 +2398,8 @@ msgstr "狀態" msgid "Stopped" msgstr "已停止" -#: src/views/dashboard/ServerAnalytic.vue:254 -#: src/views/dashboard/ServerAnalytic.vue:255 +#: src/views/dashboard/ServerAnalytic.vue:250 +#: src/views/dashboard/ServerAnalytic.vue:251 msgid "Storage" msgstr "儲存空間" @@ -2394,8 +2409,9 @@ msgid "Streams Directory" msgstr "目錄" #: src/constants/errors/self_check.ts:12 +#, fuzzy msgid "Streams-available directory not exist" -msgstr "" +msgstr "目錄" #: src/constants/errors/self_check.ts:13 #, fuzzy @@ -2414,8 +2430,8 @@ msgid "" "guide/nginx-proxy-example.html" msgstr "" -#: src/views/dashboard/ServerAnalytic.vue:240 -#: src/views/dashboard/ServerAnalytic.vue:241 +#: src/views/dashboard/ServerAnalytic.vue:236 +#: src/views/dashboard/ServerAnalytic.vue:237 msgid "Swap" msgstr "交換空間" @@ -2580,7 +2596,7 @@ msgid "" "hyphens, dashes, colons, and dots." msgstr "伺服器名稱應僅包含字母、Unicode、數字、連字符、破折號和點。" -#: src/views/preference/components/TOTP.vue:106 +#: src/views/preference/components/TOTP.vue:88 msgid "" "The recovery code is only displayed once, please save it in a safe place." msgstr "恢復碼僅顯示一次,請將其保存在安全的地方。" @@ -2672,7 +2688,7 @@ msgstr "提示" msgid "Title" msgstr "標題" -#: src/views/preference/components/TOTP.vue:87 +#: src/views/preference/components/TOTP.vue:71 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -2712,11 +2728,11 @@ msgid "Total %{total} item" msgid_plural "Total %{total} items" msgstr[0] "" -#: src/views/preference/components/TOTP.vue:85 +#: src/views/preference/components/TOTP.vue:69 msgid "TOTP" msgstr "" -#: src/views/preference/components/TOTP.vue:86 +#: src/views/preference/components/TOTP.vue:70 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -2756,7 +2772,7 @@ msgstr "更新時間" msgid "Updated successfully" msgstr "更新成功" -#: src/routes/index.ts:297 src/views/environment/Environment.vue:56 +#: src/routes/index.ts:297 src/views/environment/Environment.vue:66 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226 msgid "Upgrade" msgstr "升級" @@ -2777,7 +2793,7 @@ msgstr "正在升級 Nginx UI,請稍候..." msgid "Upstream Name" msgstr "Upstream 名稱" -#: src/views/dashboard/ServerAnalytic.vue:183 +#: src/views/dashboard/ServerAnalytic.vue:179 msgid "Uptime:" msgstr "運作時間:" @@ -2884,7 +2900,7 @@ msgid "" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:37 -#: src/views/dashboard/ServerAnalytic.vue:377 +#: src/views/dashboard/ServerAnalytic.vue:373 msgid "Writes" msgstr "寫" @@ -2899,7 +2915,7 @@ msgstr "將憑證寫入磁碟" #: src/views/preference/AuthSettings.vue:135 #: src/views/preference/CertSettings.vue:69 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96 -#: src/views/site/ngx_conf/LocationEditor.vue:89 +#: src/views/site/ngx_conf/LocationEditor.vue:87 msgid "Yes" msgstr "是的" @@ -2918,8 +2934,9 @@ msgid "" msgstr "" #: src/views/preference/components/Passkey.vue:75 +#, fuzzy msgid "Your passkeys" -msgstr "" +msgstr "新增通行密鑰" #~ msgid "Directory" #~ msgstr "目錄" diff --git a/app/src/views/preference/components/TOTP.vue b/app/src/views/preference/components/TOTP.vue index b8d551416..1673c7460 100644 --- a/app/src/views/preference/components/TOTP.vue +++ b/app/src/views/preference/components/TOTP.vue @@ -70,7 +70,7 @@ function reset2FA() {

{{ $gettext('TOTP is a two-factor authentication method that uses a time-based one-time password algorithm.') }}

{{ $gettext('To enable it, you need to install the Google or Microsoft Authenticator app on your mobile phone.') }}

{{ $gettext('Scan the QR code with your mobile phone to add the account to the app.') }}

- +

{{ $gettext('Current account is enabled TOTP.') }}

@@ -117,15 +117,15 @@ function reset2FA() { :value="generatedUrl" :size="256" /> -
+
- - {{ copied ? $gettext('Secret has been copied') - : $gettext('Can\'t scan? Use text key binding') }} - + + + {{ $gettext('Or enter the secret: %{secret}', { secret }) }} +
From 0d1f56a43e6c3dffe7adffd004b7bade6f7648ab Mon Sep 17 00:00:00 2001 From: Hintay Date: Sun, 9 Feb 2025 23:36:28 +0900 Subject: [PATCH 03/12] feat: new recovery codes --- api/user/2fa.go | 17 +- api/user/otp.go | 53 ++--- api/user/recovery.go | 81 +++++++ api/user/router.go | 10 +- app/src/api/2fa.ts | 6 +- app/src/api/otp.ts | 7 +- app/src/api/recovery.ts | 27 +++ app/src/components/TwoFA/Authorization.vue | 4 +- app/src/language/ar/app.po | 195 ++++++++++++----- app/src/language/en/app.po | 177 ++++++++++----- app/src/language/es/app.po | 199 ++++++++++++----- app/src/language/fr_FR/app.po | 172 ++++++++++----- app/src/language/ko_KR/app.po | 177 ++++++++++----- app/src/language/messages.pot | 153 ++++++++----- app/src/language/ru_RU/app.po | 199 ++++++++++++----- app/src/language/tr_TR/app.po | 202 +++++++++++++----- app/src/language/vi_VN/app.po | 177 ++++++++++----- app/src/language/zh_CN/app.po | 190 +++++++++++----- app/src/language/zh_TW/app.po | 194 ++++++++++++----- app/src/views/preference/AuthSettings.vue | 30 ++- .../preference/components/RecoveryCodes.vue | 172 +++++++++++++++ app/src/views/preference/components/TOTP.vue | 97 +++------ model/user.go | 32 ++- query/auths.gen.go | 24 ++- 24 files changed, 1882 insertions(+), 713 deletions(-) create mode 100644 api/user/recovery.go create mode 100644 app/src/api/recovery.ts create mode 100644 app/src/views/preference/components/RecoveryCodes.vue diff --git a/api/user/2fa.go b/api/user/2fa.go index d9900a024..df26b12b5 100644 --- a/api/user/2fa.go +++ b/api/user/2fa.go @@ -2,6 +2,10 @@ package user import ( "encoding/base64" + "net/http" + "strings" + "time" + "github.com/0xJacky/Nginx-UI/api" "github.com/0xJacky/Nginx-UI/internal/cache" "github.com/0xJacky/Nginx-UI/internal/passkey" @@ -12,15 +16,14 @@ import ( "github.com/go-webauthn/webauthn/webauthn" "github.com/google/uuid" "github.com/uozi-tech/cosy" - "net/http" - "strings" - "time" ) type Status2FA struct { - Enabled bool `json:"enabled"` - OTPStatus bool `json:"otp_status"` - PasskeyStatus bool `json:"passkey_status"` + Enabled bool `json:"enabled"` + OTPStatus bool `json:"otp_status"` + PasskeyStatus bool `json:"passkey_status"` + RecoveryCodesGenerated bool `json:"recovery_codes_generated"` + RecoveryCodesViewed bool `json:"recovery_codes_viewed"` } func get2FAStatus(c *gin.Context) (status Status2FA) { @@ -31,6 +34,8 @@ func get2FAStatus(c *gin.Context) (status Status2FA) { status.OTPStatus = userPtr.EnabledOTP() status.PasskeyStatus = userPtr.EnabledPasskey() && passkey.Enabled() status.Enabled = status.OTPStatus || status.PasskeyStatus + status.RecoveryCodesGenerated = userPtr.RecoveryCodeGenerated() + status.RecoveryCodesViewed = userPtr.RecoveryCodeViewed() } return } diff --git a/api/user/otp.go b/api/user/otp.go index 66071ea6e..5211091c1 100644 --- a/api/user/otp.go +++ b/api/user/otp.go @@ -1,15 +1,15 @@ package user import ( - "bytes" - "crypto/sha1" - "encoding/hex" + "encoding/json" "fmt" "net/http" "strings" + "time" "github.com/0xJacky/Nginx-UI/api" "github.com/0xJacky/Nginx-UI/internal/crypto" + "github.com/0xJacky/Nginx-UI/model" "github.com/0xJacky/Nginx-UI/query" "github.com/0xJacky/Nginx-UI/settings" "github.com/gin-gonic/gin" @@ -59,22 +59,22 @@ func EnrollTOTP(c *gin.Context) { return } - var json struct { + var twoFA struct { Secret string `json:"secret" binding:"required"` Passcode string `json:"passcode" binding:"required"` } - if !cosy.BindAndValid(c, &json) { + if !cosy.BindAndValid(c, &twoFA) { return } - if ok := totp.Validate(json.Passcode, json.Secret); !ok { + if ok := totp.Validate(twoFA.Passcode, twoFA.Secret); !ok { c.JSON(http.StatusNotAcceptable, gin.H{ "message": "Invalid passcode", }) return } - ciphertext, err := crypto.AesEncrypt([]byte(json.Secret)) + ciphertext, err := crypto.AesEncrypt([]byte(twoFA.Secret)) if err != nil { api.ErrHandler(c, err) return @@ -87,37 +87,30 @@ func EnrollTOTP(c *gin.Context) { return } - recoveryCode := sha1.Sum(ciphertext) - - c.JSON(http.StatusOK, gin.H{ - "message": "ok", - "recovery_code": hex.EncodeToString(recoveryCode[:]), - }) -} - -func ResetOTP(c *gin.Context) { - var json struct { - RecoveryCode string `json:"recovery_code"` - } - if !cosy.BindAndValid(c, &json) { - return - } - recoverCode, err := hex.DecodeString(json.RecoveryCode) + t := time.Now() + recoveryCodes := model.RecoveryCodes{Codes: generateRecoveryCodes(16), LastViewed: &t} + codesJson, err := json.Marshal(&recoveryCodes) if err != nil { api.ErrHandler(c, err) return } - cUser := api.CurrentUser(c) - k := sha1.Sum(cUser.OTPSecret) - if !bytes.Equal(k[:], recoverCode) { - c.JSON(http.StatusBadRequest, gin.H{ - "message": "Invalid recovery code", - }) + + _, err = u.Where(u.ID.Eq(cUser.ID)).Update(u.RecoveryCodes, codesJson) + if err != nil { + api.ErrHandler(c, err) return } + c.JSON(http.StatusOK, RecoveryCodesResponse{ + Message: "ok", + RecoveryCodes: recoveryCodes, + }) +} + +func ResetOTP(c *gin.Context) { + cUser := api.CurrentUser(c) u := query.User - _, err = u.Where(u.ID.Eq(cUser.ID)).UpdateSimple(u.OTPSecret.Null()) + _, err := u.Where(u.ID.Eq(cUser.ID)).UpdateSimple(u.OTPSecret.Null(), u.RecoveryCodes.Null()) if err != nil { api.ErrHandler(c, err) return diff --git a/api/user/recovery.go b/api/user/recovery.go new file mode 100644 index 000000000..8de41c04f --- /dev/null +++ b/api/user/recovery.go @@ -0,0 +1,81 @@ +package user + +import ( + "encoding/json" + "fmt" + "math/rand" + "net/http" + "time" + + "github.com/0xJacky/Nginx-UI/api" + "github.com/0xJacky/Nginx-UI/model" + "github.com/0xJacky/Nginx-UI/query" + "github.com/gin-gonic/gin" +) + +type RecoveryCodesResponse struct { + Message string `json:"message"` + model.RecoveryCodes +} + +func generateRecoveryCode() string { + // generate recovery code, 10 hex numbers + return fmt.Sprintf("%010x", rand.Intn(0x10000000000)) +} + +func generateRecoveryCodes(count int) []model.RecoveryCode { + recoveryCodes := make([]model.RecoveryCode, count) + for i := 0; i < count; i++ { + recoveryCodes[i].Code = generateRecoveryCode() + } + return recoveryCodes +} + +func ViewRecoveryCodes(c *gin.Context) { + user := api.CurrentUser(c) + + u := query.User + user, err := u.Where(u.ID.Eq(user.ID)).First() + if err != nil { + api.ErrHandler(c, err) + return + } + + // update last viewed time + t := time.Now() + user.RecoveryCodes.LastViewed = &t + _, err = u.Where(u.ID.Eq(user.ID)).Updates(user) + if err != nil { + api.ErrHandler(c, err) + return + } + + c.JSON(http.StatusOK, RecoveryCodesResponse{ + Message: "ok", + RecoveryCodes: user.RecoveryCodes, + }) +} + +func GenerateRecoveryCodes(c *gin.Context) { + user := api.CurrentUser(c) + + t := time.Now() + recoveryCodes := model.RecoveryCodes{Codes: generateRecoveryCodes(16), LastViewed: &t} + codesJson, err := json.Marshal(&recoveryCodes) + if err != nil { + api.ErrHandler(c, err) + return + } + + u := query.User + _, err = u.Where(u.ID.Eq(user.ID)).Update(u.RecoveryCodes, codesJson) + if err != nil { + api.ErrHandler(c, err) + return + } + + c.JSON(http.StatusOK, RecoveryCodesResponse{ + Message: "ok", + RecoveryCodes: recoveryCodes, + }) +} diff --git a/api/user/router.go b/api/user/router.go index 0222697b5..684441cd6 100644 --- a/api/user/router.go +++ b/api/user/router.go @@ -1,6 +1,7 @@ package user import ( + "github.com/0xJacky/Nginx-UI/internal/middleware" "github.com/gin-gonic/gin" ) @@ -26,7 +27,6 @@ func InitUserRouter(r *gin.RouterGroup) { r.GET("/otp_secret", GenerateTOTP) r.POST("/otp_enroll", EnrollTOTP) - r.POST("/otp_reset", ResetOTP) r.GET("/begin_passkey_register", BeginPasskeyRegistration) r.POST("/finish_passkey_register", FinishPasskeyRegistration) @@ -34,4 +34,12 @@ func InitUserRouter(r *gin.RouterGroup) { r.GET("/passkeys", GetPasskeyList) r.POST("/passkeys/:id", UpdatePasskey) r.DELETE("/passkeys/:id", DeletePasskey) + + o := r.Group("", middleware.RequireSecureSession()) + { + o.GET("/otp_reset", ResetOTP) + + o.GET("/recovery_codes", ViewRecoveryCodes) + o.GET("/recovery_codes_generate", GenerateRecoveryCodes) + } } diff --git a/app/src/api/2fa.ts b/app/src/api/2fa.ts index 6f13de5dd..e5282a0af 100644 --- a/app/src/api/2fa.ts +++ b/app/src/api/2fa.ts @@ -1,14 +1,16 @@ import type { AuthenticationResponseJSON } from '@simplewebauthn/browser' import http from '@/lib/http' -export interface TwoFAStatusResponse { +export interface TwoFAStatus { enabled: boolean otp_status: boolean passkey_status: boolean + recovery_codes_generated: boolean + recovery_codes_viewed: boolean } const twoFA = { - status(): Promise { + status(): Promise { return http.get('/2fa_status') }, start_secure_session_by_otp(passcode: string, recovery_code: string): Promise<{ session_id: string }> { diff --git a/app/src/api/otp.ts b/app/src/api/otp.ts index 0bbe2c63b..efa30c6c4 100644 --- a/app/src/api/otp.ts +++ b/app/src/api/otp.ts @@ -1,3 +1,4 @@ +import type { RecoveryCodesResponse } from '@/api/recovery' import http from '@/lib/http' export interface OTPGenerateSecretResponse { @@ -9,11 +10,11 @@ const otp = { generate_secret(): Promise { return http.get('/otp_secret') }, - enroll_otp(secret: string, passcode: string): Promise<{ recovery_code: string }> { + enroll_otp(secret: string, passcode: string): Promise { return http.post('/otp_enroll', { secret, passcode }) }, - reset(recovery_code: string) { - return http.post('/otp_reset', { recovery_code }) + reset() { + return http.get('/otp_reset') }, } diff --git a/app/src/api/recovery.ts b/app/src/api/recovery.ts new file mode 100644 index 000000000..b07c25b0f --- /dev/null +++ b/app/src/api/recovery.ts @@ -0,0 +1,27 @@ +import http from '@/lib/http' + +export interface RecoveryCode { + code: string + used_time?: number +} + +export interface RecoveryCodes { + codes: RecoveryCode[] + last_viewed?: number + last_downloaded?: number +} + +export interface RecoveryCodesResponse extends RecoveryCodes { + message: string +} + +const recovery = { + generate(): Promise { + return http.get('/recovery_codes_generate') + }, + view(): Promise { + return http.get('/recovery_codes') + }, +} + +export default recovery diff --git a/app/src/components/TwoFA/Authorization.vue b/app/src/components/TwoFA/Authorization.vue index d240f72d8..0eac5c7d3 100644 --- a/app/src/components/TwoFA/Authorization.vue +++ b/app/src/components/TwoFA/Authorization.vue @@ -1,5 +1,5 @@ diff --git a/model/user.go b/model/user.go index bb4cdf206..e814ee182 100644 --- a/model/user.go +++ b/model/user.go @@ -1,19 +1,33 @@ package model import ( + "time" + "github.com/go-webauthn/webauthn/webauthn" "github.com/spf13/cast" "gorm.io/gorm" ) +type RecoveryCode struct { + Code string `json:"code"` + UsedTime *time.Time `json:"used_time,omitempty" gorm:"type:datetime;default:null"` +} + +type RecoveryCodes struct { + Codes []RecoveryCode `json:"codes"` + LastViewed *time.Time `json:"last_viewed,omitempty" gorm:"type:datetime;default:null"` + LastDownloaded *time.Time `json:"last_downloaded,omitempty" gorm:"type:datetime;default:null"` +} + type User struct { Model - Name string `json:"name" cosy:"add:max=20;update:omitempty,max=20;list:fussy;db_unique"` - Password string `json:"-" cosy:"json:password;add:required,max=20;update:omitempty,max=20"` - Status bool `json:"status" gorm:"default:1"` - OTPSecret []byte `json:"-" gorm:"type:blob"` - EnabledTwoFA bool `json:"enabled_2fa" gorm:"-"` + Name string `json:"name" cosy:"add:max=20;update:omitempty,max=20;list:fussy;db_unique"` + Password string `json:"-" cosy:"json:password;add:required,max=20;update:omitempty,max=20"` + Status bool `json:"status" gorm:"default:1"` + OTPSecret []byte `json:"-" gorm:"type:blob"` + RecoveryCodes RecoveryCodes `json:"-" gorm:"serializer:json"` + EnabledTwoFA bool `json:"enabled_2fa" gorm:"-"` } type AuthToken struct { @@ -35,6 +49,14 @@ func (u *User) EnabledOTP() bool { return len(u.OTPSecret) != 0 } +func (u *User) RecoveryCodeGenerated() bool { + return len(u.RecoveryCodes.Codes) > 0 +} + +func (u *User) RecoveryCodeViewed() bool { + return u.RecoveryCodes.LastViewed != nil +} + func (u *User) EnabledPasskey() bool { var passkeys Passkey db.Where("user_id", u.ID).Limit(1).Find(&passkeys) diff --git a/query/auths.gen.go b/query/auths.gen.go index 3a5d1701b..1dda7ce44 100644 --- a/query/auths.gen.go +++ b/query/auths.gen.go @@ -36,6 +36,7 @@ func newUser(db *gorm.DB, opts ...gen.DOOption) user { _user.Password = field.NewString(tableName, "password") _user.Status = field.NewBool(tableName, "status") _user.OTPSecret = field.NewBytes(tableName, "otp_secret") + _user.RecoveryCodes = field.NewField(tableName, "recovery_codes") _user.fillFieldMap() @@ -45,15 +46,16 @@ func newUser(db *gorm.DB, opts ...gen.DOOption) user { type user struct { userDo - ALL field.Asterisk - ID field.Uint64 - CreatedAt field.Time - UpdatedAt field.Time - DeletedAt field.Field - Name field.String - Password field.String - Status field.Bool - OTPSecret field.Bytes + ALL field.Asterisk + ID field.Uint64 + CreatedAt field.Time + UpdatedAt field.Time + DeletedAt field.Field + Name field.String + Password field.String + Status field.Bool + OTPSecret field.Bytes + RecoveryCodes field.Field fieldMap map[string]field.Expr } @@ -78,6 +80,7 @@ func (u *user) updateTableName(table string) *user { u.Password = field.NewString(table, "password") u.Status = field.NewBool(table, "status") u.OTPSecret = field.NewBytes(table, "otp_secret") + u.RecoveryCodes = field.NewField(table, "recovery_codes") u.fillFieldMap() @@ -94,7 +97,7 @@ func (u *user) GetFieldByName(fieldName string) (field.OrderExpr, bool) { } func (u *user) fillFieldMap() { - u.fieldMap = make(map[string]field.Expr, 8) + u.fieldMap = make(map[string]field.Expr, 9) u.fieldMap["id"] = u.ID u.fieldMap["created_at"] = u.CreatedAt u.fieldMap["updated_at"] = u.UpdatedAt @@ -103,6 +106,7 @@ func (u *user) fillFieldMap() { u.fieldMap["password"] = u.Password u.fieldMap["status"] = u.Status u.fieldMap["otp_secret"] = u.OTPSecret + u.fieldMap["recovery_codes"] = u.RecoveryCodes } func (u user) clone(db *gorm.DB) user { From c7731667f4f53be18cf6a045e8d6c9fc29eb4943 Mon Sep 17 00:00:00 2001 From: Hintay Date: Mon, 10 Feb 2025 00:02:12 +0900 Subject: [PATCH 04/12] fix: codes not clean if reset TOTP --- app/src/views/preference/components/RecoveryCodes.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/views/preference/components/RecoveryCodes.vue b/app/src/views/preference/components/RecoveryCodes.vue index 1e341dcf8..93debbf25 100644 --- a/app/src/views/preference/components/RecoveryCodes.vue +++ b/app/src/views/preference/components/RecoveryCodes.vue @@ -96,7 +96,7 @@ function handlePopOpenChange(visible: boolean) {
- +